Skip to content

Commit

Permalink
assay metadata sheets now have prefixed keys
Browse files Browse the repository at this point in the history
  • Loading branch information
HLWeil committed Jul 29, 2023
1 parent 34b4206 commit c441b58
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 705 deletions.
30 changes: 20 additions & 10 deletions src/ISA/ISA.Spreadsheet/ArcAssay.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@ let [<Literal>] obsoleteAssaysLabel = "ASSAY METADATA"
let [<Literal>] assaysLabel = "ASSAY"
let [<Literal>] contactsLabel = "ASSAY PERFORMERS"

let [<Literal>] assaysPrefix = "Assay"
let [<Literal>] contactsPrefix = "Assay Person"

let [<Literal>] obsoleteMetaDataSheetName = "Assay"
let [<Literal>] metaDataSheetName = "isa_assay"

let toMetadataSheet (assay : ArcAssay) : FsWorksheet =
let toRows (assay:ArcAssay) =
seq {
yield SparseRow.fromValues [assaysLabel]
yield! Assays.toRows (None) [assay]
yield! Assays.toRows (Some assaysPrefix) [assay]

yield SparseRow.fromValues [contactsLabel]
yield! Contacts.toRows (None) (assay.Performers)
yield! Contacts.toRows (Some contactsPrefix) (assay.Performers)
}
let sheet = FsWorksheet(metaDataSheetName)
assay
Expand All @@ -26,20 +29,23 @@ let toMetadataSheet (assay : ArcAssay) : FsWorksheet =
sheet

let fromMetadataSheet (sheet : FsWorksheet) : ArcAssay =
let fromRows (rows: seq<SparseRow>) =
let fromRows (usePrefixes : bool) (rows: seq<SparseRow>) =
let aPrefix,cPrefix =
if usePrefixes then
Some assaysPrefix,Some contactsPrefix
else None,None
let en = rows.GetEnumerator()
let rec loop lastLine assays contacts lineNumber =

match lastLine with

| Some k when k = assaysLabel || k = obsoleteAssaysLabel ->
let currentLine,lineNumber,_,assays = Assays.fromRows None (lineNumber + 1) en
let currentLine,lineNumber,_,assays = Assays.fromRows aPrefix (lineNumber + 1) en
loop currentLine assays contacts lineNumber

| Some k when k = contactsLabel ->
let currentLine,lineNumber,_,contacts = Contacts.fromRows None (lineNumber + 1) en
let currentLine,lineNumber,_,contacts = Contacts.fromRows cPrefix (lineNumber + 1) en
loop currentLine assays contacts lineNumber

| k ->
match assays, contacts with
| [], [] -> ArcAssay.create(Identifier.createMissingIdentifier())
Expand All @@ -55,10 +61,14 @@ let fromMetadataSheet (sheet : FsWorksheet) : ArcAssay =

else
failwith "empty assay metadata sheet"
sheet.Rows
|> Seq.map SparseRow.fromFsRow
|> fromRows

let rows =
sheet.Rows
|> Seq.map SparseRow.fromFsRow
let hasPrefix =
rows
|> Seq.exists (fun row -> row |> Seq.head |> snd |> fun s -> s.StartsWith(assaysPrefix))
rows
|> fromRows hasPrefix

/// Reads an assay from a spreadsheet
let fromFsWorkbook (doc:FsWorkbook) =
Expand Down
9 changes: 2 additions & 7 deletions src/ISA/ISA.Spreadsheet/InvestigationFile/Assays.fs
Original file line number Diff line number Diff line change
Expand Up @@ -90,15 +90,10 @@ module Assays =
{matrix with CommentKeys = commentKeys |> List.distinct |> List.rev}

let fromRows (prefix : string option) lineNumber (rows : IEnumerator<SparseRow>) =
match prefix with
| Some p -> SparseTable.FromRows(rows,labels,lineNumber,p)
| None -> SparseTable.FromRows(rows,labels,lineNumber)
SparseTable.FromRows(rows,labels,lineNumber,?prefix = prefix)
|> fun (s,ln,rs,sm) -> (s,ln,rs, fromSparseTable sm)

let toRows prefix (assays : ArcAssay list) =
assays
|> toSparseTable
|> fun m ->
match prefix with
| Some prefix -> SparseTable.ToRows(m,prefix)
| None -> SparseTable.ToRows(m)
|> fun m -> SparseTable.ToRows(m,?prefix = prefix)
Loading

0 comments on commit c441b58

Please sign in to comment.