<head>
<!-- Generated by perlmod2www.pl -->
<title>
CDF documentation.
</title>
</head>
<body bgcolor="white">
<HR><H4>Bio::Affymetrix</H4>
<H3>CDF</H3>
<A NAME="TOP"></A>
<TABLE BORDER="1" WIDTH="100%"><TR>
<TD><A HREF="#SUMMARY">Summary</A></TD>
<TD><A HREF="#vardefs">Package variables</A></TD>
<TD><A HREF="#SYNOPSIS">Synopsis</A></TD>
<TD><A HREF="#DESCRIPTION">Description</A></TD>
<TD><A HREF="#General">General documentation</A></TD>
<TD><A HREF="#Methods">Methods</A></TD>
</TR></TABLE><HR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR><TD BGCOLOR="#ffae84"><B>Summary</B></TD></TR>
</TABLE>
<TABLE BORDER="0" WIDTH="100%"><TR><TD><pre><B>Bio::Affymetrix::CDF</B>- parse Affymetrix CDF files<BR></pre></TD></TR>
</TABLE>
<A NAME="vardefs"></A>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR BGCOLOR="#ffae84"><TD><B>Package variables</B></TD>
<TD ALIGN="RIGHT"><A HREF="#TOP">top</A></TD></TR></TABLE><TABLE BORDER="0" WIDTH="100%"><TR><TD COLSPAN="2">No package variables defined.</TD></TR>
</TABLE>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR BGCOLOR="#ffae84"><TD WIDTH="150"><B>Included modules</B></TD><TD ALIGN="RIGHT"><A HREF="#TOP">top</A></TD></TR></TABLE><TABLE BORDER="0"><TR><TD COLSPAN="2"><b><font color="#0000ff"><a href="CDF/Probeset.html">Bio::Affymetrix::CDF::Probeset</a></font></b> </TD></TR>
<TR><TD COLSPAN="2"><b><font color="#0000ff">Carp</font></b></TD></TR>
<TR><TD COLSPAN="2"><b><font color="#0000ff">strict</font></b></TD></TR>
<TR><TD COLSPAN="2"><b><font color="#0000ff">warnings</font></b></TD></TR>
</TABLE>
<A NAME="SYNOPSIS"></A>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR BGCOLOR="#ffae84"><TD><B>Synopsis</B></TD><TD ALIGN="RIGHT"><A HREF="#TOP">top</A></TD></TR></TABLE><TABLE BORDER="0"><TR><TD COLSPAN="2"><pre>use Bio::Affymetrix::CDF;<BR><BR># Parse the CDF file<BR><BR>my $cdf=new <B>Bio::Affymetrix::CDF</B>({&quot;probemode&quot;=&gt;0});<BR><BR>$cdf-&gt;parse_from_file(&quot;foo.cdf&quot;);<BR><BR># Find some fun facts about this chip type<BR><BR>print $cdf-&gt;rows().&quot;,&quot;.$cdf-&gt;cols().&quot;\n&quot;;<BR><BR>print $cdf-&gt;version().&quot;\n&quot;;<BR><BR># Print out all of the probeset names on this chip type<BR><BR>foreach my $i (keys %{$chp-&gt;probesets}) {<BR>    print $chp-&gt;probesets-&gt;{$i}-&gt;name().&quot;\n&quot;;<BR>}<BR></pre>
</TD></TR></TABLE>
<A NAME="DESCRIPTION"></A>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR BGCOLOR="#ffae84"><TD><B>Description</B></TD><TD ALIGN="RIGHT"><A HREF="#TOP">top</A></TD></TR></TABLE><TABLE BORDER="0"><TR><TD COLSPAN="2"><pre>The Affymetrix microarray system produces files in a variety of<BR>formats. If this means nothing to you, these modules are probably not<BR>for you :). This module parses CDF files. Use this module if you want<BR>to find out about the design of an Affymetrix GeneChip, or you need the<BR>object for another one of the modules in this package.<BR><BR>All of the Bio::Affymetrix modules parse a file entirely into<BR>memory. You therefore need enough memory to hold these objects. For<BR>some applications, parsing as a stream may be more appropriate-<BR>hopefully the source to these modules will give enough clues to make<BR>this an easy task. This module in particular takes a lot of memory if<BR>probe information is also stored (about 150Mb). Memory usage is not too<BR>onorous (about 15Mb) if probe level information is omitted. You<BR>can.control this by setting probemode=&gt;1 or probemode=&gt;0 in the constructor.<BR><BR>You can also use these modules to write CDF files (using the<BR>write_to_filehandle method). See COMPATIBILITY for some important caveats.<BR></pre>
<pre>You fill the object filled with data using the<BR>parse_from_filehandle, parse_from_string or parse_from_file<BR>routines. You can get/set various statistics using methods on the<BR>object.<BR><BR>The key method is probesets. This returns a reference to a hash of<BR>Bio::Affymetrix::CDF::Probeset objects. The keys of this hash are unit<BR>number - if you are looking for a specific probeset you will have to<BR>search for it yourself. Each Bio::Affymetrix::CDF::Probeset object<BR>contains information about the probesets.<BR></pre>
</TD></TR></TABLE>
<A NAME="Methods"></A>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0"><TR BGCOLOR="#ffae84"><TD><B>Methods</B></TD><TD ALIGN="RIGHT"><A HREF="#TOP">top</A></TD></TR></TABLE>
<TABLE BORDER="1" CELLSPACING="5"><TR><TD><B>_next_line</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE1">Code</A></TD></TR>
<TR><TD><B>_parse_chip_section</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE2">Code</A></TD></TR>
<TR><TD><B>_parse_mas5</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE3">Code</A></TD></TR>
<TR><TD><B>_parse_qc_section</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE4">Code</A></TD></TR>
<TR><TD><B>_parse_unit_section</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE5">Code</A></TD></TR>
<TR><TD><B>_parse_xda</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE6">Code</A></TD></TR>
<TR><TD><B>_split_line</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE7">Code</A></TD></TR>
<TR><TD><B>_unpack_length_string</B></TD><TD><FONT COLOR="RED"><B>No description</B></FONT></TD><TD><A HREF="#CODE8">Code</A></TD></TR>
<TR><TD><B>cols</B></TD><TD><A HREF="#POD1">Description</A></TD><TD><A HREF="#CODE9">Code</A></TD></TR>
<TR><TD><B>name</B></TD><TD><A HREF="#POD2">Description</A></TD><TD><A HREF="#CODE10">Code</A></TD></TR>
<TR><TD><B>new</B></TD><TD><A HREF="#POD3">Description</A></TD><TD><A HREF="#CODE11">Code</A></TD></TR>
<TR><TD><B>original_file_name</B></TD><TD><A HREF="#POD4">Description</A></TD><TD><A HREF="#CODE12">Code</A></TD></TR>
<TR><TD><B>original_format</B></TD><TD><A HREF="#POD5">Description</A></TD><TD><A HREF="#CODE13">Code</A></TD></TR>
<TR><TD><B>original_max_unit</B></TD><TD><A HREF="#POD6">Description</A></TD><TD><A HREF="#CODE14">Code</A></TD></TR>
<TR><TD><B>original_num_qc_units</B></TD><TD><A HREF="#POD7">Description</A></TD><TD><A HREF="#CODE15">Code</A></TD></TR>
<TR><TD><B>original_number_of_probes</B></TD><TD><A HREF="#POD8">Description</A></TD><TD><A HREF="#CODE16">Code</A></TD></TR>
<TR><TD><B>original_version</B></TD><TD><A HREF="#POD9">Description</A></TD><TD><A HREF="#CODE17">Code</A></TD></TR>
<TR><TD><B>parse_from_file</B></TD><TD><A HREF="#POD10">Description</A></TD><TD><A HREF="#CODE18">Code</A></TD></TR>
<TR><TD><B>parse_from_filehandle</B></TD><TD><A HREF="#POD11">Description</A></TD><TD><A HREF="#CODE19">Code</A></TD></TR>
<TR><TD><B>parse_from_string</B></TD><TD><A HREF="#POD12">Description</A></TD><TD><A HREF="#CODE20">Code</A></TD></TR>
<TR><TD><B>probe_grid</B></TD><TD><A HREF="#POD13">Description</A></TD><TD><A HREF="#CODE21">Code</A></TD></TR>
<TR><TD><B>probesets</B></TD><TD><A HREF="#POD14">Description</A></TD><TD><A HREF="#CODE22">Code</A></TD></TR>
<TR><TD><B>resequencing_reference_sequence</B></TD><TD><A HREF="#POD15">Description</A></TD><TD><A HREF="#CODE23">Code</A></TD></TR>
<TR><TD><B>rows</B></TD><TD><A HREF="#POD16">Description</A></TD><TD><A HREF="#CODE24">Code</A></TD></TR>
<TR><TD><B>write_to_file</B></TD><TD><A HREF="#POD17">Description</A></TD><TD><A HREF="#CODE25">Code</A></TD></TR>
<TR><TD><B>write_to_filehandle</B></TD><TD><A HREF="#POD18">Description</A></TD><TD><A HREF="#CODE26">Code</A></TD></TR>
</TABLE>
<A NAME="MethDesc"></A>
<HR><H2>Methods description</H2>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_cols"></A><A NAME="POD1"></A><B>cols</B></TD><TD><A HREF="#CODE9">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD>prev</TD><TD><A HREF="#POD2">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	integer $cols (optional)<BR>  Example    : 	my $name=$cdf-&gt;cols()<BR>  Description: 	Get/set the number of cols in this chip<BR>  Returntype : integer<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_name"></A><A NAME="POD2"></A><B>name</B></TD><TD><A HREF="#CODE10">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD1">prev</A></TD><TD><A HREF="#POD3">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	string $name (optional)<BR>  Example    : 	my $name=$cdf-&gt;name()<BR>  Description: 	Get/set the name of this chip type<BR>  (e.g. ATH1-121501). Only supplied by MAS5 version files.<BR>  Returntype : string<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_new"></A><A NAME="POD3"></A><B>new</B></TD><TD><A HREF="#CODE11">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD2">prev</A></TD><TD><A HREF="#POD4">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : hashref of parameters (optional)<BR>  Example    : my $cdf=new <B>Bio::Affymetrix::CDF</B>({probemode=&gt;1);<BR>  Description: constructor for CDF object. Turn probemode on and off (default off) by supplying named parameters as a hash reference<BR>  Returntype : new Bio::Affmetrix::CDF object<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_file_name"></A><A NAME="POD4"></A><B>original_file_name</B></TD><TD><A HREF="#CODE12">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD3">prev</A></TD><TD><A HREF="#POD5">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $cdf_file_name=$cdf-&gt;original_file_name();<BR>  Description:	If this object was created using parse_from_file, the original filename. Otherwise undef.<BR>  Returntype :	string<BR>  Exceptions : 	none<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_format"></A><A NAME="POD5"></A><B>original_format</B></TD><TD><A HREF="#CODE13">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD4">prev</A></TD><TD><A HREF="#POD6">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $format=$cdf-&gt;original_format()<BR>  Description:	Returns the format of the CDF file parsed. Currently<BR>    MAS5 or XDA.<BR>  Returntype : 	string<BR>  Exceptions : 	none<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_max_unit"></A><A NAME="POD6"></A><B>original_max_unit</B></TD><TD><A HREF="#CODE14">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD5">prev</A></TD><TD><A HREF="#POD7">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $max_units=$cdf-&gt;original_max_units()<BR>  Description: 	Get the max unit number in the CDF file. Fairly useless. Only available in MAS5 files<BR>  Returntype : integer<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_num_qc_units"></A><A NAME="POD7"></A><B>original_num_qc_units</B></TD><TD><A HREF="#CODE15">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD6">prev</A></TD><TD><A HREF="#POD8">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $max_units=$cdf-&gt;original_num_qc_units()<BR>  Description: 	Get the number of QC units in the CDF file. Only piece<BR>of QC information obtainable using this piece of software.<BR>  Returntype : integer<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_number_of_probes"></A><A NAME="POD8"></A><B>original_number_of_probes</B></TD><TD><A HREF="#CODE16">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD7">prev</A></TD><TD><A HREF="#POD9">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $number_of_probes=$cdf-&gt;original_number_of_probes()<BR>  Description: 	Get the number of probesets on the array, as listed<BR>originally in the file. A better way is to do my<BR>$q=scalar(@{$cdf-&gt;probesets()}); if you want a current count. Should really be called original_number_of_probesets.<BR>  Returntype : integer<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_original_version"></A><A NAME="POD9"></A><B>original_version</B></TD><TD><A HREF="#CODE17">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD8">prev</A></TD><TD><A HREF="#POD10">next</A></TD></TR></TABLE>
<pre>  Arg [0]    : 	none<BR>  Example    : 	my $version=$cdf-&gt;original_version()<BR>  Description: 	Returns the version of the CDF file parsed. Encoded in file.<BR>  Returntype : string<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_parse_from_file"></A><A NAME="POD10"></A><B>parse_from_file</B></TD><TD><A HREF="#CODE18">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD9">prev</A></TD><TD><A HREF="#POD11">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	string<BR>  Example    : 	$cdf-&gt;parse_from_file($cdf_filename);<BR>  Description:	Parse a CDF file from a file<BR>  Returntype :	none<BR>  Exceptions : 	dies if cannot open file<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_parse_from_filehandle"></A><A NAME="POD11"></A><B>parse_from_filehandle</B></TD><TD><A HREF="#CODE19">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD10">prev</A></TD><TD><A HREF="#POD12">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	reference to filehandle<BR>  Example    : 	$cdf-&gt;parse_from_filehandle(\*STDIN);<BR>  Description:	Parse a CDF file from a filehandle<BR>  Returntype :	none<BR>  Exceptions : 	none<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_parse_from_string"></A><A NAME="POD12"></A><B>parse_from_string</B></TD><TD><A HREF="#CODE20">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD11">prev</A></TD><TD><A HREF="#POD13">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	string<BR>  Example    : 	$cdf-&gt;parse_from_string($cdf_file_in_a_string);<BR>  Description:	Parse a CDF file from a buffer in memory<BR>  Returntype :	none<BR>  Exceptions : 	none<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_probe_grid"></A><A NAME="POD13"></A><B>probe_grid</B></TD><TD><A HREF="#CODE21">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD12">prev</A></TD><TD><A HREF="#POD14">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : arrayref $probelist<BR>    Example    : my $probe=$ps-&gt;probe_grid()-&gt;[500][500]; #Return probe at 500,500<BR>  Description: Get/set the grid of probes making up this array. Only available if<BR>    with probes mode is used.<BR><BR>    Returns an reference to a two dimensional array of<BR>    Bio::Affymetrix::CDF::Probe objects. <BR>  Returntype : reference to two-dimensional array of Bio::Affymetrix::CDF::Probe objects<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_probesets"></A><A NAME="POD14"></A><B>probesets</B></TD><TD><A HREF="#CODE22">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD13">prev</A></TD><TD><A HREF="#POD15">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	hashref $probesets <BR>  Example    : 	my %probesets=%{$cdf-&gt;probesets()}<BR>  Description: 	Get the probesets on the array<BR>  Returntype : an reference to an hash of<BR>Bio::Affymetrix::CDF::Probeset objects (q.v.), keyed on unit number<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_resequencing_reference_sequence"></A><A NAME="POD15"></A><B>resequencing_reference_sequence</B></TD><TD><A HREF="#CODE23">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD14">prev</A></TD><TD><A HREF="#POD16">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	string $refseq (optional)<BR>  Example    : 	my $refseq=$cdf-&gt;resequencing_reference_sequence()<BR>  Description: 	Get/set the name of resequencing_reference_sequence.<BR>Only available in GCOS format files<BR>  Returntype : string<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_rows"></A><A NAME="POD16"></A><B>rows</B></TD><TD><A HREF="#CODE24">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD15">prev</A></TD><TD><A HREF="#POD17">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	integer $rows (optional)<BR>  Example    : 	my $name=$cdf-&gt;rows()<BR>  Description: 	Get/set the number of rows in this chip<BR>  Returntype : integer<BR>  Exceptions : none<BR>  Caller     : general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_write_to_file"></A><A NAME="POD17"></A><B>write_to_file</B></TD><TD><A HREF="#CODE25">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD16">prev</A></TD><TD><A HREF="#POD18">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	string $filename<BR>  Arg [2]    : 	string $format<BR>  Arg [3]    : 	string $version<BR>  Example    : 	$cdf-&gt;write_to_file($cdf_filename);<BR>  Description:	Writes a CDF file to a file. See write_to_filehandle for descriptions of format and version<BR>  Returntype :	none<BR>  Exceptions : 	dies if cannot open file<BR>  Caller     : 	general<BR></pre>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD WIDTH="200"><A NAME="_pod_write_to_filehandle"></A><A NAME="POD18"></A><B>write_to_filehandle</B></TD><TD><A HREF="#CODE26">code</A></TD><TD><A HREF="#TOP">top</A></TD><TD><A HREF="#POD17">prev</A></TD><TD><A HREF="#POD19">next</A></TD></TR></TABLE>
<pre>  Arg [1]    : 	filehandle $filehandle<BR>  Arg [2]    : 	string $format<BR>  Arg [3]    : 	string $version<BR>  Example    : 	$cdf-&gt;write_to_filehandle($cdf_filename);<BR>  Description:	Writes a CDF file to a filehandle. Takes arguments of<BR>  the filehandle, the desired format, and the desired version of that<BR>  format.<BR><BR>  Currently, format defaults to MAS5, and version defaults to<BR>  GC3.0. These are the only formats the software is capable of<BR>  producing currently. Also, this software cannot write files that<BR>  were read in using the GCOS file format. The original CDF file must<BR>  have been parsed in probe mode.<BR><BR>  Returntype :	none<BR>  Exceptions : 	dies if cannot open file<BR>  Caller     : 	general<BR></pre>
<A NAME="MethCode"></A>
<HR><H2>Methods code</H2>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE1"></A><B>_next_line</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30">prev</TD><TD WIDTH="30"><A HREF="#CODE2">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_next_line</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>;
    
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$fh</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>;

    <font color="#0000ff"><b>do</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$q</font>=&lt;<font color="#1f32ff">$fh</font>&gt;;
	<font color="#4169e1"><b>chomp</b></font> <font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>while</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>eof</b></font> <font color="#1f32ff">$fh</font>&amp;&amp;<font color="#1f32ff">$q</font>=~<font color="#006400"><b>/^\s*$/</b></font><font color="#0000ff"><b>)</b></font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>eof</b></font> <font color="#1f32ff">$fh</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>else</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>return</b></font> <font color="#4169e1"><b>undef</b></font>;
    <font color="#0000ff"><b>}</b></font></pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE2"></A><B>_parse_chip_section</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE1">prev</A></TD><TD WIDTH="30"><A HREF="#CODE3">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_parse_chip_section</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=<font color="#4169e1"><b>shift</b></font>;;
    <font color="#0000ff"><b>while</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_next_line</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font>=~<font color="#006400"><b>/^\[.*\]$/</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>my</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$name</font>,<font color="#1f32ff">$value</font><font color="#0000ff"><b>)</b></font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_split_line</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>)</b></font>;
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#4169e1"><b>uc</b></font> <font color="#1f32ff">$name</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$value</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$i</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE3"></A><B>_parse_mas5</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE2">prev</A></TD><TD WIDTH="30"><A HREF="#CODE4">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_parse_mas5</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#4169e1"><b>binmode</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>,<font color="#007400">":crlf"</font>;
    <font color="#ff0000">## Obtain file version, and do some rudimentary checking of information</font><BR>    <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FORMAT"</font><font color="#0000ff"><b>}</b></font>=<font color="#007400">"MAS5"</font>;

	<font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_next_line</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>;

	<font color="#0000ff"><b>my</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$name</font>,<font color="#1f32ff">$value</font><font color="#0000ff"><b>)</b></font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_split_line</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>)</b></font>;

	<font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$name</font> <font color="#0000ff"><b>ne</b></font> <font color="#007400">"Version"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#4169e1"><b>die</b></font> <font color="#007400">"File does not look like a CDF file to me"</font>;
	<font color="#0000ff"><b>}</b></font>

	<font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$value</font> <font color="#0000ff"><b>ne</b></font> <font color="#007400">"GC3.0"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can't understand any other type of CDF file other than GC3.0"</font>;
	<font color="#0000ff"><b>}</b></font>
	
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"VERSION"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$value</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#ff0000">## Parse the rest of the file</font><BR>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_next_line</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>;

    <font color="#0000ff"><b>while</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>eof</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font> <font color="#0000ff"><b>eq</b></font> <font color="#007400">"[Chip]"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_parse_chip_section</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>)</b></font>;
	<font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>elsif</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>=~<font color="#006400"><b>/\[QC\d+\]/</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_parse_qc_section</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>)</b></font>;
	<font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>elsif</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>=~<font color="#006400"><b>/\[Unit\d+\]/</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_parse_unit_section</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>)</b></font>;
	<font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>else</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$i</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_next_line</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>;
	<font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>}</b></font></pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE4"></A><B>_parse_qc_section</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE3">prev</A></TD><TD WIDTH="30"><A HREF="#CODE5">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_parse_qc_section</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$fh</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_qcinfo"</font><font color="#0000ff"><b>}</b></font>.=<font color="#1f32ff">$i</font>.<font color="#007400">"\n"</font>;

    <font color="#0000ff"><b>while</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>=&lt;<font color="#1f32ff">$fh</font>&gt;<font color="#0000ff"><b>)</b></font>=~<font color="#006400"><b>/^^\s*\[.*\]\s*$/</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#ff0000">## QC sections still bore</font><BR>	<font color="#ff0000">## us, but we're now going to store them for later </font><BR>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_qcinfo"</font><font color="#0000ff"><b>}</b></font>.=<font color="#1f32ff">$i</font>;
	
	
    <font color="#0000ff"><b>}</b></font>
    <font color="#4169e1"><b>chomp</b></font> <font color="#1f32ff">$i</font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$i</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE5"></A><B>_parse_unit_section</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE4">prev</A></TD><TD WIDTH="30"><A HREF="#CODE6">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_parse_unit_section</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=<font color="#0000ff"><b>new</b></font> <A HREF="CDF/Probeset.html"><font color="#8000ff"><b>Bio::Affymetrix::CDF::Probeset</b></font></A>;
    <font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">CDF</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font><font color="#0000ff"><b>)</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$ret</font>=<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">_parse_from_filehandle</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>,<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;
    

    
    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">original_unit_number</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$i</font>;
    
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$ret</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE6"></A><B>_parse_xda</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE5">prev</A></TD><TD WIDTH="30"><A HREF="#CODE7">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_parse_xda</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>,<font color="#1f32ff">$fh</font><font color="#0000ff"><b>)</b></font> = <font color="#1f32ff">@_</font>;
    
    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FORMAT"</font><font color="#0000ff"><b>}</b></font>=<font color="#007400">"XDA"</font>;
    
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$buffer</font>; 

    <font color="#ff0000">## First some trivia</font><BR>
    <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 4<font color="#0000ff"><b>)</b></font>==4<font color="#0000ff"><b>)</b></font> or croak <font color="#007400">"Can no longer read from file"</font>;
    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"VERSION"</font><font color="#0000ff"><b>}</b></font>= <font color="#4169e1"><b>unpack</b></font> <font color="#0000ff"><b>(</b></font><font color="#007400">"V"</font>, <font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;
    
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"VERSION"</font><font color="#0000ff"><b>}</b></font>!=1<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	carp <font color="#007400">"This CDF file is newer than the software parsing them. Results may be suspect."</font>; <font color="#ff0000">## die here, perhaps?</font><BR>    <font color="#0000ff"><b>}</b></font> 

    <font color="#ff0000">## CDF file trivia</font><BR>
    <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 12<font color="#0000ff"><b>)</b></font>==12<font color="#0000ff"><b>)</b></font> or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;
    <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"COLS"</font><font color="#0000ff"><b>}</b></font>,<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"ROWS"</font><font color="#0000ff"><b>}</b></font>,<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMBEROFUNITS"</font><font color="#0000ff"><b>}</b></font>,<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMQCUNITS"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>= <font color="#4169e1"><b>unpack</b></font> <font color="#0000ff"><b>(</b></font><font color="#007400">"S2V2"</font>, <font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"RESEQREFSEQ"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_unpack_length_string</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font><font color="#0000ff"><b>)</b></font>; <font color="#ff0000">##What's this?</font><BR>
    <font color="#ff0000">## Probe names</font><BR>
    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>=<font color="#0000ff"><b>{</b></font><font color="#0000ff"><b>}</b></font>;

    <font color="#0000ff"><b>for</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=1;<font color="#1f32ff">$i</font>&lt;=<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMBEROFUNITS"</font><font color="#0000ff"><b>}</b></font>;<font color="#1f32ff">$i</font>++<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 64<font color="#0000ff"><b>)</b></font>==64<font color="#0000ff"><b>)</b></font>  or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;
<font color="#ff0000">##	my $name=unpack(&quot;Z64&quot;,$buffer);</font><BR><font color="#ff0000">##	$self-&gt;{&quot;PROBESETS&quot;}-&gt;{$i}=new Bio::Affymetrix::CDF::Probeset;</font><BR><font color="#ff0000">##	$self-&gt;{&quot;PROBESETS&quot;}-&gt;{$i}-&gt;name($name);</font><BR>    <font color="#0000ff"><b>}</b></font>

    <font color="#ff0000">## File offsets that are not useful for us</font><BR>    <font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 4*<font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMBEROFUNITS"</font><font color="#0000ff"><b>}</b></font>+<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMQCUNITS"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font>;

    <font color="#ff0000">## QC information is just stored, for now</font><BR>
    <font color="#0000ff"><b>for</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=0;<font color="#1f32ff">$i</font>&lt;<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMQCUNITS"</font><font color="#0000ff"><b>}</b></font>;<font color="#1f32ff">$i</font>++<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 6<font color="#0000ff"><b>)</b></font>==6<font color="#0000ff"><b>)</b></font>  or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;
	<font color="#0000ff"><b>my</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$junk</font>,<font color="#1f32ff">$numprobe</font><font color="#0000ff"><b>)</b></font>=<font color="#4169e1"><b>unpack</b></font><font color="#0000ff"><b>(</b></font><font color="#007400">"SV"</font>,<font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_qcinfo"</font><font color="#0000ff"><b>}</b></font>.=<font color="#1f32ff">$buffer</font>;
	<font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 7*<font color="#1f32ff">$numprobe</font><font color="#0000ff"><b>)</b></font>==7*<font color="#1f32ff">$numprobe</font><font color="#0000ff"><b>)</b></font>  or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_qcinfo"</font><font color="#0000ff"><b>}</b></font>.=<font color="#1f32ff">$buffer</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#ff0000">## Probe information</font><BR>    <font color="#0000ff"><b>for</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font>=1;<font color="#1f32ff">$i</font>&lt;=<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMBEROFUNITS"</font><font color="#0000ff"><b>}</b></font>;<font color="#1f32ff">$i</font>++<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$ps</font>=<font color="#0000ff"><b>new</b></font> <A HREF="CDF.html"><font color="#8000ff"><b>Bio::Affymetrix::CDF</b></font></A>::<font color="#ff8204">Probeset</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>;
	<font color="#1f32ff">$ps</font>-&gt;<font color="#ff8204">_parse_from_filehandle_bin</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>,<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;
	<font color="#1f32ff">$ps</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"CDF"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$self</font>;
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$ps</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"UNITNUMBER"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$ps</font>;
    <font color="#0000ff"><b>}</b></font></pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE7"></A><B>_split_line</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE6">prev</A></TD><TD WIDTH="30"><A HREF="#CODE8">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_split_line</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$line</font>=<font color="#4169e1"><b>shift</b></font>;
    
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">@q</font>=<font color="#4169e1"><b>split</b></font> <font color="#006400"><b>/=/</b></font>,<font color="#1f32ff">$line</font>,2;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">@q</font><font color="#0000ff"><b>)</b></font>!=2<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#4169e1"><b>die</b></font> <font color="#007400">"Can't parse line "</font>.<font color="#1f32ff">$line</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">@q</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE8"></A><B>_unpack_length_string</B></TD><TD>description</TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE7">prev</A></TD><TD WIDTH="30"><A HREF="#CODE9">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff00ff"><b>_unpack_length_string</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$fh</font>=<font color="#4169e1"><b>shift</b></font>;
    
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$buffer</font>;

    <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, 4<font color="#0000ff"><b>)</b></font>==4<font color="#0000ff"><b>)</b></font> or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$len</font> = <font color="#4169e1"><b>unpack</b></font> <font color="#0000ff"><b>(</b></font><font color="#007400">"V"</font>, <font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;
    <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$fh</font>, <font color="#1f32ff">$buffer</font>, <font color="#1f32ff">$len</font><font color="#0000ff"><b>)</b></font>==<font color="#1f32ff">$len</font><font color="#0000ff"><b>)</b></font> or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Can no longer read from file"</font>;

    <font color="#0000ff"><b>return</b></font> <font color="#4169e1"><b>unpack</b></font><font color="#0000ff"><b>(</b></font><font color="#007400">"a"</font>.<font color="#1f32ff">$len</font>,<font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE9"></A><B>cols</B></TD><TD><A HREF="#POD1">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE8">prev</A></TD><TD WIDTH="30"><A HREF="#CODE10">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>cols</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"COLS"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"COLS"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE10"></A><B>name</B></TD><TD><A HREF="#POD2">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE9">prev</A></TD><TD WIDTH="30"><A HREF="#CODE11">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>name</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NAME"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NAME"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE11"></A><B>new</B></TD><TD><A HREF="#POD3">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE10">prev</A></TD><TD WIDTH="30"><A HREF="#CODE12">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>new</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$class</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#0000ff"><b>{</b></font><font color="#0000ff"><b>}</b></font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>ref</b></font> <font color="#1f32ff">$q</font> <font color="#0000ff"><b>eq</b></font> <font color="#007400">"HASH"</font> &amp;&amp; <font color="#4169e1"><b>exists</b></font> <font color="#1f32ff">$q</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"probemode"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"probemode"</font><font color="#0000ff"><b>}</b></font>;
    <font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>else</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font>=<font color="#4169e1"><b>undef</b></font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>=<font color="#0000ff"><b>{</b></font><font color="#0000ff"><b>}</b></font>;

    <font color="#4169e1"><b>bless</b></font> <font color="#1f32ff">$self</font>,<font color="#1f32ff">$class</font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE12"></A><B>original_file_name</B></TD><TD><A HREF="#POD4">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE11">prev</A></TD><TD WIDTH="30"><A HREF="#CODE13">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_file_name</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"file_name"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE13"></A><B>original_format</B></TD><TD><A HREF="#POD5">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE12">prev</A></TD><TD WIDTH="30"><A HREF="#CODE14">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_format</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FORMAT"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE14"></A><B>original_max_unit</B></TD><TD><A HREF="#POD6">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE13">prev</A></TD><TD WIDTH="30"><A HREF="#CODE15">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_max_unit</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"MAXUNIT"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE15"></A><B>original_num_qc_units</B></TD><TD><A HREF="#POD7">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE14">prev</A></TD><TD WIDTH="30"><A HREF="#CODE16">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_num_qc_units</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMQCUNITS"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE16"></A><B>original_number_of_probes</B></TD><TD><A HREF="#POD8">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE15">prev</A></TD><TD WIDTH="30"><A HREF="#CODE17">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_number_of_probes</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NUMBEROFUNITS"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE17"></A><B>original_version</B></TD><TD><A HREF="#POD9">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE16">prev</A></TD><TD WIDTH="30"><A HREF="#CODE18">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>original_version</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"VERSION"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE18"></A><B>parse_from_file</B></TD><TD><A HREF="#POD10">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE17">prev</A></TD><TD WIDTH="30"><A HREF="#CODE19">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>parse_from_file</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$filename</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"file_name"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$filename</font>;
    <font color="#4169e1"><b>open</b></font> CDF,<font color="#007400">"&lt;"</font>.<font color="#1f32ff">$filename</font> or carp <font color="#007400">"Cannot open file "</font>.<font color="#1f32ff">$filename</font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">parse_from_filehandle</font><font color="#0000ff"><b>(</b></font>\*CDF<font color="#0000ff"><b>)</b></font>;

    <font color="#4169e1"><b>close</b></font> CDF;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE19"></A><B>parse_from_filehandle</B></TD><TD><A HREF="#POD11">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE18">prev</A></TD><TD WIDTH="30"><A HREF="#CODE20">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>parse_from_filehandle</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#4169e1"><b>binmode</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>;

    <font color="#ff0000">## First step- detect whether it's a GCOS or MAS5 file</font><BR>    
    <font color="#ff0000">## A buffer for reading things into</font><BR>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$buffer</font>; 

    <font color="#ff0000">## XDA files have their first feature as a magic number, 65</font><BR>
    <font color="#4169e1"><b>read</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>, <font color="#1f32ff">$buffer</font>, 4<font color="#0000ff"><b>)</b></font> or <font color="#4169e1"><b>die</b></font> <font color="#007400">"Cannot read from file"</font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$magic_number</font> = <font color="#4169e1"><b>unpack</b></font><font color="#0000ff"><b>(</b></font><font color="#007400">"V"</font>, <font color="#1f32ff">$buffer</font><font color="#0000ff"><b>)</b></font>;


    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$magic_number</font>==67<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#ff0000">## It's a GCOS v1.2 &quot;v4 file&quot;, XDA file! Hurrah!</font><BR>	<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_parse_xda</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;
	<font color="#4169e1"><b>delete</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>;
	<font color="#0000ff"><b>return</b></font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#4169e1"><b>binmode</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>,<font color="#007400">":crlf"</font>;

    <font color="#1f32ff">$buffer</font>.=<font color="#ff8204">readline</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$buffer</font> <font color="#0000ff"><b>eq</b></font> <font color="#007400">"[CDF]\n"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#ff0000">## It's a MAS5/GCOS v1.0 &quot;v3 file&quot;! Yippee!</font><BR>	<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">_parse_mas5</font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;
	<font color="#0000ff"><b>return</b></font>;
	<font color="#4169e1"><b>delete</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"FH"</font><font color="#0000ff"><b>}</b></font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#4169e1"><b>die</b></font> <font color="#007400">"This doesn't look like a CDF file to me."</font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE20"></A><B>parse_from_string</B></TD><TD><A HREF="#POD12">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE19">prev</A></TD><TD WIDTH="30"><A HREF="#CODE21">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>parse_from_string</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$string</font>=<font color="#4169e1"><b>shift</b></font>;


    <font color="#4169e1"><b>open</b></font> CDF,<font color="#007400">"&lt;"</font>,\<font color="#1f32ff">$string</font> or carp <font color="#007400">"Cannot open string stream"</font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">parse_from_filehandle</font><font color="#0000ff"><b>(</b></font>\*CDF<font color="#0000ff"><b>)</b></font>;

    <font color="#4169e1"><b>close</b></font> CDF;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE21"></A><B>probe_grid</B></TD><TD><A HREF="#POD13">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE20">prev</A></TD><TD WIDTH="30"><A HREF="#CODE22">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>probe_grid</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	croak <font color="#007400">"probe_grid is not available when not in probemode"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBEGRID"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBEGRID"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE22"></A><B>probesets</B></TD><TD><A HREF="#POD14">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE21">prev</A></TD><TD WIDTH="30"><A HREF="#CODE23">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>probesets</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"PROBESETS"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE23"></A><B>resequencing_reference_sequence</B></TD><TD><A HREF="#POD15">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE22">prev</A></TD><TD WIDTH="30"><A HREF="#CODE24">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>resequencing_reference_sequence</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NAME"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"NAME"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE24"></A><B>rows</B></TD><TD><A HREF="#POD16">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE23">prev</A></TD><TD WIDTH="30"><A HREF="#CODE25">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>rows</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$q</font>=<font color="#4169e1"><b>shift</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"ROWS"</font><font color="#0000ff"><b>}</b></font>=<font color="#1f32ff">$q</font>;
    <font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>return</b></font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"ROWS"</font><font color="#0000ff"><b>}</b></font>;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE25"></A><B>write_to_file</B></TD><TD><A HREF="#POD17">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE24">prev</A></TD><TD WIDTH="30"><A HREF="#CODE26">next</A></TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>write_to_file</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$filename</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#4169e1"><b>open</b></font> CDF,<font color="#007400">"&gt;"</font>.<font color="#1f32ff">$filename</font> or croak <font color="#007400">"Cannot open file for writing "</font>.<font color="#1f32ff">$filename</font>;

    <font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">write_to_filehandle</font><font color="#0000ff"><b>(</b></font>\*CDF,<font color="#1f32ff">@_</font><font color="#0000ff"><b>)</b></font>;

    <font color="#4169e1"><b>close</b></font> CDF;</pre>}<BR>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#dcab68"><TD WIDTH="200"><A NAME="CODE26"></A><B>write_to_filehandle</B></TD><TD><A HREF="#POD18">description</A></TD><TD WIDTH="30"><A HREF="#TOP">top</A></TD><TD WIDTH="30"><A HREF="#CODE25">prev</A></TD><TD WIDTH="30">next</TD></TR></TABLE>
<font color="#0000ff"><b>sub</b></font> <font color="#ff0000"><b>write_to_filehandle</b></font>
 {<pre>    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$self</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$filehandle</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$format</font>=<font color="#4169e1"><b>shift</b></font>;
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$version</font>=<font color="#4169e1"><b>shift</b></font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_PROBEMODE"</font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	croak <font color="#007400">"No writing when not in probemode"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>defined</b></font> <font color="#1f32ff">$version</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$version</font>=<font color="#007400">"GC3.0"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>defined</b></font> <font color="#1f32ff">$format</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#1f32ff">$format</font>=<font color="#007400">"MAS5"</font>;
    <font color="#0000ff"><b>}</b></font>


    <font color="#4169e1"><b>binmode</b></font> <font color="#1f32ff">$filehandle</font>,<font color="#007400">":crlf"</font>;



    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>defined</b></font> <font color="#1f32ff">$version</font> &amp;&amp; <font color="#1f32ff">$version</font> <font color="#0000ff"><b>ne</b></font> <font color="#007400">"GC3.0"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	croak <font color="#007400">"Bio::Affymetrix::CDF module cannot do any other version than GC3.0 currently"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#1f32ff">$version</font>=<font color="#007400">"GC3.0"</font>;

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$format</font> <font color="#0000ff"><b>ne</b></font> <font color="#007400">"MAS5"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	croak <font color="#007400">"Bio::Affymetrix::CDF module can only produce MAS5 CDF files currently"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">original_format</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>eq</b></font> <font color="#007400">"XDA"</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	carp <font color="#007400">"You cannot produce authentic MAS5 CDF files starting from an XDA CDF file (yet). Output will continue, but resulting CDF file will be unusable"</font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#ff0000">## Chipfile trivia</font><BR>
    <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$maxunit</font>=-3000;

    <font color="#0000ff"><b>foreach</b></font> <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font> <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>keys</b></font> %<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">probesets</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>&gt;<font color="#1f32ff">$maxunit</font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$maxunit</font>=<font color="#1f32ff">$i</font>;
	<font color="#0000ff"><b>}</b></font>
    <font color="#0000ff"><b>}</b></font>

    <font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"[CDF]\nVersion="</font>.<font color="#1f32ff">$version</font>.<font color="#007400">"\n\n"</font>;
    <font color="#ff0000">## Uses $self-&gt;probesets as an arrayref (rather than hashref) for</font><BR>    <font color="#ff0000">## calculating NumberOfUnits here</font><BR>
    <font color="#0000ff"><b>if</b></font> <font color="#0000ff"><b>(</b></font>!<font color="#4169e1"><b>defined</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">name</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	<font color="#ff8204">carp</font><font color="#0000ff"><b>(</b></font><font color="#007400">"GCOS format files do not have a name. Use the name() method if you want to set a name for this chip in the output."</font><font color="#0000ff"><b>)</b></font>;
    <font color="#0000ff"><b>}</b></font>

    <font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"[Chip]\nName="</font>.<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">name</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nRows="</font>.<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">rows</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nCols="</font>.<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">cols</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nNumberOfUnits="</font>.<font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>keys</b></font> %<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">probesets</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nMaxUnit="</font>.<font color="#1f32ff">$maxunit</font>.<font color="#007400">"\nNumQCUnits="</font>.<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">original_num_qc_units</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nChipReference=\n\n"</font>;


    <font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#1f32ff">$self</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"_qcinfo"</font><font color="#0000ff"><b>}</b></font> <font color="#0000ff"><b>unless</b></font> <font color="#0000ff"><b>(</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">original_format</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>eq</b></font> <font color="#007400">"XDA"</font><font color="#0000ff"><b>)</b></font>;

    <font color="#0000ff"><b>foreach</b></font> <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font> <font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>sort</b></font> <font color="#0000ff"><b>{</b></font><font color="#4169e1"><b>int</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$a</font><font color="#0000ff"><b>)</b></font>&lt;=&gt;<font color="#4169e1"><b>int</b></font><font color="#0000ff"><b>(</b></font><font color="#1f32ff">$b</font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font> <font color="#4169e1"><b>keys</b></font> %<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">probesets</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>

	<font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$numcells</font>=0;
	
	<font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$z</font>=<font color="#1f32ff">$self</font>-&gt;<font color="#ff8204">probesets</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$i</font><font color="#0000ff"><b>}</b></font>;

	<font color="#ff0000">## Calulate number of cells (or probes, in English)</font><BR>
	<font color="#0000ff"><b>foreach</b></font> <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$v</font> <font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#1f32ff">$numcells</font>+=<font color="#4169e1"><b>scalar</b></font> <font color="#0000ff"><b>(</b></font>@$v<font color="#0000ff"><b>)</b></font>
	<font color="#0000ff"><b>}</b></font>

	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"[Unit"</font>.<font color="#1f32ff">$i</font>.<font color="#007400">"]\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"Name="</font>.<font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">unit_name</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"Direction="</font>.<font color="#0000ff"><b>(</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">is_sense</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>?1:2<font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"NumAtoms="</font>.<font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"NumCells="</font>.<font color="#1f32ff">$numcells</font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"UnitNumber="</font>.<font color="#1f32ff">$i</font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"UnitType="</font>.<font color="#1f32ff">$z</font>-&gt;<font color="#0000ff"><b>{</b></font><font color="#007400">"UNITTYPE"</font><font color="#0000ff"><b>}</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"NumberBlocks=1\n\n"</font>;

	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"[Unit"</font>.<font color="#1f32ff">$i</font>.<font color="#007400">"_Block1]\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"Name="</font>.<font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">name</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\nBlockNumber=1\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"NumAtoms="</font>.<font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"NumCells="</font>.<font color="#1f32ff">$numcells</font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"StartPosition=0\nStopPosition="</font>.<font color="#0000ff"><b>(</b></font><font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>-1<font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"CellHeader=X	Y	PROBE	FEAT	QUAL	EXPOS	POS	CBASE	PBASE	TBASE	ATOM	INDEX	CODONIND	CODON	REGIONTYPE	REGION\n"</font>;

	<font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$count</font>=1;

	<font color="#0000ff"><b>for</b></font> <font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$x</font>=0;<font color="#1f32ff">$x</font>&lt;<font color="#4169e1"><b>scalar</b></font><font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font>;<font color="#1f32ff">$x</font>++<font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
	    <font color="#0000ff"><b>foreach</b></font> <font color="#0000ff"><b>my</b></font> <font color="#1f32ff">$i</font> <font color="#0000ff"><b>(</b></font>@<font color="#0000ff"><b>{</b></font><font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">probe_pairs</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>-&gt;<font color="#0000ff"><b>[</b></font><font color="#1f32ff">$x</font><font color="#0000ff"><b>]</b></font><font color="#0000ff"><b>}</b></font><font color="#0000ff"><b>)</b></font> <font color="#0000ff"><b>{</b></font>
		<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"Cell"</font>.<font color="#0000ff"><b>(</b></font><font color="#1f32ff">$count</font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"="</font>.<font color="#4169e1"><b>join</b></font><font color="#0000ff"><b>(</b></font><font color="#007400">"\t"</font>,<font color="#0000ff"><b>(</b></font><font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">x</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">y</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#007400">"N"</font>,<font color="#007400">"control"</font>,<font color="#1f32ff">$z</font>-&gt;<font color="#ff8204">name</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$x</font>,<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">mismatch_position</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">probe_target_base</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">probe_mismatch_base</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$i</font>-&gt;<font color="#ff8204">probe_target_base</font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,<font color="#1f32ff">$x</font>,<font color="#1f32ff">$i</font>-&gt;<font color="#4169e1"><b>index</b></font><font color="#0000ff"><b>(</b></font><font color="#0000ff"><b>)</b></font>,-1,-1,99,<font color="#007400">""</font><font color="#0000ff"><b>)</b></font><font color="#0000ff"><b>)</b></font>.<font color="#007400">"\n"</font>;
		<font color="#1f32ff">$count</font>++;
	    <font color="#0000ff"><b>}</b></font>
	<font color="#0000ff"><b>}</b></font>

	<font color="#4169e1"><b>print</b></font> <font color="#1f32ff">$filehandle</font> <font color="#007400">"\n\n"</font>;
    <font color="#0000ff"><b>}</b></font></pre>}<BR>
<A NAME="General"></A>
<HR><H2>General documentation</H2>
<TABLE BORDER="0" WIDTH="100%" CELLSPACING="0">
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_NOTES"><B>NOTES</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre></pre>
</TD></TR>
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_REFERENCE"><B>REFERENCE</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre>Modules were written with the official Affymetrix documentation, which<BR>can be located at <a href="http://www.affymetrix.com/support/developer/AffxFileFormats.ZIP" target="urlWin">http://www.affymetrix.com/support/developer/AffxFileFormats.ZIP</a><BR></pre>
</TD></TR>
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_COMPATIBILITY"><B>COMPATIBILITY</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre>This module can parse the CDF files used with the Affymetrix software<BR>MAS 5 and GCOS. These files have QC information in them (such as the<BR>information of the location of the QC probesets), which is not parsed.<BR><BR>This module can also write CDF files. The support is currently pretty<BR>limited .Currently the software can only write MAS5 files (not XDA<BR>format files), and will only write files that have been parsed in<BR>previously- it cannot create CDF files from scratch. So if you have<BR>any way of making Affymetrix chips, you will just have to look<BR>elsewhere :). These limitations are caused through not parsing the QC<BR>information.<BR></pre>
</TD></TR>
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_TODO"><B>TODO</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre>Parsing QC information? Rearrange probe information to make it more usable?<BR></pre>
</TD></TR>
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_COPYRIGHT"><B>COPYRIGHT</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre>Copyright (C) 2005 by Nick James, David J Craigon, NASC, The<BR>University of Nottingham<BR><BR>This module is free software. You can copy or redistribute it under the same terms as Perl itself. <BR><BR>Affymetrix is a registered trademark of Affymetrix Inc., Santa<BR>Clara, California, USA.<BR></pre>
</TD></TR>
<TR BGCOLOR="#4492df"><TD><A NAME="_pod_AUTHORS"><B>AUTHORS</A></B></TD>
<TD><A HREF="#TOP">top</A></TD></TR><TR><TD COLSPAN="2"><pre>    <BR>Nick James (nick at arabidopsis.info)<BR><BR>David J Craigon (david at arabidopsis.info)<BR><BR>Nottingham Arabidopsis Stock Centre (<a href="http://arabidopsis.info" target="urlWin">http://arabidopsis.info</a>), University of Nottingham.<BR></pre>
</TD></TR>
</TABLE>
</body>
</html>