Q-Chem form input.xsl

From UGP-Wiki

Jump to: navigation, search

[edit] Useful Links

[edit] Example File

  • This file processes user-input for the program Q-Chem and creates a valid program input file
  • For an example of the user-input file, see the Useful Links section
<xsl:stylesheet version = '1.0' 
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<!-- **********************************************************************
* the following line is needed or else we get white space in the output
* that we do not ask for or want 
********************************************************************** -->

<xsl:strip-space elements="*" />
<xsl:output method="text" omit-xml-declaration="yes"/>

<!-- **********************************************************************
* root template
*************************************************************************** -->

<xsl:template match="/">

   <!-- *******************************************************************
   * Title Section
   ************************************************************************ -->

   <xsl:apply-templates select="//element[@name='title']"/>

   <!-- *******************************************************************
   * $molecule  Section
   ************************************************************************ -->

   <xsl:text>
$molecule
</xsl:text>

   <xsl:choose>

      <xsl:when test="//element[@name='coordinates']">
         <xsl:apply-templates select="//element[@name='charge']"/>
         <xsl:apply-templates select="//element[@name='multiplicity']"/>
         <xsl:apply-templates select="//element[@name='coordinates']"/>
      </xsl:when>

      <xsl:otherwise>
         <xsl:text>READ </xsl:text>         
         <xsl:value-of select="//element[@name='readFile']/value"/>
      </xsl:otherwise>

   </xsl:choose>

   <xsl:text>
$end
</xsl:text>

   <!-- *******************************************************************
   * $rem Section
   ************************************************************************ -->

   <xsl:text>
$rem
</xsl:text>
	
	<!--***********************************
	*	separate formatting for primary and second basis set parameters
	*********************************-->
	<xsl:call-template name="basis_set"/>
	<xsl:if test="//element[@name='basis_set_2']/value!='default'">
		<xsl:call-template name="basis_set_2"/>
	</xsl:if>


   <xsl:for-each select="/app/element">

      <xsl:variable name="myName">
         <xsl:value-of select="@name"/>
      </xsl:variable>

      <xsl:choose>

         <!-- **************************************************************
         * Dont process elements that belong in other (non $rem) sections, they will be processed later
         ************************************************************** -->

         <xsl:when test="@name='title'">
         </xsl:when>

         <xsl:when test="@name='charge'">
         </xsl:when>

         <xsl:when test="@name='multiplicity'">
         </xsl:when>

         <xsl:when test="@name='coordinates'">
         </xsl:when>

         <xsl:when test="@name='constraints'">
         </xsl:when>

         <xsl:when test="@name='ud_basis'">
         </xsl:when>

         <xsl:when test="@name='ud_exchange'">
         </xsl:when>

         <xsl:when test="@name='ud_ecp'">
         </xsl:when>

         <xsl:when test="@name='occupied'">
         </xsl:when>

         <xsl:when test="@name='readFile'">
         </xsl:when>

			<xsl:when test="@name='basis_set'">
			</xsl:when>

			<xsl:when test="@name='basis_diffusion'">
			</xsl:when>

			<xsl:when test="@name='basis_polarization'">
			</xsl:when>

			<xsl:when test="@name='basis_set_2'">
			</xsl:when>

			<xsl:when test="@name='basis_diffusion_2'">
			</xsl:when>

			<xsl:when test="@name='basis_polarization_2'">
			</xsl:when>

			<xsl:when test="@name='ud_constraint'">
			</xsl:when>

			<xsl:when test="@name='ud_fixed'">
			</xsl:when>

			<xsl:when test="@name='ud_dummy'">
			</xsl:when>

			<xsl:when test="@name='ud_connect'">
			</xsl:when>

			<xsl:when test="@name='ud_isotopes'">
			</xsl:when>


         <!-- **************************************************************
         * Dont process elements that are only formatting elements
         ************************************************************** -->

			<xsl:when test="@name='show_nmr'">
			</xsl:when>

			<xsl:when test="@name='qchem_keyword'">
			</xsl:when>

			<xsl:when test="@name='show_rc'">
			</xsl:when>
			
			<xsl:when test="@name='show_rcf'">
			</xsl:when>
			
			<xsl:when test="@name='show_wamp'">
			</xsl:when>
			
         <xsl:when test="@name='show_basis2'">
			</xsl:when>

         <xsl:when test="@name='moleculeSpecification'">
         </xsl:when>

         <xsl:when test="@name='show_print'">
         </xsl:when>

         <xsl:when test="@name='show_dft'">
         </xsl:when>

         <xsl:when test="@name='show_scf'">
         </xsl:when>

         <xsl:when test="@name='show_cm'">
         </xsl:when>

         <xsl:when test="@name='show_lm'">
         </xsl:when>

         <xsl:when test="@name='show_geom'">
         </xsl:when>

         <xsl:when test="@name='show_vib'">
         </xsl:when>

         <xsl:when test="@name='show_sym'">
         </xsl:when>

         <xsl:when test="@name='show_es'">
         </xsl:when>

         <xsl:when test="@name='constraint_toggle'">
         </xsl:when>

         <!-- **************************************************************
         * Dont process numberical elements that have the default value, omitting them creates a cleaner input file.
         ************************************************************** -->


         <xsl:when test="@name='rpath_max_cycles'">
            <xsl:if test="child::value!=20">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='rpath_direction'">
            <xsl:if test="child::value!=1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='d_scf_conv_1'">
            <xsl:if test="child::value!=4">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='d_scf_conv_2'">
            <xsl:if test="child::value!=4">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='d_cpscf_pertnum'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='multipole_order'">
            <xsl:if test="child::value!=4">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='chemsol'">
            <xsl:if test="child::value=1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='d_scf_max_1'">
            <xsl:if test="child::value!=100">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='d_scf_max_2'">
            <xsl:if test="child::value!=30">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='basis_lin_dep_thresh'">
            <xsl:if test="child::value!=6">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='scf_convergence'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='scf_guess_mix'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='thresh'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='max_diis_cycles'">
            <xsl:if test="child::value!=50">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='diis_subspace_size'">
            <xsl:if test="child::value!=15">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='incfock'">
            <xsl:if test="child::value!=1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='max_scf_cycles'">
            <xsl:if test="child::value!=50">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='thresh_diis_switch'">
            <xsl:if test="child::value!=2">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='varthresh'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='xc_grid'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='incdft_dendiff_thresh'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='incdft_dendiff_varthresh'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='incdft_griddiff_thresh'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='incdft_griddiff_varthresh'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cfmm_order'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='epao_iterate'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='mem_total'">
            <xsl:if test="child::value!=2000">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='epao_weights'">
            <xsl:if test="child::value!=115">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='integrals_buffer'">
            <xsl:if test="child::value!=15">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='mem_static'">
            <xsl:if test="child::value!=64">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='ao2mo_disk'">
            <xsl:if test="child::value!=2000">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='n_frozen_core'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='n_frozen_virtual'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cc_nhighspin'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cc_nlowspin'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cc_state_deriv'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cc_refsym'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cis_n_roots'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cis_convergence'">
            <xsl:if test="child::value!=6">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cis_state_deriv'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='sym_tol'">
            <xsl:if test="child::value!=5">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cc_print'">
            <xsl:if test="child::value!=1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='diis_print'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='print_dist_matrix'">
            <xsl:if test="child::value!=15">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='print_orbitals'">
            <xsl:if test="child::value!=-1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_print'">
            <xsl:if test="child::value!=3">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='rpath_print'">
            <xsl:if test="child::value!=2">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='vibman_print'">
            <xsl:if test="child::value!=1">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_mode'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_linear_angle'">
            <xsl:if test="child::value!=165">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_max_cycles'">
            <xsl:if test="child::value!=50">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_dmax'">
            <xsl:if test="child::value!=300">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_max_diis'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_tol_displacement'">
            <xsl:if test="child::value!=1200">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_tol_energy'">
            <xsl:if test="child::value!=100">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='geom_opt_tol_gradient'">
            <xsl:if test="child::value!=300">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='fdiff_stepsize'">
            <xsl:if test="child::value!=100">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <xsl:when test="@name='cpscf_nseg'">
            <xsl:if test="child::value!=0">
               <xsl:call-template name="rem"/>
            </xsl:if>
         </xsl:when>

         <!-- **************************************************************
         * Dont process pulldownmenus whose value is default, again to keep the input file clean
         ************************************************************** -->

         <xsl:when test="child::value='default'">
         </xsl:when>

         <!-- **************************************************************
         * special cases
         ************************************************************** -->

         <xsl:when test="@name='purecart_h'">
         </xsl:when>

         <xsl:when test="@name='purecart_g'">
         </xsl:when>

         <xsl:when test="@name='purecart_f'">
         </xsl:when>

         <xsl:when test="@name='purecart_d'">
         </xsl:when>

         <!-- **************************************************************
         * show all other elements as is
         ************************************************************** -->

         <xsl:otherwise>
             <xsl:call-template name="rem"/>
         </xsl:otherwise>

      </xsl:choose>

   </xsl:for-each>

   <xsl:call-template name="purecart"/>
   <xsl:text>$end
</xsl:text>

   <!-- *******************************************************************
   * $basis Section
   ************************************************************************ -->

   <xsl:if test="//element[@name='ud_basis']">

      <xsl:text>
$basis </xsl:text>

      <xsl:apply-templates select="//element[@name='ud_basis']"/>

      <xsl:text>
$end
</xsl:text>

   </xsl:if>

   <!-- *******************************************************************
   * $xc_functional Section
   ************************************************************************ -->

   <xsl:if test="//element[@name='ud_exchange']">

      <xsl:text>
$xc_functional </xsl:text>

      <xsl:apply-templates select="//element[@name='ud_exchange']"/>

      <xsl:text>
$end
</xsl:text>

   </xsl:if>

   <!-- *******************************************************************
   * $isotopes Section
   ************************************************************************ -->

   <xsl:if test="//element[@name='ud_isotopes']">

      <xsl:text>
$isotopes </xsl:text>

      <xsl:apply-templates select="//element[@name='ud_isotopes']"/>

      <xsl:text>
$end
</xsl:text>

   </xsl:if>

   <!-- *******************************************************************
   * $ecp Section
   ************************************************************************ -->

   <xsl:if test="//element[@name='ud_ecp']">

      <xsl:text>
$ecp </xsl:text>

      <xsl:apply-templates select="//element[@name='ud_ecp']"/>

      <xsl:text>
$end
</xsl:text>

   </xsl:if>

   <!-- *******************************************************************
   * $opt Section
   ************************************************************************ -->

   <xsl:call-template name="opt"/>

   <!-- *******************************************************************
   * $xc_functional Section
   ************************************************************************ -->

   <xsl:apply-templates select="//element[@name='xc_functional']"/>

   <!-- *******************************************************************
   * $occupied Section
   ************************************************************************ -->

   <xsl:apply-templates select="//element[@name='occupied']"/>

</xsl:template>

<!-- **********************************************************************
* title
********************************************************************** -->

<xsl:template match="element[@name='title']">

   <xsl:text>$comment
</xsl:text>

   <xsl:value-of select="child::value"/>

   <xsl:text>
$end
</xsl:text>

</xsl:template>

<!-- **********************************************************************
* charge
********************************************************************** -->

<xsl:template match="element[@name='charge']">
   <xsl:value-of select="child::value"/>
</xsl:template>

<!-- **********************************************************************
*    multiplicity
********************************************************************** -->

<xsl:template match="element[@name='multiplicity']">
   <xsl:text> </xsl:text>
   <xsl:value-of select="child::value"/>
</xsl:template>

<!-- **********************************************************************
* coordinates
********************************************************************** -->

<!-- **********************************************************************
* Generic for textareas
********************************************************************** -->

<xsl:template match="element[@name='coordinates']|element[@name='ud_basis']|element[@name='ud_exchange']|element[@name='ud_ecp']|element[@name='ud_isotopes']">
   <xsl:text>
</xsl:text>
   <xsl:value-of select="child::value"/>
</xsl:template>

<!-- **********************************************************************
* purecart, requires specific formatting
********************************************************************** -->

<xsl:template name="purecart">

   <xsl:variable name="purecart_val">
      <xsl:value-of select="//element[@name='purecart_h']/value"/>
      <xsl:value-of select="//element[@name='purecart_g']/value"/>
      <xsl:value-of select="//element[@name='purecart_f']/value"/>
      <xsl:value-of select="//element[@name='purecart_d']/value"/>
   </xsl:variable>

   <xsl:if test="$purecart_val!=2111">

      <xsl:text>purecart </xsl:text>
      <xsl:value-of select="$purecart_val"/>
		<xsl:text>
</xsl:text>
   </xsl:if>
</xsl:template>

<!-- **********************************************************************
* Generic for the rem section
********************************************************************** -->

<xsl:template name="rem">
   <xsl:value-of select="@name"/>
   <xsl:text> </xsl:text>
   <xsl:value-of select="child::value"/>
   <xsl:text> 
</xsl:text>

</xsl:template>

<!-- **********************************************************************
* opt: for constraints, fixed atoms, dummy atoms, connectivity
*	-1st: check if new values (after all whitespace is removed) have changed
*	-2nd: if any have changed, enter $opt section and format the text of each value that has changed
*	-xsl:text are placed out of alignment to remove errant whitespace
********************************************************************** -->

<xsl:template name="opt">

	<xsl:variable name="constraint_orig" select="'CONSTRAINT ENDCONSTRAINT'"/>
	<xsl:variable name="fixed_orig" select="'FIXED ENDFIXED'"/>
	<xsl:variable name="dummy_orig" select="'DUMMY ENDDUMMY'"/>
	<xsl:variable name="connect_orig" select="'CONNECT ENDCONNECT'"/>

	<xsl:variable name="constraint_new" select="//element[@name='ud_constraint']/value"/>
	<xsl:variable name="fixed_new" select="//element[@name='ud_fixed']/value"/>
	<xsl:variable name="dummy_new" select="//element[@name='ud_dummy']/value"/>
	<xsl:variable name="connect_new" select="//element[@name='ud_connect']/value"/>

	<xsl:if test="normalize-space($constraint_new)!=$constraint_orig or normalize-space($fixed_new)!=$fixed_orig or normalize-space($dummy_new)!=$dummy_orig or normalize-space($connect_new)!=$connect_orig">

   	<xsl:text>$opt
</xsl:text>
		<xsl:if test="normalize-space($constraint_new)!=$constraint_orig">
			<xsl:call-template name="formatText">
				<xsl:with-param name="in" select="substring-before($constraint_new,'ENDCONSTRAINT')"/>
			</xsl:call-template>
			<xsl:text>
ENDCONSTRAINT
</xsl:text>
		</xsl:if>	

		<xsl:if test="normalize-space($fixed_new)!=$fixed_orig">
			<xsl:call-template name="formatText">
				<xsl:with-param name="in" select="substring-before($fixed_new,'ENDFIXED')"/>
			</xsl:call-template>
			<xsl:text>
ENDFIXED
</xsl:text>
		</xsl:if>	
		
		<xsl:if test="normalize-space($dummy_new)!=$dummy_orig">
			<xsl:call-template name="formatText">
				<xsl:with-param name="in" select="substring-before($dummy_new,'ENDDUMMY')"/>
			</xsl:call-template>
			<xsl:text>
ENDDUMMY
</xsl:text>
		</xsl:if>	

		<xsl:if test="normalize-space($connect_new)!=$connect_orig">
			<xsl:call-template name="formatText">
				<xsl:with-param name="in" select="substring-before($connect_new,'ENDCONNECT')"/>
			</xsl:call-template>
			<xsl:text>
ENDCONNECT
</xsl:text>
		</xsl:if>	

		<xsl:text>$end
</xsl:text>
	</xsl:if>
</xsl:template>

<!--*****************************************
*	formatText: removes trailing whitespace/newlines in input string
*******************************************-->
<xsl:template name="formatText">
	<xsl:param name="in"/>

	<xsl:choose>
		<xsl:when test="contains(substring($in,string-length($in),1) , '
')">
			<xsl:call-template name="formatText">
				<xsl:with-param name="in" select="substring($in, 1, string-length($in)-1)"/>
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="$in"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>


<!-- **********************************************************************
* xc_functional
********************************************************************** -->
<!--
<xsl:template match="element[@name='xc_functional']">

   <xsl:text>$xc_functional
</xsl:text>

   <xsl:value-of select="child::value"/>

   <xsl:text>
$end</xsl:text>

</xsl:template>
-->

<!-- **********************************************************************
* occupied
********************************************************************** -->

<xsl:template match="element[@name='occupied']">

   <xsl:text>$occupied
</xsl:text>

   <xsl:value-of select="child::value"/>

   <xsl:text>
$end</xsl:text>

</xsl:template>

<!--*************************************************
*	basis processing, requires unique formatting due to conventions on how to write some basis set names
*	-test if basis_set has a trailing 'G'
*	-if it does, remove the 'G' then add on other components
*	-if it doesn't. then add components in order
***************************************************-->
<xsl:template name="basis_set">
	<xsl:text>basis </xsl:text>

	<xsl:choose>
		<xsl:when test="string-length(//element[@name='basis_set']/value)=1+string-length(substring-before(//element[@name='basis_set']/value,'G'))">
			<xsl:value-of select="substring-before(//element[@name='basis_set']/value, 'G')"/>
			<xsl:value-of select="//element[@name='basis_diffusion']/value"/>
			<xsl:text>G</xsl:text>
			<xsl:value-of select="//element[@name='basis_polarization']/value"/>
		</xsl:when>
		<xsl:when test="//element[@name='basis_set']/value='GEN' or 'Mixed'">
			<xsl:value-of select="//element[@name='basis_set']/value"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="//element[@name='basis_set']/value"/>
			<xsl:value-of select="//element[@name='basis_diffusion']/value"/>
			<xsl:value-of select="//element[@name='basis_polarization']/value"/>
		</xsl:otherwise>
	</xsl:choose>

	<xsl:text>
</xsl:text>

</xsl:template>

<xsl:template name="basis_set_2">
	<xsl:text>basis2 </xsl:text>

	<xsl:choose>
		<xsl:when test="string-length(//element[@name='basis_set_2']/value)=1+string-length(substring-before(//element[@name='basis_set_2']/value,'G'))">
			<xsl:value-of select="substring-before(//element[@name='basis_set_2']/value, 'G')"/>
			<xsl:value-of select="//element[@name='basis_diffusion_2']/value"/>
			<xsl:text>G</xsl:text>
			<xsl:value-of select="//element[@name='basis_polarization_2']/value"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="//element[@name='basis_set_2']/value"/>
			<xsl:value-of select="//element[@name='basis_diffusion_2']/value"/>
			<xsl:value-of select="//element[@name='basis_polarization_2']/value"/>
		</xsl:otherwise>
	</xsl:choose>

	<xsl:text>
</xsl:text>

</xsl:template>

</xsl:stylesheet>
Personal tools