pax_global_header00006660000000000000000000000064145023213230014505gustar00rootroot0000000000000052 comment=0f24e560d36f1c6e78f908ac9bf415db388255a8 Atomes-GNU-1.1.12/000077500000000000000000000000001450232132300134465ustar00rootroot00000000000000Atomes-GNU-1.1.12/AUTHORS000066400000000000000000000007411450232132300145200ustar00rootroot00000000000000Atomes 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.12/COPYING000066400000000000000000001034051450232132300145040ustar00rootroot00000000000000 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.12/ChangeLog000066400000000000000000000104361450232132300152240ustar00rootroot000000000000002023-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.12/INSTALL000066400000000000000000000366261450232132300145140ustar00rootroot00000000000000Installation 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.12/Makefile.am000066400000000000000000000056701450232132300155120ustar00rootroot00000000000000## 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.12/Makefile.in000066400000000000000000000764631450232132300155330ustar00rootroot00000000000000# 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.12/NEWS000066400000000000000000000003671450232132300141530ustar00rootroot00000000000000Welcome 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.12/README.md000066400000000000000000000111201450232132300147200ustar00rootroot00000000000000# 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.12/aclocal.m4000066400000000000000000001533111450232132300153120ustar00rootroot00000000000000# 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.12/atomes-completion.sh000066400000000000000000000012401450232132300174360ustar00rootroot00000000000000# 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.12/atomes.1.gz000066400000000000000000000022131450232132300154350ustar00rootroot00000000000000L`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.12/atomes.spec000066400000000000000000000062651450232132300156230ustar00rootroot00000000000000Name: atomes %global upname Atomes-GNU Version: 1.1.12 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 * 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.12/autom4te.cache/000077500000000000000000000000001450232132300162525ustar00rootroot00000000000000Atomes-GNU-1.1.12/autom4te.cache/output.0000066400000000000000000007642571450232132300177200ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.12. @%:@ @%:@ 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.12' PACKAGE_STRING='atomes 1.1.12' 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.12 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.12:";; 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.12 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.12, 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.12' 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 12" >>confdefs.h ATOMES_PATCH_VERSION=12 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.12, 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.12 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.12/autom4te.cache/output.1000066400000000000000000007642621450232132300177150ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.12. @%:@ @%:@ 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.12' PACKAGE_STRING='atomes 1.1.12' 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.12 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.12:";; 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.12 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.12, 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.12' 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 12" >>confdefs.h ATOMES_PATCH_VERSION=12 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.12, 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.12 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.12/autom4te.cache/output.2000066400000000000000000007642571450232132300177220ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.12. @%:@ @%:@ 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.12' PACKAGE_STRING='atomes 1.1.12' 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.12 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.12:";; 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.12 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.12, 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.12' 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 12" >>confdefs.h ATOMES_PATCH_VERSION=12 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.12, 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.12 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.12/autom4te.cache/requests000066400000000000000000000263611450232132300200600ustar00rootroot00000000000000# 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' ], { 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, '_AM_IF_OPTION' => 1, 'PKG_NOARCH_INSTALLDIR' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, '_AM_AUTOCONF_VERSION' => 1, 'm4_pattern_forbid' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_RUN_LOG' => 1, 'AM_SET_DEPDIR' => 1, 'include' => 1, 'AM_PROG_INSTALL_SH' => 1, 'AM_MISSING_HAS_RUN' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_SUBST_NOTMAKE' => 1, '_AM_DEPENDENCIES' => 1, '_AM_PROG_TAR' => 1, 'PKG_INSTALLDIR' => 1, 'PKG_CHECK_MODULES' => 1, 'PKG_CHECK_MODULES_STATIC' => 1, 'AC_DEFUN_ONCE' => 1, 'AM_PROG_CC_C_O' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AM_MAKE_INCLUDE' => 1, 'PKG_CHECK_VAR' => 1, 'AM_SILENT_RULES' => 1, 'AM_SANITY_CHECK' => 1, 'm4_include' => 1, '_AM_MANGLE_OPTION' => 1, 'AM_DEP_TRACK' => 1, 'AM_SET_LEADING_DOT' => 1, '_AM_PROG_CC_C_O' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_CONDITIONAL' => 1, '_m4_warn' => 1, '_AM_SET_OPTION' => 1, 'AC_CONFIG_MACRO_DIR' => 1, '_PKG_SHORT_ERRORS_SUPPORTED' => 1, 'PKG_HAVE_DEFINE_WITH_MODULES' => 1, '_AM_SET_OPTIONS' => 1, 'AX_CHECK_COMPILER_FLAGS' => 1, 'PKG_CHECK_EXISTS' => 1, 'AM_PROG_INSTALL_STRIP' => 1, 'PKG_PROG_PKG_CONFIG' => 1, 'PKG_HAVE_WITH_MODULES' => 1, 'm4_pattern_allow' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AM_MISSING_PROG' => 1, 'AC_DEFUN' => 1, 'PKG_WITH_MODULES' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AU_DEFUN' => 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' ], { '_m4_warn' => 1, 'AM_XGETTEXT_OPTION' => 1, 'AC_CANONICAL_HOST' => 1, 'AM_CONDITIONAL' => 1, 'AC_SUBST_TRACE' => 1, '_AM_COND_ELSE' => 1, 'LT_SUPPORTED_TAG' => 1, 'AM_PROG_MKDIR_P' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'IT_PROG_INTLTOOL' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'm4_include' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_PROG_F77_C_O' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AM_NLS' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AC_FC_PP_DEFINE' => 1, '_AM_SUBST_NOTMAKE' => 1, 'LT_INIT' => 1, 'm4_pattern_allow' => 1, 'AC_CONFIG_FILES' => 1, 'AM_PROG_MOC' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'sinclude' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_SUBST' => 1, '_AM_COND_ENDIF' => 1, 'include' => 1, 'AC_CANONICAL_BUILD' => 1, 'AH_OUTPUT' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'm4_pattern_forbid' => 1, 'AM_POT_TOOLS' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'm4_sinclude' => 1, 'AM_MAINTAINER_MODE' => 1, 'AC_INIT' => 1, 'GTK_DOC_CHECK' => 1, 'AC_LIBSOURCE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_CONFIG_LINKS' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_SILENT_RULES' => 1, 'AM_PATH_GUILE' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AM_PROG_AR' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AC_FC_FREEFORM' => 1, 'AM_PROG_LIBTOOL' => 1, 'AC_FC_SRCEXT' => 1, '_AM_COND_IF' => 1, 'AM_PROG_CC_C_O' => 1 } ], 'Autom4te::Request' ), bless( [ '2', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.ac' ], { 'include' => 1, 'AC_CANONICAL_BUILD' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AH_OUTPUT' => 1, 'm4_pattern_forbid' => 1, 'AM_POT_TOOLS' => 1, 'GTK_DOC_CHECK' => 1, 'AC_INIT' => 1, 'm4_sinclude' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AM_MAINTAINER_MODE' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_LIBSOURCE' => 1, 'AM_PROG_CXX_C_O' => 1, 'AC_CONFIG_LINKS' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_SILENT_RULES' => 1, 'AM_PATH_GUILE' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AM_PROG_AR' => 1, 'AC_FC_FREEFORM' => 1, 'AM_PROG_CC_C_O' => 1, '_AM_COND_IF' => 1, 'AC_FC_SRCEXT' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_CONDITIONAL' => 1, 'AC_CANONICAL_HOST' => 1, 'AM_XGETTEXT_OPTION' => 1, '_m4_warn' => 1, 'AC_SUBST_TRACE' => 1, 'LT_SUPPORTED_TAG' => 1, '_AM_COND_ELSE' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AM_PROG_MKDIR_P' => 1, 'IT_PROG_INTLTOOL' => 1, 'AM_PROG_FC_C_O' => 1, 'm4_include' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_CANONICAL_TARGET' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AC_FC_PP_DEFINE' => 1, 'AM_NLS' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_CONFIG_FILES' => 1, 'm4_pattern_allow' => 1, 'LT_INIT' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_CONFIG_HEADERS' => 1, 'AM_PROG_MOC' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'sinclude' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_PROG_LIBTOOL' => 1, '_AM_COND_ENDIF' => 1, 'AC_SUBST' => 1 } ], 'Autom4te::Request' ) ); Atomes-GNU-1.1.12/autom4te.cache/traces.0000066400000000000000000001572231450232132300176260ustar00rootroot00000000000000m4trace:/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.12/autom4te.cache/traces.1000066400000000000000000001114741450232132300176250ustar00rootroot00000000000000m4trace: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], [12]) 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.12/autom4te.cache/traces.2000066400000000000000000001114741450232132300176260ustar00rootroot00000000000000m4trace: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], [12]) 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.12/compile000077500000000000000000000163501450232132300150310ustar00rootroot00000000000000#! /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.12/config.guess000077500000000000000000001412051450232132300157710ustar00rootroot00000000000000#!/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.12/config.h.in000066400000000000000000000024221450232132300154710ustar00rootroot00000000000000/* 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.12/config.sub000077500000000000000000001051211450232132300154310ustar00rootroot00000000000000#!/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.12/configure000077500000000000000000007625111450232132300153710ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for atomes 1.1.12. # # 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.12' PACKAGE_STRING='atomes 1.1.12' 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.12 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.12:";; 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.12 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.12, 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.12' 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 12" >>confdefs.h ATOMES_PATCH_VERSION=12 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.12, 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.12 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.12/configure.ac000066400000000000000000000121261450232132300157360ustar00rootroot00000000000000dnl 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, 12) 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.12/data/000077500000000000000000000000001450232132300143575ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/Makefile.am000066400000000000000000000031431450232132300164140ustar00rootroot00000000000000## 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.12/data/Makefile.in000066400000000000000000000327151450232132300164340ustar00rootroot00000000000000# 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.12/data/library/000077500000000000000000000000001450232132300160235ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/force_fields/000077500000000000000000000000001450232132300204475ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/force_fields/amber94.ffl000066400000000000000000001607311450232132300224130ustar00rootroot00000000000000 AMBER 94 k-calories per mol 55 83 0 0 191 0 81 0 31 0 50 Atomes-GNU-1.1.12/data/library/force_fields/amber96.ffl000066400000000000000000001610171450232132300224130ustar00rootroot00000000000000 AMBER 96 k-calories per mol 54 83 0 0 191 0 81 0 31 0 51 Atomes-GNU-1.1.12/data/library/force_fields/amber98.ffl000066400000000000000000001613111450232132300224120ustar00rootroot00000000000000 AMBER 98 k-calories per mol 54 83 0 0 191 0 83 0 31 0 51 Atomes-GNU-1.1.12/data/library/force_fields/amber99.ffl000066400000000000000000002512761450232132300224250ustar00rootroot00000000000000 AMBER 99 k-calories per mol 64 116 0 0 281 0 164 0 38 0 62 Atomes-GNU-1.1.12/data/library/force_fields/cff91.ffl000066400000000000000000007233661450232132300220710ustar00rootroot00000000000000 CFF 91 k-calories per mol 93 667 58 0 330 155 216 294 0 70 40 Atomes-GNU-1.1.12/data/library/force_fields/charmm-carb_36.ffl000066400000000000000000011044421450232132300236320ustar00rootroot00000000000000 CHARMM 36 carbohydrates k-calories per mol 59 153 0 0 438 0 1354 0 14 0 57 Atomes-GNU-1.1.12/data/library/force_fields/charmm-cgenff_36.ffl000066400000000000000000037253761450232132300241740ustar00rootroot00000000000000 CHARMM 36 general k-calories per mol 163 506 0 0 1561 0 3937 0 125 0 156 Atomes-GNU-1.1.12/data/library/force_fields/charmm-ethers_35.ffl000066400000000000000000000740051450232132300242140ustar00rootroot00000000000000 CHARMM 35 ethers k-calories per mol 13 22 0 0 55 0 106 0 0 0 13 Atomes-GNU-1.1.12/data/library/force_fields/charmm-lipid_36.ffl000066400000000000000000001641331450232132300240260ustar00rootroot00000000000000 CHARMM 36 lipids k-calories per mol 29 50 0 0 131 0 180 0 4 0 29 Atomes-GNU-1.1.12/data/library/force_fields/charmm-na_36.ffl000066400000000000000000003570451450232132300233310ustar00rootroot00000000000000 CHARMM 36 Nucleid acids k-calories per mol 42 89 0 0 226 0 502 0 15 0 42 Atomes-GNU-1.1.12/data/library/force_fields/charmm-prot_22.ffl000066400000000000000000004752271450232132300237150ustar00rootroot00000000000000 CHARMM 22 proteins k-calories per mol 47 122 0 0 324 0 445 0 34 0 47 Atomes-GNU-1.1.12/data/library/force_fields/charmm-prot_36.ffl000066400000000000000000006226731450232132300237210ustar00rootroot00000000000000 CHARMM 36 proteins k-calories per mol 53 132 0 0 364 0 705 0 35 0 53 Atomes-GNU-1.1.12/data/library/force_fields/charmm-prot_metals_22.ffl000066400000000000000000005423041450232132300252510ustar00rootroot00000000000000 CHARMM 22 proteins and metals k-calories per mol 98 139 0 0 345 0 452 0 43 0 98 Atomes-GNU-1.1.12/data/library/force_fields/charmm-prot_metals_36.ffl000066400000000000000000006246641450232132300252700ustar00rootroot00000000000000 CHARMM 36 proteins and metals k-calories per mol 53 132 0 0 364 0 706 0 35 0 53 Atomes-GNU-1.1.12/data/library/force_fields/charmm-silicates.ffl000066400000000000000000000330711450232132300243710ustar00rootroot00000000000000 CHARMM silicates k-calories per mol 13 14 0 0 27 0 34 0 0 0 13 Atomes-GNU-1.1.12/data/library/force_fields/compass.ffl000066400000000000000000001366271450232132300226240ustar00rootroot00000000000000 COMPASS k-calories per mol 45 0 54 0 0 94 0 95 0 22 46 Atomes-GNU-1.1.12/data/library/force_fields/cvff.ffl000066400000000000000000011174601450232132300220760ustar00rootroot00000000000000 CVFF k-calories per mol 133 776 0 775 563 0 295 0 41 0 45 Atomes-GNU-1.1.12/data/library/force_fields/cvff_aug.ffl000066400000000000000000011740231450232132300227300ustar00rootroot00000000000000 CVFF Augmented k-calories per mol 172 798 0 752 640 0 342 0 41 0 86 Atomes-GNU-1.1.12/data/library/force_fields/oplsaap.ffl000066400000000000000000007564051450232132300226200ustar00rootroot00000000000000 OPLS All-atoms for proteins k-calories per mol 78 159 0 0 437 0 1446 0 105 0 78 Atomes-GNU-1.1.12/data/library/force_fields/oplsaar.ffl000066400000000000000000015476471450232132300226310ustar00rootroot00000000000000 OPLS All-atoms for RNA k-calories per mol 145 242 0 0 593 0 2482 0 131 0 145 Atomes-GNU-1.1.12/data/library/force_fields/pcff.ffl000066400000000000000000011353761450232132300220760ustar00rootroot00000000000000 PCFF k-calories per mol 133 627 126 0 329 302 216 492 0 83 94 Atomes-GNU-1.1.12/data/library/molecules/000077500000000000000000000000001450232132300200135ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Alcohols/000077500000000000000000000000001450232132300215575ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Alcohols/2-aminoethanol.sml000066400000000000000000000024701450232132300251140ustar00rootroot00000000000000 Alcohols β-Aminoethanol 2-Aminoethan-1-ol 2-Aminoethanol β-Aminoethanol Glycinol 11 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/but-2-yne-1_4-diol.sml000066400000000000000000000025361450232132300253320ustar00rootroot00000000000000 Alcohols Butynediol But-2-yne-1,4-diol Butynediol 2-Butyne-1,4-diol 1,4-Dihydroxy-2-butyne 12 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/cyclohexanol.sml000066400000000000000000000034411450232132300247660ustar00rootroot00000000000000 Alcohols Cyclohexanol Cyclohexanol Cyclohexyl Alcohol Hexahydrophenol Naxol 19 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/cyclopentanol.sml000066400000000000000000000031111450232132300251420ustar00rootroot00000000000000 Alcohols Cyclopentanol Cyclopentanol Cyclopentyl alcohol Hydroxycyclopentane 16 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/ethane-1_2-diol.sml000066400000000000000000000023421450232132300250450ustar00rootroot00000000000000 Alcohols Ethylene glycol Ethane-1,2-diol Ethylene glycol Monoethylene glycol 1,2-Dihydroxyethane 10 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/ethanol.sml000066400000000000000000000022041450232132300237240ustar00rootroot00000000000000 Alcohols Ethanol Ethanol Absolute alcohol Ethylic alcohol Hydroxyethane 9 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/methanol.sml000066400000000000000000000016701450232132300241070ustar00rootroot00000000000000 Alcohols Methanol Methanol Carbinol Hydroxymethane Methyl alcohol 6 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/propan-1-ol.sml000066400000000000000000000025561450232132300243510ustar00rootroot00000000000000 Alcohols --i--n--I---Propanol Propan-1-ol --i--n--I---Propyl alcohol --i--n--I---Propanol Ethylcarbinol 12 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/propan-2-ol.sml000066400000000000000000000025641450232132300243510ustar00rootroot00000000000000 Alcohols --i--s--I---Propanol Propan-2-ol --i--s--I---Propyl alcohol --i--s--I---Propanol Dimethyl carbinol 12 Atomes-GNU-1.1.12/data/library/molecules/Alcohols/propane-1_2_3-triol.sml000066400000000000000000000030051450232132300256660ustar00rootroot00000000000000 Alcohols Glycerin Propane-1,2,3-triol Glycerin Propanetriol 1,2,3-Trihydroxypropane 1,2,3-Propanetriol 14 Atomes-GNU-1.1.12/data/library/molecules/Aldehydes/000077500000000000000000000000001450232132300217155ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Aldehydes/acetaldehyde.sml000066400000000000000000000020021450232132300250400ustar00rootroot00000000000000 Aldehydes Acetaldehyde Acetaldehyde Ethanal Acetic aldehyde Acetylaldehyde 7 Atomes-GNU-1.1.12/data/library/molecules/Aldehydes/formaldehyde.sml000066400000000000000000000014701450232132300250770ustar00rootroot00000000000000 Aldehydes Formaldehyde Formaldehyde Methanal Methylene glycol Formol 4 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/000077500000000000000000000000001450232132300213715ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Alkanes/butane.sml000066400000000000000000000026471450232132300233750ustar00rootroot00000000000000 Alkanes Butane Butane Butyl hydride Methylethylmethane Quartane 14 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/decane.sml000066400000000000000000000047731450232132300233400ustar00rootroot00000000000000 Alkanes Decane Decane 32 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/dodecane.sml000066400000000000000000000056161450232132300236600ustar00rootroot00000000000000 Alkanes Dodecane Dodecane 38 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/ethane.sml000066400000000000000000000017271450232132300233610ustar00rootroot00000000000000 Alkanes Ethane Ethane Dicarbane 8 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/heptane.sml000066400000000000000000000036751450232132300235450ustar00rootroot00000000000000 Alkanes Heptane Heptane Septane 23 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/hexadecane.sml000066400000000000000000000072601450232132300242000ustar00rootroot00000000000000 Alkanes Hexadecane Hexadecane 50 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/hexane.sml000066400000000000000000000033641450232132300233640ustar00rootroot00000000000000 Alkanes Hexane Hexane Sextane 20 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/icosane.sml000066400000000000000000000107511450232132300235330ustar00rootroot00000000000000 Alkanes Icosane Icosane Eicosane 62 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/methane.sml000066400000000000000000000015151450232132300235310ustar00rootroot00000000000000 Alkanes Methane Methane Natural Gas Hydrogen carbide Carbane 5 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/methylpropane.sml000066400000000000000000000026301450232132300247760ustar00rootroot00000000000000 Alkanes Methylpropane Methylpropane 2-Methylpropane Isobutane 14 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/nonane.sml000066400000000000000000000044601450232132300233700ustar00rootroot00000000000000 Alkanes Nonane Nonane 29 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/octane.sml000066400000000000000000000041531450232132300233620ustar00rootroot00000000000000 Alkanes Octane Octane 26 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/pentadecane.sml000066400000000000000000000070251450232132300243610ustar00rootroot00000000000000 Alkanes Pentadecane Pentadecane --i--n--I---Pentadecane 47 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/pentane.sml000066400000000000000000000030551450232132300235430ustar00rootroot00000000000000 Alkanes Pentane Pentane Quintane 17 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/propane.sml000066400000000000000000000022441450232132300235540ustar00rootroot00000000000000 Alkanes Propane Propane Tricarbane 11 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/tetracosane.sml000066400000000000000000000124021450232132300244150ustar00rootroot00000000000000 Alkanes Tetracosane Tetracosane 74 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/tetradecane.sml000066400000000000000000000064431450232132300243740ustar00rootroot00000000000000 Alkanes Tetradecane Tetradecane 44 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/tridecane.sml000066400000000000000000000061261450232132300240510ustar00rootroot00000000000000 Alkanes Tridecane Tridecane 41 Atomes-GNU-1.1.12/data/library/molecules/Alkanes/undecane.sml000066400000000000000000000053411450232132300236730ustar00rootroot00000000000000 Alkanes Undecane Undecane Hendecane 35 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/000077500000000000000000000000001450232132300213755ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Alkenes/1-butene.sml000066400000000000000000000024371450232132300235400ustar00rootroot00000000000000 Alkenes 1-Butene But-1-ene Ethylethylene 1-Butylene α-Butylene 12 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/1-heptene.sml000066400000000000000000000034771450232132300237130ustar00rootroot00000000000000 Alkenes 1-Heptene Hept-1-ene 1-Heptene 21 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/1-hexene.sml000066400000000000000000000031641450232132300235300ustar00rootroot00000000000000 Alkenes 1-Hexene Hex-1-ene 1-Hexene 18 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/1-octene.sml000066400000000000000000000040031450232132300235220ustar00rootroot00000000000000 Alkenes 1-Octene Oct-1-ene 1-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/1-pentene.sml000066400000000000000000000026601450232132300237120ustar00rootroot00000000000000 Alkenes 1-Pentene Pent-1-ene 1-Pentene 15 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/2-methylbut-2-ene.sml000066400000000000000000000030001450232132300251630ustar00rootroot00000000000000 Alkenes 2-Methylbut-2-ene 2-Methylbut-2-ene β-Isoamylene Trimethylethylene Isoamylene 15 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/2-methylbuta-1_3-diene.sml000066400000000000000000000025331450232132300260740ustar00rootroot00000000000000 Alkenes Isoprene 2-Methylbuta-1,3-diene 2-Methyl-1,3-butadiene Isoprene 13 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/3z-3-ethylhepta-1_3-diene.sml000066400000000000000000000041171450232132300264200ustar00rootroot00000000000000 Alkenes (3Z)-3-Ethylhepta-1,3-diene (3Z)-3-Ethylhepta-1,3-diene 25 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/3z-penta-1_3-diene.sml000066400000000000000000000025141450232132300252170ustar00rootroot00000000000000 Alkenes (3Z)-1,3-Pentadiene (3Z)-Penta-1,3-diene (3Z)-1,3-Pentadiene 13 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/cis-2-butene.sml000066400000000000000000000024221450232132300243070ustar00rootroot00000000000000 Alkenes --i--cis--I---2-Butene --i--cis--I---But-2-ene --i--cis--I---β-Butylene 12 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-2-heptene.sml000066400000000000000000000035151450232132300241270ustar00rootroot00000000000000 Alkenes (E)-2-Heptene (E)-Hept-2-ene (E)-2-Heptene 21 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-2-hexene.sml000066400000000000000000000031441450232132300237510ustar00rootroot00000000000000 Alkenes (E)-2-Hexene (E)-Hex-2-ene 18 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-2-octene.sml000066400000000000000000000040171450232132300237520ustar00rootroot00000000000000 Alkenes (E)-2-Octene (E)-Oct-2-ene (E)-2-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-2-pentene.sml000066400000000000000000000026761450232132300241440ustar00rootroot00000000000000 Alkenes (E)-2-Pentene (E)-Pent-2-ene (E)-2-Pentene 15 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-3-heptene.sml000066400000000000000000000035151450232132300241300ustar00rootroot00000000000000 Alkenes (E)-3-Heptene (E)-Hept-3-ene (E)-3-Heptene 21 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-3-hexene.sml000066400000000000000000000031441450232132300237520ustar00rootroot00000000000000 Alkenes (E)-3-Hexene (E)-Hex-3-ene 18 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-3-octene.sml000066400000000000000000000040171450232132300237530ustar00rootroot00000000000000 Alkenes (E)-3-Octene (E)-Oct-3-ene (E)-3-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/e-4-octene.sml000066400000000000000000000040201450232132300237460ustar00rootroot00000000000000 Alkenes (E)-4-Octene (E)-Oct-4-ene (E)-4-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/ethene.sml000066400000000000000000000015251450232132300233650ustar00rootroot00000000000000 Alkenes Ethylene Ethene Ethylene 6 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/piperylene.sml000066400000000000000000000024661450232132300242760ustar00rootroot00000000000000 Alkenes Piperylene 1,3-Pentadiene Penta-1,3-diene 13 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/propene.sml000066400000000000000000000020761450232132300235670ustar00rootroot00000000000000 Alkenes Propene Propene Propylene Methyle ethylene 9 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/trans-2-butene.sml000066400000000000000000000024301450232132300246570ustar00rootroot00000000000000 Alkenes --i--trans--I---2-Butene --i--trans--I---But-2-ene --i--trans--I---β-Butylene 12 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-2-heptene.sml000066400000000000000000000035141450232132300241530ustar00rootroot00000000000000 Alkenes (Z)-2-Heptene (Z)-Hept-2-ene (Z)-2-Heptene 21 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-2-hexene.sml000066400000000000000000000032001450232132300237670ustar00rootroot00000000000000 Alkenes (Z)-2-Hexene (Z) Hex-2-ene (Z)-2-Hexene 18 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-2-octene.sml000066400000000000000000000040171450232132300237770ustar00rootroot00000000000000 Alkenes (Z)-2-Octene (Z)-Oct-2-ene (Z)-2-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-2-pentene.sml000066400000000000000000000026731450232132300241660ustar00rootroot00000000000000 Alkenes (Z)-2-Pentene (Z)-Pent-2-ene (Z)-2-Pentene 15 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-3-heptene.sml000066400000000000000000000035131450232132300241530ustar00rootroot00000000000000 Alkenes (Z)-3-Heptene (Z) Hept-3-ene (Z)-3-Heptene 21 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-3-hexene.sml000066400000000000000000000031771450232132300240050ustar00rootroot00000000000000 Alkenes (Z)-3-Hexene (Z)-Hex-3-ene (Z)-3-Hexene 18 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-3-octene.sml000066400000000000000000000040171450232132300240000ustar00rootroot00000000000000 Alkenes (Z)-3-Octene (Z) Oct-3-ene (Z)-3-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkenes/z-4-octene.sml000066400000000000000000000040221450232132300237750ustar00rootroot00000000000000 Alkenes (Z)-4-Octene (Z)-Oct-4-ene (Z)-4-Octene 24 Atomes-GNU-1.1.12/data/library/molecules/Alkynes/000077500000000000000000000000001450232132300214215ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Alkynes/ethyne.sml000066400000000000000000000013211450232132300234270ustar00rootroot00000000000000 Alkynes Ethyne Ethyne Acetylene 4 Atomes-GNU-1.1.12/data/library/molecules/Alkynes/propyne.sml000066400000000000000000000017231450232132300236350ustar00rootroot00000000000000 Alkynes Propyne Prop-1-yne Propyne Methyl acetylene Allylene 7 Atomes-GNU-1.1.12/data/library/molecules/Amides/000077500000000000000000000000001450232132300212155ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Amides/acetamide.sml000066400000000000000000000022071450232132300236470ustar00rootroot00000000000000 Amides Acetamide Acetamide Ethanamide Acetic acid amide 9 Atomes-GNU-1.1.12/data/library/molecules/Amides/n_n-dimethylacetamide.sml000066400000000000000000000027551450232132300261670ustar00rootroot00000000000000 Amides N,N-Dimethylacetamide N,N-Dimethylacetamide 15 Atomes-GNU-1.1.12/data/library/molecules/Amides/n_n-dimethylformamide.sml000066400000000000000000000025221450232132300262060ustar00rootroot00000000000000 Amides N,N-Dimethylformamide N,N-Dimethylformamide N,N-Dimethylmethanamide 12 Atomes-GNU-1.1.12/data/library/molecules/Amides/oxamide.sml000066400000000000000000000023411450232132300233600ustar00rootroot00000000000000 Amides Oxamide Oxamide Ethanediamide Oxalamide Oxamimidic acid 10 Atomes-GNU-1.1.12/data/library/molecules/Amides/urea.sml000066400000000000000000000021321450232132300226640ustar00rootroot00000000000000 Amides Urea Urea Carbamide Carbonyl diamide Carbonyldiamine 8 Atomes-GNU-1.1.12/data/library/molecules/Amides/urethane.sml000066400000000000000000000025611450232132300235510ustar00rootroot00000000000000 Amides Urethane Ethyl carbamate Urethane 13 Atomes-GNU-1.1.12/data/library/molecules/Amines/000077500000000000000000000000001450232132300212275ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Amines/ammonia.sml000066400000000000000000000014261450232132300233700ustar00rootroot00000000000000 Amines Ammonia Azane Ammonia Trihydrogen nitride Nitrogen trihydride 4 Atomes-GNU-1.1.12/data/library/molecules/Amines/azepane.sml000066400000000000000000000035041450232132300233710ustar00rootroot00000000000000 Amines Azepane Azepane Hexahydroazepine Hexamethyleneimine 20 Atomes-GNU-1.1.12/data/library/molecules/Amines/azepine.sml000066400000000000000000000025571450232132300234100ustar00rootroot00000000000000 Amines Azepine Azepine 14 Atomes-GNU-1.1.12/data/library/molecules/Amines/diethylamine.sml000066400000000000000000000030401450232132300244150ustar00rootroot00000000000000 Amines Diethylamine N-Ethylethanamine Diethylamine 16 Atomes-GNU-1.1.12/data/library/molecules/Amines/dimethylamine.sml000066400000000000000000000022241450232132300245750ustar00rootroot00000000000000 Amines Dimethylamine N-Methylmethanamine Dimethylamine 10 Atomes-GNU-1.1.12/data/library/molecules/Amines/ethylamine.sml000066400000000000000000000022121450232132300241000ustar00rootroot00000000000000 Amines Ethylamine Ethanamine Ethylamine 10 Atomes-GNU-1.1.12/data/library/molecules/Amines/isopropylamine.sml000066400000000000000000000025721450232132300250240ustar00rootroot00000000000000 Amines Isopropylamine Propan-2-amine Isopropylamine 2-Aminopropane 13 Atomes-GNU-1.1.12/data/library/molecules/Amines/methylamine.sml000066400000000000000000000020011450232132300242510ustar00rootroot00000000000000 Amines Methylamine Methanamine Methylamine Aminomethane Monomethylamine 7 Atomes-GNU-1.1.12/data/library/molecules/Amines/piperazine.sml000066400000000000000000000030731450232132300241150ustar00rootroot00000000000000 Amines Piperazine Piperazine Hexahydropyrazine Piperazidine 16 Atomes-GNU-1.1.12/data/library/molecules/Amines/piperidine.sml000066400000000000000000000032731450232132300241010ustar00rootroot00000000000000 Amines Piperidine Piperidine Hexahydropyridine Azacyclohexane Pentamethyleneamine Azinane 17 Atomes-GNU-1.1.12/data/library/molecules/Amines/pyrrolidine.sml000066400000000000000000000027551450232132300243150ustar00rootroot00000000000000 Amines Pyrrolidine Pyrrolidine Azolidine Azacyclopentane Tetrahydropyrrole Prolamine 14 Atomes-GNU-1.1.12/data/library/molecules/Amines/r-sec-butylamine.sml000066400000000000000000000030171450232132300251250ustar00rootroot00000000000000 Amines (R)-sec-butylamine (R)-Butan-2-amine (R)-sec-butylamine (R)-2-Aminobutane (R)-2-Butanamine 16 Atomes-GNU-1.1.12/data/library/molecules/Amines/s-sec-butylamine.sml000066400000000000000000000031601450232132300251250ustar00rootroot00000000000000 Amines (S)-sec-butylamine (S)-Butan-2-amine (S)-sec-butylamine (S)-2-Aminobutane (S)-2-Butanamine 16 Atomes-GNU-1.1.12/data/library/molecules/Amines/tert-butylamine.sml000066400000000000000000000032311450232132300250700ustar00rootroot00000000000000 Amines tert-butylamine 2-Methylpropan-2-amine tert-butylamine 2-Aminoisobutane 2-Amino-2-methylpropane Dimethylethylamine 16 Atomes-GNU-1.1.12/data/library/molecules/Amines/triethylamine.sml000066400000000000000000000036711450232132300246310ustar00rootroot00000000000000 Amines Triethylamine N,N-Diethylethanamine Triethylamine 22 Atomes-GNU-1.1.12/data/library/molecules/Amines/triethylenediamine.sml000066400000000000000000000035011450232132300256260ustar00rootroot00000000000000 Amines Triethylenediamine 1,4-Diazabicyclo[2.2.2]octane Triethylenediamine 20 Atomes-GNU-1.1.12/data/library/molecules/Amines/trimethylamine.sml000066400000000000000000000025471450232132300250070ustar00rootroot00000000000000 Amines Trimethylamine N,N-Dimethylmethanamine Trimethylamine 13 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/000077500000000000000000000000001450232132300222215ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-alanine.sml000066400000000000000000000026111450232132300245660ustar00rootroot00000000000000 Amino acids Alanine-(D) (D)-Alanine (2R)-2-Aminopropanoicacid 13 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-allo-threonine.sml000066400000000000000000000032531450232132300261020ustar00rootroot00000000000000 Amino acids Allo-threonine-(D) (D)-Allo-threonine (2R,3R)-2-Amino-3-hydroxybutanoicacid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-arginine.sml000066400000000000000000000044111450232132300247530ustar00rootroot00000000000000 Amino acids Arginine-(D) (D)-Arginine (2R)-2-Amino-5-(diaminomethylideneamino)pentanoicacid 26 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-asparagine.sml000066400000000000000000000032451450232132300252750ustar00rootroot00000000000000 Amino acids Asparagine-(D) (D)-Asparagine (2R)-2-Amino-3-carbamoylpropanoicacid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-aspartic_acid.sml000066400000000000000000000031331450232132300257450ustar00rootroot00000000000000 Amino acids Aspartic acid-(D) (D)-Aspartic acid (2R)-2-Aminobutanedioicacid 16 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-cysteine.sml000066400000000000000000000027721450232132300250120ustar00rootroot00000000000000 Amino acids Cysteine-(D) (D)-Cysteine (2S)-2-Amino-3-sulfanylpropanoicacid 14 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-glutamic_acid.sml000066400000000000000000000034511450232132300257470ustar00rootroot00000000000000 Amino acids Glutamic acid-(D) (D)-glutamic acid (2R)-2-Aminopentanedioic acid 19 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-glutamine.sml000066400000000000000000000035521450232132300251510ustar00rootroot00000000000000 Amino acids Glutamine-(D) (D)-Glutamine (2R)-2-Amino-4-carbamoylbutanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-histidine.sml000066400000000000000000000035621450232132300251450ustar00rootroot00000000000000 Amino acids Histidine-(D) (D)-Histidine (2R)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-isoleucine.sml000066400000000000000000000037631450232132300253270ustar00rootroot00000000000000 Amino acids Isoleucine-(D) (D)-Isoleucine (2R,3R)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-leucine.sml000066400000000000000000000037521450232132300246120ustar00rootroot00000000000000 Amino acids Leucine-(D) (D)-Leucine (2R)-2-Amino-4-methylpentanoic acid 22 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-lysine.sml000066400000000000000000000041471450232132300244700ustar00rootroot00000000000000 Amino acids Lysine-(D) (D)-Lysine (2R)-2,6-Diaminohexanoic acid 24 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-methionine.sml000066400000000000000000000036221450232132300253210ustar00rootroot00000000000000 Amino acids Methionine-(D) (D)-Methionine (2R)-2-Amino-4-methylsulfanylbutanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-phenylalanine.sml000066400000000000000000000040711450232132300260100ustar00rootroot00000000000000 Amino acids Phenylalanine-(D) (D)-Phenylalanine (2R)-2-Amino-3-phenylpropanoic acid 23 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-proline.sml000066400000000000000000000032341450232132300246310ustar00rootroot00000000000000 Amino acids Proline-(D) (D)-Proline (2R)-Pyrrolidine-2-carboxylic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-serine.sml000066400000000000000000000027231450232132300244500ustar00rootroot00000000000000 Amino acids Serine-(D) (D)-Serine (2R)-2-Amino-3-hydroxypropanoic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-threonine.sml000066400000000000000000000032421450232132300251530ustar00rootroot00000000000000 Amino acids Threonine-(D) (D)-Threonine (2R,3S)-2-Amino-3-hydroxybutanoic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-tryptophan.sml000066400000000000000000000045141450232132300253730ustar00rootroot00000000000000 Amino acids Tryptophan-(D) (D)-Tryptophan (2R)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-tyrosine.sml000066400000000000000000000041741450232132300250410ustar00rootroot00000000000000 Amino acids Tyrosine-(D) (D)-Tyrosine (2R)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/d-valine.sml000066400000000000000000000034401450232132300244360ustar00rootroot00000000000000 Amino acids Valine-(D) (D)-Valine (2R)-2-Amino-3-methylbutanoic acid 19 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/glycine.sml000066400000000000000000000022671450232132300243770ustar00rootroot00000000000000 Amino acids Glycine-(D) Glycine 2-Aminoacetic acid 10 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-4-nitrophenylalanine.sml000066400000000000000000000043241450232132300272360ustar00rootroot00000000000000 Amino acids 4-Nitrophenylalanine-(L) (L)-4-Nitrophenylalanine (S)-2-Amino-3-(4-nitrophenyl)propanoic acid 25 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-alanine.sml000066400000000000000000000026131450232132300246000ustar00rootroot00000000000000 Amino acids Alanine-(L) (L)-Alanine (2S)-2-Aminopropanoic acid 13 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-allo-isoleucine.sml000066400000000000000000000037751450232132300262670ustar00rootroot00000000000000 Amino acids Allo-isoleucine-(L) (L)-Allo-isoleucine (2S,3R)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-arginine.sml000066400000000000000000000044141450232132300247660ustar00rootroot00000000000000 Amino acids Arginine-(L) (L)-Arginine (2S)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 26 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-asparagine.sml000066400000000000000000000032441450232132300253040ustar00rootroot00000000000000 Amino acids Asparagine-(L) (L)-Asparagine (2S)-2-Amino-3-carbamoylpropanoic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-aspartic_acid.sml000066400000000000000000000031341450232132300257560ustar00rootroot00000000000000 Amino acids Aspartic-(L) (L)-Aspartic acid (2S)-2-Aminobutanedioic acid 16 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-cysteine.sml000066400000000000000000000027771450232132300250270ustar00rootroot00000000000000 Amino acids Cysteine-(L) (L)-Cysteine (2R)-2-Amino-3-sulfanylpropanoic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-glutamic_acid.sml000066400000000000000000000034461450232132300257630ustar00rootroot00000000000000 Amino acids Glutamic acid-(L) (L)-Glutamic acid (2S)-2-Aminopentanedioic acid 19 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-glutamine.sml000066400000000000000000000035551450232132300251640ustar00rootroot00000000000000 Amino acids Glutamine-(L) (L)-Glutamine (2S)-2-Amino-4-carbamoylbutanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-histidine.sml000066400000000000000000000035601450232132300251530ustar00rootroot00000000000000 Amino acids Histidine-(L) (L)-Histidine (2S)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-isoleucine.sml000066400000000000000000000037601450232132300253340ustar00rootroot00000000000000 Amino acids Isoleucine-(L) (L)-Isoleucine (2S,3S)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-leucine.sml000066400000000000000000000037561450232132300246260ustar00rootroot00000000000000 Amino acids Leucine-(L) (L)-Leucine (2S)-2-Amino-4-methylpentanoic acid 22 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-lysine.sml000066400000000000000000000041461450232132300244770ustar00rootroot00000000000000 Amino acids Lysine-(L) (L)-Lysine (2S)-2,6-Diaminohexanoic acid 24 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-methionine.sml000066400000000000000000000036241450232132300253330ustar00rootroot00000000000000 Amino acids Methionine-(L) (L)-Methionine (2S)-2-Amino-4-methylsulfanylbutanoic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-phenylalanine.sml000066400000000000000000000040671450232132300260250ustar00rootroot00000000000000 Amino acids Phenylalanine-(L) (L)-Phenylalanine (2S)-2-Amino-3-phenylpropanoic acid 23 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-proline.sml000066400000000000000000000032331450232132300246400ustar00rootroot00000000000000 Amino acids Proline-(L) (L)-Proline (2S)-Pyrrolidine-2-carboxylic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-serine.sml000066400000000000000000000027251450232132300244620ustar00rootroot00000000000000 Amino acids Serine-(L) (L)-Serine (2S)-2-Amino-3-hydroxypropanoic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-threonine.sml000066400000000000000000000032451450232132300251660ustar00rootroot00000000000000 Amino acids Threonine-(L) (L)-Threonine (2S,3R)-2-Amino-3-hydroxybutanoic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-tryptophan.sml000066400000000000000000000045051450232132300254030ustar00rootroot00000000000000 Amino acids Tryptophan-(L) (L)-Tryptophan (2S)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-tyrosine.sml000066400000000000000000000041721450232132300250470ustar00rootroot00000000000000 Amino acids Tyrosine-(L) (L)-Tyrosine (2S)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 Atomes-GNU-1.1.12/data/library/molecules/Amino_acids/l-valine.sml000066400000000000000000000034351450232132300244520ustar00rootroot00000000000000 Amino acids Valine-(L) (L)-Valine (2S)-2-Amino-3-methylbutanoic acid 19 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/000077500000000000000000000000001450232132300217355ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Aromatics/1h-indole.sml000066400000000000000000000027741450232132300242440ustar00rootroot00000000000000 Aromatics 1H-Indole 1H-Indole 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/2h-chromene.sml000066400000000000000000000032451450232132300245650ustar00rootroot00000000000000 Aromatics 2H-Chromene 2H-1-benzopyran 2H-Chromene 18 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/4h-chromene.sml000066400000000000000000000032461450232132300245700ustar00rootroot00000000000000 Aromatics 4H-Chromene 4H-1-benzopyran 4H-Chromene 18 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/acenaphthene.sml000066400000000000000000000040171450232132300250770ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/acenaphthenequinone.sml000066400000000000000000000035451450232132300265030ustar00rootroot00000000000000 Aromatics Acenaphthenequinone Acenaphthylene-1,2-dione Acenaphthenequinone Acenaphthenedione 20 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/acenaphthylene.sml000066400000000000000000000035331450232132300254460ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/acridine.sml000066400000000000000000000040361450232132300242330ustar00rootroot00000000000000 Aromatics Acridine Acridine Dibenzo[b,e]pyridine 2,3-Benzoquinoline 23 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/aniline.sml000066400000000000000000000027431450232132300240770ustar00rootroot00000000000000 Aromatics Aniline Aniline Benzenamine Phenylamine Aminobenzene Benzamine 14 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/anisole.sml000066400000000000000000000031321450232132300241030ustar00rootroot00000000000000 Aromatics Anisole Anisole Methoxybenzene Methyl Phenyl ether Phenoxymethane 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/anthracene.sml000066400000000000000000000041111450232132300245570ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/benzaldehyde.sml000066400000000000000000000030071450232132300251100ustar00rootroot00000000000000 Aromatics Benzaldehyde Benzaldehyde Benzenecarbaldehyde Benzenecarboxaldehyde Phenylmethanal Benzoic aldehyde 14 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/benzene.sml000066400000000000000000000023421450232132300241010ustar00rootroot00000000000000 Aromatics Benzene Benzene Benzol 12 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/benzofuran.sml000066400000000000000000000030221450232132300246200ustar00rootroot00000000000000 Aromatics Benzofuran 1-Benzofuran Benzofuran Coumarone Benzo[b]furan 15 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/benzoic_acid.sml000066400000000000000000000030401450232132300250600ustar00rootroot00000000000000 Aromatics Benzoic acid Benzoic acid Benzenecarboxylic acid E 210 Dracylic acid 15 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/benzothiophene.sml000066400000000000000000000031051450232132300254720ustar00rootroot00000000000000 Aromatics Benzothiophene Benzo[b]thiophene Benzothiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/benzoyl_chloride.sml000066400000000000000000000027211450232132300260070ustar00rootroot00000000000000 Aromatics Benzoyl chloride Benzoyl chloride Benzenecarbonyl chloride 14 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/caffeine.sml000066400000000000000000000043001450232132300242070ustar00rootroot00000000000000 Aromatics Caffeine Caffeine Guaranine Theine Trimethylxanthine 1,3,7-Trimethyl-1H-purine-2,6(3H,7H)-dione 24 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/carbazole.sml000066400000000000000000000037511450232132300244220ustar00rootroot00000000000000 Aromatics Carbazole 9H-Carbazole 9-Azafluorene Dibenzopyrrole Diphenylenimine 22 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/chromone.sml000066400000000000000000000031641450232132300242700ustar00rootroot00000000000000 Aromatics Chromone Chromen-4-one Chromone 1,4-Benzopyrone 17 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/cinnoline.sml000066400000000000000000000030361450232132300244320ustar00rootroot00000000000000 Aromatics Cinnoline Cinnoline Benzopyridazine 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/coumarin.sml000066400000000000000000000032341450232132300242710ustar00rootroot00000000000000 Aromatics Coumarin 2H-chromen-2-one Coumarin Chromen-2-one 1-Benzopyran-2-one 17 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/cyclopentadienyl.sml000066400000000000000000000021551450232132300260230ustar00rootroot00000000000000 Aromatics Cyclopentadienyl Cyclopentadienyl Cp 10 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/fluorene.sml000066400000000000000000000040221450232132300242670ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/indene.sml000066400000000000000000000032211450232132300237120ustar00rootroot00000000000000 Aromatics Indene 1H-Indene Bicyclo[4.3.0]nona-1,3,5,7-tetraene Benzocyclopentadiene Indonaphthene 17 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/isoquinoline.sml000066400000000000000000000032031450232132300251660ustar00rootroot00000000000000 Aromatics Isoquinoline Isoquinoline Benzo[c]pyridine 2-Benzanine 17 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/naphthalene.sml000066400000000000000000000033101450232132300247360ustar00rootroot00000000000000 Aromatics Naphthalene Naphthalene Camphor tar Naphthaline Bicyclo[4.4.0]deca-1,3,5,7,9-pentaene 18 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/naphthyridine.sml000066400000000000000000000031141450232132300253170ustar00rootroot00000000000000 Aromatics Naphthyridine 1,8-Naphthyridine Naphthyridine 1,8-Diazanaphthalene 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/nitrobenzene.sml000066400000000000000000000027361450232132300251640ustar00rootroot00000000000000 Aromatics Nitrobenzene Nitrobenzene Nitrobenzol Oil of mirbane 14 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/phenanthrene.sml000066400000000000000000000041061450232132300251320ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/phenanthroline.sml000066400000000000000000000036721450232132300255000ustar00rootroot00000000000000 Aromatics Phenanthroline 1,10-Phenanthroline Phenanthroline 22 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/phenol.sml000066400000000000000000000026441450232132300237450ustar00rootroot00000000000000 Aromatics Phenol Phenol Benzenol Carbolic acid Phenylic acid Hydroxybenzene 13 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/phthalimide.sml000066400000000000000000000031551450232132300247460ustar00rootroot00000000000000 Aromatics Phthalimide Isoindole-1,3-dione Phthalimide 1,3-dioxoisoindoline 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/purine.sml000066400000000000000000000025071450232132300237600ustar00rootroot00000000000000 Aromatics Purine 9H-Purine Purine 13 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/quinazoline.sml000066400000000000000000000032031450232132300250060ustar00rootroot00000000000000 Aromatics Quinazoline Quinazoline 1,3-diazanaphthalene Benzopyrimidine Phenmiazine Benzo-1,3-diazine 16 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/quinoline.sml000066400000000000000000000032771450232132300244660ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/tetralin.sml000066400000000000000000000037141450232132300243010ustar00rootroot00000000000000 Aromatics Tetralin 1,2,3,4-tetrahydronaphthalene Bacticin benzocyclohexane THN 22 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/toluene.sml000066400000000000000000000027731450232132300241360ustar00rootroot00000000000000 Aromatics Toluene Toluene Methylbenzene Phenylmethane Toluol Anisen 15 Atomes-GNU-1.1.12/data/library/molecules/Aromatics/uric_acid.sml000066400000000000000000000033011450232132300243710ustar00rootroot00000000000000 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.12/data/library/molecules/Aromatics/xanthene.sml000066400000000000000000000041631450232132300242700ustar00rootroot00000000000000 Aromatics Xanthene 9H-Xanthene Xanthene Dibenzo[a,e]pyran 10H-9-oxaanthracene 24 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/000077500000000000000000000000001450232132300232555ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/acetic_acid.sml000066400000000000000000000021141450232132300262000ustar00rootroot00000000000000 Carboxylic acids Acetic acid Acetic acid Ethanoic acid Hydrogen acetate Vinegar 8 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/butanoic_acid.sml000066400000000000000000000027541450232132300265660ustar00rootroot00000000000000 Carboxylic acids Butanoic acid Butanoic acid Butyric acid Ethylacetic acid Propanecarboxylic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/citric_acid.sml000066400000000000000000000037011450232132300262300ustar00rootroot00000000000000 Carboxylic acids Citric acid 2-Hydroxypropane-1,2,3-tricarboxylic acid Citric acid 3-Carboxy-3-hydroxypentanedioic acid 21 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/d-lactic_acid.sml000066400000000000000000000025151450232132300264350ustar00rootroot00000000000000 Carboxylic acids (D)-Lactic acid (R)-2-Hydroxypropanoic acidd (D)-Lactic acid Milk acid 12 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/d-malic_acid.sml000066400000000000000000000031071450232132300262610ustar00rootroot00000000000000 Carboxylic acids (D)-Malic acid (R)-2-Hydroxybutanedioic acid (D)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/d-tartaric_acid.sml000066400000000000000000000032051450232132300270040ustar00rootroot00000000000000 Carboxylic acids (D)-Tartaric acid (2S,3S)-2,3-Dihydroxybutanedioic acid (D)-Tartaric acid Threaric acid Racemic acid 16 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/dichloroacetic_acid.sml000066400000000000000000000022301450232132300277230ustar00rootroot00000000000000 Carboxylic acids Dichloroacetic acid Dichloroacetic acid Dichloroethanoic acid Bichloroacetic acid 2,2-Dichloroacetic acid 8 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/formic_acid.sml000066400000000000000000000016121450232132300262310ustar00rootroot00000000000000 Carboxylic acids Formic acid Formic acid Methanoic acid Carbonous acid Formylic acid 5 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/isobutyric_acid.sml000066400000000000000000000027721450232132300271560ustar00rootroot00000000000000 Carboxylic acids Isobutyric acid 2-Methylpropanoic acid Isobutyric acid 2-Methylpropionic acid Isobutanoic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/l-ascorbic_acid.sml000066400000000000000000000034401450232132300267710ustar00rootroot00000000000000 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.12/data/library/molecules/Carboxylic_acids/l-lactic_acid.sml000066400000000000000000000025161450232132300264460ustar00rootroot00000000000000 Carboxylic acids (L)-Lactic acid (S)-2-Hydroxypropanoic acidd (L)-Lactic acid Milk acid 12 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/l-malic_acid.sml000066400000000000000000000031071450232132300262710ustar00rootroot00000000000000 Carboxylic acids (L)-Malic acid (S)-2-Hydroxybutanedioic acid (L)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/l-tartaric_acid.sml000066400000000000000000000032041450232132300270130ustar00rootroot00000000000000 Carboxylic acids (L)-Tartaric acid (2R,3R)-2,3-Dihydroxybutanedioic acid (L)-Tartaric acid Threaric acid Racemic acid 16 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/maleic_acid.sml000066400000000000000000000025051450232132300262060ustar00rootroot00000000000000 Carboxylic acids Maleic acid ((2Z)-But-2-enedioic acid Maleic acid Maleinic acid 12 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/oxalic_acid.sml000066400000000000000000000020601450232132300262270ustar00rootroot00000000000000 Carboxylic acids Oxalic acid Oxalic acid Ethanedioic acid Wood bleach 8 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/propanoic_acid.sml000066400000000000000000000024101450232132300267410ustar00rootroot00000000000000 Carboxylic acids Propanoic acid Propanoic acid Propionic acid Ethanecarboxylic acid 11 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/trichloroacetic_acid.sml000066400000000000000000000022501450232132300301270ustar00rootroot00000000000000 Carboxylic acids Trichloroacetic acid Trichloroacetic acid Trichloroethanoic acid 2,2,2-Trichloroacetic acid 2,2,2-Trichloroethanoic acid 8 Atomes-GNU-1.1.12/data/library/molecules/Carboxylic_acids/trifluoroacetic_acid.sml000066400000000000000000000023101450232132300301440ustar00rootroot00000000000000 Carboxylic acids Trifluoroacetic acid Trifluoroacetic acid Perfluoroacetic acid Trifluoroethanoic acid 2,2,2-Trifluoroacetic 2,2,2-Trifluoroethanoic acid 8 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/000077500000000000000000000000001450232132300227175ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/abietic_acid.sml000066400000000000000000000077111450232132300260220ustar00rootroot00000000000000 Cyclic alkanes Abietic acid Abieta-7,13-dien-18-oic acid Abietic acid Abietinic acid Sylvic acid 52 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/adamantane.sml000066400000000000000000000040531450232132300255270ustar00rootroot00000000000000 Cyclic alkanes Adamantane Tricyclo[3.3.1.1--b--3,7--e--]decane Adamantane 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/camphene.sml000066400000000000000000000043711450232132300252210ustar00rootroot00000000000000 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.12/data/library/molecules/Cyclic_alkanes/cis-decahydronaphthalene.sml000066400000000000000000000046111450232132300303640ustar00rootroot00000000000000 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.12/data/library/molecules/Cyclic_alkanes/cubane.sml000066400000000000000000000030551450232132300246740ustar00rootroot00000000000000 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.12/data/library/molecules/Cyclic_alkanes/cyclobutane.sml000066400000000000000000000023301450232132300257420ustar00rootroot00000000000000 Cyclic alkanes Cyclobutane Cyclobutane 12 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclodecane.sml000066400000000000000000000046061450232132300257130ustar00rootroot00000000000000 Cyclic alkanes Cyclodecane Cyclodecane 30 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cycloheptane.sml000066400000000000000000000034621450232132300261170ustar00rootroot00000000000000 Cyclic alkanes Cycloheptane Cycloheptane 21 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclohexane-chair.sml000066400000000000000000000032171450232132300270250ustar00rootroot00000000000000 Cyclic alkanes Cyclohexane---i--chair--I-- Cyclohexane---i--chair--I-- 18 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclohexane-twist-boat.sml000066400000000000000000000032221450232132300300300ustar00rootroot00000000000000 Cyclic alkanes Cyclohexane---i--twist-boat--I-- Cyclohexane---i--twist-boat--I-- 18 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclononane.sml000066400000000000000000000042761450232132300257550ustar00rootroot00000000000000 Cyclic alkanes Cyclononane Cyclononane 27 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclooctane.sml000066400000000000000000000037721450232132300257500ustar00rootroot00000000000000 Cyclic alkanes Cyclooctane Cyclooctane 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclopentane.sml000066400000000000000000000027041450232132300261230ustar00rootroot00000000000000 Cyclic alkanes Cyclopentane Cyclopentane Pentamethylene 15 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/cyclopropane.sml000066400000000000000000000020161450232132300261310ustar00rootroot00000000000000 Cyclic alkanes Cyclopropane Cyclopropane 9 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/norbornane.sml000066400000000000000000000034101450232132300255750ustar00rootroot00000000000000 Cyclic alkanes Norbornane Bicyclo[2.2.1]heptane Norbornane Norcamphane Norbornylane 19 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkanes/r-camphor.sml000066400000000000000000000045261450232132300253330ustar00rootroot00000000000000 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.12/data/library/molecules/Cyclic_alkanes/trans-decahydronaphthalene.sml000066400000000000000000000046231450232132300307400ustar00rootroot00000000000000 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.12/data/library/molecules/Cyclic_alkenes/000077500000000000000000000000001450232132300227235ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3-diene.sml000066400000000000000000000031351450232132300272370ustar00rootroot00000000000000 Cyclic alkenes Cyclohepta-1,3-diene Cyclohepta-1,3-diene 1,3-Cycloheptadiene 17 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3_5-triene.sml000066400000000000000000000030201450232132300276560ustar00rootroot00000000000000 Cyclic alkenes Cycloheptatriene Cyclohepta-1,3,5-triene Cycloheptatriene CHT 1--i--H--I---[7]Annulene 15 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohepta-1_4-diene.sml000066400000000000000000000031311450232132300272340ustar00rootroot00000000000000 Cyclic alkenes Cyclohepta-1,4-diene Cyclohepta-1,4-diene 1,4-Cycloheptadiene 17 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohexa-1_3-diene.sml000066400000000000000000000027141450232132300270650ustar00rootroot00000000000000 Cyclic alkenes Cyclohexa-1,3-diene Cyclohexa-1,3-diene 1,3-Cyclohexadiene 1,2-Dihydrobenzene 1,3-CHD 14 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohexa-1_4-diene.sml000066400000000000000000000027131450232132300270650ustar00rootroot00000000000000 Cyclic alkenes Cyclohexa-1,4-diene Cyclohexa-1,4-diene 1,4-Cyclohexadiene 1,4-Dihydrobenzene 1,4-CHD 14 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclohexene.sml000066400000000000000000000031121450232132300257430ustar00rootroot00000000000000 Cyclic alkenes Cyclohexene Cyclohexene Tetrahydrobenzene Benzenetetrahydride Hexanaphthylene 16 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cycloocta-1_3-diene.sml000066400000000000000000000034401450232132300270630ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3-diene Cycloocta-1,3-diene 1,3-Cyclooctadiene 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5-triene.sml000066400000000000000000000032001450232132300275030ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,5-triene Cycloocta-1,3,5-triene 18 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5_7-tetraene.sml000066400000000000000000000030601450232132300302560ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,5,7-tetraene Cycloocta-1,3,5,7-tetraene [8]Annulene COT 16 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_6-triene.sml000066400000000000000000000030231450232132300275070ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,6-triene Cycloocta-1,3,6-triene 18 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclopenta-1_3-diene.sml000066400000000000000000000023511450232132300272440ustar00rootroot00000000000000 Cyclic alkenes Cyclopenta-1,3-diene Cyclopenta-1,3-diene 1,3-Cyclopentadiene Pyropentylene 11 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/cyclopentene.sml000066400000000000000000000024351450232132300261340ustar00rootroot00000000000000 Cyclic alkenes Cyclopentene Cyclopentene 13 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/e-cyclooctene.sml000066400000000000000000000033371450232132300261770ustar00rootroot00000000000000 Cyclic alkenes (E)-Cyclooctene (E)-Cyclooctene --i--trans--I---Cyclooctene 22 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/z-cycloheptene.sml000066400000000000000000000033411450232132300263720ustar00rootroot00000000000000 Cyclic alkenes (Z)-Cycloheptene (Z)-Cycloheptene --i--cis--I---Cycloheptene 19 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_alkenes/z-cyclooctene.sml000066400000000000000000000036431450232132300262240ustar00rootroot00000000000000 Cyclic alkenes (Z)-Cyclooctene (Z)-Cyclooctene --i--cis--I---Cyclooctene 22 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/000077500000000000000000000000001450232132300226055ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-allopyranose.sml000066400000000000000000000040411450232132300273350ustar00rootroot00000000000000 Sugars (Cyclics) Allopyranose-α-D α-D-Allopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-arabinopyranose.sml000066400000000000000000000034441450232132300300270ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-α-D α-D-Arabinopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-fucopyranose.sml000066400000000000000000000037461450232132300273550ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-α-D α-D-Fucopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-galactopyranose.sml000066400000000000000000000040551450232132300300250ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-α-D α-D-Galactopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-galacturonopyranose.sml000066400000000000000000000036621450232132300307340ustar00rootroot00000000000000 Sugars (Cyclics) Galacturonopyranose-α-D α-D-Galacturonopyranose 22 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-glucopyranose.sml000066400000000000000000000040361450232132300275230ustar00rootroot00000000000000 Sugars (Cyclics) Glucopyranose-α-D α-D-Glucopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-glucuronopyranose.sml000066400000000000000000000036621450232132300304330ustar00rootroot00000000000000 Sugars (Cyclics) Glucuronopyranose-α-D α-D-Glucuronopyranose 22 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-gulopyranose.sml000066400000000000000000000040461450232132300273610ustar00rootroot00000000000000 Sugars (Cyclics) Gulopyranose-α-D α-D-Gulopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-idopyranose.sml000066400000000000000000000040501450232132300271610ustar00rootroot00000000000000 Sugars (Cyclics) Idopyranose-α-D α-D-Idopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-lyxopyranose.sml000066400000000000000000000034341450232132300274060ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-α-D α-D-Lyxopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-mannopyranose.sml000066400000000000000000000040601450232132300275170ustar00rootroot00000000000000 Sugars (Cyclics) Mannopyranose-α-D α-D-Mannopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-psicopyranose.sml000066400000000000000000000040371450232132300275300ustar00rootroot00000000000000 Sugars (Cyclics) Psicopyranose-α-D α-D-Psicopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-rhamnopyranose.sml000066400000000000000000000037421450232132300277010ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-α-D α-D-Rhamnopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-ribopyranose.sml000066400000000000000000000034371450232132300273510ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-α-D α-D-Ribopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-tagatopyranose.sml000066400000000000000000000040531450232132300276700ustar00rootroot00000000000000 Sugars (Cyclics) Tagatopyranose-α-D α-D-Tagatopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-talopyranose.sml000066400000000000000000000040531450232132300273500ustar00rootroot00000000000000 Sugars (Cyclics) Talopyranose-α-D α-D-Talopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-d-xylopyranose.sml000066400000000000000000000034341450232132300274060ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-α-D α-D-Xylopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-arabinopyranose.sml000066400000000000000000000034471450232132300300420ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-α-L α-L-Arabinopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-fucopyranose.sml000066400000000000000000000037471450232132300273660ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-α-L α-L-Fucopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-galactopyranose.sml000066400000000000000000000040541450232132300300340ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-α-L α-L-Galactopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-lyxopyranose.sml000066400000000000000000000034361450232132300274200ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-α-L α-L-Lyxopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-rhamnopyranose.sml000066400000000000000000000037571450232132300277170ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-α-L α-L-Rhamnopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-ribopyranose.sml000066400000000000000000000034301450232132300273520ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-α-L α-L-Ribopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-sorbopyranose.sml000066400000000000000000000040421450232132300275430ustar00rootroot00000000000000 Sugars (Cyclics) Sorbopyranose-α-L α-L-Sorbopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/alpha-l-xylopyranose.sml000066400000000000000000000034401450232132300274130ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-α-L α-L-Xylopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-allopyranose.sml000066400000000000000000000040431450232132300271650ustar00rootroot00000000000000 Sugars (Cyclics) Allopyranose-β-D β-D-Allopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-arabinopyranose.sml000066400000000000000000000034351450232132300276550ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-β-D β-D-Arabinopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-fructopyranose.sml000066400000000000000000000040551450232132300275430ustar00rootroot00000000000000 Sugars (Cyclics) Fructopyranose-β-D β-D-Fructopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-fucopyranose.sml000066400000000000000000000037351450232132300272010ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-β-D β-D-Fucopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-galactopyranose.sml000066400000000000000000000040631450232132300276520ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-β-D β-D-Galactopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-glucopyranose.sml000066400000000000000000000040451450232132300273510ustar00rootroot00000000000000 Sugars (Cyclics) Glucopyranose-β-D β-D-Glucopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-gulopyranose.sml000066400000000000000000000040551450232132300272070ustar00rootroot00000000000000 Sugars (Cyclics) Gulopyranose-β-D β-D-Gulopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-idopyranose.sml000066400000000000000000000040511450232132300270100ustar00rootroot00000000000000 Sugars (Cyclics) Idopyranose-β-D β-D-Idopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-lyxopyranose.sml000066400000000000000000000034361450232132300272360ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-β-D β-D-Lyxopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-mannopyranose.sml000066400000000000000000000040511450232132300273450ustar00rootroot00000000000000 Sugars (Cyclics) Mannopyranose-β-D β-D-Mannopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-rhamnopyranose.sml000066400000000000000000000037571450232132300275350ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-β-D β-D-Rhamnopyranose 23 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-ribopyranose.sml000066400000000000000000000034351450232132300271750ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-β-D β-D-Ribopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-tagatopyranose.sml000066400000000000000000000040541450232132300275170ustar00rootroot00000000000000 Sugars (Cyclics) Tagatopyranose-β-D β-D-Tagatopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-talopyranose.sml000066400000000000000000000040561450232132300272010ustar00rootroot00000000000000 Sugars (Cyclics) Talopyranose-β-D β-D-Talopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-d-xylopyranose.sml000066400000000000000000000034361450232132300272360ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-β-D β-D-Xylopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-l-arabinopyranose.sml000066400000000000000000000034421450232132300276630ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-β-L β-L-Abinopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-l-lyxopyranose.sml000066400000000000000000000034361450232132300272460ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-β-L β-L-Lyxopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-l-ribopyranose.sml000066400000000000000000000034311450232132300272010ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-β-L β-L-Ribopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Cyclic_sugars/beta-l-xylopyranose.sml000066400000000000000000000034401450232132300272410ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-β-L β-L-Xylopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Ethers/000077500000000000000000000000001450232132300212455ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Ethers/1_4-dioxane.sml000066400000000000000000000027741450232132300240040ustar00rootroot00000000000000 Ethers 1,4-Dioxane 1,4-Dioxane Diethylene dioxide Diethylene ether --i--p--I---Dioxane [6]-crown-2 14 Atomes-GNU-1.1.12/data/library/molecules/Ethers/di-tert-butylether.sml000066400000000000000000000045611450232132300255250ustar00rootroot00000000000000 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.12/data/library/molecules/Ethers/dibutylether.sml000066400000000000000000000045541450232132300244760ustar00rootroot00000000000000 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.12/data/library/molecules/Ethers/diethylether.sml000066400000000000000000000030411450232132300244520ustar00rootroot00000000000000 Ethers Ether Ethoxyethane Diethyl ether Ethyl ether Ethyl oxide Ether 15 Atomes-GNU-1.1.12/data/library/molecules/Ethers/diisopropylether.sml000066400000000000000000000037111450232132300253710ustar00rootroot00000000000000 Ethers Diisopropyl ether 2-[(Propan-2-yl)oxy]propane Diisopropyl ether 2-Isopropoxypropane Diisopropyl oxide 21 Atomes-GNU-1.1.12/data/library/molecules/Ethers/dimethylether.sml000066400000000000000000000022011450232132300246240ustar00rootroot00000000000000 Ethers Dimethyl ether Methoxymethane Dimethyl ether Wood ether Demeon 9 Atomes-GNU-1.1.12/data/library/molecules/Ethers/dipropylether.sml000066400000000000000000000036721450232132300246640ustar00rootroot00000000000000 Ethers Dipropyl ether 1-Propoxypropane Propyl ether Dipropyl ether Di---i--n--I---propyl ether 21 Atomes-GNU-1.1.12/data/library/molecules/Ethers/ethylmethylether.sml000066400000000000000000000024761450232132300253730ustar00rootroot00000000000000 Ethers Methoxyethane Methoxyethane Methyl ethyl ether Ethyl methyl ether 12 Atomes-GNU-1.1.12/data/library/molecules/Ethers/tetrahydrofuran.sml000066400000000000000000000026741450232132300252140ustar00rootroot00000000000000 Ethers Tetrahydrofuran Oxolane Tetrahydrofuran Oxacyclopentane Butylene oxide Cyclotetramethylene oxide 13 Atomes-GNU-1.1.12/data/library/molecules/Ethers/tetrahydropyran.sml000066400000000000000000000030741450232132300252250ustar00rootroot00000000000000 Ethers Tetrahydropyran Oxane Tetrahydropyran Oxacyclohexane 16 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/000077500000000000000000000000001450232132300222455ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/arachidonic_acid.sml000066400000000000000000000102621450232132300262070ustar00rootroot00000000000000 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.12/data/library/molecules/Fatty_acids/caprylic_acid.sml000066400000000000000000000042751450232132300255600ustar00rootroot00000000000000 Fatty acids Caprylic acid Octanoic acid Caprylic acid 26 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/cervonic_acid.sml000066400000000000000000000103451450232132300255550ustar00rootroot00000000000000 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.12/data/library/molecules/Fatty_acids/decanoic_acid.sml000066400000000000000000000052351450232132300255140ustar00rootroot00000000000000 Fatty acids Decanoic acid Decanoic acid Capric acid --i--n--I---Capric acid --i--n--I---Decanoic acid 32 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/hexanoic_acid.sml000066400000000000000000000035271450232132300255470ustar00rootroot00000000000000 Fatty acids Hexanoic acid Hexanoic acid Caproic acid --i--n--I---Caproic acid 20 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/lauric_acid.sml000066400000000000000000000060431450232132300252240ustar00rootroot00000000000000 Fatty acids Lauric acid Dodecanoic acid Lauric acid --i--n--I---Dodecanoic acid Vulvic acid 38 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/linoleic_acid.sml000066400000000000000000000076151450232132300255510ustar00rootroot00000000000000 Fatty acids Linoleic acid (9Z,12Z)-Octadeca-9,12-dienoic acid Linoleic acid 52 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/linolenic_acid.sml000066400000000000000000000074661450232132300257330ustar00rootroot00000000000000 Fatty acids Linolenic acid (9Z,12Z,15Z)-Octadeca-9,12,15-trienoic acid α-Linolenic acid Linolenic acid 50 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/myristic_acid.sml000066400000000000000000000065611450232132300256150ustar00rootroot00000000000000 Fatty acids Myristic acid Tetradecanoic acid Myristic acid 44 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/oleic_acid.sml000066400000000000000000000100731450232132300250360ustar00rootroot00000000000000 Fatty acids Oleic acid (9Z)-Octadec-9-enoic acid Oleic acid --i--cis--I---9-Octadecenoic acid 54 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/palmitic_acid.sml000066400000000000000000000074001450232132300255450ustar00rootroot00000000000000 Fatty acids Palmitic acid Hexadecanoic acid Palmitic acid 50 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/stearic_acid.sml000066400000000000000000000102251450232132300253740ustar00rootroot00000000000000 Fatty acids Stearic acid Octadecanoic acid Stearic acid 56 Atomes-GNU-1.1.12/data/library/molecules/Fatty_acids/valeric_acid.sml000066400000000000000000000032571450232132300253760ustar00rootroot00000000000000 Fatty acids Valeric acid Pentanoic acid Valeric acid Butane-1-carboxylic acid Valerianic acid 17 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/000077500000000000000000000000001450232132300221175ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c180.sml000066400000000000000000000302571450232132300233160ustar00rootroot00000000000000 Fullerenes C--c--180--f-- C--c--180--f-- 180 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c20.sml000066400000000000000000000033121450232132300232170ustar00rootroot00000000000000 Fullerenes C--c--20--f-- C--c--20--f-- 20 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c24.sml000066400000000000000000000037241450232132300232320ustar00rootroot00000000000000 Fullerenes C--c--24--f-- C--c--24--f-- 24 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c240.sml000066400000000000000000000402011450232132300233010ustar00rootroot00000000000000 Fullerenes C--c--240--f-- C--c--240--f-- 240 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c26.sml000066400000000000000000000041231450232132300232260ustar00rootroot00000000000000 Fullerenes C--c--26--f-- C--c--26--f-- 26 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c28.sml000066400000000000000000000043361450232132300232360ustar00rootroot00000000000000 Fullerenes C--c--28--f-- C--c--28--f-- 28 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c30.sml000066400000000000000000000045371450232132300232320ustar00rootroot00000000000000 Fullerenes C--c--30--f-- C--c--30--f-- 30 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c32.sml000066400000000000000000000047471450232132300232370ustar00rootroot00000000000000 Fullerenes C--c--32--f-- C--c--32--f-- 32 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c320.sml000066400000000000000000000526311450232132300233120ustar00rootroot00000000000000 Fullerenes C--c--320--f-- C--c--320--f-- 320 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c36.sml000066400000000000000000000053541450232132300232360ustar00rootroot00000000000000 Fullerenes C--c--36--f-- C--c--36--f-- 36 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c50.sml000066400000000000000000000072151450232132300232300ustar00rootroot00000000000000 Fullerenes C--c--50--f-- C--c--50--f-- 50 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c60.sml000066400000000000000000000106341450232132300232300ustar00rootroot00000000000000 Fullerenes C--c--60--f-- (C--c--60--f---Ih)[5,6]fullerene C--c--60--f-- Buckminsterfullerene Buckyball 60 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c70.sml000066400000000000000000000117131450232132300232300ustar00rootroot00000000000000 Fullerenes C--c--70--f-- C--c--70--f-- 70 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c76.sml000066400000000000000000000125261450232132300232410ustar00rootroot00000000000000 Fullerenes C--c--76--f-- C--c--76--f-- 76 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c78.sml000066400000000000000000000127271450232132300232460ustar00rootroot00000000000000 Fullerenes C--c--78--f-- C--c--78--f-- 78 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/c80.sml000066400000000000000000000131401450232132300232250ustar00rootroot00000000000000 Fullerenes C--c--80--f-- C--c--80--f-- 80 Atomes-GNU-1.1.12/data/library/molecules/Fullerenes/pc70bm.sml000066400000000000000000000156741450232132300237410ustar00rootroot00000000000000 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.12/data/library/molecules/Fullerenes/pcbm.sml000066400000000000000000000145361450232132300235660ustar00rootroot00000000000000 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.12/data/library/molecules/Heterocyclics/000077500000000000000000000000001450232132300226135ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1_2-oxazole.sml000066400000000000000000000020231450232132300253650ustar00rootroot00000000000000 Heterocyclics 1,2-Oxazole 1,2-Oxazole 8 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1_2-thiazole.sml000066400000000000000000000020251450232132300255250ustar00rootroot00000000000000 Heterocyclics 1,2-Thiazole 1,2-Thiazole 8 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1_3-oxazole.sml000066400000000000000000000020221450232132300253650ustar00rootroot00000000000000 Heterocyclics 1,3-Oxazole 1,3-Oxazole 8 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1_3-thiazole.sml000066400000000000000000000020251450232132300255260ustar00rootroot00000000000000 Heterocyclics 1,3-Thiazole 1,3-Thiazole 8 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1h-indole.sml000066400000000000000000000031161450232132300251110ustar00rootroot00000000000000 Heterocyclics Indole Indole 2,3-Benzopyrrole Ketole 1-Benzazole 16 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1h-pyrazole.sml000066400000000000000000000021411450232132300255010ustar00rootroot00000000000000 Heterocyclics 1--i--H--I---Pyrazole 1--i--H--I---Pyrazole 1,2-Diazole 9 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/1h-pyrrole.sml000066400000000000000000000022101450232132300253250ustar00rootroot00000000000000 Heterocyclics 1H-Pyrrole 1H-Pyrrole Azole 10 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/benzofuran.sml000066400000000000000000000030051450232132300254770ustar00rootroot00000000000000 Heterocyclics Benzofuran 1-Benzofuran Coumarone Benzo[--i--b--I--]furan 15 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/benzothiophene.sml000066400000000000000000000030641450232132300263540ustar00rootroot00000000000000 Heterocyclics Benzothiophene Benzo[--i--b--I--]thiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/furan.sml000066400000000000000000000021531450232132300244440ustar00rootroot00000000000000 Heterocyclics Furan Furan Oxoline Oxole Furfuran 9 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/isonicotinamide.sml000066400000000000000000000030231450232132300265040ustar00rootroot00000000000000 Heterocyclics Isonicotinamide Isonicotinamide Pyridine-4-carboxamide 15 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/isonicotinic_acid.sml000066400000000000000000000030431450232132300270020ustar00rootroot00000000000000 Heterocyclics Isonicotinic acid Pyridine-4-carboxylic acid Isonicotinic acid 4-Pyridinecarboxylic acid 4-Picolinic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/nicotinamide.sml000066400000000000000000000031471450232132300260000ustar00rootroot00000000000000 Heterocyclics Nicotinamide Nicotinamide Pyridine-3-carboxamide Vitamin PP vitamin B--c--3--f-- Niacinamide 15 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/nicotinic_acid.sml000066400000000000000000000030021450232132300262620ustar00rootroot00000000000000 Heterocyclics Nicotinic acid Pyridine-3-carboxylic acid Nicotinic acid Niacin Bionic 14 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/picolinamide.sml000066400000000000000000000030131450232132300257620ustar00rootroot00000000000000 Heterocyclics Picolinamide Pyridine-2-carboxamide Picolinamide 15 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/picolinic_acid.sml000066400000000000000000000027211450232132300262630ustar00rootroot00000000000000 Heterocyclics Picolinic acid Pyridine-2-carboxylic acid Picolinic acid 14 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/pyridine.sml000066400000000000000000000023731450232132300251600ustar00rootroot00000000000000 Heterocyclics Pyridine Pyridine Azinine Azine Azabenzene 11 Atomes-GNU-1.1.12/data/library/molecules/Heterocyclics/thiophene.sml000066400000000000000000000021761450232132300253210ustar00rootroot00000000000000 Heterocyclics Thiophene Thiophene Thiofuran Thiacyclopentadiene Thiole 9 Atomes-GNU-1.1.12/data/library/molecules/Ketones/000077500000000000000000000000001450232132300214235ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Ketones/acetone.sml000066400000000000000000000023011450232132300235520ustar00rootroot00000000000000 Ketones Acetone Propan-2-one Propanone Acetone Dimethyl ketone 10 Atomes-GNU-1.1.12/data/library/molecules/Ketones/butanone.sml000066400000000000000000000026171450232132300237610ustar00rootroot00000000000000 Ketones Butanone Butan-2-one Butanone Ethyl methyl ketone Methylacetone 13 Atomes-GNU-1.1.12/data/library/molecules/Ketones/cyclohexanone.sml000066400000000000000000000032431450232132300250010ustar00rootroot00000000000000 Ketones Cyclohexanone Cyclohexanone Oxocyclohexane Pimelic ketone Ketohexamethylene 17 Atomes-GNU-1.1.12/data/library/molecules/Ketones/methyl_vinyl_ketone.sml000066400000000000000000000024261450232132300262340ustar00rootroot00000000000000 Ketones Methyl vinyl ketone But-3-en-2-one Methyl vinyl ketone MVK Methylene acetone 11 Atomes-GNU-1.1.12/data/library/molecules/Ketones/p-benzoquinone.sml000066400000000000000000000025651450232132300251210ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/000077500000000000000000000000001450232132300226115ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-allose.sml000066400000000000000000000041651450232132300250340ustar00rootroot00000000000000 Sugars (Linears) (D)-Allose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Allose Aldehydo-(D)-allose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-altrose.sml000066400000000000000000000041171450232132300252230ustar00rootroot00000000000000 Sugars (Linears) (D)-Altrose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Altrose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-arabinose.sml000066400000000000000000000034611450232132300255160ustar00rootroot00000000000000 Sugars (Linears) (D)-Arabinose (D)-Arabinose Pectinose 20 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-erythrose.sml000066400000000000000000000030741450232132300255770ustar00rootroot00000000000000 Sugars (Linears) (D)-Erythrose (2R,3R)-2,3,4-Trihydroxybutanal (D)-Erythrose 16 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-erythrulose.sml000066400000000000000000000031411450232132300261330ustar00rootroot00000000000000 Sugars (Linears) (D)-Erythrulose (R)-1,3,4-Trihydroxybutan-2-one (D)-Erythrulose Glycerotetrulose 16 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-fructose.sml000066400000000000000000000042211450232132300254000ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-galactose.sml000066400000000000000000000041741450232132300255170ustar00rootroot00000000000000 Sugars (Linears) (D)-Galactose (2R,3S,4S,5R)-2,3,4,5,6-pentahydroxyhexanal (D)-Galactose Galactopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-glucose.sml000066400000000000000000000041771450232132300252210ustar00rootroot00000000000000 Sugars (Linears) (D)-Glucose (2R,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Glucose α-(D)-Glucopyranose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-glyceraldehyde.sml000066400000000000000000000025211450232132300265340ustar00rootroot00000000000000 Sugars (Linears) (D)-Glyceraldehyde (R)-2,3-Dihydroxypropanal (D)-Glyceraldehyde (D)-Glycerose 12 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-gulose.sml000066400000000000000000000042271450232132300250520ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-idose.sml000066400000000000000000000041231450232132300246520ustar00rootroot00000000000000 Sugars (Linears) (D)-Idose (2S,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Idose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-lyxose.sml000066400000000000000000000035471450232132300251030ustar00rootroot00000000000000 Sugars (Linears) (D)-Lyxose (2S,3S,4R)-2,3,4,5-Tetrahydroxypentanal (D)-Lyxose Lyxopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-mannose.sml000066400000000000000000000042261450232132300252130ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-psicose.sml000066400000000000000000000042641450232132300252220ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-ribose.sml000066400000000000000000000035731450232132300250420ustar00rootroot00000000000000 Sugars (Linears) (D)-Ribose (2R,3S,4R)-5-(Hydroxymethyl)tetrahydrofuran-2,3,4-triol (D)-Ribofuranose α-(D)-ribose 20 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-ribulose.sml000066400000000000000000000035771450232132300254070ustar00rootroot00000000000000 Sugars (Linears) (D)-Ribulose (3R,4R)-1,3,4,5-Tetrahydroxypentan-2-one Adonose Arabinulose Araboketose 20 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-sorbose.sml000066400000000000000000000042211450232132300252220ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-tagatose.sml000066400000000000000000000042411450232132300253570ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/d-talose.sml000066400000000000000000000041561450232132300250440ustar00rootroot00000000000000 Sugars (Linears) (D)-Talose (2S,3S,4S,5R)-Pentahydroxyhexanal (D)-Talose (D)-Talo-hexose 24 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-threose.sml000066400000000000000000000031271450232132300252230ustar00rootroot00000000000000 Sugars (Linears) (D)-Threose (2S,3R)-2,3,4-Trihydroxybutanal (D)-Threose (D)-Threoterose 16 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-xylose.sml000066400000000000000000000035431450232132300250770ustar00rootroot00000000000000 Sugars (Linears) (D)-Xylose (3R,4S,5R)-oxane-2,3,4,5-tetrol (D)-Xylose α-(D)-xylopyranose 20 Atomes-GNU-1.1.12/data/library/molecules/Linear_sugars/d-xylulose.sml000066400000000000000000000036161450232132300254410ustar00rootroot00000000000000 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.12/data/library/molecules/Linear_sugars/dihydroxyacetone.sml000066400000000000000000000025111450232132300267070ustar00rootroot00000000000000 Sugars (Linears) Dihydroxyacetone 1,3-Dihydroxypropan-2-one Dihydroxyacetone Glycerone 12 Atomes-GNU-1.1.12/data/library/molecules/Macrocycles/000077500000000000000000000000001450232132300222575ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Macrocycles/ni-phthalocyanine.sml000066400000000000000000000116071450232132300264130ustar00rootroot00000000000000 Macrocycles Ni-Phthalocyanine Ni-Phthalocyanine 57 Atomes-GNU-1.1.12/data/library/molecules/Macrocycles/phthalocyanine.sml000066400000000000000000000103551450232132300260060ustar00rootroot00000000000000 Macrocycles Phthalocyanine Phthalocyanine 58 Atomes-GNU-1.1.12/data/library/molecules/Macrocycles/porphin.sml000066400000000000000000000060021450232132300244510ustar00rootroot00000000000000 Macrocycles Porphin Porphin 21--i--H--I--,23--i--H--I---Porphin Porphyrin 38 Atomes-GNU-1.1.12/data/library/molecules/Misc/000077500000000000000000000000001450232132300207065ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Misc/water.sml000066400000000000000000000012551450232132300225500ustar00rootroot00000000000000 Misc Water Water Oxidane Dihydrogen monoxide 3 Atomes-GNU-1.1.12/data/library/molecules/Nitriles/000077500000000000000000000000001450232132300216045ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Nitriles/Trichloroacetonitrile.sml000066400000000000000000000016471450232132300267010ustar00rootroot00000000000000 Nitriles Trichloroacetonitrile Trichloroacetonitrile 1,1,1-Trichloroacetonitrile 6 Atomes-GNU-1.1.12/data/library/molecules/Nitriles/acetonitrile.sml000066400000000000000000000017471450232132300250140ustar00rootroot00000000000000 Nitriles Acetonitrile Acetonitrile Cyanomethane Ethyl nitrile Methanecarbonitrile Methyl cyanide 6 Atomes-GNU-1.1.12/data/library/molecules/Nitriles/butyronitrile.sml000066400000000000000000000026001450232132300252320ustar00rootroot00000000000000 Nitriles Butyronitrile Butanenitrile Butyronitrile 1-Cyanopropane Propyl cyanide --i--n--I---Butyronitrile 12 Atomes-GNU-1.1.12/data/library/molecules/Nitriles/isobutyronitrile.sml000066400000000000000000000025131450232132300257500ustar00rootroot00000000000000 Nitriles Isobutyronitrile 2-Methylpropanenitrile Isobutyronitrile 2-Methylpropionitrile 12 Atomes-GNU-1.1.12/data/library/molecules/Nitriles/propionitrile.sml000066400000000000000000000022501450232132300252170ustar00rootroot00000000000000 Nitriles Propionitrile Propanenitrile Cyanoethane Ethyl cyanide Propionitrile Propylnitrile 9 Atomes-GNU-1.1.12/data/library/molecules/Nucleobases/000077500000000000000000000000001450232132300222565ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Nucleobases/adenine.sml000066400000000000000000000030471450232132300244020ustar00rootroot00000000000000 Nucleobases Adenine 9--i--H--I---purin-6-amine Adenine 6-Aminopurine 1,6-dihydro-6-iminopurine 15 Atomes-GNU-1.1.12/data/library/molecules/Nucleobases/cytosine.sml000066400000000000000000000027671450232132300246440ustar00rootroot00000000000000 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.12/data/library/molecules/Nucleobases/guanine.sml000066400000000000000000000033361450232132300244260ustar00rootroot00000000000000 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.12/data/library/molecules/Nucleobases/thymine.sml000066400000000000000000000031611450232132300244510ustar00rootroot00000000000000 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.12/data/library/molecules/Nucleobases/uracil.sml000066400000000000000000000027371450232132300242630ustar00rootroot00000000000000 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.12/data/library/molecules/Steroids/000077500000000000000000000000001450232132300216075ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Steroids/cholesterol.sml000066400000000000000000000130141450232132300246460ustar00rootroot00000000000000 Steroids Cholesterol (3β)-cholest-5-en-3-ol Cholesterol Cholesterin Cholesteryl alcohol 74 Atomes-GNU-1.1.12/data/library/molecules/Steroids/estradiol.sml000066400000000000000000000070311450232132300243130ustar00rootroot00000000000000 Steroids Estradiol (17β)-estra-1,3,5(10)-triene-3,17-diol Estradiol Oestradiol E2 17β-Estradiol 44 Atomes-GNU-1.1.12/data/library/molecules/Steroids/testosterone.sml000066400000000000000000000071741450232132300250730ustar00rootroot00000000000000 Steroids Testosterone 17β-hydroxyandrost-4-en-3-one Testosterone Androst-4-en-17β-ol-3-one 46 Atomes-GNU-1.1.12/data/library/molecules/Sulfoxides/000077500000000000000000000000001450232132300221405ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Sulfoxides/dimethyl_sulfoxide.sml000066400000000000000000000023541450232132300265620ustar00rootroot00000000000000 Sulfoxides Dimethyl sulfoxide Dimethyl sulfoxide Methylsulfinylmethane Methyl sulfoxide 10 Atomes-GNU-1.1.12/data/library/molecules/Thiols/000077500000000000000000000000001450232132300212555ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/molecules/Thiols/2-methylproprane-2-thiol.sml000066400000000000000000000031171450232132300264600ustar00rootroot00000000000000 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.12/data/library/molecules/Thiols/butane-1-thiol.sml000066400000000000000000000030511450232132300245220ustar00rootroot00000000000000 Thiols Butane-1-thiol Butane-1-thiol Butyl mercaptan --i--n--I---Butyl mercaptan 1-Butanethiol 15 Atomes-GNU-1.1.12/data/library/molecules/Thiols/ethane-1_2-dithiol.sml000066400000000000000000000022771450232132300252570ustar00rootroot00000000000000 Thiols Ethane-1,2-dithiol Ethane-1,2-dithiol Dimercaptoethane 1,2-Ethanedithiol 10 Atomes-GNU-1.1.12/data/library/molecules/Thiols/ethanethiol.sml000066400000000000000000000022141450232132300242750ustar00rootroot00000000000000 Thiols Ethanethiol Ethanethiol Ethyl mercaptan Mercaptoethane Ethyl sulfhydrate 9 Atomes-GNU-1.1.12/data/library/molecules/Thiols/heptane-1-thiol.sml000066400000000000000000000041321450232132300246710ustar00rootroot00000000000000 Thiols Heptane-1-thiol Heptane-1-thiol 1-Heptanethiol Heptyl mercaptan 24 Atomes-GNU-1.1.12/data/library/molecules/Thiols/hexane-1-thiol.sml000066400000000000000000000036171450232132300245240ustar00rootroot00000000000000 Thiols Hexane-1-thiol Hexane-1-thiol 1-Hexanethiol Hexil mercaptan 21 Atomes-GNU-1.1.12/data/library/molecules/Thiols/methanethiol.sml000066400000000000000000000017001450232132300244510ustar00rootroot00000000000000 Thiols Methanethiol Methanethiol Methyl mercaptan Mercaptomethane Methiol 6 Atomes-GNU-1.1.12/data/library/molecules/Thiols/octane-1-thiol.sml000066400000000000000000000043761450232132300245300ustar00rootroot00000000000000 Thiols Octane-1-thiol Octane-1-thiol 1-Octanethiol 27 Atomes-GNU-1.1.12/data/library/molecules/Thiols/pentane-1-thiol.sml000066400000000000000000000033121450232132300246760ustar00rootroot00000000000000 Thiols Pentane-1-thiol Pentane-1-thiol 1-Pentanethiol Penta mercaptan 18 Atomes-GNU-1.1.12/data/library/molecules/Thiols/proprane-1-thiol.sml000066400000000000000000000025441450232132300251000ustar00rootroot00000000000000 Thiols Proprane-1-thiol Proprane-1-thiol --i--n--I---Propylthiol 1-Propanethiol Propyl mercaptan 12 Atomes-GNU-1.1.12/data/library/molecules/Thiols/proprane-2-thiol.sml000066400000000000000000000025431450232132300251000ustar00rootroot00000000000000 Thiols Proprane-2-thiol Proprane-2-thiol 2-Propyl mercaptan Isopropyl mercaptan Isopropanthiol 12 Atomes-GNU-1.1.12/data/library/molecules/Thiols/r_butane-2-thiol.sml000066400000000000000000000030631450232132300250470ustar00rootroot00000000000000 Thiols (R)-Butane-2-thiol (2R)-Butane-2-thiol (R)-Butane-2-thiol (R)-2-Butanethiol (2R)-2-butanethiol 15 Atomes-GNU-1.1.12/data/library/space_groups/000077500000000000000000000000001450232132300205155ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/library/space_groups/1-P1.sgl000066400000000000000000000006321450232132300216430ustar00rootroot00000000000000 P1 1 P 1 Triclinic Atomes-GNU-1.1.12/data/library/space_groups/10-P2sm.sgl000066400000000000000000000040661450232132300222710ustar00rootroot00000000000000 P2/m 10 P 1 2/m 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/100-P4bm.sgl000066400000000000000000000021501450232132300223220ustar00rootroot00000000000000 P4bm 100 P 4 b m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/101-P42cm.sgl000066400000000000000000000024411450232132300224110ustar00rootroot00000000000000 P42cm 101 P 42 c m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/102-P42nm.sgl000066400000000000000000000023211450232132300224220ustar00rootroot00000000000000 P42nm 102 P 42 n m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/103-P4cc.sgl000066400000000000000000000021331450232132300223150ustar00rootroot00000000000000 P4cc 103 P 4 c c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/104-P4nc.sgl000066400000000000000000000017741450232132300223430ustar00rootroot00000000000000 P4nc 104 P 4 n c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/105-P42mc.sgl000066400000000000000000000026411450232132300224170ustar00rootroot00000000000000 P42mc 105 P 42 m c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/106-P42bc.sgl000066400000000000000000000021051450232132300224000ustar00rootroot00000000000000 P42bc 106 P 42 b c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/107-I4mm.sgl000066400000000000000000000024711450232132300223430ustar00rootroot00000000000000 I4mm 107 I 4 m m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/108-I4cm.sgl000066400000000000000000000023051450232132300223260ustar00rootroot00000000000000 I4cm 108 I 4 c m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/109-I41md.sgl000066400000000000000000000021751450232132300224160ustar00rootroot00000000000000 I41md 109 I 41 m d Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/11-P21sm.sgl000066400000000000000000000023651450232132300223530ustar00rootroot00000000000000 P21/m 11 P 1 21/m 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/110-I41cd.sgl000066400000000000000000000017651450232132300224000ustar00rootroot00000000000000 I41cd 110 I 41 c d Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/111-P-42m.sgl000066400000000000000000000051621450232132300223270ustar00rootroot00000000000000 P-42m 111 P -4 2 m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/112-P-42c.sgl000066400000000000000000000054021450232132300223130ustar00rootroot00000000000000 P-42c 112 P -4 2 c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/113-P-421m.sgl000066400000000000000000000026651450232132300224170ustar00rootroot00000000000000 P-421m 113 P -4 21 m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/114-P-421c.sgl000066400000000000000000000025141450232132300223770ustar00rootroot00000000000000 P-421c 114 P -4 21 c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/115-P-4m2.sgl000066400000000000000000000041561450232132300223350ustar00rootroot00000000000000 P-4m2 115 P -4 m 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/116-P-4c2.sgl000066400000000000000000000041641450232132300223230ustar00rootroot00000000000000 P-4c2 116 P -4 c 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/117-P-4b2.sgl000066400000000000000000000036771450232132300223330ustar00rootroot00000000000000 P-4b2 117 P -4 b 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/118-P-4n2.sgl000066400000000000000000000037531450232132300223430ustar00rootroot00000000000000 P-4n2 118 P -4 n 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/119-I-4m2.sgl000066400000000000000000000036451450232132300223340ustar00rootroot00000000000000 I-4m2 119 I -4 m 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/12-C2sm.sgl000066400000000000000000000055711450232132300222600ustar00rootroot00000000000000 C2/m 12 C 1 2/m 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/120-I-4c2.sgl000066400000000000000000000040161450232132300223030ustar00rootroot00000000000000 I-4c2 120 I -4 c 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/121-I-42m.sgl000066400000000000000000000040271450232132300223200ustar00rootroot00000000000000 I-42m 121 I -4 2 m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/122-I-42d.sgl000066400000000000000000000026401450232132300223070ustar00rootroot00000000000000 I-42d 122 I -4 2 d Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/123-P4smmm.sgl000066400000000000000000000112151450232132300227040ustar00rootroot00000000000000 P4/mmm 123 P 4/m 2/m 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/124-P4smcc.sgl000066400000000000000000000075151450232132300226710ustar00rootroot00000000000000 P4/mcc 124 P 4/m 2/c 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/125-P4snbm.sgl000066400000000000000000000100531450232132300226730ustar00rootroot00000000000000 P4/nbm 125 P 4/n 2/b 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/126-P4snnc.sgl000066400000000000000000000072451450232132300227070ustar00rootroot00000000000000 P4/nnc 126 P 4/n 2/n 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/127-P4smbm.sgl000066400000000000000000000064241450232132300227030ustar00rootroot00000000000000 P4/mbm 127 P 4/m 21/b 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/128-P4smnc.sgl000066400000000000000000000055511450232132300227060ustar00rootroot00000000000000 P4/mnc 128 P 4/m 21/b 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/129-P4snmm.sgl000066400000000000000000000065771450232132300227320ustar00rootroot00000000000000 P4/nmm 129 P 4/n 21/m 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/13-P2sc.sgl000066400000000000000000000033171450232132300222600ustar00rootroot00000000000000 P2/c 13 P 1 2/c 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/130-P4sncc.sgl000066400000000000000000000053171450232132300226650ustar00rootroot00000000000000 P4/ncc 130 P 4/n 21/c 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/131-P42smmc.sgl000066400000000000000000000105041450232132300227530ustar00rootroot00000000000000 P42/mmc 131 P 42/m 2/m 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/132-P42smcm.sgl000066400000000000000000000103241450232132300227540ustar00rootroot00000000000000 P42/mcm 132 P 42/m 2/c 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/133-P42snbc.sgl000066400000000000000000000077011450232132300227500ustar00rootroot00000000000000 P42/nbc 133 P 42/n 2/b 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/134-P42snnm.sgl000066400000000000000000000106631450232132300230000ustar00rootroot00000000000000 P42/nnm 134 P 42/n 2/n 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/135-P42smbc.sgl000066400000000000000000000062051450232132300227470ustar00rootroot00000000000000 P42/mbc 135 P 42/m 21/b 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/136-P42smnm.sgl000066400000000000000000000064161450232132300230020ustar00rootroot00000000000000 P42/mnm 136 P 42/m 21/n 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/137-P42snmc.sgl000066400000000000000000000054341450232132300227700ustar00rootroot00000000000000 P42/nmc 137 P 42/n 21/m 2/c Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/138-P42sncm.sgl000066400000000000000000000067361450232132300227770ustar00rootroot00000000000000 P42/ncm 138 P 42/n 21/c 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/139-I4smmm.sgl000066400000000000000000000074221450232132300227110ustar00rootroot00000000000000 I4/mmm 139 I 4/m 2/m 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/14-P21sc.sgl000066400000000000000000000027521450232132300223440ustar00rootroot00000000000000 P21/c 14 P 1 21/c 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/140-I4smcm.sgl000066400000000000000000000071731450232132300226720ustar00rootroot00000000000000 I4/mcm 140 I 4/m 2/c 2/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/141-I41samd.sgl000066400000000000000000000063661450232132300227440ustar00rootroot00000000000000 I41/amd 141 I 41/a 2/m 2/d Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/142-I41sacd.sgl000066400000000000000000000061461450232132300227270ustar00rootroot00000000000000 I41/acd 142 I 41/a 2/c 2/d Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/143-P3.sgl000066400000000000000000000013601450232132300220130ustar00rootroot00000000000000 P3 143 P 3 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/144-P31.sgl000066400000000000000000000007531450232132300221020ustar00rootroot00000000000000 P31 144 P 31 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/145-P32.sgl000066400000000000000000000007531450232132300221040ustar00rootroot00000000000000 P32 145 P 32 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/146-R3.sgl000066400000000000000000000016621450232132300220250ustar00rootroot00000000000000 R3 146 R 3 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/147-P-3.sgl000066400000000000000000000024661450232132300221040ustar00rootroot00000000000000 P-3 147 P -3 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/148-R-3.sgl000066400000000000000000000030571450232132300221040ustar00rootroot00000000000000 R-3 148 R -3 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/149-P312.sgl000066400000000000000000000034571450232132300221750ustar00rootroot00000000000000 P312 149 P 3 1 2 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/15-C2sc.sgl000066400000000000000000000077731450232132300222570ustar00rootroot00000000000000 C2/c 15 C 1 2/c 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/150-P321.sgl000066400000000000000000000024611450232132300221570ustar00rootroot00000000000000 P321 150 P 3 2 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/151-P3112.sgl000066400000000000000000000016441450232132300222430ustar00rootroot00000000000000 P3112 151 P 31 1 2 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/152-P3121.sgl000066400000000000000000000016361450232132300222450ustar00rootroot00000000000000 P3121 152 P 31 2 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/153-P3212.sgl000066400000000000000000000016441450232132300222460ustar00rootroot00000000000000 P3212 153 P 32 1 2 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/154-P3221.sgl000066400000000000000000000016361450232132300222500ustar00rootroot00000000000000 P3221 154 P 32 2 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/155-R32.sgl000066400000000000000000000030441450232132300221030ustar00rootroot00000000000000 R32 155 R 3 2 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/156-P3m1.sgl000066400000000000000000000017711450232132300222630ustar00rootroot00000000000000 P3m1 156 P 3 m 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/157-P31m.sgl000066400000000000000000000016751450232132300222670ustar00rootroot00000000000000 P31m 157 P 3 1 m Trigonal Atomes-GNU-1.1.12/data/library/space_groups/158-P3c1.sgl000066400000000000000000000017331450232132300222510ustar00rootroot00000000000000 P3c1 158 P 3 c 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/159-P31c.sgl000066400000000000000000000015301450232132300222450ustar00rootroot00000000000000 P31c 159 P 3 1 c Trigonal Atomes-GNU-1.1.12/data/library/space_groups/16-P222.sgl000066400000000000000000000053001450232132300220730ustar00rootroot00000000000000 P222 16 P 2 2 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/160-R3m.sgl000066400000000000000000000022671450232132300222000ustar00rootroot00000000000000 R3m 160 R 3 m Trigonal Atomes-GNU-1.1.12/data/library/space_groups/161-R3c.sgl000066400000000000000000000021141450232132300221560ustar00rootroot00000000000000 R3c 161 R 3 c Trigonal Atomes-GNU-1.1.12/data/library/space_groups/162-P-31m.sgl000066400000000000000000000051411450232132300223300ustar00rootroot00000000000000 P-31m 162 P -3 1 2/m Trigonal Atomes-GNU-1.1.12/data/library/space_groups/163-P-31c.sgl000066400000000000000000000043241450232132300223210ustar00rootroot00000000000000 P-31c 163 P -3 1 2/c Trigonal Atomes-GNU-1.1.12/data/library/space_groups/164-P-3m1.sgl000066400000000000000000000044201450232132300223310ustar00rootroot00000000000000 P-3m1 164 P -3 2/m 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/165-P-3c1.sgl000066400000000000000000000037101450232132300223210ustar00rootroot00000000000000 P-3c1 165 P -3 2/c 1 Trigonal Atomes-GNU-1.1.12/data/library/space_groups/166-R-3m.sgl000066400000000000000000000047771450232132300222730ustar00rootroot00000000000000 R-3m 166 R -3 2/m Trigonal Atomes-GNU-1.1.12/data/library/space_groups/167-R-3c.sgl000066400000000000000000000041561450232132300222510ustar00rootroot00000000000000 R-3c 167 R -3 2/c Trigonal Atomes-GNU-1.1.12/data/library/space_groups/168-P6.sgl000066400000000000000000000016721450232132300220330ustar00rootroot00000000000000 P6 168 P 6 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/169-P61.sgl000066400000000000000000000011341450232132300221060ustar00rootroot00000000000000 P61 169 P 61 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/17-P2221.sgl000066400000000000000000000021701450232132300221570ustar00rootroot00000000000000 P2221 17 P 2 2 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/170-P65.sgl000066400000000000000000000011341450232132300221020ustar00rootroot00000000000000 P65 170 P 65 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/171-P62.sgl000066400000000000000000000016341450232132300221050ustar00rootroot00000000000000 P62 171 P 62 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/172-P64.sgl000066400000000000000000000016341450232132300221100ustar00rootroot00000000000000 P64 172 P 64 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/173-P63.sgl000066400000000000000000000015221450232132300221040ustar00rootroot00000000000000 P63 173 P 63 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/174-P-6.sgl000066400000000000000000000034631450232132300221050ustar00rootroot00000000000000 P-6 174 P -6 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/175-P6sm.sgl000066400000000000000000000051611450232132300223660ustar00rootroot00000000000000 P6/m 175 P 6/m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/176-P63sm.sgl000066400000000000000000000043261450232132300224540ustar00rootroot00000000000000 P63/m 176 P 63/m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/177-P622.sgl000066400000000000000000000061371450232132300222000ustar00rootroot00000000000000 P622 177 P 6 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/178-P6122.sgl000066400000000000000000000025301450232132300222530ustar00rootroot00000000000000 P6122 178 P 61 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/179-P6522.sgl000066400000000000000000000025301450232132300222600ustar00rootroot00000000000000 P6522 179 P 65 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/18-P21212.sgl000066400000000000000000000016111450232132300222400ustar00rootroot00000000000000 P21212 18 P 21 21 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/180-P6222.sgl000066400000000000000000000057541450232132300222600ustar00rootroot00000000000000 P6222 180 P 62 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/181-P6422.sgl000066400000000000000000000057541450232132300222630ustar00rootroot00000000000000 P6422 181 P 64 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/182-P6322.sgl000066400000000000000000000043071450232132300222540ustar00rootroot00000000000000 P6322 182 P 63 2 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/183-P6mm.sgl000066400000000000000000000032011450232132300223500ustar00rootroot00000000000000 P6mm 183 P 6 m m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/184-P6cc.sgl000066400000000000000000000026071450232132300223360ustar00rootroot00000000000000 P6cc 184 P 6 c c Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/185-P63cm.sgl000066400000000000000000000025761450232132300224410ustar00rootroot00000000000000 P63cm 185 P 63 c m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/186-P63mc.sgl000066400000000000000000000024721450232132300224350ustar00rootroot00000000000000 P63mc 186 P 63 m c Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/187-P-6m2.sgl000066400000000000000000000054261450232132300223510ustar00rootroot00000000000000 P-6m2 187 P -6 m 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/188-P-6c2.sgl000066400000000000000000000052511450232132300223340ustar00rootroot00000000000000 P-6c2 188 P -6 c 2 Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/189-P-62m.sgl000066400000000000000000000051321450232132300223450ustar00rootroot00000000000000 P-62m 189 P -6 2 m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/19-P212121.sgl000066400000000000000000000010541450232132300223230ustar00rootroot00000000000000 P212121 19 P 21 21 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/190-P-62c.sgl000066400000000000000000000043161450232132300223260ustar00rootroot00000000000000 P-62c 190 P -6 2 c Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/191-P6smmm.sgl000066400000000000000000000124711450232132300227200ustar00rootroot00000000000000 P6/mmm 191 P 6/m 2/m 2/m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/192-P6smcc.sgl000066400000000000000000000114501450232132300226710ustar00rootroot00000000000000 P6/mcc 192 P 6/m 2/c 2/c Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/193-P63smcm.sgl000066400000000000000000000104701450232132300227700ustar00rootroot00000000000000 P63/mcm 193 P 63/m 2/c 2/m Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/194-P63smmc.sgl000066400000000000000000000100311450232132300227620ustar00rootroot00000000000000 P63/mmc 194 P 63/m 2/m 2/c Hexagonal Atomes-GNU-1.1.12/data/library/space_groups/195-P23.sgl000066400000000000000000000047021450232132300221070ustar00rootroot00000000000000 P23 195 P 2 3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/196-F23.sgl000066400000000000000000000037511450232132300221010ustar00rootroot00000000000000 F23 196 F 2 3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/197-I23.sgl000066400000000000000000000034411450232132300221010ustar00rootroot00000000000000 I23 197 I 2 3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/198-P213.sgl000066400000000000000000000020431450232132300221670ustar00rootroot00000000000000 P213 198 P 21 3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/199-I213.sgl000066400000000000000000000026361450232132300221710ustar00rootroot00000000000000 I213 199 I 21 3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/2-P-1.sgl000066400000000000000000000022171450232132300217220ustar00rootroot00000000000000 P-1 2 P -1 Triclinic Atomes-GNU-1.1.12/data/library/space_groups/20-C2221.sgl000066400000000000000000000022731450232132300221400ustar00rootroot00000000000000 C2221 20 C 2 2 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/200-Pm-3.sgl000066400000000000000000000075471450232132300222540ustar00rootroot00000000000000 Pm-3 200 P 2/m -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/201-Pn-3.sgl000066400000000000000000000067741450232132300222570ustar00rootroot00000000000000 Pn-3 201 P 2/n -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/202-Fm-3.sgl000066400000000000000000000065361450232132300222410ustar00rootroot00000000000000 Fm-3 202 F 2/m -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/203-Fd-3.sgl000066400000000000000000000063341450232132300222250ustar00rootroot00000000000000 Fd-3 203 F 2/d -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/204-Im-3.sgl000066400000000000000000000056731450232132300222470ustar00rootroot00000000000000 Im-3 204 I 2/m -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/205-Pa-3.sgl000066400000000000000000000040221450232132300222260ustar00rootroot00000000000000 Pa-3 205 P 21/a -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/206-Ia-3.sgl000066400000000000000000000051571450232132300222320ustar00rootroot00000000000000 Ia-3 206 I 21/a -3 Cubic Atomes-GNU-1.1.12/data/library/space_groups/207-P432.sgl000066400000000000000000000074421450232132300221710ustar00rootroot00000000000000 P432 207 P 4 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/208-P4232.sgl000066400000000000000000000125731450232132300222550ustar00rootroot00000000000000 P4232 208 P 42 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/209-F432.sgl000066400000000000000000000074551450232132300221650ustar00rootroot00000000000000 F432 209 F 4 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/21-C222.sgl000066400000000000000000000042001450232132300220500ustar00rootroot00000000000000 C222 21 C 2 2 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/210-F4132.sgl000066400000000000000000000071071450232132300222300ustar00rootroot00000000000000 F4132 210 F 41 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/211-I432.sgl000066400000000000000000000076161450232132300221600ustar00rootroot00000000000000 I432 211 I 4 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/212-P4332.sgl000066400000000000000000000052441450232132300222460ustar00rootroot00000000000000 P4332 212 P 43 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/213-P4132.sgl000066400000000000000000000052441450232132300222450ustar00rootroot00000000000000 P4132 213 P 41 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/214-I4132.sgl000066400000000000000000000104711450232132300222350ustar00rootroot00000000000000 I4132 214 I 41 3 2 Cubic Atomes-GNU-1.1.12/data/library/space_groups/215-P-43m.sgl000066400000000000000000000063341450232132300223370ustar00rootroot00000000000000 P-43m 215 P -4 3 m Cubic Atomes-GNU-1.1.12/data/library/space_groups/216-F-43m.sgl000066400000000000000000000054751450232132300223330ustar00rootroot00000000000000 F-43m 216 F -4 3 m Cubic Atomes-GNU-1.1.12/data/library/space_groups/217-I-43m.sgl000066400000000000000000000061071450232132300223300ustar00rootroot00000000000000 I-43m 217 I -4 3 m Cubic Atomes-GNU-1.1.12/data/library/space_groups/218-P-43n.sgl000066400000000000000000000077301450232132300223440ustar00rootroot00000000000000 P-43n 218 P -4 3 n Cubic Atomes-GNU-1.1.12/data/library/space_groups/219-F-43c.sgl000066400000000000000000000070571450232132300223220ustar00rootroot00000000000000 F-43c 219 F -4 3 c Cubic Atomes-GNU-1.1.12/data/library/space_groups/22-F222.sgl000066400000000000000000000034271450232132300220660ustar00rootroot00000000000000 F222 22 F 2 2 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/220-I-43d.sgl000066400000000000000000000055531450232132300223150ustar00rootroot00000000000000 I-43d 220 I -4 3 d Cubic Atomes-GNU-1.1.12/data/library/space_groups/221-Pm-3m.sgl000066400000000000000000000160561450232132300224270ustar00rootroot00000000000000 Pm-3m 221 P 4/m -3 2/m Cubic Atomes-GNU-1.1.12/data/library/space_groups/222-Pn-3n.sgl000066400000000000000000000150221450232132300224220ustar00rootroot00000000000000 Pn-3n 222 P 4/n -3 2/n Cubic Atomes-GNU-1.1.12/data/library/space_groups/223-Pm-3n.sgl000066400000000000000000000166301450232132300224300ustar00rootroot00000000000000 Pm-3n 223 P 42/m -3 2/n Cubic Atomes-GNU-1.1.12/data/library/space_groups/224-Pn-3m.sgl000066400000000000000000000202171450232132300224250ustar00rootroot00000000000000 Pn-3m 224 P 42/n -3 2/m Cubic Atomes-GNU-1.1.12/data/library/space_groups/225-Fm-3m.sgl000066400000000000000000000143111450232132300224110ustar00rootroot00000000000000 Fm-3m 225 F 4/m -3 2/m Cubic Atomes-GNU-1.1.12/data/library/space_groups/226-Fm-3c.sgl000066400000000000000000000150171450232132300224040ustar00rootroot00000000000000 Fm-3c 226 F 4/m -3 2/c Cubic Atomes-GNU-1.1.12/data/library/space_groups/227-Fd-3m.sgl000066400000000000000000000145011450232132300224030ustar00rootroot00000000000000 Fd-3m 227 F 41/d -3 2/m Cubic Atomes-GNU-1.1.12/data/library/space_groups/228-Fd-3c.sgl000066400000000000000000000154101450232132300223720ustar00rootroot00000000000000 Fd-3c 228 F 41/d -3 2/c Cubic Atomes-GNU-1.1.12/data/library/space_groups/229-Im-3m.sgl000066400000000000000000000153641450232132300224310ustar00rootroot00000000000000 Im-3m 229 I 4/m -3 2/m Cubic Atomes-GNU-1.1.12/data/library/space_groups/23-I222.sgl000066400000000000000000000032751450232132300220730ustar00rootroot00000000000000 I222 23 I 2 2 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/230-Ia-3d.sgl000066400000000000000000000152721450232132300223720ustar00rootroot00000000000000 Ia-3d 230 I 41/a -3 2/d Cubic Atomes-GNU-1.1.12/data/library/space_groups/24-I212121.sgl000066400000000000000000000020271450232132300223110ustar00rootroot00000000000000 I212121 24 I 21 21 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/25-Pmm2.sgl000066400000000000000000000027051450232132300222670ustar00rootroot00000000000000 Pmm2 25 P m m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/26-Pmc21.sgl000066400000000000000000000020461450232132300223350ustar00rootroot00000000000000 Pmc21 26 P m c 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/27-Pcc2.sgl000066400000000000000000000021711450232132300222420ustar00rootroot00000000000000 Pcc2 27 P c c 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/28-Pma2.sgl000066400000000000000000000022241450232132300222520ustar00rootroot00000000000000 Pma2 28 P m a 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/29-Pca21.sgl000066400000000000000000000014621450232132300223250ustar00rootroot00000000000000 Pca21 29 P c a 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/3-P2.sgl000066400000000000000000000016201450232132300216440ustar00rootroot00000000000000 P2 3 P 1 2 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/30-Pnc2.sgl000066400000000000000000000020501450232132300222430ustar00rootroot00000000000000 Pnc2 30 P n c 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/31-Pmn21.sgl000066400000000000000000000016601450232132300223450ustar00rootroot00000000000000 Pmn21 31 P m n 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/32-Pba2.sgl000066400000000000000000000015731450232132300222400ustar00rootroot00000000000000 Pba2 32 P b a 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/33-Pna21.sgl000066400000000000000000000014721450232132300223340ustar00rootroot00000000000000 Pna21 33 P n a 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/34-Pnn2.sgl000066400000000000000000000016131450232132300222660ustar00rootroot00000000000000 Pnn2 34 P n n 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/35-Cmm2.sgl000066400000000000000000000027271450232132300222570ustar00rootroot00000000000000 Cmm2 35 C m m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/36-Cmc21.sgl000066400000000000000000000030501450232132300223150ustar00rootroot00000000000000 Cmc21 36 C m c 21 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/37-Ccc2.sgl000066400000000000000000000024731450232132300222330ustar00rootroot00000000000000 Ccc2 37 C c c 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/38-Amm2.sgl000066400000000000000000000036721450232132300222600ustar00rootroot00000000000000 Amm2 38 A m m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/39-Aem2.sgl000066400000000000000000000034261450232132300222460ustar00rootroot00000000000000 Aem2 39 A e m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/4-P21.sgl000066400000000000000000000010711450232132300217260ustar00rootroot00000000000000 P21 4 P 1 21 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/40-Ama2.sgl000066400000000000000000000032311450232132300222240ustar00rootroot00000000000000 Ama2 40 A m a 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/41-Aea2.sgl000066400000000000000000000030471450232132300222220ustar00rootroot00000000000000 Aea2 41 A e a 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/42-Fmm2.sgl000066400000000000000000000031251450232132300222510ustar00rootroot00000000000000 Fmm2 42 F m m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/43-Fdd2.sgl000066400000000000000000000024451450232132300222340ustar00rootroot00000000000000 Fdd2 43 F d d 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/44-Imm2.sgl000066400000000000000000000025361450232132300222630ustar00rootroot00000000000000 Imm2 44 I m m 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/45-Iba2.sgl000066400000000000000000000023021450232132300222240ustar00rootroot00000000000000 Iba2 45 I b a 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/46-Ima2.sgl000066400000000000000000000032441450232132300222460ustar00rootroot00000000000000 Ima2 46 I ma 2 Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/47-Pmmm.sgl000066400000000000000000000076741450232132300224000ustar00rootroot00000000000000 Pmmm 47 P 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/48-Pnnn.sgl000066400000000000000000000056061450232132300223750ustar00rootroot00000000000000 Pnnn 48 P 2/n 2/n 2/n Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/49-Pccm.sgl000066400000000000000000000067661450232132300223570ustar00rootroot00000000000000 Pccm 49 P 2/c 2/c 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/5-C2.sgl000066400000000000000000000037771450232132300216500ustar00rootroot00000000000000 C2 5 C 1 2 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/50-Pban.sgl000066400000000000000000000061361450232132300223340ustar00rootroot00000000000000 Pban 50 P 2/b 2/a 2/n Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/51-Pmma.sgl000066400000000000000000000051731450232132300223470ustar00rootroot00000000000000 Pmma 51 P 21 /m 2/m 2/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/52-Pnna.sgl000066400000000000000000000033571450232132300223540ustar00rootroot00000000000000 Pnna 52 P 2/n 21/n 2/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/53-Pmna.sgl000066400000000000000000000043331450232132300223470ustar00rootroot00000000000000 Pmna 53 P 2/m 2/n 21/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/54-Pcca.sgl000066400000000000000000000036361450232132300223300ustar00rootroot00000000000000 Pcca 54 P 21/c 2/c 2/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/55-Pbam.sgl000066400000000000000000000040651450232132300223370ustar00rootroot00000000000000 Pbam 55 P 21/b 21/a 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/56-Pccn.sgl000066400000000000000000000031171450232132300223410ustar00rootroot00000000000000 Pccn 56 P 21/c 21/c 2/n Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/57-Pbcm.sgl000066400000000000000000000033221450232132300223360ustar00rootroot00000000000000 Pbcm 57 P 2/b 21/c 21/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/58-Pnnm.sgl000066400000000000000000000036101450232132300223660ustar00rootroot00000000000000 Pnnm 58 P 21/n 21/n 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/59-Pmmn.sgl000066400000000000000000000040571450232132300223740ustar00rootroot00000000000000 Pmmn 59 P 21/m 21/m 2/n Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/6-Pm.sgl000066400000000000000000000013351450232132300217450ustar00rootroot00000000000000 Pm 6 P 1 m 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/60-Pbcn.sgl000066400000000000000000000030411450232132300223270ustar00rootroot00000000000000 Pbcn 60 P 21/b 2/c 21/n Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/61-Pbca.sgl000066400000000000000000000021751450232132300223220ustar00rootroot00000000000000 Pbca 61 P 21/b 21/c 21/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/62-Pnma.sgl000066400000000000000000000030501450232132300223420ustar00rootroot00000000000000 Pnma 62 P 21/n 21/m 21/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/63-Cmcm.sgl000066400000000000000000000052621450232132300223360ustar00rootroot00000000000000 Cmcm 63 C 2/m 2/c 21/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/64-Cmce.sgl000066400000000000000000000051441450232132300223260ustar00rootroot00000000000000 Cmce 64 C 2/m 2/c 21/e Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/65-Cmmm.sgl000066400000000000000000000065071450232132300223550ustar00rootroot00000000000000 Cmmm 65 C 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/66-Cccm.sgl000066400000000000000000000057371450232132300223360ustar00rootroot00000000000000 Cccm 66 C 2/c 2/c 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/67-Cmme.sgl000066400000000000000000000064461450232132300223510ustar00rootroot00000000000000 Cmme 67 C 2/m 2/m 2/e Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/68-Ccce.sgl000066400000000000000000000060771450232132300223260ustar00rootroot00000000000000 Ccce 68 C 2/c 2/c 2/e Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/69-Fmmm.sgl000066400000000000000000000057561450232132300223710ustar00rootroot00000000000000 Fmmm 69 F 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/7-Pc.sgl000066400000000000000000000016111450232132300217310ustar00rootroot00000000000000 Pc 7 P 1 c 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/70-Fddd.sgl000066400000000000000000000046001450232132300223110ustar00rootroot00000000000000 Fddd 70 F 2/d 2/d 2/d Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/71-Immm.sgl000066400000000000000000000051061450232132300223520ustar00rootroot00000000000000 Immm 71 I 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/72-Ibam.sgl000066400000000000000000000053561450232132300223330ustar00rootroot00000000000000 Ibam 72 I 2/b 2/a 2/m Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/73-Ibca.sgl000066400000000000000000000036641450232132300223220ustar00rootroot00000000000000 Ibca 73 I 21/b 21/c 21/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/74-Imma.sgl000066400000000000000000000057231450232132300223460ustar00rootroot00000000000000 Imma 74 I 21/m 21/m 21/a Orthorhombic Atomes-GNU-1.1.12/data/library/space_groups/75-P4.sgl000066400000000000000000000014541450232132300217440ustar00rootroot00000000000000 P4 75 P 4 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/76-P41.sgl000066400000000000000000000010141450232132300220160ustar00rootroot00000000000000 P41 76 P 41 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/77-P42.sgl000066400000000000000000000016051450232132300220260ustar00rootroot00000000000000 P42 77 P 42 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/78-P43.sgl000066400000000000000000000010141450232132300220220ustar00rootroot00000000000000 P43 78 P 43 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/79-I4.sgl000066400000000000000000000014751450232132300217440ustar00rootroot00000000000000 I4 79 I 4 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/8-Cm.sgl000066400000000000000000000036441450232132300217370ustar00rootroot00000000000000 Cm 8 C 1 m 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/80-I41.sgl000066400000000000000000000014061450232132300220070ustar00rootroot00000000000000 I41 80 I 41 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/81-P-4.sgl000066400000000000000000000023461450232132300220170ustar00rootroot00000000000000 P-4 81 P -4 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/82-I-4.sgl000066400000000000000000000023211450232132300220020ustar00rootroot00000000000000 I-4 82 I -4 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/83-P4sm.sgl000066400000000000000000000040561450232132300223040ustar00rootroot00000000000000 P4/m 83 P 4/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/84-P42sm.sgl000066400000000000000000000042531450232132300223660ustar00rootroot00000000000000 P42/m 84 P 42/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/85-P4sn.sgl000066400000000000000000000033041450232132300223020ustar00rootroot00000000000000 P4/n 85 P 4/n Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/86-P42sn.sgl000066400000000000000000000034671450232132300223770ustar00rootroot00000000000000 P42/n 86 P 42/n Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/87-I4sm.sgl000066400000000000000000000035431450232132300223010ustar00rootroot00000000000000 I4/m 87 I 4/m Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/88-I41sa.sgl000066400000000000000000000035161450232132300223470ustar00rootroot00000000000000 I41/a 88 I 41/a Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/89-P422.sgl000066400000000000000000000054501450232132300221150ustar00rootroot00000000000000 P422 89 P 4 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/9-Cc.sgl000066400000000000000000000064351450232132300217270ustar00rootroot00000000000000 Cc 9 C 1 c 1 Monoclinic Atomes-GNU-1.1.12/data/library/space_groups/90-P4212.sgl000066400000000000000000000031771450232132300221720ustar00rootroot00000000000000 P4212 90 P 4 21 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/91-P4122.sgl000066400000000000000000000023511450232132300221640ustar00rootroot00000000000000 P4122 91 P 41 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/92-P41212.sgl000066400000000000000000000016301450232132300222450ustar00rootroot00000000000000 P41212 92 P 41 21 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/93-P4222.sgl000066400000000000000000000061611450232132300221720ustar00rootroot00000000000000 P4222 93 P 42 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/94-P42212.sgl000066400000000000000000000033451450232132300222550ustar00rootroot00000000000000 P42212 94 P 42 21 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/95-P4322.sgl000066400000000000000000000023511450232132300221720ustar00rootroot00000000000000 P4322 95 P 43 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/96-P43212.sgl000066400000000000000000000016301450232132300222530ustar00rootroot00000000000000 P43212 96 P 43 21 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/97-I422.sgl000066400000000000000000000043401450232132300221020ustar00rootroot00000000000000 I422 97 I 4 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/98-I4122.sgl000066400000000000000000000035451450232132300221720ustar00rootroot00000000000000 I4122 98 I 41 2 2 Tetragonal Atomes-GNU-1.1.12/data/library/space_groups/99-P4mm.sgl000066400000000000000000000027461450232132300223110ustar00rootroot00000000000000 P4mm 99 P 4 m m Tetragonal Atomes-GNU-1.1.12/data/pixmaps/000077500000000000000000000000001450232132300160405ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/pixmaps/an.png000066400000000000000000000006011450232132300171410ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bd.png000066400000000000000000000010551450232132300171340ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bmp.png000066400000000000000000000071211450232132300173250ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/000077500000000000000000000000001450232132300174675ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/pixmaps/bravais/Cubic-F.png000066400000000000000000000135761450232132300214210ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Cubic-I.png000066400000000000000000000114101450232132300214050ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Cubic-P.png000066400000000000000000000062171450232132300214250ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Hexagonal.png000066400000000000000000000227431450232132300221130ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Monoclinic-I.png000066400000000000000000000157221450232132300224640ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Monoclinic-P.png000066400000000000000000000071451450232132300224730ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Orthorhombic-C.png000066400000000000000000000076601450232132300230250ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Orthorhombic-F.png000066400000000000000000000166661450232132300230360ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Orthorhombic-I.png000066400000000000000000000117161450232132300230300ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Orthorhombic-P.png000066400000000000000000000050311450232132300230300ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Tetragonal-I.png000066400000000000000000000124601450232132300224660ustar00rootroot00000000000000PNG  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.12/data/pixmaps/bravais/Trigonal-R.png000066400000000000000000000126651450232132300221650ustar00rootroot00000000000000PNG  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.12/data/pixmaps/cedit.png000066400000000000000000000023671450232132300176460ustar00rootroot00000000000000PNG  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.12/data/pixmaps/ch.png000066400000000000000000000007201450232132300171370ustar00rootroot00000000000000PNG  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.12/data/pixmaps/chain.png000066400000000000000000005136201450232132300176370ustar00rootroot00000000000000PNG  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.12/data/pixmaps/convert.png000066400000000000000000000011631450232132300202270ustar00rootroot00000000000000PNG  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.12/data/pixmaps/dots/000077500000000000000000000000001450232132300170115ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/pixmaps/dots/dots-a.png000066400000000000000000000003641450232132300207110ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME ">UIDATH D_+1zYe@3)&RJ2݂-GLjٽ w @8o4d 5R;KUC:u( efr7/\h>T:8IENDB`Atomes-GNU-1.1.12/data/pixmaps/dots/dots-b.png000066400000000000000000000004261450232132300207110ustar00rootroot00000000000000PNG  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.12/data/pixmaps/dots/dots-c.png000066400000000000000000000003631450232132300207120ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME *f>zjIDATHA ! E_TnpA2bRnEYH One,3̞ثa1FT;c ^9gB;q9O)QJAUZk??Z/ogte+}B31q3IENDB`Atomes-GNU-1.1.12/data/pixmaps/dots/dots-d.png000066400000000000000000000004041450232132300207070ustar00rootroot00000000000000PNG  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.12/data/pixmaps/dots/dots-e.png000066400000000000000000000004231450232132300207110ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME qIDATH10C c`" Q:KB Re[!B?]wu=1FrLIJ,m" I8(03wQM &OXk18 P11T~Z9lW үYW6TaIENDB`Atomes-GNU-1.1.12/data/pixmaps/dots/dots-f.png000066400000000000000000000002361450232132300207140ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME 'e+IDATHc`` eY߿&4` ^ IENDB`Atomes-GNU-1.1.12/data/pixmaps/dots/dots-g.png000066400000000000000000000002301450232132300207070ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME *b%IDATH @#\h~T /.P6P0bIENDB`Atomes-GNU-1.1.12/data/pixmaps/dots/dots-h.png000066400000000000000000000002261450232132300207150ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME  eD#IDATH@c'߀$5 璚#IENDB`Atomes-GNU-1.1.12/data/pixmaps/eps.png000066400000000000000000000127201450232132300173370ustar00rootroot00000000000000PNG  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.12/data/pixmaps/field/000077500000000000000000000000001450232132300171235ustar00rootroot00000000000000Atomes-GNU-1.1.12/data/pixmaps/field/an.png000066400000000000000000000306071450232132300202350ustar00rootroot00000000000000PNG  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.12/data/pixmaps/field/bd.png000066400000000000000000000107171450232132300202240ustar00rootroot00000000000000PNG  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.12/data/pixmaps/field/di.png000066400000000000000000000245631450232132300202370ustar00rootroot00000000000000PNG  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.12/data/pixmaps/gr.png000066400000000000000000000010361450232132300171560ustar00rootroot00000000000000PNG  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.12/data/pixmaps/jpg.png000066400000000000000000000066021450232132300173320ustar00rootroot00000000000000PNG  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.12/data/pixmaps/logo.png000066400000000000000000012051741450232132300175200ustar00rootroot00000000000000PNG  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.12/data/pixmaps/mol.png000066400000000000000000000022141450232132300173340ustar00rootroot00000000000000PNG  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.12/data/pixmaps/molecule-big.png000066400000000000000000000325561450232132300211250ustar00rootroot00000000000000PNG  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.12/data/pixmaps/molecule.png000066400000000000000000000020671450232132300203600ustar00rootroot00000000000000PNG  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.12/data/pixmaps/opengl.png000066400000000000000000000025061450232132300200350ustar00rootroot00000000000000PNG  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.12/data/pixmaps/pdf.png000066400000000000000000000062311450232132300173210ustar00rootroot00000000000000PNG  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.12/data/pixmaps/png.png000066400000000000000000000077321450232132300173430ustar00rootroot00000000000000PNG  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.12/data/pixmaps/ri.png000066400000000000000000000014571450232132300171670ustar00rootroot00000000000000PNG  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.12/data/pixmaps/sp.png000066400000000000000000000004431450232132300171710ustar00rootroot00000000000000PNG  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.12/data/pixmaps/sq.png000066400000000000000000000010331450232132300171660ustar00rootroot00000000000000PNG  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.12/data/pixmaps/svg.png000066400000000000000000000057561450232132300173620ustar00rootroot00000000000000PNG  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.12/data/pixmaps/td-big.png000066400000000000000000000101141450232132300177110ustar00rootroot00000000000000PNG  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.12/data/pixmaps/td.png000066400000000000000000000013651450232132300171620ustar00rootroot00000000000000PNG  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.12/data/pixmaps/tiff.png000066400000000000000000000067551450232132300175130ustar00rootroot00000000000000PNG  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.12/install-sh000077500000000000000000000357761450232132300154740ustar00rootroot00000000000000#!/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.12/lic000066400000000000000000000012031450232132300141340ustar00rootroot00000000000000/* 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.12/metadata/000077500000000000000000000000001450232132300152265ustar00rootroot00000000000000Atomes-GNU-1.1.12/metadata/atomes-mime.xml000066400000000000000000000050461450232132300201720ustar00rootroot00000000000000 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.12/metadata/atomes.desktop000066400000000000000000000014741450232132300201170ustar00rootroot00000000000000[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.12/metadata/fr.ipcms.atomes.appdata.xml000066400000000000000000000167141450232132300224020ustar00rootroot00000000000000 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.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.12/metadata/icons/000077500000000000000000000000001450232132300163415ustar00rootroot00000000000000Atomes-GNU-1.1.12/metadata/icons/atomes-coordinates.ico000066400000000000000000002040761450232132300226460ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '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.12/metadata/icons/atomes-coordinates.png000066400000000000000000000215371450232132300226570ustar00rootroot00000000000000PNG  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.12/metadata/icons/atomes-coordinates.svg000066400000000000000000000264141450232132300226710ustar00rootroot00000000000000 Atomic CoordinatesAtomic Coordinates Atomes-GNU-1.1.12/metadata/icons/atomes-project.ico000066400000000000000000002040761450232132300220020ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '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.12/metadata/icons/atomes-project.png000066400000000000000000000046721450232132300220140ustar00rootroot00000000000000PNG  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.12/metadata/icons/atomes-project.svg000066400000000000000000000251351450232132300220240ustar00rootroot00000000000000 Atomes-GNU-1.1.12/metadata/icons/atomes-workspace.ico000066400000000000000000002040761450232132300223320ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '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.12/metadata/icons/atomes-workspace.png000066400000000000000000000060211450232132300223320ustar00rootroot00000000000000PNG  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.12/metadata/icons/atomes-workspace.svg000066400000000000000000000311771450232132300223570ustar00rootroot00000000000000 Atomes-GNU-1.1.12/metadata/icons/atomes.ico000066400000000000000000001701761450232132300203410ustar00rootroot00000000000000x| 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.12/metadata/icons/atomes.png000066400000000000000000000063141450232132300203430ustar00rootroot00000000000000PNG  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.12/metadata/icons/atomes.svg000066400000000000000000000254271450232132300203640ustar00rootroot00000000000000 Atomes-GNU-1.1.12/missing000077500000000000000000000153361450232132300150550ustar00rootroot00000000000000#! /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.12/src/000077500000000000000000000000001450232132300142355ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/Makefile.am000066400000000000000000000304451450232132300162770ustar00rootroot00000000000000# 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)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)init.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.12/src/Makefile.in000066400000000000000000002320201450232132300163010ustar00rootroot00000000000000# 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)cqvf.$(OBJEXT) \ $(for)dmtx.$(OBJEXT) $(for)dvtb.$(OBJEXT) $(for)escs.$(OBJEXT) \ $(for)fzbt.$(OBJEXT) $(for)gr.$(OBJEXT) $(for)grfft.$(OBJEXT) \ $(for)initchains.$(OBJEXT) $(for)init.$(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)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)init.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.12/src/affero.h000066400000000000000000001046431450232132300156600ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/atomes.rc000066400000000000000000000025271450232132300160610ustar00rootroot00000000000000/* 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,12,0 PRODUCTVERSION 1,1,12,0 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "ATOMES-1.1.12" VALUE "FileVersion", "1.1.12" VALUE "LegalCopyright", "Copyright 2023 Sbastien Le Roux" VALUE "OriginalFileName", "atomes.exe" VALUE "ProductName", "Atomes 1.1.12" VALUE "ProductVersion", "1.1.12" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END Atomes-GNU-1.1.12/src/atomes.rc.in000066400000000000000000000033141450232132300164610ustar00rootroot00000000000000/* 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 2023 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.12/src/bind.h000066400000000000000000000123141450232132300153230ustar00rootroot00000000000000/* 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 */ /* * This header file: 'bind.h' * * Contains: - Binding to the Fortran90 subroutines */ #ifndef BIND_H_ #define BIND_H_ 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 int getnspec_ (int *); extern void getlabel_ (int *, char *); 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 *); 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 void label_spec_ (int *, int *, int *); 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.12/src/calc/000077500000000000000000000000001450232132300151375ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/calc/calc.c000066400000000000000000000247241450232132300162160ustar00rootroot00000000000000/* 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 */ /* * This file: 'calc.c' * * Contains: * - Callbacks used in by the assistants - Atom selection manipulation tools - The initialization of the assistant * * List of subroutines: 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); struct atom_selection * duplicate_ogl_selection (struct 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 (struct 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 struct selatom * new_selatom (int id, int sp); GtkWidget * qm_assistant; struct 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; /* * G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: confirm that the selection is good * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void field_question (gchar * question, GCallback handler, gpointer data) * * Usage: ask the use to confirm something * * gchar * question : the text to display * GCallback handler : the callback to use * gpointer 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); } /* * struct atom_selection * duplicate_ogl_selection (struct atom_selection * old_sel) * * Usage: copy an atom selection * * struct atom_selection * old_sel : the atom selection to copy */ struct atom_selection * duplicate_ogl_selection (struct atom_selection * old_sel) { int i, j; struct selatom * at, * bt; struct 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_selatom (at -> id, at -> sp); bt = new_sel -> first; new_sel -> last = NULL; } else { bt -> next = new_selatom (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; } /* * void unselect_all_atoms (glwin * view) * * Usage: remove all atom(s) from selection * * glwin * view : the glwin the selection comes from */ void unselect_all_atoms (glwin * view) { int i, j, k; struct 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); } /* * void restore_ogl_selection (glwin * view) * * Usage: restore a saved atom selection * * glwin * view : the glwin to restore the selection to */ void restore_ogl_selection (glwin * view) { int i, j, k, l; struct 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) { struct selatom * 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); } } /* * void preserve_ogl_selection (glwin * view) * * Usage: copy the atom selection, so that it can be re-used once the input assistant is closed. * * glwin * view : the glwin the selection comes from */ void preserve_ogl_selection (glwin * view) { int h, i, j, k, l; struct 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]; /* * G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) * * Usage: start an input creation assistant * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/calc/calc.h000066400000000000000000000023361450232132300162160ustar00rootroot00000000000000/* 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 */ /* * This header file: 'calc.h' * * Contains: */ #ifndef CALC_H_ #define CALC_H_ #define MAXDATAQM 7 extern GtkWidget * qm_assistant; extern struct 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.12/src/calc/cp2k/000077500000000000000000000000001450232132300157765ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/calc/cp2k/cp2k.h000066400000000000000000000072311450232132300170110ustar00rootroot00000000000000/* 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 */ /* * This header file: 'cp2k.h' * * Contains: * 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.12/src/calc/cp2k/cp2k_basis.c000066400000000000000000006336531450232132300202020ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/cp2k/cp2k_files.c000066400000000000000000000177471450232132300202030ustar00rootroot00000000000000/* 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 */ /* * This file: 'cp2k_files.c' * * Contains: * - The subroutines to handle CP2K basis sets and pseudopotentials * * List of subroutines: 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; /* * gchar * get_nth_elem (int sp, int id, int obj) * * Usage: retrieve basis or pseudopotential name string for element from global list * * int sp : the chemical species * int id : the list element id of 'sp' to find * int 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; } /* * gchar * get_nth_key (int sp, int id, int obj) * * Usage: retrieve basis or pseudopotential key string for element from global list * * int sp : the chemical species * int id : the list element id of 'sp' to find * int 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; } /* * int cp2k_is_basis_in_database (int sp) * * Usage: does this chemical species have basis set(s) in store ? * * int 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; } /* * int cp2k_is_pseudo_in_database (int sp) * * Usage: does this chemical species have pseudopotential(s) in store ? * * int 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; } /* * int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) * * Usage: find matching chemical element in basis / pseudo database * * int sp : the chemical species * int * sp_id : the list of entries to save * int n_basis_pseudo : the number of element(s) to check * char * bp_elem[n_basis_pseudo] : 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; } /* * G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) * * Usage: change basis or pseudopotential * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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; } } } /* * GtkWidget * prepare_basis_combo (int sp, int obj) * * Usage: prepare basis set / pseudopotential combo box * * int sp : the chemical species * int 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.12/src/calc/cp2k/cp2k_gth-basis.c000066400000000000000000004015341450232132300207510ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/cp2k/cp2k_init.c000066400000000000000000001454421450232132300200360ustar00rootroot00000000000000/* 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 */ /* * This file: 'cp2k_init.c' * * Contains: * - The initialization of the CP2K input assistant * * List of subroutines: 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; /* * void print_start_buffer () * * Usage: 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]); } } /* * G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) * * Usage: update CP2K option entry callback * * GtkEntry * res : the GtkEntry the signal is coming from * gpointer 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 /* * G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) * * Usage: CP2K option toggle callback GTK3 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) * * Usage: CP2K option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); /* * G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) * * Usage: change a GtkComboBox while creating a CP2K input file * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 (); } /* * GtkWidget * create_vdw_box (int id) * * Usage: create the VdW informaiton and option(s) widgets * * int 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; } /* * G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) * * Usage: UNUSED * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } */ /* * void create_mol_selection_button (GtkWidget * box, int id) * * Usage: UNUSED * * GtkWidget * box : the box to insert the new widget in * int 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); } */ /* * G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget * but, gpointer data) * * Usage: CP2K option dialog - creating the dialog * * GtkWidget * but : the GtkWidget sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) * * Usage: update some CP2K parameters * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) * * Usage: update some CP2K parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) * * Usage: update some CP2K parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 (); } /* * G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) * * Usage: update the C2PK information textview * * GtkTextBuffer * textbuf : the GtkTextBuffer sending the signal * gpointer 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 (); } /* * GtkWidget * create_cp2k_spec_box (int spec) * * Usage: create a CP2K chemical species option combo box * * int 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); /* * G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) * * Usage: change CP2K option * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 (); } } } /* * void cp2k_option_box (GtkWidget * box, int id) * * Usage: create a CP2K option combo box * * GtkWidget * box : the box to insert the new widgets in * int 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]); } /* * GtkWidget * cp2k_section_box (int s) * * Usage: create the CP2K assistant section box * * int 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; } /* * gchar * cp_section_name (int p) * * Usage: get CP2K section name * * int 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]); } } /* * GtkWidget * vbox_cp2k (int s) * * Usage: create the CP2K assistant page vertical box * * int 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; } /* * G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) * * Usage: select the input file type * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 (); } /* * GtkWidget * file_info (int id) * * Usage: create the assistant page that present the input file(s) properties * * int 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; } /* * GtkWidget * init_cp2k () * * Usage: 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; } /* * gchar * page_name_cp2k (int p) * * Usage: get CP2K assistant page name * * int 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)"); } } /* * gboolean cp2k_with_motion () * * Usage: 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; } } /* * void add_cp2k_pages () * * Usage: 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); } /* * int find_cp2k_sym () * * Usage: 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.12/src/calc/cp2k/cp2k_mol.c000066400000000000000000000254541450232132300176620ustar00rootroot00000000000000/* 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 */ /* * This file: 'cp2k_mol.c' * * Contains: * - The subroutines to fix fragment(s) when creating the CP2K input file Note: this is not used for the time being ! * * List of subroutines: 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; /* * G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select molecule toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer in the CP2K molecule tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } /* * void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the CP2K molecule tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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; /* * G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: confirm fix selection * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) * * Usage: CP2K assistant fixing fragment(s) - running the dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void cp2k_fix_molecule () * * Usage: 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.12/src/calc/cp2k/cp2k_molopt-basis.c000066400000000000000000004175301450232132300215040ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/cp2k/cp2k_pot.c000066400000000000000000004611211450232132300176700ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/cp2k/cp2k_print.c000066400000000000000000001325711450232132300202260ustar00rootroot00000000000000/* 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 */ /* * This file: 'cp2k_print.c' * * Contains: * - The subroutines to print the CP2K input file(s) * * List of subroutines: 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 * thermostat[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"}; /* * void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) * * Usage: print a CP2K variable name * * gchar * var : the variable name * GtkTextBuffer * 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); } /* * void print_var_section (int num, gchar ** section, GtkTextBuffer * buffer) * * Usage: print CP2K input file variable section * * int num : the number of element(s) to print * gchar ** section : the section text * GtkTextBuffer * 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 (thermostat[0], NULL, buffer); print_info (thermostat[1], NULL, buffer); print_info (cp2k_thermo[thermo -> type-1], "red", buffer); print_info (thermostat[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 (thermostat[3], NULL, buffer); } /* * void print_motion_cp2k (int m, GtkTextBuffer * buffer) * * Usage: print the CP2K input MOTION section * * int m : 0 = Geometry optimisation, 1 = MD * GtkTextBuffer * 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); } /* * void print_coord_cp2k (GtkTextBuffer * buffer) * * Usage: print atomic coordinates in CP2K input format * * GtkTextBuffer * 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); } }*/ } } } } /* * void print_subsys_cp2k (GtkTextBuffer * buffer) * * Usage: print the CP2K input SUBSYS section * * GtkTextBuffer * 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); } /* * void print_variables_cp2k (GtkTextBuffer * buffer) * * Usage: print the list of the CP2K input variables * * GtkTextBuffer * 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); } /* * void print_global_cp2k (GtkTextBuffer * buffer) * * Usage: print the CP2K input file GLOBAL section * * GtkTextBuffer * 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); } } /* * void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) * * Usage: print CP2K input file PRINT section content * * gchar * spaces : spaces string * gchar * info : variable string to print * int i : SCF restart option * int j : 1 = MO cubes, 0 = else * GtkTextBuffer * 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); } /* * void print_cp2k (int f, GtkTextBuffer * buffer) * * Usage: print the CP2K input file section * * int f : the section id * GtkTextBuffer * 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.12/src/calc/cpmd/000077500000000000000000000000001450232132300160625ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/calc/cpmd/cpmd.h000066400000000000000000000054121450232132300171600ustar00rootroot00000000000000/* 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 */ /* * This header file: 'cpmd.h' * * Contains: */ #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 { CONTROL = -1, GLOBAL = 0, LOCAL = 1, MOLECULE = 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.12/src/calc/cpmd/cpmd_atoms.c000066400000000000000000000515531450232132300203650ustar00rootroot00000000000000/* 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 */ /* * This file: 'cpmd_atoms.c' * * Contains: * - The subroutines to handle dummy atom(s) for the CPMD input file * * List of subroutines: 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 (); struct dummy_atom * get_active_dummy (int id); struct 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; struct dummy_atom * dummy; int n_dummy; int * old_dummy; GtkCellRenderer * dummy_renderer[5]; GtkTreeViewColumn * dummy_col[5]; /* * struct dummy_atom * get_active_dummy (int id) * * Usage: get dummy atom by id * * int id : the target dummy atom id */ struct dummy_atom * get_active_dummy (int id) { struct dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> id != id) { if (dumm -> next != NULL) dumm = dumm -> next; } return dumm; } /* * G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) * * Usage: udate dummy atom coordinate entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); /* * G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) * * Usage: change the dummy atom type * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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]); } /* * void create_dummy_param_box (int dummy_id) * * Usage: crreate dummy atom parameter widgets * * int 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]); } } /* * G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) * * Usage: change the dummy atom id * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * struct dummy_atom * init_dummy (int type, int id) * * Usage: create dummy atom * * int type : the type of dummy atom to create * int id : the id of the new dummy atom */ struct dummy_atom * init_dummy (int type, int id) { struct 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; } /* * G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select dummy atom toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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 } /* * void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the CPMD dummy atom(s) tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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)); } /* * void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer in the CPMD dummy atom(s) tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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 (); /* * void clean_dummy_widgets () * * Usage: 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); } /* * G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: remove dummy atom(s) - running the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); struct 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); } /* * void remove_dummy (int num_to_remove) * * Usage: remove dummy atom(s) - creating the dialog * * int 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 struct 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)); } /* * void add_dummy (int extra) * * Usage: add dummy atom(s) * * int 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 --; } struct 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)); } /* * G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) * * Usage: add or remove dummy atom spin callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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]); } /* * GtkWidget * create_dummy_box () * * Usage: 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; } /* * G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) * * Usage: CPMD input file, add constraint(s) or dummy atom(s) - creating the dialog * * GtkWidget * but : the GtkWidget sending the signal * gpointer 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.12/src/calc/cpmd/cpmd_init.c000066400000000000000000001716611450232132300202100ustar00rootroot00000000000000/* 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 */ /* * This file: 'cpmd_init.c' * * Contains: * - The subroutines to initialize the QM / QM-MM input file creation assistant * * List of subroutines: 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; /* * GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) * * Usage: prepare a labelled box widget for the CPMD input creation assistant * * GtkWidget * box : the GtkWidget sending the signal * gchar * lab : the label * int v_space : vertical spacing * int h_space : horizontal spacing * int 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; } /* * void print_all_sections (GtkTextBuffer * buf) * * Usage: print all sections of the CPMD input file * * GtkTextBuffer * 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); } } } } /* * G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) * * Usage: update CPMD QM option value entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) * * Usage: update CPMD QM option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) * * Usage: update CPMD QM option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) * * Usage: change CPMD QM option * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * GtkWidget * prepare_qm_option_box (int s) * * Usage: CPM input file creation prepare section general options widgets * * int 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; } /* * G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) * * Usage: update CPMD calculation option value entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) * * Usage: change CPMD calculation option * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) * * Usage: update CPMD calculation option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) * * Usage: update CPMD calculation option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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]); } /* * GtkWidget * calc_qm_option_box (int c) * * Usage: CPMD input assistant prepare the calculation option widgets * * int 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; } /* * G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) * * Usage: change CPMD calculation type * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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]); } } /* * G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) * * Usage: update CPMD input file preview * * GtkTextBuffer * textbuf : the GtkTextBuffer to print into * gpointer 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]); } /* * GtkWidget * info_box () * * Usage: 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; } /* * GtkWidget * section_box (int s) * * Usage: create CPMD section box * * int 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; } /* * GtkWidget * qm_preview_box (int c, int s, int l) * * Usage: prepare preview section widgets * * int c : 0 = CPMD, 1 = CP2K * int s : section id * int 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; } /* * gchar * section_name (int p) * * Usage: get CPMD input creation section name * * int 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]); } } /* * GtkWidget * vbox_cpmd (int s) * * Usage: create CPMD input creation section widgets * * int 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; } /* * gchar * page_name (int p) * * Usage: get CPMD input creation assistant page name * * int 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]); } } /* * void add_cpmd_pages () * * Usage: 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); } /* * void proj_unselect_all_atoms () * * Usage: 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); } /* * G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) * * Usage: cancel QM / QM-MM input file creation * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) * * Usage: QM / QM-MM input file creation cancel event GTK4 * * GtkWindow * assistant : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /* * G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) * * Usage: QM / QM-MM input file creation cancel event GTK3 * * GtkWidget * assistant : the GtkWidget sending the signal * GdkEvent * event : * gpointer 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; } /* * G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) * * Usage: close QM / QM-MM input creation assistant * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer 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); } /* * G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) * * Usage: QM / QM-MM assistant go to the next page * * gint current_page : the current assistant page * gpointer 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; } } } /* * G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) * * Usage: prepare QM / QM-MM assistant pages before display * * GtkAssistant * assistant : the GtkAssistant sending the signal * GtkWidget * page : the current page * gpointer 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; } } /* * gboolean go_for_it (int i, int j, gboolean print[2]) * * Usage: add tab to the QM / QM-MM file preview window notebook * * int i : tab id * int j : last tab id * gboolean print[2] : 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; } /* * G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) * * Usage: show QM / QM-MM input file preview * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) * * Usage: apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } } /* * G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) * * Usage: apply QM / QM-MM assistant and create input file(s) - creating the dialog * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer 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 } /* * void create_qm_input_file (int c, int p, int s) * * Usage: initialize an ab-initio MD input file creation assistant * * int c : 0 = CPMD, 1 = CP2K * int p : the target project * int 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.12/src/calc/cpmd/cpmd_nose.c000066400000000000000000001640221450232132300202020ustar00rootroot00000000000000/* 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 */ /* * This file: 'cpmd_nose.c' * * Contains: * - The subroutines to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * * List of subroutines: 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 (); struct thermostat * get_thermo (); struct thermostat * get_active_thermostat (int id); struct 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 struct 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; /* * struct thermostat * get_thermo () * * Usage: get QM / QM-MM ions thermostat */ struct thermostat * get_thermo () { if (is_cpmd) { return tmp_cpmd -> ions_thermostat; } else { return tmp_cp2k -> ions_thermostat; } } /* * int get_num_thermo () * * Usage: get the number of thermostat(s) */ int get_num_thermo () { if (is_cpmd) { return tmp_cpmd -> thermostats; } else { return tmp_cp2k -> thermostats; } } /* * gboolean are_all_atoms_thermostated () * * Usage: are all atom(s) in the model thermostated ? */ gboolean are_all_atoms_thermostated () { int i, j; struct 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; } } /* * void set_going_forward () * * Usage: 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 ()); } /* * void clean_nose_widgets () * * Usage: 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); } /* * struct thermostat * get_active_thermostat (int id) * * Usage: get thermostat using id * * int id : the thermostat id */ struct thermostat * get_active_thermostat (int id) { if (id < 0) { return tmp_cpmd -> elec_thermostat; } else { struct thermostat * thermo = get_thermo (); while (thermo -> id != id) { if (thermo -> next != NULL) thermo = thermo -> next; } return thermo; } } /* * G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select QM / QM-MM thermostat toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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 } /* * void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the QM / QM-MM thermostat selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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)); } /* * void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer in the QM / QM-MM thermostat selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); /* * G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: remove thermostat(s) - running the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; struct 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); } /* * void remove_nose_thermostat (int num_to_remove) * * Usage: remove thermostat(s) - creating the dialog * * int 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 struct 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)); } /* * struct thermostat * init_thermo (int id, int type, int sys) * * Usage: initialize new thermostat * * int id : the new thermostat id * int type : the type of thermostat * int sys : the thermostat system */ struct thermostat * init_thermo (int id, int type, int sys) { struct 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; } /* * void init_thermostats (int type, int elec) * * Usage: initialize thermostat(s) * * int type : the type of thermostat * int 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); } /* * void clean_thermostat (int new_type) * * Usage: free thermostat data, then initialiaze new type of thermostat * * int new_type : the new type of thermostat */ void clean_thermostat (int new_type) { int i; struct 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); /* * void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) * * Usage: create thermostat parameters configuration widgets * * GtkWidget * vbox : the GtkWidget sending the signal * int id : thermostat id, -2 if fictitious electronic * int jd : number of parameter(s) for this thermostat * gchar ** la : thermostat parameter name(s) * gchar ** lb : thermostat parameter unit(s) */ void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) { struct 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); } } /* * G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select CPMD atom id toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select CP2K fixed id toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the CPMD atom selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } } /* * void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer in the CPMD atom selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } } /* * int is_not_thermostated (int at, int therm) * * Usage: is atom thermostated ? * * int at : the atom id * int therm : the thermostat id */ int is_not_thermostated (int at, int therm) { int i, j; struct 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; } /* * int is_fixed_atom (int at) * * Usage: is atom fixed ? * * int 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; } /* * int in_dummy (int at, int id) * * Usage: is atom in dummy ? * * int at : the atom id * int id : the dummy list id */ int in_dummy (int at, int id) { struct 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; } /* * gboolean was_it_selected (int id, int at) * * Usage: was this atom already selected ? * * int id : the selection type * int 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); } } /* * void fill_thermo_atom_model (int therm) * * Usage: fill thermostat atom model * * int 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 /* * G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) * * Usage: select atom to thermostat toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) * * Usage: select atom to thermostat toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: select atom from model - running the dialgo * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; } } } } struct thermostat * thermo; struct 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); } /* * void select_atom_from_model (int therm) * * Usage: select atom from model - creating the dialog * * int 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; } /* * G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) * * Usage: select atom(s) to be thermostated * * GtkButton * but : the GtkButton sending the signal * gpointer 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; struct 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 } } /* * void create_selection_button (GtkWidget * box, int num, int id, gpointer data) * * Usage: create thermostat atom(s) selection button * * GtkWidget * box : the GtkWidget sending the signal * int num : the number of atom(s) already selected * int id : 0 = ionic, 1 = fictitious electronic * gpointer 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); } /* * void create_nose_thermo_param_box (int therm_id) * * Usage: create thermostat configuration widgets * * int 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); struct 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]); } /* * G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) * * Usage: change thermostat id * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void create_selection_combo (int id, int num, int type, GCallback handler) * * Usage: create thermostat selection combo box * * int id : 0 = ionic, 1 = fictitious electronic * int num : the number of thermostat * int type : the type of thermostat * GCallback 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]); } /* * void add_thermostat (int extra) * * Usage: add thermostat(s) * * int extra : the number of thermostat(s) to add */ void add_thermostat (int extra) { int i, j; struct 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)); } /* * G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) * * Usage: add / remove thermostat * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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; struct 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]); } /* * G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) * * Usage: update thermostat parameter value entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; } struct 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]); } /* * GtkWidget * create_nose_box (int n) * * Usage: create thermostat configuration widgets * * int 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; } /* * G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) * * Usage: change the type of the ionic thermostat * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 (); } /* * void prepare_therm_ions () * * Usage: 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]); } /* * void prepare_therm_elec () * * Usage: 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]); } /* * G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) * * Usage: change the thermostat family (ionic / fictitious electronic) * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); struct 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 (); } /* * void thermo_type_box (GtkWidget * vbox, gchar * str, int id) * * Usage: prepare the thermostat option widgets * * GtkWidget * vbox : the GtkWidget sending the signal * gchar * str : thermostat information * int 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 { struct 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); } /* * GtkWidget * thermo_box () * * Usage: 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.12/src/calc/cpmd/cpmd_print.c000066400000000000000000000517761450232132300204050ustar00rootroot00000000000000/* 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 */ /* * This file: 'cpmd_print.c' * * Contains: * - The subroutines to print the CPMD input file(s) * * List of subroutines: void print_info_section (GtkTextBuffer * buf); void print_this_thermostat (struct 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 struct dummy_atom * get_active_dummy (int id); int cpmd_sym[NSYM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 14}; /* * void print_info_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file INFO section * * GtkTextBuffer * 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); } /* * void print_this_thermostat (struct thermostat * thermo, int id, GtkTextBuffer * buf) * * Usage: print CPMD thermostat parameters * * struct thermostat * thermo : the target thermostat * int id : 0 = ionic, 1 = fictitious electronic * GtkTextBuffer * buf : the GtkTextBuffer to print into */ void print_this_thermostat (struct 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); } } } } /* * void print_thermostat (GtkTextBuffer * buf) * * Usage: print the CPMD input file THERMOSTAT section * * GtkTextBuffer * 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); } } /* * void print_restart (GtkTextBuffer * buf) * * Usage: print the CPMD input file RESTART section * * GtkTextBuffer * 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); } } } /* * void print_cpmd_section (GtkTextBuffer * buf) * * Usage: print CPMD input file CPMD section * * GtkTextBuffer * 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); } /* * void print_dft_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file DFT section * * GtkTextBuffer * 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); } /* * void print_vdw_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file VDW section * * GtkTextBuffer * 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); } /* * void print_prop_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file PROPERTIES section * * GtkTextBuffer * buf : the GtkTextBuffer to print into */ void print_prop_section (GtkTextBuffer * buf) { } /* * void print_system_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file SYSTEM section * * GtkTextBuffer * 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); } /* * void print_atoms_section (GtkTextBuffer * buf) * * Usage: print the CPMD input file ATOMS section * * GtkTextBuffer * 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); struct 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); } } /* * void print_the_section (int s, int p, GtkTextBuffer * buffer) * * Usage: print CPMD input section * * int s : the section id * int p : 0 = section preview, 1 = complete input file * GtkTextBuffer * 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.12/src/calc/cpmd/cpmd_restart.c000066400000000000000000000201531450232132300207160ustar00rootroot00000000000000/* 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 */ /* * This file: 'cpmd_restart.c' * * Contains: * - The subroutines to configure the restart section for the CPMD input file creation assistant * * List of subroutines: 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); /* * G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) * * Usage: CPMD input file update restart parameter value entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) * * Usage: CPMD input file restart option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) * * Usage: CPMD input file restart option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) * * Usage: CPMD input file change restart type * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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]); } /* * GtkWidget * restart_box () * * Usage: 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.12/src/calc/dl_poly/000077500000000000000000000000001450232132300166015ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/calc/dl_poly/dlp_active.c000066400000000000000000000176661450232132300210770ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_active.c' * * Contains: * - Subroutines to retrieve data in the force field structure * * List of subroutines: struct field_molecule * get_active_field_molecule_from_model_id (struct project * this_proj, int aid); struct field_molecule * get_active_field_molecule (int a); struct field_nth_body * get_active_body (int a, int b); struct field_external * get_active_external (int a); struct field_atom * get_active_atom (int a, int b); struct field_shell * get_active_shell (int a, int b); struct field_constraint * get_active_constraint (int a, int b); struct field_pmf * get_active_pmf (int a, int b); struct field_rigid * get_active_rigid (int a, int b); struct field_tethered * get_active_tethered (int a, int b); struct field_prop * get_active_prop (struct field_prop * pr, int a); struct field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); struct field_struct * get_active_struct (int s, int a, int b); */ #include "dlp_field.h" /* * struct field_molecule * get_active_field_molecule_from_model_id (struct project * this_proj, int aid) * * Usage: retrieve field molecule from overall atom id in the model * * struct project * this_proj : the target project * int aid : the target atom id */ struct field_molecule * get_active_field_molecule_from_model_id (struct project * this_proj, int aid) { int i; struct field_molecule * fmol = this_proj -> force_field[activef] -> first_molecule; struct 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; } /* * struct field_molecule * get_active_field_molecule (int a) * * Usage: retrieve field molecule * * int a : the id of the field molecule to retrieve */ struct field_molecule * get_active_field_molecule (int a) { int i; struct field_molecule * tfmol = tmp_field -> first_molecule; for (i=0; i next != NULL) tfmol = tfmol -> next; } return tfmol; } /* * struct field_nth_body * get_active_body (int a, int b) * * Usage: retrieve field nth body interaction * * int a : the id of the body interaction to retrieve * int b : the type of body interaction */ struct field_nth_body * get_active_body (int a, int b) { int i; struct field_nth_body * body; body = tmp_field -> first_body[b]; for (i=0; i next != NULL) body = body -> next; } return body; } /* * struct field_external * get_active_external (int a) * * Usage: retrieve external field property * * int a : the id of the external field property to retrieve */ struct field_external * get_active_external (int a) { int i; struct field_external * external; external = tmp_field -> first_external; for (i=0; i next != NULL) external = external -> next; } return external; } /* * struct field_atom * get_active_atom (int a, int b) * * Usage: retrieve field atom * * int a : the id of the field molecule * int b : the id of the field atom to retrieve */ struct field_atom * get_active_atom (int a, int b) { int i; struct field_atom * ato; ato = get_active_field_molecule (a) -> first_atom; for (i=0; i next != NULL) ato = ato -> next; } return ato; } /* * struct field_shell * get_active_shell (int a, int b) * * Usage: retrieve shell property * * int a : the id of the field molecule * int b : the id of the shell property to retrieve */ struct field_shell * get_active_shell (int a, int b) { int i; struct field_shell * shl; shl = get_active_field_molecule (a) -> first_shell; for (i=0; i next != NULL) shl = shl -> next; } return shl; } /* * struct field_constraint * get_active_constraint (int a, int b) * * Usage: retrieve constraint property * * int a : the id of the field molecule * int b : the id of the constraint to retrieve */ struct field_constraint * get_active_constraint (int a, int b) { int i; struct field_constraint * cons; cons = get_active_field_molecule (a) -> first_constraint; for (i=0; i next != NULL) cons = cons -> next; } return cons; } /* * struct field_pmf * get_active_pmf (int a, int b) * * Usage: retrieve PMF property * * int a : the id of the field molecule * int b : the id of the PMF property to retrieve */ struct field_pmf * get_active_pmf (int a, int b) { int i; struct field_pmf * pmf; pmf = get_active_field_molecule (a) -> first_pmf; for (i=0; i next != NULL) pmf = pmf -> next; } return pmf; } /* * struct field_rigid * get_active_rigid (int a, int b) * * Usage: retrieve rigid property * * int a : the id of the field molecule * int b : the id of the rigid property to retrieve */ struct field_rigid * get_active_rigid (int a, int b) { int i; struct field_rigid * rig; rig = get_active_field_molecule (a) -> first_rigid; for (i=0; i next != NULL) rig = rig -> next; } return rig; } /* * struct field_tethered * get_active_tethered (int a, int b) * * Usage: retrieve tethered property * * int a : the id of the field molecule * int b : the id of the tethered to retrieve */ struct field_tethered * get_active_tethered (int a, int b) { int i; struct field_tethered * tet; tet = get_active_field_molecule (a) -> first_tethered; for (i=0; i next != NULL) tet = tet -> next; } return tet; } /* * struct field_prop * get_active_prop (struct field_prop * pr, int a) * * Usage: the field molecule structural property id to retrieve * * struct field_prop * pr : the pointer on the field molecule properties to browse * int a : the id of the field molecule property to retrieve */ struct field_prop * get_active_prop (struct field_prop * pr, int a) { struct field_prop * prop; prop = pr; int i; for (i=0; i next != NULL) prop = prop -> next; } return prop; } /* * struct field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) * * Usage: retrieve field molecule structural property using atoms * * struct field_prop * pr : the pointer on the field molecule properties to browse * int ti : the number of atoms for this property * int * ids : the atoms to search for */ struct field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) { struct 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; } /* * struct field_struct * get_active_struct (int s, int a, int b) * * Usage: retrieve field structural property * * int s : the type of structural property * int a : the field molecule id * int b : the structural property id to retrieve */ struct field_struct * get_active_struct (int s, int a, int b) { int i; struct 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.12/src/calc/dl_poly/dlp_atom.c000066400000000000000000000612461450232132300205550ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_atom.c' * * Contains: * - The subroutines to handle atom selection(s) when creating a force field - The surboutines to remove / add field atom from a force field * * List of subroutines: 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 (struct field_atom * at, int atos, int * atid); void adjust_field_struct (int oid, int k, struct field_struct * olds); void merging_atoms (struct field_atom * to_merge, struct 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); struct 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); /* * void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: field atom set renderer sensitivity in the DL-POLY atom(s) selection tree model * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } } /* * void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: field atom set renderer color and markup in the DL-POLY atom(s) selection tree model * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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)); } /* * G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select field atom toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * void clean_old_atom (struct field_atom * at, int atos, int * atid) * * Usage: remove atom list from field atom * * struct field_atom * at : the field atom * int atos : the number of atom(s) to remove * int * atid : the list of atom(s) id to remove */ void clean_old_atom (struct 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 (struct field_molecule * mol, int str); /* * void adjust_field_struct (int oid, int k, struct field_struct * olds) * * Usage: adjust field molecule structural property * * int oid : the target field atom type * int k : the type of structural property to adjust * struct field_struct * olds : the field molecule structural property to adjust */ void adjust_field_struct (int oid, int k, struct field_struct * olds) { int i, j; gboolean doit; struct 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); } /* * G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) * * Usage: DL-POLY force field atom selection - running the dialog * * GtkDialog * add_dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); struct 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 (); } } /* * G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) * * Usage: DL-POLY force field atom selection - creating the dialog * * GtkDialog * select_dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 (); } } /* * void merging_atoms (struct field_atom * to_merge, struct field_atom * to_remove, gboolean upda) * * Usage: merge the field atom to remove with already other field atom * * struct field_atom * to_merge : the field atom to merge the atom to remove with * struct field_atom * to_remove : the field atom to remove * gboolean upda : update field atom(s) data lists */ void merging_atoms (struct field_atom * to_merge, struct 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; } } } /* * G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) * * Usage: remove atom from field molecule - running the dialog * * GtkDialog * rmol : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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])); struct 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); struct 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); } /* * G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove atom from field molecule - creating the dialog * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) { at_to_remove = (struct 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.12/src/calc/dl_poly/dlp_comp.c000066400000000000000000000144411450232132300205460ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_comp.c' * * Contains: * - The subroutines to compare and adjust field body properties * * List of subroutines: void compare_body (gchar * fatom, struct field_nth_body * new_body, int n_body, struct 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" struct field_nth_body * comp_fbody; extern void duplicate_nbody_params (struct field_nth_body * new_fbody, struct field_nth_body * old_fbody); /* * void compare_body (gchar * fatom, struct field_nth_body * new_body, int n_body, struct field_nth_body * old_body, int o_body) * * Usage: compare, and if require ajdust, two lists of field body properties * * gchar * fatom : the name of the field atom to search for * struct field_nth_body * new_body : 1st list of field body property(ies) * int n_body : the number of field body in this 1st list * struct field_nth_body * old_body : 2nd list of field body property(ies) * int o_body : the number of field body in this 2nd list */ void compare_body (gchar * fatom, struct field_nth_body * new_body, int n_body, struct field_nth_body * old_body, int o_body) { int i, j, k, l, m, n, o, p; struct field_nth_body * tmp_new = new_body; struct field_nth_body * tmp_old; struct field_nth_body * new_guy; struct field_nth_body * old_one; struct 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; } /* * void compare_non_bonded (gchar * fatom) * * Usage: compare non bond interaction parameters * * gchar * 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.12/src/calc/dl_poly/dlp_control.c000066400000000000000000003210371450232132300212720ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_control.c' * * Contains: * - The subroutines to handle the creation of the DL-POLY CONTROL file * * List of subroutines: 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; /* * G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change thermostat order * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file thermostat update parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file thermostat change parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file thermostat change parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file thermostat change parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file thermostat change parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_thermo_options (int ensemble, int thermo) * * Usage: CONTROL file create thermostat option box * * int ensemble : the thermodynamic ensemble * int 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; } /* * G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change thermostat option * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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; } } /* * GtkWidget * create_thermo_box (int ensemble) * * Usage: CONTROL file create thermostat box parameters * * int 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; } /* * G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change thermodynamic ensemble parameter * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } } /* * GtkWidget * create_ensemble_box () * * Usage: 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"}}; /* * G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update MD parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } } /* * G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) * * Usage: CONTROL file advanced time step - creating the dialog * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change MD parameter * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file particle impact change parameter toggle callback GTK3 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file particle impact change parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) * * Usage: CONTROL file particle impact - creating the dialog * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * GtkWidget * create_md_box () * * Usage: 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}; /* * G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change equilibration parameter * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update equilibration parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file change equilibration parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file change equilibration parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_equi_box () * * Usage: 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]; /* * G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update output information parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file change output information parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file change output information parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } } } /* * G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change print level * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * GtkWidget * create_traj_box () * * Usage: 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; } /* * GtkWidget * create_dump_box () * * Usage: 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:", " "}; /* * GtkWidget * create_out_box () * * Usage: 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; } /* * GtkWidget * create_overall_box () * * Usage: 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 = "}; /* * G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update analysis parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file change analysis parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file change analysis parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_analyze_box () * * Usage: 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]; /* * G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update I/O parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) * * Usage: CONTROL file change I/O parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) * * Usage: CONTROL file change I/O parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } } } /* * G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change I/O method * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } } } /* * GtkWidget * create_job_box () * * Usage: 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; } /* * GtkWidget * create_io_box () * * Usage: 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; } /* * GtkWidget * create_misc_box () * * Usage: 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)"}; /* * G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file update electrostatic interactions parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } } } /* * G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) * * Usage: CONTROL file update electrostatic interactions precision spin callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * GtkWidget * create_elec_param_box () * * Usage: 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; } /* * G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change electrostatics evaluation method * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) * * Usage: change CONTROL file electrostatics option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) * * Usage: change CONTROL file electrostatics option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_electro_box () * * Usage: 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"}; /* * G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) * * Usage: CONTROL file udpate VdW parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) * * Usage: CONTROL file change VdW mixing rule * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) * * Usage: change CONTROL file VdW option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) * * Usage: change CONTROL file VdW option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_vdws_box () * * Usage: 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 /* * G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) * * Usage: change CONTROL file metal interactions toggle callback GTK3 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) * * Usage: change CONTROL file metal interactions toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; } /* * GtkWidget * create_metal_box () * * Usage: 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; } /* * G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) * * Usage: update CONTROL file system option parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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:"}; /* * G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) * * Usage: change CONTROL file system option * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) * * Usage: change CONTROL file system option toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) * * Usage: change CONTROL file system option toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } } /* * GtkWidget * create_sys_box () * * Usage: 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; } /* * GtkWidget * create_restart_box () * * Usage: 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; } /* * GtkWidget * vbox_control (int f) * * Usage: crerate DL-POLY option widgets * * int 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.12/src/calc/dl_poly/dlp_copy.c000066400000000000000000000512521450232132300205630ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_copy.c' * * Contains: * - The subroutines to copy force field and related data structures * * List of subroutines: gboolean check_this_other_prop (int oid, int nat, struct field_prop * other); void duplicate_other_prop (int oid, struct field_struct * old_fstr, struct field_struct * new_fstr); void duplicate_nbody_params (struct field_nth_body * new_fbody, struct field_nth_body * old_fbody); struct field_atom * duplicate_field_atom (struct field_atom * old_fat); struct field_shell * duplicate_field_shell (struct field_shell * old_shell); struct field_constraint * duplicate_field_constraint (struct field_constraint * old_cons); struct field_pmf * duplicate_field_pmf (struct field_pmf * old_pmf); struct field_rigid * duplicate_field_rigid (struct field_rigid * old_rig); struct field_tethered * duplicate_field_tethered (struct field_tethered * old_tet); struct field_prop * duplicate_field_prop (struct field_prop * old_prop, int ti); struct field_struct * duplicate_field_struct (struct field_struct * old_fstr); struct field_struct * duplicate_field_struct_list (struct field_struct * list_str, gboolean init); struct field_nth_body * duplicate_field_nth_body (struct field_nth_body * old_fbody); struct field_external * duplicate_field_external (struct field_external * old_fext); struct field_molecule * duplicate_field_molecule (struct 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 (struct field_molecule * mol, int str); /* * struct field_atom * duplicate_field_atom (struct field_atom * old_fat) * * Usage: create copy of a field atom data structure * * struct field_atom * old_fat : the field atom to duplicate */ struct field_atom * duplicate_field_atom (struct field_atom * old_fat) { struct 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; } /* * struct field_shell * duplicate_field_shell (struct field_shell * old_shell) * * Usage: create copy of a field shell data structure * * struct field_shell * old_shell : the field shell to duplicate */ struct field_shell * duplicate_field_shell (struct field_shell * old_shell) { struct 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; } /* * struct field_constraint * duplicate_field_constraint (struct field_constraint * old_cons) * * Usage: create copy of a field constraint data structure * * struct field_constraint * old_cons : the field constraint to duplicate */ struct field_constraint * duplicate_field_constraint (struct field_constraint * old_cons) { struct 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; } /* * struct field_pmf * duplicate_field_pmf (struct field_pmf * old_pmf) * * Usage: create copy of a field PMF data structure * * struct field_pmf * old_pmf : the field PMF to duplicate */ struct field_pmf * duplicate_field_pmf (struct field_pmf * old_pmf) { struct 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; } /* * struct field_rigid * duplicate_field_rigid (struct field_rigid * old_rig) * * Usage: create copy of a field rigid data structure * * struct field_rigid * old_rig : the field rigid to duplicate */ struct field_rigid * duplicate_field_rigid (struct field_rigid * old_rig) { struct 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; } /* * struct field_tethered * duplicate_field_tethered (struct field_tethered * old_tet) * * Usage: create copy of a field tethered data structure * * struct field_tethered * old_tet : the field tethered to duplicate */ struct field_tethered * duplicate_field_tethered (struct field_tethered * old_tet) { struct 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; } /* * struct field_prop * duplicate_field_prop (struct field_prop * old_prop, int ti) * * Usage: create a copy of a field property * * struct field_prop * old_prop : the field property to duplicate * int ti : the type of field property */ struct field_prop * duplicate_field_prop (struct field_prop * old_prop, int ti) { struct 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; } /* * gboolean check_this_other_prop (int oid, int nat, struct field_prop * other) * * Usage: check if field atom already in field property * * int oid : the field atom id to search for * int nat : the number of atoms in the field property * struct field_prop * other : the field structural property to check */ gboolean check_this_other_prop (int oid, int nat, struct field_prop * other) { if (oid > -1) { int i; for (i=0; i atoms_id[other -> aid[i]][0].a == oid) return FALSE; } } return TRUE; } /* * void duplicate_other_prop (int oid, struct field_struct * old_fstr, struct field_struct * new_fstr) * * Usage: create copy of a field property 'other' list * * int oid : the target field atom id * struct field_struct * old_fstr : the field property to duplicate * struct field_struct * new_fstr : the field property to store the results */ void duplicate_other_prop (int oid, struct field_struct * old_fstr, struct field_struct * new_fstr) { int i = struct_id(new_fstr -> st+7); struct field_prop * tmp_new; struct 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; } } /* * struct field_struct * duplicate_field_struct (struct field_struct * old_fstr) * * Usage: create copy of a field structural element * * struct field_struct * old_fstr : the field structural element to duplicate */ struct field_struct * duplicate_field_struct (struct field_struct * old_fstr) { struct 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; } /* * struct field_struct * duplicate_field_struct_list (struct field_struct * list_str, gboolean init) * * Usage: create copy of list of field structural element(s) * * struct field_struct * list_str : the list of field structural element(s) to duplicate * gboolean init : */ struct field_struct * duplicate_field_struct_list (struct field_struct * list_str, gboolean init) { struct field_struct * str_list = duplicate_field_struct (list_str); if (init) str_list -> def -> use = FALSE; struct field_struct * tmp_str = str_list; struct 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; } /* * void duplicate_nbody_params (struct field_nth_body * new_fbody, struct field_nth_body * old_fbody) * * Usage: copy field body parameter list * * struct field_nth_body * new_fbody : the body parameters to fill * struct field_nth_body * old_fbody : the body parameters to duplicate */ void duplicate_nbody_params (struct field_nth_body * new_fbody, struct 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; } /* * struct field_nth_body * duplicate_field_nth_body (struct field_nth_body * old_fbody) * * Usage: create copy of a field body property * * struct field_nth_body * old_fbody : the field body property to duplicate */ struct field_nth_body * duplicate_field_nth_body (struct field_nth_body * old_fbody) { struct 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; } /* * struct field_external * duplicate_field_external (struct field_external * old_fext) * * Usage: create copy of a field external property * * struct field_external * old_fext : the field external property to duplicate */ struct field_external * duplicate_field_external (struct field_external * old_fext) { struct 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; } /* * struct field_molecule * duplicate_field_molecule (struct field_molecule * old_fmol) * * Usage: create copy of a field molecule * * struct field_molecule * old_fmol : the feld molecule to duplicate */ struct field_molecule * duplicate_field_molecule (struct field_molecule * old_fmol) { int i, j; struct 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); struct field_atom * tmp_fat = new_fmol -> first_atom; struct 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]); struct field_struct * tmp_str = new_fmol -> first_struct[i]; struct 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; } /* * classical_field * duplicate_classical_field (classical_field * init_field) * * Usage: create copy of a force field * * classical_field * 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) { struct 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]); struct field_nth_body * tmp_fbod = new_field -> first_body[i]; struct 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); struct field_external * tmp_fext = new_field -> first_external; struct 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.12/src/calc/dl_poly/dlp_edit.c000066400000000000000000003470241450232132300205430ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_edit.c' * * Contains: * - The subourtines to edit DL-POLY force field properties * * List of subroutines: int get_num_vdw_max (); gboolean are_identical_prop (int ti, int ai, struct field_prop * pro_a, struct field_prop * pro_b); gboolean tersoff_question (); gboolean body_identicals (struct 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 (struct field_nth_body * body, int aid, int nbd); void adjust_field_prop (int fil, int sti, struct 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 (struct 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, struct 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; /* * gboolean are_identical_prop (int ti, int ai, struct field_prop * pro_a, struct field_prop * pro_b) * * Usage: are the 2 field property identicals ? * * int ti : the type of field property * int ai : the number of field atoms for this field property * struct field_prop * pro_a : 1st field property * struct field_prop * pro_b : 2nd field property */ gboolean are_identical_prop (int ti, int ai, struct field_prop * pro_a, struct 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; } /* * void adjust_field_prop (int fil, int sti, struct field_prop * tmp, int * ids, int key) * * Usage: adjust field property * * int fil : the type of field property * int sti : the number of field atoms for this type of field property * struct field_prop * tmp : the pointer of the field property list * int * ids : the list of field atoms * int key : the key value to adjust */ void adjust_field_prop (int fil, int sti, struct field_prop * tmp, int * ids, int key) { int i, j, k, l; gboolean add; add = FALSE; struct 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; } } } /* * G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) * * Usage: update field atom parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; /* * G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) * * Usage: update field parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; /* * G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) * * Usage: update field cross parameter entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; } /* * G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) * * Usage: change field cross combo * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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]); } } /* * GtkWidget * combo_cross (struct field_nth_body * body) * * Usage: create field cross configuration widgets * * struct field_nth_body * body : the pointer on the first non bonded field structure */ GtkWidget * combo_cross (struct 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) { struct 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; } /* * gchar * get_this_vdw_string () * * Usage: 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; } /* * GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) * * Usage: pepare field property edition parameters * * int obj : the type of field property * int key : the key type for this field property, if any * gchar ** words : the parameter(s) labels * float * 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; } /* * gchar * field_str (int a) * * Usage: get field external name * * int 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; } /* * gboolean tersoff_question () * * Usage: 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; } } /* * GtkWidget * param_prop_param_box (int pid) * * Usage: prepare field parameter edition widgets * * int 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; } } /* * G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) * * Usage: change field key * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) * * Usage: visualize object toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) * * Usage: visualize object toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) * * Usage: select object toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) * * Usage: select object toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; /* * G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select atom in field molecule toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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]; struct 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); } /* * void select_atom_set_color (GtkCellRenderer * renderer, int i) * * Usage: set cell renderer color * * GtkCellRenderer * renderer : the target GtkCellRen * int 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)); } /* * void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: field atom set renderer color, markup and visibility in the property edition atom(s) selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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) * * Usage: on edit unit weight callback * * GtkCellRendererText * cell : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gchar * gpointer 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); } /* * G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) * * Usage: select atom id from field molecule - creating the dialog * * GtkButton * but : the GtkButton sending the signal * gpointer 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 { struct 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; struct 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; /* * void update_field_dist (float v) * * Usage: update field distance widget * * float 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); } /* * gchar * body_str (int a) * * Usage: get body potential string name * * int 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; } /* * G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) * * Usage: select field object callback * * GtkButton * but : the GtkButton sending the signal * gpointer 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) { struct 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); } /* * G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) * * Usage: change atom * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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; } } /* * gchar * get_body_element_name (struct field_nth_body * body, int aid, int nbd) * * Usage: get field body potential element name * * struct field_nth_body * body : the field body potential * int aid : the atom id, if any * int nbd : the body potential id */ gchar * get_body_element_name (struct 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); } } /* * gboolean body_identicals (struct field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) * * Usage: are these non bonded potentials identicals ? * * struct field_nth_body * body : the field non bonded property * int nbd : number of distinct interactions * int * na : number of atoms (0 = 1st pot, 1 = 2nd pot) * int ** ma : 1st potential data * int ** ba : 2nd potential data */ gboolean body_identicals (struct 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; } /* * int get_num_vdw_max () * * Usage: */ int get_num_vdw_max () { int i; struct field_molecule * molff; struct 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; } /* * void adjust_vdw_interactions (gboolean add_shell) * * Usage: adjust VdW interactions * * gboolean add_shell : update field shells */ void adjust_vdw_interactions (gboolean add_shell) { int i, j, k, l, m, n; struct field_molecule * molff; struct field_atom * atff; struct field_shell * shellff; struct 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 /* * G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) * * Usage: VdW in shell toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) * * Usage: VdW in shell toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; /* * G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: edit field parameter - running the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void edit_parameters (int f, int id) * * Usage: edit field parameter - creating the dialog * * int f : the type of parameter to edit * int 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]); } /* * void update_tersoffs (int id, int key) * * Usage: update non bonded potential * * int id : potential id * int key : potenntial type */ void update_tersoffs (int id, int key) { int i; struct 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; } } /* * void check_tersoffs (int id, int key) * * Usage: check non bonded potential * * int id : potential id * int 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); } } } /* * G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: edit field property callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; } } /* * G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: add field property callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); struct 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 (); } /* * G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove field property callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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.12/src/calc/dl_poly/dlp_ff_match.c000066400000000000000000001542511450232132300213630ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_ff_match.c' * * Contains: * - The subroutines to create the available parameters from the database window * * List of subroutines: int this_body_has_atom (struct 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, struct 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 (); struct field_data * get_ff_data (int i, int j); struct object_match * duplicate_match (struct 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; struct object_match * up_match[9]; struct object_match * tmp_match, * other_match; struct 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 (struct 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; struct object_match * tmp_res[9]; dint pup[2]; gboolean vdw_same_atom; /* * gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) * * Usage: check if object matches parameters from the database * * int fsid : the type of field property * int nat : the number of atoms for this field property * int * ffc : object data * int * 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)); } /* * gchar * get_this_prop_string (int sid, int oid, int type, int calc) * * Usage: get property name * * int sid : the type of field property * int oid : the number of atoms for this field property * int type : the id of the force field database * int 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; } /* * struct object_match * duplicate_match (struct object_match * old_m) * * Usage: create a copy of a field match * * struct object_match * old_m : the field match to duplicate */ struct object_match * duplicate_match (struct object_match * old_m) { struct 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; } /* * void update_result_list (int sid, struct object_match * new_match) * * Usage: update avialable parameter list * * int sid : the type of field property * struct object_match * new_match : the field match */ void update_result_list (int sid, struct object_match * new_match) { if (tmp_res[sid]) { struct 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); } } /* * void fill_update_model (GtkTreeStore * store) * * Usage: fill the parameters database tree store * * GtkTreeStore * store : the GtkTreeStore to fill */ void fill_update_model (GtkTreeStore * store) { GtkTreeIter prop_level, struct_level; struct 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; } } } } /* * GtkTreeModel * global_render_tree () * * Usage: 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); } /* * dint get_visible (gboolean result, gchar * the_name) * * Usage: get cell renderer visibility poitner * * gboolean result : is renderer visible or not ? * gchar * 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; } /* * G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) * * Usage: change combo box in tree model callback * * GtkCellRendererCombo * combo : the cell renderer combo box * gchar * path_string : the path in the tree model * GtkTreeIter * iter : the tree iter * gpointer 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); } } } /* * void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) * * Usage: update force field parameters database tree model data * * GtkWidget * tree : the GtkWidget sending the signal * gpointer data : the associated data pointer * GtkTreePath * 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 /* * void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: handle mouse button event on the DL-POLY force field parameters database window GTK4 * * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: handle mouse button event on the DL-POLY force field parameters database window GTK3 * * GdkEvent * event : the GdkEvent triggering the signal * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button pressed signal on the DL-POLY force field parameters database window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button released signal on the DL-POLY force field parameters database window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: mouse button event on the DL-POLY force field parameters database window * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select field parameter toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } } /* * static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) * * Usage: udpate cell renderer visibility * * GtkTreeModel * model : the target GtkTreeModel * GtkTreeIter * iter : the target tree iter * gpointer 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; } /* * void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: field parameter set renderer markup and visibility in the parameter database selection tree model * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } } /* * GtkWidget * create_update_tree () * * Usage: 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; } /* * void win_update_tree (GtkWidget * vbx) * * Usage: update the parameters database tree model * * GtkWidget * 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); } } /* * void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) * * Usage: look up in database for this field property * * int fsid : the type of field property * int fpid : global propert (0) or atom specific (> 0) * int ssid : the id of the field property to check * int nat : the number of atoms for this field property * int * fat : the list of field atom(s) * int * 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; } } /* * void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) * * Usage: check if the database offers parameters for a field property * * int fsid : the type of field property * int fpid : global propert (0) or atom specific (> 0) * int ssid : the id of the field property to check * int * fat : the list of field atom(s) * int * 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; struct 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); } } /* * int this_body_has_atom (struct field_nth_body * body, char * name) * * Usage: check if non bonded potential has this field atom * * struct field_nth_body * body : the non bonded potential to check * char * name : the name of the target field atom */ int this_body_has_atom (struct 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; } /* * G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: check for parameters in the database to be used in the force field - running the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void check_atom_for_updates () * * Usage: 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; struct 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); } } /* * G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) * * Usage: change the field parameter selection * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * GtkWidget * create_field_prop_combo (int f, int is_moy) * * Usage: create field parameter selection combo box * * int f : the type of force field property * int 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.12/src/calc/dl_poly/dlp_field.c000066400000000000000000006620711450232132300207030ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_field.c' * * Contains: * - The subroutines to prepare the DL-POLY / LAMMPS input preparation assistant - The subroutines to design a classical force field * * List of subroutines: 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; struct project * tmp_proj; coord_info * tmp_coord; struct field_molecule * tmp_fmol; struct molecule * tmp_mol; struct field_atom * tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; struct field_shell * tmp_fshell; struct field_constraint * tmp_fcons; struct field_pmf * tmp_fpmf; struct field_rigid * tmp_frig; struct field_tethered * tmp_ftet; struct field_prop * tmp_fprop; struct field_struct * tmp_fstr; struct field_nth_body * tmp_fbody; struct field_nth_body * new_body; struct 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 (struct field_nth_body * body, int aid, int nbd); extern void print_lammps_atom_file (GtkTextBuffer * buf); /* * int struct_id (int f) * * Usage: number of atoms in a structural element * * int 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; } } /* * int body_at (int b) * * Usage: find the number of atom(s) in a non bonded interaction * * int b : */ int body_at (int b) { if (b < 2) { return 2; } else if (b == 2) { return 1; } else { return b; } } model example; /* * void set_mol_num_label () * * Usage: 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); } } /* * void setup_cs_labels (int i) * * Usage: classical force field prepare the core-shell description strings * * int 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; /* * gchar * parameters_info (int obj, int key, gchar ** words, float * data) * * Usage: prepare classical force field parameter description string * * int obj : the type of field object * int key : the formalism key for this type of object * gchar ** words : the string description lists * float * 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 (struct field_molecule * mol, int str); /* * void fill_field_struct (GtkTreeStore * store, int id, int mo) * * Usage: classical force field fill the tree store with structural element parameter(s) * * GtkTreeStore * store : the tree store to fill * int id : the type of structural element * int 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; } } /* * void fill_field_body (GtkTreeStore * store, int id) * 0 * int 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; } } /* * void fill_field_model (GtkTreeStore * store, int f, int m) * * Usage: classical force field fill the tree store * * GtkTreeStore * store : the tree store to fill * int f : the type of field object * int 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 /* * G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) * * Usage: change classical force field parameter toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) * * Usage: change classical force field parameter toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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]); } } /* * gboolean set_nbd_but_sensitive (int nbid) * * Usage: adjust non bonded interaction button sensitivity * * int 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; struct field_molecule * ftmp = tmp_field -> first_molecule; while (ftmp) { j += ftmp -> atoms; ftmp = ftmp -> next; } gboolean res = (j >= i) ? TRUE : FALSE; return res; } } /* * gchar * set_field_label (int f, int m) * * Usage: prepare classical force field description string * * int f : the type of field object(s) * int 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; } /* * G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) * * Usage: classical force field assistant change the target molecule for the page * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void update_field_trees () * * Usage: 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); } } } /* * void get_is_energy (int i, int l) * * Usage: get the energy unit linked parameter list * * int i : the type of force field object * int 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); } /* * G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) * * Usage: change the classical force field energy unit - creating the dialog * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 (); } /* * GtkWidget * vbox_init (int p) * * Usage: classical force field assistant prepare the field object configuration widgets * * int 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; } /* * int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) * * Usage: retrieve classical force field data from tree model * * GtkWidget * tree : the GtkWidget sending the signal * int treeid : the type of field object * GtkTreePath * 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; } /* * int get_field_data_id (int k, gchar * data) * * Usage: get classical force field parameter from description string * * int k : the type of field object * gchar * 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); } /* * GtkWidget * create_combo_mol (int f) * * Usage: classical force field create molecule selection combo box * * int 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; /* * gchar * pop_info (int i, int id) * * Usage: get popup information message * * int i : the type of element * int 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; } /* * gchar * pop_edit (int i) * * Usage: get edit string label * * int 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; } /* * gchar * pop_add (int i) * * Usage: get add string label * * int 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 /* * G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) * * Usage: classical force field tree model popup contextual menu callback GTK3 * * GtkWidget * widget : the GtkWidget sending the signal * gpointer 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 /* * void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: classical force field tree model button event GTK4 * * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: classical force field tree model button event GTK3 * * GdkEvent * event : the GdkEvent triggering the signal * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: classical force field tree model button pressed callback GTK4 * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: classical force field tree model button released callback GTK4 * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: classical force field tree model button event callback GTK3 * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the classical force field tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } } /* * void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer visibility in the classical force field tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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)); } /* * void get_field_iter_and_edit (gchar * path_string, gpointer data) * * Usage: edit field property in the classical force field tree model * * gchar * path_string : the path in the tree model * gpointer 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); } /* * G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) * * Usage: to edit data in the classical force field tree model * * GtkCellRenderer * cell : the GtkTreeView sending the signal * GtkCellEditable * editable : the editable * gchar * path_string, : the path in the tree model * gpointer 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); } /* * G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) * * Usage: activating row in the classical force field tree model * * GtkTreeView * treeview : the GtkTreeView sending the signal * GtkTreePath * path : the path in the tree view * GtkTreeViewColumn * col : the column in the tree view * gpointer 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); } /* * GtkWidget * create_field_tree (int f) * * Usage: classical force field create the list store selection widgets * * int 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]; } /* * void create_field_list (GtkWidget * vbx, int f) * * Usage: classical force field creation prepare list store selection widgets * * GtkWidget * vbx : the GtkWidget sending the signal * int 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); } /* * GtkWidget * create_mol_box (int f) * * Usage: classical force field create molecule selection widgets * * int 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; } /* * GtkWidget * vbox_field (int f) * * Usage: classical force field create page option widgets * * int 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]; /* * void close_the_assistant (GtkAssistant * assistant) * * Usage: classical force field creation close the assistant * * GtkAssistant * 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; } } } /* * G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) * * Usage: classical force field creation cancel assistant * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } #ifdef GTK4 /* * G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) * * Usage: classical force field creation cancel event callback GTK4 * * GtkWindow * assistant : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /* * G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) * * Usage: classical force field creation cancel event callback GTK3 * * GtkWidget * assistant : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) * * Usage: classical force field creation close assistant * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } /* * G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) * * Usage: classical force field assistant find the next page to go to * * gint current_page : the current page id * gpointer 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; } } /* * G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) * * Usage: prepare classical force field assistant pages before display * * GtkAssistant * assistant : the GtkAssistant sending the signal * GtkWidget * page : the current page * gpointer 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); } /* * void hide_show_this_pages (int start, int end, int status, int delta) * * Usage: classical force field assistant show / hide pages * * int start : starting page id * int end : ending page id * int status : 0 = hide, 1 = show * int 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); } } } } /* * void remove_classical_assistant_pages () * * Usage: 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]); } } /* * G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) * * Usage: clean force field data - running the dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } /* * void add_classical_assistant_pages (int p) * * Usage: classical force field assistant add pages * * int 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) /* * void create_ff_structure (int ai, int type) * * Usage: create the classical force field data structure and update widgets * * int ai : how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) * int 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; } /* * G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) * * Usage: classical force field change initialization parameter * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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; } } } /* * G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) * * Usage: show classical force field input files preview * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: on classical force field assistant apply - running the dialog GTK4 * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) * * Usage: on classical force field assistant apply - running the dialog GTK3 * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 } /* * void on_assistant_apply (GtkAssistant * assistant, gpointer data) * * Usage: on classical force field assistant apply - creating the dialog * * GtkAssistant * assistant : the GtkAssistant sending the signal * gpointer 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 } /* * void create_classical_force_field (int p, int f) * * Usage: create classical force field prepare the assistant * * int p : the target project id * int 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.12/src/calc/dl_poly/dlp_field.h000066400000000000000000000421711450232132300207010ustar00rootroot00000000000000/* 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 */ /* * This header file: 'dlp_field.h' * * Contains: */ #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 { SPEC_ONLY = 0, TOTAL_COORD_AND_SPEC = 1, // Total coord + spec PARTIAL_COORD_AND_SPEC = 2, // Partial coord + spec OTHER = 3 }; struct field_prop { int pid; int fpid; int key; int * aid; float * val; gboolean show; gboolean use; struct field_prop * next; struct field_prop * prev; }; 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; struct field_atom * prev; struct field_atom * next; }; 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; struct field_shell * prev; struct field_shell * next; }; struct field_constraint { int id; int ia[2]; float av; float length; gboolean show; gboolean use; struct field_constraint * prev; struct field_constraint * next; }; struct field_pmf { int id; float av; float length; int num[2]; int * list[2]; float * weight[2]; gboolean show; gboolean use; struct field_pmf * prev; struct field_pmf * next; }; struct field_rigid { int id; int num; int * list; gboolean show; gboolean use; struct field_rigid * prev; struct field_rigid * next; }; struct field_tethered { int id; int num; int key; float * val; gboolean show; gboolean use; struct field_tethered * prev; struct field_tethered * next; }; // See field molecule for details struct field_struct { // Struct id (0 = Bonds, 2 = Angles, 4 = dihedrals ...) int st; int id; int num; int * aid; // Field atom id float av; struct field_prop * def; struct field_prop * other; struct field_struct * prev; struct field_struct * next; }; // Non-bonded interactions follow // N body (Vdw, Metal, Tersoff, 3b, 4b) 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; struct field_nth_body * prev; struct field_nth_body * next; }; struct field_external{ int id; int key; float * val; gboolean use; struct field_external * prev; struct field_external * next; }; /* simplified atom data structure */ struct field_neighbor{ int id; // atom id in molecule/fragment int num; // number of neighbor(s) int * vois; // list of neighbor(s) struct field_neighbor * prev; struct field_neighbor * next; }; struct field_molecule{ int id; gchar * name; struct molecule * mol; int multi; int * fragments; dint ** atoms_id; int atoms; struct field_atom * first_atom; int shells; struct field_shell * first_shell; int constraints; struct field_constraint * first_constraint; int pmfs; struct field_pmf * first_pmf; int rigids; struct field_rigid * first_rigid; int tethered; struct 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]; struct field_struct * first_struct[8]; gboolean show; gboolean show_id; struct field_molecule * next; struct field_molecule * prev; }; 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 struct project * tmp_proj; extern struct field_molecule * tmp_fmol; extern struct molecule * tmp_mol; extern struct field_atom * tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; extern struct field_shell * tmp_fshell; extern struct field_constraint * tmp_fcons; extern struct field_pmf * tmp_fpmf; extern struct field_rigid * tmp_frig; extern struct field_tethered * tmp_ftet; extern struct field_prop * tmp_fprop; extern struct field_struct * tmp_fstr; extern struct field_nth_body * tmp_fbody; extern struct field_nth_body * comp_fbody; extern struct 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 (struct field_atom * at, struct field_atom * bt); extern int test_for_angles (struct field_atom * at, struct field_atom * bt, struct field_atom * ct); extern int test_for_dihedrals (struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct field_atom * dt); extern void clean_field_struct_list (struct 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 struct field_atom * duplicate_field_atom (struct field_atom * old_fat); extern struct field_shell * duplicate_field_shell (struct field_shell * old_shell); extern struct field_constraint * duplicate_field_constraint (struct field_constraint * old_cons); extern struct field_rigid * duplicate_field_rigid (struct field_rigid * old_rig); extern struct field_tethered * duplicate_field_tethered (struct field_tethered * old_tet); extern struct field_prop * duplicate_field_prop (struct field_prop * old_prop, int ti); extern void duplicate_other_prop (int oid, struct field_struct * old_fstr, struct field_struct * new_fstr); extern struct field_struct * duplicate_field_struct (struct field_struct * old_fstr); extern struct field_struct * duplicate_field_struct_list (struct field_struct * list_str, gboolean init); extern struct field_nth_body * duplicate_field_nth_body (struct field_nth_body * old_nth_body); extern struct field_molecule * duplicate_field_molecule (struct field_molecule * old_fmol); extern classical_field * duplicate_dlpoly_field (classical_field * init_field); // Init field element: extern struct field_atom * init_field_atom (int id, int type, int at, int nat, int coo, int * list); extern struct field_shell * init_field_shell (int id, int ia, int ib); extern struct field_constraint * init_field_constraint (int id, int ia, int ib); extern struct field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); extern struct field_rigid * init_field_rigid (int id, int num, int * list); extern struct field_tethered * init_field_tethered (int id, int num); extern struct field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); extern struct field_struct * init_field_struct (int st, int ai, int an, int * aid); extern struct field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); extern struct 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, struct 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 (struct field_molecule * fmol, int at); extern struct field_molecule * get_active_field_molecule_from_model_id (struct project * this_proj, int aid); extern int get_fragment_atom_id_from_model_id (struct field_molecule * fmol, int at); extern struct field_molecule * get_active_field_molecule (int a); extern struct field_nth_body * get_active_body (int a, int b); extern struct field_external * get_active_external (int a); extern struct field_atom * get_active_atom (int a, int b); extern struct field_shell * get_active_shell (int a, int b); extern struct field_constraint * get_active_constraint (int a, int b); extern struct field_pmf * get_active_pmf (int a, int b); extern struct field_rigid * get_active_rigid (int a, int b); extern struct field_tethered * get_active_tethered (int a, int b); extern struct field_prop * get_active_prop (struct field_prop * pr, int a); extern struct field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); extern struct 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, struct 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 struct distance distance_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt); extern struct angle angle_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct); extern struct angle dihedral_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt); extern struct angle inversion_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct 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, struct field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_dihedral (int di, GtkTextBuffer * buf, struct field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_angle (int ai, GtkTextBuffer * buf, struct field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_bond (int bi, GtkTextBuffer * buf, struct field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern G_MODULE_EXPORT void setup_this_force_field (int id); struct object_match { int id; int obj; int oid; int type; gboolean use; struct object_match * next; struct object_match * prev; }; extern struct object_match * field_objects_id[6]; extern struct object_match * tmp_obj_id; extern float get_force_field_atom_mass (int sp, int num); struct field_data{ int key; int ** atoms_z; int ** atoms_id; int npar; float ** param; char ** info; }; extern int ff_unit; extern struct field_data * ff_bonds[3]; extern struct field_data * ff_angles[2]; extern struct field_data * ff_dih[2]; extern struct field_data * ff_imp; extern struct field_data * ff_inv; extern struct field_data * ff_vdw; extern int ** extraz_id; #endif Atomes-GNU-1.1.12/src/calc/dl_poly/dlp_init.c000066400000000000000000002547171450232132300205670ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_init.c' * * Contains: * - The subroutines to initialize the creation of a classical force field * * List of subroutines: int get_position_in_field_atom_from_model_id (int fat, int at); int get_field_atom_id_from_model_id (struct field_molecule * fmol, int at); int get_fragment_atom_id_from_model_id (struct field_molecule * fmol, int at); int get_atom_id_in_fragment_from_model_id (int frag, int at); int set_atom_id (struct 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 (struct field_atom * at, struct field_atom * bt); int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); int bonds_between_atoms (int n, struct field_atom * at, struct field_atom * bt, int a, int b); int test_for_angles (struct field_atom * at, struct field_atom * bt, struct field_atom * ct); int angles_from_bonds (int n, struct field_atom * at, struct field_atom * bt, struct field_atom * ct); int test_for_dihedrals (struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct field_atom * dt); int dihedrals_from_angles (int n, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct 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 (struct atom * at, int id, gboolean set_atom_id, gboolean in_field_atom); int find_neighbor_loop (int frag, int aid, int fai, struct field_atom * fat, struct 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 (struct field_neighbor * ngb, int at); gboolean are_in_bond (struct atom ato, int at); gboolean is_numbering_possible (int frag); gboolean is_this_numbering_possible_for_this_atom (int frag, struct field_neighbor * ngma, int atom); gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, struct field_neighbor * ngma_init); gboolean id_atoms_in_fragment (int frag, int seed); gchar * set_field_atom_name (struct field_atom * ato, struct 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 (struct 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); struct field_atom * init_field_atom (int id, int type, int at, int nat, int coo, int * list); struct field_shell * init_field_shell (int id, int ia, int ib); struct field_constraint * init_field_constraint (int id, int ia, int ib); struct field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); struct field_rigid * init_field_rigid (int id, int num, int * list); struct field_tethered * init_field_tethered (int id, int num); struct field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); struct field_struct * init_field_struct (int st, int ai, int an, int * aid); struct field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); struct field_external * init_field_external (int bi); struct 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 (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; /* * int get_position_in_field_atom_from_model_id (int fat, int at) * * Usage: retrieve atom position id in field atom id using atom id in model * * int fat : the target field atom * int at : the target model atom id */ int get_position_in_field_atom_from_model_id (int fat, int at) { int i; struct 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; } /* * int get_field_atom_id_from_model_id (struct field_molecule * fmol, int at) * * Usage: retrieve field atom id using atom id in model * * struct field_molecule * fmol : the target field molecule * int at : the target model atom id */ int get_field_atom_id_from_model_id (struct field_molecule * fmol, int at) { int i; struct 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; } /* * int get_fragment_atom_id_from_model_id (struct field_molecule * fmol, int at) * * Usage: retrieve fragment atom id using atom id in model * * struct field_molecule * fmol : the target field molecule * int at : the target model atom id */ int get_fragment_atom_id_from_model_id (struct field_molecule * fmol, int at) { int i; struct 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; } /* * int get_atom_id_in_fragment_from_model_id (int frag, int at) * * Usage: retrieve field atom id in fragment from model id * * int frag : the fragment id * int at : the atom id in the model */ int get_atom_id_in_fragment_from_model_id (int frag, int at) { int i, j, k; struct 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; } /* * int set_atom_id (struct field_atom * at, int c, int p, int id) * * Usage: set new fragment/molecule atom parameters * * struct field_atom * at : the target field atom * int c : the fragment id * int p : the list id in field atom * int id : the field atom id */ int set_atom_id (struct 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; } } /* * gchar * set_field_atom_name (struct field_atom * ato, struct field_molecule * mol) * * Usage: get name string for field atom * * struct field_atom * ato : the target field atom * struct field_molecule * mol : the target field molecule */ gchar * set_field_atom_name (struct field_atom * ato, struct field_molecule * mol) { int i, j; gchar * str; struct 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; } /* * struct field_atom * init_field_atom (int id, int type, int at, int nat, int coo, int * list) * * Usage: intialize a new type of field atom * * int id : the new field atom id * int type : the new field atom coordination type * int at : the new field atom species * int nat : the number of atom(s) of for this field atom type * int coo : the coordination id in coordination type, if any * int * list : the list of atoms that match this type of field atom */ struct 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; struct 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; } /* * struct field_shell * init_field_shell (int id, int ia, int ib) * * Usage: initialize field core shell interaction * * int id : the new shell id * int ia : 1st atom id in field molecule * int ib : 2nd atom id in field molecule */ struct field_shell * init_field_shell (int id, int ia, int ib) { struct 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; } /* * struct field_constraint * init_field_constraint (int id, int ia, int ib) * * Usage: initialize field bond constraint * * int id : the new field constraint id * int ia : 1st atom id in field molecule * int ib : 2nd atom id in field molecule */ struct field_constraint * init_field_constraint (int id, int ia, int ib) { struct 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; } /* * struct field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) * * Usage: initialize new field mean force potential * * int id : the id of the new field PMF * int num[2] : the numbers of atom(s) * int list[2] : the lists of atom(s) * float * w[2] : the weight list */ struct field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) { struct 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; } /* * struct field_rigid * init_field_rigid (int id, int num, int * list) * * Usage: initialize new field rigid constraint * * int id : the id of the new field rigid * int num : the number of atom(s) to fix * int * list : the list of atom(s) to fix */ struct field_rigid * init_field_rigid (int id, int num, int * list) { struct 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; } /* * struct field_tethered * init_field_tethered (int id, int num) * * Usage: intialize new field tethered potential * * int id : the new field tethered potential id * int num : the atom id in the field molecule */ struct field_tethered * init_field_tethered (int id, int num) { struct 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; } /* * struct field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) * * Usage: initialize new field molecule structural property * * int ti : the type of field structural element to initialize * int key : the formalism to use * gboolean show : visualize in the 3D window (yes / no) * gboolean use : use to create the force field input file (yes / no) */ struct field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) { struct 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; } /* * int get_struct_id_from_atom_id (int ids, int * aid) * * Usage: retrieve field structural element id from a list of atom id * * int ids : the type of structural element * int * aid : the list of atom id */ int get_struct_id_from_atom_id (int ids, int * aid) { int i, j; struct 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; } /* * gboolean was_not_created_struct (int ids, int num, int * aid) * * Usage: was this structural element already created ? * * int ids : the type of structural element * int num : the number of atoms * int * 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; } /* * struct field_struct * init_field_struct (int st, int ai, int an, int * aid) * * Usage: initialize field molecule new structural element * * int st : the type of structural element (0 = bond, 1 = angle, 2 = dihedral) * int ai : the id of the new structural property * int an : the number of atoms * int * aid : the list of field atoms */ struct field_struct * init_field_struct (int st, int ai, int an, int * aid) { struct 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; } /* * struct field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) * * Usage: intialize new field non bonded interaction * * int bi : the new non bonded interaction id * int bd : the type of non bonded interaction * int * na : the list of field atom(s), if any * int ** ma : the list of field molecule(s), if any * int ** ba : the list of atom id in field molecule, if any */ struct field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) { int i, j; struct 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; } /* * struct field_external * init_field_external (int bi) * * Usage: intialize new field external potential * * int bi : the id of the new field external potential */ struct field_external * init_field_external (int bi) { struct 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; } /* * int prepare_field_atom (int i, int j, int k, int l, int m) * * Usage: initialiaze new type of field atom * * int i : the new field atom id * int j : the new field atom coordination type * int k : the new field atom species * int l : the number of atom(s) of for this field atom type * int 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; } /* * void init_all_atoms (int i) * * Usage: initialize all field atom(s) * * int 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; } /* * gboolean in_bond (int at, int bd[2]) * * Usage: is atom at in bond bd * * int at : the target atom id * int bd[2] : the bond atoms id */ gboolean in_bond (int at, int bd[2]) { if (at == bd[0] || at == bd[1]) { return TRUE; } else { return FALSE; } } /* * gboolean are_neighbors (struct field_neighbor * ngb, int at) * * Usage: test if 2 atoms are neighbors * * struct field_neighbor * ngb : the neighbor data structure to test * int at : the target atom id in the model */ gboolean are_neighbors (struct field_neighbor * ngb, int at) { int i; for (i=0; i num; i++) { if (ngb -> vois[i] == at) return TRUE; } return FALSE; } /* * gboolean are_in_bond (struct atom ato, int at) * * Usage: is at in ato neighbors ? * * struct atom ato : the target atom * int at : the target atom id */ gboolean are_in_bond (struct 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; } /* * int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) * * Usage: prepare the creation of a field structural element * * int ids : the type of structural element (0 to 7) * int sid : the id of the new structural element * int yes_no_num : is there data to save (1 or > 1) or not (0) ? * int * 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; } /* * int bonds_between_atoms (int n, struct field_atom * at, struct field_atom * bt, int a, int b) * * Usage: search for bond(s) between two field atoms * * int n : the number of different bond types already found * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * int a : 1st atom chemical species * int b : 2nd atom chemical species */ int bonds_between_atoms (int n, struct field_atom * at, struct 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; } /* * void init_all_bonds () * * Usage: 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; } /* * int test_for_angles (struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct) * * Usage: search for angle(s) between these field atoms * * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom */ int test_for_angles (struct field_atom * at, struct field_atom * bt, struct 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; } /* * int angles_from_bonds (int n, * struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct) * * Usage: find, and initialize, angles using bonds * * int n : the number of different angle types already found * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom */ int angles_from_bonds (int n, struct field_atom * at, struct field_atom * bt, struct 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; } /* * void init_all_angles () * * Usage: find, and intialiaze, all angle(s) using bonds */ void init_all_angles () { int m, p; tmp_fmol -> first_struct[2] = NULL; p = 0; struct 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; } /* * int test_for_dihedrals (struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct, * struct field_atom * dt) * * Usage: search for dihedral(s) between these field atoms * * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom * struct field_atom * dt : 4th field atom */ int test_for_dihedrals (struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct 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; } /* * int dihedrals_from_angles (int n, * struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct, * struct field_atom * dt) * * Usage: find, and initialize, dihedrals using angles * * int n : the number of different dihedral types already found * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom * struct field_atom * dt : 4th field atom */ int dihedrals_from_angles (int n, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct 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; } /* * void init_all_dihedrals () * * Usage: find, and intialiaze, all dihedral(s) using bonds */ void init_all_dihedrals () { int n, p; tmp_fmol -> first_struct[4] = NULL; p = 0; struct 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; } /* * int impropers_inversion (int n, int stru, * int at, int bt, int ct, int dt, * int a, int b, int c, int d) * * Usage: prepare new improper / inversion * * int n : the actual number of structural element * int stru : the type of structural element, 6 = impropers, 7 = inversions * int at : 1st field atom id * int bt : 2nd field atom id * int ct : 3rd field atom id * int dt : 4th field atom id * int a : 1st atom id in molecule/fragment * int b : 2nd atom id in molecule/fragment * int c : 3rd atom id in molecule/fragment * int 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; } /* * void init_all_impropers_inversions (int stru) * * Usage: initialize all impropers and inversions * * int 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); } /* * int coord_sphere_multiplicity (struct atom * at, int id, gboolean set_atom_id) * * Usage: * * struct atom * at : the target atom in the model * int id : the atom id in the fragment * gboolean set_atom_id : adjust field atom parameters (yes / no) */ int coord_sphere_multiplicity (struct 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 struct field_neighbor * init_ngb = NULL; /* * struct field_neighbor * get_init_neighbor (int a) * * Usage: retrieve neighbor data structure for atom a * * int a : the atom id in the fragment */ struct field_neighbor * get_init_neighbor (int a) { struct field_neighbor * ngb = NULL; ngb = init_ngb; while (ngb) { if (ngb -> id == a) break; ngb = ngb -> next; } return ngb; } /* * gboolean is_numbering_possible (int frag) * * Usage: compare if the atom numbering of two fragment(s) are identical, and it should * * int frag : the fragment id */ gboolean is_numbering_possible (int frag) { int i, j, k, l, m, n, o , p; struct field_neighbor * ngma, * ngmb; struct 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; } /* * gboolean is_this_numbering_possible_for_this_atom (int frag, struct field_neighbor * ngma, int atom) * * Usage: check if the id in fragment for this atom is possible or not * * int frag : the fragment id * struct field_neighbor * ngma : the neigbbor data structure for this fragment * int atom : the atom id in the model */ gboolean is_this_numbering_possible_for_this_atom (int frag, struct field_neighbor * ngma, int atom) { int m, n, o, p; struct 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; } /* * int find_neighbor_loop (int frag, int aid, int fai, * struct field_atom * fat, * struct field_neighbor * ngmb, * int sid, gboolean save_it) * * Usage: find / set up field atom data for a fragment * * int frag : the fragment id * int aid : the atom id in the model * int fai : the atom id in the fragment * struct field_atom * fat : the field atom * struct field_neighbor * ngmb : the neighbor(s) list for the fragment * int sid : iter to save * gboolean save_it : save field atom data (yes / no) */ int find_neighbor_loop (int frag, int aid, int fai, struct field_atom * fat, struct 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; } /* * gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, * int init, struct field_neighbor * ngma_init) * * Usage: find atom id in fragment using the neighbor list * * int frag : the fragment id * int limit : the total number of atom(s) in the fragment * int num_ngb : the neighbor(s) list for the fragment * int search_type : search type (0 = browse field molecule atom list, 1 = browse field atom list) * int init : the atom id in the model * struct field_neighbor * ngma_init : the target */ gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, struct field_neighbor * ngma_init) { int i, j, k, l, m, n, o, p, q, r, s, t; struct field_neighbor * ngma, * ngmb, * ngmc; struct 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; } } /* * gboolean id_atoms_in_fragment (int frag, int seed) * * Usage: find the atom field id in the fragment * * int frag : the fragment id * int 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) { struct 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; } } } /* * void get_weight (int seq) * * Usage: compute field weigth for the atom(s) in the model * * int 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 } /* * int setup_atomic_weight (int seq) * * Usage: setup atom(s) field weight * * int seq : weighting sequencce */ int setup_atomic_weight (int seq) { int h, i, j, k, l; struct 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 /*struct 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; } /* * void find_atom_id_in_field_molecule () * * Usage: 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 } /* * void clean_field_struct_list (struct field_struct * stru) * * Usage: clean force field structural property(ies) * * struct field_struct * stru : */ void clean_field_struct_list (struct field_struct * stru) { while (stru) { if (stru -> next) { stru = stru -> next; g_free (stru -> prev); } else { g_free (stru); stru = NULL; } } } /* * void init_all_field_struct (gboolean init) * * Usage: initialize the force field structural properties for a field molecule * * gboolean 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); } /* * void init_field_molecule (int i) * * Usage: initialiaze of field molecule data structurre * * int 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; } /* * int init_vdw (gboolean init) * * Usage: initialize the VdW section of a classical force field * * gboolean 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; } /* * void init_dlpoly_field (classical_field * new_field) * * Usage: initialize DL-POLY classical force field * * classical_field * 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; } /* * void init_lammps_field (classical_field * new_field) * * Usage: initialize a LAMMPS classical force field * * classical_field * 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; } /* * classical_field * create_force_field_data_structure (int ai) * * Usage: initialize classical force field * * int 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.12/src/calc/dl_poly/dlp_mol.c000066400000000000000000000716741450232132300204120ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_mol.c' * * Contains: * - The subroutines to add / remove molecule(s) to / from the force field * * List of subroutines: 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 (struct field_molecule * fmol, struct 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 (struct field_molecule * new_mol, int mstart); void prepare_atoms_to_merge (struct field_atom * at, struct field_molecule * new_mol, struct 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); struct field_atom * new_atom_to_merge (int id, struct 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); struct 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 (struct field_atom * ato, struct field_molecule * mol); extern void find_atom_id_in_field_molecule (struct field_molecule * fmol); extern void viz_fragment (struct field_molecule * fmol, int id, int viz); extern void check_to_visualize_properties (int id); /* * gchar * remove_text (int i, int j, gchar * str) * * Usage: get removal information text * * int i : -2 = remove field atom, -1 = remove field molecule * int j : -1 = remove field molecule, else remove field atom * gchar * 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; } } /* * void clean_up_molecules_info (gboolean usel) * * Usage: prepare molecule related widgets in the assistant * * gboolean 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; /* * void clear_field_atoms (struct field_molecule * fmol, struct field_atom * at, int mols, int * mol) * * Usage: clean the field atom from a list of atom(s) * * struct field_molecule * fmol : the target fied molecule * struct field_atom * at : the field atom to clean, remove specific atom(s) from it * int mols : the number of fragment(s) for this molecule * int * mol : the list of fragment id */ void clear_field_atoms (struct field_molecule * fmol, struct 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); } /* * void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set renderer color in the force field molecule selection tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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)); } /* * G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: add molecule to force field - running the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } /* * G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: add molecule to force field - creating the dialog * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } /* * void merge_all_atoms_to_mol (struct field_molecule * new_mol, int mstart) * * Usage: merge all field atoms to another field molecule * * struct field_molecule * new_mol : the field molecule to merge the atom(s) with * int mstart : the fragment id to start with */ void merge_all_atoms_to_mol (struct field_molecule * new_mol, int mstart) { struct 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 ++; } } /* * void prepare_atoms_to_merge (struct field_atom * at, struct field_molecule * new_mol, struct field_molecule * old_mol) * * Usage: update the data for the newly 'merged' field atom * * struct field_atom * at : the target field atom * struct field_molecule * new_mol : the target molecule to merge with * struct field_molecule * old_mol : the molecule to remove */ void prepare_atoms_to_merge (struct field_atom * at, struct field_molecule * new_mol, struct 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); } /* * struct field_atom * new_atom_to_merge (int id, struct field_molecule * fmol) * * Usage: merge field atoms from a field molecule * * int id : the id of the new field atom * struct field_molecule * fmol : the field molecule for of the atoms */ struct field_atom * new_atom_to_merge (int id, struct field_molecule * fmol) { struct 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; } /* * G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) * * Usage: remove molecule from force field - running the dialog * * GtkDialog * rmol : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove molecule from force field - creating the dialog * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) { to_remove = (struct 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.12/src/calc/dl_poly/dlp_print.c000066400000000000000000002551271450232132300207540ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_print.c' * * Contains: * - The subroutines to handle the output of the DL-POLY FIELD file - The subroutines to handle the output of the DL-POLY CONTROL file - The subroutines to handle the output of the DL-POLY CONFIG file - The subroutines to fill the structural element(s) tree models in the assistant * * List of subroutines: int get_num_struct_to_print (struct field_molecule * fmol, int sid); int get_pbc (); gboolean print_this_imp_inv (struct imp_inv * inv, int di, int a, int b, int c, int d); gboolean member_of_atom (struct field_atom * fat, int id); gboolean print_ana (); void print_field_prop (struct field_prop * pro, int st, struct field_molecule * mol); void print_field_struct (struct field_struct * stru, struct field_molecule * mol); void print_all_field_struct (struct field_molecule * mol, int str); void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, struct field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_dihedral (int dih, GtkTextBuffer * buf, struct field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_angle (int ai, GtkTextBuffer * buf, struct field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_bond (int bi, GtkTextBuffer * buf, struct field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_rigid (GtkTextBuffer * buf, struct field_rigid * rig); void print_dlp_tet (GtkTextBuffer * buf, struct field_tethered * tet); void print_dlp_pmf (GtkTextBuffer * buf, struct field_pmf * pmf); void print_dlp_cons (GtkTextBuffer * buf, struct field_constraint * cons); void print_dlp_shell (GtkTextBuffer * buf, struct field_molecule * fmol, struct field_shell * shell); void print_dlp_atom (GtkTextBuffer * buf, int at, int numat); void print_dlp_molecule (GtkTextBuffer * buf, struct field_molecule * fmol); void print_dlp_body (GtkTextBuffer * buf, struct field_nth_body * body); void print_dlp_tersoff_cross (GtkTextBuffer * buf, struct field_nth_body * body_a, struct field_nth_body * body_b); void print_dlp_tersoff (GtkTextBuffer * buf, struct 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 (struct field_nth_body * body, int aid, int nbd); /* * void print_field_prop (struct field_prop * pro, int st, struct field_molecule * mol) * * Usage: print force field property * * struct field_prop * pro : the field property to print * int st : the type of structural element * struct field_molecule * mol : the target field molecule */ void print_field_prop (struct field_prop * pro, int st, struct field_molecule * mol) { int i, j, k, u, v; struct 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 } /* * void print_field_struct (struct field_struct * stru, struct field_molecule * mol) * * Usage: print force field structural element * * struct field_struct * stru : the target field structural element * struct field_molecule * mol : the target field molecule */ void print_field_struct (struct field_struct * stru, struct 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 struct 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; } } } /* * void print_all_field_struct (struct field_molecule * mol, int str) * * Usage: print all field structural element(s) * * struct field_molecule * mol : the target field molecule * int str : the type of structural element */ void print_all_field_struct (struct field_molecule * mol, int str) { int i; struct 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 } struct imp_inv{ int a; int b; int c; int d; struct imp_inv * next; struct imp_inv * prev; }; /* * gboolean print_this_imp_inv (struct imp_inv * inv, int di, int a, int b, int c, int d) * * Usage: print this improper / inversion structure or not (already printed) ? * * struct imp_inv * inv : the improper / inversion structure to check * int di : 6 = improper, 7 = inversion * int a : 1st atom id * int b : 2nd atom id * int c : 3rd atom id * int d : 4th atom id */ gboolean print_this_imp_inv (struct 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; } /* * gboolean member_of_atom (struct field_atom * fat, int id) * * Usage: is the id atom from the model in target field atom * * struct field_atom * fat : the target field atom * int id : the atom id in the model */ gboolean member_of_atom (struct field_atom * fat, int id) { int i; for (i=0; i num; i++) { if (tmp_fat -> list[i] == id) return TRUE; } return FALSE; } /* * void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, struct field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) * * Usage: print / fill tree store with force field improper(s)/inversion(s) information * * int di : 6 = improper(s), 7 = inversion(s) * GtkTextBuffer * buf : the GtkTextBuffer to print into, if input print * struct field_struct * dhii : the field improper / inversion structural element(s) to print * int fi : the target fragment id * GtkTreeStore * store : the target GtkTreeStore to store, if assistant tab creation / refresh * GtkTreeIter * iter : the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, struct 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); struct imp_inv * first_imp_inv = NULL; struct 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); } /* * void print_dlp_dihedral (int dih, GtkTextBuffer * buf, struct field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) * * Usage: print / fill tree store with force field dihedral(s) information * * int dih : 4 = dihderale(s), 5 = dihedral restraint(s) * GtkTextBuffer * buf : the GtkTextBuffer to print into, if input print * struct field_struct * dh : the field dihedral / dihedral restraint structural element(s) to print * int fi : the target fragment id * GtkTreeStore * store : the target GtkTreeStore to store, if assistant tab creation / refresh * GtkTreeIter * iter : the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_dihedral (int dih, GtkTextBuffer * buf, struct 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); } /* * void print_dlp_angle (int ai, GtkTextBuffer * buf, struct field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) * * Usage: print / fill tree store with force field angle(s) information * * int ai : 2 = angle(s), 3 = angular restraint(s) * GtkTextBuffer * buf : the GtkTextBuffer to print into, if input print * struct field_struct * an : the field angle / angle restraint structural element(s) to print * int fi : the target fragment id * GtkTreeStore * store : the target GtkTreeStore to store, if assistant tab creation / refresh * GtkTreeIter * iter : the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_angle (int ai, GtkTextBuffer * buf, struct 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); } /* * void print_dlp_bond (int bi, GtkTextBuffer * buf, struct field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) * * Usage: print / fill tree store with force field bond(s) information * * int bi : 0 = bond(s), 1 = bond restraint(s) * GtkTextBuffer * buf : the GtkTextBuffer to print into, if input print * struct field_struct * bd : the field bond / bond restraint structural element(s) to print * int fi : the target fragment id * GtkTreeStore * store : the target GtkTreeStore to store, if assistant tab creation / refresh * GtkTreeIter * iter : the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_bond (int bi, GtkTextBuffer * buf, struct 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); } /* * void print_dlp_rigid (GtkTextBuffer * buf, struct field_rigid * rig) * * Usage: print force field rigid * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_rigid * rig : the field rigid to print */ void print_dlp_rigid (GtkTextBuffer * buf, struct 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); } /* * void print_dlp_tet (GtkTextBuffer * buf, struct field_tethered * tet) * * Usage: print force field tethered potential * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_tethered * tet : the field tethered potential to print */ void print_dlp_tet (GtkTextBuffer * buf, struct 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); } /* * void print_dlp_pmf (GtkTextBuffer * buf, struct field_pmf * pmf) * * Usage: print force field mean force potential * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_pmf * pmf : the field PMF to print */ void print_dlp_pmf (GtkTextBuffer * buf, struct 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); } } } /* * void print_dlp_cons (GtkTextBuffer * buf, struct field_constraint * cons) * * Usage: print force field constraint * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_constraint * cons : the field constraint to print */ void print_dlp_cons (GtkTextBuffer * buf, struct 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); } /* * void print_dlp_shell (GtkTextBuffer * buf, struct field_molecule * fmol, struct field_shell * shell) * * Usage: print force field core shell * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_molecule * fmol : the target field molecule * struct field_shell * shell : the field shell to print */ void print_dlp_shell (GtkTextBuffer * buf, struct field_molecule * fmol, struct 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); } /* * void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) * * Usage: print force field atom * * GtkTextBuffer * buf : the GtkTextBuffer to print into * int at : the list id in the target field atom * int 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); } /* * int get_num_struct_to_print (struct field_molecule * fmol, int sid) * * Usage: find the number of structural element(s) to print * * struct field_molecule * fmol : the target field molecule * int sid : the type of structural element */ int get_num_struct_to_print (struct 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; } /* * void print_dlp_molecule (GtkTextBuffer * buf, struct field_molecule * fmol) * * Usage: print force field molecule * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_molecule * fmol : the field molecule to print */ void print_dlp_molecule (GtkTextBuffer * buf, struct 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); } /* * void print_dlp_body (GtkTextBuffer * buf, struct field_nth_body * body) * * Usage: print force field non bonded potential * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_nth_body * body : the non bonded potential to print */ void print_dlp_body (GtkTextBuffer * buf, struct 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); } /* * void print_dlp_tersoff_cross (GtkTextBuffer * buf, struct field_nth_body * body_a, struct field_nth_body * body_b) * * Usage: print Tersoff potential cross term * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_nth_body * body_a : 1st non bonded potential * struct field_nth_body * body_b : 2nd non bonded potential */ void print_dlp_tersoff_cross (GtkTextBuffer * buf, struct field_nth_body * body_a, struct 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); } /* * void print_dlp_tersoff (GtkTextBuffer * buf, struct field_nth_body * body) * * Usage: print force field Tersoff potential * * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_nth_body * body : the non bonded (Tersoff potential) to print */ void print_dlp_tersoff (GtkTextBuffer * buf, struct 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) { struct 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; } } } /* * void print_dlp_field (GtkTextBuffer * buf) * * Usage: print DL-POLY classical force field * * GtkTextBuffer * 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); } /* * int get_pbc () * * Usage: 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; } } /* * void print_dlp_config (GtkTextBuffer * buf) * * Usage: print DL-POLY CONFIG file * * GtkTextBuffer * 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)"}; /* * gboolean print_ana () * * Usage: 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"}; /* * void print_int (GtkTextBuffer * buf, int data) * * Usage: print integer value * * GtkTextBuffer * buf : the GtkTextBuffer to print into * int 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); } /* * void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) * * Usage: print CONTROL file print integer value * * GtkTextBuffer * buf : the GtkTextBuffer to print into * int data : the integer value to print * gchar * info_a : 1st string to print * gchar * info_b : 2nd string to print, if any * gchar * 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); } /* * void print_float (GtkTextBuffer * buf, double data) * * Usage: print float value * * GtkTextBuffer * buf : the GtkTextBuffer to print into * double 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); } /* * void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) * * Usage: print CONTROL file print float value * * GtkTextBuffer * buf : the GtkTextBuffer to print into * double data : the float value to print * gchar * info_a : 1st string to print * gchar * info_b : 2nd string to print, if any * gchar * 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); } /* * void print_sci (GtkTextBuffer * buf, double data) * * Usage: print float in scientific format * * GtkTextBuffer * buf : the GtkTextBuffer to print into * double 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); } /* * void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) * * Usage: print CONTROL file print float value in scientific format * * GtkTextBuffer * buf : the GtkTextBuffer to print into * double data : the float value to print * gchar * info_a : 1st string to print * gchar * info_b : 2nd string to print, if any * gchar * 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); } /* * void print_string (GtkTextBuffer * buf, gchar * string) * * Usage: print string * * GtkTextBuffer * buf : the GtkTextBuffer to print into * gchar * string : the string to print */ void print_string (GtkTextBuffer * buf, gchar * string) { print_info (" ", NULL, buf); print_info (string, "bold_green", buf); } /* * void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) * * Usage: print CONTROL file print string * * GtkTextBuffer * buf : the GtkTextBuffer to print into * gchar * string : the string to print * gchar * info_a : 1st string to print, if any * gchar * info_b : 2nd string to print, if any * gchar * 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); } /* * void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) * * Usage: print CONTROL file print key * * GtkTextBuffer * buf : the GtkTextBuffer to print into * gchar * info : the information string, if any * gchar * 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); } /* * void print_dlp_control (GtkTextBuffer * buf) * * Usage: print DL-POLY CONTROL file * * GtkTextBuffer * 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.12/src/calc/dl_poly/dlp_viz.c000066400000000000000000000777431450232132300204360ustar00rootroot00000000000000/* 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 */ /* * This file: 'dlp_viz.c' * * Contains: * - The subroutines to handle the visualization events when creating a classical force field * * List of subroutines: 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 (struct field_molecule * fmol, int id, int viz); void field_unselect_all (); void visualize_bonds (int viz, int aid, struct field_atom * at, struct field_atom * bt); void visualize_angles (int viz, int aid, struct field_atom * at, struct field_atom * bt, struct field_atom * ct); void visualize_dihedrals (int viz, int did, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct field_atom * dt); void visualize_imp_inv (int viz, int dih, int iid, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct field_atom * dt); void visualize_body (int viz, int bd, struct 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 (struct atom_selection * at_list, struct atom * at, gboolean add); extern void init_default_shaders (glwin * view); /* * void field_selection (int i, int viz, int lab, int aid) * * Usage: select / unselect atom * * int i : the atom id in the model * int viz : visualization status (0= hide, 1 = show) * int lab : the value to display for the label * int 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; } /* * void viz_fragment (struct field_molecule * fmol, int id, int viz) * * Usage: show / hide fragment * * struct field_molecule * fmol : the target field molecule * int id : the fragment id * int viz : visualization status (0 = hide, 1 = show) */ void viz_fragment (struct 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); } /* * void field_unselect_all () * * Usage: 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]); /* * void visualize_bonds (int viz, int aid, * struct field_atom * at, * struct field_atom * bt) * * Usage: show / hide bond / bond restraint * * int viz : visualization status (0 = hide, 1 = show) * int aid : the id of the structural element * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom */ void visualize_bonds (int viz, int bid, struct field_atom * at, struct 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); } } } } /* * void visualize_angles (int viz, int aid, * struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct) * * Usage: show / hide angle / angle restraint * * int viz : visualization status (0 = hide, 1 = show) * int aid : the id of the structural element * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom */ void visualize_angles (int viz, int aid, struct field_atom * at, struct field_atom * bt, struct 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); } } } } } } /* * void visualize_dihedrals (int viz, int did, * struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct, * struct field_atom * dt) * * Usage: show / hide dihedral / dihedral restraint * * int viz : visualization status (0 = hide, 1 = show) * int did : the id of the structural element * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom * struct field_atom * dt : 4th field atom */ void visualize_dihedrals (int viz, int did, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct 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); } } } } } } } } /* * void visualize_imp_inv (int viz, int dih, int iid, * struct field_atom * at, * struct field_atom * bt, * struct field_atom * ct, * struct field_atom * dt) * * Usage: show / hide improper or inversion * * int viz : visualization status (0 = hide, 1 = show) * int dih : 6 = improper, 7 = inversion * int iid : the id of the structural element * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom * struct field_atom * ct : 3rd field atom * struct field_atom * dt : 4th field atom */ void visualize_imp_inv (int viz, int dih, int iid, struct field_atom * at, struct field_atom * bt, struct field_atom * ct, struct 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); } } } } } } } } } } } /* * void visualize_body (int viz, int bd, struct field_nth_body * body) * * Usage: show / hide non bonded interaction * * int viz : visualization status (0 = hide, 1 = show) * int bd : the type of non bonded interaction * struct field_nth_body * body : the target non bonded interaction */ void visualize_body (int viz, int bd, struct 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); } } } } /* * int get_field_objects (int id, int jd) * * Usage: get the number of this type of field object * * int id : the tyoe of field object * int 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; } /* * void select_object (int id, int jd, int kd) * * Usage: select structural element * * int id : the type of structural element * int jd : the object id, if any * int 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; } } /* * void visualize_single_struct (int id, int jd, int kd, int * ids) * * Usage: visualize single structural element * * int id : the type of structural element * int jd : the object id, if any * int kd : the field molecule id * int * 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); } } } } /* * void visualize_object (int id, int jd, int kd) * * Usage: visualize object and update OpenGL rendering * * int id : the type of object * int jd : the molecule id, if any * int kd : the object id, if any */ void visualize_object (int id, int jd, int kd) { int l, m, n, o, p, q, r, s; struct 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; } } /* * void check_to_visualize_properties_for_this_field_mol (int pid, int mol) * * Usage: check if rendering is required for object in molecule * * int pid : the type of field object * int mol : the target field molecule */ void check_to_visualize_properties_for_this_field_mol (int pid, int mol) { int h, i, j; struct 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; } /* * void check_to_visualize_properties (int pid) * * Usage: check if it is requried to update rendering * * int 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); } /* * G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on visualize force field object toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } } /* * gboolean show_field_object (int id, int jd, int kd) * * Usage: is the field object visible ? * * int id : the type of object * int jd : the object id, if any * int 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; } /* * G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) * * Usage: select all element(s) in the column for visualization * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * gpointer 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 */ /* * 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.12/src/calc/force_fields/amber96.c000066400000000000000000001311171450232132300212000ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/amber98.c000066400000000000000000001313001450232132300211740ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/amber99.c000066400000000000000000002050041450232132300212000ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/cff91.c000066400000000000000000010320141450232132300206400ustar00rootroot00000000000000/* 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 */ /* * This file: 'cff91.c' * * Contains: * CFF91 force field, data from taken from: - the file: 'parm99' 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.12/src/calc/force_fields/charmm22_prot.c000066400000000000000000003742531450232132300224240ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm22_prot_metals.c000066400000000000000000004551671450232132300237750ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm35_ethers.c000066400000000000000000000641241450232132300227270ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_carb.c000066400000000000000000007300041450232132300223420ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_cgenff.c000066400000000000000000032340571450232132300226750ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_lipid.c000066400000000000000000001344761450232132300225470ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_na.c000066400000000000000000002551671450232132300220450ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_prot.c000066400000000000000000004735751450232132300224400ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm36_prot_metals.c000066400000000000000000004755561450232132300240060ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/charmm_silicates.c000066400000000000000000000271531450232132300232460ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/compass.c000066400000000000000000001444401450232132300214030ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/cvff.c000066400000000000000000012606361450232132300206710ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/cvff_aug.c000066400000000000000000014171131450232132300215170ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/force_fields.c000066400000000000000000003000521450232132300223530ustar00rootroot00000000000000/* 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 */ /* * This file: 'force_fields.c' * * Contains: * - The subroutines to prepare the force field XML files from the sources in atomes - The subroutines to read the force field XML files * * List of subroutines: 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}}; /* * int get_pdim(int fid, int prop, int col) * * Usage: retrieve number of parameters for property in force field database * * int fid : the force field id * int prop : the type of property * int 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]; } /* * int get_fkey(int fid, int prop, int col) * * Usage: retrieve key for property in force field database * * int fid : the force field id * int prop : the property id * int 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"); } struct object_match ** all_data[10]; struct object_match * om_tmp; /* * void set_data (int pid, int obj, int oid, int faid) * * Usage: save retrieved force field data * * int pid : the type of structural element * int obj : the element id * int oid : the parameter id the force field database * int 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; } /* * int get_z (int faid) * * Usage: get field atom Z * * int 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; } /* * int get_atoms (int z) * * Usage: retrieve all field atom(s) with matching Z * * int 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"); } struct bond{ int a; int b; float v[2]; struct bond * next; struct bond * prev; }; struct bond * the_bonds[2]; struct bond * tmpbd; /* * gboolean not_done (int eid, int a, int b) * * Usage: was this case already considered ? * * int eid : equivalence id (not used for the time being) * int a : 1st atom id * int 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; } /* * void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) * * Usage: print this bond to file * * int eid : equivalence id (not used for the time being) * int h : the bond type * int fid : the force field id * int inum : the structural element id * char * at_a : 1st atom name * char * at_b : 2nd atom name * char ** 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); } /* * void print_bond_table (int fid, int inum) * * Usage: print force field bond table to file * * int fid : the force field id * int 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); } } }*/ } } struct angl{ int a; int b; int c; float v[2]; struct angl * next; struct angl * prev; }; struct angl * the_angles[2]; struct angl * tmpan; /* * gboolean not_done_an (int eid, int a, int b, int c) * * Usage: was this case already considered ? * * int eid : equivalence id (not used for the time being) * int a : 1st atom id * int b : 2nd atom id * int 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; } /* * 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) * * Usage: print this angle to file * * int eid : equivalence id (not used for the time being) * int h : 0 = angle, 1 = angle restraints * int fid : the force field id * int inum : the structural element id * int ub : Urey-Bradley parameter for the CHARRM FF, 2 for CHARMM FF, 0 otherwise * char * at_a : 1st atom name * char * at_b : 2nd atom name * char * at_c : 3rd atom name * char ** 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); } /* * void print_angle_table (int fid, int inum) * * Usage: print angle(s) table to file * * int fid : the field id * int 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]); } } } /* * void print_dihedral_table (int fid, int inum) * * Usage: print dihedral(s) table to file * * int fid : the force field id * int 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]); } } } /* * void print_improper_table (int fid, int inum) * * Usage: print improper(s) table to file * * int fid : the force field id * int 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"); } } /* * void print_inversion_table (int fid, int inum) * * Usage: print inversion(s) table to file * * int fid : the force field id * int 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"); } } /* * void print_vdw_table (int fid, int inum) * * Usage: print VdW table to file * * int fid : the force field id * int 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"); } } struct object_match * field_objects_id[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; struct object_match * tmp_obj_id; char *** ff_atoms; // 0 = Quadratic, 1 = Quartic, 2 = Morse struct field_data * ff_bonds[3]; struct field_data * ff_angles[2]; struct field_data * ff_dih[2]; struct field_data * ff_imp; struct field_data * ff_inv; struct field_data * ff_vdw; int ff_unit; int * ff_objects; int * ff_dim; int * ff_info; int * ff_key; /* * int field_find_atoms () * * Usage: 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; /* * gboolean is_a_match (int * data, int num, int val[4]) * * Usage: is this match ? * * int * data : the set of parameter(s) * int num : the number of parameter * int val[4] : 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; } } } } } } } /* * void field_find_bonds () * * Usage: 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); } } } /* * void field_find_angles () * * Usage: 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); } } } } } } } /* * void field_find_dihedrals (int id) * * Usage: retrieve available dihedral parameters in force field database * * int 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); } } } } } } } } } /* * void field_find_vdw () * * Usage: 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 /* * void print_all (int oid) * * Usage: print found force field data * * int 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 /* * float get_force_field_atom_mass (int sp, int num) * * Usage: get force field atomic mass * * int sp : the target chemical species * int 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; /* * void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) * * Usage: free force field XML file data * * xmlDoc * doc : the xmlDoc pointer to free * xmlTextReaderPtr 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; } } /* * gchar * open_field_file (int field) * * Usage: open force field XML file * * int 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; struct 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.12/src/calc/force_fields/force_fields.h000066400000000000000000000211021450232132300223540ustar00rootroot00000000000000/* 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 */ /* * This header file: 'force_fields.h' * * Contains: */ #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.12/src/calc/force_fields/oplsaap.c000066400000000000000000006211601450232132300213740ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/oplsaar.c000066400000000000000000012602271450232132300214020ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/force_fields/pcff.c000066400000000000000000012177011450232132300206560ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/calc/lammps/000077500000000000000000000000001450232132300164305ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/calc/lammps/la_print.c000066400000000000000000000605271450232132300204160ustar00rootroot00000000000000/* 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 */ /* * This file: 'la_print.c' * * Contains: * - The subroutines to print the LAMMPS input file(s) * * List of subroutines: int get_mol_id_from_model_id (int at); int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, struct field_struct * dh); int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, struct field_struct * an); int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, struct field_struct * bd); int is_this_new_prop (int sid, struct field_prop * init, struct field_prop * to_check); int get_type_struct_to_print (struct field_molecule * tfmol, int sid); int get_different_atoms (); gboolean are_different_field_atoms (struct field_atom * at, struct field_atom * bt); void print_lammps_mass (GtkTextBuffer * buf); void print_lammps_atoms (GtkTextBuffer * buf); void print_lammps_atom_file (GtkTextBuffer * buf); struct field_atom * get_print_atom (int aid); */ #include "dlp_field.h" #include "interface.h" 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 (struct field_nth_body * body, int aid, int nbd); extern int get_num_struct_to_print (struct field_molecule * fmol, int sid); extern gboolean are_identical_prop (int ti, int ai, struct field_prop * pro_a, struct field_prop * pro_b); extern void merging_atoms (struct field_atom * to_merge, struct field_atom * to_remove, gboolean upda); extern char * vect_comp[3]; /* * int get_mol_id_from_model_id (int at) * * Usage: get field molecule id using atom id * * int at : the atom id */ int get_mol_id_from_model_id (int at) { int i; tmp_fmol = tmp_field -> first_molecule; struct 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; } struct field_prop * print_prop[8]; /* * int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, struct field_struct * dh) * * Usage: print LAMMPS dihedral * * int did : the dihedral id to print * int di : the type of structural property = 2 * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_struct * dh : the structural property to print */ int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, struct field_struct * dh) { int a, c, i, j, k, l, m, n, o, p; gchar * str; struct 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; } /* * int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, struct field_struct * an) * * Usage: print LAMMPS angle * * int aid : the angle id to print * int ai : the type of structural property = 1 * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_struct * an : the structural property to print */ int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, struct field_struct * an) { int i, j, k, l, m, o, p, q; gchar * str; struct 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; } /* * int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, struct field_struct * bd) * * Usage: print LAMMPS bond * * int bid : the bond id to print * int bi : the type of structural property = 0 * GtkTextBuffer * buf : the GtkTextBuffer to print into * struct field_struct * bd : the structural property to print */ int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, struct field_struct * bd) { int i, j, k, l, m, n; gchar * str; struct 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; } /* * int is_this_new_prop (int sid, struct field_prop * init, struct field_prop * to_check) * * Usage: check if field property exists, if not add it * * int sid : the type of structural property * struct field_prop * init : the initial field property pointer * struct field_prop * to_check : the field property to check */ int is_this_new_prop (int sid, struct field_prop * init, struct field_prop * to_check) { struct 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; } /* * int get_type_struct_to_print (struct field_molecule * tfmol, int sid) * * Usage: build the list of 'sid' type structural property(ies) to print * * struct field_molecule * tfmol : the field molecule * int sid : the type of structural */ int get_type_struct_to_print (struct 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; } struct field_atom * all_at; /* * gboolean are_different_field_atoms (struct field_atom * at, struct field_atom * bt) * * Usage: check if two field atoms are different * * struct field_atom * at : 1st field atom * struct field_atom * bt : 2nd field atom */ gboolean are_different_field_atoms (struct field_atom * at, struct 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; } /* * int get_different_atoms () * * Usage: 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; } /* * void print_lammps_mass (GtkTextBuffer * buf) * * Usage: pritn LAMMPS atomic masses * * GtkTextBuffer * 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; } } /* * struct field_atom * get_print_atom (int aid) * * Usage: get LAMMPS field atom * * int aid : the atom id to find */ struct 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; } /* * void print_lammps_atoms (GtkTextBuffer * buf) * * Usage: print LAMMPS atoms * * GtkTextBuffer * buf : the GtkTextBuffer to print into */ void print_lammps_atoms (GtkTextBuffer * buf) { int i; //, j, k; // * struct field_molecule * la_mol; struct 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; }*/ } } /* * void print_lammps_atom_file (GtkTextBuffer * buf) * * Usage: print LAMMPS atom file * * GtkTextBuffer * 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.12/src/curve/000077500000000000000000000000001450232132300153615ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/curve/cedit.c000066400000000000000000000331411450232132300166170ustar00rootroot00000000000000/* 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 */ /* * This file: 'cedit.c' * * Contains: * - The initialization of the curve edition dialog * * List of subroutines: 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: "}; /* * void prepbox (int k, int l, int m) * * Usage: prepare the curve selection combo box * * int k : project id * int l : calculation id * int m : curve id */ void prepbox (int k, int l, int m) { int i, n, o, p; gchar * str; struct project * extra_proj; struct 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); struct cextra * 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); } /* * void set_set (int a, int b, int c) * * Usage: addjust widgets to handle the new curve * * int a : project id * int b : calculation id * int 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); } /* * static void fill_proj_model (GtkTreeStore * store) * * Usage: fill project(s) / curves tree store * * GtkTreeStore * store : the GtkTreeStore to fill */ static void fill_proj_model (GtkTreeStore * store) { GtkTreeIter projlevel; GtkTreeIter calclevel; GtkTreeIter curvelevel; struct 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; /* * void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: show / hide curve cellrenderer toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree model * gpointer 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); } /* * void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the cell renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree iter * gpointer 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); } /* * GtkWidget * create_projects_tree () * * Usage: 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; } /* * G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) * * Usage: curve edition dialog callback * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; } /* * void edit_curve (gpointer data) * * Usage: create the curve edition dialog * * gpointer 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 struct 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.12/src/curve/cedit.h000066400000000000000000000016241450232132300166250ustar00rootroot00000000000000/* 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 */ /* * This header file: 'cedit.h' * * Contains: */ #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.12/src/curve/curve.c000066400000000000000000000325111450232132300166530ustar00rootroot00000000000000/* 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 */ /* * This file: 'curve.c' * * Contains: * - curve management utilities * * List of subroutines: double scale (double axe); void prep_plot (struct 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 (struct project * this_proj, int c); void remove_this_curve_from_extras (int a, int b, int c); void erase_curves (struct project * this_proj, int c); void update_curves (); void update_curve (gpointer data); thedash * 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; /* * thedash * selectdash (int iddash) * * Usage: setup dash pointer * * int iddash : the target dash */ thedash * selectdash (int iddash) { thedash * 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); } /* * double scale (double axe) * * Usage: find appropriate major tick spacing based on axis length * * double 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); } /* * void prep_plot (struct project * this_proj, int rid, int cid) * * Usage: prepare curve plot (setting up variables for the plot) * * struct project * this_proj : the target project * int rid : the calculation id * int cid : the curve id */ void prep_plot (struct 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; } /* * void clean_this_curve_window (int cid, int rid) * * Usage: free curve window data * * int cid : the curve id * int 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; } /* * void set_curve_data_zero (int rid, int cid, int interv) * * Usage: initialize curve data * * int rid : the calculation id * int cid : the curve id * int 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]; } } /* * void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid) * * Usage: save calculation results from Fortran90 * * int * interv : number of data point(s) * double datacurve[* interv] : calculation result(s) to save * int * cid : curve id * int * 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; } } /* * void hide_curves (struct project * this_proj, int c) * * Usage: for project hide all curves for a calculation * * struct project * this_proj : the target project * int c : the target calculation */ void hide_curves (struct 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; } } } } } /* * void remove_this_curve_from_extras (int a, int b, int c) * * Usage: free all target (a,b,c) curve from other curve(s) extra(s) * * int a : the target project * int b : the target calculation * int c : the target curve */ void remove_this_curve_from_extras (int a, int b, int c) { int i, j, k, l; struct project * this_proj; struct cextra * 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; } } } } } } } } /* * void erase_curves (struct project * this_proj, int c) * * Usage: free all curve(s) data * * struct project * this_proj : the target project * int c : the target calculation */ void erase_curves (struct 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; } } } /* * void update_curves () * * Usage: update all curve(s) rendering for all project(s) in the workspace */ void update_curves () { int i, j, k; struct 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); } } } } } } /* * void update_curve (gpointer data) * * Usage: update curve rendering * * gpointer 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.12/src/curve/curve.h000066400000000000000000000131421450232132300166570ustar00rootroot00000000000000/* 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 */ /* * This header file: 'curve.h' * * Contains: */ #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 { int a; int b; int c; gboolean d; } setdata; typedef struct { const double * a; int b; } thedash; 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 (struct 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 thedash * selectdash (int iddash); extern double scale (double axe); extern void prep_plot (struct project * this_proj, int rid, int cid); extern void prep_axis_data (struct project * this_proj, int rid, int cid, int ax); extern void hide_curves (struct project * this_proj, int c); extern void erase_curves (struct 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 (struct 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, struct 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, struct 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, struct project * this_proj, int rid, int cid); extern void autoscale_axis (struct project * this_proj, int rid, int cid, int aid); extern void setup_xaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid); extern void setup_xaxis_log (cairo_t * cr, struct project * this_proj, int rid, int cid, gboolean draw_it); extern void setup_yaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid); extern void setup_yaxis_log (cairo_t * cr, struct 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, struct cextra * 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, struct 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, struct project * this_proj, int rid, int cid); #endif Atomes-GNU-1.1.12/src/curve/cwidget.c000066400000000000000000000216331450232132300171600ustar00rootroot00000000000000/* 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 */ /* * This file: 'cwidget.c' * * Contains: * - The initialization of the curve widget * * List of subroutines: void curve_default_scale (int rid, int cid); void initcurve (struct project * pid, int rid, int cid); void addcurwidgets (int pid, int rid, int str); DataLayout * curve_default_layout (struct project * pid, int rid, int cid); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" /* * DataLayout * curve_default_layout (struct project * pid, int rid, int cid) * * Usage: prepare the default layout for a curve * * struct project * pid : the project id * int rid : the analysis id * int cid : the curve id */ DataLayout * curve_default_layout (struct 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; } /* * void curve_default_scale (int rid, int cid) * * Usage: pick appropriate scale based on the type of analysis * * int rid : analysis id * int 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; } } } /* * void initcurve (struct project * pid, int rid, int cid) * * Usage: initialize curve widget * * struct project * pid : the project id * int rid : the analysis id * int cid : the curve id */ void initcurve (struct 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; } /* * void addcurwidgets (int pid, int rid, int str) * * Usage: add curve widgets to the project * * int pid : the project id * int rid : the analysis id * int 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; struct 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.12/src/curve/datab.c000066400000000000000000001043531450232132300166060ustar00rootroot00000000000000/* 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 */ /* * This file: 'datab.c' * * Contains: * - The curve data edition widget and associated callbacks * * List of subroutines: 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, struct 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 (struct 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; /* * void get_tree_data (GtkWidget * tree) * * Usage: get information on location in a GtkTreeView * * GtkWidget * 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); } /* * void save_row (gpointer data, gpointer user_data) * * Usage: save row data and udpate calculation result accordingly * * gpointer data : the path in the tree model * gpointer 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; } /* * void update_first_row (gpointer data, gpointer user_data) * * Usage: update row in the first column * * gpointer data : the path in the tree model * gpointer 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); } } /* * void update_first_col () * * Usage: 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); } /* * void add_to_last_row (gpointer data, gpointer user_data) * * Usage: add constant to last row * * gpointer data : the path in the tree model * gpointer 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); } } /* * void add_to_last_col (double cte, gpointer data) * * Usage: add constant value to selected rows * * double cte : the constant to add * gpointer data : the associated data pointer */ void add_to_last_col (double cte, gpointer data) { qint * dat = (qint *)data; struct 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); } /* * void multiply_last_row (gpointer data, gpointer user_data) * * Usage: multiply last row by constant * * gpointer data : the path in the tree model * gpointer 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); } } /* * void multiply_last_col (double cte, gpointer data) * * Usage: multiply last colum by constant value * * double cte : the constant value * gpointer data :the associated data pointer */ void multiply_last_col (double cte, gpointer data) { qint * dat = (qint *)data; struct 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); } /* * void select_row (gpointer data, gpointer user_data) * * Usage: select row * * gpointer data : the path in the tree model * gpointer 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); } } /* * void copy_row (gpointer data, gpointer user_data) * * Usage: copy row * * gpointer data : the path in the tree model * gpointer 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); } } } /* * void copy_content (gpointer data) * * Usage: copy selection * * gpointer 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); } /* * void add_row (gpointer data, gpointer user_data) * * Usage: add row * * gpointer data : the path in the tree model * gpointer 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); } } /* * void delete_row (gpointer data, gpointer user_data) * * Usage: delete row * * gpointer data : the path in the tree model * gpointer 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); } } /* * void insert_cell (gpointer data) * * Usage: insert row * * gpointer 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 (); } /* * void delete_cell (gpointer data) * * Usage: delete row * * gpointer data : the associated data pointer */ void delete_cell (gpointer data) { g_list_foreach (g_list_reverse (lrows), (GFunc)delete_row, NULL); update_first_col (); } /* * G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) * * Usage: edit cell in the curve data edition tree model * * GtkCellRendererText * cell : the GtkCellRendererText sending the signal * gchar * path_string : the path in the tree model gchar * new_text : the string describing the new value gpointer 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; struct 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; /* * G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) * * Usage: adjust constant value entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) * * Usage: add constant to column - running the dialog * * GtkDialog * wind : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void add_to_column (gpointer data) * * Usage: add constant to column - creating the dialog * * gpointer 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); } /* * G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) * * Usage: multiply column by constant - running the dialog * * GtkDialog * wind : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void multiply_column (gpointer data) * * Usage: multiply column by constant - creating dialog * * gpointer 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); } /* * GMenu * insert_place () * * Usage: 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; } /* * GMenu * insert_data () * * Usage: create the insert data submenu */ GMenu * insert_data () { GMenu * menu = g_menu_new (); append_submenu (menu, "Insert Row(s)", insert_place()); return menu; } /* * GMenu * delete_data () * * Usage: 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; } /* * GMenu* cell_actions () * * Usage: 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; } /* * GMenu * cell_title () * * Usage: 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; } /* * GMenu * column_actions () * * Usage: 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; } /* * GMenu * column_title () * * Usage: 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; } /* * GMenu * data_menu () * * Usage: 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; } /* * G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: curve data edition popup menu actions callbacks * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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 /* * void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) * * Usage: create curve data edition popup menu GTK4 * * GtkWidget * top_level : the top level widget * double x : x position * double y : y position * gpointer data : the associated data pointer */ void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) #else /* * void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) * * Usage: create curve data edition popup menu GTK3 * * GtkWidget * top_level : the top level widget * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) * * Usage: curve data edition mouse button event GTK4 * * GtkWidget * data_tree : the GtkWidget sending the signal * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * gpointer 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 /* * void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) * * Usage: curve data edition mouse button event GTK3 * * GtkWidget * data_tree : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * guint event_button : event button * guint event_type : event type * gpointer 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 /* * G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button pressed callback GTK4 * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : the number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button released callback GTK4 * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : the number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : * gpointer 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 /* * static void fill_data_model (GtkListStore * store, struct project * this_proj, int b, int c) * * Usage: fill curve data list store * * GtkListStore * store : the GtkListStore to fill * struct project * this_proj : the target project * int b : the calculation id * int c : the curve id */ static void fill_data_model (GtkListStore * store, struct 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); } } /* * GtkWidget * setview (struct project * this_proj, int b, int c) * * Usage: create the curve data tree store * * struct project * this_proj : the target project * int b : the target calculation * int c : the target curve */ GtkWidget * setview (struct 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) { 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; } /* * void cancel_changes (GtkWidget * widg, gpointer data) * * Usage: Usage: cancel curve data edition * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; } /* * G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) * * Usage: Usage: cancel curve data edition button callback * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) * * Usage: Usage: cancel curve data edition callback GTK4 * * GtkWindow * win : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) #else /* * G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) * * Usage: cancel curve data edition callback GTK3 * * GtkWidget * win : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) * * Usage: apply data edition changes * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) { tint * id = (tint *)data; struct 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 (); } /* * void edit_data (gpointer data) * * Usage: create edit curve data dialog * * gpointer data : the associated data pointer */ void edit_data (gpointer data) { GtkWidget * win; tint * id = (tint *)data; struct 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.12/src/curve/datab.h000066400000000000000000000014111450232132300166020ustar00rootroot00000000000000/* 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 */ /* * This header file: 'datab.h' * * Contains: */ #ifndef DATAB_H_ #define DATAB_H_ extern void edit_data (gpointer data); #endif Atomes-GNU-1.1.12/src/curve/draw.c000066400000000000000000000224451450232132300164710ustar00rootroot00000000000000/* 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 */ /* * This file: 'draw.c' * * Contains: * - The curve draw main instructions * */ #include #include #include #include #include #include "global.h" #include "curve.h" /* * void draw_curve (cairo_t * cr, int cid, int rid, struct 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) * * Usage: draw target curve to the cairo drawing context * * cairo_t * cr : the cairo drawing context to use for the draw * int cid : the target curve id * int rid : the target calculation id * struct project * this_proj : the target project * int points : the number of data point(s) * ColRGBA withcolor : the data color * int xscale : x axis scale type (0 = linear, 1 = log) * int yscale : y axis scale type (0 = linear, 1 = log) * int asp : data aspect (0 = x/y normal, 1 = historgram) * int vdash : dash type * double thick : line tthickness * int glyp : glyph type * double gize : glyph size * int freq : glyph frequency * double hwidth : histogram bar width * double hopac : histogram bar opacity value * int hpos : histogram opacity treatment (0 = no opacity, 1 = use opacity) * int extra : the number of extra data sets * int pid : 0 (x/y plot) or plot id number (historgram) */ void draw_curve (cairo_t * cr, int cid, int rid, struct 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; thedash * 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.12/src/curve/frame.c000066400000000000000000000154761450232132300166340ustar00rootroot00000000000000/* 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 */ /* * This file: 'frame.c' * * Contains: * - The frame draw subroutines * * List of subroutines: void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); void prep_axis_data (struct project * this_proj, int rid, int cid, int ax); void draw_frame (cairo_t * cr, struct project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /* * void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) * * Usage: draw frame line * * cairo_t * fr : the cairo drawing context to use for the draw * int da : dash type * double ti : line width * ColRGBA dcol : color */ void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) { thedash * 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); } /* * void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) * * Usage: draw frame * * cairo_t * cd : the cairo drawing context to use for the draw * int tf : frame type * int da : dash type * int res[2] : image size * double ti : line width * double x[2] : x positions (right, left) * double y[2] : y positions (top, bottom) * ColRGBA 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); } /* * void prep_axis_data (struct project * this_proj, int rid, int cid, int ax) * * Usage: prepare axis data * * struct project * this_proj : the target project * int rid : the calculation id * int cid : the curve id * int ax : the axis */ void prep_axis_data (struct 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]; } /* * void draw_frame (cairo_t * cr, struct project * this_proj, int rid, int cid) * * Usage: draw frame and axis data * * cairo_t * cr : the cairo drawing context to use for the draw * struct project * this_proj : the target project * int rid : the calculation id * int cid : the curve id */ void draw_frame (cairo_t * cr, struct 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.12/src/curve/glyph.c000066400000000000000000000162621450232132300166570ustar00rootroot00000000000000/* 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 */ /* * This file: 'glyph.c' * * Contains: * - Curve glyph drawing subroutines * * List of subroutines: 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" /* * void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) * * Usage: draw polyhedra glyph * * cairo_t * to : the cairo drawing context to use for the draw * double x : x position * double y : y position * double size : glyph size * double step : number of points * double 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); } } /* * void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) * * Usage: draw glyph at (x,y) * * cairo_t * in : the cairo drawing context to use for the draw * int theglyph : the type of glyph * double x : x position * double y : y position * ColRGBA gcolor : the glyph color * double 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.12/src/curve/labels.c000066400000000000000000000056621450232132300170000ustar00rootroot00000000000000/* 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 */ /* * This file: 'labels.c' * * Contains: * - Curve labels drawing subroutines * * List of subroutines: void label (cairo_t * cr, double val, int axe, int p, struct project * this_proj); */ #include #include #include #include #include "global.h" #include "curve.h" /* * void label (cairo_t * cr, double val, int axe, int p, struct project * this_proj) * * Usage: draw axis label * * cairo_t * cr : the cairo drawing context to use for the draw * double val : the value to display * int axe : axis (0 = x, 1 = y) * int p : label position (0 = bottom, 1 = top) * struct project * this_proj : the target project */ void label (cairo_t * cr, double val, int axe, int p, struct 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.12/src/curve/legend.c000066400000000000000000000142111450232132300167620ustar00rootroot00000000000000/* 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 */ /* * This file: 'legend.c' * * Contains: * - Curve legend drawing subroutines * * List of subroutines: void show_legend (cairo_t * cr, struct project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" extern DataLayout * get_extra_layout (int i); /* * void show_legend (cairo_t * cr, struct project * this_proj, int rid, int cid) * * Usage: draw legend * * cairo_t * cr : the cairo drawing context to use for the draw * struct project * this_proj : the target project * int rid : the calculation id * int cid : the curve id */ void show_legend (cairo_t * cr, struct 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; thedash * 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)); struct cextra * 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.12/src/curve/m_curve.c000066400000000000000000000572651450232132300172040ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_curve.c' * * Contains: * - The curve context menu (mouse right click) * * List of subroutines: 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, struct cextra * 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 (struct 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); struct cextra * 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 (struct project * pid, int rid, int cid); int ** extrarid; // gchar * curve_act[3]={"edit", "add", "rem"}; /* * void autoscale (gpointer data) * * Usage: autoscale callback * * gpointer 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); } /* * struct cextra * init_extra (tint * id) * * Usage: create extra data set * * tint * id : the associated data pointer */ struct cextra * init_extra (tint * id) { struct cextra * 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; } /* * void add_extra (ExtraSets * sets, tint * id) * * Usage: add set to the extra set(s) * * ExtraSets * sets : the extra set(s) * tint * 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 ++; } /* * void remove_extra (ExtraSets * sets, struct cextra * ctmp) * * Usage: remove data from extra set(s) * * ExtraSets * sets : the extra set(s) * struct cextra * ctmp : the data set to remove from the extra set(s) */ void remove_extra (ExtraSets * sets, struct cextra * 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); /* * void prep_extra_rid (tint * data) * * Usage: look up extra data set(s) for curve * * tint * data : the associated data pointer */ void prep_extra_rid (tint * data) { int i; extrarid = allocdint (nprojects, NGRAPHS); struct project * this_proj = get_project_by_id (data -> a); if (this_proj -> curves[data -> b][data -> c] -> extrac -> extras > 0) { struct cextra * 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; } } } /* * void action_to_plot (gpointer data) * * Usage: add to plot, or, remove curve from plot * * gpointer data : the associated data pointer */ void action_to_plot (gpointer data) { int i; tint * id = (tint *)data; gboolean remove = FALSE; struct project * this_proj = get_project_by_id (activeg); if (this_proj -> curves[activer][activec] -> extrac > 0) { struct cextra * 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]); } /* * G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: curve menu edit action callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { edit_data (data); } /* * G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: curve menu add / remove action callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { action_to_plot (data); } /* * G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: curve menu action callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * gboolean was_not_added (ExtraSets * sets, int a, int b, int c) * * Usage: test if already in the menu or not * * ExtraSets * sets : the target extra sets * int a : the target project * int b : the target calculation * int c : the target curve */ gboolean was_not_added (ExtraSets * sets, int a, int b, int c) { int i, j; struct cextra * 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; } /* * GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) * * Usage: create curve submenu * * GSimpleActionGroup * action_group : the menu action group * gchar * act : the action string * ExtraSets * sets : the target extra sets * gboolean add : remove (0) or add (1) menu * int edit : data edition (1 / 0) * int a : target project * int b : target calculation * tint * 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"}; struct 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; } /* * GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) * * Usage: create curve add / remove submenus * * GSimpleActionGroup * action_group : the menu action group * gchar * act : the action string * tint * data : the associated data pointer * gboolean add : remove (0) or add (1) menu * int edit : data edition (1 / 0) */ GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) { struct 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); /* * GMenu * create_curve_menu (gchar * str) * * Usage: create the curve submenu * * gchar * 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; } /* * GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) * * Usage: create the edit data submenu * * GSimpleActionGroup * action_group : the menu action group * gchar * str : the action string * tint * 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; } /* * GMenu * curve_close_section (gchar * str) * * Usage: create the close menu item * * gchar * 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; } /* * GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) * * Usage: create the save data submenu * * GSimpleActionGroup * action_group : the menu action group * int pop : 0 = menu bar, 1 = popup menu * gchar * str : the action string * tint * 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; } /* * GMenu * curve_menu_bar (struct project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data) * * Usage: create the curve window menu bar * * struct project * this_proj : the target project * GSimpleActionGroup * action_group : the menu action group * gchar * str : the action string * tint * data : the associated data pointer */ GMenu * curve_menu_bar (struct 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; } /* * void curve_window_add_menu_bar (tint * data) * * Usage: add menu bar to the curve window * * tint * data : the associated data pointer */ void curve_window_add_menu_bar (tint * data) { struct 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); } /* * GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) * * Usage: create the add / remove curve submenus * * GSimpleActionGroup * action_group : the menu action group * gchar * act : the action string * int num : the number of curve(s) to add * tint * 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 struct 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; } /* * GMenu * autoscale_section (gchar * str) * * Usage: create autoscale menu item * * gchar * 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; } /* * GtkWidget * curve_popup_menu (gpointer data) * * Usage: create curve popup menu * * gpointer 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.12/src/curve/show.c000066400000000000000000000272751450232132300165220ustar00rootroot00000000000000/* 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 */ /* * This file: 'show.c' * * Contains: * - The general complete graph drawing subroutine * * List of subroutines: 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 /* * gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) * * Usage: show curve callback GTK4 * * GtkWidget * grwdget : the GtkWidget sending the signal * cairo_t * cr : the cairo drawing context to use for the draw * gpointer curve : the associated data pointer */ gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) #else /* * void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) * * Usage: show curve callback GTK3 * * GtkDrawingArea * area : the GtkDrawingArea sending the signal * cairo_t * cr : the cairo drawing context to use for the draw * int width : drawing area width * int height : drawing area height * gpointer 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; struct 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; struct cextra * 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 } /* * void hide_curve (gpointer data) * * Usage: hide curve * * gpointer 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 /* * G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) * * Usage: hide curve callback GTK4 * * GtkWindow * thecurve : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) #else /* * G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) * * Usage: hide curve callback GTK3 * * GtkWidget * thecurve : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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.12/src/curve/tab-1.c000066400000000000000000000653621450232132300164450ustar00rootroot00000000000000/* 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 */ /* * This file: 'tab-1.c' * * Contains: * - The 1st tab of the curve edition dialog * * List of subroutines: 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; /* * G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) * * Usage: change window size entry callback * * GtkEntry * maj : the GtkEntry sending the signal * gpointer 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; struct 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]); } /* * cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) * * Usage: draw frame preview * * int tf : frame type * int da : frame dash * double ti : frame thickness * double x[2] : x positions (min / max) * double y[2] : y positions (min / max) * ColRGBA dcol : frame color * ColRGBA 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 /* * G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) * * Usage: show / hide title toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) * * Usage: show / hide title toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; struct 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 /* * G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) * * Usage: use / not default title toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) * * Usage: use / not default title toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) * * Usage: set custom title entry callback * * GtkEntry * tit : the GtkEntry sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) * * Usage: set title font * * GtkFontButton * fontb : the GtkFontButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) * * Usage: set title color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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; struct project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> title_color = get_button_color (colob); update_curve (data); } /* * G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) * * Usage: set axis title position entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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; struct 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); } /* * void set_frame_style (gpointer data) * * Usage: create frame preview * * gpointer 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; struct 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 /* * G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) * * Usage: show / hide frame toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) * * Usage: show / hide frame toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) * * Usage: change background color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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; struct project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> backcolor = get_button_color (colob); set_data_style (data); } /* * G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) * * Usage: change frame type * * GtkComboBox * fbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) * * Usage: change frame line type * * GtkComboBox * fbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) * * Usage: set frame thickness entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); struct 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); } /* * G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) * * Usage: set frame color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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; struct project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> frame_color = get_button_color (colob); set_frame_style (data); } /* * G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) * * Usage: set frame position entry callback * * GtkEntry * fen : the GtkEntry sending the signal * gpointer 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; struct 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); } /* * GtkWidget * create_tab_1 (gpointer data) * * Usage: handle the creation of the 1st tab of the curve edition dialog * * gpointer 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; struct 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.12/src/curve/tab-2.c000066400000000000000000001025731450232132300164420ustar00rootroot00000000000000/* 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 */ /* * This file: 'tab-2.c' * * Contains: * - The 2nd tab of the curve edition dialog * * List of subroutines: 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; /* * cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) * * Usage: draw the data set preview * * int aspect : the data aspect (x/y or bars) * double hwidth : the histogram bar width * double hopac : the histogram bar opacity * int da : the dash type * double ti : the thickness * ColRGBA dcol : the data color * ColRGBA bcol : the background color * int tglyph : the glyphe type * double tgsize : the glyph size * gpointer data : the associated data pointer */ 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; thedash * 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; } /* * DataLayout * get_extra_layout (int i) * * Usage: retrieve the i data layout * * int i : the id of data layout to retrieve */ DataLayout * get_extra_layout (int i) { int j; struct cextra * ctmp = get_project_by_id(a) -> curves[b][c] -> extrac -> first; for (j=0; j next; } return ctmp -> layout; } /* * void set_data_style (gpointer data) * * Usage: update the data style widgets * * gpointer 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)); struct 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); } /* * G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) * * Usage: change glyph type * * GtkComboBox * gbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) * * Usage: change data dash style * * GtkComboBox * gbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) * * Usage: set data color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) * * Usage: set data thickness entry callback * * GtkEntry * thickd : the GtkEntry sending the signal * gpointer 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); struct 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); } } } /* * G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) * * Usage: set glyph size entry callback * * GtkEntry * glsize : the GtkEntry sending the signal * gpointer 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); struct 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); } } } /* * G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) * * Usage: set histogram bar width entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); struct 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); } } } /* * G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) * * Usage: set histogram bar opacity entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); struct 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); } } } /* * G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) * * Usage: change histogram bar position * * GtkComboBox * gbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) * * Usage: set glyph frequency entry callback * * GtkEntry * glfreq : the GtkEntry sending the signal * gpointer 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); struct 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); } } } /* * G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) * * Usage: change the data set to customize * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) * * Usage: change data aspect (x/y or histogram bars) * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * static void fill_org_model (GtkListStore * store, gpointer data) * * Usage: fill the data set list store * * GtkListStore * store : the data set list store to fill * gpointer 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; struct project * this_proj = get_project_by_id (a); struct cextra * 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; } } /* * G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) * * Usage: move up or down data set in the tree model to move it front or back in the data plot * * GtkTreeModel * tree_model : the GtkTreeModel sending the signal * GtkTreePath * path : the path in the tree model * gpointer 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; struct cextra * ctmpa, * ctmpb, * ctmpc, * ctmpd; struct 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); } /* * GtkWidget * create_org_list (gpointer data) * * Usage: create the data set organisation widget * * gpointer 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 /* * G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) * * Usage: shift / not histogram bars toggle callback GTK4 * * GtkCheckButton * shift : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) #else /* * G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) * * Usage: shift / not histogram bars toggle callback GTK3 * * GtkToggleButton * shift : the GtkToggleButton sending the signal * gpointer 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; struct 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); } /* * GtkWidget * create_tab_2 (gpointer data) * * Usage: handle the creation of the 2nd tab of the curve edition dialog * * gpointer 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; struct 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.12/src/curve/tab-3.c000066400000000000000000000366551450232132300164520ustar00rootroot00000000000000/* 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 */ /* * This file: 'tab-3.c' * * Contains: * - The 3rd tab of the curve edition dialog * * List of subroutines: 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; /* * cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) * * Usage: draw legend preview * * int da : the dash type * double ti : the thickness * ColRGBA dcol : the legend color * ColRGBA 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; thedash * 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 /* * G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) * * Usage: show / hide legend toggle callback GTK4 * * GtkCheckButton * leg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) #else /* * G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) * * Usage: show / hide legend toggle callback GTK3 * * GtkToggleButton * leg : the GtkToggleButton sending the signal * gpointer 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; struct 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); } /* * void set_legend_box_style (gpointer data) * * Usage: update legend style widgets * * gpointer 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; struct 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 /* * G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) * * Usage: show / hide legend box toggle callback GTK4 * * GtkCheckButton * bleg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) #else /* * G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) * * Usage: show / hide legend box toggle callback GTK3 * * GtkToggleButton * bleg : the GtkToggleButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) * * Usage: change legend font * * GtkFontButton * fontb : the GtkFontButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) * * Usage: change legend color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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; struct project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> legend_color = get_button_color (colob); set_legend_box_style (data); } /* * G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) * * Usage: set the legend position entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); struct 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); } /* * G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) * * Usage: change the legend box line type * * GtkComboBox * fbox : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) * * Usage: set legend box thickness entry callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); struct 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); } /* * G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) * * Usage: set legend color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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); } /* * GtkWidget * create_tab_3 (gpointer data) * * Usage: handle the creation of the 3rd tab of the curve edition dialog * * gpointer 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; struct 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.12/src/curve/tab-4.c000066400000000000000000001044711450232132300164430ustar00rootroot00000000000000/* 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 */ /* * This file: 'tab-4.c' * * Contains: * - The 4th tab of the curve edition dialog * * List of subroutines: 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; /* * int get_active_axis () * * Usage: get active axis */ int get_active_axis () { return gtk_combo_box_get_active (GTK_COMBO_BOX(axischoice)); } /* * G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) * * Usage: set axis min * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; struct 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); } } /* * G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) * * Usage: set axis max * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) * * Usage: set number of major tick divisions * * GtkEntry * maj : the GtkEntry sending the signal * gpointer 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; struct 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]); } /* * G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) * * Usage: set number of minor tick division(s) * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) * * Usage: set major ticks size * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) * * Usage: set minor ticks size * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) * * Usage: set ticks label number of digit(s) * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) * * Usage: set ticks label position shift on x axis * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) * * Usage: set ticks label position shift on y axis * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) * * Usage: set axis title position shift on x axis * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) * * Usage: set axis title position shift on y axis * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) * * Usage: change tick marks location * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) * * Usage: change tick marks position * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) * * Usage: change ticks labels position * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) * * Usage: set ticks labels font * * GtkFontButton * fontb : the GtkFontButton sending the signal * gpointer 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 (); struct 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); } /* * void ticks_angle_has_changed (gpointer data, double value) * * Usage: set ticks angle * * gpointer data : the associated data pointer * double 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); } /* * G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: set ticks angle callback - scroll * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) * * Usage: set ticks angle callback - range * * GtkRange * range : the GtkRange sending the signal * gpointer 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 /* * G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) * * Usage: show / hide axis title toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) * * Usage: show / hide axis title toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); struct 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 /* * G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) * * Usage: show / hide grid toggle callback GTK4 * * GtkCheckButton * grid : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) #else /* * G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) * * Usage: show / hide grid toggle callback GTK3 * * GtkToggleButton * grid : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) * * Usage: autoscale axis * * GtkButton * autosc : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) * * Usage: show / hide axis toggle callback GTK4 * * GtkCheckButton * axis : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) #else /* * G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) * * Usage: show / hide axis toggle callback GTK3 * * GtkToggleButton * axis : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) * * Usage: set axis legend entry callback * * GtkEntry * xtit : the GtkEntry sending the signal * gpointer 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 (); struct 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); } /* * G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) * * Usage: set axis title font * * GtkFontButton * fontb : the GtkFontButton sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) * * Usage: change the axis scale * * GtkComboBox * sbox : the GtkComboBox sending the signal * gpointer 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; struct 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; /* * G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data) * * Usage: change the axis * * GtkComboBox * widg : the GtkComboBox sending the signal * gpointer 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; struct 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]); } /* * GtkWidget * create_tab_4 (gpointer data) * Usage: handle the creation of the 4th tab of the curve edition dialog * * gpointer 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; struct 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.12/src/curve/title.c000066400000000000000000000061051450232132300166500ustar00rootroot00000000000000/* 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 */ /* * This file: 'title.c' * * Contains: * - The curve title drawing subroutines * * List of subroutines: const gchar * default_title (int ax, int c); void show_title (cairo_t * cr, struct project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /* * const gchar * default_title (int ax, int c) * * Usage: default title string * * int ax : axis * int 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; } } /* * void show_title (cairo_t * cr, struct project * this_proj, int rid, int cid) * * Usage: draw title * * cairo_t * cr : the cairo drawing context to use for the draw * struct project * this_proj : the target project * int rid : the calculation id * int cid : the curve id */ void show_title (cairo_t * cr, struct 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.12/src/curve/w_curve.c000066400000000000000000000646161450232132300172140ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_curve.c' * * Contains: * - The subroutines to create the graph/curve(s) window * * List of subroutines: int get_curve_shift (struct 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 /* * G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) * * Usage: show curve popup menu GTK3 * * GtkWidget * widget : the GtkWidget sending the signal * gpointer 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 /* * void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) * * Usage: curve zoom in or out * * gboolean state : mouse button state (pressed or released) * gdouble event_x : x position * gdouble event_y : y position * gpointer 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; struct 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 /* * G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) * * Usage: handle mouse motion event in the OpenGL window GTK3 * * GtkWidget * widget : the GtkWidget sending the signal * GdkEventMotion * event : the GdkEvent triggering the signal * gpointer 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 /* * static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) * * Usage: handle mouse motion event in the curve window GTK4 * * GtkEventControllerMotion * motion : The GtkEvenController sending the signal * gdouble x : x position * gdouble y : y position * gpointer 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 /* * void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: handle mouse button event on the curve window GTK4 * * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: handle mouse button event on the curve window GTK3 * * GdkEvent * event : the GdkEvent triggering the signal * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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; struct 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 /* * G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button pressed signal on the curve window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button released signal on the curve window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: mouse button event on the curve window * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) * * Usage: the keyboard shortcut actions for the curve window * * guint keyval : the key pressed * GdkModifierType state : the keyboard modifier * gpointer 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 /* * G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) * * Usage: keyboard key press event for the curve window GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEventKey * event : the GdkEventKey triggering the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) * * Usage: keyboard key press event for the curve window GTK4 * * GtkEventControllerKey * self : the GtkEventControllerKey sending the signal * guint keyval : number of times it was pressed * guint keycode : the key pressed * GdkModifierType state : the keyboard modifier * gpointer 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 /* * int get_curve_shift (struct project * this_proj, int b, int c) * * Usage: get cruve window size shift * * struct project * this_proj : the target project * int b : the calculation id * int c : the curve id */ int get_curve_shift (struct 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); } /* * G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) * * Usage: curve window realize callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; struct 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)); } /* * GtkWidget * create_curve (tint * data) * * Usage: create the curve data plot window * * tint * data : the associated data pointer */ GtkWidget * create_curve (tint * data) { GtkWidget * Curve, * vbox; activec = data -> c; struct 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.12/src/curve/w_data.c000066400000000000000000000156131450232132300167720ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_data.c' * * Contains: * - The subroutines to write / output curve data * * List of subroutines: 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 /* * G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: save curve data - running the dialog GTK4 * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) * * Usage: save curve data - running the dialog GTK3 * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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) { struct 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; struct cextra * 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 } /* * void write_curve (gpointer idata) * * Usage: save curve data - creating the dialog * * gpointer 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; struct 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.12/src/curve/w_img.c000066400000000000000000000267351450232132300166440ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_img.c' * * Contains: * - The subroutines to save screenshot from graph / curve(s) * * List of subroutines: 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" double back_alpha; dwidget thedata; int forme; /* * G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) * * Usage: set image size entry callback * * GtkEntry * val : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) * * Usage: show / hide image background toggle callback GTK4 * * GtkCheckButton * backb : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) #else /* * G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) * * Usage: show / hide image background toggle callback GTK3 * * GtkToggleButton * backb : the GtkTogglekButton sending the signal * gpointer 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; } } /* * G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) * * Usage: change image format * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: write image - running the dialog GTK4 * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) * * Usage: write image - running the dialog GTK3 * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); struct 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 } /* * void write_image (gpointer curetow) * * Usage: write image - creating the file chooser dialog * * gpointer 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; struct 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 } } /* * G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) * * Usage: export curve window plot to image - running the dialog * * GtkDialog * save_img : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void save_image (gpointer cdata) * * Usage: export curve window plot to image - creating the dialog * * gpointer 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; struct 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.12/src/curve/xaxis.c000066400000000000000000000217001450232132300166610ustar00rootroot00000000000000/* 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 */ /* * This file: 'xaxis.c' * * Contains: * - The subroutines to draw the x axis * * List of subroutines: void setup_xaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid); void setup_xaxis_log (cairo_t * cr, struct project * this_proj, int rid, int cid, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /* * void setup_xaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid) * * Usage: setup x axis using a linear scale * * cairo_t * cr : the cairo drawing context * struct project * this_proj : the target project * int rid : the analysis id * int cid : the curve id */ void setup_xaxis_linear (cairo_t * cr, struct 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); } } /* * void setup_xaxis_log (cairo_t * cr, struct project * this_proj, int rid, int cid, gboolean draw_it) * * Usage: setup x axis using a log scale * * cairo_t * cr : the cairo drawing context * struct project * this_proj : the target project * int rid : the analysis id * int cid : the curve id * gboolean draw_it : 1/0 draw or not */ void setup_xaxis_log (cairo_t * cr, struct 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.12/src/curve/yaxis.c000066400000000000000000000301001450232132300166540ustar00rootroot00000000000000/* 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 */ /* * This file: 'yaxis.c' * * Contains: * - The subroutines to draw the y axis * * List of subroutines: void autoscale_axis (struct project * this_proj, int rid, int cid, int aid); void setup_yaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid); void setup_yaxis_log (cairo_t * cr, struct project * this_proj, int rid, int cid, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /* * void autoscale_axis (struct project * this_proj, int rid, int cid, int aid) * * Usage: autoscale axis * * struct project * this_proj : the target project * int rid : the analysis id * int cid : the curve id * int aid : the axis id */ void autoscale_axis (struct 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]); } struct cextra * ctmp = this_proj -> curves[rid][cid] -> extrac -> first; struct 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; } } } /* * void setup_yaxis_linear (cairo_t * cr, struct project * this_proj, int rid, int cid) * * Usage: setup y axis using a linear scale * * cairo_t * cr : the cairo drawing context * struct project * this_proj : the target project * int rid : the analysis id * int cid : the curve id */ void setup_yaxis_linear (cairo_t * cr, struct 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); } } /* * void setup_yaxis_log (cairo_t * cr, struct project * this_proj, int rid, int cid, gboolean draw_it) * * Usage: setup y axis using a log scale * * cairo_t * cr : the cairo drawing context * struct project * this_proj : the target project * int rid : the analysis id * int cid : the curve id * gboolean draw_it : 1/0 draw or not */ void setup_yaxis_log (cairo_t * cr, struct 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.12/src/fortran/000077500000000000000000000000001450232132300157105ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/fortran/allocbonds.F90000066400000000000000000000241111450232132300203070ustar00rootroot00000000000000! 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 LOGICAL FUNCTION ALLOCEDCO (alloc) ! ! Memory allocation for Edge and Corner sharing ! 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.12/src/fortran/allochem.F90000066400000000000000000000065171450232132300177650ustar00rootroot00000000000000! 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 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.12/src/fortran/allocmsd.F90000066400000000000000000000061071450232132300177720ustar00rootroot00000000000000! 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 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.12/src/fortran/angles.F90000066400000000000000000000244261450232132300174510ustar00rootroot00000000000000! 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 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.12/src/fortran/bonds.F90000066400000000000000000000360051450232132300173010ustar00rootroot00000000000000! 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 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, LGSA) 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 oglmax=0.0d0 do l=1,3 oglmax = oglmax + (pmax(l)-pmin(l))**2 enddo oglmax = 2.0*sqrt(oglmax) dmax = 0.0d0 do l=1, NCELLS dmax = max(dmax, THE_BOX(l)%maxv) enddo if (oglmax < dmax) oglmax = dmax*2.0; if (oglmax .lt. 10.0) oglmax = 10.0 END FUNCTION Atomes-GNU-1.1.12/src/fortran/c3d.F90000066400000000000000000000064651450232132300166540ustar00rootroot00000000000000! 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 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.12/src/fortran/chains.F90000066400000000000000000000551621450232132300174460ustar00rootroot00000000000000! 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 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.12/src/fortran/chains_ogl.F90000066400000000000000000000103301450232132300202730ustar00rootroot00000000000000! 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 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.12/src/fortran/chemistry.F90000066400000000000000000000056561450232132300202130ustar00rootroot00000000000000! 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 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.12/src/fortran/cqvf.F90000066400000000000000000000163171450232132300171370ustar00rootroot00000000000000! 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 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.12/src/fortran/dmtx.F90000066400000000000000000001321051450232132300171460ustar00rootroot00000000000000! 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 SUBROUTINE PRINT_THIS_PIXEL (TPS, TPIX, PIXL, pix) USE PARAMETERS IMPLICIT NONE TYPE (PIXEL), DIMENSION(TPS), INTENT(IN) :: TPIX TYPE (PIXEL), INTENT(IN) :: PIXL INTEGER, INTENT(IN) :: TPS, pix INTEGER :: PA, PB write (6, *) write (6, '("Pixel ID:: ",i10)') pix write (6, '(" Number of pixel neighbors:: ",i4)') PIXL%NEIGHBOR do PA=1, PIXL%NEIGHBOR PB = PIXL%IDNEIGH(PA) write (6, '(" N(",i4,")= ",i10," contains: ",i4," atom(s)")') PA, PIXL%IDNEIGH(PA), TPIX(PB)%ATOMS enddo write (6, *) do PA=1, PIXL%ATOMS write (6, '(" At(",i4,")= ",i10)') PA, PIXL%ATOM_ID(PA) enddo write (6, *) 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 nab = npa*npb if (ai .eq. 1) then shift(1,:,:) = npa else if (ai .eq. npa) then shift(3,3,:) = -3*npa endif if (bi .eq. npb) then shift(:,3,3) = shift(:,3,3) - 3*nab if (ai .eq. npa) then shift(3,:,3) = shift(3,:,3) - npa shift(3,3,3) = shift(3,3,3) + 3*npa if (npc .eq. 1) then shift(3,3,2) = shift(3,3,2) + nab endif endif if (npc .eq. 1) then shift (:,1,2) = shift (:,1,2) + nab - npa endif else if (bi .eq. 1) then shift(:,1,1) = shift(:,1,1) + 3*nab if (ai .eq. npa) then shift(3,1,1) = shift(3,1,1) - npa shift(3,3,1) = shift(3,3,1) + npa endif if (npc .eq. 1) then shift (:,1,2) = shift (:,1,2) + nab endif endif if (ci .eq. npc) then shift(:,:,3) = - nab * npc if (ai .eq. 1) then shift(1,:,3) = shift(1,:,3) + npa else if (ai .eq. npa) then shift(3,3,3) = shift(3,3,3) - 3*npa endif if (bi .eq. 1) then shift(:,1,1) = shift(:,1,1) - nab shift(:,1,3) = shift(:,1,3) + nab if (ai .eq. npa) then shift(3,1,2) = shift(3,1,2) - npa shift(3,1,3) = shift(3,1,3) - npa shift(3,2,:) = shift(3,2,:) - npa shift(3,3,:) = shift(3,3,:) + 2*npa shift(3,3,1) = shift(3,3,1) - npa endif else if (bi .eq. npb) then shift(:,3,3) = - 2*nab shift(:,3,1) = shift(:,3,1) - nab shift(:,3,2) = - nab * npc if (ai .eq. 1) then shift(1,3,1) = shift(1,3,1) - npa shift(1,3,:) = shift(1,3,:) + npa else if (ai .eq. npa) then shift (3,:,:) = shift (3,:,:) - npa shift (3,3,1) = shift (3,3,1) + 3*npa endif if (npc .eq. 1) then shift (:,1,2) = shift (:,1,2) - nab + npa endif endif else if (ci .eq. 1) then shift(:,:,1) = nab * npc if (ai .eq. 1) then shift(1,:,1) = shift(1,:,1) + npa else if (ai .eq. npa) then shift(3,:,1) = shift(3,:,1) - npa endif if (bi .eq. 1) then if (npc .gt. 1) then shift(:,1,2) = shift(:,1,2) + 2*nab else shift(:,1,2) = shift(:,1,2) + nab endif shift(:,1,1) = shift(:,1,1) + nab if (ai .eq. npa) then shift(3,1,2) = shift(3,1,2) - npa shift(3,3,2) = shift(3,3,2) + npa endif else if (bi .eq. npb) then shift(:,3,3) = - 2*nab shift(:,3,1) = shift(:,3,1) - nab if (ai .eq. 1) then shift(1,3,3) = shift(1,3,3) + npa else if (ai .eq. npa) then shift(3,:,3) = shift(3,:,3) - npa shift(3,1,3) = 0 endif if (npc .eq. 1) then shift(:,3,2) = shift(:,3,2) - nab endif endif 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 :: 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 ! write (6, *) "ICUT= ",ICUT,", NP= ",NP,", NPS= ",NPS do TPIXD=1, ADAPT_CUT ! MPSIZE is the modifier CUTF=ICUT*MPSIZE CUTF=1.0d0/CUTF ! write (6, *) "TPIXD= ",TPIXD,", MPSIZE= ",MPSIZE,", CUTF= ",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 MPSIZE = (TARGETDP/INID)**(1.0/3.0) 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 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 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. 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, dim, 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) 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 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) = 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, dim, 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) #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.12/src/fortran/dvtb.F90000066400000000000000000000032751450232132300171360ustar00rootroot00000000000000! 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 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.12/src/fortran/escs.F90000066400000000000000000000041671450232132300171350ustar00rootroot00000000000000! 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 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.12/src/fortran/fzbt.F90000066400000000000000000000073771450232132300171530ustar00rootroot00000000000000! 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 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.12/src/fortran/gr.F90000066400000000000000000000356341450232132300166130ustar00rootroot00000000000000! 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 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.12/src/fortran/grfft.F90000066400000000000000000000127011450232132300173010ustar00rootroot00000000000000! 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 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.12/src/fortran/init.F90000066400000000000000000000023231450232132300171330ustar00rootroot00000000000000! 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 #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.12/src/fortran/initchains.F90000066400000000000000000000076001450232132300203240ustar00rootroot00000000000000! 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 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.12/src/fortran/initrings.F90000066400000000000000000000111661450232132300202030ustar00rootroot00000000000000! 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 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.12/src/fortran/lattice.F90000066400000000000000000000333741450232132300176270ustar00rootroot00000000000000! 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 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 Fortran ! 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.12/src/fortran/mendeleiev.F90000066400000000000000000000562451450232132300203210ustar00rootroot00000000000000! 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 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.12/src/fortran/molecules.F90000066400000000000000000000247371450232132300201750ustar00rootroot00000000000000! 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 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 = 1 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 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.12/src/fortran/msd.F90000066400000000000000000000163341450232132300167620ustar00rootroot00000000000000! 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 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.12/src/fortran/parameters.F90000066400000000000000000000621261450232132300203420ustar00rootroot00000000000000! 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 !################################################################ ! 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.12/src/fortran/pdb.F90000066400000000000000000000200241450232132300167330ustar00rootroot00000000000000! 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 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.12/src/fortran/prepdata.F90000066400000000000000000000244311450232132300177740ustar00rootroot00000000000000! 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 #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) 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 CHARACTER (LEN=14) :: ELEM ! Now we are calling the GTK+ routines do i=1, NSP NBSPBS(i) = nsps(i) j = int(idatoms(i)) if (j .gt. 0) then TL(i) = ATSYM(j) ELEM = ELEMENT(j) else TL(i) = "X " ELEM = "Unknown" endif ATOMID(i) = j ! 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) 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) = "Unknown" 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_error ("Problem with the atomic coordinates"//CHAR(0), & "Atom "//NAMEAT//" does not exist "//CHAR(0), " "//CHAR(0)) FINDID = dummy_ask ("Do you want to use dummy atoms to replace "//NAMEAT//" atoms ?"//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.00 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.12/src/fortran/resrings.F90000066400000000000000000000236671450232132300200420ustar00rootroot00000000000000! 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 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.12/src/fortran/rings-guttman.F90000066400000000000000000000452751450232132300210040ustar00rootroot00000000000000! 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 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.12/src/fortran/rings-king.F90000066400000000000000000000747521450232132300202570ustar00rootroot00000000000000! 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 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.12/src/fortran/rings-primitive.F90000066400000000000000000001253761450232132300213360ustar00rootroot00000000000000! 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 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.12/src/fortran/rings_ogl.F90000066400000000000000000000161071450232132300201600ustar00rootroot00000000000000! 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 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.12/src/fortran/sk.F90000066400000000000000000000260711450232132300166130ustar00rootroot00000000000000! 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 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.12/src/fortran/spherical.F90000066400000000000000000000232071450232132300201460ustar00rootroot00000000000000! 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 ! 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.12/src/fortran/sq.F90000066400000000000000000000162371450232132300166240ustar00rootroot00000000000000! 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 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.12/src/fortran/threads.F90000066400000000000000000000023721450232132300176260ustar00rootroot00000000000000! 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 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.12/src/fortran/trj.F90000066400000000000000000000050761450232132300167770ustar00rootroot00000000000000! 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 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.12/src/fortran/utils.F90000066400000000000000000000452041450232132300173350ustar00rootroot00000000000000! 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 ! ! 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 symetric ! 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.12/src/fortran/vas.F90000066400000000000000000000056151450232132300167700ustar00rootroot00000000000000! 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 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.12/src/fortran/writedata.F90000066400000000000000000000707511450232132300201660ustar00rootroot00000000000000! 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 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.12/src/fortran/xyz.F90000066400000000000000000000074461450232132300170350ustar00rootroot00000000000000! 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 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 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.12/src/global.c000066400000000000000000000446551450232132300156570ustar00rootroot00000000000000/* 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 */ /* * This file: 'global.c' * * Contains: * - Global variables declarations - Convenience global subroutines * * List of subroutines: 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 NCALCS 12 #define NGRAPHS 10 #define OGL_STYLES 6 #define FILLED_STYLES 4 #define NCFORMATS 11 #define NDOTS 8 #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 * calc_img[NCALCS-2]; gchar * graph_img[NGRAPHS]; gchar * dots[NDOTS]; gchar * bravais_img[14]; gchar * ifield[8]; gchar * projfile = NULL; char * ifbug="\nIf this is a bug please report it to:"; 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", "DL-POLY HISTORY file", "ISAACS Project File"}; char * file_ext[NCFORMATS+1]={"xyz", "xyz", "c3d", "trj", "trj", "xdatcar", "xdatcar", "pdb", "ent", "cif", "hist", "ipf"}; 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"}; 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"}; 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; struct insert_object * copied_object = 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; 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 /* * int StringLength (char * str) * * Usage: return the length of a string * * char * 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; } */ /* * gboolean * allocbool (int val) * * Usage: allocate a gboolean * pointer * * int val : size of the pointer to allocate */ gboolean * allocbool (int val) { gboolean * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /* * gboolean ** allocdbool (int xal, int yal) * * Usage: allocate a gboolean ** pointer * * int xal : 1st dimension size of the pointer to allocate * int 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; } /* * gboolean *** alloctbool (int xal, int yal, int zal) * * Usage: allocate a gboolean *** pointer * * int xal : 1st dimension size of the pointer to allocate * int yal : 2nd dimension size of the pointer to allocate * int 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; } /* * int * allocint (int val) * * Usage: allocate an int * pointer * * int val : size of the pointer to allocate */ int * allocint (int val) { int * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /* * int ** allocdint (int xal, int yal) * * Usage: allocate an int ** pointer * * int xal : 1st dimension size of the pointer to allocate * int 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; } /* * int *** alloctint (int xal, int yal, int zal) * * Usage: allocate an int *** pointer * * int xal : 1st dimension size of the pointer to allocate * int yal : 2nd dimension size of the pointer to allocate * int 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; } /* * int **** allocqint (int wal, int xal, int yal, int zal) * * Usage: allocate an int **** pointer * * int wal : 1st dimension size of the pointer to allocate * int xal : 2nd dimension size of the pointer to allocate * int yal : 3rd dimension size of the pointer to allocate * int 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; } /* * float * allocfloat (int val) * * Usage: allocate a float * pointer * * int val : size of the pointer to allocate */ float * allocfloat (int val) { float * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /* * float ** allocdfloat (int xal, int yal) * * Usage: allocate a float ** pointer * * int wal : 1st dimension size of the pointer to allocate * int xal : 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; } /* * float *** alloctfloat (int xal, int yal, int zal) * * Usage: allocate a float *** pointer * * int xal : 1st dimension size of the pointer to allocate * int yal : 2nd dimension size of the pointer to allocate * int 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; } /* * double * allocdouble (int val) * * Usage: allocate a double * pointer * * int val : size of the pointer to allocate */ double * allocdouble (int val) { double * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /* * double ** allocddouble (int xal, int yal) * * Usage: allocate a double ** pointer * * int xal : 1st dimension size of the pointer to allocate * int 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; } /* * double *** alloctdouble (int xal, int yal, int zal) * * Usage: allocate a double *** pointer * * int xal : 1st dimension size of the pointer to allocate * int yal : 2nd dimension size of the pointer to allocate * int 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; } /* * double **** allocqdouble (int wal, int xal, int yal, int zal) * * Usage: allocate a double **** pointer * * int wal : 1st dimension size of the pointer to allocate * int xal : 2nd dimension size of the pointer to allocate * int yal : 3rd dimension size of the pointer to allocate * int 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; } /* * gchar ** duplicate_strings (int num, gchar ** old_val) * * Usage: copy a list of strings * * int num : number of elements in the list * gchar ** 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 */ /* * This header file: 'global.h' * * Contains: - Global variable definitions - 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" typedef struct { int a; int b; } dint; typedef struct { int a; int b; int c; } tint; typedef struct { int a; int b; int c; int d; } qint; typedef struct { float red; float green; float blue; float alpha; } ColRGBA; typedef struct { int species; // The number of chemical species // 0 = tot // 1 = partial // 2 = fragments // 3 = molecules // > 3 = rings // 9 = chains int totcoord[10]; int * ntg[10]; int ** geolist[10]; // The matching table for geometries int *** partial_geo; // List of partial geometries int cmin; // Min. coordination int cmax; // Maximum coordination } coord_info; #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 { GTK_RELIEF_NORMAL = 0, GTK_RELIEF_HALF = 1, GTK_RELIEF_NONE = 2 }; enum ShadowStyle { GTK_SHADOW_NONE = 0, GTK_SHADOW_IN = 1, GTK_SHADOW_OUT = 2, GTK_SHADOW_ETCHED_IN = 3, GTK_SHADOW_ETCHED_OUT = 4 }; #define BSEP 3 #else #define BSEP 0 #endif enum ContainerType { CONTAINER_WIN = 0, CONTAINER_SCR = 1, CONTAINER_VIE = 2, CONTAINER_BUT = 3, CONTAINER_FRA = 4, CONTAINER_EXP = 5 }; enum ImageFormats { IMG_NONE = 0, IMG_PIXBUF = 1, IMG_SURFACE = 2, IMG_FILE = 3, IMG_STOCK = 4 }; #define IODEBUG FALSE #define MAXDATC 8 #define MAXDATA 21 #define ATOM_LIMIT 100000 #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 #define CHEM_Z 0 #define CHEM_M 1 #define CHEM_R 2 #define CHEM_N 3 #define CHEM_X 4 #define NCFORMATS 11 #define NDOTS 8 #define CHEM_PARAMS 5 #define NCALCS 12 #define NGRAPHS 10 #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 * calc_img[NCALCS-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 * file_ext[NCFORMATS+1]; extern char * text_styles[OGL_STYLES]; extern char * text_filled[FILLED_STYLES]; 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 struct insert_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 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 struct line_node { gchar * line; //[LINE_SIZE]; struct line_node * next; struct line_node * prev; }; typedef struct { int traj; int natomes; int steps; int nrec; int nspec; double * z; int * nsps; double ** coord; int * lot; int setting; cell_info lattice; gchar * info; // The following is only used for CIF files int * wyckoff; double * occupancy; int ** occupied; int * multi; int stolab; int * smislab; int tolab; int * mislab; int * lmislab; gchar ** label; gboolean cartesian; } coord_file; typedef struct { int natomes; double ** coord; int * lot; int * wyckoff; double * occupancy; int ** occupied; int * multi; int spec; gchar ** label; double * z; int setting; gboolean cartesian; cell_info lattice; gchar * info; } cif_file; typedef struct { GtkWidget * a; GtkWidget * b; } dwidget; typedef struct { gint start_x; gint start_y; gint time; gboolean MouseIsDown; } MouseState; typedef struct { MouseState mouseState; tint * id; } CurveState; typedef struct { 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 ? } DataLayout; struct cextra { tint id; DataLayout * layout; struct cextra * prev; struct cextra * next; }; typedef struct { int extras; // Total number of data sets struct cextra * first; struct cextra * last; } ExtraSets; typedef struct { int cid; 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 axis title int axis_title_y[2]; // Position of the 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/Hide 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; int bshift; gboolean displayed; char * cfile; gchar * path; // For the toolbox int action_id; // Unique Id to identify actions CurveState state; GSimpleActionGroup * action_group; } curve; struct atom { int id; // The id in the model int sp; // The chemical species double x, y, z; // The coordinates int numv; // The number of neighbors int * vois; // The list of neighbors // 0 = Total coordination // 1 = Partial coordination // 2 = Fragment // 3 = Molecule // 4 = Field object id int coord[5]; // Coordination information // 0 = All // 1 = King's // 2 = Guttman's // 3 = Primitive // 4 = Strong int ** rings[5]; // Rings statistics information int ** chain; // Chain statistics information int style; // Rendering style if not global 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) ? struct atom * prev; struct atom * next; }; 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 struct { int * mol_by_step; // Num of mol by steps struct molecule ** mols; // List of molecules by steps } model; typedef struct { 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; 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; } classical_field; 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; struct thermostat * next; struct thermostat * prev; }; 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; struct dummy_atom * next; struct dummy_atom * prev; }; typedef struct { int calc_type; int restart[10]; int thermostats; struct thermostat * ions_thermostat; struct thermostat * elec_thermostat; int fixat; int * fixlist; int ** fixcoord; int dummies; struct dummy_atom * dummy; double default_opts[17]; double calc_opts[24]; int ** pp; gchar * info; } cpmd; typedef struct { int input_type; double opts[42]; double extra_opts[3][4]; int thermostats; struct thermostat * ions_thermostat; int fixat[2]; int * fixlist[2]; int ** fixcoord[2]; gchar * files[5]; gchar *** spec_files; int ** spec_data; gchar * info; } cp2k; typedef struct { gchar * lab; gchar * name; int Z; float M; /* float r_cov; float r_vdw; float r_ion; float r_cry; float b_coh; */ /* int s; int p; int d; int f; */ } element_data; typedef struct { // 0 = Z, 1 = Mass, 2 = Radius, 3 = Neutrons, 4 = X-rays double ** chem_prop; int * nsps; int * formula; char ** label; char ** element; double ** cutoffs; double grtotcutoff; } chemical_data; struct insertion { gchar * type; gchar * object; double Z; int ats; }; typedef struct { double Z; int natomes; } sp_in_mol ; struct project { int id; char * name; char * projfile; char * coordfile; char * bondfile; gboolean newproj; gboolean run; gboolean trun; gboolean runok[NGRAPHS]; gboolean initok[NGRAPHS]; gboolean visok[NGRAPHS]; gboolean dmtx; gboolean initgl; int tfile; 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 int numwid; int xcor; // S(q) X-rays calculation f(q) or approximated int readata; gboolean tovalidate; gboolean runc[3]; // Bonds, Angles, Mol int numc[NGRAPHS]; int num_delta[NGRAPHS]; // gr, sq, sk, gftt, bd, an, frag-mol, ch, sp, msd double calc_time[NGRAPHS]; // 0 = Search type, 1 = NUMA int rsearch[2]; // First col : search type (up to chains stat). Second col: search info // 0 = Initnode, 1 = RMAX, 2 = ABAB, 3 = Homo, 4 = , 5 = Done ? int rsparam[5][6]; double rsdata[5][5]; int csearch; // CNUMA // 0 = Initnode, 1 = AAAA, 2 = ABAB, 3 = Homo, 4 = 1221, 5 = RMAX, 6 = Done ? int csparam[7]; double csdata[2]; double delta[NGRAPHS]; double min[NGRAPHS]; double max[NGRAPHS]; double fact[4]; double sk_advanced[2]; chemical_data * chemistry; coord_info * coord; cell_info cell; glwin * modelgl; model * modelfc; gboolean was_moved; struct atom ** atoms; int nmols; int tmp_pixels[2]; GtkTextBuffer * text_buffer[NITEMS]; tint * idcc[NGRAPHS]; curve ** curves[NGRAPHS]; classical_field * force_field[2]; cpmd * cpmd_input[2]; cp2k * cp2k_input[2]; #ifdef DEBUG GtkWidget * pix_tab[3]; GtkWidget * pix_box; int pix[3]; int ** pixels; int actif_pix; #endif struct project * next; struct project * prev; }; typedef struct { struct project * first; struct project * last; } workspace; 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 struct 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 struct project * active_project; extern struct project * opengl_project; extern element_data periodic_table_info[]; extern struct project * get_project_by_id (int p); extern void opengl_project_changed (int id); extern gboolean in_md_shaders (struct project * this_proj, int id); extern void recreate_all_shaders (glwin * view); extern gboolean is_atom_win_active (glwin * view); 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.12/src/gui/000077500000000000000000000000001450232132300150215ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/gui/bdcall.c000066400000000000000000001140311450232132300164060ustar00rootroot00000000000000/* 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 */ /* * This file: 'bdcall.c' * * Contains: * - The callbacks for the bond properties calculation dialog * * List of subroutines: 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 (struct 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], int listgsa[totgsa]); void update_angle_view (struct project * this_proj); void envout_ (int * sid, int * totgsa, int numgsa[* totgsa], int listegsa[* 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 (struct project * this_proj); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /* * int * save_color_map (glwin * view) * * Usage: * * glwin * view : */ 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; } /* * void restore_color_map (glwin * view, int * colm) * * Usage: * * glwin * view : * int * colm : */ 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 } /* * void recup_dmin_dmax_ (double * min, double * max) * * Usage: * * double * min : * double * max : */ void recup_dmin_dmax_ (double * min, double * max) { active_project -> min[BD] = * min; active_project -> max[BD] = * max; } /* * void initbd () * * Usage: */ 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; } /* * void initang () * * Usage: */ 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; } /* * void initcutoffs (chemical_data * chem, int species) * * Usage: * * chemical_data * chem : * int 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); } } /* * void cutoffsend () * * Usage: * * void : */ 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); } /* * void prep_ogl_bonds () * * Usage: * * : */ 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; } /* * gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) * * Usage: * * GtkWidget * widg : * int calc : * int up_ngb : */ 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; } /* * void update_ang_view (struct project * this_proj) * * Usage: * * struct project * this_proj : the target project */ void update_ang_view (struct 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]); } /* * void update_glwin_after_bonds (int bonding, int * colm) * * Usage: * * int bonding : * int * colm : */ 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); } /* * G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) * * Usage: * * GtkWidget * widg : * gpointer data : */ 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 the 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 molecules and isolated fragments", 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; /* * void coordination_info (int sp, double sac, double ssac[active_project -> nspec]) * * Usage: * * int sp : * double sac : * double ssac[active_project -> nspec] : */ 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); } } /* * void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa) * * Usage: * * int * sid : * double * sac : * double ssac[active_project -> nspec] : * double ssac[active_project -> nspec] : */ 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]); }*/ /* * void env_info (int sp, int totgsa, int numgsa[totgsa], int listgsa[totgsa]) * * Usage: * * int sp : * int totgsa : * int numgsa[totgsa] : * int numgsa[totgsa] : */ void env_info (int sp, int totgsa, int numgsa[totgsa], int listgsa[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]); } } /* * void update_angle_view (struct project * this_proj) * * Usage: * * struct project * this_proj : the target project */ void update_angle_view (struct 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]); } /* * void envout_ (int * sid, int * totgsa, int numgsa[* totgsa], int listegsa[* totgsa]) * * Usage: * * int * sid : * int * totgsa : * int numgsa[* totgsa] : * int numgsa[* totgsa] : */ void envout_ (int * sid, int * totgsa, int numgsa[* totgsa], int listegsa[* totgsa]) { /* Send info for OpenGL */ if (bonds_update) env_info (* sid, * totgsa, numgsa, listegsa); } 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.12/src/gui/calc_menu.c000066400000000000000000001375611450232132300171300ustar00rootroot00000000000000/* 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 */ /* * This file: 'calc_menu.c' * * Contains: * - The creation of the calculation dialogs * * List of subroutines: 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); GtkWidget * calc_win = NULL; GtkWidget * ba_entry[2]; int search_type; /* * GtkWidget * calc_window (int i) * * Usage: create a calculation window * * int 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; } /* * G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) * * Usage: set a maximum value * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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]; /* * G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) * * Usage: set the number of delta between data points * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) * * Usage: change time units * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void calc_sph (GtkWidget * vbox) * * Usage: creation of the spherical harmonics calculation widgets * * GtkWidget * 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); } /* * void calc_msd (GtkWidget * vbox) * * Usage: creation of the MSD calculation widgets * * GtkWidget * 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); } } } /* * G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) * * Usage: set the rings/chains statistics parameter NUMA * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } /* * GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) * * Usage: create a combo box for the rings statistics calculation * * gchar * str : Label of the combo box * int num : Number of values to insert in the combo box * gchar * list_item[num] : Text data to insert in the combo boc * int 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 /* * G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) * * Usage: toggle a rings statistics calculation parameter * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) * * Usage: toggle a rings statistics calculation parameter * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; } } /* * void calc_rings (GtkWidget * vbox) * * Usage: creation of the rings statistics calculation widgets * * GtkWidget * 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 /* * G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: bond properties detailed saving: run the dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) * * Usage: bond properties detailed saving: run the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) * * Usage: bond properties detailed saving and prepare the dialog * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) #else /* * G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) * * Usage: activate bond properties detailed saving and prepare the dialog * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; } } } /* * gboolean test_gr (int gr) * * Usage: is it safe to compute g(r) ? * * int 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; } } /* * gboolean test_sq (int sq) * * Usage: is it safe to compute s(q) ? * * int 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; } } /* * gboolean test_bonds () * * Usage: 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; } } /* * gboolean test_rings () * * Usage: 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; } /* * gboolean test_msd () * * Usage: 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; } } } /* * gboolean test_sph () * * Usage: 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; } } /* * void calc_bonds (GtkWidget * vbox) * * Usage: creation of the bond calculation widgets * * GtkWidget * 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); } /* * GtkWidget * hbox_note (int i, double val) * * Usage: foot note message box with some parameters * * int i : message id * double 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; /* * G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) * * Usage: open expander actions * * GtkWidget * exp : the GtkWidget sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) * * Usage: set a s(k) calculation parameter * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) * * Usage: set the Gaussian smoothing factor * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) * * Usage: show the curve toolboxes * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) * * Usage: smooth g(r), s(q), s(k) or g(k) * * GtkButton * button : the button sending the signal * gpointer 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); } } /* * void calc_gr_sq (GtkWidget * box, int id) * * Usage: creation of the g(r) / s(q) / s(k) / g(k) calculation widgets * * GtkWidget * box : GtkWidget that will receive the data * int 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); } /* * G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) * * Usage: create a calculation dialog: run the dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; } } /* * G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) * * Usage: create a calculation dialog - prepare the dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/callbacks.c000066400000000000000000001354631450232132300171200ustar00rootroot00000000000000/* 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 */ /* * This file: 'callbacks.c' * * Contains: * - General callbacks - Open and close files * * List of subroutines: 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); 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 ** 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); /* * void quit_gtk () * * Usage: Leave the application */ void quit_gtk () { profree_ (); g_application_quit (G_APPLICATION(AtomesApp)); } /* * G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) * * Usage: close the active workspace * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; /* * int open_save (FILE * fp, int i, int pid, int aid, int npi, gchar * pfile) * * Usage: open or save project file * * FILE * fp : the file pointer * int i : 0 = read, 1 = write * int pid : the project id * int aid : the active project id * int npi : total number of projects * gchar * 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; } /* * int open_save_workspace (FILE * fp, int act) * * Usage: open or save the active workspace * * FILE * fp : the file to read or write * int 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; } } /* * void open_this_proj (gpointer data, gpointer user_data) * * Usage: Open many projects, one at a time * * gpointer data : * gpointer 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 /* * G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: open or save an atomes file - running the dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) * * Usage: open or save an atomes file - running the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } } /* * G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) * * Usage: open or save an atomes file - prepare the dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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}; struct 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:; } /* * G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) * * Usage: open or save, choosing a file name * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; } /* * void run_project () * * Usage: 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; } /* * void apply_project (gboolean showtools) * * Usage: get project ready for calculation and initialize the OpenGL window * * gboolean 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); } /* * void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) * * Usage: open an ISAACS XML file * * gchar * profile : the XML file name * int ptoc : the previous active project * gboolean 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 /* * G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: open or write ISAACS XML file - running the dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) * * Usage: open or write ISAACS XML file - running the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } /* * G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) * * Usage: open or write ISAACS XML file - prepare the dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 (); } /* * void to_read_pos () * * Usage: 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; /* * void check_read_sa () * * Usage: 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); } } /* * void update_sa_info (int sid) * * Usage: reading CPMD/VASP trajectory, update chemical species info * * int 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; } /* * G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) * * Usage: reading CPMD/VASP trajectory, set the number of chemical species * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 (); } /* * G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) * * Usage: reading CPMD/VASP trajectory, change the active species * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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)); } /* * void prepare_sp_box () * * Usage: 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); } /* * G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) * * Usage: reading CPMD/VASP trajectory, changing number of atomes or species * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; /* * int prep_chem_data () * * Usage: 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; } /* * G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: reading CPMD/VASP trajectory: run the dialog * * GtkDialog * dialog : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * int to_read_trj_or_vas (int ff) * * Usage: reading CPMD/VASP trajectory - prepare the dialog * * int 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; } /* * void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) * * Usage: update cell parameters from the data in the PDB file * * float * a : a * float * b : b * float * c : c * float * alp : alpha * float * bet : beta * float * 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 /* * G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: * * GtkNativeDialog * info : read NPT data associated with atomic coordinates: run the dialog * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) * * Usage: read NPT data associated with atomic coordinates: run the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 } /* * int read_npt_data () * * Usage: 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); } /* * int open_coordinate_file (int id) * * Usage: try to open coordinate file, type is based of id * * int 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); switch (id) { case 0: result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); break; case 1: 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: result = open_coord_file (active_project -> coordfile, id); // result = read_c3d_ (active_project -> coordfile, & length); break; case 3: result = to_read_trj_or_vas (id); break; case 4: result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 5: result = to_read_trj_or_vas (id); break; case 6: result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 7: // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 8: // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 9: result = open_coord_file (active_project -> coordfile, 9); break; case 10: result = open_coord_file (active_project -> coordfile, 10); 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) { show_error (this_reader -> info, 0, MainWindow); } 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 -> mislab) g_free (this_reader -> mislab); if (this_reader -> smislab) g_free (this_reader -> smislab); if (this_reader -> lmislab) g_free (this_reader -> lmislab); if (this_reader -> coord) g_free (this_reader -> coord); if (this_reader -> lot) g_free (this_reader -> lot); 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); 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; /* * void open_this_coordinate_file (int format) * * Usage: open coordinate file format, if successful add to workspace * * int format : the format of the file that contains the atomic coordinates */ void open_this_coordinate_file (int format) { 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; gchar * str = g_path_get_basename (active_project -> coordfile); active_project -> name = g_strdup_printf ("%s", substitute_string (str, g_strdup_printf (".%s", file_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) 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 && 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 (); } else { to_close_this_project (pactive, active_project); } } #ifdef GTK4 /* * G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: export or import atomic coordinates: run dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) * * Usage: export or import atomic coordinates: run dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } 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); 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; } } /* * G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) * * Usage: export or import atomic coordinates: prepare dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/callbacks.h000066400000000000000000000036451450232132300171210ustar00rootroot00000000000000/* 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 */ /* * This header file: 'callbacks.h' * * Contains: */ #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); 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.12/src/gui/chainscall.c000066400000000000000000000303151450232132300172700ustar00rootroot00000000000000/* 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 */ /* * This file: 'chainscall.c' * * Contains: * - The callbacks for the chains statistics calculation dialog * * List of subroutines: void initchn (); void update_chains_menus (glwin * view); void update_chains_view (struct 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 (struct project * this_proj); /* * void initchn () * * Usage: 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 /* * void update_chains_menus (glwin * view) * * Usage: update the chains statistics menus * * glwin * 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 /* * void update_chains_view (struct project * this_proj) * * Usage: update the chains statistics text view after the calculation * * struct project * this_proj : the target project */ void update_chains_view (struct 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); } } /* * void clean_chains_data (glwin * view) * * Usage: cleaning the OpenGL data related to chain statistics * * glwin * view : the gliwn to clean the data from */ void clean_chains_data (glwin * view) { struct 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; } } } } /* * G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) * * Usage: compute chains statistics * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 } /* * void save_chains_data_ (int * taille, double ectrc[* taille], double * rpstep, double * ectrpst) * * Usage: get chains statistics results form Fortran90 * * int * taille : Number of data points * double ectrc[* taille] : Results * double * rpstep : Chains per MD step * double * 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.12/src/gui/edit_menu.c000066400000000000000000000626671450232132300171570ustar00rootroot00000000000000/* 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 */ /* * This file: 'edit_menu.c' * * Contains: * - The creation of the edition dialogs * * List of subroutines: 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 (struct project * this_proj); extern void cut_box (struct project * this_proj, GtkWidget * vbox); /* * G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) * * Usage: update lattice parameters * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) * * Usage: use PBC ? * * GtkCheckButton * Button : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) #else /* * G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) * * Usage: use PBC ? * * GtkToggleButton * Button : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) * * Usage: use fractional coordinates * * GtkCheckButton * Button : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) #else /* * G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) * * Usage: use fractional coordinates * * GtkToggleButton * Button : the GtkToggleButton sending the signal * gpointer 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); }*/ } /* * G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) * * Usage: update lattice vector component * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) * * Usage: lattice vectors: run the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) * * Usage: lattice vectors - prepare the dialog * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * void edit_box (GtkWidget * vbox) * * Usage: creation of the edit cell widgets * * GtkWidget * 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); } /* * G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) * * Usage: update chemical property * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) * * Usage: change the chemical species * * GtkComboBox * combo : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) * * Usage: use X ray diffraction q coorection * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) * * Usage: use X ray diffraction q coorection * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * void edit_chem (GtkWidget * vbox) * * Usage: creation of the edit chemical properties widgets * * GtkWidget * 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); } /* * gboolean test_vol (double box[2][3], double vect[3][3]) * * Usage: is the cell properly described to use PBC ? * * double box[2][3] : lattice parameters * double vect[2][3] : 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; } /* * gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) * * Usage: is the cell properly described ? * * int pbc : * int frac : fractional coordinates * double box[2][3] : lattice parameters * double vect[2][3] : 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); } } /* * void init_box_calc () * * Usage: 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; } /* * void prep_box (int id) * * Usage: prepare the project depending on the changes to the MD box * * int 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; } } } /* * void test_chem () * * Usage: 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; } /* * gboolean test_cutoffs () * * Usage: 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; } /* * void edit_bonds (GtkWidget * vbox) * * Usage: creation of the edit bond cutoff widgets * * GtkWidget * 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); } /* * G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) * * Usage: create an edition dialog: run the dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) * * Usage: create an edition dialog - prepare the dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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.12/src/gui/grcall.c000066400000000000000000000305771450232132300164450ustar00rootroot00000000000000/* 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 */ /* * This file: 'grcall.c' * * Contains: * - The callbacks for the g(r)/g(k) calculation dialog * * List of subroutines: int recup_data_ (int * cd, int * rd); void initgr (int r); void update_rdf_view (struct 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; /* * void initgr (int r) * * Usage: initialize the curve widgets for the g(r)/g(k) * * int r : GR = real space, GK = FFT * int s : */ 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; } /* * void update_rdf_view (struct project * this_proj, int rdf) * * Usage: update the project text view for the g(r)/g(k) calculation * * struct project * this_proj : the target project * int rdf : the calculation GR / GK */ void update_rdf_view (struct 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]); } /* * G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) * * Usage: compute g(r) * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]) * * Usage: bond cutoff from Fortran90 * * int * nc : number of species * double * totc : total cutoff * double partc[* nc][* nc] : 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 /* * G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) * * Usage: Fitting bond cutoff or data ? * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button) * * Usage: Fitting bond cutoff or data ? * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; } } /* * int recup_data_ (int * cd, int * rd) * * Usage: Sending data back to Fortran90 * * int * cd : the curve id * int * 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]); } } /* * G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) * * Usage: compute g(k) * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/gtk-misc.c000066400000000000000000002343201450232132300167070ustar00rootroot00000000000000/* 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 */ /* * This file: 'gtk-misc.c' * * Contains: * - GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code when ever I need to use a GTK function that changed between v3 and v4, I use an home made function in this file, and deal then here with the potential GTK versions issues. * * List of subroutines: 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); GMenuItem * create_menu_item (gboolean add_mnemo, gchar * name, gchar * action); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); 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" /* * void show_the_widgets (GtkWidget * widg) * * Usage: show GtkWidget * * GtkWidget * widg : the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_show (widg); #else gtk_widget_show_all (widg); #endif } /* * void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) * * Usage: Set sensitivity for a GtkWidget, ensuring it is a GtkWidget * * GtkWidget * widg : the GtkWidget * gboolean sensitive : Sensitivity */ void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_set_sensitive (widg, sensitive); } } } /* * void add_container_child (int type, GtkWidget * widg, GtkWidget * child) * * Usage: Add a GtkWidget into another GtkWidget * * int type : GTK4 only: the type of container * GtkWidget * widg : the container Gtkwidget * GtkWidget * 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 } /* * void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) * * Usage: Add a GtkWidget in a GtkBox at the end position * * GtkWidget * widg : the GtkBox * GtkWidget * child : the GtkWidget to add * gboolean expand : GTK3 only: expandable * gboolean fill : GTK3 only: fill * int 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 } /* * void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) * * Usage: Add a GtkWidget in a GtkBox at the initial position * * GtkWidget * widg : the GtkBox * GtkWidget * child : the GtkWidget to add * gboolean expand : GTK3 only: expandable * gboolean fill : GTK3 only: fill * int 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 /* * GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) * * Usage: Adding a GtkMenuItem with a submenu and setting the sensitivity * * gchar * name : Name of the menu item * gboolean active : Sensitivity * GtkWidget * 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 /* * GtkWidget * new_gtk_window () * * Usage: 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 /* * 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) * * Usage: Adding GTK4 mouse, and keyboard events to a GtkWidget * * GtkWidget * widget : the GtkWidget * gchar * cp_name : Name of the click pressed event * GCallback cp_handler : Click pressed callback * gpointer cp_data : Click pressed data pointer * gchar * cr_name : Name of the click released event * GCallback cr_handler : Click released callback * gpointer cr_data : Click released data pointer * gchar * kp_name : Name of the key pressed event * GCallback kp_handler : Key pressed callback * gpointer kp_data : Key pressed data pointer * gchar * mo_name : Name of the mouse motion event * GCallback mo_handler : Mouse motion callback * gpointer mo_data : Mouse motion data pointer * gchar * sc_name : Name of the mouse scroll event * GCallback sc_handler : Mouse scroll callback * gpointer 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 /* * GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) * * Usage: create a new GtkWindow * * gchar * str : Title * GtkWidget * parent : Parent GtkWidget (if any) * gboolean modal : Modal (TRUE/FALSE) * gboolean 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 /* * void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) * * Usage: run a GTK4 GtkNativeDialog (used to read files) * * GtkNativeDialog * dial : the GtkNativeDialog * GCallback handler : the callback * gpointer 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 /* * void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) * * Usage: run a GTK (3 and 4) basic GtkDialog * * GtkWidget * dial : the GtkDialog * GCallback handler : the callback * gpointer 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]); } /* * GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) * * Usage: Create a new dialog modal window * * gchar * str : Title * GtkWindow * 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; } /* * GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) * * Usage: create a modal (cannot be ignored) message window * * gchar * message : the message * gchar * title : the title * GtkMessageType mtype : the message type * GtkButtonsType buttons : the type of closing button to add * GtkWidget * 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; } /* * GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) * * Usage: create a dialog modal offering a choice to apply something or not * * gchar * title : the message * GtkWidget * parent : the parent window, if any * gboolean 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; } /* * void resize_this_window (GtkWidget * window, int x, int y) * * Usage: resize this GtkWindow * * GtkWidget * window : the GtkWidget to resize * int x : the x size * int 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 } /* * const gchar * entry_get_text (GtkEntry * entry) * * Usage: get the text in a GtkEntry * * GtkEntry * 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 } /* * void update_entry_int (GtkEntry * entry, int intval) * * Usage: update the content of a GtkEntry as int * * GtkEntry * entry : the GtkEntry * int 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); } /* * void update_entry_double (GtkEntry * entry, double doubleval) * * Usage: update the content of a GtkEntry as double * * GtkEntry * entry : the GtkEntry * int 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); } /* * void update_entry_long_double (GtkEntry * entry, double doubleval) * * Usage: update the content of a GtkEntry as long double * * GtkEntry * entry : the GtkEntry * int 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 } /* * void update_entry_text (GtkEntry * entry, gchar * text) * * Usage: update the content of a GtkEntry as string * * GtkEntry * entry : the GtkEntry * gchar * 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 } /* * void text_view_set_monospace (GtkWidget * view) * * Usage: set the font of a GtkTextView as monospace * * GtkWidget * view : the GtkTextView */ void text_view_set_monospace (GtkWidget * view) { gtk_text_view_set_monospace (GTK_TEXT_VIEW(view), TRUE); } /* * void gtk_label_align (GtkWidget * lab, float ax, float ay) * * Usage: set text alignment in a GtkLabel * * GtkWidget * lab : the GtkLabel * float ax : the x alignment * float 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); } /* * gboolean is_the_widget_visible (GtkWidget * widg) * * Usage: test if a GtkWidget exist, then return if it is visible or not * * GtkWidget * widg : the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /* * GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) * * Usage: create an horizontal scale GtkWidget * * float min : Min value for the h scale * float max : Max value for the h scale * float delta : the step on the h scale * float val : the value to position to set on the h scale * int pos : the location where the value is on display * int round : the rounding digit for the value on display * int size : the x size of the GtkWdiget * GCallback handler : the callback to move the h scale * GCallback scroll_handler : the callback on mouse scroll * gpointer 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; } /* * GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) * * Usage: create an vertical scale GtkWidget * * float min : Min value for the v scale * float max : Max value for the v scale * float delta : the step on the v scale * float val : the value to position to set on the h scale * int pos : the location where the value is on display * int round : the rounding digit for the value on display * int size : the x size of the GtkWdiget * GCallback handler : the callback to move the v scale * GCallback scroll_handler : the callback on mouse scroll * gpointer 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; } /* * GtkWidget * create_vbox (int spacing) * * Usage: create a GtkBox with vertical orientation * * int spacing : spacing between elements */ GtkWidget * create_vbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing); } /* * GtkWidget * create_hbox (int spacing) * * Usage: create a GtkBox with horizontal orientation * * int spacing : spacing between elements */ GtkWidget * create_hbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing); } /* * GtkWidget * dialog_get_content_area (GtkWidget * widg) * * Usage: prepare GtkWidget to insert content in a GtkDialog window * * GtkWidget * 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 } /* * void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) * * Usage: Add a GtkWidget in a GtkLayout * * GtkWidget * layout : the GtkLayout * GtkWidget * child : the GtkWidget to insert * int x_pos : the x position to insert at * int 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 } /* * GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) * * Usage: Insert a vertical GtkBox in a GtkLatout then send back the GtkBox * * GtkWidget * layout : the GtkLayout * int size_x : the x size of the box * int 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; } /* * GtkWidget * create_layout (int x, int y) * * Usage: create a GtkLayout / GtkFixed widget * * int x : the x size of the widget * int 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; } /* * void combo_text_append (GtkWidget * combo, gchar * text) * * Usage: append text in GtkComboBox widget * * GtkWidget * combo : the GtkWidget * gchar * 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); } /* * void combo_text_prepend (GtkWidget * combo, gchar * text) * * Usage: prepend text in GtkComboBox widget * * GtkWidget * combo : the GtkWidget * gchar * 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); } /* * GtkWidget * create_combo () * * Usage: create a GtkCombox widget, note deprecated in GTK4 */ GtkWidget * create_combo () { return gtk_combo_box_text_new (); } /* * void setup_text_tags (GtkTextBuffer * buffer) * * Usage: prepare the avialable text tags for the GtkTextBuffer * * GtkTextBuffer * 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); } /* * GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) * * Usage: create a GtkTextBuffer * * GCallback handler : the callback on buffer changed * gpointer data : the associated data pointer * gchar * 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; } /* * GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) * * Usage: create a GtkTextView and display some text * * int dimx : the x size of the GtkTextView * int dimy : the y size of the GtkTextView * int edit : Is the text view editable (1/0) * int mono : Use monospace font (1/0) * GCallback handler : the callback on buffer changed * gpointer data : the associated data pointer * gchar * 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; } /* * static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) * * Usage: convert a cairo surface to pixbuf * * cairo_surface_t * surf : the cairo surface to convert * GdkPixbuf * pix : the resulting GdkPixBuf * int src_x : Shift on x, if any * int src_y : Shift on y, if any * int width : Image width * int 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; } } /* * GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) * * Usage: convert cairo surface to GdkPixbuf * * cairo_surface_t * 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 /* * G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) * * Usage: GtkEntry activate signal managment * * GtkWidget * widg : the GtkWidget sending the signal * GdkEventFocus * event : the associated focus event * gpointer 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 /* * G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) * * Usage: GtkEntry activate signal managment * * GtkEventControllerFocus * focus : Focus event controller * gpointer 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 /* * GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) * * Usage: Create a GtkEntry * * GCallback handler : the callback * int dim : the x size * int cdim : the maximum number of character to display * gboolean key_release : Use release event (1/0) * gpointer 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; } /* * GtkWidget * stock_image (const gchar * stock_id) * * Usage: create a GtkImage for the Gtk database * * const gchar * 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 /* * GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) * * Usage: create a GtkMenuItem and set mnemonic * * gboolean add_mnemo : Use mnemonic (1/0) * gchar * 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); } /* * GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) * * Usage: create a GtkMenuItem using a GtkWidget as label * * GtkWidget * widg : the GtkWidget to use * gboolean check : Create a check menu item (1/0) * gboolean radio : Create a radio menu item (1/0) * gboolean 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, ... ) */ /* * GtkWidget * create_image_from_data (int format, gpointer item_image) * * Usage: create Gtk image for data * * int format : Image format * gpointer 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 /* * 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) * * Usage: create a GT3 menu item, and insert it in a menu, if any * * GtkWidget * menu : the menu to insert the menu item in * gchar * name : the name of the menu item * int icon_format : the image format of the icon for the menu item * gpointer item_icon : the data for the image of the icon * GCallback handler : the callback for the menu item * gpointer data : the associated data pointer * gboolean accel : Keyboard short cut -1/0) * guint key : the key to press * GdkModifierType mod : the modifier in any (Ctrl, Alt ...) * gboolean check : Create a check menu item (1/0) * gboolean radio : Create a radio menu item (1/0) * gboolean 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; } /* * GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) * * Usage: short cut to create and insert a menu item with the "Advanced" text and a stock icon * * GtkWidget * menu : the menu to insert the menu item * GCallback handler : the callback for the menu item * gpointer data : the associated data pointer * gboolean accel : Keyboard short cut -1/0) * guint key : the key to press * GdkModifierType 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); } /* * void add_menu_separator (GtkWidget * menu) * * Usage: add sepator in a menu * * GtkWidget * 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) * * Usage: create a GtkLabel with pango markup * * gchar * text : Message to display * int dimx : y size for the widget * int dimy : y size for the widget * float ax : x alignment * float 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; } /* * ColRGBA * duplicate_color (int num, ColRGBA * col) * * Usage: duplicate a ColRGBA pointer * * int num : Size of the pointer * ColRGBA * 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; } /* * GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) * * Usage: create a scroll window * * GtkWidget * box : the box to insert the scroll window in, if any * int dimx : the x size of the widget * int dimy : the x size of the widget * int 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; } /* * GtkWidget * create_expander (gchar * name, gchar * file_img) * * Usage: create GtkExpander * * gchar * name : Name of the expander tab * gchar * 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; } /* * void provide_gtk_css (gchar * css) * * Usage: create a css provider based on the css data * * gchar * 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); } /* * GtkWidget * destroy_this_widget (GtkWidget * widg) * * Usage: destroy a GtkWidget * * GtkWidget * 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; } /* * void destroy_this_dialog (GtkDialog * dialog) * * Usage: destroy a GtkDialog * * GtkDialog * 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 --; } /* * void destroy_this_native_dialog (GtkNativeDialog * dialog) * * Usage: destroy a GtkNativeDialog * * GtkNativeDialog * 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 --; } /* * G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) * * Usage: to destroy a GtkDialog when the dialog emit the closing signal * * GtkDialog * dialog : the GtkDialog to destroy * gint response_id : the response id * gpointer 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 /* * GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) * * Usage: 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 /* * GList * file_chooser_get_file_names (GtkFileChooser * chooser) * * Usage: 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 /* * gchar * file_chooser_get_file_name (GtkFileChooser * chooser) * * Usage: get a file name from a GtkFileChooser (single file selected) * * GtkFileChooser * 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 } /* * gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) * * Usage: get the current folder for a GtkFileChooser * * GtkFileChooser * 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 } /* * gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) * * Usage: set file name in a GtkFilechooser * * GtkFileChooser * chooser : the GtkFilechooser * gchar * 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; } /* * void file_chooser_set_current_folder (GtkFileChooser * chooser) * * Usage: set current folder in a GtkFilechooser * * GtkFileChooser * 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 /* * GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) * * Usage: create a GtkFileChooser, utility to select file(s) * * const gchar * title : the title of the window * GtkWindow * parent : the parent window, if any * GtkFileChooserAction act : the action to perform (read or write) * const gchar * 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 /* * GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) * * Usage: create a GtkFileChooser, utility to select file(s) * * const gchar * title : the title of the window * GtkWindow * parent : the parent window, if any * GtkFileChooserAction act : the action to perform (read or write) * const gchar * 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 /* * ColRGBA get_button_color (GtkColorChooser * colob) * * Usage: get the ColRGBA color from a GtkColorChooser button * * GtkColorChooser * colob : the GtkColorChooser button */ ColRGBA get_button_color (GtkColorChooser * colob) { GdkRGBA col; gtk_color_chooser_get_rgba (colob, & col); return gdkrgba_to_rgba (col); } /* * ColRGBA get_window_color (GtkWidget * color_win) * * Usage: get the ColRGBA color from a color selection window * * GtkWidget * 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); } /* * void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) * * Usage: set the color of a color selection window * * GtkWidget * color_win : the color selection window * ColRGBA 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 /* * void pop_menu_at_pointer (GtkWidget * pop, double x, double y) * * Usage: popup a popover menu at pointer location * * GtkWidget * pop : the menu to popup * double x : x position * double 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 /* * void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) * * Usage: popup a menu at pointer location * * GtkWidget * widg : the menu to popup * GdkEvent * 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 /* * GtkWidget * get_top_level (GtkWidget * widg) * * Usage: get the top level container, window, of a widget * * GtkWidget * 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 /* * G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) * * Usage: destroy a GtkWindow * * GtkWindow * win : the GtkWindow to destroy * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) #else /* * G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) * * Usage: destroy a GtkWindow * * GtkWidget * win : the GtkWindow to destroy * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) * * Usage: hide a GtkWindow * * GtkWindow * win : the GtkWindow to hide * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) #else /* * G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) * * Usage: hide a GtkWindow * * GtkWidget * win : the GtkWindow to hide * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) * * Usage: add a close event signal and callback to a GtkWidget * * GtkWidget * widg : the GtkWidget * GCallback handler : the callback for the close event * gpointer 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.12/src/gui/gui.c000066400000000000000000001201761450232132300157600ustar00rootroot00000000000000/* 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 */ /* * This file: 'gui.c' * * Contains: * - The GUI of the main window - The menu elements of the workspace menu - Creation of menu items, actions, used in all atomes * * List of subroutines: 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 tint cut_sel; tint cut_lab; dint davect[9]; ColRGBA std[6]; #ifdef GTK3 /* * G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) * * Usage: popup a menu at an event position * * GtkWidget * widget : the GtkWidget sending the signal * GdkEventButton * event : the associated event * gpointer 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 /* * void clean_view () * * Usage: 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 } /* * void view_buffer (GtkTextBuffer * buffer) * * Usage: set a text buffer in the main window or an image * * GtkTextBuffer * 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]); } /* * void atomes_key_pressed (guint keyval, GdkModifierType state) * * Usage: main window key actions callbacks * * guint keyval : key id * GdkModifierType 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 /* * void add_action (GSimpleAction * action) * * Usage: add action to the main window action map * * GSimpleAction * 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)); } /* * void remove_action (gchar * action_name) * * Usage: add action from the main window action map * * gchar * 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); } /* * void remove_edition_actions () * * Usage: remove all edition actions */ void remove_edition_actions () { int i; for (i=0; i<3; i++) remove_action (edition_action_names[i]); } /* * void remove_edition_and_analyze_actions () * * Usage: 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]); } /* * G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) * * Usage: show the periodic table of the elements * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) { get_atom_id_from_periodic_table (NULL); } /* * G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: atomes menu bar actions * * GSimpleAction * action : the GAction sending the signal the GSimpleAction sending the signal * GVariant * parameter : GVariant parameter of the GAction the parameter of the action, if any * gpointer 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; } } /* * void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, * gboolean check, gboolean status, gboolean radio, const gchar * stat) * * Usage: add an action to an action group * * GSimpleActionGroup * action_group : the action group to add an action to * const gchar * act : the name of the action to add * GCallback handler : the associated callback * gpointer data : the associated data pointer * gboolean check : is the action a check (1/0) * gboolean status : if check or radio, status of the action (1/0) * gboolean radio : is the action a radio (1/0) * const gchar * 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)); } /* * 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) * * Usage: create menu item * * const gchar * label : Label of the menu item * const gchar * action : Action of the menu item * const gchar * accel : Keyboard accelerator, if any * const gchar * custom : Custom menu item ? NULL otherwise * int format : Image format if not IMG_NONE * const gchar * icon : Image data if not NULL * gboolean check : Check menu item ? * gboolean status : If check then status * gboolean radio : Radio menu item ? * const gchar * 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; } /* * void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu) * * Usage: append a GMenuItem with a subenu to a GMenu, and use markup for the GMenuItem * * GMenu * menu : the GMenu to insert the item with a submenu * const gchar * label : the text for the menu item * GMenu * 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); } /* * 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) * * Usage: create a menu item, then append it to a menu * * GMenu * menu : the menu to insert the item in * const gchar * label : Label of the menu item * const gchar * action : Action of the menu item * const gchar * accel : Keyboard accelerator, if any * const gchar * custom : Custom menu item ? NULL otherwise * int format : Image format if not IMG_NONE * const gchar * icon : Image data if not NULL * gboolean check : Check menu item ? * gboolean status : If check then status * gboolean radio : Radio menu item ? * const gchar * 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); } /* * GMenu * workspace_section (gchar * act, int pop) * * Usage: create the workspace section * * gchar * act : app" or "pop" key for the GAction * int 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; } /* * GMenu * port_section (gchar * act, int pop, int port) * * Usage: create the import/export menu items * * gchar * act : "app" or "pop" key for the GAction * int pop : from main app (0) or contextual (1) * int 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; } /* * GMenu * project_section (gchar * act, int pop_up, int proj, int calc) * * Usage: create the project section * * gchar * act : "app" or "pop" key for the GAction * int pop_up : from main app (0) or contextual (1) * int proj : project id, if any (or -1) * int 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; } /* * GMenu * import_section (gchar * act) * * Usage: create the 'Import' submenu * * gchar * 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; } /* * GMenu * quit_section (gchar * act) * * Usage: create the 'Quit' menu item * * gchar * 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; } /* * GMenu * workspace_title () * * Usage: 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; } /* * GMenu * project_title (int pop_up, int proj) * * Usage: create project title menu item * * int pop_up : from main app (0) or contextual (1) * int 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; } /* * GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) * * Usage: create atomes 'workspace' menu * * gchar * act : "app" or "pop" key for the GAction * int pop_up : from main app (0) or contextual (1) * int proj : project id, if any (or -1) * int 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; } /* * GMenu * create_edit_menu () * * Usage: 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; } /* * GMenu * tool_box_section () * * Usage: 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; } /* * GMenu * create_analyze_menu () * * Usage: 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; } /* * GMenu * create_help_menu () * * Usage: 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; } /* * GMenu * atomes_menu_bar () * * Usage: 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 /* * G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse right event to popup the main application 'workspace' menu * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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)); } } /* * G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) * * Usage: the GtkEventController for the keyboard button press event * * GtkEventControllerKey * self : the GtkEventController sending the signal * guint keyval : the * guint keycode : the key pressed * GdkModifierType state : the keyboard modifier (Ctrl, Alt ... if any) * gpointer 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 /* * GtkWidget * create_main_window (GApplication * atomes) * * Usage: create the main application window * * GApplication * 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 */ /* * This file: 'initc.c' * * Contains: * - Curve data initialization * * List of subroutines: 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); /* * void clean_curves_data (int calc, int start, int end) * * Usage: clean curve data on a range of curve id * * int calc : the calculation * int start : the starting value * int 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); } } } /* * void alloc_curves (int rid) * * Usage: allocating curve data * * int 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; } } /* * void initcwidgets () * * Usage: 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.12/src/gui/interface.c000066400000000000000000000754541450232132300171440ustar00rootroot00000000000000/* 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 */ /* * This file: 'interface.c' * * Contains: * - General message interfaces * * List of subroutines: 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 (struct 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); } */ /* * GtkWidget * addweb (int id) * * Usage: create a widget to present * * int 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); } /* * G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) * * Usage: create the about dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 = "Welcome to Atomes: visualization, analyzis, creation/edition and post-processing of atomistic models !"; const gchar * copyrights = "Copyright © 2023 \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); } /* * void show_web (GtkWidget * dialog, int id) * * Usage: add / show web information to widget * * GtkWidget * dialog : the GtkWidget to modify * int 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); } /* * void show_info (char * information, int val, GtkWidget * win) * * Usage: add / show information message to widget * * char * information : Message * int val : Add contact info (1) or not (0) * GtkWidget * 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); } /* * void show_warning (char * warning, GtkWidget * win) * * Usage: show warning * * char * warning : Message * GtkWidget * 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); } /* * void show_warning_ (char * warning, char * sub, char * tab) * * Usage: show warning from Fortran90 * * char * warning : Message * char * sub : Fortan90 subroutine * char * 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); } /* * void show_error (char * error, int val, GtkWidget * win) * * Usage: show error message * * char * error : Message * int val : Add contact info (1) or not (0) * GtkWidget * 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); } /* * void show_error_ (char * error, char * sub, char * tab) * * Usage: show error from Fortran90 * * char * error : Message * char * sub : Fortan90 subroutine * char * 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; /* * G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) * * Usage: ask yes or no for something: running dialog * * GtkDialog * dial : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) * * Usage: ask yes or no for something: prepare dialog * * gchar * title : Title * gchar * text : Message * int type : the type of message window * GtkWidget * 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; } /* * gchar * exact_name (gchar * name) * * Usage: short cut to print string without spaces * * gchar * name : the initial string */ gchar * exact_name (gchar * name) { return substitute_string (name, " ", NULL); } /* * GtkWidget * show_pop (char * pop, GtkWidget * pwin) * * Usage: display pop information window * * char * pop : Message * GtkWidget * 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 /* * G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) * * Usage: Leaving atomes ? * * GtkWindow * widget : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) #else /* * G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: Leaving atomes ? * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * int dummy_ask_ (char * question) * * Usage: Ask to use dummy atoms or not from Fortran90 * * char * 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; /* * G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) * * Usage: Handling the GtkComboBox in 'int iask' * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; /* * G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) * * Usage: enter an integer value - running the dialog * * GtkDialog * iask : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * int iask (char * question, char * lab, int id, GtkWidget * win) * * Usage: enter an integer value - prepare the dialog * * char * question : Message * char * lab : Text to use for label * int id : the required parameter id * GtkWidget * 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; /* * G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) * * Usage: enter a string - running the dialog * * GtkDialog * cask : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) * * Usage: enter a string - prepare the dialog * * char * question : Message * char * lab : Text to use for label * int id : the required parameter id * char * old : the initial value for the string * GtkWidget * 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); } /* * void init_data_ (int * nats, int * nspc, int * stps, int * cid) * * Usage: update project data using information from Fortran90 * * int * nats : number of atoms * int * nspc : number of species * int * stps : number of steps * int * 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; } /* * void spec_data_ (int * status, int * ind, int * atd, int * nsp, * char * lbel, char * el_nme, * double * amss, double * rdus, * double * nscatt, double * xscatt) * * Usage: update project data using information from Fortran90 * * int * status : Update data (1) or not (0) * int * ind : the chemical species * int * atd : Z * int * nsp : Number of atoms of this species * char * lbel : Symbol * char * el_nme : Element * double * amss : M * double * rdus : Radius * double * nscatt : Neutron scattering length * double * 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; } } /* * void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) * * Usage: print information in GtkTextBuffer * * gchar * str : the text * gchar * stag : the tags * GtkTextBuffer * 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); } } /* * gchar * textcolor (int i) * * Usage: setup text color keyword * * int 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; } /* * 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]) * * Usage: lattice data from Fortran90 * * int * bid : 0 or MD step if NPT * double * volume : volume * double * density : density * double dvects[3][3] : direct space lattice vectors * double rvects[3][3] : reciprocal lattice vectors * double mod[3] : modulus of lattice vectors (a,b,c) * double ang[3] : lattice angles (alpha, beta, gamma) * double f_to_c[3][3] : fractional to cartesian matrix * double c_to_f[3][3] : 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; } } /* * void send_chem_info_ (int prop[active_project -> nspec]) * * Usage: getting chemistry formula information from Fortran90 * * int prop[active_project -> nspec] : 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]; } } /* * gchar * env_name (struct project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) * * Usage: ouput the name of a coordination sphere * * struct project * this_proj : the target project * int g : the coordination (0 = total, 1 = partial) * int s : the chemical species * int f : With markup or not * GtkTextBuffer * buffer : Output in a GtkTextBuffer, or not if NULL */ gchar * env_name (struct 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; } /* * void update_after_calc (int calc) * * Usage: To update all curve plots in the workspace after a calculation * * int calc : Analysis id */ void update_after_calc (int calc) { int i, j; tint cd; struct 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.12/src/gui/interface.h000066400000000000000000000041371450232132300171370ustar00rootroot00000000000000/* 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 */ /* * This header file: 'interface.h' * * Contains: */ #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 (struct 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.12/src/gui/main.c000066400000000000000000000561321450232132300161200ustar00rootroot00000000000000/* 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 */ /* * This file: 'main.c' * * Contains: * - The initialization of the atomes program - The subroutines required to read data from the command line * * List of subroutines: 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; /* * int test_this_arg (gchar * arg) * * Usage: test an argument from the command line * * gchar * arg : the argument to test */ int test_this_arg (gchar * arg) { char * fext[14]={"-awf", "-apf", " -xyz", "NULL", "-c3d", "-trj", "NULL", "-xdatcar", "NULL", "-pdb", "-ent", "-cif", "-hist", "-ipf"}; int i, j; i = strlen(arg); gchar * str = g_ascii_strdown (arg, i); for (j=0; j<14; 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[14]={".awf", ".apf", ".xyz", "NULL", ".c3d", ".trj", "NULL", "tcar", "NULL", ".pdb", ".ent", ".cif", "hist", ".ipf"}; for (j=0; j<14; j++) if (g_strcmp0 (aext, eext[j]) == 0) return -(j+1); g_free (str); g_free (aext); return 0; } /* * void printhelp() * * Usage: 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); } /* * void printversion () * * Usage: 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); } /* * gboolean destroy_func (gpointer user_data) * * Usage: destroy splash screen * * gpointer 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 /* * G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) * * Usage: draw splash screen * * GtkWidget * widget : the GtkWidget sending the signal * cairo_t * cr : the cairo drawing context * gpointer 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 /* * GtkWidget * create_splash_window () * * Usage: 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; } /* * void read_this_file (int file_type, gchar * this_file) * * Usage: read file from the command line * * int file_type : File type * gchar * 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); } /* * void open_this_data_file (int file_type, gchar * file_name) * * Usage: open data file from the command line * * int file_type : File type * gchar * 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 14: 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); } 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); } } } 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); } } 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); } break; } } /* * G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) * * Usage: run the program * * GApplication * app : the application to run * gpointer 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 } /* * int main (int argc, char *argv[]) * * Usage: initalization of the atomes program * * int argc : number of argument(s) on the command line * char *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.12/src/gui/msdcall.c000066400000000000000000000143211450232132300166050ustar00rootroot00000000000000/* 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 */ /* * This file: 'msdcall.c' * * Contains: * - The callbacks for the MSD calculation dialog * * List of subroutines: void initmsd (); void update_msd_view (struct 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" /* * void initmsd () * * Usage: 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; } /* * void update_msd_view (struct project * this_proj) * * Usage: update the project text view for the MSD calculation * * struct project * this_proj : the target project */ void update_msd_view (struct 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]); } /* * G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) * * Usage: compute MSD * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/ringscall.c000066400000000000000000000476371450232132300171640ustar00rootroot00000000000000/* 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 */ /* * This file: 'ringscall.c' * * Contains: * - The callbacks for the ring statistics calculation dialog * * List of subroutines: void initrng (); void update_rings_menus (glwin * view); void update_rings_view (struct 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 (struct 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; /* * void initrng () * * Usage: 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 /* * void update_rings_menus (glwin * view) * * Usage: update the ring(s) menu for the glview * * glwin * 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 /* * void update_rings_view (struct project * this_proj, int c) * * Usage: update the text view for ring statistics * * struct project * this_proj : the target project * int c : the ring type */ void update_rings_view (struct 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); } } /* * void clean_rings_data (int rid, glwin * view) * * Usage: clean a ring type data for a glview * * int rid : Rings type * glwin * view : the glview */ void clean_rings_data (int rid, glwin * view) { struct 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 } /* * G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) * * Usage: compute ring statistics * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; } /* * 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) * * Usage : get rings statistics results form Fortran90 * * int * taille : Number of data points * double ectrc[* taille] : RC * double ectpna[* taille] : PN * double ectmax[* taille] : PMAX * double ectmin[* taille] : PMIN * double * rpstep : Ring(s) per MD step * double * ectrpst : Standard deviation * double * nampat : Rings not found * double * 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.12/src/gui/spcall.c000066400000000000000000000160471450232132300164530ustar00rootroot00000000000000/* 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 */ /* * This file: 'spcall.c' * * Contains: * - The callbacks for the spherical harmonics calculation dialog * * List of subroutines: void initsh (int str); void update_spherical_view (struct 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); /* * void initsh (int str) * * Usage: initialize the curve widgets for the spherical harmonics * * int 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; } } /* * void update_spherical_view (struct project * this_proj) * * Usage: update the text view for spherical harmonics * * struct project * this_proj : the target project */ void update_spherical_view (struct 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]); } /* * G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) * * Usage: compute spherical harmonics * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/sqcall.c000066400000000000000000000251721450232132300164530ustar00rootroot00000000000000/* 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 */ /* * This file: 'sqcall.c' * * Contains: * - The callbacks for the s(q) / s(k) calculation dialog * * List of subroutines: void initsq (int r); void update_sq_view (struct 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" /* * void initsq (int r) * * Usage: initialize the curve widgets for the s(q) / s(k) calculation * * int 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; } /* * void update_sq_view (struct project * this_proj, int sqk) * * Usage: update the text view for s(q) / s(k) calculation * * struct project * this_proj : the target project * int sqk : s(q) (SQ) or s(k) (SK) */ void update_sq_view (struct 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]); } /* * G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) * * Usage: compute s(q) / s(k) * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * void save_xsk_ (int * interv, double datacurve[* interv]) * * Usage: get s(k) calculation results form Fortran90 * * int * interv : number of data point (delta r/q) * double datacurve[* interv] : calculation result */ void save_xsk_ (int * interv, double datacurve[* interv]) { if (* interv != 0) { xsk = duplicate_double (* interv, datacurve); } } /* * G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) * * Usage: compute s(q) / s(k) * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/gui/tools.c000066400000000000000000000254161450232132300163350ustar00rootroot00000000000000/* 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 */ /* * This file: 'tools.c' * * Contains: * - * * List of subroutines: 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; /* * gchar * prepare_for_title (gchar * init) * * Usage: prepare a string for a window title, getting rid of all markup * * gchar * 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; } /* * void fill_tool_model () * * Usage: 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) * * Usage: show/hide and sensitive/not a GtkCellRenderer * * GtkTreeViewColumn * col : the column * GtkCellRenderer * renderer : the cell renderer * GtkTreeModel * mod : the model * GtkTreeIter * iter : the iter * gpointer 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); } } /* * void adjust_tool_model (int calc, int curve, gchar * string_path) * * Usage: adjust the content of the tool box tree model * * int calc : the calculation * int curve : the curve * gchar * 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); } } /* * G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: To show/hide a curve by clicking in the tree view * * GtkCellRendererToggle * cell_renderer : the renderer toggled * gchar * string_path : the path in the tree view * gpointer 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); } /* * GtkWidget * tooltree () * * Usage: 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; } /* * GtkWidget * curvetbox () * * Usage: 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.12/src/gui/work_menu.c000066400000000000000000000314041450232132300171750ustar00rootroot00000000000000/* 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 */ /* * This file: 'work_menu.c' * * Contains: * - The workspace menu GTK3 version - Callbacks for the workspace menu * * List of subroutines: 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); /* * G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) * * Usage: create a new project * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 (); } /* * G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) * * Usage: leaving atomes ? * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; /* * G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) * * Usage: to compute the 'calc_to_compute' * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * GtkWidget * this_work_menu (int p, int c) * * Usage: create the workspace menu GTK3 version with icons * * int p : project id, or -1 * int 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]; /* * GtkWidget * work_menu (int p, int c) * * Usage: create the workspace popup menu * * int p : project id, or -1 * int 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.12/src/opengl/000077500000000000000000000000001450232132300155215ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/opengl/arcball.c000066400000000000000000000041041450232132300172640ustar00rootroot00000000000000/* 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 */ /* * This file: 'arcball.c' * * Contains: * - The mouse trackball rotation subroutines * * List of subroutines: void arc_ball_rotation (glwin * view, int x, int y); */ #include "global.h" #include "glview.h" extern void rotate_quat (struct 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); } /* * void arc_ball_rotation (glwin * view, int x, int y) * * Usage: * * glwin * view : the target glwin * int x : x position * int 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.12/src/opengl/draw/000077500000000000000000000000001450232132300164565ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/opengl/draw/d_atoms.c000066400000000000000000000446161450232132300202630ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_atoms.c' * * Contains: * - The subroutines to prepare the atom(s) and clone(s) OpenGL rendering * * List of subroutines: 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, struct 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, struct atom at, struct 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]; /* * ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) * * Usage: get atom (or clone) color * * int i : chemical species * int j : the atom id * double al : opacity (atom: 1.0, clone: 0.5) * int picked : is the atom (clone) selected (1) or not (0) * gboolean 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) { struct 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; /* * int sphere_vertices (int qual) * * Usage: return the number of OpenGL vertices to render a sphere * * int qual : OpenGL quality */ int sphere_vertices (int qual) { return qual * qual; } /* * int sphere_indices (int qual) * * Usage: return the number of OpenGL indices to render a sphere * * int qual : OpenGL quality */ int sphere_indices (int qual) { return 2 * qual * (qual - 1); } /* * object_3d * draw_sphere (int quality) * * Usage: OpenGL 3D sphere object rendering * * int 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; } /* * float get_sphere_radius (int style, int sp, int ac, int sel) * * Usage: get an atom sphere radius * * int style : rendering style * int sp : chemical species * int ac : atom (0) or clone (1) * int 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; } } /* * void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) * * Usage: fill the OpenGL data buffer for a atom (or clone) to render * * float * vertices : the OpenGL buffer data to fill * vec3_t pos : the position vector * ColRGBA col : the color * float rad : the radius * float 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 ++; } /* * void setup_this_atom (int style, gboolean to_pick, gboolean picked, struct atom * at, int ac, float * vert, float al) * * Usage: prepare the OpenGL rendering data of an atom / clone * * int style : rendering style * gboolean to_pick : to pick (1) or to draw (0) * gboolean picked : is the atom selected (1) or not (0) * struct atom * at : the atom to render * int ac : atom (0) or clone (1) * float * vert : the OpenGL buffer data to fill * float al : the opacity (atom: 1.0, clone: 0.5) */ void setup_this_atom (int style, gboolean to_pick, gboolean picked, struct 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; } } } } /* * int find_atom_vertices (gboolean to_pick) * * Usage: find the number of atom(s) to render * * gboolean 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; } /* * void setup_atom_vertices (int style, gboolean to_pick, float * vertices) * * Usage: prepare an atom OpenGL rendering * * int style : the rendering style * gboolean to_pick : to pick (1) or to draw (0) * float * vertices : the OpenGL buffer data to fill */ void setup_atom_vertices (int style, gboolean to_pick, float * vertices) { int i; struct 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); } } /* * void prepare_clone (int style, gboolean to_pick, int picked, struct atom at, struct atom bt, float x, float y, float z, float * vertices) * * Usage: prepare the rendering data of a clone * * int style : the rendering style * gboolean to_pick : to pick (1) or to draw (0) * int picked : is the clone selected (1) or not (0) * struct atom at : 1st atom of the cloned chemical bond * struct atom bt : 2nd atom of the cloned chemical bond * float x : x position * float y : y position * float z : z position * float * vertices : the OpenGL buffer data to fill */ void prepare_clone (int style, gboolean to_pick, int picked, struct atom at, struct atom bt, float x, float y, float z, float * vertices) { struct 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); } /* * int find_clone_vertices (gboolean to_pick) * * Usage: find the number of clones to render * * gboolean 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; } /* * void setup_clone_vertices (int style, gboolean to_pick, float * vertices) * * Usage: find clone(s) position(s), color(s) and prepare the data for the OpenGL rendering * * int style : rendering style * gboolean to_pick : to pick (1) or to draw (0) * float * 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); } } /* * void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) * * Usage: find atom(s) position(s), color(s) and prepare the data for the OpenGL rendering * * int style : rendering style * gboolean to_pick : to pick (1) or to draw (0) * float * 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; } } /* * void create_atom_lists (gboolean to_pick) * * Usage: prepare atom(s) and clone(s) OpenGL rendering * * gboolean 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.12/src/opengl/draw/d_axis.c000066400000000000000000000270421450232132300200760ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_axis.c' * * Contains: * - The subroutines to prepare the axis OpenGL rendering * * List of subroutines: 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; /* * ColRGBA color_axis (int id) * * Usage: get axis color * * int 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; } } /* * mat4_t create_axis_matrices (int type) * * Usage: create axis OpenGL rendering matrices * * int 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); } /* * void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) * * Usage: setup axis 3D arrow rendering data * * float * vert : the OpenGL buffer data to fill * vec3_t a : position vector a * vec3_t b : position vector b * vec3_t c : position vector c * vec3_t d : position vector d * vec3_t 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); } /* * void init_axis_param () * * Usage: 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); } } /* * void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) * * Usage: prepare axis OpenGL rendering data buffer * * float * vert_a : OpenGL buffer data to fill * float * vert_b : OpenGL buffer data to fill * float * 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); } } } /* * int create_axis_lists () * * Usage: 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.12/src/opengl/draw/d_bonds.c000066400000000000000000000617271450232132300202470ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_bonds.c' * * Contains: * - The subroutines to prepare the bond(s) and clone bond(s) OpenGL rendering * * List of subroutines: 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, struct atom * at, struct atom * bt, float al, float * vertices); void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, struct atom * at, struct 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; struct bond_rotation { double x, y, z; double angle; }; /* * int cylinder_vertices (int qual) * * Usage: return the number of OpenGL vertices to render a cylinder * * int qual : OpenGL quality */ int cylinder_vertices (int qual) { return 2*qual; } /* * int cylinder_indices (int qual) * * Usage: return the number of OpenGL indices to render a cylinder * * int qual : OpenGL quality */ int cylinder_indices (int qual) { return 2*(qual + 1); } /* * object_3d * draw_cylinder (int quality, float ra, float rb) * * Usage: OpenGL 3D cylinder object rendering * * int quality : OpenGL quality * float ra : cylinder radius at 1st side point * float 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; } /* * int cap_vertices (int qual) * * Usage: return the number of OpenGL vertices to render a cylinder cap * * int qual : OpenGL quality */ int cap_vertices (int qual) { return qual + 1; } /* * int cap_indices (int qual) * * Usage: return the number of OpenGL indices to render a cylinder cap * * int qual : OpenGL quality */ int cap_indices (int qual) { return qual + 2; } /* * object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) * * Usage: OpenGL 3D cylinder cap object rendering * * int quality : OpenGL quality * float rad : cylinder radius * gboolean 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; } /* * vec4_t rotate_bond (vec3_t a, vec3_t b) * * Usage: rotate a bond based on the proper orientation * * vec3_t a : 1st atom position * vec3_t 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); } /* * float get_bond_radius (int sty, int ac, int at, int bt, int sel) * * Usage: get bond (clone bond) radius * * int sty : the rendering style * int ac : atom (0) or clone (1) * int at : 1st chemical species * int bt : 2nd chemical species * int 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; } } /* * void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) * * Usage: fill the OpenGL data buffer for a line bond (or clone bond) to render * * float * vertices : the OpenGL buffer to fill * vec3_t pos : the position vector * ColRGBA col : the color * float 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 ++; } /* * void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta) * * Usage: fill the OpenGL data buffer for a cylinder bond (or clone bond) to render * * float * vertices : the OpenGL buffer to fill * vec3_t pos_a : 1st atom position * vec3_t pos_b : 2nd atom position * ColRGBA col : the color * float rad : the radius * float alpha : the opacity (atom: 1.0, clone: 0.5) * float 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 ++; } /* * void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha) * * Usage: fill the OpenGL data buffer for a cylinder cap bond (or clone bond) to render * * float * vertices : the OpenGL buffer to fill * vec3_t pos_a : the position vector * vec3_t pos_b : the rotation vector * ColRGBA col : the color * float rad : the radius * float 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; /* * void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, struct atom * at, struct atom * bt, float al, float * vertices) * * Usage: prepare the OpenGL rendering data of a bond / clone bond * * int sty : rendering style * gboolean to_pick : to pick (1) or to draw (0) * gboolean picked : is the bond selected (1) or not (0) * int cap : draw cylinder cap (1/0) * int bi : atom (0) or clone (1) visible * int pi : atom (0) or clone (1) picked * struct atom * at : 1st atom * struct atom * bt : 2nd atom * float al : the opacity (bond: 1.0, clone bond: 0.5) * float * vertices : the OpenGL buffer data to fill */ void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, struct atom * at, struct 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; } } } } /* * void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, struct atom * at, struct atom * bt, float * vertices) * * Usage: prepare a bond OpenGL rendering * * int sty : rendering style * gboolean to_pick : to pick (1) or to draw (0) * gboolean picked : is the atom selected (1) or not (0) * int cap : draw cylinder cap * int bi : atom (0) or clone (1) visible * int pi : atom (0) or clone (1) picked * int bid : bond id * struct atom * at : 1st atom * struct atom * bt : 2nd atom * float * 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, struct atom * at, struct atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, to_pick, picked, cap, bi, pi, at, bt, 1.0, vertices); } else { struct 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); } } /* * int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) * * Usage: find bond(s) and clone bond(s) to render * * gboolean to_pick : to pick (1) or to draw (0) * int sty : rendering style * int sa : 1st chemical species * int sb : 2nd chemical species * int bi : bond (0) or clone bond (1) * int 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; } /* * void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) * * Usage: prepare cylinder bond(s) and clone bond(s) to render * * int style : rendering style * gboolean to_pick : to pick (1) or to draw (0) * int cap : draw cylinder cap (1/0) * int bi : bond (0) or clone bond (1) * float * 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); } } } } /* * void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) * * Usage: prepare line bond(s) and clone bond(s) to render * * int style : rendering style * int cap : draw cylinder cap (1/0) * int bi : bond (0) or clone bond (1) * int sa : 1st chemical species * int sb : 2nd chemical species * float * 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); } } } } /* * int create_bond_lists (gboolean to_pick) * * Usage: prepare bond(s) and clone bond(s) OpenGL rendering * * gboolean 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.12/src/opengl/draw/d_box.c000066400000000000000000001076001450232132300177210ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_box.c' * * Contains: * - The subroutines to prepare the box(s) OpenGL rendering - The subroutines to prepare the slab(s) OpenGL rendering - The subroutines to prepare the volume(s) OpenGL rendering * * List of subroutines: 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 (struct 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 (struct project * this_proj); extern void process_selected_atom (struct project * this_proj, glwin * view, int id, int ac, int se, int pi); extern ColRGBA pcol; int BOX_BUFF_SIZE; /* * gboolean are_identical_vec3 (vec3_t va, vec3_t vb) * * Usage: are these 2 vectors indentical * * vec3_t va : 1st vector * vec3_t 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; } } /* * gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) * * Usage: is this box edge vector already saved ? * * vec3_t a : 1st set of coordinates * vec3_t b : 2nd set of coordinates * float * 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); } } } } } } } } /* * void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) * * Usage: prepare the unit cell OpenGL rendering * * vec3_t ax : 1st point coordinates * vec3_t bx : 2nd point coordinates * float * c_vert : OpenGL cylinder/line data buffer to fill * float * 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); } } } /* * void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) * * Usage: prepare a box OpenGL rendering * * void (*c_func)(vec3_t, vec3_t, int, float *, float *) : the function to use a render * float * verts : OpenGL cylinder/line data buffer to fill * float * 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); } } /* * int create_box_lists () * * Usage: 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) * * Usage: * * vec3_t a : * vec3_t b : * int 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, }; /* * void prepare_cuboid (vec3_t position, int id) * * Usage: OpenGL 3D light object rendering * * vec3_t position : light position * int 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); } /* * void create_light_lists () * * Usage: 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)); } /* * double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) * * Usage: * * gboolean draw : draw or not (1/0) * int SHADID : shader id * int shadnum : shader number * mat4_t rot : rotation matrix * vec3_t cpos : position of center of slab * double paral[3][3] : cell parameters * ColRGBA col : slab color * double 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; } /* * void cuboid_slab (mat4_t rot) * * Usage: prepare cuboid slab OpenGL rendering * * mat4_t 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; struct atom slab_center; struct 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); } } } } /* * void cylinder_slab (mat4_t rot) * * Usage: prepare cylinder slab OpenGL rendering * * mat4_t 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; struct atom slab_center; struct 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); } } } } /* * void spherical_slab () * * Usage: 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; struct atom slab_center; struct 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); } } } } /* * void create_slab_lists (struct project * this_proj) * * Usage: prepare slab(s) OpenGL rendering * * struct project * this_proj : the target project */ void create_slab_lists (struct 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; } /* * void create_volumes_lists () * * Usage: 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.12/src/opengl/draw/d_label.c000066400000000000000000000167721450232132300202210ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_label.c' * * Contains: * - The subroutines to prepare the atomic label(s) OpenGL rendering * * List of subroutines: int create_label_lists (); void prepare_label (struct 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); /* * mat4_t create_label_matrices () * * Usage: 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); } /* * void prepare_label (struct atom at, int id, double al) * * Usage: prepare an atomic label OpenGL rendering * * struct atom at : the atom to label * int id : the label id * double al : opacity */ void prepare_label (struct 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); } /* * void clean_labels (int id) * * Usage: clean atomic label shaders * * int 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; } } /* * int create_label_lists () * * Usage: prepare atomic label(s) OpenGL rendering */ int create_label_lists () { int nshaders = 0; int i, j, k; float x, y, z; struct 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.12/src/opengl/draw/d_measures.c000066400000000000000000000567071450232132300207700ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_measures.c' * * Contains: * - The subroutines to prepare the measure(s) OpenGL rendering * * List of subroutines: int prepare_measure_shaders (int type, int shaders); void draw_angle_label (struct atom * at, struct atom * bt, struct 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 (struct atom * at, struct 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; struct selatom * tmp_a, * tmp_b, * tmp_c, * tmp_d; struct atom * ta, * tb, * tc, * td, * te, * tf; struct distance dist_ba, dist_bc; int * shift; double dist; object_3d * measure; ColRGBA col; ColRGBA col_gdk; /* * void draw_angle_label (struct atom * at, struct atom * bt, struct atom * ct, int pi) * * Usage: prepare an measured angle label OpenGL rendering * * struct atom * at : 1st atom * struct atom * bt : 2nd atom * struct atom * ct : 3rd atom * int pi : 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_angle_label (struct atom * at, struct atom * bt, struct atom * ct, int pi) { struct 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); } /* * void set_measure_color (int selected, int id, int num) * * Usage: * * int selected : total number of selected atom(s) * int id : measured element id number * int 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; } } /* * void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) * * Usage: prepare measured angle to render * * int s : measured line (0) or label (1) * int sa : 1st atom * int sb : 2nd atom * int sc ! 3rd atom * int 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; struct 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; } } } } /* * void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) * * Usage: do things for the measured angles selection * * glwin * view : the target glwin * int id : action to perform: * -2 = save angles selection * -1 = clean angles selection * 0 = prepare OpenGL buffer data analysis mode selection measure * 1 = prepare OpenGL buffer data edition mode selection measure * 2 = fill angles tree store measures window * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * GtkTreeStore * 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); } /* * void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) * * Usage: do things for the measured dihedrals selection * * glwin * view : the target glwin * int id : action to perform: * -2 = save dihedrals selection * -1 = clean dihedrals selection * 0 = prepare OpenGL buffer data analysis mode selection measure * 1 = prepare OpenGL buffer data edition mode selection measure * 2 = fill dihedrals tree store measures window * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * GtkTreeStore * 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); } /* * void draw_bond_label (struct atom * at, struct atom * bt, int pi) * * Usage: prepare a measured distance OpenGL rendering * * struct atom * at : 1st atom * struct atom * bt : 2nd atom * int pi : 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_bond_label (struct atom * at, struct atom * bt, int pi) { struct 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); } /* * void setup_this_measured_bond (int s, int sa, int sb, int pi) * * Usage: prepare measured distance to render * * int s : measured line (0) or label (1) * int sa : 1st atom * int sb : 2nd atom * int 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; struct 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; } } } } /* * void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) * * Usage: do things for the measured distances selection * * glwin * view : the target glwin * int id : action to perform: * -2 = save bonds selection * -1 = clean bonds selection * 0 = prepare OpenGL buffer data analysis mode selection measure * 1 = prepare OpenGL buffer data edition mode selection measure * 2 = fill bonds distances tree store measures window * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * GtkTreeStore * 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); } /* * int prepare_measure_shaders (int type, int shaders) * * Usage: prepare measure OpenGL rendering * * int type : the measure type (0 = distances, 1 = angles, 2 = dihedrals) * int 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; } /* * void create_measures_lists () * * Usage: 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.12/src/opengl/draw/d_poly.c000066400000000000000000000474771450232132300201330ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_poly.c' * * Contains: * * * * * List of subroutines: 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, struct 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; /* * void setup_summit (float * vertices, vec3_t s, vec3_t n) * * Usage: prepare the polygon summit to render * * float * vertices : the OpenGL data buffer to fill * vec3_t s : position vector * vec3_t 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 ++; } /* * vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) * * Usage: compute triangle normal vector * * vec3_t v1 : 1st summit * vec3_t v2 : 2nd summit * vec3_t 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); } /* * void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) * * Usage: * * float * vertices : * vec3_t sa : 1st summit * vec3_t sb : 2nd summit * vec3_t 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))); }*/ /* * void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) * * Usage: fill the OpenGL data buffer for a polyhedron to render * * float * vertices : the OpenGL buffer data to fill * GLfloat ** xyz : the summits coordinates * int 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]; } } } } } /* * void get_centroid (GLfloat ** xyz, int id) * * Usage: find the barycenter of a polyhedron * * GLfloat ** xyz : the OpenGL buffer data to fill * int 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; } /* * gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) * * Usage: is this point inside a triangle ? * * vec3_t p : the position to test * vec3_t a : 1st summit of the triangle * vec3_t b : 2nd summit of the triangle * vec3_t 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; } } /* * gboolean check_it (int i, int j, int k, int l) * * Usage: test this atom id ? * * int i : 1st summit atom id * int j : 2nd summit atom id * int k : 3rd summit atom id * int 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; } } /* * void check_triangles (int s, GLfloat ** xyz) * * Usage: * * int s : number of summits for the polygon * GLfloat ** 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) { struct 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; } /* * int is_atom_cloned (int at) * * Usage: does this atom have clone(s) ? * * int 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; } /* * void create_poly_lists () * * Usage: 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 polyedra // +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.12/src/opengl/draw/d_rings.c000066400000000000000000000202631450232132300202520ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_rings.c' * * Contains: * - The subroutines to prepare the ring(s) polyhedra OpenGL rendering * * List of subroutines: 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); /* * int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) * * Usage: prepare a ring polyhedra OpenGL rendering * * float * vertices : the ring atomic positions buffer to fill, if any * int se : type of ring * int ge : the coord id for this size of ring * int ta : the size of the ring * int id : the ring id number * gboolean 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; struct distance d; struct 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; } /* * void create_ring_lists () * * Usage: 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 polyedra // +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.12/src/opengl/draw/d_selection.c000066400000000000000000000757771450232132300211410ustar00rootroot00000000000000/* 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 */ /* * This file: 'd_selection.c' * * Contains: * - The subroutines to prepare the selected atom(s), clone(s), bond(s) and clone bond(s) OpenGL rendering - The subroutines to prepare the atom(s) and bond(s) picking y unique color rendering * * List of subroutines: 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, struct atom * at, struct 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, struct atom * at, int ac, float * vert, float al); extern void prepare_clone (int style, gboolean to_pick, int picked, struct atom at, struct 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, struct atom * at, struct atom * bt, float al, float * vertices); /* * void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) * * Usage: fill the OpenGL data buffer for a selected atom clone bonds to render * * int style : rendering style * int at : the atom id * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * float * 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; struct 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); } } } } /* * int find_selected_clone_vertices (int style, int at) * * Usage: find the number of selected atom(s) to render * * int style : rendering style * int at : the atom id */ int find_selected_clone_vertices (int style, int at) { int i, j, k; gboolean doit = FALSE; struct 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; } /* * int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) * * Usage: find the number of selected bond(s) to render * * int sty : rendering style * int at : the atom id * int sp : the chemical species * int bi : atom (0) or clone (1) * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * int 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; struct 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; } /* * int get_clone_id (int at, int bt) * * Usage: get the bond id of cloned bond * * int at : 1st atom * int 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; } /* * void prepare_selected_bond (int sty, int cap, int bi, int pi, struct atom * at, struct atom * bt, float * vertices) * * Usage: prepare the rendering of a selected bond * * int sty : rendering style * int cap : render cylinder caps (1/0) * int bi : atom (0) or clone (1) * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * struct atom * at : 1st atom * struct atom * bt : 2nd atom * float * vertices : the OpenGL buffer data to fill */ void prepare_selected_bond (int sty, int cap, int bi, int pi, struct atom * at, struct atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, at, bt, 1.0, vertices); } else { struct atom * tmp_a, * tmp_b; struct 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); } } /* * void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) * * Usage: prepare the rendering of all selected bond(s) * * int sty : rendering style * int cap : render cylinder caps (1/0) * int bi : atom (0) or clone (1) * int at : atom id * int sb : target chemical species * int pi : 0 = mouse analysis mode, 1 = mouse edition mode * float * 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; struct 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]; /* * void prepare_selected (int style, gboolean cylinder, int clone, int type) * * Usage: prepare the list of selected bond(s) to render * * int style : rendering style * gboolean cylinder : cylinder (1) or line (1) * int clone : atom (0) or clone (1) * int type : 0 = mouse analysis mode, 1 = mouse edition mode */ void prepare_selected (int style, gboolean cylinder, int clone, int type) { int h, i, j; struct selatom * 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; } /* * int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) * * Usage: prepare the OpenGL rendering data of to be picked bond / clone bond * * int style : rendering style * gboolean cylinder : cylinders (1) or lines (0) * int caps : cylinder caps (1/0) * int bonds : number of selected bonds * int ncaps : number of cylinder caps * int type : 0 = mouse analysis mode, 1 = mouse edition mode * int clone : atom (0) or clone (1) * int 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; } /* * int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) * * Usage: * * int style : rendering style * int shaders : shader id number * int clone : atoms (0) or clones (1) * int type : 0 = mouse analysis mode, 1 = mouse edition mode * gboolean 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; struct selatom * 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; } /* * int check_selection (int style, int type) * * Usage: * * int style : rendering style * int type : 0 = mouse analysis mode, 1 = mouse edition mode */ int check_selection (int style, int type) { struct selatom * 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; } /* * int create_selection_lists () * * Usage: 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; } /* * int create_pick_lists () * * Usage: 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.12/src/opengl/draw/image.c000066400000000000000000000142601450232132300177070ustar00rootroot00000000000000/* 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 */ /* * This file: 'image.c' * * Contains: * - The subroutines to render an image from the OpenGL window * * List of subroutines: 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 /* * G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: render an image from the OpenGL window - running the dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) * * Usage: render an image from the OpenGL window - running the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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]); struct 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 } } /* * void render_image (glwin * view, video_options * iopts) * * Usage: render an image from the OpenGL window - prepare the dialog * * glwin * view : the target glwin * video_options * 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.12/src/opengl/draw/movie.c000066400000000000000000001307601450232132300177500ustar00rootroot00000000000000/* 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 */ /* * This file: 'movie.c' * * Contains: * - The subroutines to encode a movie / image from the OpenGL rendering * * List of subroutines: 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; /* * void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) * * Usage: convert an RGB pixbuf to an YUV picture frame * * GdkPixbuf * pixbuf : the Gdk RGB pixbuf to convert * AVFrame * picture : the AVFrame to store the data * int w : image width * int 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; } } } /* * static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) * * Usage: set an encoder YUV frame from an RGB image * * uint8_t * rgb : the RGB data to convert * VideoStream * 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); } /* * static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) * * Usage : 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 /* * void fill_image (VideoStream * vs, int width, int height, glwin * view) * * Usage: render an image from an OpenGL rendering * * VideoStream * vs : the video stream * int width : image width * int height : image height * glwin * 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); } /* * static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) * * Usage: write a video frame from an OpenGL render * * AVFormatContext * f_context : the format context to use * VideoStream * vs : the video stream * int frame_id : the frame id number * glwin * 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); } } } } /* * static AVFrame * alloc_video_frame (AVCodecContext * cc) * * Usage : allocate a video frame using a codec context * * AVCodecContext * 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; } /* * AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) * * Usage : create a video codec context * * AVFormatContext * fc : the format context * const AVCodec * vc : the codec * video_options * 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; } /* * VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) * * Usage: create video stream and the associated data buffers * * AVFormatContext * fc : the format context * const AVCodec * vc : the codec * video_options * 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; } /* * static void close_stream (AVFormatContext * fc, VideoStream * vs) * * Usage: close the video stream and free associated data buffers * * AVFormatContext * fc : the format context to free * VideoStream * 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]; /* * void set_old_cmap (image * img, int stp, int id) * * Usage: preserve color map information * * image * img : the target image * int stp : MD step * int 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]; } /* * gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) * * Usage: test if it is required to update the OpenGL shaders, and which one(s) * * glwin * view : the target glwin * image * img_a : the previous image * image * img_b : the next image * int 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; } } struct 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; */ /* * gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) * * Usage: render a movie from the saved animation parameters * * glwin * view : the target glwin * video_options * vopts : the video encoding options * gchar * 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; /* * void init_frame_buffer (int x, int y) * * Usage: init a frame buffer * * int x : x size - image width * int 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); } /* * void close_frame_buffer () * * Usage: close the frame buffer */ void close_frame_buffer () { glDeleteFramebuffers (1, &fbo); glDeleteRenderbuffers (1, &rbo_color); glDeleteRenderbuffers (1, &rbo_depth); } #ifdef GTK4 /* * G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: saving a movie - running the dialog * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) * * Usage: saving a movie - running the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 } } /* * void save_movie (glwin * view, video_options * vopts) * * Usage: saving a movie - prepare the dialog * * glwin * view : the target glwin * video_options * 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.12/src/opengl/draw/movie.h000066400000000000000000000030061450232132300177450ustar00rootroot00000000000000/* 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 */ /* * This header file: 'movie.h' * * Contains: */ #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 { AVStream * st; AVCodecContext * cc; AVFrame * frame; struct SwsContext * sws_ctx; } VideoStream; typedef struct{ int proj; int framesec; int extraframes; int codec; int oglquality; int bitrate; int * video_res; } video_options; extern void render_image (glwin * view, video_options * iopts); extern void save_movie (glwin * view, video_options * vopts); #endif Atomes-GNU-1.1.12/src/opengl/draw/ogl_text.c000066400000000000000000000570541450232132300204620ustar00rootroot00000000000000/* 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 */ /* * This file: 'ogl_text.c' * * Contains: * - The subroutines to prepare the text OpenGL rendering * * List of subroutines: int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff); void render_string (int glsl, int id, struct screen_string * this_string); void debug_string (struct 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], struct atom * at, struct atom * bt, struct atom * ct); void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], struct atom * at, struct atom * bt, struct atom * ct); static void normalize_text_size (GLenum texture, int * width, int * height); struct screen_string * was_not_rendered_already (char * word, struct 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, struct 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 }}; /* * static void normalize_text_size (GLenum texture, int * width, int * height) * * Usage: normalize the text size * * GLenum texture : the texture type * int * width : image width * int * 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; } } /* * int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) * * Usage: paint bitmap data using color * * vec4_t color : the color * GLfloat a : opacity * int cw : width * int ch : height * unsigned char * 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; /* * object_3d * create_string_texture (int cwidth, int cheight, int * pixels) * * Usage: OpenGL 3D string object rendering * * int cwidth : width * int cheight : height * int * 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; } /* * object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, struct screen_string * this_string) * * Usage: OpenGL 3D pango layout object rendering * * PangoLayout * layout : the Pango layout * GLenum texture : the OpenGL texture type * int id : the label id * struct screen_string * this_string : the screen string */ object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, struct 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; } /* * ColRGBA * opposite_color (ColRGBA col) * * Usage: compute the opposite color * * ColRGBA 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; } /* * void render_string (int glsl, int id, struct screen_string * this_string) * * Usage: render a screen string * * int glsl : the shader id * int id : the label id * struct screen_string * this_string : the screen string to render */ void render_string (int glsl, int id, struct 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)); } /* * void debug_string (struct screen_string * this_string) * * Usage: debug screen string data * * struct screen_string * this_string : */ void debug_string (struct 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]); } /* * void render_all_strings (int glsl, int id) * * Usage: render all string to be rendered for a label list * * int glsl : shader id * int id : label id */ void render_all_strings (int glsl, int id) { if (plot -> labels_list[id] != NULL) { struct 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; } } } /* * struct screen_string * was_not_rendered_already (char * word, struct screen_string * list) * * Usage: check if a string was not already rendered and the corresponding screen string created * * char * word : the string to render * struct screen_string * list : the screen string list */ struct screen_string * was_not_rendered_already (char * word, struct screen_string * list) { if (list != NULL) { struct 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; } /* * void add_string_instance (struct screen_string * string, vec3_t pos, struct atom * at, struct atom * bt, struct atom * ct) * * Usage: add an instance to a screen string * * struct screen_string * string : the screen string to increase * vec3_t pos : the position * struct atom * at : the 1st atom, if any (bond or angle measure string) * struct atom * bt : the 2nd atom, if any (bond or angle measure string) * struct atom * ct : the 3rd atom, if any (angle measure string) */ void add_string_instance (struct screen_string * string, vec3_t pos, struct atom * at, struct atom * bt, struct 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; } } } /* * void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], struct atom * at, struct atom * bt, struct atom * ct)) * * Usage: add a screen string to the list of screen string to render * * char * text : the string * int id : the label id * ColRGBA col : the color * vec3_t pos : the position * float lshift[3] : label position shift on x, y and z, if any * struct atom * at : the 1st atom, if any (bond or angle measure string) * struct atom * bt : the 2nd atom, if any (bond or angle measure string) * struct atom * ct : the 3rd atom, if any (angle measure string) */ void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], struct atom * at, struct atom * bt, struct 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 { struct 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); } /* * void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], struct atom * at, struct atom * bt, struct atom * ct) * * Usage: prepare a screen string to be rendered * * char * text : the string * int id : the label id * ColRGBA col : the color * vec3_t pos : the position * float lshift[3] : label position shift on x, y and z, if any * struct atom * at : the 1st atom, if any (bond or angle measure string) * struct atom * bt : the 2nd atom, if any (bond or angle measure string) * struct atom * ct : the 3rd atom, if any (angle measure string) */ void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], struct atom * at, struct atom * bt, struct atom * ct) { struct 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.12/src/opengl/edit/000077500000000000000000000000001450232132300164465ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/opengl/edit/atom_action.c000066400000000000000000002075031450232132300211160ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_action.c' * * Contains: * - The subourtines to aplly the edition actions to the model * * List of subroutines: int action_atoms_from_project (struct project * this_proj, atom_search * asearch, gboolean visible); gboolean do_we_have_objects_in_selection (struct project * this_proj, atom_search * asearch, gboolean editing); void free_dummies (struct dummy_atom * tmp_pick); void clean_this_project (struct project * this_proj); void clean_motion_search (struct project * this_proj, atom_search * asearch, int sid); void clean_all_trees (atom_search * asearch, struct project * this_proj); void apply_action (struct project * this_proj, atom_search * asearch); void prepare_random_action (struct 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" /* * void free_dummies (struct dummy_atom * tmp_pick) * * Usage: free atom dummy list * * struct dummy_atom * tmp_pick : the atom dummy list to free */ void free_dummies (struct 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; } } } /* * void clean_this_project (struct project * this_proj) * * Usage: clean project data for the edition process * * struct project * this_proj : the target project */ void clean_this_project (struct 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); } /* * void clean_motion_search (struct project * this_proj, atom_search * asearch, int sid) * * Usage: clean atom search motion data * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int sid : motion id */ void clean_motion_search (struct 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]) { struct insert_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; } } // = TRUE; this_proj -> modelgl -> atom_win -> rebuilt[! sid] = asearch -> update_bonding; this_proj -> modelgl -> atom_win -> rebuilt[sid] = FALSE; } /* * int action_atoms_from_project (struct project * this_proj, atom_search * asearch, gboolean visible) * * Usage: apply atom edition action to project (motion, remove, replace, insert, random move) * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * gboolean visible : is the 'model edition' window visible (1/0) */ int action_atoms_from_project (struct project * this_proj, atom_search * asearch, gboolean visible) { int i, j, k, l, m, n, o, p; struct dummy_atom * to_rem, * to_add; struct dummy_atom * tmp_rem, * tmp_add; struct insert_object * object_list = NULL; struct insert_object * tmp_list; struct insert_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 passivating = FALSE; if (asearch -> action == REMOVE) { if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> slab_passivate) passivating = TRUE; } } if (! this_proj -> dmtx && passivating) { i = activep; active_project_changed (this_proj -> id); bonds_update = frag_update = mol_update = 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); } 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_insert_object (object); tmp_list = object_list; } else { tmp_list -> next = duplicate_insert_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] = new_geo (m, object -> coord, object -> old_z, object -> at_list[k].coord[m], l, tmp_add -> type, edit -> coord, edit -> new_z); if (this_proj -> coord) { for (m=2; m<4; m++) tmp_add -> coord[m] = object -> at_list[k].coord[2] + this_proj -> coord -> totcoord[m]; } for (m=2; m<4; m++) tmp_add -> coord[m] += i; 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 -> 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; } struct atom * new_list = NULL; struct atom * tmp_new = NULL; gboolean * showfrag; int ** tmpgeo[2]; int new_atoms = 0; int * old_id; 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 || passivating) { 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, passivating); if (passivating) { 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]); // g_debug ("allocated i= %d, k= %d, tot= %d", i, k, edit -> coord -> ntg[i][k]); } } tmp_new = new_list; while (tmp_new) { j = tmp_new -> id; k = tmp_new -> sp; if (! passivating || 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= %d", j, k, l, m); } tmpgeo[l][k][m] ++; } } tmp_new = tmp_new -> next; } if (asearch -> action != INSERT && asearch -> action != REPLACE) { if (asearch -> update_bonding) { showfrag = remove_bonds_from_project (this_proj, NULL, old_id, new_list, ((asearch -> action == DISPL) || (asearch -> action == RANMOVE)) ? FALSE : TRUE); } } else { i = this_proj -> coord -> totcoord[2] + edit -> coord -> totcoord[2]; showfrag = allocbool (i); for (j=0; j coord -> totcoord[2]; j++) { showfrag[j] = this_proj -> modelgl -> anim -> last -> img -> show_coord[2][j]; } for (j=this_proj -> coord -> totcoord[2]; j 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 = 0; while (tmp_new) { if (! passivating || old_id[tmp_new -> id] > 0) { 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; } 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; } /*tmp_add = to_add; while (tmp_add -> next) tmp_add = tmp_add -> next; for (i=0;inatomes; i++) { if (this_proj -> atoms[0][i].pick[1]) { tmp_add -> next = g_malloc0 (sizeof*tmp_add); tmp_add = tmp_add -> next; tmp_add -> id = i; tmp_add -> pick[1] = TRUE; } }*/ struct insert_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 (! passivating || (passivating && old_id[tmp_new -> id] > 0)) { this_proj -> atoms[0][i] = * duplicate_atom (tmp_new); if (! asearch -> update_bonding) tmp_new -> numv = 0; 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 (passivating) g_free (old_id); 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); 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, asearch -> update_bonding); #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 -> action == REMOVE) { if (! asearch -> update_bonding || passivating) { 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]); init_coordinates (this_proj, i, FALSE, TRUE); } this_proj -> 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 -> 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; } } /* * void clean_all_trees (atom_search * asearch, struct project * this_proj) * * Usage: clean all tree models in the 'model edition' window * * atom_search * asearch : the target atom search * struct project * this_proj : the target project */ void clean_all_trees (atom_search * asearch, struct 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]); 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); struct insert_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]; } /* * void apply_action (struct project * this_proj, atom_search * asearch) * * Usage: apply edition action * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void apply_action (struct 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); } /* * void prepare_random_action (struct project * this_proj, atom_search * asearch) * * Usage: prepare random action * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void prepare_random_action (struct project * this_proj, atom_search * asearch) { int i, j, k, l, m, n, o, p, q; double test, prob; struct insert_object * object = NULL; struct insert_object * tmp_oba, * tmp_obb; struct 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_insert_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_insert_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_insert_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_obb -> next = duplicate_insert_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; } } /* * gboolean do_we_have_objects_in_selection (struct project * this_proj, atom_search * asearch, gboolean editing) * * Usage: check for object(s) in selection to apply action * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * gboolean editing : actually going for action (1) or simply counting elements (0) */ gboolean do_we_have_objects_in_selection (struct 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_insert_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; struct insert_object * passivating_object = NULL; struct insert_object * pao = NULL; struct insert_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_insert_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_insert_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_insert_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_insert_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_insert_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_insert_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_insert_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_insert_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_insert_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_insert_object (pio); pao = passivating_object; pao -> id = l; } else { pao -> next = duplicate_insert_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; } /* * atom_search * duplicate_atom_search (atom_search * asearch) * * Usage: duplicate atom search data structure * * atom_search * 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 -> update_bonding = asearch -> update_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; } /* * G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) * * Usage: take edition action * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) { tint * id = (tint *)data; struct 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.12/src/opengl/edit/atom_coord.c000066400000000000000000000611071450232132300207450ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_coord.c' * * Contains: * - The subroutines to correct the coordination menus and data pointer after edition * * List of subroutines: int test_this_coord (struct project * this_proj, int spec, int gid, int cid, int minc, int maxc); void print_coord_info (struct project * this_proj, coord_info * coord); void clean_coords_and_geoms (struct 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 (struct 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); void recover_opengl_data (struct project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag, gboolean update_frag); coord_info * duplicate_coord_info (coord_info * old_coord); */ #include "atom_edit.h" /* * int test_this_coord (struct project * this_proj, int spec, int gid, int cid, int minc, int maxc) * * Usage: * * struct project * this_proj : the target project * int spec : the number of chemical species * int gid : the coordination type * int cid : the coordination id * int minc : min value for coordination id * int maxc : max value for coordination id */ int test_this_coord (struct 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; } /* * void print_coord_info (struct project * this_proj, coord_info * coord) * * Usage: print coordination info * * struct project * this_proj : the target project * coord_info * coord : the target coordination info */ void print_coord_info (struct 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 geolist[i][k][0]; for (k=0; k ntg[i][k]; l++) { min_bs[k] = min (min_bs[k], coord -> geolist[i][k][l]); max_bs[k] = max (max_bs[k], coord -> geolist[i][k][l]); } } 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 (" "); } } /* * coord_info * duplicate_coord_info (coord_info * old_coord) * * Usage: duplicate coordination information data structure * * coord_info * 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; } /* * void clean_coords_and_geoms (struct project * this_proj, atom_edition * edit, * int new_spec, int rem, int adds, int * spid, int *** tmpgeo, * gboolean * showcoord[2], gboolean * showpoly[2]) * * Usage: clean coordination data and atomic coordination id data * * struct project * this_proj : the target project * atom_edition * edit : * int new_spec : the number of chemical species * int rem : the number of chemical species to remove * int adds : the number of new chemical species * int * spid : the number of atom(s) by chemical species * int *** tmpgeo : the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' * gboolean * showcoord[2] : the coordination show status * gboolean * showpoly[2] : the polyhedra show status */ void clean_coords_and_geoms (struct 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 == 1) 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 == 1) 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]) { p = 0; break; } } } if (p) { //g_debug ("i= %d, tntg[m]= 1, m= %d", i, m); tntg[m] = 1; o = l; l ++; } // if (i == 1) 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); } 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; } } } /* * void new_coord_menus (struct 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) * * Usage: update coordination(s), fragment(s) and molecule(s) OpenGL menus and associated data pointers * * struct project * this_proj : the target project * coord_info * coord : the target coordination info data structure * int new_spec : the number of chemical species * int nmols : the number of fragment(s) to add * gboolean * showcoord[2] : the coordination show status * gboolean * showpoly[2] : the polyhedra show status * gboolean * showfrag : the fragment show status * gboolean update_it : update atoms data (and GTK3 menus) * gboolean update_frag : update fragment(s) data * gboolean update_mol : update molecule(s) data */ void new_coord_menus (struct 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) { 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]); } if (update_frag) { 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); } 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; } } else { for (i=0; i<2; i++) { this_proj -> modelgl -> adv_bonding[i] = FALSE; this_proj -> coord -> totcoord[i+2] = 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]); } if (update_frag) { 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]); } } /* * void recover_opengl_data (struct project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag, gboolean update_frag) * * Usage: recover image pointer data and OpenGL window menu structure * * struct project * this_proj : the target project * int nmols : the number of molecules * int add : the number of new chemical species * int rem : the number of chemical species to remove * int * num : the number of atom(s) by chemical species * int * rec : the lsit of removed chemical species, if any * int *** tmpgeo : the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' * gboolean * showfrag : the saved fragment(s) show information * gboolean update_frag : update fragment(s) / molecule(s) menus */ void recover_opengl_data (struct project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag, gboolean update_frag) { // 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, update_frag, (add || rem) ? FALSE : (! nmols) ? TRUE : FALSE); } Atomes-GNU-1.1.12/src/opengl/edit/atom_edit.c000066400000000000000000000450201450232132300205600ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_edit.c' * * Contains: * - The subroutines to create the model edition window * * List of subroutines: 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 (struct project * this_proj); void clean_other_window_after_edit (struct project * this_proj); void clean_atom_win (struct 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 (struct project * this_proj, GtkWidget * vbox); GtkWidget * create_edition_window (struct 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; /* * gboolean is_atom_win_active (glwin * view) * * Usage: is the model edition window visible ? * * glwin * view : the target glwin */ gboolean is_atom_win_active (glwin * view) { if (view -> atom_win) { return view -> atom_win -> visible; } return FALSE; } /* * void clean_coord_window (struct project * this_proj) * * Usage: update the environment configuration window after edtion * * struct project * this_proj : the target project */ void clean_coord_window (struct 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 } } /* * void clean_other_window_after_edit (struct project * this_proj) * * Usage: update other windows after model edition if required * * struct project * this_proj : the target project */ void clean_other_window_after_edit (struct 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); }*/ } /* * void clean_atom_win (struct project * this_proj) * * Usage: clean model edition data * * struct project * this_proj : the target project */ void clean_atom_win (struct 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, j; 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; } for (j=0; j<2; j++) this_proj -> modelgl -> rebuild[i][j] = FALSE; } clean_other_window_after_edit (this_proj); update (this_proj -> modelgl); } /* * G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) * * Usage: close model edition window * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); struct project * this_proj = get_project_by_id(id); gboolean leave = (this_proj -> 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 -> was_moved = FALSE; clean_atom_win (this_proj); } } #ifdef GTK4 /* * G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) * * Usage: model edition window close event callback GTK4 * * GtkWindow * widg : * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: model edition window close event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) * * Usage: reset model transformation toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) { if (gtk_check_button_get_active (but)) #else /* * G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) * * Usage: reset model transformation toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; struct 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 } } /* * G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) * * Usage: apply edition action callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); struct 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 -> was_moved = FALSE; //clean_atom_win (this_proj); } /* * GtkWidget * create_atom_notebook (struct project * this_proj, GtkWidget * vbox) * * Usage: create the model edition notebook * * struct project * this_proj : the target project * GtkWidget * vbox : the GtkWidget sending the signal */ GtkWidget * create_atom_notebook (struct 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; } /* * atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) * * Usage: allocate atom search data structure * * int proj : the target project id * int action : the edition action * int searchid : the atom search id * int 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 -> update_bonding = (get_project_by_id(proj) -> natomes > 10000) ? FALSE : TRUE; if (searchid != 5) allocate_todo (asearch, tsize); clean_picked_and_labelled (asearch); return asearch; } /* * GtkWidget * create_edition_window (struct project * this_proj) * * Usage: create the model edition window * * struct project * this_proj : the target project */ GtkWidget * create_edition_window (struct project * this_proj) { gchar * str = g_strdup_printf ("Model edition - %s", this_proj -> name); this_proj -> 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; } /* * void prepare_atom_edition (gpointer data, gboolean visible) * * Usage: prepare atom edition * * gpointer data : the associated data pointer * gboolean visible : is the window visible (1/0) */ void prepare_atom_edition (gpointer data, gboolean visible) { tint * id = (tint *) data; struct 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 /* * G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: open model edition window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) * * Usage: open model edition window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/edit/atom_edit.h000066400000000000000000000231301450232132300205630ustar00rootroot00000000000000/* 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 */ /* * This header file: 'atom_edit.h' * * Contains: */ #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 (struct 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, struct project * this_proj, int nsp); extern void free_glwin_spec_data (struct project * this_proj, int spec); extern void glwin_init_spec_data (struct 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 p); 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 struct insertion 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 (struct 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 struct insert_object * lib_object; extern float limit[2]; extern gchar * action_name[5]; extern gchar * action_atoms[3]; extern void check_all_trees (struct project * this_proj); extern struct insert_object * get_insert_object_by_origin (struct insert_object * first, int oid, int aid); extern void adjust_object_to_move (struct 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); extern void adjust_search_param (atom_search * asearch, struct 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, struct insert_object * object); extern void add_bonds_to_project (struct project * this_proj, int removed, int nbd, int ** new_bond_list); extern gboolean * remove_bonds_from_project (struct project * this_proj, struct insert_object * this_object, int * old_id, struct atom * new_list, gboolean remove); #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 (struct project * this_proj, atom_search * asearch); extern void to_passivate_using_the_objects (struct project * this_proj, atom_search * asearch); extern tint ulam_coord (glwin * view); extern void correct_pos_and_get_dim (struct insert_object * object, gboolean adjust); extern struct insert_object * duplicate_insert_object (struct insert_object * old_obj); extern struct insert_object * create_object_from_species (struct project * this_proj, int sid, atom_search * remove); extern void reconstruct_bonds (struct project * this_proj, int ifcl, int * bcid); extern void reconstruct_coordinates_for_object (struct insert_object * this_object, struct project * this_proj, gboolean upcoord); extern struct insert_object * create_object_from_selection (struct project * this_proj); extern struct insert_object * create_object_from_atom_coordination (struct project * this_proj, int coord, int aid, atom_search * remove); extern struct insert_object * create_object_from_overall_coordination (struct project * this_proj, int coord, int aid, atom_search * remove); extern struct insert_object * create_object_from_frag_mol (struct 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 (struct project * this_proj, int p); extern void clean_this_object (int orig, int act, struct project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, struct project * this_proj, atom_search * asearch, gboolean visible); extern int insert_this_project_from_lib (int id, gboolean visible, struct 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 (struct project * this_proj); extern void clean_coord_window (struct project * this_proj); extern GtkWidget * create_atom_notebook (struct project * this_proj, GtkWidget * vbox); extern double ** save_coordinates (struct project * this_proj, int status); extern void reset_coordinates (struct project * this_proj, int status); extern vec3_t get_bary (struct project * this_proj, int status); extern void init_coordinates (struct project * this_proj, int status, gboolean win, gboolean init); extern void translate (struct project * this_proj, int status, int axis, vec3_t trans); extern void rotate_quat (struct project * this_proj, vec4_t q, int status, int axis); extern void rotate (struct project * this_proj, int i, int j, int k, float param); extern void random_move (struct project * this_proj, atom_search * asearch); extern void update_coordinates (struct 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 (struct 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 (struct project * this_proj, atom_search * asearch); extern GtkWidget * add_motion_interaction (atom_search * asearch, int axd, struct project * this_proj); extern void apply_action (struct project * this_proj, atom_search * asearch); extern void clean_all_trees (atom_search * asearch, struct project * this_proj); extern gboolean do_we_have_objects_in_selection (struct 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, struct project * this_proj); extern int 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); extern void check_coord_modification (struct project * this_proj, int old_id[], struct atom * new_list, struct insert_object * this_object, gboolean movtion, gboolean passivating); extern void print_coord_info (struct project * this_proj, coord_info * coord); extern coord_info * duplicate_coord_info (coord_info * old_coord); extern void recover_opengl_data (struct project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag, gboolean update_frag); 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, struct insert_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.12/src/opengl/edit/atom_geo.c000066400000000000000000000242171450232132300204120ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_geo.c' * * Contains: * - The subroutines to insert a new atom coordination type during model edition * * List of subroutines: int 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, struct atom * new_list); void sort_partial_geo (int ** geom, int num_a); void check_coord_modification (struct project * this_proj, int * old_id, struct atom * new_list, struct insert_object * this_object, gboolean movtion, gboolean passivating); */ #include "atom_edit.h" /* * void sort_partial_geo (int ** geom, int num_a) * * Usage: sort partial geometries * * int ** geom : the data to sort * int 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; } } } } } /* * int 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) * * Usage: create a new geometry, for coordination type 'id' and chemical species 'new_sp' * * int id : the new coordination type (0 = total, 1 = partial) * coord_info * obj : the new coordination info * int * old_z : old Z list * int old_geo : the old coordination id * int old_sp : the old chemical species id * int new_sp : the new chemical species id * coord_info * coord : the old coordination info * double * new_z : new Z list */ int 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) { int i, j, k, l, m, n; int ** n_part, ** o_part; i = coord -> ntg[id][new_sp]; for (j=0; j geolist[id][old_sp][old_geo]; if (coord -> geolist[id][new_sp][j] == k) { if (! id) { return j; } k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) k ++; } l = 0; for (m=0; m species; m++) { if (coord -> partial_geo[new_sp][j][m]) l ++; } if (k == l) { // Same number of atoms in the coordination and num of spec // 2 structure de l size, [0]= Z, [1] = nato // Tri par Z // Comp n_part = allocdint (l, 2); o_part = allocdint (l, 2); l = 0; for (k=0; k species; k++) { if (coord -> partial_geo[new_sp][j][k]) { n_part[l][0] = (int)new_z[k]; n_part[l][1] = coord -> partial_geo[new_sp][j][k]; l ++; } } if (l > 1) sort_partial_geo (n_part, l); l = 0; for (k=0; k species; k++) { if (obj -> partial_geo[old_sp][old_geo][k]) { o_part[l][0] = old_z[k]; o_part[l][1] = obj -> partial_geo[old_sp][old_geo][k]; l ++; } } if (l > 1) sort_partial_geo (o_part, l); n = 1; for (k=0; k geolist[id][new_sp][j]; tmpgeol[i] = obj -> geolist[id][old_sp][old_geo]; if (id) { int ** tmp_part = NULL; if (coord -> ntg[id][new_sp]) { tmp_part = g_malloc0 (coord -> ntg[id][new_sp]*sizeof*tmp_part); for (j=0; j species, coord -> partial_geo[new_sp][j]); } g_free (coord -> partial_geo[new_sp]); } coord -> partial_geo[new_sp] = g_malloc0 ((coord -> ntg[id][new_sp]+1)*sizeof*coord -> partial_geo[new_sp]); if (tmp_part) { for (j=0; j partial_geo[new_sp][j] = duplicate_int (coord -> species, tmp_part[j]); } g_free (tmp_part); } coord -> partial_geo[new_sp][i] = allocint (coord -> species); for (j=0; j species; j++) { if (obj -> partial_geo[old_sp][old_geo][j] && old_z[j]) { l = find_spec_id (coord -> species, old_z[j], new_z); coord -> partial_geo[new_sp][i][l] = obj -> partial_geo[old_sp][old_geo][j]; } } } if (coord -> geolist[id][new_sp] != NULL) g_free (coord -> geolist[id][new_sp]); coord -> ntg[id][new_sp] ++; coord -> totcoord[id] ++; coord -> geolist[id][new_sp] = duplicate_int (coord -> ntg[id][new_sp], tmpgeol); g_free (tmpgeol); return i; } /* * gboolean is_in_atom_list (int aid, struct atom * new_list) * * Usage: is atom in list ? * * int aid : atom id * struct atom * new_list : the atom list to check */ gboolean is_in_atom_list (int aid, struct atom * new_list) { struct atom * tmp_new; tmp_new = new_list; while (tmp_new) { if (tmp_new -> id == aid) return TRUE; tmp_new = tmp_new -> next; } return FALSE; } /* * void check_coord_modification (struct project * this_proj, int * old_id, struct atom * new_list, * struct insert_object * this_object, gboolean movtion, gboolean passivating) * * Usage: check atom coordination modification on edition * * struct project * this_proj : the target project * int * old_id : the old atom id list, if any * struct atom * new_list : the new atom(s) list * struct insert_object * this_object : the object to insert, if any * gboolean movtion : move or remove = 1, else : 0 * gboolean passivating : passivate */ void check_coord_modification (struct project * this_proj, int * old_id, struct atom * new_list, struct insert_object * this_object, gboolean movtion, gboolean passivating) { struct 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; 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]; } 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; for (j=0; j<2; j++) { k = tmp_new -> coord[j]; new_coord -> geolist[j][i][0] = this_proj -> coord -> geolist[j][i][k]; } for (j=0; j nspec; j++) { new_coord -> partial_geo[i][0][j] = this_proj -> coord -> partial_geo[i][k][j]; } correct_it = FALSE; j = tmp_new -> id; for (k=0; k numv; k++) { l = tmp_new -> vois[k]; if ((movtion && ((old_id[j] > 0 && old_id[l] < 0) || (old_id[j] < 0 && old_id[l] > 0))) || (! movtion && ! is_in_atom_list (l, new_list))) { correct_it = TRUE; if (! passivating || h) { m = this_proj -> atoms[0][l].sp; new_coord -> partial_geo[i][0][m] --; for (n=0; n<2; n++) new_coord -> geolist[n][i][0] --; } } } 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_insert_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] = new_geo (j, new_coord, new_z, 0, i, i, this_object -> coord, old_z); } else { tmp_new -> coord[j] = new_geo (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); } Atomes-GNU-1.1.12/src/opengl/edit/atom_insert.c000066400000000000000000000116011450232132300211350ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_insert.c' * * Contains: * - The subroutines to insert bond(s) to a project * * List of subroutines: void add_bonds_to_project (struct project * this_proj, int removed, int nbd, int ** new_bond_list); void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, struct insert_object * object); void prepare_to_instert (gchar * key, struct project * this_proj, atom_search * asearch, gboolean visible); G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); */ #include "atom_edit.h" /* * void add_bonds_to_project (struct project * this_proj, int removed, int nbd, int ** new_bond_list) * * Usage: add bond list to project bond list * * struct project * this_proj : the target project * int removed : the number of atom(s) removed * int nbd : the number of bond(s) to add * int ** new_bond_list : the bond list to add */ void add_bonds_to_project (struct project * this_proj, int removed, int nbd, int ** new_bond_list) { int i, j; int ** tmpbondid = NULL; if (nbd) { i = this_proj -> modelgl -> bonds[0][0]; tmpbondid = allocdint (i+nbd, 2); for (j=0; j modelgl -> bondid[0][0][j][0]; tmpbondid[j][1] = this_proj -> modelgl -> bondid[0][0][j][1]; } if (this_proj -> modelgl -> allbonds[0]) g_free (this_proj -> modelgl -> bondid[0][0]); this_proj -> modelgl -> bondid[0][0] = allocdint (i+nbd, 2); for (j=0; j modelgl -> bondid[0][0][j][0] = tmpbondid[j][0]; this_proj -> modelgl -> bondid[0][0][j][1] = tmpbondid[j][1]; } for (j=0; j 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; g_free (tmpbondid); } } /* * void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, struct insert_object * object) * * Usage: add object bond(s) list to overall bond(s) list * * int ** new_bond_list : the bond list in the model * int nat : the number of atom(s) in the model * int nbd : the number of bond(s) in the model * struct insert_object * object : the target insert object */ void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, struct insert_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; } } } /* * void prepare_to_instert (gchar * key, struct project * this_proj, atom_search * asearch, gboolean visible) * * Usage: prepare to insert something * * gchar * key : the string describing the object to insert * struct project * this_proj : the target project * atom_search * asearch : the target atom search * gboolean visible : is the model edition window visible */ void prepare_to_instert (gchar * key, struct 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); } /* * G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) * * Usage: change the object to insert * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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)); struct 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.12/src/opengl/edit/atom_move.c000066400000000000000000001251361450232132300206100ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_move.c' * * Contains: * - The subroutines to move atom(s) and group of atom(s) - The subroutines to move randomly atom(s) and group of atom(s) - The subroutines to create the motion widgets of the model edition window * * List of subroutines: float get_limit (int mot, glwin * view); double ** save_coordinates (struct project * this_proj, int status); gboolean rebuild_selection (struct project * this_proj, atom_search * asearch, int filter); gboolean random_move_objects (struct project * this_proj, atom_search * asearch, int numo, int filter, int obj); gboolean move_objects (struct 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 (struct project * this_proj, int status); void init_coordinates (struct project * this_proj, int status, gboolean win, gboolean init); void translate (struct project * this_proj, int status, int axis, vec3_t trans); void rotate_quat (struct project * this_proj, vec4_t q, int status, int axis); void rotate (struct project * this_proj, int status, int axis, int raxis, float param); void random_move_this_atom (struct project * this_proj, int aid); void random_rotate_this_object (struct project * this_proj, struct insert_object * object, double ratio, double msd); void random_translate_this_object (struct project * this_proj, struct insert_object * object, double ratio, double msd); void random_move_this_object (struct project * this_proj, struct insert_object * object, int move, double msd); void trigger_refresh (struct project * this_proj, atom_search * asearch); void random_move (struct project * this_proj, atom_search * asearch); void translate_this_atom (struct project * this_proj, int aid, int axis, vec3_t trans); void translate_this_object (struct project * this_proj, struct insert_object * object, int axis, vec3_t trans); void rotate_this_object (struct project * this_proj, struct insert_object * object, int axis, int rax, float ang); void move_selection (struct project * this_proj, int action, int axis, vec3_t trans, float ang); void update_coordinates (struct project * this_proj, int status, int axis, int action); void update_range_and_entry (struct project * this_proj, int i, int j, int k); void range_has_changed (gpointer data, double v); void check_motion_interactors (struct 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, struct project * this_proj, int mot, int axd); GtkWidget * add_motion_interaction (atom_search * asearch, int axd, struct project * this_proj); */ #include "atom_edit.h" gboolean * was_moved_atom; /* * double ** save_coordinates (struct project * this_proj, int status) * * Usage: save atomic coordinates * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ double ** save_coordinates (struct 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; } /* * void reset_coordinates (struct project * this_proj, int status) * * Usage: reset transformation and restore saved atomic coordinates * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ void reset_coordinates (struct 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 ++; } } } } /* * vec3_t get_bary (struct project * this_proj, int status) * * Usage: get barycenter of atomic coordinates * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ vec3_t get_bary (struct 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; } /* * void init_coordinates (struct project * this_proj, int status, gboolean win, gboolean init) * * Usage: preserve atomic coordinates * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * gboolean win : is the model edition window opened ? * gboolean init : preserve atomic coordinates */ void init_coordinates (struct 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); } } /* * void translate (struct project * this_proj, int status, int axis, vec3_t trans) * * Usage: translate * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * int axis : 0 = model, 1 = eye * vec3_t trans : translation vector */ void translate (struct 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; } } } } /* * void rotate_quat (struct project * this_proj, vec4_t q, int status, int axis) * * Usage: rotate using quaternion * * struct project * this_proj : the target project * vec4_t q : rotation quaternion * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * int axis : 0 = model, 1 = eye */ void rotate_quat (struct 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; } } } /* * void rotate (struct project * this_proj, int status, int axis, int raxis, float param) * * Usage: rotate * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * int axis : 0 = model, 1 = eye * int raxis : rotation axis 0 = x, 1 = y, 2 = z * float param : rotation angle */ void rotate (struct 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); } /* * void random_move_this_atom (struct project * this_proj, int aid) * * Usage: random move atom * * struct project * this_proj : the target project * int aid : the atom id */ void random_move_this_atom (struct 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; } } } /* * void random_rotate_this_object (struct project * this_proj, struct insert_object * object, double ratio, double msd) * * Usage: random rotate an object * * struct project * this_proj : the target project * struct insert_object * object : the object to rotate * double ratio : ratio translation / rotation * double msd : the MSD */ void random_rotate_this_object (struct project * this_proj, struct insert_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; } } } } /* * void random_translate_this_object (struct project * this_proj, struct insert_object * object, double ratio, double msd) * * Usage: random translate an object * * struct project * this_proj : the target project * struct insert_object * object : the object to translate * double ratio : ratio translation / rotation * double msd : the MSD */ void random_translate_this_object (struct project * this_proj, struct insert_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; } } /* * void random_move_this_object (struct project * this_proj, struct insert_object * object, int move, double msd) * * Usage: random move object * * struct project * this_proj : the target project * struct insert_object * object : the object to move * int move : the number of times to repeat the motion * double msd : the MSD */ void random_move_this_object (struct project * this_proj, struct insert_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; } } /* * void trigger_refresh (struct project * this_proj, atom_search * asearch) * * Usage: refresh search tree model * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void trigger_refresh (struct project * this_proj, atom_search * asearch) { clean_all_trees (asearch, this_proj); // = TRUE; this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == DISPL) ? 0 : 1] = asearch -> update_bonding; update_search_tree (this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2]); check_all_trees (this_proj); } /* * gboolean rebuild_selection (struct project * this_proj, atom_search * asearch, int filter) * * Usage: rebuild selection (split fragments linked thru PBC) * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int filter : the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) */ gboolean rebuild_selection (struct 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; struct insert_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 (object, this_proj, 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; } } /* * gboolean random_move_objects (struct project * this_proj, atom_search * asearch, int numo, int filter, int obj) * * Usage: random move object(s) * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int numo : the number of object(s) to move * int filter : the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) * int obj : the object (0 = atom(s), 1 = group of atoms) */ gboolean random_move_objects (struct project * this_proj, atom_search * asearch, int numo, int filter, int obj) { struct insert_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; } /* * void random_move (struct project * this_proj, atom_search * asearch) * * Usage: random move * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void random_move (struct 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 -> update_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 -> 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); } /* * void translate_this_atom (struct project * this_proj, int aid, int axis, vec3_t trans) * * Usage: translate atom * * struct project * this_proj : the target project * int aid : atom id * int axis : 0 = model, 1 = eye * vec3_t trans : translation vector */ void translate_this_atom (struct 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; } /* * void translate_this_object (struct project * this_proj, struct insert_object * object, int axis, vec3_t trans) * * Usage: translate object * * struct project * this_proj : the target project * struct insert_object * object : the object to translate * int axis : 0 = model, 1 = eye * vec3_t trans : the translation vector */ void translate_this_object (struct project * this_proj, struct insert_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; } } } /* * void rotate_this_object (struct project * this_proj, struct insert_object * object, int axis, int rax, float ang) * * Usage: rotate object * * struct project * this_proj : the target project * struct insert_object * object : the object to rotate * int axis : 0 = model, 1 = eye * int rax : the rotation axis * float ang : the rotation angle */ void rotate_this_object (struct project * this_proj, struct insert_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; } } } /* * gboolean move_objects (struct project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) * * Usage: move objects, return reconstruction status * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int action : 0 = translation, 1 = rotation * int axis : 0 = model, 1 = eye * vec3_t trans : the translation vector, if any * float ang : the rotation angle, if any */ gboolean move_objects (struct 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)); } struct insert_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); /* * void move_selection (struct project * this_proj, int action, int axis, vec3_t trans, float ang) * * Usage: move atom selection * * struct project * this_proj : the target project * int action : 0 = translation, 1 = rotation * int axis : 0 = model, 1 = eye * vec3_t trans : the translation vector, if any * float ang : the rotation angle, if any */ void move_selection (struct 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 -> update_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); } } /* * void update_coordinates (struct project * this_proj, int status, int axis, int action) * * Usage: update atomic coordinates on motion * * struct project * this_proj : the target project * int status : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * int axis : axis, 0 = model, 1 = eye * int action : 0 = translation, 1 = rotation */ void update_coordinates (struct 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 -> 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); } } /* * G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) * * Usage: repeat motion callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) { struct project * this_proj = (struct project *)data; this_proj -> modelgl -> atom_win -> repeat_move = gtk_spin_button_get_value_as_int(res); } /* * void update_range_and_entry (struct project * this_proj, int i, int j, int k) * * Usage: update motion range * * struct project * this_proj : the target project * int i : selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) * int j : axis, 0 = model, 1 = eye * int k : entry id from 0 (0 - 2 : translation) to 5 (3 - 5 : rotation) */ void update_range_and_entry (struct 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]); } /* * float get_limit (int mot, glwin * view) * * Usage: get motion limit * * int mot : translation (0) or rotation (1) * glwin * 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]; } } /* * void range_has_changed (gpointer data, double v) * * Usage: motion * * gpointer data : the associated data pointer * double v : the value for motion */ void range_has_changed (gpointer data, double v) { tint * id = (tint *)data; struct 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); } } /* * G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) * * Usage: motion callback - entry * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) * * Usage: motion callback - range * * GtkRange * range : the GtkRange sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) { range_has_changed (data, gtk_range_get_value (range)); } /* * G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: motion callback - scroll * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) * * Usage: set motion axis (eye or model) * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; struct 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 /* * G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) * * Usage: set show / hide motion axis toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) * * Usage: set show / hide motion axis toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; struct 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); } /* * void check_motion_interactors (struct project * this_proj, atom_search * asearch) * * Usage: add motion check button * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void check_motion_interactors (struct 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); } } } } /* * GtkWidget * create_axis_entries (atom_search * asearch, struct project * this_proj, int mot, int axd) * * Usage: create axis entries * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int mot : translation (0) or rotation (1) * int axd : axis (0 = x, 1 = y, 2 = z) */ GtkWidget * create_axis_entries (atom_search * asearch, struct 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; } /* * GtkWidget * add_motion_interaction (atom_search * asearch, int axd, struct project * this_proj) * * Usage: add motion interaction widgets * * atom_search * asearch : the target atom search * int axd : translation (0) or rotation (1) * struct project * this_proj : the target project */ GtkWidget * add_motion_interaction (atom_search * asearch, int axd, struct 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.12/src/opengl/edit/atom_object.c000066400000000000000000001314241450232132300211050ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_object.c' * * Contains: * - The subroutines to create insert objects * * List of subroutines: int in_object_bond_list (struct insert_object * object, int aid, int bid); int create_object_from_open_project (struct project * this_proj, int p); double get_object_dim (struct insert_object * object); gboolean rebuild_atom_neighbors (struct project * this_proj, int step, struct insert_object * object, int target, int aid, struct atom * at, gboolean * checked_at); void correct_pos_and_get_dim (struct insert_object * object, gboolean adjust); void reconstruct_bonds (struct project * this_proj, int ifcl, int * bcid); void reconstruct_coordinates (struct project * this_proj, struct insert_object * this_object, gboolean upcoord); void reconstruct_coordinates_for_object (struct insert_object * this_object, struct project * this_proj, gboolean upcoord); void correct_coordinates_for_object (struct project * this_proj, struct insert_object * this_object, gboolean upcoord); void create_object_from_library (int p); void clean_object_vois (struct project * this_proj, struct insert_object * object, int * new_id, gboolean movtion); void clean_object_bonds (struct project * proj, int o_step, struct insert_object * object, int * new_id, gboolean movtion); void add_object_atoms (struct insert_object * this_object, struct project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove); void adjust_object_frag_coord (struct insert_object * object); void clean_this_object (int orig, int act, struct project * this_proj, atom_search * asearch); void to_insert_in_project (int stat, int orig, struct project * this_proj, atom_search * asearch, gboolean visible); struct insert_object * duplicate_insert_object (struct insert_object * old_obj); struct insert_object * create_object_from_species (struct project * this_proj, int sid, atom_search * remove); struct insert_object * create_object_from_selection (struct project * this_proj); struct insert_object * create_object_from_atom_coordination (struct project * this_proj, int coord, int aid, atom_search * remove); struct insert_object * create_object_from_overall_coordination (struct project * this_proj, int coord, int aid, atom_search * remove); struct insert_object * create_object_from_frag_mol (struct project * this_proj, int coord, int geo, atom_search * remove); tint ulam_coord (glwin * view); */ #include "atom_edit.h" /* * double get_object_dim (struct insert_object * object) * * Usage: get estimate of an object dimension * * struct insert_object * object : */ double get_object_dim (struct insert_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; } /* * void correct_pos_and_get_dim (struct insert_object * object, gboolean adjust) * * Usage: get the barycenter of the atomic coordinates of an object * * struct insert_object * object : the target insert object * gboolean adjust : center object coordinates or not */ void correct_pos_and_get_dim (struct insert_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); } /* * gboolean rebuild_atom_neighbors (struct project * this_proj, int step, struct insert_object * object, int target, int aid, struct atom * at, gboolean * checked_at) * * Usage: rebuild target atom id coordinates using PBC * * struct project * this_proj : the target project * int step : the MD step * struct insert_object * object : the target insert object * int target : the target atom id to correct * int aid : the atom id * struct atom * at : the target atom * gboolean * checked_at : the list of already checked/corrected atom coordinates id */ gboolean rebuild_atom_neighbors (struct project * this_proj, int step, struct insert_object * object, int target, int aid, struct atom * at, gboolean * checked_at) { int i, j; struct 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; } /* * void reconstruct_bonds (struct project * this_proj, int ifcl, int * bcid) * * Usage: reconstruct the project bond(s)/clone(s) lists after reconstruction using PBC * * struct project * this_proj : the target project * int ifcl : number of clone bond(s) removed * int * bcid : the removed clone bond(s) atoms id */ void reconstruct_bonds (struct 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; } } /* * void reconstruct_coordinates (struct project * this_proj, struct insert_object * this_object, gboolean upcoord) * * Usage: reconstruct object atomic coordinates using PBC * * struct insert_object * this_object : the target project * struct project * this_proj : the target insert object * gboolean upcoord : reconstruction of atomic coordinates using PBC ? */ void reconstruct_coordinates (struct project * this_proj, struct insert_object * this_object, gboolean upcoord) { int h, i, j, k; 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; } } } /* * void reconstruct_coordinates_for_object (struct insert_object * this_object, struct project * this_proj, gboolean upcoord) * * Usage: target rebuild of object atomic coordinates using PBC and preserve new atomic coordinates for project * * struct insert_object * this_object : the target project * struct project * this_proj : the target insert object * gboolean upcoord : reconstruction of atomic coordinates using PBC ? */ void reconstruct_coordinates_for_object (struct insert_object * this_object, struct project * this_proj, gboolean upcoord) { int i, j, k; reconstruct_coordinates (this_proj, this_object, upcoord); if (upcoord) { if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> win) { for (j=0; j<2; j++) this_proj -> modelgl -> saved_coord[j] = save_coordinates (this_proj, j); } } else if (this_proj -> modelgl -> mode == EDITION) { if (this_proj -> modelgl -> saved_coord[2]) { for (i=0; i< this_object -> atoms; i++) { k = this_object -> at_list[i].id; this_proj -> modelgl -> saved_coord[2][k][0] = this_object -> at_list[i].x + this_object -> baryc[0]; this_proj -> modelgl -> saved_coord[2][k][1] = this_object -> at_list[i].y + this_object -> baryc[1]; this_proj -> modelgl -> saved_coord[2][k][2] = this_object -> at_list[i].z + this_object -> baryc[2]; } } } } } /* * void correct_coordinates_for_object (struct project * this_proj, struct insert_object * this_object, gboolean upcoord) * * Usage: correct the atomic coordinates for 'this_object' * * struct project * this_proj : the target project * struct insert_object * this_object : the target insert object * gboolean upcoord : reconstruction of atomic coordinates using PBC ? */ void correct_coordinates_for_object (struct project * this_proj, struct insert_object * this_object, gboolean upcoord) { if (this_object -> ifcl) { if (upcoord) { reconstruct_coordinates_for_object (this_object, this_proj, 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); } } /* * tint ulam_coord (glwin * view) * * Usage: shift insertion position for object not to have overlapping objects for multiple/repeated insertions * * glwin * 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; struct insert_object * lib_object; /* * struct insert_object * duplicate_insert_object (struct insert_object * old_obj) * * Usage: duplicate an insert object * * struct insert_object * old_obj : the insert object to duplicate */ struct insert_object * duplicate_insert_object (struct insert_object * old_obj) { struct insert_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; } /* * void create_object_from_library (int p) * * Usage: create object using the molecular library * * int 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); struct 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; } /* * int in_object_bond_list (struct insert_object * object, int aid, int bid) * * Usage: is there a bond between atom aid and atom bid ? * * struct insert_object * object : the target insert object * int aid : 1st atom id * int bid : 2nd atom id */ int in_object_bond_list (struct insert_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; } /* * void clean_object_vois (struct project * this_proj, struct insert_object * object, int * new_id, gboolean movtion) * * Usage: clean the object neigbours list * * struct project * this_proj : the target project * struct insert_object * object : the target insert object * int * new_id : list of atom's old id in the project 'this_proj' * gboolean movtion : reconstruction of atomic coordinates using PBC ? */ void clean_object_vois (struct project * this_proj, struct insert_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); } } } /* * void clean_object_bonds (struct project * proj, int o_step, struct insert_object * object, int * new_id, gboolean movtion) * * Usage: create the object bond list, and adjust the bond's atom id * * struct project * proj : the target project * int o_step : the MD step * struct insert_object * object : the target insert object * int * new_id : list of atom's old id in the project 'this_proj' * gboolean movtion : reconstruction of atomic coordinates using PBC ? */ void clean_object_bonds (struct project * proj, int o_step, struct insert_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); } /* * void add_object_atoms (struct insert_object * this_object, struct project * this_proj, * int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove) * * Usage: add atom list to insert object * * struct insert_object * this_object : the target insert object * struct project * this_proj : the target project * int o_step : the MD step * int numa : number of atom(s) * int * old_id : list of atom's old id in the project 'this_proj' * gboolean alloc_new_id : do atom(s) id change ? (partial copy or not) * atom_search * remove : remove search, if any */ void add_object_atoms (struct insert_object * this_object, struct project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove) { int i, j, k; this_object -> atoms = numa; this_object -> at_list = g_malloc0 (this_object -> atoms*sizeof*this_object -> at_list); int * tmpsp = allocint (this_proj -> nspec); 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; k = this_proj -> atoms[o_step][j].sp; this_object -> old_z[k] = (int) this_proj -> chemistry -> chem_prop[CHEM_Z][k]; tmpsp[k] = 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]; } } for (i=0; i nspec; i++) if (tmpsp[i]) this_object -> species ++; g_free (tmpsp); gboolean movtion = ((object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0])); if (alloc_new_id) { clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); check_coord_modification (this_proj, NULL, & this_object -> at_list[0], this_object, FALSE, FALSE); } g_free (old_id); g_free (new_id); correct_coordinates_for_object (this_proj, this_object, movtion); } /* * struct insert_object * create_object_from_species (struct project * this_proj, int sid, atom_search * remove) * * Usage: create object from all atom(s) of the same chemical species * * struct project * this_proj : the target project * int sid : the species id * atom_search * remove : remove search, if any */ struct insert_object * create_object_from_species (struct project * this_proj, int sid, atom_search * remove) { int i, j; struct insert_object * this_object = g_malloc0 (sizeof*this_object); int o_step = this_proj -> 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 = 1; this_object -> old_z = allocint (this_proj -> nspec); this_object -> old_z[sid] = (int) this_proj -> chemistry -> chem_prop[CHEM_Z][sid]; int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean alloc_new_id = 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) alloc_new_id = TRUE; new_id[i] = j+1; i ++; } } add_object_atoms (this_object, this_proj, o_step, i, new_id, alloc_new_id, remove); return this_object; } /* * struct insert_object * create_object_from_selection (struct project * this_proj) * * Usage: create object from atom selection * * struct project * this_proj : the target project */ struct insert_object * create_object_from_selection (struct project * this_proj) { int i, j; struct insert_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 = allocint (this_proj -> nspec); i = 0; int * new_id = NULL; new_id = allocint(this_proj -> natomes); gboolean alloc_new_id = FALSE; for (j=0; j natomes; j++) { if (pasted_todo[j]) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) alloc_new_id = TRUE; i ++; } } add_object_atoms (this_object, this_proj, o_step, i, new_id, alloc_new_id, NULL); if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } return this_object; } /* * struct insert_object * create_object_from_atom_coordination (struct project * this_proj, int coord, int aid, atom_search * remove) * * Usage: create object from an atom and its nearest neighbors * * struct project * this_proj : the target project * int coord : 0 = total coordination, 1 = partial coordination * int aid : the atom id * atom_search * remove : remove search, if any */ struct insert_object * create_object_from_atom_coordination (struct project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k, l, m; struct insert_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); l = 1; m = this_proj -> atoms[o_step][aid].coord[1]; for (k=0; k nspec; k++) { if (k != j && this_proj -> coord -> partial_geo[j][m][k]) l ++; } this_object -> species = l; this_object -> old_z = allocint (this_proj -> nspec); this_object -> old_z[j] = (int) this_proj -> chemistry -> chem_prop[CHEM_Z][j]; 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]); k = this_proj -> atoms[o_step][j].sp; this_object -> old_z[k] = (int) this_proj -> chemistry -> chem_prop[CHEM_Z][k]; } 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; } /* * struct insert_object * create_object_from_overall_coordination (struct project * this_proj, int coord, int aid, atom_search * remove) * * Usage: create object from all the atom(s) that have the same exact coordination than the target atom * * struct project * this_proj : the target project * int coord : 0 = total coordination, 1 = partial coordination * int aid : target atom id * atom_search * remove : remove search, if any */ struct insert_object * create_object_from_overall_coordination (struct project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k, l, m, n; struct insert_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 -> old_z = allocint (this_proj -> nspec); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; this_object -> species = this_proj -> nspec; int * new_id = NULL; new_id = allocint(this_proj -> natomes); gchar * str; gboolean alloc_new_id; 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) { alloc_new_id = TRUE; str = g_strdup_printf ("%d-fold", i); } else { alloc_new_id = FALSE; 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; alloc_new_id = FALSE; 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) alloc_new_id = 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); add_object_atoms (this_object, this_proj, o_step, j, new_id, alloc_new_id, remove); return this_object; } /* * struct insert_object * create_object_from_frag_mol (struct project * this_proj, int coord, int geo, atom_search * remove) * * Usage: create object from a fragment or a molecule * * struct project * this_proj : the target project * int coord : 2 = fragment, 3 = molecule * int geo : fragment or molecule id * atom_search * remove : remove search, if any */ struct insert_object * create_object_from_frag_mol (struct project * this_proj, int coord, int geo, atom_search * remove) { int i, j; struct insert_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 -> old_z = allocint (this_proj -> nspec); int * new_id = NULL; new_id = allocint(this_proj -> natomes); gboolean alloc_new_id = 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) alloc_new_id = TRUE; i++; } } add_object_atoms (this_object, this_proj, o_step, i, new_id, alloc_new_id, remove); return this_object; } /* * void adjust_object_frag_coord (struct insert_object * object) * * Usage: adjust object number of fragment(s) * * struct insert_object * object : the target insert object */ void adjust_object_frag_coord (struct insert_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); } /* * int create_object_from_open_project (struct project * this_proj, int p) * * Usage: create object from atom(s) of a project opened in the workspace * * struct project * this_proj : the target project * int p : the project id of the project that contains the atom(s) to copy */ int create_object_from_open_project (struct project * this_proj, int p) { int i, j, k; lib_object = g_malloc0 (sizeof*lib_object); struct 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 = allocint (other_proj -> nspec); int * new_id = NULL; gboolean alloc_new_id = (i > 1 && (other_proj -> modelgl -> bonds[o_step][0] || other_proj -> modelgl -> bonds[o_step][1])) ? TRUE : FALSE; if (alloc_new_id) new_id = allocint (other_proj -> natomes); if (this_proj -> modelgl -> other_status == 2) { for (j=0; j atoms[o_step][j].sp; lib_object -> old_z[k] = (int) other_proj -> chemistry -> chem_prop[CHEM_Z][k]; lib_object -> at_list[j] = * duplicate_atom (& other_proj -> atoms[o_step][j]); if (alloc_new_id) 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) { k = other_proj -> atoms[o_step][j].sp; lib_object -> old_z[k] = (int)other_proj -> chemistry -> chem_prop[CHEM_Z][k]; lib_object -> at_list[i] = * duplicate_atom (& other_proj -> atoms[o_step][j]); if (alloc_new_id) 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 ++; } } } clean_object_bonds (other_proj, o_step, lib_object, new_id, alloc_new_id); if (alloc_new_id) { g_free (new_id); new_id = NULL; } if (this_proj -> modelgl -> other_status < 2 && i < other_proj -> natomes) 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 (this_proj -> modelgl -> other_status < 2 && i < other_proj -> natomes) adjust_object_frag_coord (lib_object); return FROM_PROJECT; } /* * void clean_this_object (int orig, int act, struct project * this_proj, atom_search * asearch) * * Usage: clean object data * * int orig : - (fragmol id/species id +1), -1, or, orgin atom id * int act : action in enum 'actions' * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void clean_this_object (int orig, int act, struct project * this_proj, atom_search * asearch) { struct insert_object * tmp_object = NULL; struct insert_object * object; switch (asearch -> action) { case REPLACE: object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; 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; g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[act]); object -> prev = NULL; switch (asearch -> action) { case REPLACE: this_proj -> modelgl -> atom_win -> to_be_inserted[act] = object; break; default: this_proj -> modelgl -> atom_win -> to_be_moved[act] = object; break; } } else { g_free (object); switch (asearch -> action) { case REPLACE: object = this_proj -> modelgl -> atom_win -> to_be_inserted[act] = NULL; break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act] = NULL; break; } } } } else { object = object -> next; } } } /* * void to_insert_in_project (int stat, int orig, struct project * this_proj, atom_search * asearch, gboolean visible) * * Usage: to insert object in project * * int stat : in enum object_types * int orig : - (fragmol id/species id +1), -1, or, orgin atom id * struct project * this_proj : the target project * atom_search * asearch : the target atom search * gboolean visible : is the model edition window visible ? */ void to_insert_in_project (int stat, int orig, struct project * this_proj, atom_search * asearch, gboolean visible) { int i, j; struct insert_object * tmp_object = NULL; struct insert_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 ((! 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_insert_object (copied_object); tint ulam; tmp_object = NULL; vec3_t coor_ins = vec3 (0.0,0.0,0.0); if (! visible) { if (act > 0 && 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); } } 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_insert_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_insert_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.12/src/opengl/edit/atom_remove.c000066400000000000000000000531461450232132300211400ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_remove.c' * * Contains: * - The subroutines to remove bond(s) from a project - The subroutine to prepare the passivation (removal followed by insertion) * * List of subroutines: int test_this_fragment (int natomes, int fcoord, int fid, struct atom * new_list, int tmpbond[2], int ** tmpbondid[2], int * old_id, gboolean remove); gboolean * remove_bonds_from_project (struct project * this_proj, struct insert_object * this_object, int * old_id, struct atom * new_list, gboolean remove); void set_mol_data (int the_atom, int the_mol); void to_remove_this_list_of_objects (struct project * this_proj, atom_search * asearch); void to_passivate_using_the_objects (struct project * this_proj, atom_search * asearch); struct atom * get_atom_pointer (int aid, struct atom * new_list); */ #include "atom_edit.h" int tmbs; int molcounter; int atoms_in_frag; 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); /* * void set_mol_data (int the_atom, int the_mol) * * Usage: set molecule id for atom * * int the_atom : the atom id * int the_mol : the molecule id */ void set_mol_data (int the_atom, int the_mol) { int ac, ad; molcounter ++; togl[the_atom] = the_mol; tmbs ++; if (molcounter == 10000) goto end; if (tmbs == atoms_in_frag) goto end; for (ac=0; ac < contacts[the_atom]; ac++) { ad = ats_id[neighbors[the_atom][ac]]; if (! togl[ad] && molcounter < 100000) set_mol_data (ad, the_mol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto end; } molcounter --; end:; } /* * int test_this_fragment (int natomes, int fcoord, int fid, struct atom * new_list, int tmpbond[2], int ** tmpbondid[2], int * old_id, gboolean remove) * * Usage: verify that all atom(s) in the fragment are connected somehow, otherwise create new fragment * * int natomes : number of atom(s) * int fcoord : the number of fragment(s) * int fid : the fragment id * struct atom * new_list : the atom(s) list * int tmpbond[2] : the number of bond(s) and clone bond(s) * int ** tmpbondid[2] : the bond atoms id list * int * old_id : the atom(s) id list * gboolean remove : remove (1) or motion (0) action */ int test_this_fragment (int natomes, int fcoord, int fid, struct atom * new_list, int tmpbond[2], int ** tmpbondid[2], int * old_id, gboolean remove) { int i, j, k, l, m, n; struct atom * tmp_list; gboolean modif; for (i=0; i<2; i++) { if (i) { ats_in_frag = allocint(k); ats_id = allocint(natomes); contacts = allocint(k); neighbors = allocdint(k, k); togl = allocint(k); } k = 0; tmp_list = new_list; while (tmp_list) { modif = FALSE; if (! remove) { modif = TRUE; } else if (old_id) { if (old_id[tmp_list -> id] > 0) modif = TRUE; } if (modif) { if (tmp_list -> coord[2] == fid) { if (i) { ats_in_frag[k] = tmp_list -> id; ats_id[tmp_list -> id] = k; } k ++; } } tmp_list = tmp_list -> next; } } atoms_in_frag = k; // Build neighbors map for frag fid for (i=0; i 0 && togl[i] == totmol) { for (j=0; j 1) { j = ats_in_frag[i]; tmp_list = new_list; while (tmp_list -> id != j) tmp_list = tmp_list -> next; tmp_list -> coord[2] = fcoord + togl[i] - 2; } l = max (l, togl[i]); } g_free (ats_in_frag); g_free (ats_id); g_free (contacts); g_free (neighbors); g_free (togl); return l-1; } /* * struct atom * get_atom_pointer (int aid, struct atom * new_list) * * Usage: return atom structure with matching id * * int aid : the atom id * struct atom * new_list : the atom(s) list */ struct atom * get_atom_pointer (int aid, struct atom * new_list) { struct atom * tmp_list; tmp_list = new_list; while (tmp_list) { if (tmp_list -> id == aid) return tmp_list; } return NULL; } /* * gboolean * remove_bonds_from_project (struct project * this_proj, struct insert_object * this_object, int * old_id, struct atom * new_list, gboolean remove) * * Usage: remove bond(s) from project * * struct project * this_proj : the target project * struct insert_object * this_object : the target insert object, if any * int * old_id : the atom(s) id list * struct atom * new_list : the new atom list * gboolean remove : remove (1) or motion (0) action */ gboolean * remove_bonds_from_project (struct project * this_proj, struct insert_object * this_object, int * old_id, struct atom * new_list, gboolean remove) { int h, i, j, k, l, m; int tmpbond[2]; int ** tmpbondid[2]; struct atom * tmp_list; gboolean split = FALSE; gboolean * frag_to_test; int * per_frag; int * in_frag; int * tmp_vois = NULL; int * id_mod = NULL; int * id_frag = 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; }*/ // The next lines refresh the bonding information without calculating the distance matrix tmp_list = new_list; tmp_vois = allocint (20); h = -1; if (this_proj) { id_mod = allocint (this_proj -> natomes); while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || (! remove && old_id[i] < 0)) { h ++; id_mod[i] = h; } if (tmp_list -> numv > 0) { k = 0; if (old_id[i] > 0) { for (j=0; j numv; j++) { l = tmp_list -> vois[j]; if (old_id[l] > 0) { tmp_vois[k] = l; k ++; } } } else if (! remove && old_id[i] < 0) { for (j=0; j numv; j++) { l = tmp_list -> vois[j]; if (old_id[l] < 0) { tmp_vois[k] = l; k ++; } } } g_free (tmp_list -> vois); tmp_list -> vois = NULL; tmp_list -> numv = k; if (k) { tmp_list -> vois = allocint (k); for (j=0; j vois[j] = tmp_vois[j]; } } tmp_list = tmp_list -> next; } g_free (tmp_vois); tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || (! remove && old_id[i] < 0)) { 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; } } int tcf = (this_proj) ? this_proj -> coord -> totcoord[2] : this_object -> coord -> totcoord[2]; int nat = (this_proj) ? this_proj -> natomes : this_object -> atoms; if (tcf) { frag_to_test = allocbool (tcf + 1); per_frag = allocint (tcf + 1); in_frag = allocint (tcf + 1); for (i=0; i atoms[0][i].coord[2] : this_object -> at_list[i].coord[2]; per_frag[j] ++; if (this_proj) { if (old_id[i] > 0 || (! remove && old_id[i] <0)) in_frag[j] ++; } else { in_frag[j] ++; } } for (i=0; i 1) { frag_to_test[i] = TRUE; split = TRUE; } } } for (i=0; i<2; i++) { tmpbondid[i] = NULL; tmpbond[i] = 0; } if (this_proj) { 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]); } } } else { tmpbond[0] = this_object -> bonds; tmpbondid[0] = allocdint (this_object -> bonds, 2); for (i=0; i bonds; i++) { tmpbondid[0][i][0] = this_object -> ibonds[i][0]; tmpbondid[0][i][1] = this_object -> ibonds[i][1]; } } gboolean * show_this; gboolean * showfrag = NULL; if (split) { if (this_proj) { show_this = duplicate_bool (this_proj -> coord -> totcoord[2], this_proj -> modelgl -> anim -> last -> img -> show_coord[2]); showfrag = duplicate_bool (this_proj -> coord -> totcoord[2], this_proj -> modelgl -> anim -> last -> img -> show_coord[2]); } if (! remove) { if (this_proj) { tmp_list = new_list; while (tmp_list) { j = tmp_list -> id; if (old_id[j] < 0) { tmp_list -> coord[2] = this_proj -> coord -> totcoord[2]; } tmp_list = tmp_list -> next; } frag_to_test[tcf] = TRUE; tcf ++; g_free (showfrag); showfrag = allocbool (tcf); for (m=0; m id] > 0) { if (tmp_list -> coord[2] > i-l) { tmp_list -> coord[2] --; } } } else { if (tmp_list -> coord[2] > i-l) { tmp_list -> coord[2] --; } } tmp_list = tmp_list -> next; } if (this_proj) { g_free (showfrag); showfrag = allocbool (tcf-1); for (m=0; m 0) { if (this_proj) { g_free (showfrag); showfrag = allocbool (tcf+k); for (m=0; m id; if ((this_proj && (old_id[j] > 0 || (! remove && old_id[j] <0))) || this_object) { if (! id_frag[tmp_list -> coord[2]]) { id_frag[tmp_list -> coord[2]] = i+1; i ++; } } tmp_list = tmp_list -> next; } tmp_list = new_list; while (tmp_list) { tmp_list -> coord[2] = id_frag[tmp_list -> coord[2]] - 1; tmp_list = tmp_list -> next; } if (i < tcf) { if (this_proj && split) { show_this = allocbool (i); for (j=0; j coord -> totcoord[2] = tcf; } else { this_object -> coord -> totcoord[2] = tcf; } if (id_frag) { g_free (id_frag); id_frag = NULL; } if (this_proj) { struct 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 (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 showfrag; } /* * void to_remove_this_list_of_objects (struct project * this_proj, atom_search * asearch) * * Usage: prepaer to remove a list of object(s) from a project, one object after another. * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void to_remove_this_list_of_objects (struct project * this_proj, atom_search * asearch) { int i, j; struct insert_object * tmp_object; struct insert_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; } /* * void to_passivate_using_the_objects (struct project * this_proj, atom_search * asearch) * * Usage: prepare passivation (delete of an object, then insertion of another one at the same location) * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void to_passivate_using_the_objects (struct project * this_proj, atom_search * asearch) { int i, j, k, l, m; struct insert_object * object = NULL; struct insert_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_insert_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_insert_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_insert_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } else { tmp_obb -> next = duplicate_insert_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.12/src/opengl/edit/atom_search.c000066400000000000000000000325241450232132300211050ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_search.c' * * Contains: * - The subroutines to prepare the model edtion search tabs and associated widgets * * List of subroutines: 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, struct project * this_proj); GtkWidget * create_action_combo (int id, struct project * this_proj); GtkWidget * action_tab (int aid, struct project * this_proj); */ #include "atom_edit.h" #ifdef GTK4 /* * G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) * * Usage: rebuild toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) * * Usage: rebuild toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) #endif { int i; #ifdef GTK4 i = gtk_check_button_get_active (but); // DO SOMETHING HERE !!! #else tint * dat = (tint *) data; 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 /* * G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) * * Usage: update bonding toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) * * Usage: update bonding toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 -> update_bonding = i; } /* * GtkWidget * create_search_box (int aid, struct project * this_proj) * * Usage: create the action search widget * * int aid : the action id * struct project * this_proj : the target project */ GtkWidget * create_search_box (int aid, struct 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("Update bonding information, but do not recompute bonding using bond cutoff(s)", -1, 25, this_proj -> modelgl -> search_widg[aid+1] -> update_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; } /* * G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) * * Usage: change selection status * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; struct 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]); update_search_tree (this_proj -> modelgl -> search_widg[id -> c]); } /* * GtkWidget * create_action_combo (int id, struct project * this_proj) * * Usage: create action combo box * * int id : the action id * struct project * this_proj : the target project */ GtkWidget * create_action_combo (int id, struct 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; } /* * G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) * * Usage: expanding motion callback * * GtkWidget * exp : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) { tint * dat = (tint *)data; struct 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); } } } } /* * GtkWidget * action_tab (int aid, struct project * this_proj) * * Usage: create model edtion action tab * * int aid : the action id * struct project * this_proj : the target project */ GtkWidget * action_tab (int aid, struct 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 == 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.12/src/opengl/edit/atom_species.c000066400000000000000000000112641450232132300212710ustar00rootroot00000000000000/* 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 */ /* * This file: 'atom_species.c' * * Contains: * - The subroutines to look for new chemical species and modify the chemical information accordingly * * List of subroutines: int find_spec_id (int s, int z, double * list_z); int search_for_new_spec (atom_edition * edit, struct insert_object * object); chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); */ #include "atom_edit.h" /* * chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) * * Usage: duplicate chemical data information * * int spec : the number of chemical species * chemical_data * 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; } /* * int find_spec_id (int s, int z, double * list_z) * * Usage: find species id based on Z * * int s : the number of chemical species * int z : the target Z * double * 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 ++; tmpnzid = allocdouble (coord -> species+i); for (l=0; l species+i-1; l++) tmpnzid[l] = edit -> new_z[l]; tmpnzid[l] = (double)object -> old_z[j]; if (edit -> new_z) g_free (edit -> new_z); edit -> new_z = duplicate_double (coord -> species+i, tmpnzid); g_free (tmpnzid); } } } 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.12/src/opengl/edit/cbuild_action.c000066400000000000000000001432531450232132300214210ustar00rootroot00000000000000/* 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 */ /* * This file: 'cbuild_action.c' * * Contains: * - The subroutines to build a crystal using space group, crystallogrpahic position(s) and object(s) to insert * * List of subroutines: int test_lattice (builder_edition * cbuilder); int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos); int build_crystal (gboolean visible, struct 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 (struct 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 "cbuild_edit.h" #include "readers.h" #include extern int get_bravais_id (int spg); gchar * tmp_pos = NULL; /* * double get_val_from_setting (gchar * pos, gchar * sval) * * Usage: get value from space group setting * * gchar * pos : the position "a", "b" or "c" * gchar * 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; } } /* * double get_value_from_pos (gchar * pos) * * Usage: get position double value from string description * * gchar * 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); } } /* * void get_origin (space_group * spg) * * Usage: get space group origin matrices * * space_group * 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 } /* * void compute_lattice_properties (cell_info * cell) * * Usage: compute lattice parameters following cell description * * cell_info * 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 } /* * int test_lattice (builder_edition * cbuilder) * * Usage: test lattice parameters * * builder_edition * cbuilder : the builder edition with the lattice parameters */ int test_lattice (builder_edition * cbuilder) { int i, j; cell_info * cell = & cbuilder -> cell; box_info * box = & cell -> box[0]; i = cell -> sp_group -> id; j = get_bravais_id (i); 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); 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 differents return 0; } } if (j == 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 error alpha,beta,gamma not all differents return 0; } } else if (j == 1) { if (box -> param[1][1] != 90.0 && box -> param[1][2] != 90.0) { // Angle Error alpha or gamma must be = 90 return 0; } } else if (j == 3 || j == 5) { if (box -> param[0][0] == box -> param[0][2]) { // Angle Error alpha gamma must different than gamma return 0; } } else if (j == 4) { if (cell -> sp_group -> name[0] != 'R') { if (box -> param[0][0] == box -> param[0][2]) { // Angle Error alpha gamma must different than gamma return 0; } } } return 1; } /* * double get_val_from_wyckoff (gchar * pos, gchar * wval) * * Usage: get point value from wyckoff position * * gchar * pos : "x", "y" or "z" * gchar * 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; } } /* * void clean_this_proj (struct project * this_proj, gboolean newp) * * Usage: clean project and/or associated cell parameters * * struct project * this_proj : the target project * gboolean newp : is this a new project ? */ void clean_this_proj (struct 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; } } /* * gboolean same_coords (float a, float b) * * Usage: test if values are similar, allowing a 0.0001 difference * * float a : 1st value * float 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; } /* * gboolean are_equal_vectors (vec3_t u, vec3_t v) * * Usage: comparing atomic coordinates vectors * * vec3_t u : 1st vector * vec3_t 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; } /* * int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) * * Usage: was this position already saved ? * * vec3_t * all_pos : the list of saved atomic coordinates * int num_pos : the number of saved atomic coordinates * vec3_t 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; } typedef struct { 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; } crystal_data; /* * crystal_data * allocate_crystal_data (int objects, int species) * * Usage: allocate crystal data pointer * * int objects : the number of object(s) * int 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; } /* * crystal_data * free_crystal_data (crystal_data * cryst) * * Usage: free crystal data pointer * * crystal_data * 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; } /* * gboolean pos_not_taken (int pos, int dim, int * tab) * * Usage: is this position already taken ? * * int pos : position id * int dim : number of position(s) * int * 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; } /* * int build_crystal (gboolean visible, struct project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) * * Usage: build crystal * * gboolean visible : is the crystal builder window visible ? * struct project * this_proj : the target project * gboolean to_wrap : wrap or not atomic coordinates in the unit cell * gboolean show_clones : show / hide clone(s) * cell_info * cell : the cell info that contains the crystal description * GtkWidget * widg : the GtkWidget sending the signal */ int build_crystal (gboolean visible, struct 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; 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; struct insert_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); for (i=0; i natomes; i++) { j = this_reader -> lot[i]; if (this_reader -> z[j] == -1.0) { insert_this_project_from_lib (0, FALSE, this_proj, this_proj -> modelgl -> search_widg[7]); } else { 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 (i == 0) { 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); 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); struct atom at, bt; struct 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) { 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); #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 1; } Atomes-GNU-1.1.12/src/opengl/edit/cbuild_edit.c000066400000000000000000001467111450232132300210730ustar00rootroot00000000000000/* 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 */ /* * This file: 'cbuild_edit.c' * * Contains: * * * * * List of subroutines: int get_bravais_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 (struct 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); extern int build_crystal (gboolean visible, struct 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}; /* * int get_bravais_id (int spg) * * Usage: get the bravais lattice id from space group id * * int spg : the target space group id */ int get_bravais_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; } } /* * int get_bravais_img_id (int spg) * * Usage: get bravais image from space group id * * int 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; } } } /* * gchar * frac_string (gchar * init) * * Usage: get pango string for fraction string * * gchar * 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); } /* * gchar * get_num_string (gchar * str) * * Usage: get description string for entry string * * gchar * 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"); } /* * gchar * get_so_string (space_group * spg, int id) * * Usage: get space group setting descrption string * * space_group * spg : the target space group * int 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; } /* * GtkTreeModel * so_combo_tree (space_group * spg) * * Usage: create the space group setting combo box tree model * * space_group * 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); } /* * GtkTreeModel * sg_combo_tree (int csid, int bvid) * * Usage: create the space group combo box tree model * * int csid : the crystal system * int 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); } /* * int get_sg_num (GtkComboBox * box) * * Usage: get space group number from active iter in tree model of combo box * * GtkComboBox * 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; } /* * void adjust_lattice_parameters (builder_edition * cbuilder) * * Usage: adjust lattice parameters depending on space group * * builder_edition * 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_bravais_id(j); box_info * box = & cbuilder -> cell.box[0]; switch (k) { case 1: box -> param[1][0] = 90.0; box -> vect[1][1] = box -> vect[2][2] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 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] = box -> param[1][2] = 90.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; box -> vect[2][0] = box -> vect[2][1] = 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]), ""); } } } } } } } /* * G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) * * Usage: update lattice vector callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) * * Usage: update lattice box parameter callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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); } /* * GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) * * Usage: prepare the lattice parameters grid widget * * int type : the type of lattice system * builder_edition * cbuilder : the target builder edition * glwin * 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; } /* * G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) * * Usage: change the lattice system * * GtkComboBox * box : the GtkWidget sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) * * Usage: set space group setting * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * GtkWidget * sg_info (int sg, gpointer data) * * Usage: create the space group information button * * int sg : space group id * gpointer 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; } /* * int read_space_group (builder_edition * cbuilder, int spg) * * Usage: read space group N°spg data from file * * builder_edition * cbuilder : the target builder edition * int 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; } /* * int get_group_id_from_name (gchar * sg_name) * * Usage: get space group id from name * * gchar * 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; } /* * void adjust_so_combo (builder_edition * cbuilder) * * Usage: adjust the space group setting combo box to use pango markup * * builder_edition * 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); } /* * void adjust_bv_img (builder_edition * cbuilder) * * Usage: adjust the bravais lattice image * * builder_edition * 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); } /* * void adjust_lattice_constraints (builder_edition * cbuilder) * * Usage: adjust lattice constraints * * builder_edition * 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_bravais_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); } /* * G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) * * Usage: change space group * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } } } /* * void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) * * Usage: adjust the space group combo box to use pango markup * * builder_edition * cbuilder : the target builder edition * int cs : the crystal system * int 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); } /* * G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) * * Usage: change bravais lattice * * GtkComboBox * combo : the GtkComboBox sending the signal * gpointer 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); } /* * GtkWidget * create_bl_combo (int cs, gpointer data) * * Usage: create the bravais lattice combo box * * int cs : the associated crystal system * gpointer 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; } /* * G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) * * Usage: change the crystal system * * GtkComboBox * combo : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) * * Usage: wrap or not atomic coordinates after crystal building toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) * * Usage: wrap or not atomic coordinates after crystal building toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) * * Usage: show / hide clones after crystal building toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) * * Usage: show / hide clones after crystal building toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 } /* * G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) * * Usage: add cell callback spin * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) * * Usage: build crystall callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); struct project * this_proj = get_project_by_id(id); if (test_lattice(this_proj -> modelgl -> builder_win)) { 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); } } /* * G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) * * Usage: close crystal builder and free associated data pointers * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); struct 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 /* * G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) * * Usage: crystal builder delete event callback GTK4 * * GtkWindow * widg : the target GtkWindow * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: crystal builder delete event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) * * Usage: occupancy toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) * * Usage: occupancy toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) * * Usage: adjust overlapping toggle callback GTK4 * * GtkCheckButton * Button : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) #else /* * G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) * * Usage: adjust overlapping toggle callback GTK3 * * GtkToggleButton * Button : the GtkToggleButton sending the signal * gpointer 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 } /* * G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) * * Usage: adjust occupancy create dialog callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) { struct project * this_proj = (struct 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); } /* * GtkWidget * builder_win (struct project * this_proj, gpointer data) * * Usage: create crystal builder window * * struct project * this_proj : the target project * gpointer data : the associated data pointer */ GtkWidget * builder_win (struct 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_bravais_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; } /* * void prepare_crystal_builder (gpointer data) * * Usage: create the crystal builder * * gpointer data : the associated data pointer */ void prepare_crystal_builder (gpointer data) { tint * id = (tint *) data; struct 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 /* * G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create the crystal build window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) * * Usage: create the crystal build window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) #endif { prepare_crystal_builder (data); } Atomes-GNU-1.1.12/src/opengl/edit/cbuild_edit.h000066400000000000000000000063761450232132300211020ustar00rootroot00000000000000/* 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 */ /* * This header file: 'cbuild_edit.h' * * Contains: */ #ifndef CBUILD_EDIT_H_ #define CBUILD_EDIT_H_ #include "global.h" #include 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 cif_file * this_cif; 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); #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, struct 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, struct project * this_proj); extern void prepare_atom_edition (gpointer data, gboolean visible); extern void clean_all_trees (atom_search * asearch, struct project * this_proj); extern void prepare_opengl_menu_bar (glwin * view); extern void allocatoms (struct project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern void set_img_lights (struct project * this_proj, image * img); extern void image_init_spec_data (image * img, struct project * this_proj, int nsp); extern void glwin_init_spec_data (struct 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, struct project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, struct project * this_proj, atom_search * asearch, gboolean visible); #endif Atomes-GNU-1.1.12/src/opengl/edit/cbuild_info.c000066400000000000000000000465351450232132300211040ustar00rootroot00000000000000/* 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 */ /* * This file: 'cbuild_info.c' * * Contains: * - The subroutines to create the space group information dialog * * List of subroutines: 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 double get_value_from_pos (gchar * pos); extern double get_val_from_wyckoff (gchar * pos, gchar * wval); extern int get_bravais_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}; /* * gchar * get_bravais (int spg) * * Usage: retrieve the space group bravais lattice * * int 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; } } /* * gchar * get_frac (float val) * * Usage: get string for value * * float 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; } /* * void get_wyck_char (float val, int ax, int bx) * * Usage: convert wyckoff value to string * * float val : the target value * int ax : axis id, x = 0, y = 1, z = 2 * int 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]); } } } } /* * void get_extra_val (float val, int ax) * * Usage: convert wyckoff extra value to string * * float val : the target value * int 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)); } } } /* * void get_wyck_names (space_group * spg, int i, int j) * * Usage: get the name of this wyckoff position * * space_group * spg : the target space group * int i : the wyckoff position id * int 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"); } /* * static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) * * Usage: fill wyckoff position tree store * * GtkTreeStore * store : the tree store to fill * space_group * 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); } } } } /* * void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer, if visible then add or not pango markup * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the cell renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree iter * gpointer 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); } /* * GtkWidget * create_wyckoff_tree (space_group * spg) * * Usage: create wyckoff position tree * * space_group * 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; } /* * GtkWidget * create_setting_info (space_group * spg, int sid) * * Usage: create setting information label * * space_group * spg : the target space group * int 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; } /* * GtkWidget * create_wyck_pts_info (space_group * spg, int sid) * * Usage: create wyckoff label * * space_group * spg : the target space group * int 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; } } /* * G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) * * Usage: change space group origin * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } } } /* * G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) * * Usage: show space group information dialog callback * * GtkWidget * but : the GtkWidget sending the signal * gpointer 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_bravais_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.12/src/opengl/edit/cbuild_sg.c000066400000000000000000000660121450232132300205520ustar00rootroot00000000000000/* 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 */ /* * This file: 'cbuild_sg.c' * * Contains: * - The subroutines to read space group data from XML files * * List of subroutines: 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"}; /* * space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) * * Usage: clean space group and corresponding XML data * * xmlDoc * doc : the XML doc pointer to free * xmlTextReaderPtr reader : the XML reader to free */ space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return NULL; } /* * int get_this_group_data (space_group * spg, xmlNodePtr racine) * * Usage: retrieve space group data * * space_group * spg : the space group pointer to fill * xmlNodePtr 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; } /* * space_group * read_sg_xml_file (const char * filetoread) * * Usage: read space group data from XML file * * const char * 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.12/src/opengl/edit/cell_cut.c000066400000000000000000000774411450232132300204210ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_cut.c' * * Contains: * - The subroutines to create the slab cutting tab of the cell edition window * * List of subroutines: G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void create_slab_info (struct project * this_proj); void slab_alpha_has_changed (gpointer data, GLfloat v); void invert_selection (struct 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, struct project * this_proj); GtkWidget * create_slab_param_combo (int sid, struct project * this_proj); GtkWidget * cut_in_model (struct project * this_proj); */ #include "cell_edit.h" #include "atom_edit.h" extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /* * G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) * * Usage: passivate button callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) { struct project * this_proj = (struct 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; } /* * void create_slab_info (struct project * this_proj) * * Usage: create slab information widget * * struct project * this_proj : the target project */ void create_slab_info (struct 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 /* * G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) * * Usage: set slab property toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) * * Usage: set slab property toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * prepare_slab_box (int sid, struct project * this_proj) * * Usage: create slab parameters widget box * * int sid : the type of slab * struct project * this_proj : the target project */ GtkWidget * prepare_slab_box (int sid, struct 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; } /* * G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) * * Usage: change slab option combo * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) { struct project * this_proj = (struct 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; } } /* * GtkWidget * create_slab_param_combo (int sid, struct project * this_proj) * * Usage: create slab parameters combo widget * * int sid : the slab type * struct project * this_proj : the target project */ GtkWidget * create_slab_param_combo (int sid, struct 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); } } /* * void slab_alpha_has_changed (gpointer data, GLfloat v) * * Usage: change slab opacity * * gpointer data : the associated data pointer * GLfloat 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); } } /* * G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: change slab opactiy callback - scoll * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) * * Usage: change slab opactiy callback - range * * GtkRange * range : the GtkRange sending the signal * gpointer 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)); } /* * void invert_selection (struct project * this_proj) * * Usage: invert atom(s) selection * * struct project * this_proj : the target project */ void invert_selection (struct 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); } /* * G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) * * Usage: select / unselect atom(s) in slab callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) { struct project * this_proj = (struct 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); } /* * G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) * * Usage: cut this slab callback * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) { struct project * this_proj = (struct 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_insert_object (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); struct insert_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_insert_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, & this_proj -> modelgl -> 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); } } /* * GtkWidget * cut_in_model (struct project * this_proj) * * Usage: create the cut slab tab * * struct project * this_proj : the target project */ GtkWidget * cut_in_model (struct 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.12/src/opengl/edit/cell_density.c000066400000000000000000000124451450232132300212760ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_density.c' * * Contains: * - The subroutines to create the density adjustement tab in the cell edition window * * List of subroutines: 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 (struct project * this_proj); */ #include "cell_edit.h" /* * void display_density (cell_edition * cell, double vol, double dens, double adens) * * Usage: create density information widgets * * cell_edition * cell : the target cell edition * double vol : the volume * double dens : the density * double 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 /* * G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) * * Usage: homogeneous rescaling toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) * * Usage: homogeneous rescaling toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * adjust_density_tab (struct project * this_proj) * * Usage: create the density tab * * struct project * this_proj : the target project */ GtkWidget * adjust_density_tab (struct 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.12/src/opengl/edit/cell_edit.c000066400000000000000000000202451450232132300205410ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_edit.c' * * Contains: * - The subroutines to create the cell edition window * * List of subroutines: 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, struct project * this_proj); GtkWidget * create_cell_notebook (struct project * this_proj, GtkWidget * vbox); GtkWidget * create_cell_edition_window (struct 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"}; /* * G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) * * Usage: close cell edition window and free the associated data pointers * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) { struct project * this_proj = (struct 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 /* * G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) * * Usage: cell edition window close event callback GTK4 * * GtkWindow * widg : * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: cell edition window close event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * GtkWidget * cell_tab (int i, struct project * this_proj) * * Usage: create the 'i'th cell tab * * int i : the cell tab id * struct project * this_proj : the target project */ GtkWidget * cell_tab (int i, struct 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 } } /* * GtkWidget * create_cell_notebook (struct project * this_proj, GtkWidget * vbox) * * Usage: create the cell edition notebook * * struct project * this_proj : the target project * GtkWidget * vbox : the GtkWidget sending the signal */ GtkWidget * create_cell_notebook (struct 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; } /* * GtkWidget * create_cell_edition_window (struct project * this_proj, gpointer data) * * Usage: create the cell editon window * * struct project * this_proj : the target project * gpointer data : the associated data pointer */ GtkWidget * create_cell_edition_window (struct 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 /* * G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create the cell edition window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) * * Usage: create the cell edition window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; int i; struct 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.12/src/opengl/edit/cell_edit.h000066400000000000000000000056321450232132300205510ustar00rootroot00000000000000/* 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 */ /* * This header file: 'cell_edit.h' * * Contains: */ #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 (struct project * this_proj); extern void center_molecule (struct 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 (struct project * this_proj, int status, int axis, vec3_t trans); extern void process_selected_atom (struct 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 (struct project * this_proj); extern int is_selected; extern int selected_aspec; GtkWidget * create_cell_entries (struct project * this_proj, int i); GtkWidget * create_shift_box (struct 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 (struct project * this_proj); void invert_selection (struct project * this_proj); GtkWidget * shift_center_tab (struct project * this_proj); GtkWidget * add_extra_cell_tab (glwin * view); GtkWidget * supercell_tab (glwin * view); GtkWidget * adjust_density_tab (struct project * this_proj); GtkWidget * cut_in_model (struct project * this_proj); GtkWidget * pixels_tab (struct 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.12/src/opengl/edit/cell_extra.c000066400000000000000000000074011450232132300207360ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_extra.c' * * Contains: * - The subroutines to create the add cell(s) tab in the cell edition window * * List of subroutines: G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data); GtkWidget * add_extra_cell_tab (glwin * view); */ #include "cell_edit.h" /* * G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) * * Usage: add cell callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) { tint * dat = (tint *)data; int i; struct 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); } /* * GtkWidget * add_extra_cell_tab (glwin * view) * * Usage: create the add cell(s) tab * * glwin * 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.12/src/opengl/edit/cell_pixel.c000066400000000000000000000162611450232132300207400ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_pixel.c' * * Contains: * - The subroutines 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 subroutines: void pix_info_ (int * na, int * nb, int * nc); void send_pix_info_ (int * p, int listp[27], int * ngb); void update_pix_table (struct project * this_proj); G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data); GtkWidget * create_css_label (gchar * str, int id); GtkWidget * attach_grid (struct project * this_proj, int init); GtkWidget * pixels_tab (struct project * this_proj); */ #ifdef DEBUG #include "cell_edit.h" /* * void pix_info_ (int * na, int * nb, int * nc) * * Usage: allocate pixel data pointer from Fortran90 * * int * na : x size * int * nb : y size * int * 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); } /* * void send_pix_info_ (int * p, int listp[27], int * ngb) * * Usage: retrieve pixel information from Fortran90 * * int * p : the pixel id * int listp[27] : the neighbor list for pixel id * int * 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]; } } /* * GtkWidget * create_css_label (gchar * str, int id) * * Usage: create CSS label * * gchar * str : the string * int id : 0 = white, 1 = yellow */ GtkWidget * create_css_label (gchar * str, int id) { gchar * colo[2] = {"white", "yellow"}; gchar * 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, "color"); gtk_widget_show (lab); return lab; } /* * GtkWidget * attach_grid (struct project * this_proj, int init) * * Usage: create pixel grid * * struct project * this_proj : the target project * int init : the target pixel */ GtkWidget * attach_grid (struct 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; } /* * void update_pix_table (struct project * this_proj) * * Usage: prepare pixel table widget * * struct project * this_proj : the target project */ void update_pix_table (struct 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_HORIZONTAL, this_proj -> pix_box, this_proj -> pix_tab[i], FALSE, FALSE, 20); } show_the_widgets (this_proj -> pix_box); } /* * G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) * * Usage: set pixel id callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT (data); struct 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); } /* * GtkWidget * pixels_tab (struct project * this_proj) * * Usage: create the PBC pixels checking tab * * struct project * this_proj : the target project */ GtkWidget * pixels_tab (struct project * this_proj) { GtkWidget * layout = create_layout (700, 750); GtkWidget * vbox = add_vbox_to_layout (layout, -1, -1); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); 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); this_proj -> actif_pix = 1; this_proj -> pix_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> pix_box, FALSE, FALSE, 5); this_proj -> pix_tab[0] = this_proj -> pix_tab[1] = this_proj -> pix_tab[2] = NULL; update_pix_table (this_proj); return layout; } #endif // DEBUG Atomes-GNU-1.1.12/src/opengl/edit/cell_shift.c000066400000000000000000000505401450232132300207320ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_shift.c' * * Contains: * - The subroutines to create the shift cell center tab * * List of subroutines: G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void modify_coordinates_in_lattice (struct 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 (struct project * this_proj, int i); GtkWidget * create_shift_box (struct project * this_proj); GtkWidget * shift_center_tab (struct project * this_proj); */ #include "cell_edit.h" /* * void modify_coordinates_in_lattice (struct project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) * * Usage: modify atomic coordinates in lattice * * struct project * this_proj : the target project * mat4_t * dlat : lattice vectors matrix * mat4_t * drec : reciprocal vectors matrix * int refresh : refresh rendering data * int density : 0= shift, 1 = density modification */ void modify_coordinates_in_lattice (struct 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); } } /* * void shift_it (vec3_t shift, int refresh, int proj) * * Usage: shift atomic coordinates * * vec3_t shift : the shift vector * int refresh : refresh rendering data * int proj : the target project id */ void shift_it (vec3_t shift, int refresh, int proj) { struct project * this_proj = get_project_by_id (proj); translate (this_proj, -1, 0, shift); modify_coordinates_in_lattice (this_proj, NULL, NULL, refresh, 0); } /* * void adjust_it (int refresh, int proj) * * Usage: adjust atomic coordinates * * int refresh : refresh rendering data * int proj : the project id */ void adjust_it (int refresh, int proj) { int i, j; struct 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); } /* * void shift_has_changed (gpointer data, double val) * * Usage: shift atomic coordinates * * gpointer data : the associated data pointer * double val : the shift value */ void shift_has_changed (gpointer data, double val) { tint * dat = (tint *)data; int i, j, k, l; struct 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]); } } /* * G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) * * Usage: set atomic coordinates shift * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: shift coordinates callback - scroll * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) * * Usage: shift coordinates callback - range * * GtkRange * range : the GtkRange sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) { shift_has_changed (data, gtk_range_get_value (range)); } /* * GtkWidget * create_cell_entries (struct project * this_proj, int i) * * Usage: create the cell entry widgets * * struct project * this_proj : the target project * int i : target parameter/action id (shift, cut, density) */ GtkWidget * create_cell_entries (struct 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; } /* * GtkWidget * create_shift_box (struct project * this_proj) * * Usage: create shift box widgets * * struct project * this_proj : the target project */ GtkWidget * create_shift_box (struct 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; } /* * void wrapping (glwin * view) * * Usage: wrapping atomic coordinates * * glwin * 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 /* * G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) * * Usage: wrap atomic coordinates callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) * * Usage: wrap atomic coordinates callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * shift_center_tab (struct project * this_proj) * * Usage: create the shift cell center tab * * struct project * this_proj : the target project */ GtkWidget * shift_center_tab (struct 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.12/src/opengl/edit/cell_super.c000066400000000000000000000243311450232132300207520ustar00rootroot00000000000000/* 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 */ /* * This file: 'cell_super.c' * * Contains: * - The subroutines to create a super-cell using the extra cell(s) * * List of subroutines: gboolean ** duplicate_geom_info (struct project * this_proj); gboolean ** duplicate_poly_info (struct project * this_proj); void restore_coord_and_poly_info (struct project * proj, gboolean ** cshow, gboolean ** pshow); void sens_superbut (struct 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 (struct project * this_proj); extern GtkWidget * cell_tab (int i, struct project * this_proj); /* * gboolean ** duplicate_geom_info (struct project * this_proj) * * Usage: duplicate coordinations show status * * struct project * this_proj : the target project */ gboolean ** duplicate_geom_info (struct 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; } /* * gboolean ** duplicate_poly_info (struct project * this_proj) * * Usage: duplicate polyhedra show status * * struct project * this_proj : the target project */ gboolean ** duplicate_poly_info (struct 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; } /* * void restore_coord_and_poly_info (struct project * proj, gboolean ** cshow, gboolean ** pshow) * * Usage: restore show status after * * struct project * proj : the target project * gboolean ** cshow : the saved coordination show status * gboolean ** pshow : the saved polyhedra show status */ void restore_coord_and_poly_info (struct 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 } } } /* * void sens_superbut (struct project * this_proj) * * Usage: adjust 'Create super-cell' button sensitivity * * struct project * this_proj : the target project */ void sens_superbut (struct 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 } /* * void super_celling (glwin * view) * * Usage: create super cell * * glwin * 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 /* * G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create super cell menu callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) * * Usage: create super cell menu callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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)); } /* * G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) * * Usage: create super cell callback * * GtkButton * but : the GtkButton sending the signal * gpointer 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.12/src/opengl/glview.c000066400000000000000000001634671450232132300172030ustar00rootroot00000000000000/* 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 */ /* * This file: 'glview.c' * * Contains: * - The OpenGL window callbacks subroutines * * List of subroutines: 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 (struct project * this_proj, int get_depth); void image_init_spec_data (image * img, struct project * this_proj, int nsp); void set_img_lights (struct project * this_proj, image * img); void init_img (struct project * this_proj); void init_opengl (glwin * view); void center_molecule (struct project * this_proj); void center_this_molecule (glwin * view); void free_glwin_spec_data (struct project * this_proj, int spec); void glwin_init_spec_data (struct 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 (struct project * this_proj, vec4_t q, int status, int axis); extern void translate (struct project * this_proj, int status, int axis, vec3_t trans); extern vec3_t get_bary (struct 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 (struct project * this_proj, atom_search * asearch, gboolean visible); extern struct insert_object * create_object_from_frag_mol (struct project * this_proj, int coord, int geo, atom_search * remove); GLenum ogl_texture; /* * GLuint * allocgluint (int val) * * Usage: allocate a GLuint * pointer * * int val : size of the pointer to allocate */ GLuint * allocgluint (int val) { GLuint * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /* * GLuint ** allocdgluint (int xal, int yal) * * Usage: allocate a GLuint ** pointer * * int xal : 1st dimension size of the pointer to allocate * int 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; } /* * GLfloat ** allocdGLfloat (int xal, int yal) * * Usage: allocate a GLfloat ** pointer * * int xal : 1st dimension size of the pointer to allocate * int 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}}; /* * ColRGBA set_default_color (int z) * * Usage: pick the default color for an atom * * int 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}}; col.red = colors[z-1][0]; col.green = colors[z-1][1]; col.blue = colors[z-1][2]; col.alpha = 1.0; return col; } /* * void update_bonds_ (int * bd, int * stp, * int * bdim, int bda[* bdim], int bdb[* bdim], * double * x, double * y, double * z) * * Usage: update bonding information from Fortran90 * * int * bd : bonds (0) or clones (1) * int * stp : the MD step * int * bdim : number of bonds (or clone bonds) * int bda[* bdim] : bond "ab" list atom a * int bdb[* bdim] : bond "ab" list atom b * double * x : clone(s) x coordinates * double * y : clone(s) y coordinates * double * 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; } } } } /* * void sort (int dim, int * tab) * * Usage: sort, nim to max, a table by integer value * * int dim : the number of value * int * 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; } } /* * void update_atom_neighbors_ (int * stp, int * at, int * nv) * * Usage: update an atom number of neighbors from Fortran90 * * int * stp : the MD step * int * at : atom id * int * 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); } } /* * void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) * * Usage: update atom neighbor list from Fortran90 * * int * stp : the MD step * int * at : atom id * int * iv : neighbor index * int * 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); } } /* * void update (glwin * view) * * Usage: update the rendering of the OpenGL window * * glwin * 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 } /* * void transform (glwin * view, double aspect) * * Usage: transform the OpenGL window * * glwin * view : the target glwin * double 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); } } /* * void reshape (glwin * view, int width, int height) * * Usage: reshape (resize) the OpenGL window * * glwin * view : the target glwin * int width : new with * int 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); } /* * void save_rotation_quaternion (glwin * view) * * Usage: save the rotation quaternion of the last image * * glwin * 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; } /* * void edit_for_motion (glwin * view) * * Usage: if edition mode is one some steps are required * * glwin * view : the target glwin */ void edit_for_motion (glwin * view) { gboolean check_edit = FALSE; struct 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 { struct insert_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 -> rebuild[0][0] = FALSE; view -> rebuild[0][1] = TRUE; } /* * void motion (glwin * view, gint x, gint y, GdkModifierType state) * * Usage: mouse motion in the OpenGL window * * glwin * view : the target glwin * gint x : x position * gint y : y position * GdkModifierType 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 -> 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 /* * G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: handle mouse motion event in the OpenGL window GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) * * Usage: handle mouse motion event in the OpenGL window GTK4 * * GtkEventControllerMotion * motc : The GtkEvenController sending the signal * gdouble x : x position * gdouble y : y position * gpointer 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 /* * void render_this_gl_window (glwin * view, GtkGLArea * area, gint button, double ptx, double pty) * * Usage: render the OpenGL window * * glwin * view : the target glwin * GtkGLArea * area : the target GtkGLArea * gint button : the button id * double ptx : x position * double pty : y position */ void render_this_gl_window (glwin * view, GtkGLArea * area, gint button, double ptx, double pty) #else /* * void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) * * Usage: render the OpenGL window * * glwin * view : the target glwin * GtkWidget * widg : the GtkWidget sending the signal * gint 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 } } /* * void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) * * Usage: handle mouse button event on the molecular library OpenGL window * * double x : x position * double y : y position * guint event_type : event type * guint event_button : event button * gpointer 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 /* * G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: handle mouse button event on the molecular library OpenGL window (limited interaction) * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: handle mouse button press event on the molecular library OpenGL window (limited interaction) * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: handle mouse button release event on the molecular library OpenGL window (limited interaction) * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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; /* * void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) * * Usage: handle mouse button event on the OpenGL window * * double event_x : x position * double event_y : y position * guint event_button : event button * guint event_type : event type * guint32 event_time : event time * gpointer 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 /* * G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: mouse button event on the OpenGL window * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button pressed signal on the OpenGL window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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); } /* * G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: mouse button released signal on the OpenGL window * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * void zoom (glwin * view, int delta) * * Usage: zoom in or zoom out in the OpenGL window * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: handle mouse scroll event on the OpenGL window * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) * * Usage: handle mouse scroll event on the OpenGL window * * GtkEventControllerScroll * event : the GtkEventControllerScroll sending the signal * gdouble dx : x position * gdouble dy : y position * gpointer 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 /* * void rotate_x_y (glwin * view, double angle_x, double angle_y) * * Usage: rotate the OpenGL camera * * glwin * view : the target glwin * double angle_x : camera angle on x axis * double 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 } } /* * void init_camera (struct project * this_proj, int get_depth) * * Usage: intialize the OpenGL camera settings * * struct project * this_proj : the target project * int get_depth : estimate the OpenGL depth ? (1/0) */ void init_camera (struct 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); } } } /* * void image_init_spec_data (image * img, struct project * this_proj, int nsp) * * Usage: initialize the chemical species related pointers in an image data structure * * image * img : the target image * struct project * this_proj : the target project * int nsp : the number of chemical species */ void image_init_spec_data (image * img, struct 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; } } } /* * void set_img_lights (struct project * this_proj, image * img) * * Usage: initialize lightning for an image data structure * * struct project * this_proj : the target project * image * img : the target image */ void set_img_lights (struct 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); } /* * void init_img (struct project * this_proj) * * Usage: initialize an image data structure * * struct project * this_proj : the target project */ void init_img (struct 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_LIGHTING; img -> m_terial.param[1] = DEFAULT_METALLIC; img -> m_terial.param[2] = DEFAULT_ROUGHNESS; img -> m_terial.param[3] = DEFAULT_AO; img -> m_terial.param[4] = DEFAULT_GAMMA; 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); } /* * gboolean is_GLExtension_Supported (const char * extension) * * Usage: test if this GLExtension is support * * const char * 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; } /* * void center_this_molecule (glwin * view) * * Usage: center atomic coordinates around (0,0,0) and refresh shaders * * glwin * 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); } /* * void free_glwin_spec_data (struct project * this_proj, int spec) * * Usage: free the memory used by the chemical species related data in a glwin data structure * * struct project * this_proj : the target project * int spec : the number of chemical species */ void free_glwin_spec_data (struct 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; } /* * void glwin_init_spec_data (struct project * this_proj, int nspec) * * Usage: initialize the glwin chemical species related pointers * * struct project * this_proj : the target project * int nspec : the number of chemical species */ void glwin_init_spec_data (struct 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; } /* * void init_glwin (glwin * view) * * Usage: initialize a glwin pointer * * glwin * view : the target glwin */ void init_glwin (glwin * view) { struct project * this_proj = get_project_by_id(view -> proj); // Have to be the active project view -> anim = g_malloc0 (sizeof*view -> anim); struct 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; 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 } /* * GError * init_gtk_gl_area (GtkGLArea * area) * * Usage: initialize a GtkGLArea, return error if any * * GtkGLArea * 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 /* * G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) * * Usage: realize event for a GtkGLArea * * GtkGLArea * area : the GtkGLArea sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) #else /* * G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) * * Usage: realize event for the OpenGL widget * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; } end:; } #ifdef GTKGLAREA /* * G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) * * Usage: OpenGL rendering widget expose event callback GTK4 * * GtkGLArea * area : the GtkGLArea sending the signal * GdkGLContext * context : the associated GdkGLContext * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) #else /* * G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) * * Usage: OpenGL rendering widget expose event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * cairo_t * cr : the cairo drawing context to use for the draw * gpointer 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.12/src/opengl/glview.h000066400000000000000000000207271450232132300171770ustar00rootroot00000000000000/* 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 */ /* * This header file: 'glview.h' * * Contains: */ #ifndef GL_VIEW_H_ #define GL_VIEW_H_ #define QUALITY 30 #define DEFAULT_STYLE 1 #define DEFAULT_SIZE 1 #define DEFAULT_LIGHTING 1.00 #define DEFAULT_METALLIC 0.35 #define DEFAULT_ROUGHNESS 0.15 #define DEFAULT_AO 1.00 #define DEFAULT_GAMMA 1.50 #define DEFAULT_OPACITY 1.00 // default light data #define MAX_LIGHTS 10 #define DEFAULT_INTENSITY 10.0 #define NEAR_PLANE 1.0 #define FAR_PLANE 10.0 #define CAMERA_ANGLE_X 5.0 // pitch in degree #define CAMERA_ANGLE_Y -25.0 // heading in degree #define CAMERA_ANGLE_Z 0.0 // Toll in degree #define ZOOM 1.5 // #define ZOOM_FACTOR 0.05 // #define ZOOM_MAX 0.001 // #define REFRESH 10 #define MAX_IN_SELECTION 21 #define COORD_MAX_MENU 20 enum radii { VDW = 0, INC = 1, COV = 2, ION = 3 }; enum representation { ORTHOGRAPHIC = 0, PERSPECTIVE = 1 }; enum modes { ANALYZE = 0, EDITION = 1, MOTION = 2, DL_POLY = 3, LAAMPS = 4, CPMD_AI = 5, CP2K_AI = 6, CP2K_QMMM = 7, CP2K_MM = 8 }; #define NUM_STYLES 7 enum styles { NONE = -1, BALL_AND_STICK = 0, WIREFRAME = 1, SPACEFILL = 2, SPHERES = 3, CYLINDERS = 4, PUNT = 5 }; enum render { FILL = 0, LINE = 1, PTS = 2 }; enum action { ROTATE = 0, MOVE = 1, SELECT = 2, ZOOM_IN_OUT = 3, SPIN = 4 }; enum mouse_status { CLICKED = 0, RELEASED = 1 }; enum axisposition { TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4, CUSTOM = 5 }; enum labels { ELEMENT_NAME = 0, SYMBOL = 1, SYMBOL_AND_NUM = 2, NUM = 3, ID_IN_MOLECULE = 4 }; enum actions { DISPL = 2, REPLACE = 3, REMOVE = 4, INSERT = 5, RANMOVE = 6 }; enum texts { SIMPLE_TEXT = 0, BETTER_TEXT = 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 struct 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 (struct atom a, struct atom b, int bid, int ci, int bi); extern void draw_cylinder_bond_to_pick (struct atom a, struct atom b, int bid); extern void draw_wireframe_bond (struct atom a, struct 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 (struct atom at); extern void draw_atom (struct 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], struct atom * at, struct atom * bt, struct 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 (struct 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 struct distance distance_2d (struct atom * at, struct atom * bt); extern struct distance distance_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt); extern struct angle angle_2d (struct atom * at, struct atom * bt, struct atom * ct); extern struct angle angle_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct); extern struct angle dihedral_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt); extern struct atom * duplicate_atom (struct atom * at); extern void at_shift (struct atom * at, float * shift); extern void at_unshift (struct atom * at, float * shift); extern int check_label_numbers (struct 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], struct 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 (struct atom_selection * at_list, struct 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 (struct 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, struct 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 { int action; double x, y; int pts[5]; } gl_pop_info; extern gl_pop_info to_pop; #endif Atomes-GNU-1.1.12/src/opengl/glwin.h000066400000000000000000000445401450232132300170210ustar00rootroot00000000000000/* 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 */ /* * This header file: 'glwin.h' * * Contains: */ #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_STYLES 6 #define FILLED_STYLES 4 #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 { FROM_DATA = -8, FROM_SPEC = -7, FROM_MOL = -6, FROM_FRAG = -5, FROM_COORD_P = -4, FROM_COORD_T = -3, FROM_LIBRARY = -2, FROM_PROJECT = -1 }; enum shaders { ATOMS = 0, BONDS = 1, SELEC = 2, POLYS = 3, MDBOX = 4, MAXIS = 5, ARROW = 6, RINGS = 7, PICKS = 8, LABEL = 9, MEASU = 10, LIGHT = 11, SLABS = 12, VOLMS = 13 }; struct angle { double angle; gboolean pbc; }; struct distance { double length; double x, y, z; gboolean pbc; }; typedef struct { gboolean show[2]; gboolean label[2]; gboolean pick[2]; gboolean cloned; int style; } atom_data; typedef struct { GtkWidget * win; GtkWidget * right; GtkWidget * left; GtkWidget * up; GtkWidget * down; GtkWidget * stop; } spinner; typedef struct { GtkWidget * win; GtkWidget * first; GtkWidget * last; GtkWidget * prev; GtkWidget * next; GtkWidget * jump; GtkWidget * play; GtkWidget * stop; GtkWidget * loop; GtkWidget * fast; GtkWidget * slow; } sequencer; typedef struct { GtkWidget * win; GtkWidget * rec; GtkWidget * stop; } recorder; typedef struct { int type; // 0 = directional, 1 = point, 2 = spot light int fix; // 0 = fix for the view, 1 = fix for the molecule int show; vec3_t position; vec3_t direction; // For directional and spot light vec3_t intensity; // Light colors vec3_t attenuation; // Constant, linear and quadratic vec3_t spot_data; // Angle, inner and outer cutoff } Light; typedef struct { int predefine; vec3_t albedo; // 0 = lightning model // 2 = metallic // 3 = roughness // 4 = back lightning // 5 = gamma // 6 = opacity GLfloat param[6]; } Material; typedef struct { int mode; // NONE, LINEAR, EXP, EXP2 int based; // Plane based or Range based float density; float depth[2]; vec3_t color; } Fog; struct screen_string { int id; int type; char * word; ColRGBA col; float shift[4]; int num_instances; float * instances; struct screen_string * prev; struct screen_string * last; }; struct selatom { int id; int sp; struct selatom * prev; struct selatom * next; }; struct atom_selection { int selected; int * selected_bonds; ColRGBA * bond_colors; int * selected_angles; ColRGBA * angle_colors; int * selected_dihedrals; ColRGBA * dihedral_colors; struct selatom * first; struct selatom * last; }; typedef struct { ColRGBA backcolor; // Color maps for atoms [0] and polyhedra [1] int color_map[2]; gboolean * show_atom[2]; // To draw or not the atom(s) gboolean * show_label[2]; // To draw or not the label(s) gboolean * show_poly[9]; // To draw or not the polyhedra gboolean * show_coord[10]; // To draw or not the coordination(s) // Atoms ColRGBA * at_color; double * sphererad; double * pointrad; double * atomicrad; // Bonds double ** bondrad; double ** linerad; double radall[2]; // Clones gboolean draw_clones; gboolean cloned_poly; // Labels // 0 = atoms, 1 = clones, 2 = axis, 3 = measures, 4 = measure edition int labels_position[5]; int labels_render[5]; int labels_scale[5]; gchar * labels_font[5]; ColRGBA * labels_color[5]; double labels_shift[5][3]; struct screen_string * labels_list[5]; // 0 =Element name, 1 = Atomic symbol, 2 = Atomic symbol + ID number, 3 = ID number int labels_format[3]; gboolean mtilt; int mpattern; int mfactor; double mwidth; int m_is_pressed; // Atom selection: 0 = normal mode, 1 = edition mode struct atom_selection * selected[2]; // Model box and partial axis data // BOX = 0, AXIS = 1 int box_axis[2]; double box_axis_rad[2]; double box_axis_line[2]; ColRGBA box_color; ColRGBA * axis_color; // Extra cell on a/b/c int extra_cell[3]; double axis_length; int axispos; GLdouble axis_pos[3]; int axis_labels; gchar * axis_title[3]; // Coordination(s) ColRGBA ** spcolor[10]; // Coordination sphere colors GLdouble p_depth; GLdouble c_angle[2]; // Cam. Angle pitch and heading GLdouble c_shift[2]; // Cam. pos x / y GLdouble gnear, gfar; GLdouble gleft, gright; GLdouble gtop, gbottom; GLdouble zoom; vec4_t rotation_quaternion; // Only for recording int ** i_rings[5]; atom_data * at_data; // Volumes gboolean show_vol[FILLED_STYLES]; ColRGBA vol_col[FILLED_STYLES]; gboolean * fm_show_vol[2][FILLED_STYLES]; ColRGBA * fm_vol_col[2][FILLED_STYLES]; int rotation_mode; int style; GLint quality; GLint render; int lights; int * light_loc; Light * l_ght; Material m_terial; Fog f_g; int filled_type; int step; int rep; int id; } image; struct snapshot { image * img; struct snapshot * prev; struct snapshot * next; }; typedef struct { int frames; struct snapshot * first; struct snapshot * last; } animation; typedef struct { float ** data; // The value per MD step / atom for custom color map ColRGBA ** colors; // The color per MD step / atom for custom color map int points; float * positions; float cmin; float cmax; ColRGBA * values; } colormap; typedef struct { int proj; int action; 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; // O = Normal // 1 = Random int mode; // 0 = Atoms // 1 = Groups int object; int filter; int spec; 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 update_bonding; int set_for_all; int int_b; int * lab; int * pick; int todo_size; int * todo; tint pointer[6]; } atom_search; struct insert_object { int id; int origin; float dim; gchar * name; int type; int atoms; int species; int * old_z; struct atom * at_list; int ifcl; int * bcid; double occ; //double * icoord; double * baryc; int bonds; int ** ibonds; //int ** coord_data; coord_info * coord; struct insert_object * prev; struct insert_object * next; }; typedef struct { int multi; gchar * let; gchar * site; gchar *** pos; } wyckoff_position; typedef struct { int origin; gchar * name; gchar * pos[3]; int nump; gchar *** points; } spg_setting; typedef struct { int id; gchar * name; gchar * hms; gchar * bravais; gchar * setting; int sid; int nums; spg_setting * settings; int numw; wyckoff_position * wyckoff; mat4_t coord_origin; mat4_t wyck_origin; } space_group; typedef struct { double param[2][3]; double vect[3][3]; double rvect[3][3]; mat4_t frac_to_cart; mat4_t cart_to_frac; double vol; double dens; } box_info; typedef struct { box_info * box; int cextra[3]; int pbc; // Apply pbc (still used ?) int frac; // Frac coordinates (still ?) int ltype; // Lattice type (0=isolated, 1= a,b,c + angles 2= vectors) double volume; double density; gboolean npt; gboolean has_a_box; gboolean crystal; space_group * sp_group; } cell_info; typedef struct { 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]; } builder_edition; typedef struct { 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 struct insert_object * to_be_inserted[4]; struct insert_object * to_be_moved[2]; int adv_bonding[2]; coord_info * coord; int add_spec; double * new_z; } atom_edition; typedef struct { 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]; } cell_edition; typedef struct { 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]; } opengl_edition; typedef struct { 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]; } coord_edition; typedef struct { GtkWidget * win; GtkWidget * label; GtkWidget * selection_tree[3]; } measures; typedef struct { 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]; } volumes; typedef struct { GtkWidget * win; GtkWidget * notebook; } model_edition; typedef struct { gboolean init; int proj; // 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; // Selection mode // 0 = atom/bond, 1 = fragment, 2 = molecule, 3 = single frag, 4 = single mol int selection_mode; // For temporary backup purposes only: struct 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]; colormap * custom_map; int allbonds[2]; // 0/1=norm/clones, overall total number of bonds int ** bonds; // A=MD step, B=0/1=norm/clones, VALUE=number of bonds int **** bondid; // A=MD step, B=0/1=norm/clones, C=bid, D: 0 = at_1 and 1 = at_2 // Clones vec3_t ** clones; // Coordination // 0 = on move // atom_win active: 0 = normal, 1 = random // atom_win inactive: 0/1 to turn off/on // 1 = on copy // atom_win inactive: 0/1 to turn off/on gboolean rebuild[2][2]; gboolean bonding; gboolean adv_bonding[2]; // 0 = Fragments, 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 atomic rings 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 atomic chains // 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 atoms 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; } glwin; #endif Atomes-GNU-1.1.12/src/opengl/math_3d.h000066400000000000000000001001621450232132300172110ustar00rootroot00000000000000/* 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 */ /* * This header file: 'math_3d.h' * * Contains: */ /* 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.12/src/opengl/ogl_draw.c000066400000000000000000000430551450232132300174720ustar00rootroot00000000000000/* 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 */ /* * This file: 'ogl_draw.c' * * Contains: * - The main OpenGL drawing subroutines * * List of subroutines: 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 (struct atom * at, float * shift); void at_unshift (struct atom * at, float * shift); void draw (glwin * view); struct screen_string * duplicate_screen_string (struct screen_string * old_s); struct atom * duplicate_atom (struct 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 struct atom_selection * duplicate_ogl_selection (struct atom_selection * old_sel); double x, y, z; GLUquadricObj * quadric; glwin * wingl; struct 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 (struct project * this_proj); extern void create_volumes_lists (); /* * void print_matrices () * * Usage: 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); } /* * void setup_camera () * * Usage: 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(); } /* * void unrotate_camera () * * Usage: 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)); } /* * struct screen_string * duplicate_screen_string (struct screen_string * old_s) * * Usage: create a copy a screen_string data structure * * struct screen_string * old_s : the data structure to be copied */ struct screen_string * duplicate_screen_string (struct screen_string * old_s) { struct 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; } /* * void duplicate_material_and_lightning (image * new_img, image * old_img) * * Usage: copy the material and lightning parameters of an image data structure * * image * new_img : the new image * image * 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; } /* * image * duplicate_image (image * old_img) * * Usage: create a copy of an image data structure * * image * 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); } struct 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; } /* * void add_image () * * Usage: add an image to the animation */ void add_image () { struct 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 (); /* * struct atom * duplicate_atom (struct atom * at) * * Usage: copy (partially) an atom data structure * * struct atom * at : the atom to copy */ struct atom * duplicate_atom (struct atom * at) { struct 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; } /* * void at_shift (struct atom * at, float * shift) * * Usage: modify atomic coordinates to display image in cell replica * * struct atom * at : the atom * float * shift : the shift to apply */ void at_shift (struct atom * at, float * shift) { at -> x += shift[0]; at -> y += shift[1]; at -> z += shift[2]; } /* * void at_unshift (struct atom * at, float * shift) * * Usage: correct atomic coordinates modified to display image in cell replica * * struct atom * at : the atom * float * shift : the shift to correct */ void at_unshift (struct atom * at, float * shift) { at -> x -= shift[0]; at -> y -= shift[1]; at -> z -= shift[2]; } /* * void draw (glwin * view) * * Usage: main drawing subroutine for the OpenGL window * * glwin * 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.12/src/opengl/ogl_shaders.c000066400000000000000000001170201450232132300201600ustar00rootroot00000000000000/* 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 */ /* * 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.12/src/opengl/ogl_shading.c000066400000000000000000001161031450232132300201450ustar00rootroot00000000000000/* 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 */ /* * This file: 'ogl_shading.c' * * Contains: * - * * * List of subroutines: 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 (struct 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_polyedra (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], struct 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 */ /* * GLuint create_shader (int type, const GLchar * src) * * Usage: create an OpenGL GLSL shader * * int type : type of the shader * const GLchar * 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; } /* * GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) * * Usage: allocate GLuint data pointer, ensure that it is clean * * GLuint * pointer : the data pointer to allocate * int 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 /* * void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) * * Usage: set lightning uniform location * * GLuint * lightning : * int id : shader id * int j : light id * int k : uniform id * char * 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)); } /* * GLuint * glsl_add_lights (glsl_program * glsl) * * Usage: add lightning to an OpenGL shader program * * glsl_program * 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; } /* * void glsl_bind_points (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object point to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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); } /* * void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object sphere to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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); } /* * void glsl_bind_lines (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object line to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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"); } } /* * void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object cylinder to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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); } /* * void glsl_bind_caps (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object cylinder cap to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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); } /* * void glsl_bind_polyedra (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object polyhedra to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * obj : the 3D object polyhedra to bind */ void glsl_bind_polyedra (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))); } /* * void update_string_instances (glsl_program * glsl, object_3d * obj) * * Usage: * * glsl_program * glsl : the target glsl * object_3d * 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); } } } /* * void glsl_bind_string (glsl_program * glsl, object_3d * obj) * * Usage: bind a 3D object text string to an OpenGL shader program * * glsl_program * glsl : the target glsl * object_3d * 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); } /* * object_3d * duplicate_object_3d (object_3d * old_obj) * * Usage: create a copy of an object_3d data structure * * object_3d * 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; } /* * 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) * * Usage: create an OpenGL shader program * * int object : shader id (in enum shaders) * int object_id : shader type in: GLSL_SPHERES, GLSL_POINTS, GLSL_LINES, GLSL_CYLINDERS, GLSL_CAPS, GLSL_POLYEDRA, GLSL_STRING * const GLchar * vertex : general shader: in the shaders defined in 'ogl_shaders.c' * const GLchar * geometry : geometry shader, if any: in the shaders defined in 'ogl_shaders.c' * const GLchar * fragment : color shader, if any: in the shaders defined in 'ogl_shaders.c' * GLenum type_of_vertices : type of vertices in: GL_POINTS, GL_LINES, GL_TRIANGLE GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP * int narray : number of vertices to allocate * int nunif : number of uniform location(s) to allocate * gboolean lightning : use lightning (1/0) * object_3d * 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_polyedra (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; } /* * gboolean in_md_shaders (struct project * this_proj, int id) * * Usage: is this shader MD dependent ? * * struct project * this_proj : the target project * int id : the shader id */ gboolean in_md_shaders (struct 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; } /* * void re_create_all_md_shaders (glwin * view) * * Usage: re-initialize all MD dependent OpenGL shaders * * glwin * view : the target glwin */ void re_create_all_md_shaders (glwin * view) { int i, j; struct project * this_proj = get_project_by_id(view -> proj); for (i=0; i steps; j++) view -> n_shaders[i][j] = -1; } } } /* * void re_create_md_shaders (int nshaders, int shaders[nshaders], struct project * this_proj) * * Usage: re-initialize some MD dependent OpenGL shaders * * int nshaders : the number of shader(s) to initialize * int shaders[nshaders] : the list of shaders * struct project * this_proj : the target project */ void re_create_md_shaders (int nshaders, int shaders[nshaders], struct 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; } } } /* * void cleaning_shaders (glwin * view, int shader) * * Usage: re-initialize an OpenGL shader * * glwin * view : the target glwin * int 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; } /* * void recreate_all_shaders (glwin * view) * * Usage: re-initialize all OpenGL shaders * * glwin * view : the target glwin */ void recreate_all_shaders (glwin * view) { int i; for (i=0; i create_shaders[i] = TRUE; } } /* * void init_default_shaders (glwin * view) * * Usage: re-initialize the default OpenGL shaders * * glwin * 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); } } } } /* * void init_shaders (glwin * view) * * Usage: initialize all the OpenGL shaders * * glwin * view : the target glwin */ void init_shaders (glwin * view) { int i, j; struct 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; } } /* * gboolean glsl_disable_cull_face (glsl_program * glsl) * * Usage: * * glsl_program * 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; } } /* * void set_lights_data (glsl_program * glsl) * * Usage: * * glsl_program * 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}; /* * void shading_glsl_text (glsl_program * glsl) * * Usage: * * glsl_program * 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); } /* * void render_this_shader (glsl_program * glsl, int ids) * * Usage: render an OpenGL shader * * glsl_program * glsl : the target glsl * int 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); } /* * void draw_vertices (int id) * * Usage: * * int id : */ 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.12/src/opengl/ogl_shading.h000066400000000000000000000064601450232132300201560ustar00rootroot00000000000000/* 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 */ /* * This header file: 'ogl_shading.h' * * Contains: */ #ifndef OGL_SHADING_H_ #define OGL_SHADING_H_ #define GLSL_POINTS 0 #define GLSL_SPHERES 1 #define GLSL_LINES 2 #define GLSL_CYLINDERS 3 #define GLSL_CAPS 4 #define GLSL_POLYEDRA 5 #define GLSL_STRING 6 #define GLSL_LIGHT 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 struct { int quality; int num_vertices; int vert_buffer_size; float * vertices; int num_indices; int ind_buffer_size; int * indices; int num_instances; int inst_buffer_size; float * instances; GLuint texture; // Texture ID if any float shift[4]; // Texture shift if any (0-2: x,y,z), visible (3: always/normal) } object_3d; typedef struct { int id; int object; GLuint vertex_shader; GLuint geometry_shader; GLuint fragment_shader; GLenum vert_type; int draw_type; gboolean draw_instanced; GLuint vao; GLuint * vbo; GLuint * array_pointer; GLuint * uniform_loc; GLuint * light_uniform; object_3d * obj; float line_width; ColRGBA * col; } glsl_program; #endif Atomes-GNU-1.1.12/src/opengl/ogl_utils.c000066400000000000000000000173471450232132300177020ustar00rootroot00000000000000/* 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 */ /* * This file: 'ogl_utils.c' * * Contains: * - 2D and 3D calculations utilities for distances and angles * * List of subroutines: double arc_cos (double val); struct distance distance_2d (struct atom * at, struct atom * bt); struct distance distance_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt); struct angle angle_2d (struct atom * at, struct atom * bt, struct atom * ct); struct angle angle_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct); struct angle dihedral_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt); struct angle inversion_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct 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); /* * struct distance distance_2d (struct atom * at, struct atom * bt) * * Usage: distance between atom a and b in 2D * * struct atom * at : atom a * struct atom * bt : atom b */ struct distance distance_2d (struct atom * at, struct atom * bt) { struct 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; } /* * struct distance distance_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt) * * Usage: distance between atom a and b in 3D * * cell_info * cell : unit cell * int mdstep : the MD step * struct atom * at : atom a * struct atom * bt : atom b */ struct distance distance_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt) { struct 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; } /* * double arc_cos (double val) * * Usage: compute arc cosinus * * double 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; } } /* * struct angle angle_2d (struct atom * at, struct atom * bt, struct atom * ct) * * Usage: angle between atom a, b and c in 2D * * struct atom * at : atom a * struct atom * bt : atom b * struct atom * ct : atom c */ struct angle angle_2d (struct atom * at, struct atom * bt, struct atom * ct) { struct angle theta; struct distance dist_a = distance_2d (bt, at); struct 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; } /* * struct angle angle_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct) * * Usage: angle between atom a, b and c in 3D * * cell_info * cell : unit cell * int mdstep : the MD step * struct atom * at : atom a * struct atom * bt : atom b * struct atom * ct : atom c */ struct angle angle_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct) { struct angle theta; struct distance dist_a = distance_3d (cell, mdstep, bt, at); struct 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; } /* * struct angle dihedral_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt) * * Usage: dihedral between atom a, b, c and d in 3D * * cell_info * cell : unit cell * int mdstep : the MD step * struct atom * at : atom a * struct atom * bt : atom b * struct atom * ct : atom c * struct atom * dt : atom d */ struct angle dihedral_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt) { struct angle phi; struct distance dist_a = distance_3d (cell, mdstep, at, bt); struct distance dist_b = distance_3d (cell, mdstep, bt, ct); struct 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; } /* * struct angle inversion_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt) * * Usage: inversion angle between atom a, b, c and d in 3D * * cell_info * cell : unit cell * int mdstep : the MD step * struct atom * at : atom a * struct atom * bt : atom b * struct atom * ct : atom c * struct atom * dt : atom d */ struct angle inversion_3d (cell_info * cell, int mdstep, struct atom * at, struct atom * bt, struct atom * ct, struct atom * dt) { struct angle inv; struct distance dist_a = distance_3d (cell, mdstep, bt, at); struct distance dist_b = distance_3d (cell, mdstep, ct, at); struct 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.12/src/opengl/selection.c000066400000000000000000000523511450232132300176600ustar00rootroot00000000000000/* 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 */ /* * This file: 'selection.c' * * Contains: * - The subroutines handling the atom and bond selection process in the OpenGL window * * List of subroutines: int find_bond_in_bonds (struct project * this_proj, int i, int j, int b, int id); int find_selected_bond (struct project * this_proj, int id); int find_selected_atom (struct 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 (struct atom_selection * at_list, struct atom * at, gboolean add); void process_selected_atom (struct project * this_proj, glwin * view, int id, int ac, int se, int pi); void process_selection (struct project * this_proj, glwin * view, int id, int ac, int pi); void process_the_hits (glwin * view, gint event_button, double ptx, double pty); struct selatom * new_selatom (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); /* * int find_bond_in_bonds (struct project * this_proj, int i, int j, int b, int id) * * Usage: * * struct project * this_proj : the target project * int i : id tracker * int j : the MD step * int b : 0 = normal, 1 = clones * int id : the id-th visible bond to find */ int find_bond_in_bonds (struct 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; } /* * int find_selected_bond (struct project * this_proj, int id) * * Usage: find the selected bond based of the picked color id * * struct project * this_proj : the target project * int id : the id-th visible bond to find */ int find_selected_bond (struct 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; } } /* * int find_selected_atom (struct project * this_proj, int id) * * Usage: find the selected atom based of the picked color id * * struct project * this_proj : the target project * int id : the id-th visible atom or clone to find */ int find_selected_atom (struct 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; } /* * int num_bonds (int i) * * Usage: number of distinct pair(s) of atoms in selection * * int i : the number of atom(s) in selection */ int num_bonds (int i) { return i*(i-1)/2; } /* * int num_angles (int i) * * Usage: number of distinct triplet(s) of atoms in selection * * int i : the number of atom(s) in selection */ int num_angles (int i) { return i*(i-1)*(i-2)/2; } /* * int num_dihedrals (int i) * * Usage: number of distinct quadruplet(s) of atoms in selection * * int 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}; /* * void save_dihedral_selection (glwin * view, int pi) * * Usage: save the dihedral selection data * * glwin * view : the target glwin * int 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; } } /* * void update_dihedral_selection (glwin * view, int pi) * * Usage: update the dihedral selection data * * glwin * view : the target glwin * int 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); } } /* * void save_angle_selection (glwin * view, int pi) * * Usage: save the angle selection data * * glwin * view : the target glwin * int 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; } } /* * void update_angle_selection (glwin * view, int pi) * * Usage: update the angle selection data * * glwin * view : the target glwin * int 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); } } /* * void save_bond_selection (glwin * view, int pi) * * Usage: save the bond selection data * * glwin * view : the target glwin * int 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; } } /* * void update_bond_selection (glwin * view, int pi) * * Usage: update the bond selection data * * glwin * view : the target glwin * int 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); } } } /* * void save_all_selections (glwin * view, int pi) * * Usage: save all selection data * * glwin * view : the target glwin * int 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); } /* * void update_all_selections (glwin * view, int pi) * * Usage: update the selection data: bonds, angles and dihedrals * * glwin * view : the target glwin * int 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); } } } } /* * struct selatom * new_selatom (int id, int sp) * * Usage: create a selection atom * * int id : atom id * int sp : atom species */ struct selatom * new_selatom (int id, int sp) { struct selatom * new_sel = g_malloc0 (sizeof*new_sel); new_sel -> id = id; new_sel -> sp = sp; return new_sel; } /* * void update_selection_list (struct atom_selection * at_list, struct atom * at, gboolean add) * * Usage: update the selection list adding or removing an atom * * struct atom_selection * at_list : target atom selection * struct atom * at : atom * gboolean add : add or remove (1/0) */ void update_selection_list (struct atom_selection * at_list, struct atom * at, gboolean add) { int i; struct selatom * selection = at_list -> first; if (add) { selection = at_list -> last; if (at_list -> selected == 0) { at_list -> first = new_selatom (at -> id, at -> sp); at_list -> last = at_list -> first; } else { selection -> next = new_selatom (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; } } } /* * void process_selected_atom (struct project * this_proj, glwin * view, int id, int ac, int se, int pi) * * Usage: * * struct project * this_proj : the target project * glwin * view : the target glwin * int id : the atom id * int ac : atom or clone (0/1) * int se : set to 0 to ensure to remove a selected atom from the list and not to add label * int pi : selection mode (0 = normal mode, 1 = edition mode) */ void process_selected_atom (struct 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 --; } 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 --; } 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 ++; } } /* * void process_selection (struct project * this_proj, glwin * view, int id, int ac, int pi) * * Usage: * * struct project * this_proj : the target project * glwin * view : the target glwin * int id : the atom id * int ac : atom or clone (0/1) * int pi : selection mode (0 = normal mode, 1 = edition mode) */ void process_selection (struct 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; } } } /* * void process_the_hits (glwin * view, gint event_button, double ptx, double pty) * * Usage: process a mouse click * * glwin * view : the target glwin * gint event_button : the event button * double ptx : x position * double 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) { struct 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); if (view -> rebuild[0][1]) view -> rebuild[0][0] = TRUE; if (view -> rebuild[1][1]) view -> rebuild[1][0] = TRUE; } 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.12/src/opengl/win/000077500000000000000000000000001450232132300163165ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/opengl/win/color_box.c000066400000000000000000000364121450232132300204560ustar00rootroot00000000000000/* 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 */ /* * This file: 'color_box.c' * * Contains: * - The subroutines to create the color palettes for the menus of the OpenGL window - The callbacks to set the color using the color palettes * * List of subroutines: 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" /* * void get_color (ColRGBA * but, int cid) * * Usage: get color from the color palette id * * ColRGBA * but : the color to prepare * int 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; } /* * cairo_surface_t * col_surface (double r, double g, double b, int x, int y) * * Usage: create a cairo sufrace painted with the appropriate color * * double r : red value * double g : green value * double b : blue value * int x : surface x size * int 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; } /* * G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) * * Usage: set background color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) * * Usage: set box color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) * * Usage: set atomic species color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) * * Usage: set ring polyhedra color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; struct 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); } /* * G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) * * Usage: set total coordination color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; struct 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); } /* * G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) * * Usage: set partial coordination color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; struct 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); } /* * G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) * * Usage: set fragment color * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; struct 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 /* * void color_box (glwin * view, int ideo, int spec, int geo) * * Usage: create the color palette menus data pointers GTK4 * * glwin * view : the target glwin * int ideo : geometry id or else * int spec : species or else * int geo : geometry or else */ void color_box (glwin * view, int ideo, int spec, int geo) #else /* * GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) * * Usage: create the color palette pointers and menus GTK3 version * * glwin * view : the target glwin * int ideo : geometry id or else * int spec : species or else * int 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 struct 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 /* * GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) * * Usage: create the color palette menus GTK4 version * * glwin * view : the target glwin * int ideo : geometry id or else * int spec : species or else * int 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; struct 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.12/src/opengl/win/color_box.h000066400000000000000000000035361450232132300204640ustar00rootroot00000000000000/* 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 */ /* * This header file: 'color_box.h' * * Contains: */ typedef struct { double red; double green; double blue; } color; extern color colorp[64]; typedef struct { int atom; color col; } acolor; #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.12/src/opengl/win/glwindow.c000066400000000000000000001364521450232132300203270ustar00rootroot00000000000000/* 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 */ /* * This file: 'glwindow.c' * * Contains: * - The subroutines to create a project OpenGL window * * List of subroutines: 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 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 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 (struct 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); #ifdef GTK3 /* * GtkWidget * prep_rings_menu (glwin * view, int id) * * Usage: create the 'Rings' submenu GTK3 * * glwin * view : the target glwin * int 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); } } /* * GtkWidget * coord_menu (glwin * view) * * Usage: create the 'Coordination' submenu GTK3 * * glwin * 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]); add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); return menu; } #endif /* * void update_all_menus (glwin * view, int nats) * * Usage: update all menus of the OpenGL window * * glwin * view : the target glwin * int 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 } /* * G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) * * Usage: render image from the OpenGL window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) * * Usage: create the 'OpenGL' submenu items GTK3 * * GtkWidget * menu : the GtkWidget sending the signal * glwin * view : the target glwin * int 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); } /* * GtkWidget * menu_opengl (glwin * view, int pop) * * Usage: create the 'OpenGL' submenu GTK3 * * glwin * view : the target glwin * int 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; } /* * void menu_items_model (GtkWidget * menu, glwin * view, int pop) * * Usage: create the 'Model' submenu items GTK3 * * GtkWidget * menu : the GtkWidget sending the signal * glwin * view : the target glwin * int 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)); } } /* * GtkWidget * menu_model (glwin * view, int pop) * * Usage: create the 'Model' submenu GTK3 * * glwin * view : the target glwin * int 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; } /* * void menu_items_view (GtkWidget * menu, glwin * view, int popm) * * Usage: create the 'View' menu items GTK3 * * GtkWidget * menu : the GtkWidget sending the signal * glwin * view : the target glwin * int 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); } } /* * GtkWidget * menu_view (glwin * view, int popm) * * Usage: create the 'View' submenu GTK3 * * glwin * view : the target glwin * int 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 /* * void prepare_opengl_menu_bar (glwin * view) * * Usage: update the OpenGL window menu bar * * glwin * 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))); struct 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 } /* * void change_color_map (glwin * view, int col) * * Usage: change atom / polyhedra color map * * glwin * view : the target glwin * int 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; } /* * void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) * * Usage: handle keyboard motion event on the OpenGL window * * glwin * view : the target glwin * int axis : axis * int da : direction (-1/1) * int db : zoom out (1) or zoom in (3) * gboolean UpDown : up or down key motion (TRUE), or else (FALSE) * GdkModifierType 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); } } /* * mat4_t insert_projection (glwin * view) * * Usage: calculate the insertion projection matrix to insert object in the 3D window * * glwin * 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); } /* * vec3_t get_insertion_coordinates (glwin * view) * * Usage: get the insertion coordinates to insert object in the 3D window * * glwin * 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); } /* * void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) * * Usage: the keyboard shortcut actions for the OpenGL window * * guint keyval : the key pressed * GdkModifierType state : the keyboard modifier * gpointer 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 set_mode (NULL, & view -> colorp[0][0]); #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_b: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 set_style (NULL, & view -> colorp[BALL_AND_STICK][0]); #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 set_style (NULL, & view -> colorp[CYLINDERS][0]); #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_d: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 set_style (NULL, & view -> colorp[PUNT][0]); #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 set_mode (NULL, & view -> colorp[1][0]); #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_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_n: if (state & GDK_CONTROL_MASK) on_create_new_project (NULL, NULL); break; case GDK_KEY_p: if (get_project_by_id(view -> proj) -> natomes) change_color_map (view, 1); break; case GDK_KEY_r: 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 set_style (NULL, & view -> colorp[SPHERES][0]); #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 set_style (NULL, & view -> colorp[OGL_STYLES][0]); #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_w: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 set_style (NULL, & view -> colorp[WIREFRAME][0]); #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 /* * G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) * * Usage: keyboard key press event for the OpenGL window GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEventKey * event : the GdkEventKey triggering the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) * * Usage: keyboard key press event for the OpenGL window GTK4 * * GtkEventControllerKey * self : the GtkEventControllerKey sending the signal * guint keyval : number of times it was pressed * guint keycode : the key pressed * GdkModifierType state : the keyboard modifier * gpointer 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 /* * G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) * * Usage: realize event for the OpenGL window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * void gtk_window_change_gdk_visual (GtkWidget * win) * * Usage: change the Gdk visual * * GtkWidget * 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) { struct 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; } } /* * void prep_model (int p) * * Usage: prepare, or display, the OpenGL model window * * int p : the project id */ void prep_model (int p) { struct 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.12/src/opengl/win/glwindow.h000066400000000000000000000024521450232132300203240ustar00rootroot00000000000000/* 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 */ /* * This header file: 'glwindow.h' * * Contains: */ 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.12/src/opengl/win/initchain.c000066400000000000000000000055111450232132300204320ustar00rootroot00000000000000/* 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 */ /* * This file: 'initchain.c' * * Contains: * - subroutines collecting chain(s) data from Fortran90 - subroutines allocating chain(s) data from Fortran90 * * List of subroutines: 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" /* * void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) * * Usage: getting the chain data elemnts from Fortran90 * * int * st : the MD step * int * ta : the chain size * int * ri : the chain id * int nchain[* ta] : 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; } } /* * void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]) * * Usage: allocate atom chains data from Fortran90 information * * int * st : the MD step * int * at : the atom id * int * ta : the chain size * int * num : the number of chain(s) * int nchain[* num] : 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; } } } /* * void allocate_all_chains_ (int * st, int * ta, int * nring) * * Usage: allocate chains data from Fortran90 information * * int * st : the MD step * int * ta : the number of chain size(s) * int * 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.12/src/opengl/win/initcoord.c000066400000000000000000000547611450232132300204710ustar00rootroot00000000000000/* 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 */ /* * This file: 'initcoord.c' * * Contains: * - Coordinations and polyhedra menu data initialization - Coordinations and polyhedra GTK3 menus and menu items creation - Initialization of coordinations and polyhedra related data from Fortran90 information * * List of subroutines: 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; /* * ColRGBA init_color (int id, int numid) * * Usage: initialize color based id number over total number of elements * * int id : the id number * int 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; } /* * void gcid_spcolor_setup (int sp, int id) * * Usage: prepare color pointers * * int sp : the chemical species * int 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 /* * void set_color_map_sensitive (glwin * view) * * Usage: set color map menu items sensitivity GTK3 * * glwin * 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); } } /* * void set_advanced_bonding_menus (glwin * view) * * Usage: set sensitivity of advanced bonding menus GTK3 * * glwin * 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]); } } /* * void prep_all_coord_menus (glwin * view) * * Usage: prepare coordination menus GTK3 * * glwin * 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); } /* * GtkWidget * coord_view_setup (int * sp, int id, int jd) * * Usage: create coordination menu elements GTK3 * * int * sp : the chemical species * int id : the coordination (0=total, 1=partial, >1 rings) * int 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; } /* * GtkWidget * coord_color_setup (int * sp, int id, int jd) * * Usage: create coordination color menu elements GTK3 * * int * sp : the chemical species * int id : the coordination (0=total, 1=partial, >1 rings) * int 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; } /* * GtkWidget * poly_show_setup (int * sp, int id, int jd) * * Usage: create polyhedra menu item elements GTK3 * * int * sp : the chemical species * int id : the coordination (0=total, 1=partial, >1 rings) * int 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; } /* * GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) * * Usage: create coordination/polyhedra menu widget GTK3 * * int p : coordination (0), or polyhedra (1) * char * name : text of the menu item * gboolean va : status, coordination or polyhedra visible or not (1/0) * GtkWidget * menu : the GtkWidget menu to attach the menu item to * qint * 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 /* * void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) * * Usage: partial coordination data from Fortran90 * * int * sp : the chemical species * int * id : the partial coordination id * int * ngsp : the number of chemical species * int coord[* ngsp] : 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); } /* * void allocate_partial_geo_ (int * sp, int * ngsp) * * Usage: allocate partial coordination(s) data * * int * sp : the chemical species * int * 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]); } /* * void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]) * * Usage: getting atomic coordinations data from Fortran90, and related GTK3 menu elements creation * * int * id : 0 for total coordination(s), 1 for partial coordination(s) * int * sp : the chemical species * int * ngsp : the number of distinct coordination(s) for that chemical species * int coordt[* ngsp] : 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 } /* * void init_menu_fragmol_ (int * id) * * Usage: getting fragment(s)/molecule(s) data from Fortran90, and related GTK3 menu elements creation * * int * 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 } /* * void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init) * * Usage: getting rings statistics data from Fortran90, and related GTK3 menu elements creation * * int * coo : the coord type, for rings: * ids + 4, for chains: 9 * int * ids : the ring(s) type in [0-4], or 0 for the chains * int * ngsp : the total number of distinct ring size(s) * int coordt[* ngsp] : the list of ring size(s) with rings * int * 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 } /* * void init_opengl_coords (int id, int nt, int init) * * Usage: initialize data to * * int * id : the geometry id, in: [0-9] * int nt : total number of distinct coordination * int 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 } } } /* * void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]) * * Usage: coordination information from Fortran90 * * int * id : the geometry id, in: [0-9] * int * num : number of atom(s) * int * cmin : min value for the total coordination * int * cmax : max value for the total coordination * int * nt : total number of distinct coordination * int coord[* num] : 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.12/src/opengl/win/initcoord.h000066400000000000000000000024601450232132300204630ustar00rootroot00000000000000/* 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 */ /* * This header file: 'initcoord.h' */ #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.12/src/opengl/win/initmol.c000066400000000000000000000433001450232132300201350ustar00rootroot00000000000000/* 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 */ /* * This file: 'initmol.c' * * Contains: * * * * * List of subroutines: int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]); gboolean are_identical_molecules (struct search_molecule * mol_a, struct search_molecule * mol_b); void duplicate_molecule (struct molecule * new_mol, struct 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 (struct 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 (struct search_molecule * smol); void setup_molecules_ (int * stepid); void setup_menu_molecules_ (); void setup_fragments_ (int * sid, int coord[active_project -> natomes]); struct search_molecule * duplicate_search_molecule (struct search_molecule * old_mol); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "initcoord.h" 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) struct search_molecule * next; struct search_molecule * prev; }; int * pgeo; struct search_molecule * tmp_search = NULL; struct search_molecule ** in_calc_mol = NULL; extern struct molecule * tmp_mol; /* * void duplicate_molecule (struct molecule * new_mol, struct search_molecule * old_mol) * * Usage: create a copy of a molecule data structure * * struct molecule * new_mol : the new molecule * struct search_molecule * old_mol : the molecule to copy */ void duplicate_molecule (struct molecule * new_mol, struct 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); } /* * struct search_molecule * duplicate_search_molecule (struct search_molecule * old_mol) * * Usage: create a copy of a search molecule data structure * * struct search_molecule * old_mol : the search molecule data structure to copy */ struct search_molecule * duplicate_search_molecule (struct search_molecule * old_mol) { struct 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; } /* * void allocate_mol_for_step_ (int * sid, int * mol_in_step) * * Usage: allocate the data to store molecule information for a MD step * * int * sid : the MD step * int * 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; } /* * void allocate_mol_data_ () * * Usage: 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]; } } /* * void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]) * * Usage: update molecule typology information from Fortran90 * * int * stp : the MD step * int * mol : the molecule id * int * aid : the atom id * int * nvs : the number of neighbor(s) for this atom * int neigh[* nvs] : 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; struct 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] ++; } } } } /* * void update_mol_details (struct search_molecule * mol, int sp, int cp) * * Usage: update molecule information * * struct search_molecule * mol : the molecule to update * int sp : the chemical species * int cp : the partial coordination id */ void update_mol_details (struct 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; } } } } } /* * void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]) * * Usage: overall molecule information from Fortran90 * * int * stp : the MD step * int * mol : the molecule id * int * ats : the number of atom(s) in the molecule * int * sps : the number of chemical species in the molecule * int spec_in_mol[* sps] : the number of atom(s) by chemical species in the molecule * int atom_in_mol[* ats] : 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; struct 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; } /* * gboolean are_identical_molecules (struct search_molecule * mol_a, struct search_molecule * mol_b) * * Usage: test if 2 molecules are identicals * * struct search_molecule * mol_a : the 1st molecule * struct search_molecule * mol_b : the 2nd molecule */ gboolean are_identical_molecules (struct search_molecule * mol_a, struct 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; } /* * int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) * * Usage: merge molecule a and molecule b data * * int val_a : multiplicity for molecule a * int val_b : multiplicity for molecule b * int table_a[val_a] : the list of molecular fragment(s) for molecule a * int table_a[val_a] : 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); } /* * void setup_molecules_ (int * stepid) * * Usage: setup molecule data * * int * stepid : the MD step */ void setup_molecules_ (int * stepid) { int i, j, k, l, m, n; struct search_molecule * mtmp_at, * mtmp_bt; struct search_molecule * first_mol = NULL; struct 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); } /* * void setup_menu_molecules_ () * * Usage: 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); } /* * void setup_fragments_ (int * sid, int coord[active_project -> natomes]) * * Usage: atom(s) fragment(s) information from Fortran90 * * int * sid : the MD step * int coord[active_project -> natomes] : 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.12/src/opengl/win/initring.c000066400000000000000000000057771450232132300203250ustar00rootroot00000000000000/* 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 */ /* * This file: 'initring.c' * * Contains: * - * * List of subroutines: 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" /* * void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]) * * Usage: get single ring data for the glwin from Fortran90 * * int * id : type of ring * int * st : the MD step * int * ta : size of the ring * int * ri : ring size id * int nring[* ta+1] : 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; } } /* * void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]) * * Usage: get rings data for an atom from Fortran90 * * int * st : the MD step * int * at : atom id * int * id : type of ring * int * ta : size of the ring * int * num : number of ring(s) of that size * int ring[* num] : 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; } } } /* * void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) * * Usage: allocate data to store ring statistics results for the glwin * * int * id : the type of ring * int * st : the MD step * int * ta : the size of the ring * int * 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.12/src/opengl/win/m_anim.c000066400000000000000000000120531450232132300177230ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_anim.c' * * Contains: * - The subroutines to create the 'Animate' submenu * * List of subroutines: 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 /* * GtkWidget * menu_anim (glwin * view, int id) * * Usage: create the 'Animate' submenu elements GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the spinner window creation signal * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) { window_spinner (NULL, data); } /* * G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the sequencer window creation signal * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) { window_sequencer (NULL, data); } /* * G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the recorder window creation signal * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) { window_recorder (NULL, data); } /* * GMenu * menu_anim (glwin * view, int popm) * * Usage: create the 'Animate' submenu elements * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_atoms.c000066400000000000000000000700361450232132300201270ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_atoms.c' * * Contains: * - The subroutine to create the 'Model -> Atom(s)' submenu * * List of subroutines: gchar * label_atpts (struct 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); /* * gchar * label_atpts (struct project * this_proj, glwin * view, int id) * * Usage: prepare the text of a menu item in the 'Model -> Atom(s)' submenu * * struct project * this_proj : the target project * glwin * view : the target glwin * int id : the type of label to prepare */ gchar * label_atpts (struct 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); /* * G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) * * Usage: handle the show / hide atomic species signal * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) * * Usage: handle the show / hide atomic species label signal * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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); } /* * G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) * * Usage: handle the show / hide all atomic labels signal * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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); } } /* * GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) * * Usage: create a chemical species related check menu item GTK3 * * char * name : menu item name * gboolean va : check menu item status * gboolean vb : menu item sensitivity * GtkWidget * menu : the GtkWidget sending the signal * GCallback handler : the associated callback * tint * 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; } /* * GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) * * Usage: create a 'Model -> Atom(s)' menu item GTK3 * * gchar * str : the label for the menu item * GtkWidget * widg : the menu GtkWidget to attach the menu item to * tint * 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; } /* * GtkWidget * show_atoms_submenu (glwin * view, int id, int at) * * Usage: create the 'Atom(s) -> show' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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; struct 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; } /* * GtkWidget * color_atoms_submenu (glwin * view, int id, int at) * * Usage: create the 'Atom(s) -> Color(s)' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int at : atoms (0) or clones (1) */ GtkWidget * color_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menuc = gtk_menu_new (); struct 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; } /* * GtkWidget * label_atoms_submenu (glwin * view, int id, int at) * * Usage: create the 'Atom(s) -> Label(s)' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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); struct 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; } /* * GtkWidget * menu_atoms (glwin * view, int id, int at) * * Usage: create the 'Atom(s)' submenu elements GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int at : atoms (0) or clones (1) */ GtkWidget * menu_atoms (glwin * view, int id, int at) { int i; GtkWidget * widg; gchar * str; struct 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); /* * G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the show/hide signal GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; struct 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); } } } /* * G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the show/hide label signal GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; struct 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); } } } /* * G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the show/hide all labels GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; struct 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); } /* * GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) * * Usage: create the 'Atom(s) -> Label(s)' submenu elements * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int at : atoms (0) or clones (1) * gboolean 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 (); struct 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; } /* * GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) * * Usage: create the 'Atom(s) -> Color(s)' submenu elements * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int at : atoms (0) or clones (1) * gboolean sensitive : menu item sensitivity */ GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); GMenu * menuc; struct 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; } /* * GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) * * Usage: create the 'Atom(s) -> Show' submenu elements * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int at : atoms (0) or clones (1) * gboolean sensitive : menu item sensitivity */ GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); gchar * str; struct 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; } /* * GMenu * menu_atoms (glwin * view, int popm, int at) * * Usage: create the 'Atom(s)' submenu elements * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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.12/src/opengl/win/m_axis.c000066400000000000000000000252751450232132300177550ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_axis.c' * * Contains: * - The subroutines to create the 'View -> Axis' submenu * * List of subroutines: 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 /* * G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) * * Usage: handle change axis position signal GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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); } } } /* * GtkWidget * axis_position_submenu (glwin * view, int id) * * Usage: create the 'Axis -> Position' submenu GTK3 * * glwin * view : the target glwin * int 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; } /* * void menu_axis (GtkWidget * menu_ab, glwin * view, int id) * * Usage: create 'Axis' menu GTK3 * * GtkWidget * menu_ab : the GtkWidget sending the signal * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle change axis position signal GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * position_submenu (glwin * view, int popm, int pos) * * Usage: create elements of the 'Axis -> Position' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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; } /* * GMenu * axis_position_submenu (glwin * view, int popm) * * Usage: create the 'Axis -> Position' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * void menu_axis (GMenu * menu_ab, glwin * view, int popm) * * Usage: create the 'Axis' submenu GTK4 * * GMenu * menu_ab : the menu to attach the new menu to * glwin * view : the target glwin * int 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.12/src/opengl/win/m_back.c000066400000000000000000000036751450232132300177110ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_back.c' * * Contains: * - The subroutines to create the background color menu item * * List of subroutines: GtkWidget * menu_back (glwin * view); GMenu * menu_back (glwin * view, int popm); */ #include "global.h" #include "color_box.h" #include "glwindow.h" #ifdef GTK3 /* * GtkWidget * menu_back (glwin * view) * * Usage: create the background color menu item GTK3 * * glwin * 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 /* * GMenu * menu_back (glwin * view, int popm) * * Usage: create the background color menu item GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_bonds.c000066400000000000000000000316351450232132300201130ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_bonds.c' * * Contains: * - The subroutines to create the 'Model -> Bond(s)' submenu * * List of subroutines: gchar * label_cutrab (struct 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 /* * gchar * label_cutrab (struct project * this_proj, glwin * view, int id) * * Usage: prepare the text of a menu item in the 'Model -> Bond(s)' submenu * * struct project * this_proj : the target project * glwin * view : the target glwin * int id : the type of label to prepare */ gchar * label_cutrab (struct 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 /* * GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) * * Usage: create a menu item, and attach it to menu * * gchar * str : the label of the menu item * GtkWidget * 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; } /* * GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) * * Usage: * Usage: create a 'Model -> Bond(s)' menu item GTK3 * * gchar * str : the menu item name * GtkWidget * widg : the menu GtkWidget to attach the menu item to * int va : the type of bond item to set the appropriate action * tint * 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; } /* * GtkWidget * menu_bonds (glwin * view, int id, int at) * * Usage: create the 'Bond(s)' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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 /* * GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) * * Usage: create a bond menu item GTK4 * * glwin * view : the target glwin * gchar * str : menu item name * gchar * key : menu item action key * int popm : main app (0) or popup (1) * int id : menu item action id * GCallback handler : the associated callback * gpointer data : the associated data pointer * gboolean 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; } /* * GMenu * menu_bonds (glwin * view, int popm, int at) * * Usage: create the 'Bond(s)' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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.12/src/opengl/win/m_box.c000066400000000000000000000455041450232132300175760ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_box.c' * * Contains: * - The subroutines to create the 'Model -> Box' submenu * * List of subroutines: 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 /* * G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) * * Usage: set box/axis style * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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); } /* * GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) * * Usage: create a menu item for box/axis style * * char * name : the new menu item label * int val : box/axis active style * int box : menu item style type * GtkWidget * menu : the GtkMenu to attach the new item to * tint * 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; } /* * GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) * * Usage: create box color selection menu item * * GtkWidget * widg : the GtkMenuItem to attach the color palette to * glwin * view : the target glwin * int 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; } /* * GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) * * Usage: create box/axis style menu widget * * gchar * str : menu item label * GtkWidget * menu : the GtkMenu to attach the new item to * int vab : box/axis style * gpointer 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; } /* * GtkWidget * menu_box_axis (glwin * view, int id, int ab) * * Usage: create the 'Model -> Box' and 'View -> Axis' submenus GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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 /* * G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle the 'box/axis' show/hide signal GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: handle a box/axis radio menu item signal GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) * * Usage: create the box/axis '-> Style' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int ab : box (0) or axis (1) * int 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; } /* * GMenu * axis_box_param (glwin * view, int popm, int ab, int style) * * Usage: create the box/axis '-> Length/Width/Radius' submenus GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int ab : box (0) or axis (1) * int 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; } /* * GMenuItem * menu_box_axis (glwin * view, int popm, int ab) * * Usage: create the 'Model -> Box' and 'View -> Axis' submenus GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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.12/src/opengl/win/m_clones.c000066400000000000000000000137771450232132300203000ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_clones.c' * * Contains: * - The subroutines to create the 'Model -> Clone(s)' submenu * * List of subroutines: 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 /* * G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) * * Usage: show/hide clone(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) * * Usage: create the 'Show/hide clone(s)' menu item GTK3 * * char * name : label of the new menu item * gboolean clone : draw clones (1) or not (0) * GtkWidget * menu : the GtkMenu to attach the new item to * glwin * 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; } /* * GtkWidget * menu_clones (glwin * view, int id) * * Usage: create the 'Clone(s)' submenu GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show/hide clones menu item callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /* * GMenu * menu_clones (glwin * view, int popm) * * Usage: create the 'Clone(s)' submenu GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_coord.c000066400000000000000000000527511450232132300201160ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_coord.c' * * Contains: * - The subroutines to create the 'Chemistry -> Coordination' submenu * * List of subroutines: gboolean is_coord_in_menu (int id, struct 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 /* * gboolean is_coord_in_menu (int id, struct project * this_proj) * * Usage: is this coordination in a menu ? * * int id : the coordination type * struct project * this_proj : the target project */ gboolean is_coord_in_menu (int id, struct 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 /* * G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show/hide coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) * * Usage: show/hide coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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 = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); #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 /* * void detach_frag_mol_menu (glwin * view, int id, int jd) * * Usage: create a fragment/molecule type submenu * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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])); } } } } } /* * GtkWidget * add_menu_coord (glwin * view, int id, int jd) * * Usage: create a coordination type submenu * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int jd : coordination type */ GtkWidget * add_menu_coord (glwin * view, int id, int jd) { int i, j; GtkWidget * widg; GtkWidget * menucts; struct 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; } /* * GtkWidget * menu_coord (glwin * view, int id) * * Usage: create the 'Coordination' submenu GTK3 * * glwin * view : the target glwin * int 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; } /* * GtkWidget * menu_rings (glwin * view, int id) * * Usage: create the 'Ring(s)' submenu GTK3 * * glwin * view : the target glwin * int 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 /* * GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) * * Usage: create a submenu to attach a color palette * * glwin * view : the target glwin * gchar * act : the custom attribute to attach a widget * int popm : main app (0) or popup (1) * int id : id number * GCallback handler : the associated callback * gpointer 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; } /* * GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) * * Usage: create the coordination 'Show' or 'Color' submenus * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int id : coordination type * int mid : 0 = show, 1 = color */ GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; struct 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; } /* * G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: open advancedd coordination properties GTK4 callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) { coord_properties (NULL, data); } /* * GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) * * Usage: create a fragment/molecule coordination submenu * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int id : coordination type * int mid : 0 = show, 1 = color */ GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); struct 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; } /* * GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) * * Usage: create a ring coordination submenu * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int id : coordination type * int 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); } struct 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; } /* * GMenu * add_menu_coord (glwin * view, int popm, int id) * * Usage: create a coordination type submenu * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int id : coordination type */ GMenu * add_menu_coord (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); struct 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; } /* * GMenu * menu_coord (glwin * view, int popm) * * Usage: create the 'Coordination' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * menu_rings (glwin * view, int popm) * * Usage: create the 'Ring(s)' submenu GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_edit.c000066400000000000000000000275241450232132300177350ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_edit.c' * * Contains: * - The subroutines to create the 'Tools -> Edit' submenu * * List of subroutines: 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 /* * G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: wrapp coordinates callback * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) * * Usage: wrapp coordinates callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); } #ifdef GTK3 /* * GtkWidget * menu_cell_edit (glwin * view , int id, int j) * * Usage: create the 'Edit -> Cell' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) * int 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; } /* * GtkWidget * menu_edit (glwin * view, int id) * * Usage: create the 'Edit' submenu GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) */ GtkWidget * menu_edit (glwin * view, int id) { int i, j; struct 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 /* * GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) * * Usage: create the 'Edit -> Cell' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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; } /* * GMenu * menu_atom_edit (glwin * view, int popm) * * Usage: create the 'Edit -> Atom(s)' submenu GTK4 * * glwin * view : the target glwin * int 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; struct 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; } /* * G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: Extract/Rebuild menu items callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * extract_section (glwin * view, int popm) * * Usage: create the 'Extract/Rebuild' menu items GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) */ GMenu * extract_section (glwin * view, int popm) { int i; struct 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; } /* * GMenu * menu_edit (glwin * view, int popm) * * Usage: create the 'Edit' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) */ GMenu * menu_edit (glwin * view, int popm) { struct 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.12/src/opengl/win/m_map.c000066400000000000000000001270261450232132300175630ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_map.c' * * Contains: * - The subroutines to create the 'OpenGL -> Color Scheme(s)' submenus - The subroutines to handle custom color maps * * List of subroutines: gboolean setup_custom_color_map (float * data, struct project * this_proj, gboolean init); gboolean open_save_map (FILE * fp, int act, struct 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, struct 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 (struct 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, struct 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; /* * GtkWidget * create_css_color_bar (colormap * map) * * Usage: create the custom color map visualization widget * * colormap * 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; } /* * void init_map_range (colormap * map, int pts) * * Usage: initialize custom color map * * colormap * map : the custom color map * int 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; } } /* * colormap * allocate_color_map (int pts, struct project * this_proj) * * Usage: allocate custom color map data * * int pts : the number of data point(s) to create * struct project * this_proj : the target project */ colormap * allocate_color_map (int pts, struct 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; } /* * gboolean setup_custom_color_map (float * data, struct project * this_proj, gboolean init) * * Usage: prepare the custom color map data * * float * data : data value(s) if any * struct project * this_proj : the target project * gboolean init : initialize color map (0= no, 1= yes) */ gboolean setup_custom_color_map (float * data, struct 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; } /* * G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) * * Usage: update color map point position * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) * * Usage: select color map point color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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); } /* * GtkWidget * create_map_buttons () * * Usage: 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; } /* * void update_color_map () * * Usage: 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); } /* * G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) * * Usage: add point to the custom color map * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) { //struct 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); } /* * G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) * * Usage: update color map min / max * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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 (); } } /* * G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) * * Usage: customize the color map - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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) { struct project * this_proj = (struct 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); } /* * G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) * * Usage: customize the color map - creating the dialog * * GtkWidget * but : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) { struct 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); } } }*/ /* * void fill_map_model (GtkTreeStore * store, struct project * this_proj) * * Usage: fill color map tree strore * * GtkTreeStore * store : the GtkTreeStore to fill * struct project * this_proj : the target project */ void fill_map_model (GtkTreeStore * store, struct 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); } } } /* * G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) * * Usage : render color map tree store cell * * GtkCellRendererText * cell : the GtkCellRendererText to render * gchar * path_string : the path in the tree store * gchar * new_text : * gpointer 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; struct 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); } } /* * GtkWidget * create_map_tree (struct project * this_proj) * * Usage: create color map tree view * * struct project * this_proj : the target project */ GtkWidget * create_map_tree (struct 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; } /* * G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) * * Usage: edit color map - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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) { struct 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); } /* * G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) * * Usage: edit color map - creating the dialog * * GtkWidget * but : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) { struct 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); } /* * gboolean open_save_map (FILE * fp, int act, struct project * this_proj) * * Usage: open or save a custom color map to file * * FILE * fp : the file pointer * int act : action (0 = read, 1 = write) * struct project * this_proj : the target project */ gboolean open_save_map (FILE * fp, int act, struct 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 /* * G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) * * Usage: open / save color map data - running the dialog GTK4 * * GtkNativeDialog * info : the GtkNativeDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) * * Usage: open / save color map data - running the dialog GTK3 * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 } } /* * G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) * * Usage: open / save color map data - creating the dialog * * GtkWidget * but : the GtkWidget sending the signal * gpointer 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); struct 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; /* * G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) * * Usage: use custom color map - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * gboolean use_custom_color_map (int p) * * Usage: use custom color map - creating the dialog * * int p : the target project id */ gboolean use_custom_color_map (int p) { struct 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; } /* * G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) * * Usage: set color map callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; struct 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 /* * GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) * * Usage: create a color map menu item * * glwin * view : the target glwin * int m : main app (0) or popup (1) * int mi : the object (0 = atoms, 1 = polyhedra) * int mid : the menu item id in [0, ATOM_MAPS-1] * int cid : the active color map for object * gchar * 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; } } /* * GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) * * Usage: create the 'Color Scheme(s) - > *' submenus - GTK3 * * glwin * view : the target glwin * gchar * ncm : menu item label for object * int mid : the object (0 = atoms, 1 = polyhedra) * int id : main app (0) or popup (1) * int 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; } /* * GtkWidget * menu_map (glwin * view, int id) * * Usage: create the 'OpenGL -> Color Scheme(s)' submenu - GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change color map callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * menump (glwin * view, int popm, int mid, int cid) * * Usage: create the 'Color Scheme(s) - > *' submenus - GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int mid : the object (0 = atoms, 1 = polyhedra) * int 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; } /* * GMenu * menu_map (glwin * view, int popm) * * Usage: create the 'OpenGL -> Color Scheme(s)' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_poly.c000066400000000000000000000367131450232132300177730ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_poly.c' * * Contains: * - The subroutines to create the 'Chemistry -> Polyhedra' submenus * * List of subroutines: 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); /* * G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show / hide polyhedra callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) * * Usage: show / hide polyhedra callback - GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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 /* * G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: cloned polyehdra callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) * * Usage: cloned polyehdra callback - GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * GtkWidget * mpoly (glwin * view, int jd, int id) * * Usage: update the 'Polyhedra -> * -> Show/Hide' subemnus - GTK3 * * glwin * view : the target glwin * int jd : main app (0) or popup (1) * int id : the type of coordination */ GtkWidget * mpoly (glwin * view, int jd, int id) { int i, j; struct 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; } /* * GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) * * Usage: update the polyhedra submenus - GTK3 * * glwin * view : the target glwin * int jd : main app (0) or popup (1) * int id : the type of coordination: total (0), partial (1), rings (2) * gchar * 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; } } /* * GtkWidget * menu_poly (glwin * view, int id) * * Usage: create the 'Chemistry -> Polyehdra' submenu - GTK3 * * glwin * view : the target glwin * int 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 /* * GMenu * menu_show_coord_poly (glwin * view, int popm, int id) * * Usage: create the 'Polyedra -> Coordination -> Show/Hide' submenus - GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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; struct 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; } /* * GMenu * menu_show_rings_poly (glwin * view, int popm, int id) * * Usage: create the 'Rings(s) -> Show/Hide' subemnus - GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int id : the ring(s) type */ GMenu * menu_show_rings_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); struct 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; } /* * GMenu * add_menu_poly (glwin * view, int popm, int aid) * * Usage: create the 'Show/Hide' polyhedra subemnus - GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) * int 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; } /* * GMenu * menu_poly_rings (glwin * view, int popm) * * Usage: create the 'Polyhedra -> Ring(s)' submenu - GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * menu_poly (glwin * view, int popm) * * Usage: create the 'Chemistry -> Polyehdra' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_proj.c000066400000000000000000000117431450232132300177560ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_proj.c' * * Contains: * - The subroutines to create the 'View -> Projection' submenu * * List of subroutines: 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 { RIGHT = 0, LEFT = 1, TOP = 2, BOTTOM = 3, FRONT = 4, BACK = 5, }; /* * G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) * * Usage: set camera position callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * GtkWidget * menu_proj (glwin * view) * * Usage: create the 'View -> Projection' submenu - GTK3 * * glwin * 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 /* * G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: set camera position callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) { set_camera_pos (NULL, data); } /* * GMenu * menu_proj (glwin * view, int popm) * * Usage: create the 'View -> Projection' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_quality.c000066400000000000000000000127401450232132300204720ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_quality.c' * * Contains: * - The subroutines to create the 'OengGL -> Quality' submenu * * List of subroutines: 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" /* * void set_quality (int q, glwin * view) * * Usage: set OpenGL quality * * int q : new OpenGL quality * glwin * 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 } /* * G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) * * Usage: set quality spin button callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void window_quality (GtkWidget * widg, gpointer data) * * Usage: adjust OpenGL quality - creating the dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * GtkWidget * menu_quality (glwin * view, int id) * * Usage: create the 'OpenGL -> Quality' menu item - GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void to_window_quality (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: quality callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_window_quality (GSimpleAction * action, GVariant * parameter, gpointer data) { window_quality (NULL, data); } /* * GMenu * menu_quality (glwin * view, int popm) * * Usage: create the 'OpenGL -> Quality' menu item - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_render.c000066400000000000000000000134611450232132300202620ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_render.c' * * Contains: * - The subroutines to create the 'OpenGL -> Render' submenu * * List of subroutines: 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"}; /* * G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data) * * Usage: set OpenGL rendering mode callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct 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 /* * GtkWidget * menu_render (glwin * view, int id) * * Usage: create the 'OpenGL -> Render' submenu - GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void change_render_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: set OpenGL rendering mode callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * menu_render (glwin * view, int popm) * * Usage: create the 'OpenGL -> Render' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_rep.c000066400000000000000000000465431450232132300176000ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_rep.c' * * Contains: * - The subroutines to create the 'View -> Representation' submenu * * List of subroutines: 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); extern G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data); #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"}; /* * void update_labels (glwin * view) * * Usage: update labels (on representation data update) * * glwin * 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; } /* * void camera_has_changed (gdouble value, gpointer data) * * Usage: update camera data * * gdouble value : the new value * gpointer data : the associated data pointer */ void camera_has_changed (gdouble value, gpointer data) { tint * cid = (tint *)data; struct 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); } /* * G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) * * Usage: reset view callback * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: reset view callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) * * Usage: reset view callback - GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) #endif { reset_view (NULL, data); } /* * G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: update camera data callback - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) * * Usage: update camera data callback - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) { camera_has_changed (gtk_range_get_value (range), data); } /* * G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) * * Usage: update camera data callback - spin button * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) * * Usage: representation window delete event - GTK4 * * GtkWindow * widg : * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: representation window delete event - GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) * * Usage: open advanced representation dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) * * Usage: change representation callback - GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct 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 /* * GtkWidget * menu_rep (glwin * view, int id) * * Usage: create the 'View' submenu - GTK3 * * glwin * view : the target glwin * int 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 /* * G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change representation radio items callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change representation callback - GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { representation_advanced (NULL, data); } /* * GMenu * menu_rep (glwin * view, int popm) * * Usage: create 'View -> Representation' submenu items - GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * menu_view (glwin * view, int popm) * * Usage: create the 'View' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/m_style.c000066400000000000000000000327021450232132300201420ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_style.c' * * Contains: * - The subroutines to create the 'OpenGL -> Style' submenu * * List of subroutines: void clean_atom_style (struct 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, 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 (struct project * this_proj, glwin * view, int id); /* * void clean_atom_style (struct project * this_proj) * * Usage: clean all atom(s) possible alternative rendering styles * * struct project * this_proj : the target project */ void clean_atom_style (struct 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 /* * void update_menus (glwin * view) * * Usage: update GTK3 menus of style has changed * * glwin * 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 /* * G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) * * Usage: set style callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct 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 /* * GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, GtkWidget * menu, tint * data) * * Usage: create style menu item GTK3 * * char * name : the menu item label * int val : active style * int style : style value for this menu item * int vbl : active filled style if any * int filled : filled value for this menu item * GtkWidget * menu : the menu to attach the new menu item to * tint * data : the associated data pointer */ GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, GtkWidget * menu, tint * data) { GtkWidget * style_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_style), data, FALSE, 0, 0, TRUE, TRUE, (style == val && filled == vbl) ? TRUE : FALSE); return style_widget; } /* * GtkWidget * menu_style (glwin * view, int id) * * Usage: create the 'OpenGL -> Style' submenu - GTK3 * * glwin * view : the target glwin * int id : main app (0) or popup (1) */ GtkWidget * menu_style (glwin * view, int id) { int i, j; GtkWidget * widg; GtkWidget * menus = gtk_menu_new (); if (id == 0) { for (i=0; i ogl_styles[i] = create_style_menu (text_styles[i], i, view -> anim -> last -> img -> style, i, i, 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, menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } else { for (i=0; i anim -> last -> img -> style, i, i, 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, menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } return menus; } #else /* * G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change style callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * menu_style (glwin * view, int popm) * * Usage: create the 'OpenGL -> Style' submenu - GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) */ GMenu * menu_style (glwin * view, int popm) { int i, j, k; GMenu * menu = g_menu_new (); 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, NULL, 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.12/src/opengl/win/m_tools.c000066400000000000000000000615711450232132300201500ustar00rootroot00000000000000/* 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 */ /* * This file: 'm_tools.c' * * Contains: * - The subroutines to create the 'Tools' submenu * * List of subroutines: void set_motion_sensitive (glwin * view, int status); void invert_visible (struct 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 (struct 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"}; /* * void set_motion_sensitive (glwin * view, int status) * * Usage: change motion parameters following a change in the mouse mode * * glwin * view : the target glwin * int 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; } } } /* * G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) * * Usage: set selection mode callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct 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 } /* * G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) * * Usage: set mouse mode callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> mode; int 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 -> 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 } /* * void invert_visible (struct project * this_proj) * * Usage: invert visible atom(s) * * struct project * this_proj : the target project */ void invert_visible (struct 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); } /* * G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) * * Usage: invert selection or visible callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; struct 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); /* * GtkWidget * menu_tools (glwin * view, int id) * * Usage: create the 'Tools' submenu - GTK3 * * glwin * view : the target glwin * int 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}; 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], 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], 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 /* * G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: open the measurement window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) { window_measures (NULL, data); } /* * GMenu * measure_section (glwin * view, int popm) * * Usage: create the 'Tools -> Measures' menu item GTK4 * * glwin * view : the target glwin * int 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; } /* * G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: open the volumes window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) { window_volumes (NULL, data); } /* * GMenu * volume_section (glwin * view, int popm) * * Usage: create the 'Tools -> Volumes' menu item GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * edit_section (glwin * view, int popm) * * Usage: create the 'Tools -> Edit' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change mouse radio menu item callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; } g_action_change_state (G_ACTION (action), parameter); } } /* * GMenu * mouse_mode_menu (glwin * view, int popm) * * Usage: create the 'Tools -> Mouse Mode' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change selection mode callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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); } } /* * GMenu * selection_mode_menu (glwin * view, int popm) * * Usage: create the 'Tools -> Selection Mode' submenu GTK4 * * glwin * view : the target glwin * int popm : main app (0) or popup (1) */ GMenu * selection_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i, j; for (i=0; i mode == EDITION) ? 1 : 0 : TRUE; 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; } /* * GMenu * modes_section (glwin * view, int popm) * * Usage: create the 'Tools -> * Modes' submenus GTK4 * * glwin * view : the target glwin * int 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; } /* * G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: run MD input assistant callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) { create_field (NULL, data); } /* * GMenu * md_menu (glwin * view, int popm) * * Usage: create the 'Molecular Dynamics' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: invert this callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) { invert_this (NULL, data); } /* * GMenu * inv_menu (glwin * view, int popm) * * Usage: create the 'Tools -> Invert' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) * * Usage: append a new menu item with a new submenu * * glwin * view : the target glwin * gchar * item_name : the new menu item label * GMenu * 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; } /* * GMenu * menu_tools (glwin * view, int popm) * * Usage: create the 'Tools' submenu - GTK4 * * glwin * view : the target glwin * int 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.12/src/opengl/win/menu_bar.c000066400000000000000000000355551450232132300202670ustar00rootroot00000000000000/* 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 */ /* * This file: 'menu_bar.c' * * Contains: * - The subroutine to create the menu bar of the OpenGL window - The subroutine to create the menu items for the menu bar and the pop up menu * * List of subroutines: 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; /* * G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: open OpenGL advanced configuration window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { opengl_advanced (NULL, data); } /* * G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: render image from OpenGL window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) { render_gl_image (NULL, data); } /* * 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) * * Usage: generic function to create menu item for the OpenGL menu bar / pop up menu * * glwin * view : the target glwin * GMenu * menu : the menu to attach the new menu item to * const gchar * name : the new menu item label, if any * const gchar * key : the new menu item action key * int mpop : main app (0) or popup (1) * int item_id : the new menu item action id * gchar * accel : keyboard accelerator for the new menu item, if any (NULL otherwise) * int image_format : the image format (in enum ImageFormats) * gpointer icon : the image data if any (or NULL) * gboolean custom : custom menu item (1= yes, 0 = no), to insert a widget later on * GCallback handler : the new menu item callback (or NULL) * gpointer data : the associated data pointer (or NULL) * gboolean check : is the new menu item a check menu item ? * gboolean status : is 'check' then what is the status of the new check menu item ? * gboolean radio : is the new menu item a radio menu item ? * gboolean 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); } /* * GMenu * prepare_opengl_menu (glwin * view, int popm) * * Usage: create the 'OpenGL' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * prepare_model_menu (glwin * view, int popm) * * Usage: create the 'Model' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * prepare_coord_menu (glwin * view, int popm) * * Usage: create the 'Chemistry' submenu GTK4 * * glwin * view : the target glwin * int 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; } /* * GMenu * opengl_menu_bar (glwin * view) * * Usage: create OpenGL window menu GTK4 * * glwin * 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; } /* * void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) * * Usage: menu bar attach color palettes GTK4 * * glwin * view : the target glwin * GtkWidget * 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; struct 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"); } } /* * GtkWidget * opengl_window_create_menu_bar (glwin * view) * * Usage: create the OpenGL window menu bar widget GTK4 * * glwin * 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; } /* * void update_menu_bar (glwin * view) * * Usage: update the OpenGL window menu bar GTK4 * * glwin * view : the target glwin */ void update_menu_bar (glwin * view) { view -> menu_bar = opengl_window_create_menu_bar (view); } #endif Atomes-GNU-1.1.12/src/opengl/win/popup.c000066400000000000000000004410721450232132300176350ustar00rootroot00000000000000/* 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 */ /* * This file: 'popup.c' * * Contains: * - The subroutines to create the OpenGL window popup menus: - The main popup menu - The contextual, atom or bond related, popup menus * * List of subroutines: int get_to_be_selected (glwin * view); int get_style (gchar * str); int check_label_numbers (struct 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 (struct project * this_proj); void create_new_project_using_data (struct 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 (struct project * this_proj); extern int action_atoms_from_project (struct 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 (struct project * this_proj, int status); extern vec3_t get_bary (struct project * this_proj, int status); extern void prepare_to_instert (gchar * key, struct project * this_proj, atom_search * asearch, gboolean visible); extern struct insertion mol[]; extern struct selatom * new_selatom (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; struct atom_selection * bond_selection = NULL; tint atoid[CONTEXTACT][4]; dint btoid; /* * int get_to_be_selected (glwin * view) * * Usage: find which atom(s) are to be selected * * glwin * 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 /* * G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: set full screen callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) * * Usage: set full screen callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; } } /* * int get_style (gchar * str) * * Usage: get OpenGL rendering style id * * gchar * 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; } /* * void to_remove_this_object (int type, gpointer data) * * Usage: remove a type of object * * int type : the type of object to remove (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) * gpointer data : the associated data pointer */ void to_remove_this_object (int type, gpointer data) { int i, j; struct selatom * 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; } } /* * gchar * get_object_from_action (GSimpleAction * action) * * Usage: get object name from action name GTK4 * * GSimpleAction * 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 /* * void to_replace_this_object (int type, GSimpleAction * action, gpointer data) * * Usage: replace a type of object GTK4 * * int type : the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) * GSimpleAction * action : the GAction sending the signal * gpointer data : the associated data pointer */ void to_replace_this_object (int type, GSimpleAction * action, gpointer data) #else /* * void to_replace_this_object (int type, GtkWidget * widg, gpointer data) * * Usage: replace a type of object GTK3 * * int type : the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ void to_replace_this_object (int type, GtkWidget * widg, gpointer data) #endif { int h, i, j; struct selatom * 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; } } } /* * void copy_bond_selection () * * Usage: copy bond selection */ void copy_bond_selection () { if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); struct selatom * selat = bond_selection -> first; while (selat) { pasted_todo[selat -> id] = 1; selat = selat -> next; } copied_object = create_object_from_selection (opengl_project); } /* * void remove_object () * * Usage: 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 /* * G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) * * Usage: remove this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 (); } /* * void insert_object (int action, gpointer data) * * Usage: insert object * * int action : the action to perform (replace = 1 or insert only = 3) * gpointer 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 /* * G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: add object call back GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) * * Usage: add object call back GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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_insert_object (copied_object); struct insert_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 /* * G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: to add object callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) * * Usage: to add object callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: replace this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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 /* * G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) * * Usage: replace this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: copy this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) * * Usage: copy this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * void check_hidden_visible (struct project * this_proj) * * Usage: check how many atom(s) are visible * * struct project * this_proj : the target project */ void check_hidden_visible (struct 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; } } } } for (i=0; i<2; i++) g_free (num[i]); g_free (num); for (i=0; i modelgl); #endif } #ifdef GTK4 /* * G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show / hide this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) * * Usage: show / hide this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * int check_label_numbers (struct project * this_proj, int types) * * Usage: check how many atom label(s) are visible * * struct project * this_proj : the target project * int types : 0 = atoms, 1 = clones, 2 = all */ int check_label_numbers (struct 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 /* * G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: label / unlabel this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) * * Usage: label / unlabel this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: select / unselect this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) * * Usage: select / unselect this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change OpenGL rendering style for this atom callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) * * Usage: change OpenGL rendering style for this atom callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove selected atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) * * Usage: remove selected atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: replace selected atom(s) callback GTK3 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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 /* * G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) * * Usage: replace selected atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: copy selected atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) * * Usage: copy selected atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show all hidden / hide all visible atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) * * Usage: show all hidden / hide all visible atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show / hide a type of atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) * * Usage: show / hide a type of atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: label / unlabel a type of atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) * * Usage: label / unlabel a type of atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: select / unselect a type of atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) * * Usage: select / unselect a type of atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change the OpenGL rendering style of a type of atom(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) * * Usage: change the OpenGL rendering style of a type of atom(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: remove a type of coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) * * Usage: remove a type of coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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 /* * G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) * * Usage: * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) * * Usage: * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: show / hide a type of coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) * * Usage: show / hide a type of coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: label / unlabel a type of coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) * * Usage: label / unlabel a type of coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: select / unselect a type of coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) * * Usage: select / unselect a type of coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: change OpenGL rendering style for a type of coordination callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) * * Usage: change OpenGL rendering style for a type of coordination callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * void create_new_project_using_data (struct atom_selection * selection) * * Usage: create new project using an atom selection * * struct atom_selection * selection : the atom selection to use */ void create_new_project_using_data (struct atom_selection * selection) { int i, j, k, l; int nspec = 0; int * pos_sp, * specs; struct selatom * 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; active_project -> atoms[i][j].style = NONE; 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 /* * G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create new project using selection callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) * * Usage: create new project using selection callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct atom_selection * selected; struct selatom * 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_selatom (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_selatom (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_selatom (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_selatom (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 /* * G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create new project using coordination type and id callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) * * Usage: create new project using coordination type and id callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; struct atom_selection * selected; struct selatom * 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_selatom (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_selatom (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 /* * G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create new project using atomic species callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) * * Usage: create new project using atomic species callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) #endif { int i, j; struct atom_selection * selected; struct selatom * 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_selatom (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_selatom (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 /* * G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: select action for all object(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) * * Usage: select action for all object(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: selection action for this bond callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) * * Usage: selection action for this bond callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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_selatom (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_selatom (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_selatom (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_selatom (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 /* * G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: select action for all bonds based on menu item id callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) * * Usage: select action for all bonds based on menu item id callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct selatom * 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_selatom (j, opengl_project -> atoms[s][j].sp); tmp_a = bond_selection -> first; } else { tmp_a -> next = new_selatom (j, opengl_project -> atoms[s][j].sp); tmp_a = tmp_a -> next; } bond_selection -> selected ++; tmp_a -> next = new_selatom (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 /* * GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) * * Usage: add edition submenu to the popup menu GTK4 * * glwin * view : the target glwin * gchar * act : the action name * int aid : the action id * GCallback handler : the associated callback * gpointer 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; } /* * GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) * * Usage: create style submenu and insert to menu item GTK4 * * glwin * view : the target glwin * gchar * act : the action name * int aid : the action id * GCallback handler : the associated callback * gpointer 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 /* * 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) * * Usage: append new menu item to popup menu GTK4 * * GMenu * menu : the menu to append the new menu item to * glwin * view : the target glwin * gchar * str : the new menu item label * gchar * act : the new menu item action * int aid : the action id * int mid : menu item id * int gid : coordination type * int cid : coordination id * int aoc : atom (0) or clone (1) * GCallback handler : the associated callback * gpointer 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 /* * GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) * * Usage: create new menu item for the popup menu GTK3 * * glwin * view : the target glwin * gchar * str : the new menu item label * int mid : menu item id * int gid : coordination type * int cid : coordination id * int aoc : atom (0) or clone (1) * GCallback handler : the associated callback * gpointer 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 /* * GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) * * Usage: create popup submenu GTK4 * * int aid : action id * glwin * view : the target glwin * int ati : 1st atom * int bti : 2nd atom, if any * int aoc : atom (0) or clone (1) * int mid : menu id * GCallback handler_a : 1st callback - this object * GCallback handler_b : 2nd callback - coordination(s) * GCallback 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 /* * GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) * * Usage: create popup submenu GTK3 * * glwin * view : the target glwin * int ati : 1st atom * int bti : 2nd atom, if any * int aoc : atom (0) or clone (1) * int mid : menu id * GCallback handler_a : 1st callback - this object * GCallback handler_b : 2nd callback - coordination(s) * GCallback 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 struct 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 /* * void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) * * Usage: contextual popup menu attach color palettes GTK4 * * glwin * view : the target glwin * GtkWidget * menu : the GtkWidget sending the signal * int ato : the picked atom * int spc : the picked chemical species * int totc : the total coordination of ato * int parc : the partial coordination of ato * int frag : the fragment of ato * int 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; struct 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 /* * void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) * * Usage: create the contextual popup menu, right click on atom or bond * * glwin * view : the target glwin * double ptx : x position * double pty : y position * int spe : the picked chemical * int mmod : mouse mode: 0 = analysis, 1 = edition * int ati : 1st atom * int bti : 2nd atom, if any * int 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; struct 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 /* * G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: reset coordinates menu item callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) * * Usage: reset coordinates menu item callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: rebuild menu items callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) * * Usage: rebuild menu items callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 } /* * G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) * * Usage: center this molecule menu item callback GTK4 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * GMenu * tools_section (glwin * view) * * Usage: insert the 'Tools' section to the popmenu GTK4 * * glwin * view : the target glwin */ GMenu * tools_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "Tools", menu_tools(view, 1)); return menu; } /* * GMenu * anim_section (glwin * view) * * Usage: insert the 'Animate' section to the popmenu GTK4 * * glwin * view : the target glwin */ GMenu * anim_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "Animate", menu_anim(view, 1)); return menu; } /* * void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) * * Usage: attach the color palettes to the corresponding custom menu items GTK4 * * glwin * view : the target glwin * GtkWidget * 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; struct 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 /* * void popup_main_menu (glwin * view, double ptx, double pty) * * Usage: create the OpenGL window popup menu * * glwin * view : the target glwin * double ptx : x position * double 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))); 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.12/src/opengl/win/submenus.h000066400000000000000000000072031450232132300203320ustar00rootroot00000000000000/* 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 */ /* * This header file: 'submenus.h' * * Contains: */ #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.12/src/opengl/win/w_advance.c000066400000000000000000001531051450232132300204160ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_advance.c' * * Contains: * - The subroutines to create the OpenGL parameters edition window * * List of subroutines: 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"}; /* * GtkWidget * adv_box (GtkWidget * box, char * lab, int size, float xalign) * * Usage: create a box with markup label * * GtkWidget * box : the GtkWidget sending the signal * char * lab : label * int size : size * float 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 /* * G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) * * Usage: toggle delete light callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) { if (gtk_check_button_get_active (but)) #else /* * G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) * * Usage: toggle delete light callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; /* * G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) * * Usage: remove light source(s) - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * int * light_source_to_be_removed (int val, image * img, opengl_edition * ogl_edit) * * Usage: remove light source(s) - creating the dialog * * int val : number of light(s) to remove * image * img : the target image * opengl_edition * 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; } /* * void print_light_source (Light source, int i) * * Usage: print light source data * * Light source : the light source * int 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 */ /* * Light init_light_source (int type, float val, float vbl) * * Usage: initialize a light source * * int type : the type of light * float val : * float 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; } /* * Light copy_light_source (Light old_sp) * * Usage: create a copy of a light source * * Light 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; } /* * Light * copy_light_sources (int dima, int dimb, Light * old_sp) * * Usage: create a copy of a list of light sources * * int dima : new list size * int dimb : old list size to duplicate * Light * 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); } } /* * void update_light_data (int li, opengl_edition * ogl_win) * * Usage: update light data * * int li : the light id * opengl_edition * 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 } /* * G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) * * Usage: update light parameters based on light id in combo box * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void create_lights_combo (image * this_image, opengl_edition * ogl_win) * * Usage: create light combo box * * image * this_image : the target image parameters * opengl_edition * 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); } /* * void add_remove_lights (int val, gpointer data) * * Usage: add or remove lights * * int val : total number of light(s) * gpointer data : the associated data pointer */ void add_remove_lights (int val, gpointer data) { int i, j, k, m; glwin * view = (glwin *)data; struct 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); } /* * G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) * * Usage: change the number of light(s) - spin button * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_nlights (GtkEntry * res, gpointer data) * * Usage: change the number of light(s) - entry * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) * * Usage: update light parameter * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * void set_data_pos (vec3_t * vect, int pos, double v) * * Usage: modify a vector component * * vec3_t * vect : vector to adjust * int pos : position to adjust * double 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; } } /* * G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) * * Usage: set object position * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) * * Usage: set light type callback * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) * * Usage: set light fix callback * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) * * Usage: show / hide this light callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) * * Usage: show / hide this light callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * GtkWidget * create_setting_pos (int pid, int lid, float * values, opengl_edition * ogl_win) * * Usage: create OpenGL setting entries table * * int pid : parameter id (0 = material, 1 = light direction, 2 = light position, 3 = light intensity, 4 = fog) * int lid : parameter label id * float * values : target parameter values * opengl_edition * 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; } /* * GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit) * * Usage: OpenGL light(s) parameters tab * * glwin * view : the target glwin * opengl_edition * 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 /* * G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) * * Usage: use or not OpenGL material template callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) * * Usage: use or not OpenGL material template callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) * * Usage: change the OpenGL material template * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) * * Usage: change OpenGL lightning model * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void param_has_changed (gpointer data, double val) * * Usage: update OpenGL material parameter * * gpointer data : the associated data pointer * double 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); } /* * G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) * * Usage: update OpenGL material parameter - entry * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: update OpenGL material parameter - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) * * Usage: update OpenGL material parameter - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) { param_has_changed (data, gtk_range_get_value (range)); } /* * G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: update OpenGL quality - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) * * Usage: update OpenGL quality - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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 } /* * GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit) * * Usage: OpenGL material parameters tab * * glwin * view : the target glwin * opengl_edition * 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 ******************* // /* * void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) * * Usage: update OpenGL fog parameter * * gpointer data : the associated data pointer * GLfloat u : the new value * GtkRange * 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); } /* * G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: update OpenGL fog parameter - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) * * Usage: update OpenGL fog parameter - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) * * Usage: set OpenGL fog type * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * void setup_fog_dialogs (glwin * view, int fid) * * Usage: update OpenGL fog tab based of fog type * * glwin * view : the target glwin * int 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); } } /* * G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) * * Usage: set fog mode callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit) * * Usage: OpenGL fog parameters tab * * glwin * view : the target glwin * opengl_edition * 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; } /* * void close_advanced_opengl (gpointer data) * * Usage: close OpenGL rendering window free data * * gpointer 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 /* * G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) * * Usage: close OpenGL rendering advanced window callback GTK4 * * GtkWidget * window : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) #else /* * G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: close OpenGL rendering advanced window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_advanced_opengl (data); return FALSE; } /* * G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) * * Usage: create OpenGL rendering advanced window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_atoms.c000066400000000000000000000514671450232132300201500ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_atoms.c' * * Contains: * - The subroutines to create the atom(s) / clone(s) advanced configuration window * * List of subroutines: 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, struct 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 (struct 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; /* * G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) * * Usage: update atom radius callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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; struct 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); } /* * void atoms_input_win (GtkWidget * win, struct project * this_proj, int nspec, int aoc, double * val) * * Usage: prepare atom radii entry list * * GtkWidget * win : the GtkWidget sending the signal * struct project * this_proj : the target project * int npsec : total number of chemical species * int aoc : atom(s) (0) or clone(s) (1) * double * val : radii list */ void atoms_input_win (GtkWidget * win, struct 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); } /* * G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) * * Usage: set atom parameter - creating the dialog * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) * * Usage: set atom color callback * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) { tint * the_data = (tint *)data; int a; struct 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 /* * G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) * * Usage: toggle show/hide atom(s) callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) * * Usage: toggle show/hide atom(s) callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 struct 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 /* * G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) * * Usage: toggle show/hide label(s) callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) * * Usage: toggle show/hide label(s) callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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; struct 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 } /* * GtkWidget * prop_tab (glwin * view, int aoc) * * Usage: create atom(s)/clone(s) properties tab * * glwin * view : the target glwin * int 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; struct 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; } /* * G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) * * Usage: free 'model_win' data * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) { tint * dat = (tint *)data; struct 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 /* * G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) * * Usage: close event callback GTK4 * * GtkWindow * widg : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: close event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) * * Usage: create atom(s) advanced properties notebook * * glwin * view : the target glwin * int 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; } /* * GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) * * Usage: create atom advanced properties window 'model_win' * * int atom_or_clone : atom(s) (0) or clone(s) (1) * glwin * 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 /* * G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) * * Usage: atom(s) propery callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) #else /* * G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: atom(s) propery callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer 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; struct 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.12/src/opengl/win/w_axis.c000066400000000000000000000605551450232132300177670ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_axis.c' * * Contains: * - The subroutines to create the axis parameters edition window * * List of subroutines: 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]; /* * void activate_pos_box (glwin * view, gboolean val) * * Usage: update axis position data * * glwin * view : the target glwin * gboolean 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); } /* * G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) * * Usage: set axis position callback * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 } /* * G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) * * Usage: set axis style callback * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) * * Usage: show / hide axis callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) * * Usage: show / hide axis callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) * * Usage: use axis default colors callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) * * Usage: use axis default colors callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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 } /* * void init_axis_colors (glwin * view) * * Usage: initialize axis colors * * glwin * 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 /* * G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) * * Usage: use axis default color callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) * * Usage: use axis default color callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) * * Usage: change axis color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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); } /* * void axis_position_has_changed (gpointer data, double v) * * Usage: change axis position * * gpointer data : the associated data pointer * double 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); } /* * G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: change axis position - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) * * Usage: change axis position - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) * * Usage: set axis labels callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) * * Usage: set axis labels callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) * * Usage: set axis title callback * * GtkEntry * entry : the GtkEntry sending the signal * gpointer 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 /* * G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create the axis advanced parameters window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) * * Usage: create the axis advanced parameters window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_bonds.c000066400000000000000000000365531450232132300201310ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_bonds.c' * * Contains: * - The subroutines to create the bond (legnth/radius) edition window(s) * * List of subroutines: void bonds_input_win (GtkWidget * win, struct 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 (struct project * this_proj, glwin * view, int id); /* * G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) * * Usage: update bond parameter callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * void bonds_input_win (GtkWidget * win, struct project * this_proj, int nspec, int aoc, double ** val) * * Usage: prepare bond property entry list * * GtkWidget * win : the GtkWidget sending the signal * struct project * this_proj : the target project * int npsec : total number of chemical species * int aoc : atom(s) (0) or clone(s) (1) * double ** val : the list of value(s) to display */ void bonds_input_win (GtkWidget * win, struct 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 /* * G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage:update bond parameter callback - creating the dialog GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) * * Usage: update bond parameter callback - creating the dialog GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create bond(s) configuration window(s) callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) * * Usage:create bond(s) configuration window(s) callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_box.c000066400000000000000000000204221450232132300176000ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_box.c' * * Contains: * - The subroutines to create the box properties window * * List of subroutines: 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; /* * G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) * * Usage: set box style callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) * * Usage: toggle show / hide box callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) * * Usage: toggle show / hide box callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) * * Usage: set box color callback * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer 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 /* * G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create the box edition window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) * * Usage: create the box edition window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_chains.c000066400000000000000000000706251450232132300202670ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_chains.c' * * Contains: * - The subroutines to create the chain(s) tab for the advanced environments window * * List of subroutines: int get_cmin (struct project * this_proj, int step); int get_cmax (struct project * this_proj, int step); void fill_chains_model (GtkTreeStore * store, struct project * this_proj); void add_this_chain_to_search_tree (struct 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 (struct project * this_proj, gboolean fill_this); GtkWidget * create_chains_search (struct 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); /* * G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select chain toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * void fill_chains_model (GtkTreeStore * store, struct project * this_proj) * * Usage: fill the entire chain(s) tree store * * GtkTreeStore * store : the GtkTreeStore to fill * struct project * this_proj : the target project */ void fill_chains_model (GtkTreeStore * store, struct 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); } } } } } } /* * GtkWidget * create_chains_tree (struct project * this_proj, gboolean fill_this) * * Usage: create the chain(s) search tree store * * struct project * this_proj : the target project * gboolean fill_this : 1 = yes, 0 = no */ GtkWidget * create_chains_tree (struct 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; } /* * void add_this_chain_to_search_tree (struct project * this_proj) * * Usage: add chain in the search tree based on chain length and id * * struct project * this_proj : the target project */ void add_this_chain_to_search_tree (struct 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; } } } } /* * int get_cmin (struct project * this_proj, int step) * * Usage: get chain(s) min size for the MD step * * struct project * this_proj : the target project * int step : the MD step */ int get_cmin (struct 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; } /* * int get_cmax (struct project * this_proj, int step) * * Usage: get chain(s) max size for the MD step * * struct project * this_proj : the target project * int step : the MD step */ int get_cmax (struct 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; } /* * int get_chain_size_index (struct project * this_proj, int s, int r) * * Usage: * * struct project * this_proj : the target project * int s : * int r : * int get_chain_size_index (struct 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; } */ /* * G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) * * Usage: update the chain(s) search widget * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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); } } /* * GtkWidget * create_chains_search (struct project * this_proj) * * Usage: create the chain(s) search widget * * struct project * this_proj : the target project */ GtkWidget * create_chains_search (struct 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; } /* * GtkWidget * chains_tab (glwin * view) * * Usage: create the chain(s) tab for the advanced environments window * * glwin * 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; struct 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.12/src/opengl/win/w_colors.c000066400000000000000000000255231450232132300203200ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_colors.c' * * Contains: * - The subroutines to create the color selection dialogs * * List of subroutines: void window_color (struct 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; /* * G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) * * Usage: window color chooser - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer data : the associated data pointer */ G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) { struct project * this_proj = (struct 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); } /* * void window_color (struct project * this_proj, glwin * view, int wc_cid) * * Usage: window color chooser - creating the dialog * * struct project * this_proj : the target project * glwin * view : the target glwin * int wc_cid : the object to change color */ void window_color (struct 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 /* * G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: to run background color selection window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) * * Usage: to run background color selection window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: to run box color selection window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) * * Usage: to run box color selection window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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 /* * G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: to run atom color selection window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) * * Usage: to run atom color selection window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); struct 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); } /* * G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) * * Usage: window to select a color - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; struct 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 /* * G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: create a window to select a color callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) * * Usage: create a window to select a color callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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; struct 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.12/src/opengl/win/w_coord.c000066400000000000000000001462441450232132300201310ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_coord.c' * * Contains: * - The subroutines to create the 'Environments configuration' window * * List of subroutines: int get_page_from_geo_coord (glwin * view, int geo, int coord); gboolean add_geo (int poly, struct 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 (struct 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 (struct project * this_proj, int geo); GtkWidget * create_frag_mol_search (struct 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 /* * G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) * * Usage: toggle show / hide coordination callback GTK4 * * GtkCheckButton * widg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) #else /* * G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) * * Usage: toggle show / hide coordination callback GTK3 * * GtkToggleButton * widg : the GtkToggleButton sending the signal * gpointer 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; struct 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; if (is_coord_in_menu(g, this_proj)) { #ifdef GTK4 k = gtk_check_button_get_active (widg); if (k != this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]) { 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 // GTK3 Menu Action To Check k = (widg) ? gtk_toggle_button_get_active (widg) : frag_mol_status; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][g][j], k); #endif } else if (g > 1) { tint pointer; pointer.a = g; pointer.b = c; pointer.c = frag_mol_status; #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 /* * G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) * * Usage: toggle label / unlabel coordination callback GTK4 * * GtkCheckButton * widg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) #else /* * G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) * * Usage: toggle label / unlabel coordination callback GTK3 * * GtkToggleButton * widg : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) * * Usage: toggle select / unselect coordination callback GTK4 * * GtkCheckButton * widg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) #else /* * G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) * * Usage: toggle select / unselect coordination callback GTK3 * * GtkToggleButton * widg : the GtkToggleButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) * * Usage: toggle show / hide polyhedra callback GTK4 * * GtkCheckButton * widg : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) #else /* * G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) * * Usage: toggle show / hide polyhedra callback GTK3 * * GtkToggleButton * widg : the GtkToggleButton sending the signal * gpointer 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; struct 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 } /* * G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) * * Usage: set fragment or molecule color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g; struct 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); } /* * G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) * * Usage: set coordination color * * GtkColorChooser * colob : the GtkColorChosser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g, s; struct 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); } /* * void poly_alpha_has_changed (gpointer data, GLfloat v) * * Usage: change polyhedra opacity * * gpointer data : the associated data pointer * GLfloat v : the new opacity value */ void poly_alpha_has_changed (gpointer data, GLfloat v) { qint * cid = (qint *)data; int c, g, s; struct 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); } /* * G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: set polyhedra opacity - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) * * Usage: set polyhedra opacity - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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)); } /* * gboolean add_geo (int poly, struct project * this_proj, int g, int i, int j) * * Usage: test add this geometry data to the tree store or not ? * * int poly : polyhedra (1 / 0) * struct project * this_proj : the target project * int g : the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) * int i : target chemical species or 0 * int j : geometry id number */ gboolean add_geo (int poly, struct 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; } } } } /* * GtkWidget * coord_tab (glwin * view, int geo, int poly) * * Usage: create coordination(s) and polyhedra tab * * glwin * view : the target glwin * int geo : the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) * int 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; struct 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; } /* * G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage : tree store action on cell selection * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree view * gpointer 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; } } /* * void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) * * Usage: set tree store cell background color * * GtkListStore * store : the GtkListStore * GtkTreeIter iter : the GtkTreeIter target to update * ColRGBA 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); } /* * void add_this_frag_mol_to_search_tree (struct project * this_proj, int geo, int gid) * * Usage: add fragment or molecule in the search tree * * struct project * this_proj : the target project * int geo : 2 = fragment(s) or 3 = molecule(s) * int gid : fragment or molecule id number to add */ void add_this_frag_mol_to_search_tree (struct 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; } } } /* * G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) * * Usage: set fragment / molecule color - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } /* * void set_this_frag_mol_color (gpointer data, GtkTreePath * path) * * Usage: set fragment / molecule color - creating the dialog * * gpointer data : the associated data pointer * GtkTreePath * 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]); } /* * G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) * * Usage: set fragment/molecule color tree view callback * * GtkTreeView * tree_view : the GtkTreeView sending the signal * GtkTreePath * path : the path in the tree view * GtkTreeViewColumn * column : the tree view column * gpointer 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); } } /* * GtkWidget * create_frag_mol_tree (struct project * this_proj, int geo) * * Usage: create the fragment(s) / molecule(s) search tree store * * struct project * this_proj : the target project * int geo : 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_tree (struct 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; } /* * G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) * * Usage: update the fragment(s) / molecule(s) search widget * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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, ""); } } /* * GtkWidget * create_frag_mol_search (struct project * this_proj, int geo) * * Usage: create the frgament(s)/molecule(s) search widget * * struct project * this_proj : the target project * int geo : 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_search (struct 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; } /* * GtkWidget * fragmol_tab (glwin * view, int geo) * * Usage: create fragment(s) or molecule(s) tab * * glwin * view : the target glwin * int 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); struct 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; } /* * G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) * * Usage: change atom color map * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 } /* * G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) * * Usage: change polyhedra color map * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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 /* * G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) * * Usage: toggle show / hide cloned polyhedra callback GTK4 * * GtkCheckButton * Button : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) #else /* * G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) * * Usage: toggle show / hide cloned polyhedra callback GTK3 * * GtkToggleButton * Button : the GtkToggleButton sending the signal * gpointer 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 } /* * GtkWidget * param_tab (glwin * view) * * Usage: environments configuration window parameters tab * * glwin * 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; } /* * G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) * * Usage: environments configuration window close button * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) * * Usage: environments configuration window close event callback GTK4 * * GtkWindow * widg : the GtkWindow sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: environments configuration window close event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * GtkWidget * advanced_coord_properties (glwin * view, int page) * * Usage: create the environments configuration window * * glwin * view : the target glwin * int 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; } /* * int get_page_from_geo_coord (glwin * view, int geo, int coord) * * Usage: find the proper page to display in the notebook * * glwin * view : the target glwin * int geo : the type of environment * int 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; } /* * G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) * * Usage: create the environments configuration window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_crystal.c000066400000000000000000000567421450232132300205070ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_crystal.c' * * Contains: * - The subroutines to create a crystal database window - This is a project and not in use for the time being * * List of subroutines: 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 (struct project * this_proj); void sort_files (int num_f); 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 (struct project * this_proj, gboolean get_depth); extern void alloc_proj_data (struct project * this_proj, int cid); extern int action_atoms_from_project (struct project * this_proj, atom_search * asearch, int status, gboolean visible); extern void to_insert_in_project (int stat, int orig, struct 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; struct project * cif_proj = NULL; gchar * other_name[5]; int o_names; typdef struct cif_data{ gchar * file_name; gchar * name; gchar * group; gchar * formula; int species; }; /* * int cif_preview (const char * filetoread) * * Usage: * * const char * 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; } /* * int get_cgroup (gchar * str) * * Usage: * * gchar * 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_files (val); } return val; } /* * int get_num_cif () * * Usage: */ int get_num_cif () { return num_cif[the_symmetry][the_group]; } /* * int get_num_group () * * Usage: */ int get_num_group () { return num_group[the_symmetry]; } /* * void fill_cif_tree (GtkListStore * store) * * Usage: * * GtkListStore * 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); } /* * void prepare_cif_preview (int id) * * Usage: * * int 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); } } } /* * int get_cif_info_from_cif_node (xmlNodePtr * cnode) * * Usage: * * xmlNodePtr * cnode : */ int get_cif_info_from_cif_node (xmlNodePtr * cnode) { return 1; } /* * void prepare_cif_list (int dba, int sym, int spg) * * Usage: * * int dba : * int sym : * int 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(); } } /* * int open_cif_database (gchar * filetoread) * * Usage: * * gchar * 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.12/src/opengl/win/w_cutoffs.c000066400000000000000000000225611450232132300204670ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_cutoffs.c' * * Contains: * - The subroutines to create the bond cutoffs update dialog * * List of subroutines: void update_cutoffs (struct project * this_proj); void cut_box (struct 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 (struct project * this_proj, glwin * view, int id); double * tmpcut; /* * void update_cutoffs (struct project * this_proj) * * Usage: update bond cutoffs * * struct project * this_proj : the target project */ void update_cutoffs (struct 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); } } } /* * G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) * * Usage: change cutoff entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } /* * void cut_box (struct project * this_proj, GtkWidget * vbox) * * Usage: box cutoff entries * * struct project * this_proj : the target project * GtkWidget * vbox : the GtkWidget sending the signal */ void cut_box (struct 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); } /* * G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) * * Usage: bond cutoffs window - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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 /* * G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) * * Usage: adjust bond cutoffs window callback GTK4 * * GSimpleAction * action : the GAction sending the signal * GVariant * parameter : GVariant parameter of the GAction * gpointer data : the associated data pointer */ G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /* * G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) * * Usage: adjust bond cutoffs window callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_encode.c000066400000000000000000000352151450232132300202530ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_encode.c' * * Contains: * - The subroutines to create the encoding (image/video) window * * List of subroutines: 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); /* * G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) * * Usage: set number of frames * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) * * Usage: set video extra frames * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) * * Usage: set video / image resolution * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } /* * G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) * * Usage: change video codec * * GtkComboBox *ComboBoxGtk : the GtkComboBox sending the signal */ G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) { codec = gtk_combo_box_get_active (ComboBoxGtk); } /* * G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) * * Usage: set encoding OpenGL quality callback - spin * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) * * Usage: set video bitrate entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * void clean_animation (glwin * view) * * Usage: clean saved animation data * * glwin * view : the target glwin */ void clean_animation (glwin * view) { int i; struct snapshot * shot = view -> anim -> first; struct 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; /* * void set_encoding_widget_sensitivity (gboolean video, int sensitivity) * * Usage: * * gboolean video : encoding video (yes / no) * int 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; /* * G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) * * Usage: selecting the image format * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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; /* * G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) * * Usage: encoding a movie - running the dialog * * GtkDialog * win : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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); } } /* * void window_encode (glwin * view, gboolean video) * * Usage: encoding a movie - creating the dialog * * glwin * view : the target glwin * gboolean 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.12/src/opengl/win/w_labels.c000066400000000000000000000650211450232132300202560ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_labels.c' * * Contains: * - The subroutines to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window - The subroutines to create the measure labels window of the 'Measures' window * * List of subroutines: 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; /* * G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) * * Usage: change measure style * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) * * Usage: change label(s) format * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); struct 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); } } /* * G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) * * Usage: change label(s) rendering mode * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); struct 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); } } /* * void init_labels_colors (image * img, int sp, int id) * * Usage: initialize atomic labels colors * * image * img : the target image * int sp : the total number of chemical species * int 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 /* * G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) * * Usage: use default atom colors - toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) * * Usage: use default atom colors - toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) * * Usage: change label(s) font * * GtkFontButton * fontb : the GtkFontButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) * * Usage: change label(s) color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) * * Usage: change label(s) position * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; struct 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); } /* * void label_shift_has_changed (gpointer data, double value) * * Usage: change label(s) shift * * gpointer data : the associated data pointer * double value : the new label(s) shift */ void label_shift_has_changed (gpointer data, double value) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: change label(s) shift - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) * * Usage: change label(s) shift - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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 /* * G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) * * Usage: change label(s) scale - toggle callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) * * Usage: change label(s) scale - toggle callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) * * Usage: change label(s) tilt * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; struct 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); } /* * void mesure_factor_has_changed (gpointer data, double value) * * Usage: change measure scale factor * * gpointer data : the associated data pointer * double value : the new scale factor */ void mesure_factor_has_changed (gpointer data, double value) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: change measure scall factor - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) * * Usage: change measure scall factor - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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)); } /* * void measure_width_has_changed (gpointer data, double value) * * Usage: change measure width * * gpointer data : the associated data pointer * double value : the new width value */ void measure_width_has_changed (gpointer data, double value) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) * * Usage: change measure width - scroll callback * * GtkRange * range : the GtkRange sending the signal * GtkScrollType scroll : the associated scroll type * gdouble value : the range value * gpointer 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; } /* * G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) * * Usage: change measure width - range callback * * GtkRange * range : the GtkRange sending the signal * gpointer 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 /* * G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) * * Usage: toggle enable measure lines callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) * * Usage: toggle enable measure lines callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; struct 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); } /* * GtkWidget * labels_tab (glwin * view, int id) * * Usage: create atomic label(s) tab for the atom(s) / clone(s) window * * glwin * view : the target glwin * int id : 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"}; struct 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.12/src/opengl/win/w_library.c000066400000000000000000001126731450232132300204660ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_library.c' * * Contains: * - The subroutines to create the molecular library - The subrouitnes to read the 'Simple chemical XML' files * * List of subroutines: 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, struct project * this_proj, atom_search * asearch); int insert_this_project_from_lib (int id, gboolean visible, struct 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}}; struct insertion 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 (struct project * this_proj, atom_search * asearch, gboolean visible); extern void to_insert_in_project (int stat, int orig, struct 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; struct project * lib_proj = NULL; gchar * other_name[5]; int o_names; int inserted_from_lib; /* * double get_z_from_periodic_table (gchar * lab) * * Usage: get Z from atom label * * gchar * 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; } /* * int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) * * Usage: free XML data * * xmlDoc * doc : the XML doc pointer to free * xmlTextReaderPtr reader : the XML reader to free */ int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 0; } /* * gchar * replace_markup (char * init, char * key, char * rep) * * Usage: replace pattern in string * * char * init : the string * char * key : the pattern to replace * char * 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); } /* * gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) * * Usage: substitute all patterns in string * * gchar * init : the initial string * gchar * o_motif : the pattern to replace * gchar * 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; } /* * gchar * check_xml_string (gchar * init) * * Usage: check for, and correct tags in XML string * * gchar * 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; } /* * int sml_preview (const char * filetoread) * * Usage: retrieve preview information from 'Simple chemical library XML' file * * const char * 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; } /* * gchar * open_sml_file (const char * filetoread, int fam) * * Usage: open 'Simple chemical library XML' file * * const char * filetoread : the name of the file to open * int 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; } } /* * int get_family (gchar * str) * * Usage: get molecular family id * * gchar * 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; } /* * void fill_molecule_tree (GtkListStore * store) * * Usage: fill molecule list store * * GtkListStore * 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); } /* * void prepare_preview (int active, int id, gboolean visible) * * Usage: prepare library molecule preview * * int active : active project id * int id : molecule id number * gboolean 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); } } } /* * G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) * * Usage: select library element callback * * GtkTreeView * tree_view : the GtkTreeView sending the signal * GtkTreePath * path : the path in the tree view * GtkTreeViewColumn * column : the column in the tree view * gpointer 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); } } } /* * G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: set font markup in the molecular library tree store * * GtkTreeViewColumn * col : the target GtkTreeViewColumn * GtkTreeCellRenderer * renderer : the target cell renderer * GtkTreeModel : the target tree model * GtkTreeIter : the target tree iter * gpointer 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); } /* * GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) * * Usage: create library tree store widget * * GtkListStore * store : the list store model to use * int id : selection id (0 = family, 1 = molecule) * gchar * 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; /* * G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) * * Usage: select from library - running the dialog * * GtkDialog * lib : the GtkDialog sending the signal * gint response_id : the response id * gpointer 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; struct 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); 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 = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; inserted_from_lib += action_atoms_from_project (this_proj, asearch, vis); } 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 -> mode == EDITION) asearch -> todo[0] = 0; lib_res = 0; done = TRUE; break; } if (done) destroy_this_dialog (lib); } /* * int select_from_library (gboolean visible, struct project * this_proj, atom_search * asearch) * * Usage: select object to insert from the library * * gboolean visible : is the 'model edition' window visible * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ int select_from_library (gboolean visible, struct project * this_proj, atom_search * asearch) { int active = activep; lib_visible = visible; GtkWidget * lib = dialogmodal ("Library", GTK_WINDOW(this_proj -> modelgl -> win)); #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); this_proj -> modelgl -> nth_copy = 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; } /* * int insert_this_project_from_lib (int id, gboolean visible, struct project * this_proj, atom_search * asearch) * * Usage: insert object from the library * * int id : object id to insert * gboolean visible : is the 'model edition window' visible * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ int insert_this_project_from_lib (int id, gboolean visible, struct 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); 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.12/src/opengl/win/w_measures.c000066400000000000000000000742461450232132300206510ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_measures.c' * * Contains: * - The subroutines to create the measurement(s) window * * List of subroutines: 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; /* * int get_selection_type (glwin * view) * * Usage: get selection type * * glwin * 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; } } /* * void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) * * Usage: fill bond tree store row * * int p : the project id * int a : 1st atom id * int b : 2nd atom id * GtkTreeStore * 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; struct project * this_proj = get_project_by_id(p); struct atom * at, * bt; gboolean pbc = this_proj -> cell.pbc; struct 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); } /* * void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) * * Usage: fill angle tree store row * * int p : the project id * int a : 1st atom id * int b : 2nd atom id * int c : 3rd atom id * GtkTreeStore * 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; struct project * this_proj = get_project_by_id(p); struct atom * at, * bt, * ct; gboolean pbc = this_proj -> cell.pbc; struct 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); } /* * void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) * * Usage: fill dihedral tree store row * * int p : the project id * int a : 1st atom id * int b : 2nd atom id * int c : 3rd atom id * int d : 4th atom id * GtkTreeStore * 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; struct project * this_proj = get_project_by_id(p); struct atom * at, * bt, * ct, * dt; gboolean pbc = this_proj -> cell.pbc; struct 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); /* * void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage : show / hide cell renderer in the measures tree store * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the column renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree it * gpointer 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); } /* * void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage : set renderer color in the measures tree store * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the column renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree it * gpointer 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); struct 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)); } /* * void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage : * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the column renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree it * gpointer 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); } /* * void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage : * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the column renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree it * gpointer 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); /* * void update_selection_tree (glwin * view, int sid, int mid) * * Usage: update measurements tree view * * glwin * view : the target glwin * int sid : the type of selection (0 = analysis mode, 1 = edition mode) * int 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); } /* * G_MODULE_EXPORT void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) * * Usage: measure tree button event * * GtkWidget * widget : the GtkWidget sending the signal * double event_x : x position * double event_y : y position * guint event_button : event buttton * gpointer 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 /* * G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) * * Usage: measures tree view button press callback GTK4 * * GtkWidget * widget : the GtkWidget sending the signal * GdkEventButton * event : the GtkEventButton triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: measures tree view button press callback GTK3 * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * GtkWidget * create_selection_tree (glwin * view, int sid, int mid) * * Usage: create the measurements selection tree * * glwin * view : the target glwin * int sid : the type of selection (0 = analysis mode, 1 = edition mode) * int 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; } /* * GtkWidget * measurment_tab (glwin * view, int sid, mid) * * Usage: create measurement tab * * glwin * view : the target glwin * int sid : the type of selection (0 = analysis mode, 1 = edition mode) * int 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; } /* * gchar * create_measure_label (glwin * view, int sid) * * Usage: create the text information for the number of atom(s) in selection * * glwin * view : the target glwin * int 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; } /* * void update_label_selection (glwin * view, int sid) * * Usage: update the text information for the number of atoms/measures in selection * * glwin * view : the target glwin * int pi : 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); /* * G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) * * Usage: measurements style edition window close button * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) { destroy_this_widget (GTK_WIDGET(data)); } /* * G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) * * Usage: measurements style edition window * * GtkButton * but : the GtkButton sending the signal * gpointer 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 /* * G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) * * Usage: measurements window close event callback GTK4 * * GtkWindow * widg : * gpointer data : the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) #else /* * G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) * * Usage: measurements window close event callback GTK3 * * GtkWidget * widg : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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; } /* * G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) * * Usage: create the measurements window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_periodic.c000066400000000000000000000527701450232132300206210ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_periodic.c' * * Contains: * - The subroutines to create the periodic table of the elements - The subroutines to select element from the periodic table * * List of subroutines: 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 struct insertion 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"}; /* * gchar * get_electronic_structure (int r, int c) * * Usage: get electronic structure for this (row,column) combination * * int r : row * int 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; } /* * int is_in_table (int i, int j) * * Usage: is this (row,column) combination a chemical element ? * * int i : row * int 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; } /* * GtkWidget * create_el_preview (int p, int a, int r, int c) * * Usage: create element preview * * int p : the target project id * int a : target atom search id * int r : row * int 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; } /* * GtkWidget * el_preview (int p, int a) * * Usage: create element preview CSS widget * * int p : the target project id * int 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 /* * G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) * * Usage: periodic table focus event callback GTK4 * * GtkEventControllerFocus * focus : the GtkEventControllerFocus sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) #else /* * G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) * * Usage: periodic table focus event callback GTK3 * * GtkWidget * widget : the GtkWidget sending the signal * GdkEvent * event : the GdkEvent triggering the signal * gpointer 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 /* * G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) * * Usage: periodic table motion event callback GTK4 * * GtkEventControllerMotion * motion : the GtkEventControllerMotion sending the signal * gdouble x : x position * gdouble y : y position * gpointer 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 /* * G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) * * Usage: periodic table - running the dialog * * GtkDialog * info : the GtkDialog sending the signal * gint response_id : the response id * gpointer data : the associated data pointer */ G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) { destroy_this_dialog (info); } /* * G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) * * Usage: get element from periodic table button * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * GtkWidget * create_css_button (int p, int id, int r, int c) * * Usage: create CSS periodic table element button * * int p : the target project id * int id : is element table (1 / 0) * int r : row * int 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; } /* * GtkWidget * create_css_group (int p, int i) * * Usage: create group CSS * * int p : the target project id * int 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; } /* * GtkWidget * css_element (int p, int i, int j) * * Usage: create CSS for the periodic table elements * * int p : target project id * int i : row * int 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 (" "); } } /* * GtkWidget * periodic_table (int p, int a) * * Usage: create periodic table * * int p : target project id * int 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; } /* * int get_atom_id_from_periodic_table (atom_search * asearch) * * Usage: get atom Z from selection in the periodic table * * atom_search * 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.12/src/opengl/win/w_record.c000066400000000000000000000127661450232132300203020ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_record.c' * * Contains: * - The subroutines de create the recording window * * List of subroutines: 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); /* * void prepare_edition_windows (glwin * view, int status) * * Usage: update the sensitivity of the edition window(s) if any are opened * * glwin * view : the target glwin * int 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); } } } } /* * G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) * * Usage: start recording * * GtkButton * but : the GtkButton sending the signal * gpointer 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; } } /* * G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) * * Usage: stop recording * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) * * Usage: create video recorder window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_rings.c000066400000000000000000001041071450232132300201350ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_rings.c' * * Contains: * - The subroutines to create the ring(s) tab for the advanced environments window * * List of subroutines: int get_rmin (struct project * this_proj, int rid, int step); int get_rmax (struct 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, struct project * this_proj, int rid); void add_this_ring_to_search_tree (struct 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 (struct project * this_proj, int rid, gboolean fill_this); GtkWidget * create_rings_search (struct project * this_proj, int rid); GtkWidget * rings_tab (glwin * view, int rid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" /* * G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: on select ring toggle callback * * GtkCellRendererToggle * cell_renderer : the GtkCellRendererToggle sending the signal * gchar * string_path : the path in the tree store * gpointer 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); } /* * void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer in the ring search tree store * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the column renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree it * gpointer 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; struct 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); } } } } /* * void fill_rings_model (GtkTreeStore * store, struct project * this_proj, int rid) * * Usage: fill the entire ring(s) tree store * * GtkTreeStore * store : the GtkTreeStore to fill * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void fill_rings_model (GtkTreeStore * store, struct 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); } } } } } } /* * GtkWidget * create_rings_tree (struct project * this_proj, int rid, gboolean fill_this) * * Usage: create the ring(s) search tree store * * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong * gboolean fill_this : 1 = yes, 0 = no */ GtkWidget * create_rings_tree (struct 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; } /* * void add_this_ring_to_search_tree (struct project * this_proj, int rid) * * Usage: add ring in the search tree based on ring size and id * * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void add_this_ring_to_search_tree (struct 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; } } } } /* * int get_rmin (struct project * this_proj, int rid, int step) * * Usage: get ring(s) max size for the MD step * * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong * int step : the MD step */ int get_rmin (struct 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; } /* * int get_rmax (struct project * this_proj, int g, int step) * * Usage: get ring(s) min size for the MD step * * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong * int step : the MD step */ int get_rmax (struct 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; } /* * G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) * * Usage: update the ring(s) search widget * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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); } } /* * GtkWidget * create_rings_search (struct project * this_proj, int rid) * * Usage: create the ring(s) search widget * * struct project * this_proj : the target project * int rid : the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * create_rings_search (struct 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; } /* * GtkWidget * rings_tab (glwin * view, int rid) * * Usage: create the ring(s) tab for the advanced environments window * * glwin * view : the target glwin * int 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; struct 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.12/src/opengl/win/w_search.c000066400000000000000000004456141450232132300202730ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_search.c' * * Contains: * - The subroutines 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 subroutines: 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, struct project * this_proj); gboolean append (atom_search * asearch, struct 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, struct insert_object * object, gboolean init); gchar * get_node_name (int node, atom_search * asearch, struct project * this_proj); void check_tree_for_this_search (struct project * this_proj, atom_search * asearch); void check_all_trees (struct project * this_proj); void motion_to_zero (atom_search * asearch); void adjust_object_to_move (struct 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, struct project * this_proj); void fill_atom_model (atom_search * asearch, struct 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, struct project * this_proj, int a, int s, int c, gboolean status); void adjust_this_tree_branch (atom_search * asearch, struct project * this_proj, int oid, int sid, GtkTreeIter iter); void adjust_this_tree_leaf (atom_search * asearch, struct project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter); void adjust_data_model_to_replace (struct 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, struct 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 p); struct insert_object * get_insert_object_by_origin (struct insert_object * first, int oid, int aid); */ #include "atom_edit.h" extern int check_label_numbers (struct project * this_proj, int types); extern int selected_aspec; extern int select_from_library (gboolean visible, struct project * this_proj, atom_search * asearch); extern struct atom_selection * preserve_ogl_selection (glwin * view); extern void create_slab_lists (struct project * this_proj); extern int get_to_be_selected (glwin * view); extern void restore_ogl_selection (glwin * view); /* * int get_asearch_num_objects (atom_search * asearch) * * Usage: the number of type of object(s) in this atom search * * atom_search * 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; } } /* * int get_asearch_object (atom_search * asearch) * * Usage: get the number of object(s) in this atom search * * atom_search * 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; } } /* * int get_asearch_filter (atom_search * asearch) * * Usage: get asearch filter * * atom_search * 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; } } /* * gboolean get_asearch_is_object (atom_search * asearch) * * Usage: get asearch object * * atom_search * 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; } } /* * void check_tree_for_this_search (struct project * this_proj, atom_search * asearch) * * Usage: check, and adjust if needed, the tree construction for this atom search * * struct project * this_proj : the target project * atom_search * asearch : the target atom search */ void check_tree_for_this_search (struct 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) { 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 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); } } } } /* * void check_all_trees (struct project * this_proj) * * Usage: check all search trees * * struct project * this_proj : the target project */ void check_all_trees (struct 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]); } } } } /* * struct insert_object * get_insert_object_by_origin (struct insert_object * first, int oid, int aid) * * Usage: get insert object from a list by id * * struct insert_object * first : the first insert object of the list * int oid : object origin id (type of origin) * int aid : object id */ struct insert_object * get_insert_object_by_origin (struct insert_object * first, int oid, int aid) { struct insert_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; } /* * void motion_to_zero (atom_search * asearch) * * Usage: reset motion to 0.0 * * atom_search * asearch : the target atom search */ void motion_to_zero (atom_search * asearch) { struct 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); } } } /* * void adjust_object_to_move (struct project * this_proj, atom_search * asearch, int mv, int id) * * Usage: adjust atom search parameters for motion cases * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int mv : motion id (0 = standard, 1 = random) * int id : object id */ void adjust_object_to_move (struct 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]) { struct insert_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); } /* * void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, struct project * this_proj) * * Usage: append data to the search tree store * * GtkTreeIter * atom_level : the iter to insert the data to * atom_search * asearch : the target atom search * gboolean is_object : the atom search object (atom or group of atoms) * int h : the object type id * int i : the object id * struct project * this_proj : the target project */ void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, struct 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); struct insert_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 && asearch -> set_for_all) { 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 && asearch -> set_for_all) { 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_insert_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; } } /* * gboolean fill_for_action (atom_search * asearch, int i, int j, struct project * this_proj) * * Usage: test if the atom 'i' of species 'j' matches requirement(s) to be in the tree store * * atom_search * asearch : the target atom search * int i : the atom id * int j : the chemical species id (or type id) * struct project * this_proj : the target project */ gboolean fill_for_action (atom_search * asearch, int i, int j, struct 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; } /* * gboolean append (atom_search * asearch, struct project * this_proj, int i, int j) * * Usage: test if the atom 'i' of species 'j' must be added to the tree store or not * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int i : the atom id * int j : the chemical species id */ gboolean append (atom_search * asearch, struct 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; } /* * gchar * adjust_picked (gchar * picked, struct insert_object * object, gboolean init) * * Usage: adjust the name of the replacement object to use for a type of object if any * * gchar * picked : type name (species, coordination, fragment, molecule name) * struct insert_object * object : the target insert object * gboolean init : 1 / 0 depending on the atom search filter */ gchar * adjust_picked (gchar * picked, struct insert_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; } } /* * gchar * get_node_name (int node, atom_search * asearch, struct project * this_proj) * * Usage: get node label in the atom search tree store * * int node : the node id * atom_search * asearch : the target atom search * struct project * this_proj : the target project */ gchar * get_node_name (int node, atom_search * asearch, struct 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; } /* * void fill_atom_model (atom_search * asearch, struct project * this_proj) * * Usage: fill atom search tree store * * atom_search * asearch : the target atom search * struct project * this_proj : the target project */ void fill_atom_model (atom_search * asearch, struct 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_insert_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_insert_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_insert_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; } // Affecté ? 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) { if (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; struct insert_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); /* * void update_search_tree (atom_search * asearch) * * Usage: update search tree * * atom_search * 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)); } /* * gboolean update_this_search (atom_search * asearch) * * Usage: test if it is required to update the search tree or not * * atom_search * 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; } /* * G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) * * Usage: adjust atom search parameters if >= 10 000 atoms * * GtkEntry * entry : the GtkEntry sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; int i; struct 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); } } /* * void clear_fields (atom_search * asearch) * * Usage: clear all search fields if >= 10 000 atoms * * atom_search * 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); } /* * gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) * * Usage: * * GtkTreeModel * model : the tree model * GtkTreePath * path : the path in the tree model * GtkTreeIter * iter : the tree iter * gpointer 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; struct 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; } /* * G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) * * Usage: remove atom (or object) from the search tree if >= 10 000 atoms * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) * * Usage: is this atom already in the tree model if >= 10 000 atoms * * GtkTreeModel * model : the target tree model * GtkTreePath * path : the path in the tree model * GtkTreeIter * iter : the tree iter * gpointer 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; } /* * G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) * * Usage: add atom (or object) to the search tree if >= 10 000 atoms * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; struct 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); } /* * void re_populate_tree_search (atom_search * asearch) * * Usage: re populate search tree after atom action if >= 10 000 atoms * * atom_search * asearch : the target atom search */ void re_populate_tree_search (atom_search * asearch) { struct 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; } /* * G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) * * Usage: set search id if >= 10 000 atoms * * GtkEntry * entry : the GtkEntry sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; struct 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); } } } } /* * void adjust_search_param (atom_search * asearch, struct project * this_proj, int a, int s, int c, gboolean status) * * Usage: * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int a : the atom id * int s : the chemical species, or object id * int c : the column id * gboolean status : the new toogle status */ void adjust_search_param (atom_search * asearch, struct 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); /* * void adjust_this_tree_branch (atom_search * asearch, struct project * this_proj, int oid, int sid, GtkTreeIter iter) * * Usage: adjust tree branch (for an entire type of object) * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int oid : the column id * int sid : the chemical species or object type id * GtkTreeIter iter : the tree iter */ void adjust_this_tree_branch (atom_search * asearch, struct 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); struct selatom * selected; if (asearch -> action < 2 && oid == TOPIC) { 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); } /* * void adjust_this_tree_leaf (atom_search * asearch, struct project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) * * Usage: adjust tree leaf (for a single object) * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int oid : the column id * int aid : the atom id * int new_status : the new toggle status * GtkTreeIter iter : the tree iter */ void adjust_this_tree_leaf (atom_search * asearch, struct 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)]; #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); } /* * G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) * * Usage: toggle select / unselect object in the atom search tree model * * GtkCellRendererToggle * cell_renderer : the cell renderer toggle button * gchar * string_path : the path in the tree model * gpointer 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; struct 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); } /* * int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) * * Usage: get the id of the object selected (in contextual menu, or in combo box) * * gboolean visible : is the 'model edition' window visible (1/0) * int p : the target project id * gchar * str : the string that describing the selection * atom_search * 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; } /* * void adjust_data_model_to_replace (struct project * this_proj, atom_search * asearch, int sid, int vid) * * Usage: adjust the data of the tree model to insert 'vid' * * struct project * this_proj : the target project * atom_search * asearch : the target atom search * int sid : the chemical species * int vid : id of the object to insert */ void adjust_data_model_to_replace (struct 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; } } /* * G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) * * Usage: change combo box in atom search tree model * * GtkCellRendererCombo * combo : the cell renderer combo box * gchar * path_string : the path in the tree model * GtkTreeIter * iter : the tree iter * gpointer 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; struct 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_insert_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name) : g_strdup_printf ("For all: %s", get_insert_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_insert_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_insert_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); } } /* * GtkTreeModel * replace_combo_tree (gboolean insert, int p) * * Usage: replace combo box in the tree view * * gboolean insert : add 'Select ...' combo box item * int p : target crystal builder project id */ GtkTreeModel * replace_combo_tree (gboolean insert, int p) { 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(p) -> 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); } /* * void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) * * Usage: show / hide cell renderer, if visible then add or not pango markup * * GtkTreeViewColumn * col : the tree view column * GtkCellRenderer * renderer : the cell renderer * GtkTreeModel * mod : the tree model * GtkTreeIter * iter : the tree iter * gpointer 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; /* * G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) * * Usage: set occupancy entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct insert_object * object = (struct insert_object *)data; if (v > 0.0 && v<= 1.0) { object -> occ = v; } update_entry_double (res, object -> occ); } /* * G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) * * Usage: set insertion coordinate(s) for the object to be inserted entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct project * this_proj = get_project_by_id (csearch -> proj); int oid = (csearch -> pointer[0].c == 5) ? 1 : 2; struct insert_object * object = get_insert_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]); } /* * G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) * * Usage: set MSD max entry callback * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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; /* * G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) * * Usage: set how many time(s) to re-do the action * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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]); } /* * void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) * * Usage: find iter in the tree model using path string, then edit the data * * gchar * path_string : the path in the tree model * gpointer data : the associated data pointer * GtkWidget * widg : the GtkWidget sending the signal */ void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) { tint * cid = (tint *)data; struct 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; struct insert_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_insert_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: max_random = this_proj -> chemistry -> nsps[-h-1]; nran = g_strdup_printf ("%s", this_proj -> chemistry -> label[-h-1]); break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == -h-1) 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) 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) 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); } } } } /* * G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) * * Usage: to edit data in the atom search tree model * * GtkCellRenderer * cell : the GtkCellRenderer * GtkCellEditable * editable : the editable * gchar * path_string : the path in the tree model * gpointer 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); } /* * G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) * * Usage: add pango markup to a combo box inserted in the cell of a tree view * * GtkCellRendererCombo * cell : the GtkCellRendererCombo * GtkCellEditable * editable : the editable * gchar * path_string : the path in the tree model * gpointer 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); }*/ } /* * G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) * * Usage: set the maximum MSD for all atom(s) / object(s) of the search * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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); } /* * gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) * * Usage: update tree model for each iter * * GtkTreeModel * model : the tree model * GtkTreePath * path : the path in the tree model * GtkTreeIter * iter : the tree it * gpointer data : the associated data pointer */ gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; struct 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 (GTK_TREE_MODEL(asearch -> atom_model), iter, IDCOL, & i, -1); gtk_tree_store_set (asearch -> atom_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; } /* * G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) * * Usage: select all element(s) in the tree view column * * GtkTreeViewColumn * col : the target tree view column * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) { tint * dat = (tint *)data; struct 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 (! csearch -> passivating) { 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 { switch (- 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); clean_todo (csearch); } csearch -> set_for_all = 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); csearch -> int_b = ! j; gtk_tree_model_foreach (GTK_TREE_MODEL(csearch -> atom_model), update_search_model, & csearch -> pointer[dat -> b-TOLAB]); } } } /* * G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) * * Usage: Move row up or down in the tree model using the mouse * * GtkTreeModel * tree_model : the target tree model * GtkTreePath * path : the path in the tree model * gpointer 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; struct project * this_proj = get_project_by_id(asearch -> proj); struct insert_object * obja, * objb, * objc; GtkTreeIter iter; gboolean valid; int i, j; int * old_todo = duplicate_int (asearch -> in_selection, asearch -> todo); obja = duplicate_insert_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_insert_object (objc); objb = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { objb -> next = duplicate_insert_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); } } /* * GtkWidget * create_atoms_tree (atom_search * asearch, struct project * this_proj, int nats) * * Usage: create atom search tree view * * atom_search * asearch : the target atom search * struct project * this_proj : the target project * int nats : the total number of atom(s) */ GtkWidget * create_atoms_tree (atom_search * asearch, struct 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; } /* * int get_todo_size (atom_search * asearch) * * Usage: get the size of the atom search selection list * * atom_search * asearch : the target atom search */ int get_todo_size (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); struct 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; } /* * void allocate_todo (atom_search * asearch, int tsize) * * Usage: allocate the selection list data buffer * * atom_search * asearch : the target atom search * int tsize : the target size */ void allocate_todo (atom_search * asearch, int tsize) { asearch -> todo = allocint (tsize); asearch -> todo_size = tsize; } /* * void clean_todo (atom_search * asearch) * * Usage: clean atom search selection list * * atom_search * asearch : the target atom search */ void clean_todo (atom_search * asearch) { struct project * this_proj = get_project_by_id (asearch -> proj); if (asearch -> todo) g_free (asearch -> todo); allocate_todo (asearch, get_todo_size(asearch)); struct insert_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; } } /* * void clean_picked_and_labelled (atom_search * asearch) * * Usage: initialize atom search data buffers * * atom_search * asearch : the target atom search */ void clean_picked_and_labelled (atom_search * asearch) { struct 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) { 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]); } } } /* * G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) * * Usage: change the search chemical species * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) * * Usage: change the search filter * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), asearch); } /* * G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) * * Usage: change the search object * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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); } /* * void add_random_column (atom_search * asearch) * * Usage: add a column to the search tree model for the case of random search * * atom_search * 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); } /* * G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) * * Usage: change search mode * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *)data; struct 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); } /* * G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) * * Usage: update search entry * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); } /* * void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) * * Usage: prepare some search widgets * * GtkWidget * vbox : the box to insert the search box in * GtkWidget * lab : the GtkWidget sending the signal * GtkWidget * 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); } /* * GtkWidget * prepare_box_too_much (atom_search * asearch) * * Usage: if too many atoms, then individual search * * atom_search * 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; } /* * GtkWidget * selection_tab (atom_search * asearch, int nats) * * Usage: create the search widget * * atom_search * asearch : the target atom search * int nats : the total number of atoms */ GtkWidget * selection_tab (atom_search * asearch, int nats) { struct 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.12/src/opengl/win/w_sequencer.c000066400000000000000000000367251450232132300210170ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_sequencer.c' * * Contains: * - The subroutine to create the MD sequencer window * * List of subroutines: 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" /* * void set_player_title (glwin * view) * * Usage: set sequencer window title * * glwin * 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); } /* * void update_selection (glwin * view, int o_step) * * Usage: match and udpate selected atom()s from o_step to the active step * * glwin * view : the target glwin * int 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; struct 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); } } /* * void update_step_button (glwin * view) * * Usage: correct widget buttons sensitivity based on MD step * * glwin * 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); } } /* * void sequence (glwin * view, int o_step, int n_step) * * Usage: sequence to next step * * glwin * view : the target glwin * int o_step : actual step * int 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); } /* * G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) * * Usage: go to previous frame * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) * * Usage: go to next frame * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; struct 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); } } /* * G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) * * Usage: go to first frame * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) * * Usage: got to last frame * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) * * Usage: jump to frame * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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); } /* * G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) * * Usage: jump to frame dialog * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * static gboolean animate (gpointer data) * * Usage: animate * * gpointer 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; } /* * G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) * * Usage: play * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) * * Usage: stop * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> play = FALSE; } /* * G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) * * Usage: loop the animation * * GtkButton * but : the GtkButton sending the signal * gpointer 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)); } /* * static gboolean seq_wait_for_stop (gpointer data) * * Usage: pause / restart if on pause * * gpointer 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; } } /* * G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) * * Usage: go faster * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) * * Usage: go slower * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) * * Usage: create the sequencer window * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_spiner.c000066400000000000000000000132011450232132300203050ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_spiner.c' * * Contains: * - The subroutines to create the 'Spin' window * * List of subroutines: 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); /* * gboolean spin (gpointer data) * * Usage: spin * * gpointer data : the associated data pointer */ gboolean spin (gpointer data) { tint * val = (tint *) data; struct 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; } } /* * static gboolean spin_wait_for_stop (gpointer data) * * Usage: spin and wait for stop * * gpointer 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; } } /* * G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) * * Usage: start spin * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } } /* * G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) * * Usage: stop spin * * GtkButton * but : the GtkButton sending the signal * gpointer 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); } /* * G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) * * Usage: create the spin window callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/opengl/win/w_volumes.c000066400000000000000000001346341450232132300205150ustar00rootroot00000000000000/* 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 */ /* * This file: 'w_volumes.c' * * Contains: * - The subroutines to create the 'Volumes' window - The subroutines to compute system / fragment / molecular volumes * * List of subroutines: 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 (struct project * this_proj, int rid, int sid, int gid, int gcid); double molecular_volume (int nats, struct atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang); double get_atoms_box (struct project * this_proj, int rid, int sid, int geo, int gid); void clean_volumes_data (glwin * view); void adjust_vol_md_step (struct project * this_proj, int geo); void add_frag_mol_vol_data (GtkWidget * vbox, struct 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 (struct 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); /* * void clean_volumes_data (glwin * view) * * Usage: clean volume data * * glwin * 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)); } /* * double cap_volume (double ht, double dh) * * Usage: compute cap volume * * double ht : cap height * double dh : sphere radius */ double cap_volume (double ht, double dh) { return (pi/3.0)*ht*ht*(3*dh-ht); } /* * double get_sphere_caps_volume (double dab, double rad, double rbd) * * Usage: compute sphere cap volume * * double dab : distance between the center of the 2 spheres * double rad : sphere a radius * double 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); } /* * double sphere_volume (double rad) * * Usage: compute sphere volume * * double rad : sphere radius */ double sphere_volume (double rad) { return ((4.0*pi)/3.0)*rad*rad*rad; } /* * double get_atoms_volume (struct project * this_proj, int rid, int sid, int gid, int gcid) * * Usage: compute exact atomic volume for all system or fragment or molecule * * struct project * this_proj : the target project * int rid : the type of atomic radius(ii) * int sid : the MD step * int gid : -1 = all system, 2 = fragment(s), 3 = molecule(s) * int gcid : fragment or molecule id number */ double get_atoms_volume (struct 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); struct 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]; /* * double molecular_volume (int nats, struct atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) * * Usage: compute volume * * int nats : number of atoms * struct atom * ats_vol : the list of atom(s) * double baryc[3] : barycenter of the atomic coordinates * double * rvdws : the list of atomic radius (ii) * double a_ang : x axis rotation angle * double b_ang : y axis rotation angle * double c_ang : z axis rotation angle */ double molecular_volume (int nats, struct 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; struct atom * ats_vol = NULL; struct insert_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; } /* * G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) * * Usage: compute volume * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) { tint * dat = (tint *)data; struct 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; } /* * void adjust_vol_md_step (struct project * this_proj, int geo) * * Usage: update volume value labels * * struct project * this_proj : the target project * int geo : 2 = fragment(s), 3 = molecule(s) */ void adjust_vol_md_step (struct 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]); } } } } } /* * G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) * * Usage: compute fragment / molecule volume * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) { int i, j; qint * dat = (qint *)data; struct 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 /* * G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) * * Usage: toggle show / hide volume callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) * * Usage: toggle show / hide volume callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *)data; struct 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 /* * G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) * * Usage: toggle show / hide fragment / molecule volume callback GTK4 * * GtkCheckButton * but : the GtkCheckButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) #else /* * G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) * * Usage: toggle show / hide fragment / molecule volume callback GTK3 * * GtkToggleButton * but : the GtkToggleButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) #endif { qint * dat = (qint *)data; struct 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); } /* * G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) * * Usage: change volume color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; struct 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); } /* * G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) * * Usage: change fragment / molecule volume color * * GtkColorChooser * colob : the GtkColorChooser sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) { qint * dat = (qint *)data; struct 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); } /* * G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) * * Usage: change MD step spin callback * * GtkSpinButton * res : the GtkSpinButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) { qint * dat = (qint *)data; struct 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); } /* * void add_frag_mol_vol_data (GtkWidget * vbox, struct project * this_proj, glwin * view, int geo) * * Usage: add fragment / molecule volume data to the search tab * * GtkWidget * vbox : the GtkWidget sending the signal * struct project * this_proj : the target project * glwin * view : the target glwin * int geo : 2 = fragment(s), 3 = molecule(s) */ void add_frag_mol_vol_data (GtkWidget * vbox, struct 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); } } } /* * G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) * * Usage: update fragment / molecule search entry * * GtkEntry * res : the GtkEntry sending the signal * gpointer 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); struct 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, ""); } } /* * GtkWidget * frag_mol_volume_search (struct project * this_proj, int g) * * Usage: create the fragment(s) / molecule(s) search widget * * struct project * this_proj : the target project * int g : 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_search (struct 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; } /* * GtkWidget * frag_mol_volume_tab (glwin * view, int geo) * * Usage: create the fragment(s) / molecule(s) tab * * glwin * view : the target glwin * int geo : 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_tab (glwin * view, int geo) { GtkWidget * vbox = create_vbox (BSEP); struct 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; } /* * G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) * * Usage: change angular precision * * GtkComboBox * box : the GtkComboBox sending the signal * gpointer 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) { struct 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); } } /* * GtkWidget * vol_model_tab (glwin * view) * * Usage: create the 'Model' volume tab * * glwin * 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; struct 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; } /* * G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) * * Usage: create the 'Volumes' window callback * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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); struct 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.12/src/project/000077500000000000000000000000001450232132300157035ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/project/close_p.c000066400000000000000000000235631450232132300175040ustar00rootroot00000000000000/* 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 */ /* * This file: 'close_p.c' * * Contains: * - The subroutines to close a project - the callbacks to close a project * * List of subroutines: void update_insert_combos (); void close_project (struct project * to_close); void to_close_this_project (int to_activate, struct 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 p); /* * void update_insert_combos () * * Usage: update some GtkComboBox in the workspace if a project is removed */ void update_insert_combos () { GtkTreeModel * model; struct 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); } } } } /* * void close_project (struct project * to_close) * * Usage: close a project * * struct project * to_close : the project to close */ void close_project (struct 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) { struct 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 (); } /* * void to_close_this_project (int to_activate, struct project * this_proj) * * Usage: to close this project * * int to_activate : If the workspace is not empty, activate first another project * struct project * this_proj : the target project */ void to_close_this_project (int to_activate, struct 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 (); } } /* * G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) * * Usage: signal to close a project * * GtkWidget * widg : the GtkWidget sending the signal * gpointer 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.12/src/project/debugio.c000066400000000000000000000421341450232132300174710ustar00rootroot00000000000000/* 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 */ /* * This file: 'debugio.c' * * Contains: * - Some debugging and printing subroutines * * List of subroutines: void debugiocurve (struct project * this_proj, gboolean win, int rid, int cid, gchar * iost); void debug_lattice_info (struct project * this_proj, gchar * iost); void debugioproj (struct project * this_proj, gchar * iost); void debug_chemical_information (struct project * this_proj); */ #include "global.h" #include "project.h" /* * void debugiocurve (struct project * this_proj, gboolean win, int rid, int cid, gchar * iost) * * Usage: debug and print some info about the curves in a project * * struct project * this_proj : the target project * gboolean win : curve window exists (1/0) * int rid : analysis id * int cid : curve id * gchar * iost : input or output information */ void debugiocurve (struct 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); } } /* * void debug_lattice_info (struct project * this_proj, gchar * iost) * * Usage: debug lattice data * * struct project * this_proj : the target project * gchar * iost : input or output information */ void debug_lattice_info (struct 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]); } } /* * void debugioproj (struct project * this_proj, gchar * iost) * * Usage: debug project info * * struct project * this_proj : the target project * gchar * iost : input or output information */ void debugioproj (struct 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); } /* * void debug_chemical_information (struct project * this_proj) * * Usage: debug chemical data info * * struct project * this_proj : the target project */ void debug_chemical_information (struct 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.12/src/project/init_p.c000066400000000000000000000055461450232132300173430ustar00rootroot00000000000000/* 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 */ /* * This file: 'init_p.c' * * Contains: * * * * * List of subroutines: void init_curves_and_calc (struct 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" /* * void init_curves_and_calc (struct project * this_proj) * * Usage: for a project reset analysis, curves, data to not performed * * struct project * this_proj : the target project */ void init_curves_and_calc (struct project * this_proj) { int i; for (i=0; i runok[i] = FALSE; this_proj -> initok[i] = FALSE; this_proj -> visok[i] = FALSE; } } /* * void init_project (gboolean alloc_box) * * Usage: initialize a new project * * gboolean alloc_box : allocate data for the MD box (1/0) */ void init_project (gboolean alloc_box) { int i; struct 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.12/src/project/open_p.c000066400000000000000000000341331450232132300173330ustar00rootroot00000000000000/* 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 */ /* * This file: 'open_p.c' * * Contains: * - Subroutine to start reading atomes project file * * List of subroutines: 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 (struct project * this_proj); void alloc_proj_data (struct 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); /* * char * read_string (int i, FILE * fp) * * Usage: read a string from a file * * int i : the size of the string to read * FILE * 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; } /* * void initcnames (int w, int s) * * Usage: initialize curve namees * * int w : calculation id * int 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; } } /* * void allocatoms (struct project * this_proj) * * Usage: allocate project data * * struct project * this_proj : the target project */ void allocatoms (struct 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; } } } /* * chemical_data * alloc_chem_data (int spec) * * Usage: allocate chemistry data * * int 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; } /* * void alloc_proj_data (struct project * this_proj, int cid) * * Usage: allocate data * * struct project * this_proj : the target project * int cid : Allocate chemistry data (1/0) */ void alloc_proj_data (struct project * this_proj, int cid) { if (cid) this_proj -> chemistry = alloc_chem_data (this_proj -> nspec); allocatoms (this_proj); } /* * int open_project (FILE * fp, int npi) * * Usage: open atomes project file * * FILE * fp : the file pointer * int 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; // test on ver for version /*if (g_strcmp0(ver, "%\n% project file v-2.5\n%\n") == 0) { }*/ #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 (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 (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) { prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps); 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.12/src/project/project.c000066400000000000000000000065111450232132300175200ustar00rootroot00000000000000/* 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 */ /* * This file: 'project.c' * * Contains: * - Project management miscellaneous subroutines * * List of subroutines: void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]); void send_steps_ (int * steps); struct project * get_project_by_id (int p); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "bind.h" workspace workzone; struct 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; struct project * opengl_project = NULL; /* * void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]) * * Usage: retrieve atomic coordinates from Fortran90 * * int * nat : Number of atoms * int lot[* nat] : List of chemical species by atoms * int * num : Number of coordinates (NA x NS) * double xpos[* num] : x coordinates * double ypos[* num] : y coordinates * double zpos[* num] : 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++; } } } /* * void send_steps_ (int * steps) * * Usage: retrieve the number of MD steps from Fortran90 * * int * steps : the number of MD steps */ void send_steps_ (int * steps) { active_project -> steps = * steps; } /* * struct project * get_project_by_id (int p) * * Usage: get project pointer using id number * * int p : the id number */ struct project * get_project_by_id (int p) { struct 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.12/src/project/project.h000066400000000000000000000075371450232132300175360ustar00rootroot00000000000000/* 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 */ /* * This header file: 'project.h' * * Contains: */ #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, struct project * this_proj, int s, int a); extern int read_atom_b (FILE * fp, struct project * this_proj, int s, int a); extern int read_opengl_image (FILE * fp, struct 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, struct project * this_proj); extern int read_lmp_field_data (FILE * fp, struct project * this_proj); extern int read_cpmd_data (FILE * fp, int cid, struct project * this_proj); extern int read_cp2k_data (FILE * fp, int cid, struct project * this_proj); extern gchar * read_this_string (FILE * fp); extern void alloc_proj_data (struct project * this_proj, int cid); extern int open_project (FILE * fp, int wid); // Save extern int save_atom_a (FILE * fp, struct project * this_proj, int s, int a); extern int save_opengl_image (FILE * fp, struct project * this_proj, image * img, int sid); extern int save_project_curve (FILE * fp, int wid, struct project * this_proj, int rid, int cid); extern int save_dlp_field_data (FILE * fp, struct project * this_proj); extern int save_lmp_field_data (FILE * fp, struct project * this_proj); extern int save_cpmd_data (FILE * fp, int cid, struct project * this_proj); extern int save_cp2k_data (FILE * fp, int cid, struct project * this_proj); extern int save_this_string (FILE * fp, gchar * string); extern int save_mol (FILE * fp, struct project * this_proj); extern int save_bonding (FILE * fp, struct project * this_proj); extern int save_project (FILE * fp, struct 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, struct project * this_proj); extern gboolean setup_custom_color_map (float * data, struct 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 (struct 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 (struct project * to_close); extern void to_close_this_project (int to_activate, struct project * this_proj); extern void hide_current_project (struct 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 (struct project * this_proj, gboolean win, int rid, int cid, gchar * iost); extern void debugioproj (struct project * this_proj, gchar * iost); #endif Atomes-GNU-1.1.12/src/project/read_bond.c000066400000000000000000000163131450232132300177700ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_bond.c' * * Contains: * - The subroutine to read bonding information from atomes project file * * List of subroutines: int read_bonding (FILE * fp); */ #include "global.h" #include "project.h" #include "glview.h" extern void new_coord_menus (struct 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); /* * int read_bonding (FILE * fp) * * Usage: read bonding information from file * * FILE * fp : the file pointer */ int read_bonding (FILE * fp) { int i, j, k, l, m; struct 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, TRUE); } return OK; } Atomes-GNU-1.1.12/src/project/read_curve.c000066400000000000000000000263571450232132300202030ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_curve.c' * * Contains: * - The subroutines to read curve information from atomes project file * * List of subroutines: int read_project_curve (FILE * fp, int wid, int pid); gboolean read_data_layout (FILE * fp, DataLayout * layout); */ #include "global.h" #include "project.h" /* * gboolean read_data_layout (FILE * fp, DataLayout * layout) * * Usage: read data layout from file * * FILE * fp : the file pointer * DataLayout * 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; } /* * int read_project_curve (FILE * fp, int wid, int pid) * * Usage: read a project curve from file * * FILE * fp : the file pointer * int wid : the total number of projects in the workspace * int 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; } struct 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); struct cextra * 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.12/src/project/read_field.c000066400000000000000000000535341450232132300201370ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_field.c' * * Contains: * - The subroutines required to read a DLPOLY force field information from atomes project file * * List of subroutines: 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, struct project * this_proj); int read_lmp_field_data (FILE * fp, struct project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /* * int read_field_atom (FILE * fp) * * Usage: read field atom properties from file * * FILE * 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; } /* * int read_field_shell (FILE * fp) * * Usage: read field core shell data from file * * FILE * 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; } /* * int read_field_constraint (FILE * fp) * * Usage: read field constraint data from file * * FILE * 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; } /* * int read_field_pmf (FILE * fp) * * Usage: read field mean force potential data from file * * FILE * 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; } /* * int read_field_rigid (FILE * fp) * * Usage: read field rigid constraints data from file * * FILE * 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; } /* * int read_field_tethered (FILE * fp, int fid) * * Usage: read field tethered data from file * * FILE * fp : the file pointer * int 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; } /* * int read_field_prop (FILE * fp, int fid, int pid) * * Usage: read field property from file * * FILE * fp : the file pointer * int fid : the field id * int 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; } /* * int read_field_struct (FILE * fp, int fid) * * Usage: read field structural properties from file * * FILE * fp : the file pointer * int 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; } /* * int read_field_molecule (FILE * fp, int fid) * * Usage: read field molecule from file * * FILE * fp : the file pointer * int 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; } /* * int read_field_body (FILE * fp, int fid) * * Usage: read field nth body data from file * * FILE * fp : the file pointer * int 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; } /* * int read_field_external (FILE * fp, int fid) * * Usage: read field external data from file * * FILE * fp : the file pointer * int 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; } /* * int read_dlp_field_data (FILE * fp, struct project * this_proj) * * Usage: read force field data from file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int read_dlp_field_data (FILE * fp, struct 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; } /* * int read_lmp_field_data (FILE * fp, struct project * this_proj) * * Usage: read LAMMPS field data from file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int read_lmp_field_data (FILE * fp, struct 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.12/src/project/read_mol.c000066400000000000000000000114751450232132300176410ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_mol.c' * * Contains: * - The subroutine to read molecule(s) data from atomes project file * * List of subroutines: int read_atom_m (FILE * fp, int s, int a); int read_this_mol (FILE * fp, struct molecule * tmp); int read_mol (FILE * fp); */ #include "global.h" #include "project.h" #include "initcoord.h" #include "submenus.h" extern void duplicate_molecule (struct molecule * new_mol, struct molecule * old_mol); /* * int read_atom_m (FILE * fp, int s, int a) * * Usage: read atom fragment and molecule data * * FILE * fp : the file pointer * int s : the MD step * int 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; } /* * int read_this_mol (FILE * fp, struct molecule * tmp) * * Usage: read molecule data * * FILE * fp : the file pointer * struct molecule * tmp : the molecule to store the data */ int read_this_mol (FILE * fp, struct 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; } /* * int read_mol (FILE * fp) * * Usage: read molecule(s) information from file * * FILE * 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]); } struct 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.12/src/project/read_opengl.c000066400000000000000000000646701450232132300203430ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_opengl.c' * * Contains: * - Subroutines to read the OpenGL window configuration from atomes project file * * List of subroutines: int read_atom_a (FILE * fp, struct project * this_proj, int s, int a); int read_atom_b (FILE * fp, struct 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, struct project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /* * int read_atom_a (FILE * fp, struct project * this_proj, int s, int a) * * Usage: read atom properties from file (a) * * FILE * fp : the file pointer * struct project * this_proj : the target project * int s : the MD step * int a : the atom number */ int read_atom_a (FILE * fp, struct 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; } /* * int read_atom_b (FILE * fp, struct project * this_proj, int s, int a) * * Usage: read atom properties from file (b) * * FILE * fp : the file pointer * struct project * this_proj : the target project * int s : the MD step * int a : the atom number */ int read_atom_b (FILE * fp, struct 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; } /* * int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) * * Usage: read rings and chains statistics data from file * * FILE * fp : the file pointer * glwin * view : the glwin to store the data * int type : Rings (0) or chains (1) * int rid : the ring id or 0 * int size : the size of the ring or chain * int 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; } /* * int read_opengl_image (FILE * fp, struct project * this_proj, image * img, int sid) * * Usage: read OpenGL image properties from file * * FILE * fp : the file pointer * struct project * this_proj : the target project * image * img : the latest image to store the data * int sid : the number of chemical species */ int read_opengl_image (FILE * fp, struct 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.12/src/project/read_qm.c000066400000000000000000000241671450232132300174710ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_qm.c' * * Contains: * - Subroutines to read ab-intio calculation (CPMD/CP2K) parameters from atomes project file * * List of subroutines: int read_thermo (FILE * fp, struct 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, struct project * this_proj); int read_cp2k_data (FILE * fp, int cid, struct project * this_proj); */ #include "global.h" #include "project.h" /* * int read_thermo (FILE * fp, struct thermostat * thermo) * * Usage: read thermostat information from file * * FILE * fp : the file pointer * struct thermostat * thermo : the thermostat to store the data */ int read_thermo (FILE * fp, struct 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; } /* * int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) * * Usage: read fixed CPMD atom(s) from file * * FILE * fp : the file pointer * cpmd * 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; } /* * int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) * * Usage: read fixed CP2K from file * * FILE * fp : the file pointer * cp2k * cp2k_input : the CP2K input structure to store the data * int 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; } /* * int read_cpmd_data (FILE * fp, int cid, struct project * this_proj) * * Usage: read CPMD data from file * * FILE * fp : the file pointer * int cid : CPMD id (0 = ab-initio, 1 = QM-MM) * struct project * this_proj : the target project */ int read_cpmd_data (FILE * fp, int cid, struct 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); struct 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); struct 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; } /* * int read_cp2k_data (FILE * fp, int cid, struct project * this_proj) * * Usage: read CP2K data from file * * FILE * fp : the file pointer * int cid : CP2K id (0 = ab-initio, 1 = QM-MM) * struct project * this_proj : the target project */ int read_cp2k_data (FILE * fp, int cid, struct 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); struct 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.12/src/project/readers/000077500000000000000000000000001450232132300173305ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/project/readers/read_c3d.c000066400000000000000000000221561450232132300211460ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_c3d.c' * * Contains: * - The subroutines to read Chem3d atomic coordinates * * List of subroutines: 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); /* * int c3d_get_atom_coordinates () * * Usage: 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 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,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); if (v) { if (! i) { #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,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); if (v) { if (! i) 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 struct 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; } /* * int open_c3d_file (int linec) * * Usage: open C3D file * * int 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 !"); add_reader_info ("Wrong file format - first line is corrupted !"); 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 !"); add_reader_info ("Wrong file format - the first line is corrupted !"); 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.12/src/project/readers/read_cif.c000066400000000000000000001402111450232132300212270ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_cif.c' * * Contains: * - The subroutines to read CIF files * * List of subroutines: 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 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 open_cif_file (int linec); float get_atom_coord (gchar * line, int mid); gboolean get_missing_z_from_user (); gboolean cif_file_get_atoms_data (int lin, int cid[8]); gboolean cif_get_atomic_coordinates (int linec); gboolean cif_get_cell_data (int linec); gboolean cif_get_space_group (int linec); gchar * get_cif_word (gchar * mot); gchar * get_atom_label (gchar * line, int lid); gchar * get_string_from_origin (space_group * spg); void file_get_to_line (int line_id); void check_for_to_lab (int ato, gchar * stlab); G_MODULE_EXPORT void select_cif_species (GtkButton * but, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.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 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, struct project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern void sort (int dim, int * tab); FILE * cifp; char * line_ptr; int * keylines = NULL; int cif_loop_id; cif_file * this_cif = NULL; 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 /* * gchar * get_cif_word (gchar * mot) * * Usage: get string from CIF file, EOL can be ugly * * gchar * 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; } /* * float get_atom_coord (gchar * line, int mid) * * Usage: read atom coordinates from CIF file * * gchar * line : the string that contains the data * int 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; /* * G_MODULE_EXPORT void select_cif_species (GtkButton * but, gpointer data) * * Usage: Select a chemical species to correct error in CIF file * * GtkButton * but : the GtkButton sending the signal * gpointer data : the associated data pointer */ G_MODULE_EXPORT void select_cif_species (GtkButton * but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = get_atom_id_from_periodic_table (cif_search); gchar * stra, * strb; if (! j) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); this_reader -> lmislab[i] = 0; this_reader -> stolab ++; } else { stra = g_strdup_printf ("%s", periodic_table_info[j].name); strb = g_strdup_printf (APPLY); this_reader -> lmislab[i] = j; this_reader -> stolab --; } set_image_from_icon_name (img_cif[i], strb); gtk_button_set_label (but, stra); gtk_widget_set_size_request (GTK_WIDGET(but), 150, -1); g_free (stra); g_free (strb); } /* * gboolean get_missing_z_from_user () * * Usage: get missing atomic number in CIF file from the user */ gboolean get_missing_z_from_user () { this_reader -> lmislab = allocint (this_reader -> stolab); cif_search = g_malloc0 (sizeof*cif_search); 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 -> tolab*sizeof*img_cif); GtkWidget * but; int j; for (j=0; j tolab; j++) { 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", j+1, this_reader -> label[j]); 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[j] = stock_image (DELETEB); but = create_button ("Not picked yet !", IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_cif_species), GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_cif[j], 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); g_free (cif_search); destroy_this_widget (info); return (! this_reader -> stolab) ? TRUE : FALSE; } #ifndef OPENMP /* * void file_get_to_line (int line_id) * * Usage: reach line in CIF file * * int line_id : Line to reach */ void file_get_to_line (int line_id) { int i; tail = head; for (i=0; i next; } #endif /* * int cif_get_value (gchar * kroot, gchar * keyw, int linec, int lstart, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean in_loop) * * Usage: read pattern in CIF file * * gchar * kroot : String root (first part) * gchar * keyw : String root (first part) * int linec : Total number of lines * int lstart : Line to reach * gchar ** cif_word : pointer to store the data read * gboolean rec_val : Record position on the line * gboolean all_ligne : Browse all line (1/0) * gboolean 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); 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); 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; } /* * int cif_file_get_data_in_loop (int linec, int lid) * * Usage: * * int linec : Total number of lines * int 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; } /* * int cif_file_get_number_of_atoms (int linec, int lid, int nelem) * * Usage: get the number of atom(s) in a CIF file * * int linec : Total number of lines * int lid : Line to reach * int 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; } /* * void check_for_to_lab (int ato, gchar * stlab) * * Usage: check atom label * * int ato : Atom id * gchar * stlab : Label read in the CIF file */ void check_for_to_lab (int ato, gchar * stlab) { int i, j; j = -1; for (i=0; i stolab; i++) { if (g_strcmp0(this_reader -> label[i], stlab) == 0) { j = i; break; } } if (this_reader -> mislab) { this_reader -> mislab = g_realloc (this_reader -> mislab, (this_reader -> tolab+1)*sizeof*this_reader -> mislab); this_reader -> smislab = g_realloc (this_reader -> smislab, (this_reader -> tolab+1)*sizeof*this_reader -> smislab); } else { this_reader -> mislab = g_malloc0 (1*sizeof*this_reader -> mislab); this_reader -> smislab = g_malloc0 (1*sizeof*this_reader -> smislab); } this_reader -> mislab[this_reader -> tolab] = ato; this_reader -> smislab[this_reader -> tolab] = (j < 0) ? this_reader -> stolab : j; this_reader -> tolab ++; if (j < 0) { if (this_reader -> label) { this_reader -> label = g_realloc (this_reader -> label, (this_reader -> stolab+1)*sizeof*this_reader -> label); } else { this_reader -> label = g_malloc0 (1*sizeof*this_reader -> label); } this_reader -> label[this_reader -> stolab] = g_strdup_printf ("%s", stlab); this_reader -> stolab ++; } } /* * gboolean cif_file_get_atoms_data (int lin, int cid[8]) * * Usage: get atoms data from the CIF file * * int lin : Line to reach * int cid[8] : Positions on the line for the data to read */ gboolean cif_file_get_atoms_data (int lin, int cid[8]) { int i, j, k, l; 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] != -1) ? 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] != -1) ? 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 = get_missing_z_from_user (); if (done) { for (i=0; i tolab; i++) { j = this_reader -> mislab[i]; k = this_reader -> smislab[i]; l = this_reader -> lmislab[k]; check_for_species ((double)l, j); } } } return done; } /* * int get_loop_line_id (int linec, int lid) * * Usage: reach a line in the CIF file * * int linec : Total number of lines * int 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; } /* * int get_loop_line_for_key (gchar * key_a, gchar * key_b, int linec) * * Usage: search a string * * gchar * key_a : String root (first part) * gchar * key_b : String end (second part) * int 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; } /* * gboolean cif_get_atomic_coordinates (int linec) * * Usage: read the atomic coordinates from the CIF file * * int 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) ..."); 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); 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); g_free (str); } } if (j < 3) { add_reader_info ("Atomic coordinates: no complete cartesian coordinates !"); add_reader_info ("Atomic coordinates: no complete fractional coordinates !"); 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 !"); 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; } /* * int get_space_group_from_hm (gchar * hmk) * * Usage: * * gchar * 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; } /* * gchar * get_string_from_origin (space_group * spg) * * Usage: get the space group origin from its name * * space_group * 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; } /* * int get_setting_from_hm (gchar * hmk, int end) * * Usage: Getting the space group parameters using the HM Key * * gchar * hmk : the HM key * int 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); 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); g_free (str); return j; } } g_free (str); } } return -1; } else { return -1; } } /* * int group_info_from_hm_key (int spg, gchar * key_hm) * * Usage: get the space group information using the HM key from the CIF file * * int spg : Space group * gchar * 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); 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); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; return (spg) ? (j) ? j : spg : j; } /* * gboolean cif_get_cell_data (int linec) * * Usage: get the cell data from the CIF file * * int 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); 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); 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; } /* * gboolean cif_get_space_group (int linec) * * Usage: get the space group from the CIF file * * int linec : Total number of lines */ gboolean 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 !"); 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 !"); #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); 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; gboolean res = TRUE; 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 = FALSE; 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 !"); this_reader -> setting = j; break; } } } else if (i < 36) { if (spg < 16 || spg > 74) { res = FALSE; 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 !"); } this_reader -> setting = j; l = 1; break; } } if (! l) add_reader_info ("Space group: ambiguous space group setting !"); } else if (i < 38) { if (spg < 75 || (spg > 142 && spg < 195)) { res = FALSE; break; } j = i - 36; if (j < this_reader -> setting) add_reader_info ("Space group: ambiguous space group setting !"); this_reader -> setting = j; } else { if (spg < 143 || spg > 165) { res = FALSE; break; } j = i - 38; if (j < this_reader -> setting) add_reader_info ("Space group: ambiguous space group setting !"); 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); g_free (str); this_reader -> setting = ! this_reader -> setting; } } } this_reader -> lattice.sp_group -> sid = this_reader -> setting; get_origin (this_reader -> lattice.sp_group); return res; } /* * int open_cif_file (int linec) * * Usage: open CIF file * * int linec : Total number of lines */ int open_cif_file (int linec) { int res; int i, j; if (cif_get_cell_data (linec)) { if (cif_get_space_group (linec)) { #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 { // No space group found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve space group information !"); #endif } } 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; } else { // No coordinates found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve atomic coordinates !"); #endif res = 2; } return res; } Atomes-GNU-1.1.12/src/project/readers/read_coord.c000066400000000000000000000224671450232132300216100ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_coord.c' * * Contains: * - The initialization subroutines to import atomic coordinates * * List of subroutines: int open_coord_file (gchar * filename, int fti); void add_reader_info (gchar * info); 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 (struct project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern int build_crystal (gboolean visible, struct project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern const gchar * dfi[2]; FILE * coordf; coord_file * this_reader; gchar ** coord_line = NULL; gchar * this_line = NULL; char * this_word; struct line_node * head = NULL; struct line_node * tail = NULL; /* * void add_reader_info (gchar * info) * * Usage: append information message to the reader information * * gchar * info : the reader information message */ void add_reader_info (gchar * info) { this_reader -> info = (this_reader -> info) ? g_strdup_printf ("%s\n%s", this_reader -> info, info) : g_strdup_printf ("%s", info); } /* * void reader_info (gchar * type, gchar * sinf, int val) * * Usage: display reader information * * gchar * type : File type * gchar * sinf : Information message * int val : Value to present */ void reader_info (gchar * type, gchar * sinf, int val) { g_print ("Reading coordinates [%s]: %s = %d\n", type, sinf, val); } /* * void format_error (int stp, int ato, gchar * mot, int line) * * Usage: Message to display an error message * * int stp : the MD step id * int ato : Atom id * gchar * mot : Message * int 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+1, 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+1, ato+1, mot, line); } add_reader_info (str); g_free (str); } /* * void check_for_species (double v, int ato) * * Usage: Fill the species for each atom and the associated data * * double v : Z * int ato : Total number of atoms */ 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 ++; } } /* * int open_coord_file (gchar * filename, int fti) * * Usage: open atomic coordinates file * * gchar * filename : the file name * int 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 !"); return 1; } int fsize = status.st_size; #endif coordf = fopen (filename, dfi[0]); if (! coordf) { add_reader_info ("Error - cannot open coordinates file !"); return 1; } int i, j, k; #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) { 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) { this_reader -> cartesian = FALSE; res = open_cif_file (i); } else if (fti == 10) { 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 (! build_crystal (FALSE, active_project, TRUE, FALSE, & this_reader -> lattice, MainWindow)) { add_reader_info ("Error trying to build crystal using the CIF file parameters !"); res = 3; } } } 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 = 0; reader_info (file_ext[fti], "Number of species", active_project -> nspec); for (i=0; i nspec; i++) { j = (int)this_reader -> z[i]; 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 -> nsps[i] = this_reader -> nsps[i]; g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", file_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); active_chem -> chem_prop[CHEM_Z][i] = this_reader -> z[i]; active_chem -> chem_prop[CHEM_M][i] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][i] = set_radius_ (& j, & k); active_chem -> chem_prop[CHEM_N][i] = set_neutron_ (& j); } } else { reader_info (file_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", file_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } } return res; } Atomes-GNU-1.1.12/src/project/readers/read_hist.c000066400000000000000000000320301450232132300214340ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_hist.c' * * Contains: * - The subroutines to read DL-POLY history file * * List of subroutines: 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); /* * int hist_get_data (int linec) * * Usage: read data from the DL-POLY history file * * int 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 struct 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 !"); 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 !"); 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; } /* * int hist_get_content () * * Usage: 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 struct 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); 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; } /* * int open_hist_file (int linec) * * Usage: open DL-POLY history file * * int 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.12/src/project/readers/read_isaacs.c000066400000000000000000001075201450232132300217370ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_isaacs.c' * * Contains: * - The reader/writer subroutines for the ISAACS XML file * * List of subroutines: 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"}; /* * size_t strfind (char * ida) * * Usage: * * char * 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; } /* * int XmlwriterFilename (const char *uri) * * Usage: write ISAACS XML file * * const char *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; } /* * int write_xml (const char * filetosave) * * Usage: write XML file * * const char * 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; } /* * gboolean file_exists(const char * filename) * * Usage: file exists ? * * const char * filename : File name */ gboolean file_exists(const char * filename) { FILE * file; if ((file = fopen(filename, "r"))) { fclose(file); return TRUE; } return FALSE; } /* * xmlNodePtr findnode (xmlNodePtr startnode, char * nname) * * Usage: find XML node * * xmlNodePtr startnode : Starting node * char * 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; } /* * int get_spec_from_data (xmlChar * data) * * Usage: get atomic species from data * * xmlChar * 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; } /* * int setprop (xmlNodePtr pnode) * * Usage: read chemical properties from XML node * * xmlNodePtr 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; } /* * int testopening (char * tdata, char * tfichier) * * Usage: test atomic coordinates file opening * * char * tdata : Type of coordinates * char * 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; } } /* * int setchemistry (xmlNodePtr xsnode) * * Usage: read chemistry data from node * * xmlNodePtr 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; } /* * int setbox (xmlNodePtr boxnode) * * Usage: read box properties from node * * xmlNodePtr 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; } /* * int setpbc (xmlNodePtr pbcnode) * * Usage: read the PBC information from node * * xmlNodePtr 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; } /* * int setcutoffs (xmlNodePtr cutnode) * * Usage: read bond cutoffs from node * * xmlNodePtr 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; } /* * int settime(xmlNodePtr timenode) * * Usage: read MD information from node * * xmlNodePtr 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; } /* * int check_xml (const char * filetocheck) * * Usage: check the opening of ISAACS XML file * * const char * 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; } /* * gchar * open_xml (const char * filetoread) * * Usage: Open ISAACS XML file * * const char * 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.12/src/project/readers/read_isaacs.h000066400000000000000000000026201450232132300217370ustar00rootroot00000000000000/* 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 */ /* * This header file: 'read_isaacs.h' * * Contains: */ #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.12/src/project/readers/read_npt.c000066400000000000000000000167151450232132300213020ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_npt.c' * * Contains: * - The subroutines to read NPT data * * List of subroutines: 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 extern void file_get_to_line (FILE * this_file, int line_id); FILE * cellp; typedef struct { cell_info lattice; gchar * info; } cell_file; cell_file * this_cell; /* * void add_cell_info (gchar * info) * * Usage: append information message to the cell information * * gchar * 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); } /* * int cell_get_lattice (int format) * * Usage: get the lattice parameters format from the file * * int 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; } /* * int open_cell_file (int format, gchar * filename) * * Usage: open the file that contains the cell parameters * * int format : File format * gchar * 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.12/src/project/readers/read_pdb.c000066400000000000000000000133041450232132300212350ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_pdb.c' * * Contains: * - The subroutines to read PDB files * * List of subroutines: 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 /* * double get_z_from_pdb_name (char * name) * * Usage: get Z from the PDB atom string * * char * 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); } /* * int pdb_get_atoms_data (int linec) * * Usage: get the atomic data from the PDB file * * int linec : Total number of lines */ int pdb_get_atoms_data (int linec) { int h, i, j, k, l; struct pdb_atom { int id; int sp; double nz; double x, y, z; struct pdb_atom * prev; struct pdb_atom * next; }; #ifdef OPENMP int res; int numth = omp_get_max_threads (); struct pdb_atom ** first_at = g_malloc0(numth*sizeof*first_at); struct 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)); 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; } /* * int open_pdb_file (int linec) * * Usage: open PDB file * * int 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.12/src/project/readers/read_trj.c000066400000000000000000000151751450232132300212770ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_trj.c' * * Contains: * - The subroutines to read CPMD atomic coordinates * * List of subroutines: 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" /* * int trj_get_atom_coordinates () * * Usage: 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)); return 2; } } } #else struct 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; } /* * int open_trj_file (int linec) * * Usage: open CPMD file * * int 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.12/src/project/readers/read_vas.c000066400000000000000000000147121450232132300212650ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_vas.c' * * Contains: * - The subroutines to read VASP atomic coordinates * * List of subroutines: 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" /* * int vas_get_atom_coordinates (int sli) * * Usage: get the atomic coordinates from the VASP file * * int 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)); return 2; } } } #else struct 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; } /* * int open_vas_file (int linec) * * Usage: open VASP file * * int 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.12/src/project/readers/read_xyz.c000066400000000000000000000207521450232132300213270ustar00rootroot00000000000000/* 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 */ /* * This file: 'read_xyz.c' * * Contains: * - - The subroutines to read XYZ atomic coordinates * * List of subroutines: 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" /* * int xyz_get_atom_coordinates () * * Usage: 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 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,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); if (v) { if (! i) { #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,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); if (v) { if (! i) 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 struct 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; } /* * int open_xyz_file (int linec) * * Usage: open XYZ file * * int 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 !"); add_reader_info ("Wrong file format - first line is corrupted !"); 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 !"); add_reader_info ("Wrong file format - the first line is corrupted !"); 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.12/src/project/readers/readers.h000066400000000000000000000025151450232132300211310ustar00rootroot00000000000000/* 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 */ /* * This header file: 'readers.h' * * Contains: */ #ifndef READERS_H_ #define READERS_H_ #include "read_isaacs.h" extern double get_z_from_periodic_table (gchar * lab); extern void allocatoms (struct 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 struct line_node * head; extern struct line_node * tail; extern void add_reader_info (gchar * info); 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.12/src/project/save_bond.c000066400000000000000000000073031450232132300200120ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_bond.c' * * Contains: * - The subroutines to write bonding information in the atomes project file format * * List of subroutines: int save_bonding (FILE * fp, struct project * this_proj); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /* * int save_bonding (FILE * fp, struct project * this_proj) * * Usage: save bonding information to file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int save_bonding (FILE * fp, struct 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.12/src/project/save_curve.c000066400000000000000000000240601450232132300202130ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_curve.c' * * Contains: * - The subroutines to write curves information in the atomes project file format * * List of subroutines: int save_project_curve (FILE * fp, int wid, struct project * this_proj, int rid, int cid); gboolean write_data_layout (FILE * fp, DataLayout * layout); */ #include "global.h" #include "project.h" /* * gboolean write_data_layout (FILE * fp, DataLayout * layout) * * Usage: save curve data layout to file * * FILE * fp : the file pointer * DataLayout * 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; } /* * int save_project_curve (FILE * fp, int wid, struct project * this_proj, int rid, int cid) * * Usage: save project curve to file * * FILE * fp : the file pointer * int wid : the total number of project file in the workspace * struct project * this_proj : the target project * int rid : the calculation to save * int cid : the curve id to save */ int save_project_curve (FILE * fp, int wid, struct 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) { struct cextra * 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.12/src/project/save_field.c000066400000000000000000000427411450232132300201600ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_field.c' * * Contains: * - The subroutines to write force field information in the atomes project file format * * List of subroutines: 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, struct project * this_proj); int save_lmp_field_data (FILE * fp, struct project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /* typedef struct { 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; int extern_fields; struct 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]; } field; */ /* * int save_field_atom (FILE * fp) * * Usage: save field atom data to file * * FILE * 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; } /* * int save_field_shell (FILE * fp) * * Usage: save field core shell data to file * * FILE * 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; } /* * int save_field_constraint (FILE * fp) * * Usage: save field constraint data to file * * FILE * 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; } /* * int save_field_pmf (FILE * fp) * * Usage: save field mean force potential data to file * * FILE * 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; } /* * int save_field_rigid (FILE * fp) * * Usage: save field rigid constraints data to file * * FILE * 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; } /* * int save_field_tethered (FILE * fp, int fid) * * Usage: save field tethered data to file * * FILE * fp : the file pointer * int 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; } /* * int save_field_prop (FILE * fp, int fid, int pid) * * Usage: save field property data to file * * FILE * fp : the file pointer * int fid : the field id * int 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; } /* * int save_field_struct (FILE * fp, int fid) * * Usage: save field structural properties to file * * FILE * fp : the file pointer * int 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; } /* * int save_field_molecule (FILE * fp, int fid) * * Usage: save field molecule data to file * * FILE * fp : the file pointer * int 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; } /* * int save_field_body (FILE * fp, int fid) * * Usage: save field nth body data to file * * FILE * fp : the file pointer * int 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; } /* * int save_field_external (FILE * fp, int fid) * * Usage: save field external data to file * * FILE * fp : the file pointer * int 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; } /* * int save_dlp_field_data (FILE * fp, struct project * this_proj) * * Usage: save force field data to file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int save_dlp_field_data (FILE * fp, struct 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; } /* * int save_lmp_field_data (FILE * fp, struct project * this_proj) * * Usage: save LAMMPS force field data to file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int save_lmp_field_data (FILE * fp, struct 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.12/src/project/save_mol.c000066400000000000000000000111271450232132300176560ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_mol.c' * * Contains: * - The subroutines to write molecules information in the atomes project file format * * List of subroutines: int save_atom_m (FILE * fp, struct project * this_proj, int s, int a); int save_this_mol (FILE * fp, struct project * this_proj, struct molecule * tmp); int save_mol (FILE * fp, struct project * this_proj); */ #include "global.h" #include "project.h" /*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 struct 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) struct molecule * next; struct molecule * prev; };*/ /* * int save_atom_m (FILE * fp, struct project * this_proj, int s, int a) * * Usage: save atom data to file * * FILE * fp : the file pointer * struct project * this_proj : the target project * int s : the MD step * int a : the atom number */ int save_atom_m (FILE * fp, struct 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; } /* * int save_this_mol (FILE * fp, struct project * this_proj, struct molecule * tmp) * * Usage: save this molecule data to file * * FILE * fp : the file pointer * struct project * this_proj : the target project * struct molecule * tmp : the molecule that contains the data */ int save_this_mol (FILE * fp, struct project * this_proj, struct 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; } /* * int save_mol (FILE * fp, struct project * this_proj) * * Usage: save molecule information to file * * FILE * fp : the file pointer * struct project * this_proj : the target project */ int save_mol (FILE * fp, struct 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.12/src/project/save_opengl.c000066400000000000000000000461401450232132300203560ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_opengl.c' * * Contains: * - The subroutines to write OpenGL information in the atomes project file format * * List of subroutines: int save_atom_a (FILE * fp, struct project * this_proj, int s, int a); int save_atom_b (FILE * fp, struct 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, struct project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glwin.h" /* * int save_atom_a (FILE * fp, struct project * this_proj, int s, int a) * * Usage: save atom data to file (a) * * FILE * fp : the file pointer * struct project * this_proj : the target project * int s : the MD step * int a : the atom number */ int save_atom_a (FILE * fp, struct 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; } /* * int save_atom_b (FILE * fp, struct project * this_proj, int s, int a) * * Usage: save atom data to file (b) * * FILE * fp : the file pointer * struct project * this_proj : the target project * int s : the MD step * int a : the atom number */ int save_atom_b (FILE * fp, struct 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; } /* * int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) * * Usage: saving rings and chains statistics data to file * * FILE * fp : the file pointer * int type : Rings (0) or chains (1) * int size : the number of data to save * int steps : the MD step * int data_max : the maximum size of * int ** num_data : Id of the objects to save * gboolean *** show : Display information pointer * int **** 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) { struct selatom * 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.12/src/project/save_p.c000066400000000000000000000222361450232132300173310ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_p.c' * * Contains: * - Subroutines to start saving atomes project file * * List of subroutines: int save_this_string (FILE * fp, gchar * string); int save_project (FILE * fp, struct project * this_proj, int npi); */ #include "global.h" #include "project.h" /* * int save_this_string (FILE * fp, gchar * string) * * Usage: save string to file * * FILE * fp : the file pointer * gchar * 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; } /* * int save_project (FILE * fp, struct project * this_proj, int npi) * * Usage: save project to file * * FILE * fp : the file pointer * struct project * this_proj : the target project * int npi : the total number of projects in the workspace */ int save_project (FILE * fp, struct project * this_proj, int npi) { int i, j, k; gchar * ver; // First 2 lines for compatibility issues i = 2; j = 5; 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) { 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_RW; // 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.12/src/project/save_qm.c000066400000000000000000000214061450232132300175050ustar00rootroot00000000000000/* 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 */ /* * This file: 'save_qm.c' * * Contains: * - Subroutines to save ab-initio calculation (CPMD/CP2K) to atomes project file * * List of subroutines: int save_thermo (FILE * fp, struct thermostat * thermo); int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord); int save_cpmd_data (FILE * fp, int cid, struct project * this_proj); int save_cp2k_data (FILE * fp, int cid, struct project * this_proj); */ #include "global.h" #include "project.h" /* 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; struct thermostat * next; struct thermostat * prev; }; struct dummy_atom { // 0 = type1, 1 = type2, ... int id; int type; gboolean show; double xyz[3]; int coord[4]; int natoms; int * list; struct dummy_atom * next; struct dummy_atom * prev; }; typedef struct { int calc_type; int restart[10]; int thermostats; struct thermostat * ions_thermostat; struct thermostat * elec_thermostat; int fixat; int * fixlist; int ** fixcoord; int dummies; struct dummy_atom * dummy; double default_opts[17]; double calc_opts[24]; int ** pp; gchar * info; } cpmd; typedef struct { int input_type; double opts[42]; double extra_opts[3][4]; int thermostats; struct thermostat * ions_thermostat; int fixat[2]; int * fixlist[2]; int ** fixcoord[2]; gchar * files[5]; gchar *** spec_files; int ** spec_data; gchar * info; } cp2k; */ /* * int save_thermo (FILE * fp, struct thermostat * thermo) * * Usage: save thermostat to file * * FILE * fp : the file pointer * struct thermostat * thermo : the thermostat to save */ int save_thermo (FILE * fp, struct 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; } /* * int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) * * Usage: save fixed atom(s) to file * * FILE * fp : the file pointer * int fixatoms : the number of fixed atom(s) * int * fixlist : the list of fixed atom(s) * int ** 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) { struct 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) { struct 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); } /* * int save_cp2k_data (FILE * fp, int cid, struct project * this_proj) * * Usage: save CP2K data to file * * FILE * fp : the file pointer * int cid : the CP2K id (0 = ab-initio, 1 = QM-MM) * struct project * this_proj : the target project */ int save_cp2k_data (FILE * fp, int cid, struct 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) { struct 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.12/src/project/update_p.c000066400000000000000000000135311450232132300176530ustar00rootroot00000000000000/* 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 */ /* * This file: 'update_p.c' * * Contains: * - * * List of subroutines: 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; /* * void prep_calc_actions () * * Usage: */ 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]); } } } } /* * int update_project () * * Usage: 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]); prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps); } 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; } /* * void active_project_changed (int id) * * Usage: change the active project * * int 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; } /* * void opengl_project_changed (int id) * * Usage: change the OpenGL project * * int 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.12/src/workspace/000077500000000000000000000000001450232132300162335ustar00rootroot00000000000000Atomes-GNU-1.1.12/src/workspace/modelinfo.c000066400000000000000000000326011450232132300203550ustar00rootroot00000000000000/* 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 */ /* * This file: 'modelinfo.c' * * Contains: * - Miscellaneous printing subroutines to display information * * List of subroutines: void print_spg_name (gchar * str , GtkTextBuffer * buffer); void print_spg_setting (gchar * init, GtkTextBuffer * buffer); void model_info (struct project * this_proj, GtkTextBuffer * buffer); void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf); void opengl_info (struct 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); /* * void print_spg_name (gchar * str , GtkTextBuffer * buffer) * * Usage: print space group name in a GtkTextBuffer * * gchar * str : the space group string * GtkTextBuffer * 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); } /* * void print_spg_setting (gchar * init, GtkTextBuffer * buffer) * * Usage: print space group name in a GtkTextBuffer * * gchar * init : the space group setting * GtkTextBuffer * 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); } /* * void model_info (struct project * this_proj, GtkTextBuffer * buffer) * * Usage: display model information in GtkTexBuffer * * struct project * this_proj : the target project * GtkTextBuffer * buffer : the GtkTextBuffer */ void model_info (struct 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); 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); } } } /* * void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) * * Usage: print OpenGL stuff in a GtkTextBuffer * * gchar * text : Message * GLenum name : OpenGL id to retreive * GtkTextBuffer * 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); } /* * void opengl_info (struct project * this_proj, GtkTextBuffer * buf) * * Usage: display OpenGL information in a GtkTextBuffer * * struct project * this_proj : the target project * GtkTextBuffer * buf : the GtkTextBuffer */ void opengl_info (struct 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 */ /* * This file: 'workinfo.c' * * Contains: * - Subroutines to display project related information in GtkTextBuffer * * List of subroutines: void workinfo (struct project * this_proj, int i); */ #include "global.h" #include "interface.h" #include "project.h" extern void update_rdf_view (struct project * this_proj, int rdf); extern void update_sq_view (struct project * this_proj, int sqk); extern void update_angle_view (struct project * this_proj); extern void update_rings_view (struct project * this_proj, int c); extern void update_chains_view (struct project * this_proj); extern void update_spherical_view (struct project * this_proj); extern void update_msd_view (struct project * this_proj); extern void model_info (struct project * this_proj, GtkTextBuffer * buf); extern void opengl_info (struct project * this_proj, GtkTextBuffer * buf); /* * void workinfo (struct project * this_proj, int i) * * Usage: display information about a workspace menu item for a project * * struct project * this_proj : the target project * int i : the properties to display from the menu */ void workinfo (struct project * this_proj, int i) { gchar * str; int j; struct 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.12/src/workspace/workspace.c000066400000000000000000000542031450232132300204010ustar00rootroot00000000000000/* 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 */ /* * This file: 'workspace.c' * * Contains: * - Implementation of the workspace tree view - Associated callbacks * * List of subroutines: 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_IMPORT 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 (struct 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 "}; /* * void add_project (GtkTreeStore * store, int i) * * Usage: add project to the GtkTreeStore of the workspace * * GtkTreeStore * store : the GtkTreeStore * int 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 ++; } /* * static void fill_workspace (GtkTreeStore * store) * * Usage: fill the workspace tree store * * GtkTreeStore * 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); } /* * int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) * * Usage: find the calculation using the GtkTreePath in the GtkTreeView * * GtkTreeView * treeview : the GtkTreeView * GtkTreePath * 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; } /* * int find_proj_by_path (GtkTreePath * path) * * Usage: find the project id using the GtkTreePath * * GtkTreePath * 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); } } } #define MOUSE_ACTIONS 2 extern char * window_mouse[MOUSE_ACTIONS]; /* * void correct_this_window_title (GtkWidget * win, gchar * str) * * Usage: use new title for GtkWindow, providing it exists * * GtkWidget * win : the GtkWindow * gchar * 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); } /* * G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) * * Usage: change project name * * GtkWidget * wid : the GtkWidgent sending the signal * gpointer 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); struct 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))); } } } /* * void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) * * Usage: popup the workspace contextual menu in workspace tree view * * GtkWidget * tree : the GtkTreeView * gpointer event : the event * double x : x position * double 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 /* * G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) * * Usage: GTK4 popover workspace menu at current location * * GtkGesture * gesture : the GtkGesture sending the signal * int n_press : number of times it was pressed * double x : x position * double y : y position * gpointer 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 /* * G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) * * Usage: GTK3 button event on workspace to display contextual menu * * GtkWidget * widget : the GtkWidget sending the signal * GdkEventButton * event : the associated GtkButton * gpointer 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); } /* * GtkWidget * create_workspace_tree () * * Usage: 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; } /* * void create_workspace () * * Usage: 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]); } /* * void add_project_to_workspace () * * Usage: 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); } } /* * void remove_project_from_workspace (int id) * * Usage: remove project from workspace * * int 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.12/src/workspace/workspace.h000066400000000000000000000020651450232132300204050ustar00rootroot00000000000000/* 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 */ /* * This header file: 'workspace.h' * * Contains: */ #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.12/stamp-h1000066400000000000000000000000271450232132300150220ustar00rootroot00000000000000timestamp for config.h