@@ -29,69 +29,75 @@ let toMetadataSheet (assay : ArcAssay) : FsWorksheet =
29
29
sheet
30
30
31
31
let fromMetadataSheet ( sheet : FsWorksheet ) : ArcAssay =
32
- let fromRows ( usePrefixes : bool ) ( rows : seq < SparseRow >) =
33
- let aPrefix , cPrefix =
34
- if usePrefixes then
35
- Some assaysPrefix, Some contactsPrefix
36
- else None, None
37
- let en = rows.GetEnumerator()
38
- let rec loop lastLine assays contacts lineNumber =
32
+ try
33
+ let fromRows ( usePrefixes : bool ) ( rows : seq < SparseRow >) =
34
+ let aPrefix , cPrefix =
35
+ if usePrefixes then
36
+ Some assaysPrefix, Some contactsPrefix
37
+ else None, None
38
+ let en = rows.GetEnumerator()
39
+ let rec loop lastLine assays contacts lineNumber =
39
40
40
- match lastLine with
41
+ match lastLine with
41
42
42
- | Some k when k = assaysLabel || k = obsoleteAssaysLabel ->
43
- let currentLine , lineNumber , _ , assays = Assays.fromRows aPrefix ( lineNumber + 1 ) en
44
- loop currentLine assays contacts lineNumber
43
+ | Some k when k = assaysLabel || k = obsoleteAssaysLabel ->
44
+ let currentLine , lineNumber , _ , assays = Assays.fromRows aPrefix ( lineNumber + 1 ) en
45
+ loop currentLine assays contacts lineNumber
45
46
46
- | Some k when k = contactsLabel ->
47
- let currentLine , lineNumber , _ , contacts = Contacts.fromRows cPrefix ( lineNumber + 1 ) en
48
- loop currentLine assays contacts lineNumber
49
- | k ->
50
- match assays, contacts with
51
- | [], [] -> ArcAssay.create( Identifier.createMissingIdentifier())
52
- | assays, contacts ->
53
- assays
54
- |> Seq.tryHead
55
- |> Option.defaultValue ( ArcAssay.create( Identifier.createMissingIdentifier()))
56
- |> ArcAssay.setPerformers ( Array.ofList contacts)
47
+ | Some k when k = contactsLabel ->
48
+ let currentLine , lineNumber , _ , contacts = Contacts.fromRows cPrefix ( lineNumber + 1 ) en
49
+ loop currentLine assays contacts lineNumber
50
+ | k ->
51
+ match assays, contacts with
52
+ | [], [] -> ArcAssay.create( Identifier.createMissingIdentifier())
53
+ | assays, contacts ->
54
+ assays
55
+ |> Seq.tryHead
56
+ |> Option.defaultValue ( ArcAssay.create( Identifier.createMissingIdentifier()))
57
+ |> ArcAssay.setPerformers ( Array.ofList contacts)
57
58
58
- if en.MoveNext () then
59
- let currentLine = en.Current |> SparseRow.tryGetValueAt 0
60
- loop currentLine [] [] 1
59
+ if en.MoveNext () then
60
+ let currentLine = en.Current |> SparseRow.tryGetValueAt 0
61
+ loop currentLine [] [] 1
61
62
62
- else
63
- failwith " empty assay metadata sheet"
64
- let rows =
65
- sheet.Rows
66
- |> Seq.map SparseRow.fromFsRow
67
- let hasPrefix =
63
+ else
64
+ failwith " empty assay metadata sheet"
65
+ let rows =
66
+ sheet.Rows
67
+ |> Seq.map SparseRow.fromFsRow
68
+ let hasPrefix =
69
+ rows
70
+ |> Seq.exists ( fun row -> row |> Seq.head |> snd |> fun s -> s.StartsWith( assaysPrefix))
68
71
rows
69
- |> Seq.exists ( fun row -> row |> Seq.head |> snd |> fun s -> s.StartsWith ( assaysPrefix ))
70
- rows
71
- |> fromRows hasPrefix
72
+ |> fromRows hasPrefix
73
+ with
74
+ | err -> failwithf " Failed while parsing metadatasheet: %s " err.Message
72
75
73
76
/// Reads an assay from a spreadsheet
74
77
let fromFsWorkbook ( doc : FsWorkbook ) =
75
- // Reading the "Assay" metadata sheet. Here metadata
76
- let assayMetaData =
78
+ try
79
+ // Reading the "Assay" metadata sheet. Here metadata
80
+ let assayMetaData =
77
81
78
- match doc.TryGetWorksheetByName metaDataSheetName with
79
- | Option.Some sheet ->
80
- fromMetadataSheet sheet
81
- | None ->
82
- match doc.TryGetWorksheetByName obsoleteMetaDataSheetName with
82
+ match doc.TryGetWorksheetByName metaDataSheetName with
83
83
| Option.Some sheet ->
84
84
fromMetadataSheet sheet
85
85
| None ->
86
- printfn " Cannot retrieve metadata: Assay file does not contain \" %s \" or \" %s \" sheet." metaDataSheetName obsoleteMetaDataSheetName
87
- ArcAssay.create( Identifier.createMissingIdentifier())
88
- let annotationTables =
89
- doc.GetWorksheets()
90
- |> Seq.choose ArcTable.tryFromFsWorksheet
91
- if annotationTables |> Seq.isEmpty |> not then
92
- assayMetaData.Tables <- ResizeArray annotationTables
93
- assayMetaData
94
-
86
+ match doc.TryGetWorksheetByName obsoleteMetaDataSheetName with
87
+ | Option.Some sheet ->
88
+ fromMetadataSheet sheet
89
+ | None ->
90
+ printfn " Cannot retrieve metadata: Assay file does not contain \" %s \" or \" %s \" sheet." metaDataSheetName obsoleteMetaDataSheetName
91
+ ArcAssay.create( Identifier.createMissingIdentifier())
92
+ let annotationTables =
93
+ doc.GetWorksheets()
94
+ |> Seq.choose ArcTable.tryFromFsWorksheet
95
+ if annotationTables |> Seq.isEmpty |> not then
96
+ assayMetaData.Tables <- ResizeArray annotationTables
97
+ assayMetaData
98
+ with
99
+ | err -> failwithf " Could not parse assay: \n %s " err.Message
100
+
95
101
let toFsWorkbook ( assay : ArcAssay ) =
96
102
let doc = new FsWorkbook()
97
103
let metaDataSheet = toMetadataSheet ( assay)
0 commit comments