<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:cis="http://zlab.bu.edu/schema/cisml"
>

<!-- A stylesheet to generate a text report about patterns found in each sequence in a group of sequences-->
<!-- Note: Use of XSLT 2.0 and scientific notation requires use of XSLT 2.0 compliant processor such as Saxon 7 -->

<xsl:output method="text" />

<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>


<xsl:variable name="tab">
<xsl:text>	</xsl:text>
</xsl:variable>


<xsl:template match="/">#Sequence Analysis by <xsl:value-of select="//cis:program-name"/>

#Pattern File: <xsl:value-of select="//cis:pattern-file" />
#Sequences File: <xsl:value-of select="//cis:sequence-file" />
#Background Sequences File: <xsl:value-of select="//cis:background-seq-file" />
#Sequence Filtering: <xsl:value-of select="//cis:sequence-filtering/@on-off" />
#Sequence Pvalue Cutoff: <xsl:value-of select="//cis:sequence-pvalue-cutoff" />
#Site Pvalue Cutoff: <xsl:value-of select="//cis:site-pvalue-cutoff" />
<xsl:value-of select="$newline"/>
	<xsl:choose>
		<xsl:when test="//cis:multi-pattern-scan">
			<xsl:for-each select="//cis:multi-pattern-scan">
				<!-- Loop through each pattern group -->
				<xsl:sort select="@pvalue" data-type="number"/>
				<xsl:value-of select="$newline"/>
				<xsl:value-of select="$newline"/>
				<xsl:text>Multi-pattern Scan #</xsl:text><xsl:value-of select="position()"/><xsl:value-of select="$newline"/>
				<xsl:text>Group P-Value: </xsl:text><xsl:value-of select="@pvalue"/><xsl:value-of select="$newline"/>
				<xsl:for-each-group select="./cis:pattern/cis:scanned-sequence" group-by="@accession">
					<!-- Loop through each scanned-sequence -->
					<xsl:sort select="@accession"/>
					<xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
					<xsl:text>Sequence #</xsl:text><xsl:value-of select="position()"/><xsl:value-of select="$newline"/>
					<xsl:text>Accession: </xsl:text><xsl:value-of select="@accession"/><xsl:text>	Name:</xsl:text>
					<xsl:value-of select="@name"/><xsl:value-of select="$newline"/>
					<xsl:for-each select="current-group()">
						<!-- Loop through each scanned-sequence with this accession -->
						<xsl:sort select="../cis:pattern/@pvalue"/><xsl:value-of select="$newline"/>
						<xsl:text>Pattern #</xsl:text><xsl:value-of select="position()"/>
						<xsl:text> Accession: </xsl:text><xsl:value-of select="../@accession"/>
						<xsl:text> P-Value: </xsl:text><xsl:value-of select="../@pvalue"/>
						<xsl:text> Name: </xsl:text><xsl:value-of select="../@name"/>
						<xsl:value-of select="$newline"/>
						<xsl:text>Start	Stop	P-Value	Sequence	Cluster ID</xsl:text>
						<xsl:value-of select="$newline"/>
						<xsl:for-each select="./cis:matched-element">
							<xsl:sort select="@start"/>
							<xsl:value-of select="@start"/><xsl:value-of select="$tab"/>
							<xsl:value-of select="@stop"/>	<xsl:value-of select="$tab"/>
							<xsl:value-of select="@pvalue"/><xsl:value-of select="$tab"/>
							<xsl:value-of select="./cis:sequence"/>	<xsl:value-of select="$tab"/>
							<xsl:value-of select="@clusterid"/><xsl:value-of select="$tab"/>
							<xsl:value-of select="$newline"/>
						</xsl:for-each>
					</xsl:for-each>
				</xsl:for-each-group>
			</xsl:for-each>
		</xsl:when>
		<xsl:otherwise>
			<!-- Loop through all unique sequences -->
			<xsl:for-each-group select="//cis:scanned-sequence" group-by="@accession">
				<xsl:sort select="@accession"/>
				<xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
				<xsl:text>Sequence #</xsl:text><xsl:value-of select="position()"/><xsl:value-of select="$newline"/>
				<xsl:text>Accession: </xsl:text><xsl:value-of select="@accession"/><xsl:text>	Name:</xsl:text>
				<xsl:value-of select="@name"/><xsl:value-of select="$newline"/>
				<!-- Loop through all hits for sequences that have the current accession -->
				<xsl:for-each select="current-group()">
					<xsl:sort select="../@pvalue" data-type="number"/>
					<xsl:value-of select="$newline"/>
					<xsl:text>Pattern #</xsl:text><xsl:value-of select="position()"/><xsl:value-of select="$newline"/>
					<xsl:text>Accession	P-value	Name</xsl:text><xsl:value-of select="$newline"/>
					<xsl:value-of select="../@accession"/><xsl:value-of select="$tab"/>
					<xsl:value-of select="../@pvalue"/><xsl:value-of select="$tab"/>
					<xsl:value-of select="../@name"/><xsl:value-of select="$newline"/><xsl:value-of select="$newline"/>
					<xsl:text>Start	Stop	P-value	Sequence</xsl:text><xsl:value-of select="$newline"/>
					<xsl:for-each select="./cis:matched-element">
						<xsl:sort select="@start" data-type="number"/>
						<xsl:value-of select="@start"/><xsl:value-of select="$tab"/><xsl:value-of select="@stop"/><xsl:value-of select="$tab"/>
						<xsl:value-of select="@pvalue"/><xsl:value-of select="$tab"/><xsl:value-of select="./cis:sequence"/><xsl:value-of select="$newline"/>
					</xsl:for-each>
				</xsl:for-each>
			</xsl:for-each-group>
		</xsl:otherwise>
	</xsl:choose>

</xsl:template>

</xsl:stylesheet>








