Add SICER peak caller.

This commit is contained in:
Daniel Blankenberg
2011-08-26 15:53:16 -04:00
parent 1f744be77d
commit 19ed039b6c
3 changed files with 333 additions and 0 deletions
+1
View File
@@ -365,6 +365,7 @@
</section>
<section name="NGS: Peak Calling" id="peak_calling">
<tool file="peak_calling/macs_wrapper.xml" />
<tool file="peak_calling/sicer_wrapper.xml" />
<tool file="peak_calling/ccat_wrapper.xml" />
<tool file="genetrack/genetrack_indexer.xml" />
<tool file="genetrack/genetrack_peak_prediction.xml" />
+156
View File
@@ -0,0 +1,156 @@
#!/usr/bin/env python
#Dan Blankenberg
"""
A wrapper script for running SICER (spatial clustering approach for the identification of ChIP-enriched regions) region caller.
"""
import sys, optparse, os, tempfile, subprocess, shutil
CHUNK_SIZE = 2**20 #1mb
VALID_BUILDS = [ 'mm8', 'mm9', 'hg18', 'hg19', 'dm2', 'dm3', 'sacCer1', 'pombe', 'rn4', 'tair8' ] #HACK! FIXME: allow using all specified builds, would currently require hacking SICER's "GenomeData.py" on the fly.
def cleanup_before_exit( tmp_dir ):
if tmp_dir and os.path.exists( tmp_dir ):
shutil.rmtree( tmp_dir )
def open_file_from_option( filename, mode = 'rb' ):
if filename:
return open( filename, mode = mode )
return None
def add_one_to_file_column( filename, column, split_char = "\t", startswith_skip = None ):
tmp_out = tempfile.TemporaryFile( mode='w+b' )
tmp_in = open( filename )
for line in tmp_in:
if startswith_skip and line.startswith( startswith_skip ):
tmp_out.write( line )
else:
fields = line.rstrip( '\n\r' ).split( split_char )
if len( fields ) <= column:
tmp_out.write( line )
else:
fields[ column ] = str( int( fields[ column ] ) + 1 )
tmp_out.write( "%s\n" % ( split_char.join( fields ) ) )
tmp_in.close()
tmp_out.seek( 0 )
tmp_in = open( filename, 'wb' )
while True:
chunk = tmp_out.read( CHUNK_SIZE )
if chunk:
tmp_in.write( chunk )
else:
break
tmp_in.close()
tmp_out.close()
def __main__():
#Parse Command Line
parser = optparse.OptionParser()
#stdout/err
parser.add_option( '', '--stdout', dest='stdout', action='store', type="string", default=None, help='If specified, the output of stdout will be written to this file.' )
parser.add_option( '', '--stderr', dest='stderr', action='store', type="string", default=None, help='If specified, the output of stderr will be written to this file.' )
parser.add_option( '', '--fix_off_by_one_errors', dest='fix_off_by_one_errors', action='store_true', default=False, help='If specified, fix off-by-one errors in output files' )
#inputs
parser.add_option( '-b', '--bed_file', dest='bed_file', action='store', type="string", default=None, help='Input ChIP BED file.' )
parser.add_option( '-c', '--control_file', dest='control_file', action='store', type="string", default=None, help='Input control BED file.' )
parser.add_option( '-d', '--dbkey', dest='dbkey', action='store', type="string", default=None, help='Input dbkey.' )
parser.add_option( '-r', '--redundancy_threshold', dest='redundancy_threshold', action='store', type="int", default=1, help='Redundancy Threshold: The number of copies of identical reads allowed in a library.' )
parser.add_option( '-w', '--window_size', dest='window_size', action='store', type="int", default=200, help='Window size: resolution of SICER algorithm. For histone modifications, one can use 200 bp' )
parser.add_option( '-f', '--fragment_size', dest='fragment_size', action='store', type="int", default=150, help='Fragment size: is for determination of the amount of shift from the beginning of a read to the center of the DNA fragment represented by the read. FRAGMENT_SIZE=150 means the shift is 75.' )
parser.add_option( '-e', '--effective_genome_fraction', dest='effective_genome_fraction', action='store', type="float", default=0.74, help='Effective genome fraction: Effective Genome as fraction of the genome size. It depends on read length.' )
parser.add_option( '-g', '--gap_size', dest='gap_size', action='store', type="int", default=600, help='Gap size: needs to be multiples of window size. Namely if the window size is 200, the gap size should be 0, 200, 400, 600, ... .' )
parser.add_option( '-o', '--error_cut_off', dest='error_cut_off', action='store', type="string", default="0.1", help='Error Cut off: FDR or E-value' ) #read as string to construct names properly
#outputs
parser.add_option( '', '--redundancy_removed_test_bed_output_file', dest='redundancy_removed_test_bed_output_file', action='store', type="string", default=None, help='test-1-removed.bed: redundancy_removed test bed file' )
parser.add_option( '', '--redundancy_removed_control_bed_output_file', dest='redundancy_removed_control_bed_output_file', action='store', type="string", default=None, help='control-1-removed.bed: redundancy_removed control bed file' )
parser.add_option( '', '--summary_graph_output_file', dest='summary_graph_output_file', action='store', type="string", default=None, help='test-W200.graph: summary graph file for test-1-removed.bed with window size 200, in bedGraph format.' )
parser.add_option( '', '--test_normalized_wig_output_file', dest='test_normalized_wig_output_file', action='store', type="string", default=None, help='test-W200-normalized.wig: the above file normalized by library size per million and converted into wig format. This file can be uploaded to the UCSC genome browser' )
parser.add_option( '', '--score_island_output_file', dest='score_island_output_file', action='store', type="string", default=None, help='test-W200-G600.scoreisland: an intermediate file for debugging usage.' )
parser.add_option( '', '--islands_summary_output_file', dest='islands_summary_output_file', action='store', type="string", default=None, help='test-W200-G600-islands-summary: summary of all candidate islands with their statistical significance.' )
parser.add_option( '', '--significant_islands_summary_output_file', dest='significant_islands_summary_output_file', action='store', type="string", default=None, help='test-W200-G600-islands-summary-FDR.01: summary file of significant islands with requirement of FDR=0.01.' )
parser.add_option( '', '--significant_islands_output_file', dest='significant_islands_output_file', action='store', type="string", default=None, help='test-W200-G600-FDR.01-island.bed: delineation of significant islands in "chrom start end read-count-from-redundancy_removed-test.bed" format' )
parser.add_option( '', '--island_filtered_output_file', dest='island_filtered_output_file', action='store', type="string", default=None, help='test-W200-G600-FDR.01-islandfiltered.bed: library of raw redundancy_removed reads on significant islands.' )
parser.add_option( '', '--island_filtered_normalized_wig_output_file', dest='island_filtered_normalized_wig_output_file', action='store', type="string", default=None, help='test-W200-G600-FDR.01-islandfiltered-normalized.wig: wig file for the island-filtered redundancy_removed reads.' )
(options, args) = parser.parse_args()
#check if valid build
assert options.dbkey in VALID_BUILDS, ValueError( "The specified build ('%s') is not available for this tool." % options.dbkey )
#everything will occur in this temp directory
tmp_dir = tempfile.mkdtemp()
#link input files into tmp_dir and build command line
bed_base_filename = 'input_bed_file'
bed_filename = '%s.bed' % bed_base_filename
os.symlink( options.bed_file, os.path.join( tmp_dir, bed_filename ) )
if options.control_file is not None:
cmd = "SICER.sh"
else:
cmd = "SICER-rb.sh"
cmd = '%s "%s" "%s"' % ( cmd, tmp_dir, bed_filename )
if options.control_file is not None:
control_base_filename = 'input_control_file'
control_filename = '%s.bed' % control_base_filename
os.symlink( options.control_file, os.path.join( tmp_dir, control_filename ) )
cmd = '%s "%s"' % ( cmd, control_filename )
cmd = '%s "%s" "%s" "%i" "%i" "%i" "%f" "%i" "%s"' % ( cmd, tmp_dir, options.dbkey, options.redundancy_threshold, options.window_size, options.fragment_size, options.effective_genome_fraction, options.gap_size, options.error_cut_off )
#set up stdout and stderr output options
stdout = open_file_from_option( options.stdout, mode = 'wb' )
stderr = open_file_from_option( options.stderr, mode = 'wb' )
#if no stderr file is specified, we'll use our own
if stderr is None:
stderr = tempfile.NamedTemporaryFile( dir=tmp_dir )
stderr.close()
stderr = open( stderr.name, 'w+b' )
proc = subprocess.Popen( args=cmd, stdout=stdout, stderr=stderr, shell=True, cwd=tmp_dir )
return_code = proc.wait()
if return_code:
stderr_target = sys.stderr
else:
stderr_target = stdout #sys.stdout
stderr_target.write( "\nAdditionally, these warnings were reported:\n" )
stderr.flush()
stderr.seek(0)
while True:
chunk = stderr.read( CHUNK_SIZE )
if chunk:
stderr_target.write( chunk )
else:
break
stderr.close()
try:
#move files to where they belong
shutil.move( os.path.join( tmp_dir,'%s-%i-removed.bed' % ( bed_base_filename, options.redundancy_threshold ) ), options.redundancy_removed_test_bed_output_file )
shutil.move( os.path.join( tmp_dir,'%s-W%i.graph' % ( bed_base_filename, options.window_size ) ), options.summary_graph_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.summary_graph_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-normalized.wig' % ( bed_base_filename, options.window_size ) ), options.test_normalized_wig_output_file )
if options.control_file is not None:
shutil.move( os.path.join( tmp_dir,'%s-%i-removed.bed' % ( control_base_filename, options.redundancy_threshold ) ), options.redundancy_removed_control_bed_output_file )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i.scoreisland' % ( bed_base_filename, options.window_size, options.gap_size ) ), options.score_island_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.score_island_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-islands-summary' % ( bed_base_filename, options.window_size, options.gap_size ) ), options.islands_summary_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.islands_summary_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-islands-summary-FDR%s' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.significant_islands_summary_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.significant_islands_summary_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-FDR%s-island.bed' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.significant_islands_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.significant_islands_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-FDR%s-islandfiltered.bed' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.island_filtered_output_file )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-FDR%s-islandfiltered-normalized.wig' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.island_filtered_normalized_wig_output_file )
else:
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-E%s.scoreisland' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.score_island_output_file )
if options.fix_off_by_one_errors: add_one_to_file_column( options.score_island_output_file, 2 )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-E%s-islandfiltered.bed' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.island_filtered_output_file )
shutil.move( os.path.join( tmp_dir,'%s-W%i-G%i-E%s-islandfiltered-normalized.wig' % ( bed_base_filename, options.window_size, options.gap_size, options.error_cut_off ) ), options.island_filtered_normalized_wig_output_file )
except Exception, e:
raise e
finally:
cleanup_before_exit( tmp_dir )
if __name__=="__main__": __main__()
+176
View File
@@ -0,0 +1,176 @@
<tool id="peakcalling_sicer" name="SICER" version="0.0.1">
<description>Statistical approach for the Identification of ChIP-Enriched Regions</description>
<command interpreter="python">sicer_wrapper.py
--bed_file '${input_bed_file}'
#if str( $input_control_file ) != 'None':
--control_file '${input_control_file}'
--significant_islands_output_file "${significant_islands_output_file}"
--islands_summary_output_file "${islands_summary_output_file}"
--significant_islands_summary_output_file "${significant_islands_summary_output_file}"
#end if
${fix_off_by_one_errors}
--dbkey '${input_bed_file.dbkey}'
--redundancy_threshold '${redundancy_threshold}'
--window_size '${window_size}'
--fragment_size '${fragment_size}'
--effective_genome_fraction '${effective_genome_fraction}'
--gap_size '${gap_size}'
--error_cut_off '${error_cut_off}'
##output files
--stdout "${output_log_file}"
--redundancy_removed_test_bed_output_file "${redundancy_removed_test_bed_output_file}"
--redundancy_removed_control_bed_output_file "${redundancy_removed_control_bed_output_file}"
--score_island_output_file "${score_island_output_file}"
--summary_graph_output_file "${summary_graph_output_file}"
--test_normalized_wig_output_file "${test_normalized_wig_output_file}"
--island_filtered_output_file "${island_filtered_output_file}"
--island_filtered_normalized_wig_output_file "${island_filtered_normalized_wig_output_file}"
</command>
<requirements>
<requirement type="package" version="1.1">SICER</requirement>
</requirements>
<inputs>
<param name="input_bed_file" type="data" format="bed" label="ChIP-Seq Tag File" >
<validator type="expression" message="SICER is not available for the genome.">value.dbkey in [ 'mm8', 'mm9', 'hg18', 'hg19', 'dm2', 'dm3', 'sacCer1', 'pombe', 'rn4', 'tair8' ]</validator>
</param>
<param name="input_control_file" type="data" format="bed" label="ChIP-Seq Control File" optional="True"> <!-- fix me, add filter to match dbkeys -->
<options>
<filter type="data_meta" ref="input_bed_file" key="dbkey" />
</options>
</param>
<param name="fix_off_by_one_errors" type="boolean" truevalue="--fix_off_by_one_errors" falsevalue="" checked="True" label="Fix off-by-one errors in output files" help="SICER creates non-standard output files, this option will fix these coordinates"/>
<param name="redundancy_threshold" type="integer" label="Redundancy Threshold" value="1" help="The number of copies of identical reads allowed in a library" />
<param name="window_size" type="integer" label="Window size" value="200" help="Resolution of SICER algorithm. For histone modifications, one can use 200 bp" />
<param name="fragment_size" type="integer" label="Fragment size" value="150" help="for determination of the amount of shift from the beginning of a read to the center of the DNA fragment represented by the read. FRAGMENT_SIZE=150 means the shift is 75." />
<param name="effective_genome_fraction" type="float" label="Effective genome fraction" value="0.74" help="Effective Genome as fraction of the genome size. It depends on read length." />
<param name="gap_size" type="integer" label="Gap size" value="600" help="Needs to be multiples of window size. Namely if the window size is 200, the gap size should be 0, 200, 400, 600, ..." />
<param name="error_cut_off" type="float" label="Statistic threshold value" value="0.01" help="FDR (with control) or E-value (without control)" />
</inputs>
<outputs>
<data name="redundancy_removed_test_bed_output_file" format="bed" label="${tool.name} on ${on_string} (test-${redundancy_threshold}-removed.bed)"/>
<data name="redundancy_removed_control_bed_output_file" format="bed" label="${tool.name} on ${on_string} (control-${redundancy_threshold}-removed.bed)">
<filter>input_control_file is not None</filter>
</data>
<data name="summary_graph_output_file" format="bedgraph" label="${tool.name} on ${on_string} (test-W${window_size}.graph)"/>
<data name="test_normalized_wig_output_file" format="wig" label="${tool.name} on ${on_string} (test-W${window_size}-normalized.wig)"/>
<data name="significant_islands_output_file" format="interval" label="${tool.name} on ${on_string} (test-W${window_size}-G${gap_size}-FDR${error_cut_off}-island.bed)">
<filter>input_control_file is not None</filter>
</data>
<data name="island_filtered_output_file" format="bed" label="${tool.name} on ${on_string} (#if str( $input_control_file ) != 'None' then ''.join( map( str, [ 'test-W', $window_size, '-G',$gap_size, '-FDR', $error_cut_off, '-islandfiltered.bed' ] ) ) else ''.join( map( str, [ 'test-W', $window_size, '-G', $gap_size, '-E', $error_cut_off, '-islandfiltered.bed' ] ) ) #)"/>
<data name="island_filtered_normalized_wig_output_file" format="wig" label="${tool.name} on ${on_string} (#if str( $input_control_file ) != 'None' then ''.join( map( str, [ 'test-W', $window_size, '-G',$gap_size, '-FDR', $error_cut_off, '-islandfiltered-normalized.wig' ] ) ) else ''.join( map( str, [ 'test-W', $window_size, '-G', $gap_size, '-E', $error_cut_off, '-islandfiltered-normalized.wig' ] ) ) #)"/>
<data name="score_island_output_file" format="interval" label="${tool.name} on ${on_string} (#if str( $input_control_file ) != 'None' then ''.join( map( str, [ 'test-W', $window_size, '-G',$gap_size, '.scoreisland' ] ) ) else ''.join( map( str, [ 'test-W', $window_size, '-G', $gap_size, '-E', $error_cut_off, '.scoreisland' ] ) ) #)"/>
<data name="islands_summary_output_file" format="interval" label="${tool.name} on ${on_string} (test-W${window_size}-G${gap_size}-islands-summary)">
<filter>input_control_file is not None</filter>
</data>
<data name="significant_islands_summary_output_file" format="interval" label="${tool.name} on ${on_string} (test-W${window_size}-G${gap_size}-islands-summary-FDR${error_cut_off})">
<filter>input_control_file is not None</filter>
</data>
<data name="output_log_file" format="txt" label="${tool.name} on ${on_string} (log)"/>
</outputs>
<tests>
<test>
<param name="input_bed_file" value="chipseq_enriched.bed.gz" ftype="bed" dbkey="mm8" />
<param name="input_control_file" />
<param name="fix_off_by_one_errors" />
<param name="redundancy_threshold" value="1" />
<param name="window_size" value="200" />
<param name="fragment_size" value="150" />
<param name="effective_genome_fraction" value="0.74" />
<param name="gap_size" value="600" />
<param name="error_cut_off" value="0.01" />
<output name="redundancy_removed_test_bed_output_file" file="peakcalling_sicer/test_1/test-1-removed.bed" />
<output name="summary_graph_output_file" file="peakcalling_sicer/test_1/test-W200.graph" />
<output name="test_normalized_wig_output_file" file="peakcalling_sicer/test_1/test-W200-normalized.wig" />
<output name="island_filtered_output_file" file="peakcalling_sicer/test_1/test-W200-G600-E0.01-islandfiltered.bed" />
<output name="island_filtered_normalized_wig_output_file" file="peakcalling_sicer/test_1/test-W200-G600-E0.01-islandfiltered-normalized.wig" />
<output name="score_island_output_file" file="peakcalling_sicer/test_1/test-W200-G600-E0.01.scoreisland" />
<output name="output_log_file" file="peakcalling_sicer/test_1/output_log_file.contains" compare="contains"/>
</test>
<test>
<param name="input_bed_file" value="chipseq_enriched.bed.gz" ftype="bed" dbkey="mm8" />
<param name="input_control_file" value="chipseq_input.bed.gz" ftype="bed" dbkey="mm8" />
<param name="fix_off_by_one_errors" />
<param name="redundancy_threshold" value="1" />
<param name="window_size" value="200" />
<param name="fragment_size" value="150" />
<param name="effective_genome_fraction" value="0.74" />
<param name="gap_size" value="600" />
<param name="error_cut_off" value="0.01" />
<output name="redundancy_removed_test_bed_output_file" file="peakcalling_sicer/test_2/test-1-removed.bed" />
<output name="redundancy_removed_control_bed_output_file" file="peakcalling_sicer/test_2/control-1-removed.bed" />
<output name="summary_graph_output_file" file="peakcalling_sicer/test_2/test-W200.graph" />
<output name="test_normalized_wig_output_file" file="peakcalling_sicer/test_2/test-W200-normalized.wig" />
<output name="significant_islands_output_file" file="peakcalling_sicer/test_2/test-W200-G600-FDR0.01-island.bed" />
<output name="island_filtered_output_file" file="peakcalling_sicer/test_2/test-W200-G600-FDR0.01-islandfiltered.bed" />
<output name="island_filtered_normalized_wig_output_file" file="peakcalling_sicer/test_2/test-W200-G600-FDR0.01-islandfiltered-normalized.wig" />
<output name="score_island_output_file" file="peakcalling_sicer/test_2/test-W200-G600.scoreisland" />
<output name="islands_summary_output_file" file="peakcalling_sicer/test_2/test-W200-G600-islands-summary" />
<output name="significant_islands_summary_output_file" file="peakcalling_sicer/test_2/test-W200-G600-islands-summary-FDR0.01" />
<output name="output_log_file" file="peakcalling_sicer/test_2/output_log_file.contains" compare="contains"/>
</test>
<test>
<param name="input_bed_file" value="chipseq_enriched.bed.gz" ftype="bed" dbkey="mm8" />
<param name="input_control_file" value="chipseq_input.bed.gz" ftype="bed" dbkey="mm8" />
<param name="fix_off_by_one_errors" value="True" />
<param name="redundancy_threshold" value="1" />
<param name="window_size" value="200" />
<param name="fragment_size" value="150" />
<param name="effective_genome_fraction" value="0.74" />
<param name="gap_size" value="600" />
<param name="error_cut_off" value="0.01" />
<output name="redundancy_removed_test_bed_output_file" file="peakcalling_sicer/test_2/test-1-removed.bed" />
<output name="redundancy_removed_control_bed_output_file" file="peakcalling_sicer/test_2/control-1-removed.bed" />
<output name="summary_graph_output_file" file="peakcalling_sicer/test_3/test-W200.graph" />
<output name="test_normalized_wig_output_file" file="peakcalling_sicer/test_2/test-W200-normalized.wig" />
<output name="significant_islands_output_file" file="peakcalling_sicer/test_3/test-W200-G600-FDR0.01-island.bed" />
<output name="island_filtered_output_file" file="peakcalling_sicer/test_2/test-W200-G600-FDR0.01-islandfiltered.bed" />
<output name="island_filtered_normalized_wig_output_file" file="peakcalling_sicer/test_2/test-W200-G600-FDR0.01-islandfiltered-normalized.wig" />
<output name="score_island_output_file" file="peakcalling_sicer/test_3/test-W200-G600.scoreisland" />
<output name="islands_summary_output_file" file="peakcalling_sicer/test_3/test-W200-G600-islands-summary" />
<output name="significant_islands_summary_output_file" file="peakcalling_sicer/test_3/test-W200-G600-islands-summary-FDR0.01" />
<output name="output_log_file" file="peakcalling_sicer/test_2/output_log_file.contains" compare="contains"/>
</test>
<test>
<param name="input_bed_file" value="chipseq_enriched.bed.gz" ftype="bed" dbkey="mm8" />
<param name="input_control_file" />
<param name="fix_off_by_one_errors" value="True" />
<param name="redundancy_threshold" value="1" />
<param name="window_size" value="200" />
<param name="fragment_size" value="150" />
<param name="effective_genome_fraction" value="0.74" />
<param name="gap_size" value="600" />
<param name="error_cut_off" value="0.01" />
<output name="redundancy_removed_test_bed_output_file" file="peakcalling_sicer/test_1/test-1-removed.bed" />
<output name="summary_graph_output_file" file="peakcalling_sicer/test_4/test-W200.graph" />
<output name="test_normalized_wig_output_file" file="peakcalling_sicer/test_1/test-W200-normalized.wig" />
<output name="island_filtered_output_file" file="peakcalling_sicer/test_1/test-W200-G600-E0.01-islandfiltered.bed" />
<output name="island_filtered_normalized_wig_output_file" file="peakcalling_sicer/test_1/test-W200-G600-E0.01-islandfiltered-normalized.wig" />
<output name="score_island_output_file" file="peakcalling_sicer/test_4/test-W200-G600-E0.01.scoreisland" />
<output name="output_log_file" file="peakcalling_sicer/test_1/output_log_file.contains" compare="contains"/>
</test>
</tests>
<help>
**What it does**
SICER first and foremost is a filtering tool. Its main functions are::
1. Delineation of the significantly ChIP-enriched regions, which can be used to associate with other genomic landmarks.
2. Identification of reads on the ChIP-enriched regions, which can be used for profiling and other quantitative analysis.
View the original SICER documentation: http://home.gwu.edu/~wpeng/Software.htm.
------
.. class:: warningmark
By default, SICER creates files that do not conform to standards (e.g. BED files are closed, not half-open). This could have implications for downstream analysis.
To force the output of SICER to be formatted properly to standard file formats, check the **"Fix off-by-one errors in output files"** option.
------
**Citation**
For the underlying tool, please cite `Zang C, Schones DE, Zeng C, Cui K, Zhao K, Peng W. A clustering approach for identification of enriched domains from histone modification ChIP-Seq data. Bioinformatics. 2009 Aug 1;25(15):1952-8. &lt;http://www.ncbi.nlm.nih.gov/pubmed/19505939&gt;`_
</help>
</tool>