annotate covacs_VariantRecalibrator.xml @ 10:2a59f20b097f draft default tip

Uploaded
author elixir-it
date Wed, 02 Oct 2019 04:31:44 -0400
parents 3b3475d221a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
1 <tool id="covacs_VarianRecalibrator" name="covacs_VariantRecalibrator" version="3.8">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
2 <description>GATK VariantRecalibrator wrapper Version = 3.8</description>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
3 <macros>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
4 <import>bed_macros.xml</import>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
5 <import>vcf_macros.xml</import>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
6 </macros>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
7 <requirements>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
8 <requirement type="package" version="3.8" >gatk</requirement>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
9 </requirements>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
10 <command>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
11 <![CDATA[
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
12 ### call the .sh to untar the package
10
2a59f20b097f Uploaded
elixir-it
parents: 8
diff changeset
13 bash $__tool_directory__/mv_untar_gatk.sh &> $log &&
0
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
14
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
15 ##sym link to run GATK
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
16 #if $bed_source.bed_source_selector == "history" and $bed_source.bed_history
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
17 ln -s $bed_source.bed_history region.bed &&
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
18 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
19
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
20 ln -s $input1 input1.vcf &&
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
21
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
22 ##GATK tool call
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
23 java -jar \$CONDA_PREFIX/../../GenomeAnalysisTK.jar -T VariantRecalibrator
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
24
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
25
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
26
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
27 #if $bed_source.bed_source_selector == "history" and $bed_source.bed_history
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
28 -L region.bed
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
29 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
30 #if $bed_source.bed_source_selector == "cached"
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
31 -L $bed_source.bed_cached.fields.path
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
32 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
33
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
34
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
35
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
36 -ip $ip
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
37 ##call chose genome from covacs_gatk_indexes.loc
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
38 -R $ref_file.fields.path
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
39
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
40 ##vcf input parameter
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
41
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
42 -input input1.vcf
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
43
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
44 ## for that permit to insert different resources
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
45
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
46 #for $r in $resource#
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
47
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
48 #if $r.vcf_source.vcf_source_selector == "history" and $r.vcf_source.vcf_history
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
49
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
50 --resource:${r.nameresource},known=${r.known.value},training=${r.training.value},truth=${r.truth.value},prior=${r.prior.value} ${r.vcf_source.vcf_history}
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
51 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
52
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
53 #if $r.vcf_source.vcf_source_selector == "cached"
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
54
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
55 --resource:${r.nameresource},known=${r.known.value},training=${r.training.value},truth=${r.truth.value},prior=${r.prior.value} ${r.vcf_source.vcf_cached.fields.path}
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
56 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
57
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
58 #end for
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
59
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
60 -mode $mode_type.mode
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
61 ##chose between INDEL and SNP call
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
62
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
63 #if $mode_type.mode == "INDEL"
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
64 --minNumBadVariants $mode_type.minNumBadVariants
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
65 --maxGaussians $mode_type.maxGaussian
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
66 -mNG $mode_type.mNG
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
67 #end if
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
68
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
69 ## for that permit to insert different resources
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
70
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
71 #for $a in $an#
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
72
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
73 -an ${a.an_name.value}
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
74
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
75 #end for
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
76
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
77 ## for that permit to insert different resources
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
78
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
79 #for $t in $tranches_name#
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
80
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
81 -tranche ${t.tranches.value}
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
82 #end for
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
83
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
84 ##outputs
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
85
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
86 -recalFile $recal
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
87 -tranchesFile $tranches
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
88
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
89 2> $log
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
90 ]]>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
91 </command>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
92 <inputs>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
93 <param name="ref_file" type="select" label="Using indexed reference genome" help="Select indexed genome from the list">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
94 <options from_data_table="covacs_gatk_indexes">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
95 <filter type="sort_by" column="2" />
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
96 <validator type="no_options" message="No indexes are available" />
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
97 </options>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
98 <validator type="no_options" message="A built-in reference genome is not available for the build associated with the selected input file"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
99 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
100 <param format="vcf" name="input1" label="VCF of raw input variants to be recalibrated" type="data" optional="true" />
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
101 <expand macro="bed_loc"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
102 <param name="ip" type="integer" value="100" help="Amount of padding (in bp) to add to each interval"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
103 <repeat name="resource" title="-resource" help="A list of sites for which to apply a prior probability of being correct but which aren't used by the algorithm (training and truth sets are required to run)">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
104 <expand macro="vcf_loc"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
105 <param name="nameresource" label="name of the resource" type="select" >
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
106 <option value="hapmap">hapmap</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
107 <option value="omni">omni</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
108 <option value="1000G">1000G</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
109 <option value="mills">mills</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
110 <option value="dbsnp">dbsnp</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
111 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
112 <param name="known" type="select" display="radio" help="Known - The program only uses known sites for reporting purposes (to indicate whether variants are already known or novel)" >
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
113 <option value="true">true</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
114 <option value="false">false</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
115 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
116 <param name="training" type="select" display="radio" help="Training - The program builds the Gaussian mixture model using input variants that overlap with these training sites.">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
117 <option value="true">true</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
118 <option value="false">false</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
119 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
120 <param name="truth" type="select" display="radio" help="Truth - The program uses these truth sites to determine where to set the cutoff in VQSLOD sensitivity">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
121 <option value="true">true</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
122 <option value="false">false</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
123 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
124 <param name="prior" value="10.0" min="0" max="100.0" type="float"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
125 </repeat>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
126 <repeat name="an" title="-an" help="Annotation which should used for calculations">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
127 <param name="an_name" label="annotation name" type="select" help="The name of the annotation which should used for calculations">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
128 <option value="DP">DP</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
129 <option value="QD">QD</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
130 <option value="MQRankSum">MQRankSum</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
131 <option value="ReadPosRankSum">ReadPosRankSum</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
132 <option value="FS">FS</option>
8
3b3475d221a4 Uploaded
elixir-it
parents: 0
diff changeset
133 <option value="MQ">MQ</option>
0
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
134 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
135 </repeat>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
136 <repeat name="tranches_name" title="tranches" help="The levels of truth sensitivity at which to slice the data. (in percent, that is 1.0 for 1 percent)">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
137 <param name="tranches" value="98.0" min="0" max="100.0" type="float"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
138 </repeat>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
139 <conditional name="mode_type">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
140 <param name="mode" type="select" display="radio" help=" Recalibration mode to employ (SNP|INDEL)">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
141 <option value="SNP">snp</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
142 <option value="INDEL">INDEL</option>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
143 </param>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
144 <when value="INDEL">
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
145 <param name="maxGaussian" type="integer" value="4"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
146 <param name="minNumBadVariants" type="integer" value="5000"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
147 <param name="mNG" type="integer" value="2"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
148 </when>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
149 </conditional>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
150 </inputs>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
151 <outputs>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
152 <data format="txt" name="recal" from_work_dir="recal" label="${tool.name} on ${on_string}:recal"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
153 <data format="txt" name="tranches" from_work_dir="tranches" label="${tool.name} on ${on_string}:tranches"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
154 <data format="txt" name="log" label="log"/>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
155 </outputs>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
156 <help>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
157 .. class:: warningmark
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
158
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
159 **IMPORTANT** to get the wrapper ready to start the admin user have to download gatk GATK version 3.8 from the broadinstitute site https://software.broadinstitute.org/gatk/download/archive and then move it in the conda_prefix folder, the path of the conda_prefix is written in the galaxy.ini(or .yml) file
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
160
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
161 **more informations** at https://software.broadinstitute.org/gatk/documentation/tooldocs/3.8-0/org_broadinstitute_gatk_tools_walkers_variantrecalibration_VariantRecalibrator.php
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
162
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
163 -----
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
164
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
165 **Implemented options** VariantRecalibrator:
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
166
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
167 **-L** : One or more genomic intervals over which to operate(file.bed)
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
168
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
169 **-ip** Amount of padding (in bp) to add to each interval
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
170
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
171 **--resource:NAME,known=true/false,training=true/false,truth=true/false,prior=float $file** :A list of sites for which to apply a prior probability of being correct but which aren't used by the algorithm (training and truth sets are required to run)
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
172
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
173 **-mode** : Recalibration mode to employ (SNP|INDEL)
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
174
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
175 **-an** : annotations which should used for calculations
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
176
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
177 **-tranche** The levels of truth sensitivity at which to slice the data. (in percent, that is 1.0 for 1 percent)
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
178
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
179 **in case of indels mode**
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
180
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
181 **--minNumBadVariants** : Minimum number of bad variants
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
182
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
183 **--maxGaussians** : Max number of Gaussians for the positive model
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
184
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
185 **-mNG** : Max number of Gaussians for the negative model
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
186
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
187 **OUTPUTS**
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
188
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
189 -recalFile
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
190
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
191 -tranchesFile
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
192
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
193 -----
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
194
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
195 .. class:: infomark
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
196
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
197 **Recommended CoVaCS command**
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
198
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
199 **-ip** 100
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
200
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
201 **-R** genome.fa
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
202
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
203 **-input** VCF
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
204
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
205 **-resource**:hapmap,known=false,training=true,truth=true,prior=15.0 hapmap.vcf
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
206
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
207 **-resource**:omni,known=false,training=true,truth=true,prior=12.0 omni.vcf
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
208
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
209 **-resource**:1000G,known=false,training=false,truth=false,prior=8.0 1000G.vcf
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
210
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
211 **-resource**:dbsnp,known=true,training=false,truth=false,prior=2.0 dbsnp.vcf
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
212
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
213 **-mode** SNP
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
214
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
215 **-an** DP **-an** QD **-an** MQ **-an** MQRankSum **-an** ReadPosRankSum **-an** FS
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
216
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
217 **-tranche** 100.0 **-tranche** 99.5 **-tranche** 99.0 **-tranche** 98.5 **-tranche** 90.0
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
218
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
219 </help>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
220 <citations>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
221 <citation type="doi">10.1186/s12864-018-4508-1</citation>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
222 </citations>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
223 </tool>
3d969c748317 Uploaded
elixir-it
parents:
diff changeset
224