diff --git a/runs/isaSampleToRawDataSeq/README.md b/runs/isaSampleToRawDataSeq/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d8e1dcbbfe5360db3efbbe6c68c1233ef3ad7e1a --- /dev/null +++ b/runs/isaSampleToRawDataSeq/README.md @@ -0,0 +1,10 @@ + + + +```bash +cd runs/isaSampleToRawDataSeq +``` + +```bash +cwltool ../../workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.cwl job.yml +``` diff --git a/runs/isaSampleToRawDataSeq/job.yml b/runs/isaSampleToRawDataSeq/job.yml new file mode 100644 index 0000000000000000000000000000000000000000..803a637a8ceb31f03237a2cda90c8752c638a140 --- /dev/null +++ b/runs/isaSampleToRawDataSeq/job.yml @@ -0,0 +1,6 @@ +arcPath: + class: Directory + path: ../../ +assayName: "Talinum_RNASeq_minimal" +outName: "rnaseq-samples" +startingNodeNum: 1 diff --git a/workflows/isaSampleToRawDataSeq/README.md b/workflows/isaSampleToRawDataSeq/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e831cf15ddc19dc8fcb8ba5e5424bc38c0b17e72 --- /dev/null +++ b/workflows/isaSampleToRawDataSeq/README.md @@ -0,0 +1,7 @@ + + +```bash +dotnet fsi isa-sampleToRawDataSeq.fsx ../../ Talinum_RNASeq_minimal 1 rnaseq-samples + + +``` diff --git a/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.cwl b/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.cwl new file mode 100644 index 0000000000000000000000000000000000000000..9916ed4327b05557fa59b6ceee3995a94dc3d837 --- /dev/null +++ b/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.cwl @@ -0,0 +1,43 @@ +cwlVersion: v1.2 +class: CommandLineTool +hints: + DockerRequirement: + dockerPull: mcr.microsoft.com/dotnet/sdk:6.0 +requirements: + - class: InitialWorkDirRequirement + listing: + - entryname: isa-sampleToRawDataSeq.fsx + entry: + $include: isa-sampleToRawDataSeq.fsx + - class: EnvVarRequirement + envDef: + - envName: DOTNET_NOLOGO + envValue: "true" + - class: NetworkAccess + networkAccess: true +baseCommand: [dotnet, fsi, isa-sampleToRawDataSeq.fsx] +inputs: + arcPath: + type: Directory + inputBinding: + position: 1 + assayName: + type: string + inputBinding: + position: 2 + outName: + type: string + inputBinding: + position: 3 + startingNodeNum: + type: int + inputBinding: + position: 4 + +outputs: + output: + type: File[] + outputBinding: + glob: + - "*.tsv" + - "*.xlsx" diff --git a/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.fsx b/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.fsx new file mode 100644 index 0000000000000000000000000000000000000000..530a186ff2583e10303f923a76fd6d12d5098f6d --- /dev/null +++ b/workflows/isaSampleToRawDataSeq/isaSampleToRawDataSeq.fsx @@ -0,0 +1,98 @@ +// Pull out the full ISA process sequence (incl. all metadata) leading to the first Raw Data Node + +// Dependencies + +#r "nuget: ARCtrl.NET, 2.0.2" +#r "nuget: ARCtrl.QueryModel, 1.0.5" +#r "nuget: FsSpreadsheet.CsvIO, 6.2.0" + +open FsSpreadsheet.CsvIO +open FsSpreadsheet.Net +open System.IO +open ARCtrl.NET +open ARCtrl +open ARCtrl.ISA +open ARCtrl.QueryModel + +// input parameters + +let args : string array = fsi.CommandLineArgs |> Array.tail +let arcPath = args.[0] +let assayName = args.[1] +let outName = args.[2] + +let startingNodeNum = args.[3] |> int + + +// test parameters + +// let source = __SOURCE_DIRECTORY__ +// let arcPath = Path.Combine(source, "../../") + +// let assayName = "pick2012_illumina_rnaseq" + +// let outName = "out.csv" + +// Load ARC + +let arc = ARC.load(arcPath) + +let inv = arc.ISA.Value + +// Load first data node + +let firstData = inv.GetAssay(assayName).FirstData + +// Create headers for output table +let headers = [ + CompositeHeader.Input IOType.Sample + for v in inv.ArcTables.ValuesOf firstData.[0] do + if v.IsCharacteristicValue then + CompositeHeader.Characteristic v.Category + elif v.IsParameterValue then + CompositeHeader.Parameter v.Category + elif v.IsFactorValue then + CompositeHeader.Factor v.Category + elif v.IsComponent then + CompositeHeader.Component v.Category + else failwithf "what the f is %O" v + + CompositeHeader.Output IOType.RawDataFile +] + +// Create rows + +let getRow (d: QNode) = + [| + + CompositeCell.createFreeText (inv.ArcTables.SamplesOf d).[startingNodeNum].Name + + for v in inv.ArcTables.ValuesOf d do + if v.HasUnit then + CompositeCell.Unitized(v.ValueText, v.Unit) + else + CompositeCell.Term(v.Value.AsOntology()) + + CompositeCell.FreeText d.Name + + |] + +// Combine into table + +let t = ArcTable.init "FullTable" +t.Headers <- ResizeArray headers + +for d in firstData do + t.AddRow (getRow d) + +// Small detour via workbook +let ws = Spreadsheet.ArcTable.toFsWorksheet t + +let wb = new FsSpreadsheet.FsWorkbook() + +wb.AddWorksheet ws + +// Write to csv + +wb.ToCsvFile (outName + ".tsv", Separator = '\t') +wb.ToXlsxFile (outName + ".xlsx")