Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a feature to remove empty .janno columns with rectify #326

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src-executables/Main-trident.hs
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ rectifyOptParser = RectifyOptions <$> parseBasePaths
<*> parseMaybePackageVersionUpdate
<*> parseChecksumsToRectify
<*> parseMaybeContributors
<*> parseJannoRemoveEmptyCols
<*> parseOnlyLatest

validateOptParser :: OP.Parser ValidateOptions
Expand Down
6 changes: 6 additions & 0 deletions src/Poseidon/CLI/OptparseApplicativeParsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,12 @@
Left p -> Left (showParsecErr p)
Right x -> Right x

parseJannoRemoveEmptyCols :: OP.Parser Bool
parseJannoRemoveEmptyCols = OP.switch (
OP.long "jannoRemoveEmpty" <>
OP.help "Reorder the .janno file and remove empty colums. \

Check warning on line 242 in src/Poseidon/CLI/OptparseApplicativeParsers.hs

View check run for this annotation

Codecov / codecov/patch

src/Poseidon/CLI/OptparseApplicativeParsers.hs#L240-L242

Added lines #L240 - L242 were not covered by tests
\Remember to pair this option with --checksumJanno to also update the checksum."
)

parseMaybeLog :: OP.Parser (Maybe String)
parseMaybeLog = OP.option (Just <$> OP.str) (
Expand Down
20 changes: 17 additions & 3 deletions src/Poseidon/CLI/Rectify.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,19 @@
renderNameWithVersion)
import Poseidon.GenotypeData (GenotypeDataSpec (..),
GenotypeFileSpec (..))
import Poseidon.Janno (writeJannoFileWithoutEmptyCols)
import Poseidon.Package (PackageReadOptions (..),
PoseidonPackage (..),
defaultPackageReadOptions,
readPoseidonPackageCollection,
writePoseidonPackage)
import Poseidon.Utils (PoseidonIO, getChecksum, logDebug,
logInfo)
logInfo, logWarning)
import Poseidon.Version (VersionComponent (..),
updateThreeComponentVersion)

import Control.DeepSeq ((<$!!>))
import Control.Monad (when)
import Control.Monad.IO.Class (MonadIO, liftIO)
import Data.List (nub)
import Data.Maybe (fromJust)
Expand All @@ -36,6 +38,7 @@
, _rectifyPackageVersionUpdate :: Maybe PackageVersionUpdate
, _rectifyChecksums :: ChecksumsToRectify
, _rectifyNewContributors :: Maybe [ContributorSpec]
, _rectifyJannoRemoveEmptyCols :: Bool

Check warning on line 41 in src/Poseidon/CLI/Rectify.hs

View check run for this annotation

Codecov / codecov/patch

src/Poseidon/CLI/Rectify.hs#L41

Added line #L41 was not covered by tests
, _rectifyOnlyLatest :: Bool
}

Expand All @@ -55,7 +58,12 @@
}

runRectify :: RectifyOptions -> PoseidonIO ()
runRectify (RectifyOptions baseDirs ignorePosVer newPosVer pacVerUpdate checksumUpdate newContributors onlyLatest) = do
runRectify (RectifyOptions
baseDirs
ignorePosVer newPosVer pacVerUpdate checksumUpdate newContributors
jannoRemoveEmptyCols
onlyLatest
) = do
let pacReadOpts = defaultPackageReadOptions {
_readOptIgnoreChecksums = True
, _readOptIgnoreGeno = True
Expand All @@ -72,6 +80,13 @@
rectifyOnePackage :: PoseidonPackage -> PoseidonIO ()
rectifyOnePackage inPac = do
logInfo $ "Rectifying package: " ++ renderNameWithVersion inPac
when jannoRemoveEmptyCols $ do
case posPacJannoFile inPac of
Nothing -> do
logWarning "No .janno file to modify with --jannoRemoveEmpty"

Check warning on line 86 in src/Poseidon/CLI/Rectify.hs

View check run for this annotation

Codecov / codecov/patch

src/Poseidon/CLI/Rectify.hs#L85-L86

Added lines #L85 - L86 were not covered by tests
Just jannoPath -> do
logInfo "Reordering and removing empty columns from .janno file"
liftIO $ writeJannoFileWithoutEmptyCols (posPacBaseDir inPac </> jannoPath) (posPacJanno inPac)
updatedPacPosVer <- updatePoseidonVersion newPosVer inPac
updatedPacContri <- addContributors newContributors updatedPacPosVer
updatedPacChecksums <- updateChecksums checksumUpdate updatedPacContri
Expand Down Expand Up @@ -156,7 +171,6 @@
if e then Just <$!!> getChk file else return defaultChkSum



completeAndWritePackage :: Maybe PackageVersionUpdate -> PoseidonPackage -> PoseidonIO ()
completeAndWritePackage Nothing pac = do
logDebug "Writing rectified POSEIDON.yml file"
Expand Down
2 changes: 1 addition & 1 deletion src/Poseidon/CLI/Survey.hs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ renderJannoCompleteness (JannoRows rows) =
in init ratioString -- remove last entry covering the additional columns (CsvNamedRecord)
where
-- the following magic was heavily inspired by https://stackoverflow.com/a/41524511/3216883
getRatiosForEachField :: (Generics.SOP.Generic a, Code a ~ '[ xs ], All PresenceCountable xs) => [a] -> [Ratio Int]
getRatiosForEachField :: (Generics.SOP.Generic a, Code a ~ '[ xs ], All PresenceCountable xs) => [a] -> [Ratio Int] --'
getRatiosForEachField =
hcollapse
. hcmap (Proxy :: Proxy PresenceCountable) (K . measureFillState)
Expand Down
53 changes: 34 additions & 19 deletions src/Poseidon/Janno.hs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
JannoRelationDegree (..),
JannoLibraryBuilt (..),
writeJannoFile,
writeJannoFileWithoutEmptyCols,
readJannoFile,
createMinimalJanno,
createMinimalSample,
Expand Down Expand Up @@ -64,7 +65,7 @@
import qualified Data.HashMap.Strict as HM
import Data.List (elemIndex, foldl',
intercalate, nub, sort,
(\\))
transpose, (\\))
import Data.Maybe (fromJust)
import qualified Data.Text as T
import qualified Data.Vector as V
Expand Down Expand Up @@ -394,15 +395,41 @@

-- Janno file writing

-- | A helper functions to replace empty bytestrings values in janno files with explicit "n/a"
explicitNA :: Bch.ByteString -> Bch.ByteString
explicitNA = replaceInJannoBytestring Bch.empty "n/a"

replaceInJannoBytestring :: Bch.ByteString -> Bch.ByteString -> Bch.ByteString -> Bch.ByteString
replaceInJannoBytestring from to tsv =
let tsvRows = Bch.lines tsv
tsvCells = map (Bch.splitWith (=='\t')) tsvRows
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will be problematic if a tab is hidden inside quotes, like "a\tweird\tbut\tlegal\tfield-value". Maybe that's OK. It's a bit tragic that we have all this fancy machinery to parse TSV and don't use it here. I understand why (this is so much simpler), but if wanted to be semantically 100% correct it would have to be more complicated. Not sure.

Is this shortcut actually needed? I think the only client who uses this function is explicitNA, so I suppose we could get rid of these two functions and simply augment our various janno-writing functions to make sure empty strings are always output via n/a? So it would then be matter of parsing and writing a Janno.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know - I didn't write this function for this PR, but only moved it within the code. It's old.

I'll think about how to replace it - either with the more clever decoding-encoding mechanism introduced in this PR, or with more targeted encoding somewhere upstream. I'll propose something.

tsvCellsUpdated = map (map (\y -> if y == from || y == Bch.append from "\r" then to else y)) tsvCells
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's going on with "\r"? Why would that happen?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No idea - I didn't touch this code beyond moving it around. I'll have a look.

tsvRowsUpdated = map (Bch.intercalate (Bch.pack "\t")) tsvCellsUpdated
in Bch.unlines tsvRowsUpdated

makeHeaderWithAdditionalColumns :: [JannoRow] -> Csv.Header
makeHeaderWithAdditionalColumns rows =
V.fromList $ jannoHeader ++ sort (HM.keys (HM.unions (map (getCsvNR . jAdditionalColumns) rows)))

writeJannoFile :: FilePath -> JannoRows -> IO ()
writeJannoFile path (JannoRows rows) = do
let jannoAsBytestring = Csv.encodeByNameWith encodingOptions makeHeaderWithAdditionalColumns rows
let jannoAsBytestringwithNA = explicitNA jannoAsBytestring
let jannoAsBytestring = Csv.encodeByNameWith encodingOptions (makeHeaderWithAdditionalColumns rows) rows
jannoAsBytestringwithNA = explicitNA jannoAsBytestring
Bch.writeFile path jannoAsBytestringwithNA
where
makeHeaderWithAdditionalColumns :: Csv.Header
makeHeaderWithAdditionalColumns =
V.fromList $ jannoHeader ++ sort (HM.keys (HM.unions (map (getCsvNR . jAdditionalColumns) rows)))

writeJannoFileWithoutEmptyCols :: FilePath -> JannoRows -> IO ()
writeJannoFileWithoutEmptyCols path (JannoRows rows) = do
let jannoAsBytestring = Csv.encodeByNameWith encodingOptions (makeHeaderWithAdditionalColumns rows) rows
jannoAsBytestringwithNA = explicitNA jannoAsBytestring
case Csv.decodeWith decodingOptions Csv.NoHeader jannoAsBytestringwithNA :: Either String (V.Vector (V.Vector Bch.ByteString)) of
Left _ -> error "internal error, please report"

Check warning on line 425 in src/Poseidon/Janno.hs

View check run for this annotation

Codecov / codecov/patch

src/Poseidon/Janno.hs#L425

Added line #L425 was not covered by tests
Right x -> do
let janno = V.toList $ V.map V.toList x
jannoTransposed = transpose janno
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clever! I didn't know Cassava can simply parse into a vector of vectors. That's great. I think in that case we could just improve replaceInJannoBytestring above using that same parsing code, to catch empty strings? Or build it into here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right - that would be one possible solution.

jannoTransposedFiltered = filter (any (/= "n/a") . tail) jannoTransposed
jannoBackTransposed = transpose jannoTransposedFiltered
jannoConcat = Bch.intercalate "\n" $ map (Bch.intercalate "\t") jannoBackTransposed
Bch.writeFile path (jannoConcat <> "\n")

encodingOptions :: Csv.EncodeOptions
encodingOptions = Csv.defaultEncodeOptions {
Expand Down Expand Up @@ -528,18 +555,6 @@
"broken value: " ++ actual ++ ", " ++
"problematic characters: " ++ show leftover ++ ")"

-- | A helper functions to replace empty bytestrings values in janno files with explicit "n/a"
explicitNA :: Bch.ByteString -> Bch.ByteString
explicitNA = replaceInJannoBytestring Bch.empty "n/a"

replaceInJannoBytestring :: Bch.ByteString -> Bch.ByteString -> Bch.ByteString -> Bch.ByteString
replaceInJannoBytestring from to tsv =
let tsvRows = Bch.lines tsv
tsvCells = map (Bch.splitWith (=='\t')) tsvRows
tsvCellsUpdated = map (map (\y -> if y == from || y == Bch.append from "\r" then to else y)) tsvCells
tsvRowsUpdated = map (Bch.intercalate (Bch.pack "\t")) tsvCellsUpdated
in Bch.unlines tsvRowsUpdated

-- Global janno consistency checks

checkJannoConsistency :: FilePath -> JannoRows -> Either PoseidonException JannoRows
Expand Down
5 changes: 4 additions & 1 deletion test/PoseidonGoldenTests/GoldenTestCheckSumFile.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ da981f8d52f60ec4d96865b224648c92 rectify init/Schiffels/POSEIDON.yml
3bb396e099d5b8771a3409f5fe85d70b rectify init/Schiffels/CHANGELOG.md
dc322649188ce2995cea8a46a7f97f3e rectify init/Schiffels/POSEIDON.yml
3bb396e099d5b8771a3409f5fe85d70b rectify init/Schiffels/CHANGELOG.md
a61f78b4e9b7e3c7e00ec7bc6aaab95b rectify init/Schiffels/POSEIDON.yml
3bb396e099d5b8771a3409f5fe85d70b rectify init/Schiffels/CHANGELOG.md
083fe7ef4206c979356a3a2454d780b1 rectify init/Schiffels/Schiffels.janno
2757f727e02dd6453fffe68c4c6ec4c8 forge forge/ForgePac1/POSEIDON.yml
1286a2580e4bfbed7d804d5f3fe125f7 forge forge/ForgePac1/ForgePac1.geno
8846333d9a1de6510f25a3816cc70fef forge forge/ForgePac1/ForgePac1.janno
Expand Down Expand Up @@ -125,7 +128,7 @@ e375863bca9e4a91c9855396abde31c7 forge forge/ForgePac20/ForgePac20.janno
d4a05cfef045648238a94a9d621cf667 chronicle chronicle/chronicle1.yml
b43da4d5734371c0648553120f812466 timetravel timetravel/Lamnidis_2018-1.0.0/POSEIDON.yml
8d57ce1a1ab28c0d8a5f391dd790a59c timetravel timetravel/Lamnidis_2018-1.0.1/POSEIDON.yml
dc322649188ce2995cea8a46a7f97f3e timetravel timetravel/Schiffels-1.1.1/POSEIDON.yml
a61f78b4e9b7e3c7e00ec7bc6aaab95b timetravel timetravel/Schiffels-1.1.1/POSEIDON.yml
1ab24c45ef3a13e0fb34afac7a21dca8 timetravel timetravel/Schmid_2028-1.0.0/POSEIDON.yml
8d57ce1a1ab28c0d8a5f391dd790a59c fetch fetch/by_package/Lamnidis_2018-1.0.1/POSEIDON.yml
1ab24c45ef3a13e0fb34afac7a21dca8 fetch fetch/by_package/Schmid_2028-1.0.0/POSEIDON.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ genotypeData:
indFile: ind.txt
snpSet: Other
jannoFile: Schiffels.janno
jannoFileChkSum: fd632717ecaf337a39cfd7a828a54e99
jannoFileChkSum: 083fe7ef4206c979356a3a2454d780b1
bibFile: Schiffels.bib
bibFileChkSum: 9edc4a757f785a8ecb59c54d16c5690a
changelogFile: CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Poseidon_ID Genetic_Sex Group_Name Alternative_IDs Relation_To Relation_Degree Relation_Type Relation_Note Collection_ID Country Country_ISO Location Site Latitude Longitude Date_Type Date_C14_Labnr Date_C14_Uncal_BP Date_C14_Uncal_BP_Err Date_BC_AD_Start Date_BC_AD_Median Date_BC_AD_Stop Date_Note MT_Haplogroup Y_Haplogroup Source_Tissue Nr_Libraries Library_Names Capture_Type UDG Library_Built Genotype_Ploidy Data_Preparation_Pipeline_URL Endogenous Nr_SNPs Coverage_on_Target_SNPs Damage Contamination Contamination_Err Contamination_Meas Contamination_Note Genetic_Source_Accession_IDs Primary_Contact Publication Note Keywords
XXX001 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX002 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX003 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX004 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX005 M POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX006 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX007 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX008 F POP3 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX009 F POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX010 M POP3 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
Poseidon_ID Genetic_Sex Group_Name
XXX001 M POP1
XXX002 F POP2
XXX003 M POP1
XXX004 F POP2
XXX005 M POP2
XXX006 F POP2
XXX007 M POP1
XXX008 F POP3
XXX009 F POP1
XXX010 M POP3
14 changes: 7 additions & 7 deletions test/PoseidonGoldenTests/GoldenTestData/chronicle/chronicle2.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
title: Chronicle title
description: Chronicle description
chronicleVersion: 0.2.0
lastModified: 2024-11-13
lastModified: 2025-01-03
packages:
- title: Lamnidis_2018
version: 1.0.0
commit: c59bfb82fec3f2742cc0e10ceb2932ee06e56aa1
commit: e59bbf7865a783e78979e2bf9f757a8aa9020656
path: Lamnidis_2018
- title: Lamnidis_2018
version: 1.0.1
commit: c59bfb82fec3f2742cc0e10ceb2932ee06e56aa1
commit: e59bbf7865a783e78979e2bf9f757a8aa9020656
path: Lamnidis_2018_newVersion
- title: Schiffels
version: 1.1.1
commit: a32a46cf82b8895af72c8920be4ca4843cd5e7f7
commit: cf3deedf474ef0a651fdcfe5e92085e7810cb816
path: Schiffels
- title: Schiffels_2016
version: 1.0.1
commit: c59bfb82fec3f2742cc0e10ceb2932ee06e56aa1
commit: e59bbf7865a783e78979e2bf9f757a8aa9020656
path: Schiffels_2016
- title: Schmid_2028
version: 1.0.0
commit: c59bfb82fec3f2742cc0e10ceb2932ee06e56aa1
commit: e59bbf7865a783e78979e2bf9f757a8aa9020656
path: Schmid_2028
- title: Wang_2020
version: 0.1.0
commit: c59bfb82fec3f2742cc0e10ceb2932ee06e56aa1
commit: e59bbf7865a783e78979e2bf9f757a8aa9020656
path: Wang_2020
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ genotypeData:
indFile: ind.txt
snpSet: Other
jannoFile: Schiffels.janno
jannoFileChkSum: fd632717ecaf337a39cfd7a828a54e99
jannoFileChkSum: 083fe7ef4206c979356a3a2454d780b1
bibFile: Schiffels.bib
bibFileChkSum: 9edc4a757f785a8ecb59c54d16c5690a
changelogFile: CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Poseidon_ID Genetic_Sex Group_Name Alternative_IDs Relation_To Relation_Degree Relation_Type Relation_Note Collection_ID Country Country_ISO Location Site Latitude Longitude Date_Type Date_C14_Labnr Date_C14_Uncal_BP Date_C14_Uncal_BP_Err Date_BC_AD_Start Date_BC_AD_Median Date_BC_AD_Stop Date_Note MT_Haplogroup Y_Haplogroup Source_Tissue Nr_Libraries Library_Names Capture_Type UDG Library_Built Genotype_Ploidy Data_Preparation_Pipeline_URL Endogenous Nr_SNPs Coverage_on_Target_SNPs Damage Contamination Contamination_Err Contamination_Meas Contamination_Note Genetic_Source_Accession_IDs Primary_Contact Publication Note Keywords
XXX001 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX002 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX003 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX004 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX005 M POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX006 F POP2 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX007 M POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX008 F POP3 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX009 F POP1 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
XXX010 M POP3 n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a n/a
Poseidon_ID Genetic_Sex Group_Name
XXX001 M POP1
XXX002 F POP2
XXX003 M POP1
XXX004 F POP2
XXX005 M POP2
XXX006 F POP2
XXX007 M POP1
XXX008 F POP3
XXX009 F POP1
XXX010 M POP3
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ genotypeData:
indFile: ind.txt
snpSet: Other
jannoFile: Schiffels.janno
jannoFileChkSum: fd632717ecaf337a39cfd7a828a54e99
jannoFileChkSum: 083fe7ef4206c979356a3a2454d780b1
bibFile: Schiffels.bib
bibFileChkSum: 9edc4a757f785a8ecb59c54d16c5690a
changelogFile: CHANGELOG.md
Loading
Loading