Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mirrors
biopet.biopet
Commits
1337c894
Commit
1337c894
authored
Nov 30, 2016
by
Peter van 't Hof
Browse files
Merge branch 'feature-xhmm' into 'develop'
Feature xhmm See merge request !479
parents
18cee8f8
90815888
Changes
16
Hide whitespace changes
Inline
Side-by-side
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/DepthOfCoverage.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.gatk
import
java.io.File
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Argument
,
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
DepthOfCoverage
(
val
root
:
Configurable
)
extends
CommandLineGATK
{
def
analysis_type
=
"DepthOfCoverage"
/*
This tool creates several files with `out` as the root
*/
@Output
(
fullName
=
"out"
,
shortName
=
"o"
,
doc
=
"File name base to which coverage metric should be written"
)
var
out
:
File
=
_
private
var
_summaryFile
:
File
=
_
private
var
_statisticsFile
:
File
=
_
private
var
_intervalSummaryFile
:
File
=
_
private
var
_intervalStatisticsFile
:
File
=
_
private
var
_geneSummaryFile
:
File
=
_
private
var
_geneStatisticsFile
:
File
=
_
private
var
_cumulativeCoverageCountsFile
:
File
=
_
private
var
_cumulativeCoverageProportionsFile
:
File
=
_
@Output
var
summaryFile
=
_summaryFile
@Output
var
statisticsFile
=
_statisticsFile
@Output
var
intervalSummaryFile
=
_intervalSummaryFile
@Output
var
intervalStatisticsFile
=
_intervalStatisticsFile
@Output
var
geneSummaryFile
=
_geneSummaryFile
@Output
var
geneStatisticsFile
=
_geneStatisticsFile
@Output
var
culumativeCoverageCountsFile
=
_cumulativeCoverageCountsFile
@Output
var
cumulativeCoverageProportionsFile
=
_cumulativeCoverageProportionsFile
@Input
(
required
=
false
)
var
calculateCoverageOverGenes
:
Option
[
File
]
=
config
(
"calculate_coverage_over_genes"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
countType
:
Option
[
String
]
=
config
(
"count_type"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
maxBaseQuality
:
Option
[
Int
]
=
config
(
"max_base_quality"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
maxMappingQuality
:
Option
[
Int
]
=
config
(
"max_mapping_quality"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
minBaseQuality
:
Option
[
Int
]
=
config
(
"min_base_quality"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
minMappingQuality
:
Option
[
Int
]
=
config
(
"min_mapping_quality"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
outputFormat
:
Option
[
String
]
=
config
(
"output_format"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
partitionType
:
Option
[
String
]
=
config
(
"partition_type"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
omitDepthOutputAtEachBase
:
Boolean
=
config
(
"omit_depth_output_at_each_base"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
omitIntervalStatistics
:
Boolean
=
config
(
"omit_interval_statistics"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
omitLocusTable
:
Boolean
=
config
(
"omit_locus_table"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
omitPerSampleStats
:
Boolean
=
config
(
"omit_per_sample_stats"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
printBaseCounts
:
Boolean
=
config
(
"print_base_counts"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
nBins
:
Option
[
Int
]
=
config
(
"n_bins"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
start
:
Option
[
Int
]
=
config
(
"start"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
stop
:
Option
[
Int
]
=
config
(
"stop"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
summaryCoverageThreshold
:
Option
[
Int
]
=
config
(
"summary_coverage_threshold"
,
namespace
=
"depth_of_coverage"
,
default
=
None
)
var
ignoreDeletionSites
:
Boolean
=
config
(
"ignore_deletion_sites"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
includeDeletions
:
Boolean
=
config
(
"include_deletions"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
includeRefNSites
:
Boolean
=
config
(
"include_ref_n_sites"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
var
printBinEndpointsAndExit
:
Boolean
=
config
(
"print_bin_endpoint_and_exit"
,
namespace
=
"depth_of_coverage"
,
default
=
false
)
override
def
beforeGraph
()
=
{
super
.
beforeGraph
()
if
(
out
==
null
)
{
throw
new
IllegalStateException
(
"You must set the <out> variable"
)
}
_summaryFile
=
new
File
(
out
+
".sample_summary"
)
_statisticsFile
=
new
File
(
out
+
".sample_statistics"
)
_intervalSummaryFile
=
new
File
(
out
+
".sample_interval_summary"
)
_intervalStatisticsFile
=
new
File
(
out
+
".sample_interval_statistics"
)
_geneSummaryFile
=
new
File
(
out
+
".sample_gene_summary"
)
_geneStatisticsFile
=
new
File
(
out
+
".sample_gene_statistics"
)
_cumulativeCoverageCountsFile
=
new
File
(
out
+
".sample_cumulative_coverage_counts"
)
_cumulativeCoverageProportionsFile
=
new
File
(
out
+
".sample_cumulative_coverage_proportions"
)
}
override
def
cmdLine
=
{
super
.
cmdLine
+
required
(
"--out"
,
out
)
+
optional
(
"--calculateCoverageOverGenes"
,
calculateCoverageOverGenes
)
+
optional
(
"--countType"
,
countType
)
+
optional
(
"--maxBaseQuality"
,
maxBaseQuality
)
+
optional
(
"--maxMappingQuality"
,
maxMappingQuality
)
+
optional
(
"--minBaseQuality"
,
minBaseQuality
)
+
optional
(
"--minMappingQuality"
,
minMappingQuality
)
+
optional
(
"--outputFormat"
,
outputFormat
)
+
optional
(
"--partitionType"
,
partitionType
)
+
conditional
(
omitDepthOutputAtEachBase
,
"--omitDepthOutputAtEachBase"
)
+
conditional
(
omitIntervalStatistics
,
"--omitIntervalStatistics"
)
+
conditional
(
omitLocusTable
,
"--omitLocusTable"
)
+
conditional
(
omitPerSampleStats
,
"--omitPerSampleStats"
)
+
conditional
(
printBaseCounts
,
"--printBaseCounts"
)
+
optional
(
"--nBins"
,
nBins
)
+
optional
(
"--start"
,
start
)
+
optional
(
"--stop"
,
stop
)
+
optional
(
"--summaryCoverageThreshold"
,
summaryCoverageThreshold
)
+
conditional
(
ignoreDeletionSites
,
"--ignoreDeletionSites"
)
+
conditional
(
includeDeletions
,
"--includeDeletions"
)
+
conditional
(
includeRefNSites
,
"--includeRefNSites"
)
+
conditional
(
printBinEndpointsAndExit
,
"--printBinEndPointsAndExit"
)
}
}
object
DepthOfCoverage
{
def
apply
(
root
:
Configurable
,
bamFile
:
List
[
File
],
outFile
:
File
,
targets
:
List
[
File
])
:
DepthOfCoverage
=
{
val
dp
=
new
DepthOfCoverage
(
root
)
dp
.
input_file
=
bamFile
dp
.
intervals
=
targets
dp
.
out
=
outFile
dp
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/Xhmm.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.core.
{
BiopetCommandLineFunction
,
Version
}
/**
* Created by Sander Bollen on 23-11-16.
*
* Generic abstract class for XHMM commands
*/
abstract
class
Xhmm
extends
BiopetCommandLineFunction
with
Version
{
executable
=
config
(
"exe"
,
namespace
=
"xhmm"
,
default
=
"xhmm"
)
var
discoverParamsFile
:
File
=
config
(
"discover_params"
,
namespace
=
"xhmm"
)
def
versionCommand
=
executable
+
" --version"
def
versionRegex
=
"""xhmm (.*)"""
.
r
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmDiscover.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.core.summary.Summarizable
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Argument
,
Input
,
Output
}
import
scala.io.Source
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmDiscover
(
val
root
:
Configurable
)
extends
Xhmm
with
Summarizable
{
@Input
var
inputMatrix
:
File
=
_
@Output
var
outputXcnv
:
File
=
_
@Input
var
r
:
File
=
_
private
var
_outputXcnvAuxFile
:
File
=
_
@Output
var
outputXcnvAuxFile
=
_outputXcnvAuxFile
var
xhmmAnalysisName
:
String
=
_
override
def
beforeGraph
()
=
{
super
.
beforeGraph
()
if
(
outputXcnv
==
null
)
{
throw
new
IllegalStateException
(
"Must set output file"
)
}
_outputXcnvAuxFile
=
new
File
(
outputXcnv
.
getAbsolutePath
+
".aux"
)
}
def
cmdLine
=
{
executable
+
required
(
"--discover"
)
+
required
(
"-r"
,
inputMatrix
)
+
required
(
"-R"
,
r
)
+
required
(
"-c"
,
outputXcnv
)
+
required
(
"-a"
,
outputXcnvAuxFile
)
+
required
(
"-p"
,
discoverParamsFile
)
+
required
(
"-s"
,
xhmmAnalysisName
)
}
case
class
XcnvLine
(
sample
:
String
,
cnvType
:
String
,
location
:
String
)
def
summaryFiles
:
Map
[
String
,
File
]
=
Map
()
def
summaryStats
:
Map
[
String
,
Any
]
=
{
val
lines
=
Source
.
fromFile
(
outputXcnv
).
getLines
().
filter
(
p
=>
!
p
.
startsWith
(
"SAMPLE"
)).
map
(
x
=>
x
.
split
(
"\t"
)).
map
(
x
=>
XcnvLine
(
x
(
0
),
x
(
1
),
x
(
2
))).
toList
val
samples
=
lines
.
map
(
_
.
sample
)
samples
.
map
{
x
=>
val
sampleLines
=
lines
.
filter
(
_
.
sample
==
x
)
x
->
Map
(
"DEL"
->
sampleLines
.
count
(
_
.
cnvType
==
"DEL"
),
"DUP"
->
sampleLines
.
count
(
_
.
cnvType
==
"DUP"
))
}.
toMap
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmGenotype.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.core.Reference
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Argument
,
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmGenotype
(
val
root
:
Configurable
)
extends
Xhmm
with
Reference
{
@Input
var
inputMatrix
:
File
=
_
@Input
var
inputXcnv
:
File
=
_
@Output
var
outputVcf
:
File
=
_
@Input
var
r
:
File
=
_
@Input
var
f
:
File
=
_
override
def
beforeGraph
()
=
{
super
.
beforeGraph
()
if
(
f
==
null
)
{
f
=
referenceFasta
()
}
}
def
cmdLine
=
{
executable
+
required
(
"--genotype"
)
+
required
(
"-p"
,
discoverParamsFile
)
+
required
(
"-r"
,
inputMatrix
)
+
required
(
"-R"
,
r
)
+
required
(
"-g"
,
inputXcnv
)
+
required
(
"-F"
,
f
)
+
required
(
"-v"
,
outputVcf
)
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmMatrix.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Argument
,
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmMatrix
(
val
root
:
Configurable
)
extends
Xhmm
{
@Input
var
inputMatrix
:
File
=
_
@Output
var
outputMatrix
:
File
=
_
@Output
(
required
=
false
)
var
outputExcludedTargets
:
Option
[
File
]
=
None
@Output
(
required
=
false
)
var
outputExcludedSamples
:
Option
[
File
]
=
None
@Input
(
required
=
false
)
var
inputExcludeTargets
:
List
[
File
]
=
Nil
@Input
(
required
=
false
)
var
inputExcludeSamples
:
List
[
File
]
=
Nil
var
minTargetSize
:
Int
=
config
(
"min_target_size"
,
namespace
=
"xhmm_matrix"
,
default
=
10
)
var
maxTargetSize
:
Int
=
config
(
"max_target_size"
,
namespace
=
"xhmm_matrix"
,
default
=
10000
)
var
minMeanTargetRD
:
Int
=
config
(
"min_mean_target_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
10
)
var
maxMeanTargetRD
:
Int
=
config
(
"max_mean_target_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
500
)
var
minMeanSampleRD
:
Int
=
config
(
"min_mean_sample_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
25
)
var
maxMeanSampleRD
:
Int
=
config
(
"max_mean_sample_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
200
)
var
maxSdSampleRD
:
Int
=
config
(
"max_sd_sample_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
150
)
var
maxsdTargetRD
:
Int
=
config
(
"max_sd_target_rd"
,
namespace
=
"xhmm_matrix"
,
default
=
30
)
var
centerData
:
Boolean
=
false
var
centerType
:
String
=
"sample"
var
zScoreData
:
Boolean
=
false
private
def
subCmdLine
=
{
if
(
inputExcludeSamples
.
nonEmpty
&&
inputExcludeTargets
.
nonEmpty
)
{
repeat
(
"--excludeTargets"
,
inputExcludeTargets
)
+
repeat
(
"--excludeSamples"
,
inputExcludeSamples
)
}
else
if
(
centerData
&&
zScoreData
)
{
conditional
(
centerData
,
"--centerData"
)
+
required
(
"--centerType"
,
centerType
)
+
conditional
(
zScoreData
,
"--zScoreData"
)
+
required
(
"--maxSdTargetRD"
,
maxsdTargetRD
)
}
else
{
required
(
"--minTargetSize"
,
minTargetSize
)
+
required
(
"--maxTargetSize"
,
maxTargetSize
)
+
required
(
"--minMeanTargetRD"
,
minMeanTargetRD
)
+
required
(
"--maxMeanTargetRD"
,
maxMeanTargetRD
)
+
required
(
"--minMeanSampleRD"
,
minMeanSampleRD
)
+
required
(
"--maxMeanSampleRD"
,
maxMeanSampleRD
)
+
required
(
"--maxSdSampleRD"
,
maxSdSampleRD
)
}
}
def
cmdLine
=
{
executable
+
required
(
"--matrix"
)
+
required
(
"-r"
,
inputMatrix
)
+
required
(
"-o"
,
outputMatrix
)
+
optional
(
"--outputExcludedTargets"
,
outputExcludedTargets
)
+
optional
(
"--outputExcludedSamples"
,
outputExcludedSamples
)
+
subCmdLine
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmMergeGatkDepths.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmMergeGatkDepths
(
val
root
:
Configurable
)
extends
Xhmm
{
@Input
(
doc
=
"List of input depths files"
)
var
gatkDepthsFiles
:
List
[
File
]
=
Nil
@Output
(
doc
=
"Merged output file in XHMM format"
)
var
output
:
File
=
_
def
cmdLine
=
{
executable
+
required
(
"--mergeGATKdepths"
)
+
repeat
(
"--GATKdepths"
,
gatkDepthsFiles
)
+
required
(
"-o"
,
output
)
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmNormalize.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Argument
,
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmNormalize
(
val
root
:
Configurable
)
extends
Xhmm
{
@Input
var
inputMatrix
:
File
=
_
@Input
var
pcaFile
:
File
=
_
@Output
var
normalizeOutput
:
File
=
_
var
normalizeMethod
:
String
=
config
(
"normalize_method"
,
namespace
=
"xhmm_normalize"
,
default
=
"PVE_mean"
)
var
pveFactor
:
Float
=
config
(
"pve_mean_factor"
,
namespace
=
"xhmm_normalize"
,
default
=
0.7
)
def
cmdLine
=
{
executable
+
required
(
"--normalize"
)
+
required
(
"-r"
,
inputMatrix
)
+
required
(
"--PCAfiles"
,
pcaFile
)
+
required
(
"--normalizeOutput"
,
normalizeOutput
)
+
required
(
"--PCnormalizeMethod"
,
normalizeMethod
)
+
required
(
"--PVE_mean_factor"
,
pveFactor
)
}
}
biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/xhmm/XhmmPca.scala
0 → 100644
View file @
1337c894
package
nl.lumc.sasc.biopet.extensions.xhmm
import
java.io.File
import
nl.lumc.sasc.biopet.utils.config.Configurable
import
org.broadinstitute.gatk.utils.commandline.
{
Input
,
Output
}
/**
* Created by Sander Bollen on 23-11-16.
*/
class
XhmmPca
(
val
root
:
Configurable
)
extends
Xhmm
{
@Input
var
inputMatrix
:
File
=
_
@Output
(
required
=
true
)
var
pcaFile
:
File
=
_
def
cmdLine
=
{
executable
+
required
(
"--PCA"
)
+
required
(
"-r"
,
inputMatrix
)
+
required
(
"--PCAfiles"
,
pcaFile
)
}
}
biopet-extensions/src/test/resources/test.xcnv
0 → 100644
View file @
1337c894
SAMPLE CNV INTERVAL KB CHR MID_BP TARGETS NUM_TARG Q_EXACT Q_SOME Q_NON_DIPLOID Q_START Q_STOP MEAN_RD MEAN_ORIG_RD
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_01 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_02 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DEL NA NA NA NA NA NA NA NA NA NA NA NA NA
Sample_03 DUP NA NA NA NA NA NA NA NA NA NA NA NA NA