From cca32e733156bba9ec660587773e746bfee4ca60 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 25 Aug 2022 17:00:42 -0400 Subject: [PATCH 01/27] Initial commit --- .../Sequencing/GenerateiLabChargesUpload.java | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java new file mode 100644 index 00000000..317a4527 --- /dev/null +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -0,0 +1,135 @@ +package com.velox.sloan.cmo.workflows.workflows.Sequencing; + +import com.velox.api.datarecord.DataRecord; +import com.velox.api.datarecord.IoError; +import com.velox.api.datarecord.NotFound; +import com.velox.api.plugin.PluginResult; +import com.velox.api.util.ServerException; +import com.velox.sapio.commons.exemplar.plugin.PluginOrder; +import com.velox.sapioutils.server.plugin.DefaultGenericPlugin; +import com.velox.sapioutils.shared.utilities.ExemplarConfig; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.io.*; +import java.rmi.RemoteException; +import java.util.*; + +public class GenerateiLabChargesUpload extends DefaultGenericPlugin { + + public GenerateiLabChargesUpload() { + setTaskEntry(true); + setOrder(PluginOrder.LAST.getOrder()); + } + @Override + public boolean shouldRun() throws RemoteException { + return activeTask.getTask().getTaskOptions().containsKey("GENERATE ILAB CHARGES SHEET") && + !this.activeTask.getTask().getTaskOptions().containsKey("GENERATE ILAB CHARGES SHEET GENERATED"); + } + + public PluginResult run() throws Throwable { + // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools + // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email + // address, PI email address, Date of request, service_request_id? + List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); + String serviceType = ""; + List chargesInfo = outputChargesInfo(serviceType); + setFieldsForReport(chargesInfo); + generateiLabChargeSheet(); + // Populate different services sheets + return new PluginResult(true); + } + + private List outputChargesInfo(String serviceType) { + // Logic for charges corresponding to different services + } + private void generateiLabChargeSheet() { + // Make the sheet with 7 columns + List headerValues; + List> dataValues; + List dataLines = new LinkedList<>(); + String[] headersArray = new String[headerValues.size()]; + int i = 0; + for (String headerValue : headerValues) { + headersArray[i++] = headerValue; + } + dataLines.add(headersArray); + i = 0; + String[] dataInfoArray = new String[headerValues.size()]; + for(Map row : dataValues) { + dataInfoArray[i++] = row.get("SampleName"); + dataInfoArray[i++] = row.get("ParentBarcodeSequence"); + dataInfoArray[i++] = row.get("ChildBarcodeSequence"); + dataLines.add(dataInfoArray); + dataInfoArray = new String[headerValues.size()]; + i = 0; + } + + + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + try { + File outFile = null; + StringBuffer allData = new StringBuffer(); + byte[] bytes; + for (String[] eachLine: dataLines) { + for (String eachCell : eachLine) { + allData.append(eachCell + ","); + } + allData.append("\n"); + } + bytes = allData.toString().getBytes(); + ExemplarConfig exemplarConfig = new ExemplarConfig(managerContext); + String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("").toString(); + //"/pskis34/vialelab/LIMS/TCRseqManifest" + + + try (OutputStream fos = new FileOutputStream(outFile, false)){ + fos.write(bytes); + outFile.setReadOnly(); + byteStream.close(); + } catch (Exception e) { + logInfo("Error in writing to shared drive: " + e.getMessage()); + } + + + } catch (NotFound e) { + logError(String.format("NotFoundException -> Error while exporting iLab bulk charge sheet:\n%s", ExceptionUtils.getStackTrace(e))); + } catch (IoError e) { + logError(String.format("IoError -> Error while exporting iLab bulk charge sheet:\n%s",ExceptionUtils.getStackTrace(e))); + } catch (ServerException e) { + logError(String.format("RemoteException -> Error while exporting iLab bulk charge sheet:\n%s",ExceptionUtils.getStackTrace(e))); + } catch (IOException e) { + logError(String.format("IOException -> Error while exporting iLab bulk charge sheet:\n%s", ExceptionUtils.getStackTrace(e))); + } finally { + try { + byteStream.close(); + } catch (IOException e) { + logError(String.format("IOException -> Error while closing the ByteArrayOutputStream:\n%s", ExceptionUtils.getStackTrace(e))); + } + } + } + + private List> setFieldsForReport(List chargesInformation) { + List> reportFieldValueMaps = new ArrayList<>(); + for (DataRecord record : chargesInformation) { + Map reportFieldValues = new HashMap<>(); + try { + Object[] sampleId = record.getValue("SampleId", user).toString().split("_"); + String sampleName = record.getValue("OtherSampleId", user).toString(); + + reportFieldValues.put("note", sampleName); + reportFieldValues.put("serviceQuantity", ); + reportFieldValues.put("purchasedOn", ); + reportFieldValues.put("serviceRequestId", ); + reportFieldValues.put("ownerEmail", ); + reportFieldValues.put("pIEmail", ); + + reportFieldValueMaps.add(reportFieldValues); + } catch (RemoteException e) { + logError(String.format("RemoteException -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(e))); + } catch (NotFound notFound) { + logError(String.format("NotFound Exception -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(notFound))); + } + } + return reportFieldValueMaps; + } +} From f80e8888b3e73693c55b8c324d6018f14e60ab40 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Mon, 29 Aug 2022 17:03:35 -0400 Subject: [PATCH 02/27] Dataline info from LIMS --- .../Sequencing/GenerateiLabChargesUpload.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 317a4527..e60d948b 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -16,6 +16,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { + public Map serviceInfoMap = new HashMap<>(); + public GenerateiLabChargesUpload() { setTaskEntry(true); setOrder(PluginOrder.LAST.getOrder()); @@ -30,8 +32,10 @@ public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email // address, PI email address, Date of request, service_request_id? + populateServiceInfoMap(); List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); - String serviceType = ""; + String serviceType = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0) + .getStringVal("Recipe", user); List chargesInfo = outputChargesInfo(serviceType); setFieldsForReport(chargesInfo); generateiLabChargeSheet(); @@ -41,6 +45,7 @@ public PluginResult run() throws Throwable { private List outputChargesInfo(String serviceType) { // Logic for charges corresponding to different services + } private void generateiLabChargeSheet() { // Make the sheet with 7 columns @@ -56,9 +61,12 @@ private void generateiLabChargeSheet() { i = 0; String[] dataInfoArray = new String[headerValues.size()]; for(Map row : dataValues) { - dataInfoArray[i++] = row.get("SampleName"); - dataInfoArray[i++] = row.get("ParentBarcodeSequence"); - dataInfoArray[i++] = row.get("ChildBarcodeSequence"); + dataInfoArray[i++] = row.get("note"); + dataInfoArray[i++] = row.get("serviceQuantity"); + dataInfoArray[i++] = row.get("purchasedOn"); + dataInfoArray[i++] = row.get("serviceRequestId"); + dataInfoArray[i++] = row.get("ownerEmail"); + dataInfoArray[i++] = row.get("pIEmail"); dataLines.add(dataInfoArray); dataInfoArray = new String[headerValues.size()]; i = 0; @@ -79,7 +87,7 @@ private void generateiLabChargeSheet() { bytes = allData.toString().getBytes(); ExemplarConfig exemplarConfig = new ExemplarConfig(managerContext); String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("").toString(); - //"/pskis34/vialelab/LIMS/TCRseqManifest" + //"/pskis34/vialelab/LIMS/iLabBulkUploadCharges" try (OutputStream fos = new FileOutputStream(outFile, false)){ @@ -113,17 +121,24 @@ private List> setFieldsForReport(List chargesInf for (DataRecord record : chargesInformation) { Map reportFieldValues = new HashMap<>(); try { - Object[] sampleId = record.getValue("SampleId", user).toString().split("_"); - String sampleName = record.getValue("OtherSampleId", user).toString(); + DataRecord requestRecord = record.getParentsOfType("Request", user).get(0); + String ownerEmail = requestRecord.getStringVal("ProjectOwner", user); + String piEmail = requestRecord.getStringVal("PIemail", user); + String requestId = requestRecord.getStringVal("RequestId", user); + String purchaseDate = requestRecord.getStringVal("RequestDate", user); + String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); - reportFieldValues.put("note", sampleName); - reportFieldValues.put("serviceQuantity", ); - reportFieldValues.put("purchasedOn", ); + reportFieldValues.put("serviceId", ); + reportFieldValues.put("note", requestId); + reportFieldValues.put("serviceQuantity", serviceQuantity); + reportFieldValues.put("purchasedOn", purchaseDate); reportFieldValues.put("serviceRequestId", ); - reportFieldValues.put("ownerEmail", ); - reportFieldValues.put("pIEmail", ); + reportFieldValues.put("ownerEmail", ownerEmail); + reportFieldValues.put("pIEmail", piEmail); reportFieldValueMaps.add(reportFieldValues); + } catch (IoError e) { + logError(String.format("IOError -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(e))); } catch (RemoteException e) { logError(String.format("RemoteException -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(e))); } catch (NotFound notFound) { @@ -132,4 +147,13 @@ private List> setFieldsForReport(List chargesInf } return reportFieldValueMaps; } + + // Make the map of Service ID -> Service Name + public Map populateServiceInfoMap() { + serviceInfoMap.put("490181", "10X FB Library"); + serviceInfoMap.put("490175", "10X GEX Library"); + + return serviceInfoMap; + } + } From 480ef783500b156fb96ff17eab0bdb3cec7601b9 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Tue, 30 Aug 2022 08:58:00 -0400 Subject: [PATCH 03/27] Service name: service id static map built. --- .../Sequencing/GenerateiLabChargesUpload.java | 163 ++++++++++++++++-- 1 file changed, 152 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index e60d948b..a6d102d4 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -16,7 +16,158 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { - public Map serviceInfoMap = new HashMap<>(); + private static final Map serviceInfoMap = new HashMap<>(); + static { // Make the map of Service Name -> Service ID + serviceInfoMap.put("10X FB Library", "490181"); + serviceInfoMap.put("10X GEX Library", "490175"); + serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); + serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); + serviceInfoMap.put("10X Multiome Library", "490182"); + serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); + serviceInfoMap.put("10X Multiome Sequencing - 1K nuclei", "490183"); + serviceInfoMap.put("10X VDJ Library", "490178"); + serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); + serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); + serviceInfoMap.put("10X Visium Library", "490190"); + serviceInfoMap.put("10X Visium Optimization", "490189"); + serviceInfoMap.put("10X Visium Sequencing (25%)", "490191"); + serviceInfoMap.put("ACCESS - Normal", "406820"); + serviceInfoMap.put("ACCESS - Tumor", "406821"); + serviceInfoMap.put("Adaptive immunoSEQ - Deep", "490139"); + serviceInfoMap.put("Adaptive immunoSEQ - Survey", "490138"); + serviceInfoMap.put("Adaptive immunoSEQ - Ultradeep", "490504"); + serviceInfoMap.put("AmpliconSeq", "490510"); + serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); + serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); + serviceInfoMap.put("Archer Immunoverse", "490140"); + serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal + serviceInfoMap.put("ATAC-Seq", "483257"); + serviceInfoMap.put("Cell Line Authentication", "490142"); + serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); + serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); + serviceInfoMap.put("CMO-CH", "492855"); + serviceInfoMap.put("CRISPR-Seq", "308754"); + serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); + serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); + serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); + serviceInfoMap.put("Data Handling", "491618"); // IGO Internal + serviceInfoMap.put("ddPCR (1 reaction)", "256041"); + serviceInfoMap.put("ddPCR Assay Design", "288524"); + serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); + serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); + serviceInfoMap.put("ddPCR Human % Assay", "490143"); + serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); + serviceInfoMap.put("DLP Library - 800 cells", "490187"); + serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); + serviceInfoMap.put("DNA Extraction - Blood", "256034"); + serviceInfoMap.put("DNA Extraction - FFPE", "256048"); + serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); + serviceInfoMap.put("DNA Extraction - Nails", "288528"); + serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); + serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); + serviceInfoMap.put("Double Capture", "497933"); // IGO Internal + serviceInfoMap.put("EPIC Methyl Capture", "483259"); + serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); + serviceInfoMap.put("FFPE Sectioning - Slides", "260305"); + serviceInfoMap.put("Fingerprinting - STR", "302835"); + serviceInfoMap.put("H&E Stain", "260304"); + serviceInfoMap.put("HemePACT - Normal", "259603"); + serviceInfoMap.put("HemePACT - Tumor", "406819"); + serviceInfoMap.put("IMPACT - Mouse", "331388"); + serviceInfoMap.put("IMPACT - Normal", "256124"); + serviceInfoMap.put("IMPACT - Tumor", "406813"); + serviceInfoMap.put("KAPA HT Library Prep", "256127"); + serviceInfoMap.put("KAPA Hyper Library Prep", "351941"); + serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); + serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); + serviceInfoMap.put("Micronic Tube", "308755"); + serviceInfoMap.put("PlateSeq Library Prep", "490185"); + serviceInfoMap.put("PlateSeq Sequencing - 1 column", "490186"); + serviceInfoMap.put("PolyA Library Prep", "490511"); + serviceInfoMap.put("QC - Agilent", "256044"); + serviceInfoMap.put("QC - Quant-it", "259492"); + serviceInfoMap.put("QC - Quantity + Quality", "256029"); + serviceInfoMap.put("RiboDepletion Library Prep", "490512"); + serviceInfoMap.put("490141", "RNA Extraction + COVID19 Testing"); + serviceInfoMap.put("256100", "RNA Extraction - FFPE"); + serviceInfoMap.put("256097", "RNA Extraction - Fresh/Frozen"); + serviceInfoMap.put("490137", "RNA Extraction - Viably Frozen"); + serviceInfoMap.put("490506", "RNASeq - polyA - 10-20M"); + serviceInfoMap.put("490507", "RNASeq - polyA - 100M+"); + serviceInfoMap.put("404330", "RNASeq - polyA - 20-30M"); + serviceInfoMap.put("404331", "RNASeq - polyA - 30-40M"); + serviceInfoMap.put("487566", "RNASeq - polyA - 40-50M"); + serviceInfoMap.put("404332", "RNASeq - polyA - 50-60M"); + serviceInfoMap.put("490144", "RNASeq - polyA - 60-80M"); + serviceInfoMap.put("404334", "RNASeq - polyA - 80-100M"); + serviceInfoMap.put("490508", "RNASeq - Ribodeplete - 10-20M"); + serviceInfoMap.put("490509", "RNASeq - Ribodeplete - 100M+"); + serviceInfoMap.put("490145", "RNASeq - Ribodeplete - 20-30M"); + serviceInfoMap.put("404335", "RNASeq - Ribodeplete - 30-40M"); + serviceInfoMap.put("490146", "RNASeq - Ribodeplete - 40-50M"); + serviceInfoMap.put("404336", "RNASeq - Ribodeplete - 50-60M"); + serviceInfoMap.put("404337", "RNASeq - Ribodeplete - 60-80M"); + serviceInfoMap.put("404338", "RNASeq - Ribodeplete - 80-100M"); + serviceInfoMap.put("490514", "Sample Capture + Library"); + serviceInfoMap.put("491619", "Sample Pooling"); + serviceInfoMap.put("490157", "Sequencing - 100M Reads - 150c"); + serviceInfoMap.put("490158", "Sequencing - 100M Reads - 300c"); + serviceInfoMap.put("490149", "Sequencing - 10M Reads - 10X Standard"); + serviceInfoMap.put("490147", "Sequencing - 10M Reads - PE100"); + serviceInfoMap.put("490148", "Sequencing - 10M Reads - PE150"); + serviceInfoMap.put("490173", "Sequencing - 11000M Reads - 200c"); + serviceInfoMap.put("490174", "Sequencing - 11000M Reads - 300c"); + serviceInfoMap.put("490165", "Sequencing - 1800M Reads - 100c"); + serviceInfoMap.put("490166", "Sequencing - 1800M Reads - 200c"); + serviceInfoMap.put("490167", "Sequencing - 1800M Reads - 300c"); + serviceInfoMap.put("490170", "Sequencing - 3600M Reads - 100c"); + serviceInfoMap.put("490171", "Sequencing - 3600M Reads - 200c"); + serviceInfoMap.put("490172", "Sequencing - 3600M Reads - 300c"); + serviceInfoMap.put("490159", "Sequencing - 400M Reads - 100c"); + serviceInfoMap.put("490160", "Sequencing - 400M Reads - 200c"); + serviceInfoMap.put("490161", "Sequencing - 400M Reads - 300c"); + serviceInfoMap.put("490162", "Sequencing - 800M Reads - 100c"); + serviceInfoMap.put("490163", "Sequencing - 800M Reads - 200c"); + serviceInfoMap.put("490164", "Sequencing - 800M Reads - 300c"); + serviceInfoMap.put("494610", "Sequencing - 800M Reads - 500c"); + serviceInfoMap.put("490154", "Sequencing - MiSeq 150c"); + serviceInfoMap.put("490155", "Sequencing - MiSeq 300c"); + serviceInfoMap.put("490153", "Sequencing - MiSeq 50c"); + serviceInfoMap.put("490156", "Sequencing - MiSeq 600c"); + serviceInfoMap.put("490152", "Sequencing - MiSeq Micro 300c"); + serviceInfoMap.put("490150", "Sequencing - MiSeq Nano 300c"); + serviceInfoMap.put("490151", "Sequencing - MiSeq Nano 500c"); + serviceInfoMap.put("341254", "Shallow WGS"); + serviceInfoMap.put("260643", "Slide Dissection"); + serviceInfoMap.put("296697", "Slide Scraping"); + serviceInfoMap.put("261859", "SMARTer Amplification"); + serviceInfoMap.put("487571", "Special Processing -- Extraction"); + serviceInfoMap.put("498671", "TCRSeq-IGO"); + serviceInfoMap.put("351940", "UMI Library Prep"); + serviceInfoMap.put("289981", "WES - 100X"); + serviceInfoMap.put("289982", "WES - 150X"); + serviceInfoMap.put("289983", "WES - 200X"); + serviceInfoMap.put("289984", "WES - 250X"); + serviceInfoMap.put("289979", "WES - 30X"); + serviceInfoMap.put("289980", "WES - 70X"); + serviceInfoMap.put("490204", "WGS - PCR+ - 100X"); + serviceInfoMap.put("495934", "WGS - PCR+ - 10X"); + serviceInfoMap.put("490205", "WGS - PCR+ - 150X"); + serviceInfoMap.put("490199", "WGS - PCR+ - 30X"); + serviceInfoMap.put("490200", "WGS - PCR+ - 40X"); + serviceInfoMap.put("490201", "WGS - PCR+ - 50X"); + serviceInfoMap.put("490202", "WGS - PCR+ - 60X"); + serviceInfoMap.put("490203", "WGS - PCR+ - 80X"); + serviceInfoMap.put("490197", "WGS - PCR-free - 100X"); + serviceInfoMap.put("495933", "WGS - PCR-free - 10X"); + serviceInfoMap.put("490198", "WGS - PCR-free - 150X"); + serviceInfoMap.put("490192", "WGS - PCR-free - 30X"); + serviceInfoMap.put("490193", "WGS - PCR-free - 40X"); + serviceInfoMap.put("490194", "WGS - PCR-free - 50X"); + serviceInfoMap.put("490195", "WGS - PCR-free - 60X"); + serviceInfoMap.put("490196", "WGS - PCR-free - 80X"); + + } public GenerateiLabChargesUpload() { setTaskEntry(true); @@ -32,7 +183,6 @@ public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email // address, PI email address, Date of request, service_request_id? - populateServiceInfoMap(); List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); String serviceType = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0) .getStringVal("Recipe", user); @@ -147,13 +297,4 @@ private List> setFieldsForReport(List chargesInf } return reportFieldValueMaps; } - - // Make the map of Service ID -> Service Name - public Map populateServiceInfoMap() { - serviceInfoMap.put("490181", "10X FB Library"); - serviceInfoMap.put("490175", "10X GEX Library"); - - return serviceInfoMap; - } - } From 20cc582cc30d56b8da0ad172349a838012775b73 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 31 Aug 2022 07:55:23 -0400 Subject: [PATCH 04/27] Map fixed. --- .../Sequencing/GenerateiLabChargesUpload.java | 156 +++++++++--------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index a6d102d4..7a49cf7c 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -88,84 +88,84 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("QC - Quant-it", "259492"); serviceInfoMap.put("QC - Quantity + Quality", "256029"); serviceInfoMap.put("RiboDepletion Library Prep", "490512"); - serviceInfoMap.put("490141", "RNA Extraction + COVID19 Testing"); - serviceInfoMap.put("256100", "RNA Extraction - FFPE"); - serviceInfoMap.put("256097", "RNA Extraction - Fresh/Frozen"); - serviceInfoMap.put("490137", "RNA Extraction - Viably Frozen"); - serviceInfoMap.put("490506", "RNASeq - polyA - 10-20M"); - serviceInfoMap.put("490507", "RNASeq - polyA - 100M+"); - serviceInfoMap.put("404330", "RNASeq - polyA - 20-30M"); - serviceInfoMap.put("404331", "RNASeq - polyA - 30-40M"); - serviceInfoMap.put("487566", "RNASeq - polyA - 40-50M"); - serviceInfoMap.put("404332", "RNASeq - polyA - 50-60M"); - serviceInfoMap.put("490144", "RNASeq - polyA - 60-80M"); - serviceInfoMap.put("404334", "RNASeq - polyA - 80-100M"); - serviceInfoMap.put("490508", "RNASeq - Ribodeplete - 10-20M"); - serviceInfoMap.put("490509", "RNASeq - Ribodeplete - 100M+"); - serviceInfoMap.put("490145", "RNASeq - Ribodeplete - 20-30M"); - serviceInfoMap.put("404335", "RNASeq - Ribodeplete - 30-40M"); - serviceInfoMap.put("490146", "RNASeq - Ribodeplete - 40-50M"); - serviceInfoMap.put("404336", "RNASeq - Ribodeplete - 50-60M"); - serviceInfoMap.put("404337", "RNASeq - Ribodeplete - 60-80M"); - serviceInfoMap.put("404338", "RNASeq - Ribodeplete - 80-100M"); - serviceInfoMap.put("490514", "Sample Capture + Library"); - serviceInfoMap.put("491619", "Sample Pooling"); - serviceInfoMap.put("490157", "Sequencing - 100M Reads - 150c"); - serviceInfoMap.put("490158", "Sequencing - 100M Reads - 300c"); - serviceInfoMap.put("490149", "Sequencing - 10M Reads - 10X Standard"); - serviceInfoMap.put("490147", "Sequencing - 10M Reads - PE100"); - serviceInfoMap.put("490148", "Sequencing - 10M Reads - PE150"); - serviceInfoMap.put("490173", "Sequencing - 11000M Reads - 200c"); - serviceInfoMap.put("490174", "Sequencing - 11000M Reads - 300c"); - serviceInfoMap.put("490165", "Sequencing - 1800M Reads - 100c"); - serviceInfoMap.put("490166", "Sequencing - 1800M Reads - 200c"); - serviceInfoMap.put("490167", "Sequencing - 1800M Reads - 300c"); - serviceInfoMap.put("490170", "Sequencing - 3600M Reads - 100c"); - serviceInfoMap.put("490171", "Sequencing - 3600M Reads - 200c"); - serviceInfoMap.put("490172", "Sequencing - 3600M Reads - 300c"); - serviceInfoMap.put("490159", "Sequencing - 400M Reads - 100c"); - serviceInfoMap.put("490160", "Sequencing - 400M Reads - 200c"); - serviceInfoMap.put("490161", "Sequencing - 400M Reads - 300c"); - serviceInfoMap.put("490162", "Sequencing - 800M Reads - 100c"); - serviceInfoMap.put("490163", "Sequencing - 800M Reads - 200c"); - serviceInfoMap.put("490164", "Sequencing - 800M Reads - 300c"); - serviceInfoMap.put("494610", "Sequencing - 800M Reads - 500c"); - serviceInfoMap.put("490154", "Sequencing - MiSeq 150c"); - serviceInfoMap.put("490155", "Sequencing - MiSeq 300c"); - serviceInfoMap.put("490153", "Sequencing - MiSeq 50c"); - serviceInfoMap.put("490156", "Sequencing - MiSeq 600c"); - serviceInfoMap.put("490152", "Sequencing - MiSeq Micro 300c"); - serviceInfoMap.put("490150", "Sequencing - MiSeq Nano 300c"); - serviceInfoMap.put("490151", "Sequencing - MiSeq Nano 500c"); - serviceInfoMap.put("341254", "Shallow WGS"); - serviceInfoMap.put("260643", "Slide Dissection"); - serviceInfoMap.put("296697", "Slide Scraping"); - serviceInfoMap.put("261859", "SMARTer Amplification"); - serviceInfoMap.put("487571", "Special Processing -- Extraction"); - serviceInfoMap.put("498671", "TCRSeq-IGO"); - serviceInfoMap.put("351940", "UMI Library Prep"); - serviceInfoMap.put("289981", "WES - 100X"); - serviceInfoMap.put("289982", "WES - 150X"); - serviceInfoMap.put("289983", "WES - 200X"); - serviceInfoMap.put("289984", "WES - 250X"); - serviceInfoMap.put("289979", "WES - 30X"); - serviceInfoMap.put("289980", "WES - 70X"); - serviceInfoMap.put("490204", "WGS - PCR+ - 100X"); - serviceInfoMap.put("495934", "WGS - PCR+ - 10X"); - serviceInfoMap.put("490205", "WGS - PCR+ - 150X"); - serviceInfoMap.put("490199", "WGS - PCR+ - 30X"); - serviceInfoMap.put("490200", "WGS - PCR+ - 40X"); - serviceInfoMap.put("490201", "WGS - PCR+ - 50X"); - serviceInfoMap.put("490202", "WGS - PCR+ - 60X"); - serviceInfoMap.put("490203", "WGS - PCR+ - 80X"); - serviceInfoMap.put("490197", "WGS - PCR-free - 100X"); - serviceInfoMap.put("495933", "WGS - PCR-free - 10X"); - serviceInfoMap.put("490198", "WGS - PCR-free - 150X"); - serviceInfoMap.put("490192", "WGS - PCR-free - 30X"); - serviceInfoMap.put("490193", "WGS - PCR-free - 40X"); - serviceInfoMap.put("490194", "WGS - PCR-free - 50X"); - serviceInfoMap.put("490195", "WGS - PCR-free - 60X"); - serviceInfoMap.put("490196", "WGS - PCR-free - 80X"); + serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); + serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); + serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); + serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); + serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); + serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); + serviceInfoMap.put("RNASeq - polyA - 30-40M", "404331"); + serviceInfoMap.put("RNASeq - polyA - 40-50M", "487566"); + serviceInfoMap.put("RNASeq - polyA - 50-60M", "404332"); + serviceInfoMap.put("RNASeq - polyA - 60-80M", "490144"); + serviceInfoMap.put("RNASeq - polyA - 80-100M", "404334"); + serviceInfoMap.put("RNASeq - Ribodeplete - 10-20M", "490508"); + serviceInfoMap.put("RNASeq - Ribodeplete - 100M+", "490509"); + serviceInfoMap.put("RNASeq - Ribodeplete - 20-30M", "490145"); + serviceInfoMap.put("RNASeq - Ribodeplete - 30-40M", "404335"); + serviceInfoMap.put("RNASeq - Ribodeplete - 40-50M", "490146"); + serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); + serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); + serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); + serviceInfoMap.put("Sample Capture + Library", "490514"); + serviceInfoMap.put("Sample Pooling", "491619"); + serviceInfoMap.put("Sequencing - 100M Reads - 150c", "490157"); + serviceInfoMap.put("Sequencing - 100M Reads - 300c", "490158"); + serviceInfoMap.put("Sequencing - 10M Reads - 10X Standard", "490149"); + serviceInfoMap.put("Sequencing - 10M Reads - PE100", "490147"); + serviceInfoMap.put("Sequencing - 10M Reads - PE150", "490148"); + serviceInfoMap.put("Sequencing - 11000M Reads - 200c", "490173"); + serviceInfoMap.put("Sequencing - 11000M Reads - 300c", "490174"); + serviceInfoMap.put("Sequencing - 1800M Reads - 100c", "490165"); + serviceInfoMap.put("Sequencing - 1800M Reads - 200c", "490166"); + serviceInfoMap.put("Sequencing - 1800M Reads - 300c", "490167"); + serviceInfoMap.put("Sequencing - 3600M Reads - 100c", "490170"); + serviceInfoMap.put("Sequencing - 3600M Reads - 200c", "490171"); + serviceInfoMap.put("Sequencing - 3600M Reads - 300c", "490172"); + serviceInfoMap.put("Sequencing - 400M Reads - 100c", "490159"); + serviceInfoMap.put("Sequencing - 400M Reads - 200c", "490160"); + serviceInfoMap.put("Sequencing - 400M Reads - 300c", "490161"); + serviceInfoMap.put("Sequencing - 800M Reads - 100c", "490162"); + serviceInfoMap.put("Sequencing - 800M Reads - 200c", "490163"); + serviceInfoMap.put("Sequencing - 800M Reads - 300c", "490164"); + serviceInfoMap.put("Sequencing - 800M Reads - 500c", "494610"); + serviceInfoMap.put("Sequencing - MiSeq 150c", "490154"); + serviceInfoMap.put("Sequencing - MiSeq 300c", "490155"); + serviceInfoMap.put("Sequencing - MiSeq 50c", "490153"); + serviceInfoMap.put("Sequencing - MiSeq 600c", "490156"); + serviceInfoMap.put("Sequencing - MiSeq Micro 300c", "490152"); + serviceInfoMap.put("Sequencing - MiSeq Nano 300c", "490150"); + serviceInfoMap.put("Sequencing - MiSeq Nano 500c", "490151"); + serviceInfoMap.put("Shallow WGS", "341254"); + serviceInfoMap.put("Slide Dissection", "260643"); + serviceInfoMap.put("Slide Scraping", "296697"); + serviceInfoMap.put("SMARTer Amplification", "261859"); + serviceInfoMap.put("Special Processing -- Extraction", "487571"); + serviceInfoMap.put("TCRSeq-IGO", "498671"); + serviceInfoMap.put("UMI Library Prep", "351940"); + serviceInfoMap.put("WES - 100X", "289981"); + serviceInfoMap.put("WES - 150X", "289982"); + serviceInfoMap.put("WES - 200X", "289983"); + serviceInfoMap.put("WES - 250X", "289984"); + serviceInfoMap.put("WES - 30X", "289979"); + serviceInfoMap.put("WES - 70X", "289980"); + serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); + serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); + serviceInfoMap.put("WGS - PCR+ - 150X", "490205"); + serviceInfoMap.put("WGS - PCR+ - 30X", "490199"); + serviceInfoMap.put("WGS - PCR+ - 40X", "490200"); + serviceInfoMap.put("WGS - PCR+ - 50X", "490201"); + serviceInfoMap.put("WGS - PCR+ - 60X", "490202"); + serviceInfoMap.put("WGS - PCR+ - 80X", "490203"); + serviceInfoMap.put("WGS - PCR-free - 100X", "490197"); + serviceInfoMap.put("WGS - PCR-free - 10X", "495933"); + serviceInfoMap.put("WGS - PCR-free - 150X", "490198"); + serviceInfoMap.put("WGS - PCR-free - 30X", "490192"); + serviceInfoMap.put("WGS - PCR-free - 40X", "490193"); + serviceInfoMap.put("WGS - PCR-free - 50X", "490194"); + serviceInfoMap.put("WGS - PCR-free - 60X", "490195"); + serviceInfoMap.put("WGS - PCR-free - 80X", "490196"); } From 4c90b5e40b7adf2a3baddf6dc940ec4d383ebefc Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 31 Aug 2022 13:30:58 -0400 Subject: [PATCH 05/27] Added comments and questions --- .../Sequencing/GenerateiLabChargesUpload.java | 197 +++++++++--------- 1 file changed, 104 insertions(+), 93 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 7a49cf7c..d3df3490 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -16,100 +16,104 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { + // SampleReceving Request Type pick list ID + private static final Map serviceInfoMap = new HashMap<>(); static { // Make the map of Service Name -> Service ID - serviceInfoMap.put("10X FB Library", "490181"); - serviceInfoMap.put("10X GEX Library", "490175"); - serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); - serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); - serviceInfoMap.put("10X Multiome Library", "490182"); - serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); + serviceInfoMap.put("10X FB Library", "490181"); //Feature Barcoding + serviceInfoMap.put("10X GEX Library", "490175"); // Gene Expression Library Prep + serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); // Gene Expression Sequencing + cell count (sample table) + serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); // Gene Expression Sequencing + cell count (sample table) + serviceInfoMap.put("10X Multiome Library", "490182"); // Multiome Lib Prep + serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); // Where to find Nuclei info? which table? serviceInfoMap.put("10X Multiome Sequencing - 1K nuclei", "490183"); - serviceInfoMap.put("10X VDJ Library", "490178"); - serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); - serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); - serviceInfoMap.put("10X Visium Library", "490190"); - serviceInfoMap.put("10X Visium Optimization", "490189"); - serviceInfoMap.put("10X Visium Sequencing (25%)", "490191"); - serviceInfoMap.put("ACCESS - Normal", "406820"); + serviceInfoMap.put("10X VDJ Library", "490178"); // Lib Prep? + serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); // Sequencing, VDJ/FB? + serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); // Sequencing, VDJ/FB? + serviceInfoMap.put("10X Visium Library", "490190"); // Lib Prep? + serviceInfoMap.put("10X Visium Optimization", "490189"); // What property is "Optimization"? + serviceInfoMap.put("10X Visium Sequencing (25%)", "490191"); // Sequencing + serviceInfoMap.put("ACCESS - Normal", "406820"); //Tumor or normal in sample serviceInfoMap.put("ACCESS - Tumor", "406821"); - serviceInfoMap.put("Adaptive immunoSEQ - Deep", "490139"); - serviceInfoMap.put("Adaptive immunoSEQ - Survey", "490138"); - serviceInfoMap.put("Adaptive immunoSEQ - Ultradeep", "490504"); - serviceInfoMap.put("AmpliconSeq", "490510"); - serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); - serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); - serviceInfoMap.put("Archer Immunoverse", "490140"); - serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal - serviceInfoMap.put("ATAC-Seq", "483257"); - serviceInfoMap.put("Cell Line Authentication", "490142"); - serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); - serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); - serviceInfoMap.put("CMO-CH", "492855"); - serviceInfoMap.put("CRISPR-Seq", "308754"); - serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); - serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); - serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); - serviceInfoMap.put("Data Handling", "491618"); // IGO Internal - serviceInfoMap.put("ddPCR (1 reaction)", "256041"); - serviceInfoMap.put("ddPCR Assay Design", "288524"); - serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); - serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); - serviceInfoMap.put("ddPCR Human % Assay", "490143"); - serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); - serviceInfoMap.put("DLP Library - 800 cells", "490187"); - serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); - serviceInfoMap.put("DNA Extraction - Blood", "256034"); - serviceInfoMap.put("DNA Extraction - FFPE", "256048"); - serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); - serviceInfoMap.put("DNA Extraction - Nails", "288528"); - serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); - serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); - serviceInfoMap.put("Double Capture", "497933"); // IGO Internal - serviceInfoMap.put("EPIC Methyl Capture", "483259"); - serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); - serviceInfoMap.put("FFPE Sectioning - Slides", "260305"); - serviceInfoMap.put("Fingerprinting - STR", "302835"); - serviceInfoMap.put("H&E Stain", "260304"); - serviceInfoMap.put("HemePACT - Normal", "259603"); - serviceInfoMap.put("HemePACT - Tumor", "406819"); - serviceInfoMap.put("IMPACT - Mouse", "331388"); +// serviceInfoMap.put("Adaptive immunoSEQ - Deep", "490139"); // Where to find Deep/ Survey/ Ultradeep? +// serviceInfoMap.put("Adaptive immunoSEQ - Survey", "490138"); +// serviceInfoMap.put("Adaptive immunoSEQ - Ultradeep", "490504"); + serviceInfoMap.put("AmpliconSeq", "490510"); // Request name: AmpliconSeq + serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); // Request name: Archer + serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); // Request name: Archer + serviceInfoMap.put("Archer Immunoverse", "490140"); // Request name: Archer + serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal, Request name: ATACSeq, Do we charge for IGO internals? + serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq + serviceInfoMap.put("Cell Line Authentication", "490142"); // Request name: CellLineAuthentication + serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); // What is the request name? + serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); // Request name: ChIPSeq + serviceInfoMap.put("CMO-CH", "492855"); // Request name: CMO-CH + serviceInfoMap.put("CRISPR-Seq", "308754"); // Request name: CRISPRSeq + serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? + serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? + serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); // analysis Pipelinable or BIC AutoRunnable? (request table) + serviceInfoMap.put("Data Handling", "491618"); // IGO Internal, Any expense entered in the iLab? + serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR + serviceInfoMap.put("ddPCR Assay Design", "288524"); // Where do this property + serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species + serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // What is "KRAS Multiplexing"? + serviceInfoMap.put("DLP Library - 800 cells", "490187"); // DLP Lib Prep + serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); // DLP Sequencing + serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? + serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample Preservation: FFPE? + serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen + serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? + serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? + serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? + serviceInfoMap.put("Double Capture", "497933"); // IGO Internal, iLab charge? Request name: CustomCapture??? + serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq??? + serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); // what is it? + serviceInfoMap.put("FFPE Sectioning - Slides", "260305"); // what is it? + serviceInfoMap.put("Fingerprinting - STR", "302835"); // None Sequencing, Cell line Auth? + serviceInfoMap.put("H&E Stain", "260304"); // Is it a request name? What property is it? + serviceInfoMap.put("HemePACT - Normal", "259603"); // Tumor or normal Sample level info + serviceInfoMap.put("HemePACT - Tumor", "406819"); // Tumor or normal Sample level info + serviceInfoMap.put("IMPACT - Mouse", "331388"); // Tumor or normal/ Species Sample level info serviceInfoMap.put("IMPACT - Normal", "256124"); serviceInfoMap.put("IMPACT - Tumor", "406813"); serviceInfoMap.put("KAPA HT Library Prep", "256127"); - serviceInfoMap.put("KAPA Hyper Library Prep", "351941"); - serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); - serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); - serviceInfoMap.put("Micronic Tube", "308755"); + serviceInfoMap.put("KAPA Hyper Library Prep", "351941"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded + serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded + serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded + serviceInfoMap.put("Micronic Tube", "308755"); // Where is it included? serviceInfoMap.put("PlateSeq Library Prep", "490185"); serviceInfoMap.put("PlateSeq Sequencing - 1 column", "490186"); - serviceInfoMap.put("PolyA Library Prep", "490511"); - serviceInfoMap.put("QC - Agilent", "256044"); - serviceInfoMap.put("QC - Quant-it", "259492"); - serviceInfoMap.put("QC - Quantity + Quality", "256029"); - serviceInfoMap.put("RiboDepletion Library Prep", "490512"); - serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); - serviceInfoMap.put("RNA Extraction - FFPE", "256100"); - serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); - serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); - serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); - serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); - serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); - serviceInfoMap.put("RNASeq - polyA - 30-40M", "404331"); - serviceInfoMap.put("RNASeq - polyA - 40-50M", "487566"); - serviceInfoMap.put("RNASeq - polyA - 50-60M", "404332"); - serviceInfoMap.put("RNASeq - polyA - 60-80M", "490144"); - serviceInfoMap.put("RNASeq - polyA - 80-100M", "404334"); - serviceInfoMap.put("RNASeq - Ribodeplete - 10-20M", "490508"); - serviceInfoMap.put("RNASeq - Ribodeplete - 100M+", "490509"); - serviceInfoMap.put("RNASeq - Ribodeplete - 20-30M", "490145"); - serviceInfoMap.put("RNASeq - Ribodeplete - 30-40M", "404335"); - serviceInfoMap.put("RNASeq - Ribodeplete - 40-50M", "490146"); - serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); - serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); - serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); - serviceInfoMap.put("Sample Capture + Library", "490514"); - serviceInfoMap.put("Sample Pooling", "491619"); + serviceInfoMap.put("PolyA Library Prep", "490511"); // Lib prep + serviceInfoMap.put("QC - Agilent", "256044"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Quant-it", "259492"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DNA? RNA? Library? + serviceInfoMap.put("RiboDepletion Library Prep", "490512"); // Lib prep + serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? + serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties + serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property? + serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 30-40M", "404331"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 40-50M", "487566"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 50-60M", "404332"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 60-80M", "490144"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - polyA - 80-100M", "404334"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads + serviceInfoMap.put("RNASeq - Ribodeplete - 10-20M", "490508"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 100M+", "490509"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 20-30M", "490145"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 30-40M", "404335"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 40-50M", "490146"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("Sample Capture + Library", "490514"); // Where is it included? + serviceInfoMap.put("Sample Pooling", "491619"); // Is it included in all services goring into sequencing? + + // Sequencing Only serviceInfoMap.put("Sequencing - 100M Reads - 150c", "490157"); serviceInfoMap.put("Sequencing - 100M Reads - 300c", "490158"); serviceInfoMap.put("Sequencing - 10M Reads - 10X Standard", "490149"); @@ -137,20 +141,23 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Sequencing - MiSeq Micro 300c", "490152"); serviceInfoMap.put("Sequencing - MiSeq Nano 300c", "490150"); serviceInfoMap.put("Sequencing - MiSeq Nano 500c", "490151"); - serviceInfoMap.put("Shallow WGS", "341254"); - serviceInfoMap.put("Slide Dissection", "260643"); - serviceInfoMap.put("Slide Scraping", "296697"); - serviceInfoMap.put("SMARTer Amplification", "261859"); - serviceInfoMap.put("Special Processing -- Extraction", "487571"); + + // End of Sequencing Only + + serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? + serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? + serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? + serviceInfoMap.put("SMARTer Amplification", "261859"); // Request name: RNASeq-SMARTerAmp + serviceInfoMap.put("Special Processing -- Extraction", "487571"); // ? serviceInfoMap.put("TCRSeq-IGO", "498671"); - serviceInfoMap.put("UMI Library Prep", "351940"); - serviceInfoMap.put("WES - 100X", "289981"); + serviceInfoMap.put("UMI Library Prep", "351940"); // ? + serviceInfoMap.put("WES - 100X", "289981"); // WholeExomeKapaLib + coverage serviceInfoMap.put("WES - 150X", "289982"); serviceInfoMap.put("WES - 200X", "289983"); serviceInfoMap.put("WES - 250X", "289984"); serviceInfoMap.put("WES - 30X", "289979"); serviceInfoMap.put("WES - 70X", "289980"); - serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); + serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); serviceInfoMap.put("WGS - PCR+ - 150X", "490205"); serviceInfoMap.put("WGS - PCR+ - 30X", "490199"); @@ -196,6 +203,10 @@ public PluginResult run() throws Throwable { private List outputChargesInfo(String serviceType) { // Logic for charges corresponding to different services + // Request name in Request table is a drop down menu with certain options + //SeqRequirement datatype to find the read length, requested reads, minimum reads, coverage + // Use sample table properties: Species, origin, + } private void generateiLabChargeSheet() { // Make the sheet with 7 columns From ea0b9adc544921fcde3e37b18b32f762ac988fd6 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 7 Sep 2022 17:02:29 -0400 Subject: [PATCH 06/27] Charges info logic progress. --- .../Sequencing/GenerateiLabChargesUpload.java | 234 +++++++++++++++++- 1 file changed, 231 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index d3df3490..493c262d 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -10,6 +10,7 @@ import com.velox.sapioutils.shared.utilities.ExemplarConfig; import org.apache.commons.lang3.exception.ExceptionUtils; +import javax.xml.crypto.Data; import java.io.*; import java.rmi.RemoteException; import java.util.*; @@ -191,8 +192,9 @@ public PluginResult run() throws Throwable { // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email // address, PI email address, Date of request, service_request_id? List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); - String serviceType = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0) - .getStringVal("Recipe", user); + DataRecord firstSample = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0); + String serviceType = firstSample.getParentsOfType("Request", user).get(0) + .getStringVal("RequestName", user); List chargesInfo = outputChargesInfo(serviceType); setFieldsForReport(chargesInfo); generateiLabChargeSheet(); @@ -202,10 +204,236 @@ public PluginResult run() throws Throwable { private List outputChargesInfo(String serviceType) { // Logic for charges corresponding to different services + List chargeInfoRecords = new LinkedList<>(); + // Request name in Request table is a drop down menu with certain options //SeqRequirement datatype to find the read length, requested reads, minimum reads, coverage // Use sample table properties: Species, origin, + Object serviceId; + serviceId = serviceInfoMap.get(serviceType); + chargeInfoRecords.add(0, (DataRecord) serviceId); + if(serviceType.equals("DNAExtraction")) { + + } + if(serviceType.equals("RNAExtraction")) { + + } + if(serviceType.equals("RNAExtraction-COVIDScreen")) { + + } + if(serviceType.equals("DNA Cleanup")) { + + } + if(serviceType.equals("RNA Cleanup")) { + + } + if(serviceType.equals("DNA/RNASimultaneous")) { + + } + if(serviceType.equals("PATH-DNAExtraction")) { + + } + if(serviceType.equals("PATH-RNAExtraction")) { + + } + if(serviceType.equals("PATH-DNA/RNASimultaneous")) { + + } + if(serviceType.equals("BloodExtraction")) { + + } + if(serviceType.equals("DNA-QC")) { + + } + if(serviceType.equals("RNA-QC")) { + + } + if(serviceType.equals("Library-QC")) { + + } + if(serviceType.equals("IMPACT341")) { + + } + if(serviceType.equals("IMPACT341+")) { + + } + if(serviceType.equals("IMPACT410")) { + + } + if(serviceType.equals("IMPACT410+")) { + + } + if(serviceType.equals("IMPACT468")) { + + } + if(serviceType.equals("IMPACT505")) { + + } + if(serviceType.equals("PM-IMPACT")) { + + } + if(serviceType.equals("M-IMPACT")) { + + } + if(serviceType.equals("HemePACT_v3")) { + + } + if(serviceType.equals("HemePACT_v3+")) { + + } + if(serviceType.equals("HemePACT_v4")) { + + } + if(serviceType.equals("CustomCapture")) { + + } + if(serviceType.equals("MSK-ACCESS_v1")) { + + } + if(serviceType.equals("MissionBio")) { + + } + if(serviceType.equals("RNASeq-TruSeqPolyA")) { + + } + if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { + + } + if(serviceType.equals("RNASeq-TruSeqFusion")) { + + } + if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { + + } + if(serviceType.equals("RNASeq-SMARTerAmp")) { + + } + if(serviceType.equals("Rapid-RCC")) { + + } + if(serviceType.equals("Archer")) { + + } + if(serviceType.equals("NanoString")) { + + } + if(serviceType.equals("10XGenomics_GeneExpression")) { + + } + if(serviceType.equals("10XGenomics_VDJ")) { + + } + if(serviceType.equals("10XGenomics_CNV")) { + + } + if(serviceType.equals("10XGenomics_FeatureBarcoding")) { + + } + if(serviceType.equals("10XGenomics_Multiome")) { + + } + if(serviceType.equals("10XGenomics_Visium")) { + + } + if(serviceType.equals("96Well_SmartSeq2")) { + + } + if(serviceType.equals("WholeExome + IMPACT")) { + + } + if(serviceType.equals("WholeExome-KAPALib")) { + + } + if(serviceType.equals("HumanWholeGenome")) { + + } + if(serviceType.equals("MouseWholeGenome")) { + + } + if(serviceType.equals("WholeGenome")) { + + } + if(serviceType.equals("sWGS")) { + + } + if(serviceType.equals("ChIPSeq")) { + + } + if(serviceType.equals("MethylSeq")) { + + } + if(serviceType.equals("CRISPRSeq")) { + + } + if(serviceType.equals("shRNAScreen")) { + + } + if(serviceType.equals("RiboProfileSeq")) { + + } + if(serviceType.equals("ATACSeq")) { + + } + if(serviceType.equals("AmpliSeq")) { + + } + if(serviceType.equals("AmpliconSeq")) { + + } + if(serviceType.equals("AdaptiveImmunoSeq")) { + + } + if(serviceType.equals("CLIPSeq")) { + + } + if(serviceType.equals("HiSeq-Other")) { + + } + if(serviceType.equals("MiSeq-Other")) { + + } + if(serviceType.equals("NextSeq-Other")) { + + } + if(serviceType.equals("NovaSeq-Other")) { + + } + if(serviceType.equals("Investigator Prepared Libraries")) { + + } + if(serviceType.equals("Investigator Prepared Pools")) { + + } + if(serviceType.equals("ddPCR")) { + + } + if(serviceType.equals("DLP")) { + + } + if(serviceType.equals("PED-PEG")) { + + } + if(serviceType.equals("IGO-Test")) { + + } + if(serviceType.equals("FragmentAnalysis")) { + + } + if(serviceType.equals("CellLineAuthentication")) { + + } + if(serviceType.equals("SingleCellCNV")) { + + } + if(serviceType.equals("CMO-CH")) { + + } + if(serviceType.equals("TCRSeq-IGO")) { + + } + + return chargeInfoRecords; } private void generateiLabChargeSheet() { @@ -289,7 +517,7 @@ private List> setFieldsForReport(List chargesInf String purchaseDate = requestRecord.getStringVal("RequestDate", user); String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); - reportFieldValues.put("serviceId", ); + reportFieldValues.put("serviceId", chargesInformation.get(0).toString()); reportFieldValues.put("note", requestId); reportFieldValues.put("serviceQuantity", serviceQuantity); reportFieldValues.put("purchasedOn", purchaseDate); From a4ca46423c84ec4579a5fd5a4a8b5e3ed313086b Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 8 Sep 2022 10:01:54 -0400 Subject: [PATCH 07/27] Readig request, sample and seq requirements properties. --- .../Sequencing/GenerateiLabChargesUpload.java | 426 ++++++++++-------- 1 file changed, 245 insertions(+), 181 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 493c262d..b0e0c4a9 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -21,80 +21,113 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private static final Map serviceInfoMap = new HashMap<>(); static { // Make the map of Service Name -> Service ID + //QC + serviceInfoMap.put("QC - Agilent", "256044"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Quant-it", "259492"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DNA? RNA? Library? + // DDPCR Non-Sequencing + serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR + serviceInfoMap.put("ddPCR Assay Design", "288524"); // Where do this property + serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species + serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // What is "KRAS Multiplexing"? + // CellLine Aut (STR) Non-Sequencing + serviceInfoMap.put("Cell Line Authentication", "490142"); // Request name: CellLineAuthentication + serviceInfoMap.put("Fingerprinting - STR", "302835"); // None Sequencing, Cell line Auth? + // Data Analysis + serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? + serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? + serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); // analysis Pipelinable or BIC AutoRunnable? (request table) + serviceInfoMap.put("Data Handling", "491618"); // IGO Internal, Any expense entered in the iLab? + + // Library Prep serviceInfoMap.put("10X FB Library", "490181"); //Feature Barcoding + serviceInfoMap.put("10X GEX Library", "490175"); // Gene Expression Library Prep serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); // Gene Expression Sequencing + cell count (sample table) serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); // Gene Expression Sequencing + cell count (sample table) + serviceInfoMap.put("10X Multiome Library", "490182"); // Multiome Lib Prep serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); // Where to find Nuclei info? which table? serviceInfoMap.put("10X Multiome Sequencing - 1K nuclei", "490183"); + serviceInfoMap.put("10X VDJ Library", "490178"); // Lib Prep? serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); // Sequencing, VDJ/FB? serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); // Sequencing, VDJ/FB? + serviceInfoMap.put("10X Visium Library", "490190"); // Lib Prep? serviceInfoMap.put("10X Visium Optimization", "490189"); // What property is "Optimization"? serviceInfoMap.put("10X Visium Sequencing (25%)", "490191"); // Sequencing + + serviceInfoMap.put("ACCESS - Normal", "406820"); //Tumor or normal in sample serviceInfoMap.put("ACCESS - Tumor", "406821"); // serviceInfoMap.put("Adaptive immunoSEQ - Deep", "490139"); // Where to find Deep/ Survey/ Ultradeep? // serviceInfoMap.put("Adaptive immunoSEQ - Survey", "490138"); // serviceInfoMap.put("Adaptive immunoSEQ - Ultradeep", "490504"); serviceInfoMap.put("AmpliconSeq", "490510"); // Request name: AmpliconSeq + serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); // Request name: Archer serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); // Request name: Archer serviceInfoMap.put("Archer Immunoverse", "490140"); // Request name: Archer + serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal, Request name: ATACSeq, Do we charge for IGO internals? serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq - serviceInfoMap.put("Cell Line Authentication", "490142"); // Request name: CellLineAuthentication + serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); // What is the request name? + serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); // Request name: ChIPSeq + serviceInfoMap.put("CMO-CH", "492855"); // Request name: CMO-CH + serviceInfoMap.put("CRISPR-Seq", "308754"); // Request name: CRISPRSeq - serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? - serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? - serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); // analysis Pipelinable or BIC AutoRunnable? (request table) - serviceInfoMap.put("Data Handling", "491618"); // IGO Internal, Any expense entered in the iLab? - serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR - serviceInfoMap.put("ddPCR Assay Design", "288524"); // Where do this property - serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); // Pick list ID: ddPCR Assay Type - serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); // Pick list ID: ddPCR Assay Type - serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species - serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // What is "KRAS Multiplexing"? + serviceInfoMap.put("DLP Library - 800 cells", "490187"); // DLP Lib Prep serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); // DLP Sequencing + serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample Preservation: FFPE? serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? + serviceInfoMap.put("Double Capture", "497933"); // IGO Internal, iLab charge? Request name: CustomCapture??? + serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq??? + serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); // what is it? serviceInfoMap.put("FFPE Sectioning - Slides", "260305"); // what is it? - serviceInfoMap.put("Fingerprinting - STR", "302835"); // None Sequencing, Cell line Auth? + serviceInfoMap.put("H&E Stain", "260304"); // Is it a request name? What property is it? + serviceInfoMap.put("HemePACT - Normal", "259603"); // Tumor or normal Sample level info serviceInfoMap.put("HemePACT - Tumor", "406819"); // Tumor or normal Sample level info + serviceInfoMap.put("IMPACT - Mouse", "331388"); // Tumor or normal/ Species Sample level info serviceInfoMap.put("IMPACT - Normal", "256124"); serviceInfoMap.put("IMPACT - Tumor", "406813"); + serviceInfoMap.put("KAPA HT Library Prep", "256127"); serviceInfoMap.put("KAPA Hyper Library Prep", "351941"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded + serviceInfoMap.put("Micronic Tube", "308755"); // Where is it included? + serviceInfoMap.put("PlateSeq Library Prep", "490185"); serviceInfoMap.put("PlateSeq Sequencing - 1 column", "490186"); + serviceInfoMap.put("PolyA Library Prep", "490511"); // Lib prep - serviceInfoMap.put("QC - Agilent", "256044"); // DNA? RNA? Library? - serviceInfoMap.put("QC - Quant-it", "259492"); // DNA? RNA? Library? - serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DNA? RNA? Library? + serviceInfoMap.put("RiboDepletion Library Prep", "490512"); // Lib prep - serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen - serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? - serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties - serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property? + //serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen + + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample preservation? + serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? + serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? + serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads @@ -111,8 +144,10 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? + serviceInfoMap.put("Sample Capture + Library", "490514"); // Where is it included? - serviceInfoMap.put("Sample Pooling", "491619"); // Is it included in all services goring into sequencing? + + serviceInfoMap.put("Sample Pooling", "491619"); // Is it included in all services going into sequencing? // Sequencing Only serviceInfoMap.put("Sequencing - 100M Reads - 150c", "490157"); @@ -146,18 +181,25 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { // End of Sequencing Only serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? + serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? + serviceInfoMap.put("SMARTer Amplification", "261859"); // Request name: RNASeq-SMARTerAmp + serviceInfoMap.put("Special Processing -- Extraction", "487571"); // ? + serviceInfoMap.put("TCRSeq-IGO", "498671"); + serviceInfoMap.put("UMI Library Prep", "351940"); // ? + serviceInfoMap.put("WES - 100X", "289981"); // WholeExomeKapaLib + coverage serviceInfoMap.put("WES - 150X", "289982"); serviceInfoMap.put("WES - 200X", "289983"); serviceInfoMap.put("WES - 250X", "289984"); serviceInfoMap.put("WES - 30X", "289979"); serviceInfoMap.put("WES - 70X", "289980"); + serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); serviceInfoMap.put("WGS - PCR+ - 150X", "490205"); @@ -193,248 +235,265 @@ public PluginResult run() throws Throwable { // address, PI email address, Date of request, service_request_id? List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); DataRecord firstSample = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0); - String serviceType = firstSample.getParentsOfType("Request", user).get(0) - .getStringVal("RequestName", user); - List chargesInfo = outputChargesInfo(serviceType); + List chargesInfo = outputChargesInfo(firstSample); setFieldsForReport(chargesInfo); generateiLabChargeSheet(); - // Populate different services sheets return new PluginResult(true); } - private List outputChargesInfo(String serviceType) { - // Logic for charges corresponding to different services - List chargeInfoRecords = new LinkedList<>(); + /** + * Logic for charges corresponding to different service types + * @param firstSample + * @return all iLab template sheet information for the bulk charge upload + * */ + private List outputChargesInfo(DataRecord firstSample) { + List chargeInfoRecords = new LinkedList<>(); + try { + String serviceType = firstSample.getParentsOfType("Request", user).get(0) + .getStringVal("RequestName", user); + String species = firstSample.getStringVal("Species", user); + String preservation = firstSample.getStringVal("Preservation", user); + String tumorOrNormal = firstSample.getStringVal("TumorOrNormal", user); + String assay = firstSample.getStringVal("Assay", user); + String origin = firstSample.getStringVal("SampleOrigin", user); - // Request name in Request table is a drop down menu with certain options - //SeqRequirement datatype to find the read length, requested reads, minimum reads, coverage - // Use sample table properties: Species, origin, - Object serviceId; - serviceId = serviceInfoMap.get(serviceType); - chargeInfoRecords.add(0, (DataRecord) serviceId); - if(serviceType.equals("DNAExtraction")) { - } - if(serviceType.equals("RNAExtraction")) { + DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); + String maxNumOfReads = seqRequeirements[0].getStringVal("RequestedReads", user); + String covrage = seqRequeirements[0].getStringVal("CoverageTarget", user); + String runLength = seqRequeirements[0].getStringVal("SequencingRunType", user); - } - if(serviceType.equals("RNAExtraction-COVIDScreen")) { + // Request name in Request table is a drop down menu with certain options + Object serviceId; + // Adding rows of charges information for each service + if(serviceType.contains("DNA") && serviceType.contains("Extraction")) { - } - if(serviceType.equals("DNA Cleanup")) { - - } - if(serviceType.equals("RNA Cleanup")) { + } + if(serviceType.contains("RNA") && serviceType.contains("Extraction")) { - } - if(serviceType.equals("DNA/RNASimultaneous")) { + } +// if(serviceType.equals("RNAExtraction-COVIDScreen")) { +// +// } + if(serviceType.equals("DNA Cleanup")) { - } - if(serviceType.equals("PATH-DNAExtraction")) { + } + if(serviceType.equals("RNA Cleanup")) { - } - if(serviceType.equals("PATH-RNAExtraction")) { + } + if(serviceType.equals("DNA/RNASimultaneous")) { - } - if(serviceType.equals("PATH-DNA/RNASimultaneous")) { + } + if(serviceType.equals("PATH-DNAExtraction")) { - } - if(serviceType.equals("BloodExtraction")) { + } + if(serviceType.equals("PATH-RNAExtraction")) { - } - if(serviceType.equals("DNA-QC")) { + } + if(serviceType.equals("PATH-DNA/RNASimultaneous")) { - } - if(serviceType.equals("RNA-QC")) { + } + if(serviceType.equals("BloodExtraction")) { - } - if(serviceType.equals("Library-QC")) { + } + if(serviceType.equals("DNA-QC")) { - } - if(serviceType.equals("IMPACT341")) { + } + if(serviceType.equals("RNA-QC")) { - } - if(serviceType.equals("IMPACT341+")) { + } + if(serviceType.equals("Library-QC")) { - } - if(serviceType.equals("IMPACT410")) { + } + if(serviceType.equals("IMPACT341")) { - } - if(serviceType.equals("IMPACT410+")) { + } + if(serviceType.equals("IMPACT341+")) { - } - if(serviceType.equals("IMPACT468")) { + } + if(serviceType.equals("IMPACT410")) { - } - if(serviceType.equals("IMPACT505")) { + } + if(serviceType.equals("IMPACT410+")) { - } - if(serviceType.equals("PM-IMPACT")) { + } + if(serviceType.equals("IMPACT468")) { - } - if(serviceType.equals("M-IMPACT")) { + } + if(serviceType.equals("IMPACT505")) { - } - if(serviceType.equals("HemePACT_v3")) { + } + if(serviceType.equals("PM-IMPACT")) { - } - if(serviceType.equals("HemePACT_v3+")) { + } + if(serviceType.equals("M-IMPACT")) { - } - if(serviceType.equals("HemePACT_v4")) { + } + if(serviceType.equals("HemePACT_v3")) { - } - if(serviceType.equals("CustomCapture")) { + } + if(serviceType.equals("HemePACT_v3+")) { - } - if(serviceType.equals("MSK-ACCESS_v1")) { + } + if(serviceType.equals("HemePACT_v4")) { - } - if(serviceType.equals("MissionBio")) { + } + if(serviceType.equals("CustomCapture")) { - } - if(serviceType.equals("RNASeq-TruSeqPolyA")) { + } + if(serviceType.equals("MSK-ACCESS_v1")) { - } - if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { + } + if(serviceType.equals("MissionBio")) { - } - if(serviceType.equals("RNASeq-TruSeqFusion")) { + } + if(serviceType.equals("RNASeq-TruSeqPolyA")) { - } - if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { + } + if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { - } - if(serviceType.equals("RNASeq-SMARTerAmp")) { + } + if(serviceType.equals("RNASeq-TruSeqFusion")) { - } - if(serviceType.equals("Rapid-RCC")) { + } + if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { - } - if(serviceType.equals("Archer")) { + } + if(serviceType.equals("RNASeq-SMARTerAmp")) { - } - if(serviceType.equals("NanoString")) { + } + if(serviceType.equals("Rapid-RCC")) { - } - if(serviceType.equals("10XGenomics_GeneExpression")) { + } + if(serviceType.equals("Archer")) { - } - if(serviceType.equals("10XGenomics_VDJ")) { + } + if(serviceType.equals("NanoString")) { - } - if(serviceType.equals("10XGenomics_CNV")) { + } + if(serviceType.equals("10XGenomics_GeneExpression")) { - } - if(serviceType.equals("10XGenomics_FeatureBarcoding")) { + } + if(serviceType.equals("10XGenomics_VDJ")) { - } - if(serviceType.equals("10XGenomics_Multiome")) { + } + if(serviceType.equals("10XGenomics_CNV")) { - } - if(serviceType.equals("10XGenomics_Visium")) { + } + if(serviceType.equals("10XGenomics_FeatureBarcoding")) { - } - if(serviceType.equals("96Well_SmartSeq2")) { + } + if(serviceType.equals("10XGenomics_Multiome")) { - } - if(serviceType.equals("WholeExome + IMPACT")) { + } + if(serviceType.equals("10XGenomics_Visium")) { - } - if(serviceType.equals("WholeExome-KAPALib")) { + } + if(serviceType.equals("96Well_SmartSeq2")) { - } - if(serviceType.equals("HumanWholeGenome")) { + } + if(serviceType.equals("WholeExome + IMPACT")) { - } - if(serviceType.equals("MouseWholeGenome")) { + } + if(serviceType.equals("WholeExome-KAPALib")) { - } - if(serviceType.equals("WholeGenome")) { + } + if(serviceType.equals("HumanWholeGenome")) { - } - if(serviceType.equals("sWGS")) { + } + if(serviceType.equals("MouseWholeGenome")) { - } - if(serviceType.equals("ChIPSeq")) { + } + if(serviceType.equals("WholeGenome")) { - } - if(serviceType.equals("MethylSeq")) { + } + if(serviceType.equals("sWGS")) { - } - if(serviceType.equals("CRISPRSeq")) { + } + if(serviceType.equals("ChIPSeq")) { - } - if(serviceType.equals("shRNAScreen")) { + } + if(serviceType.equals("MethylSeq")) { - } - if(serviceType.equals("RiboProfileSeq")) { + } + if(serviceType.equals("CRISPRSeq")) { - } - if(serviceType.equals("ATACSeq")) { + } + if(serviceType.equals("shRNAScreen")) { - } - if(serviceType.equals("AmpliSeq")) { + } + if(serviceType.equals("RiboProfileSeq")) { - } - if(serviceType.equals("AmpliconSeq")) { + } + if(serviceType.equals("ATACSeq")) { - } - if(serviceType.equals("AdaptiveImmunoSeq")) { + } + if(serviceType.equals("AmpliSeq")) { - } - if(serviceType.equals("CLIPSeq")) { + } + if(serviceType.equals("AmpliconSeq")) { - } - if(serviceType.equals("HiSeq-Other")) { + } + if(serviceType.equals("AdaptiveImmunoSeq")) { - } - if(serviceType.equals("MiSeq-Other")) { + } + if(serviceType.equals("CLIPSeq")) { - } - if(serviceType.equals("NextSeq-Other")) { + } + if(serviceType.equals("HiSeq-Other")) { - } - if(serviceType.equals("NovaSeq-Other")) { + } + if(serviceType.equals("MiSeq-Other")) { - } - if(serviceType.equals("Investigator Prepared Libraries")) { + } + if(serviceType.equals("NextSeq-Other")) { - } - if(serviceType.equals("Investigator Prepared Pools")) { + } + if(serviceType.equals("NovaSeq-Other")) { - } - if(serviceType.equals("ddPCR")) { + } + if(serviceType.equals("Investigator Prepared Libraries")) { + // sequencing only + } + if(serviceType.equals("Investigator Prepared Pools")) { + // sequencing only + } + if(serviceType.equals("ddPCR")) { - } - if(serviceType.equals("DLP")) { + } + if(serviceType.equals("DLP")) { - } - if(serviceType.equals("PED-PEG")) { + } + if(serviceType.equals("PED-PEG")) { - } - if(serviceType.equals("IGO-Test")) { + } + if(serviceType.equals("IGO-Test")) { - } - if(serviceType.equals("FragmentAnalysis")) { + } + if(serviceType.equals("FragmentAnalysis")) { - } - if(serviceType.equals("CellLineAuthentication")) { + } + if(serviceType.equals("CellLineAuthentication")) { - } - if(serviceType.equals("SingleCellCNV")) { + } + if(serviceType.equals("SingleCellCNV")) { - } - if(serviceType.equals("CMO-CH")) { + } + if(serviceType.equals("CMO-CH")) { - } - if(serviceType.equals("TCRSeq-IGO")) { + } + if(serviceType.equals("TCRSeq-IGO")) { + } + serviceId = serviceInfoMap.get(serviceType); + // Adding recognized serviceId to the last element of the returned list + chargeInfoRecords.add(chargeInfoRecords.size(), (DataRecord) serviceId); + } catch (IoError | RemoteException | NotFound e) { + logError("An exception occurred while retrieving first sample's request info"); } return chargeInfoRecords; - } private void generateiLabChargeSheet() { // Make the sheet with 7 columns @@ -505,6 +564,11 @@ private void generateiLabChargeSheet() { } } + /** + * Setting the iLab template sheet fields + * @param chargesInformation + * @return List of map of iLab template fields and their values + * */ private List> setFieldsForReport(List chargesInformation) { List> reportFieldValueMaps = new ArrayList<>(); for (DataRecord record : chargesInformation) { @@ -517,7 +581,7 @@ private List> setFieldsForReport(List chargesInf String purchaseDate = requestRecord.getStringVal("RequestDate", user); String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); - reportFieldValues.put("serviceId", chargesInformation.get(0).toString()); + reportFieldValues.put("serviceId", chargesInformation.get(chargesInformation.size() - 1).toString()); reportFieldValues.put("note", requestId); reportFieldValues.put("serviceQuantity", serviceQuantity); reportFieldValues.put("purchasedOn", purchaseDate); From f72c0ef991e4360ec46c331e444265ec0b2f68e7 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Tue, 13 Sep 2022 13:33:17 -0400 Subject: [PATCH 08/27] Considering different project's samples on one flowcell. --- .../Sequencing/GenerateiLabChargesUpload.java | 105 ++++++++---------- 1 file changed, 49 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index b0e0c4a9..7c903300 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -10,13 +10,16 @@ import com.velox.sapioutils.shared.utilities.ExemplarConfig; import org.apache.commons.lang3.exception.ExceptionUtils; -import javax.xml.crypto.Data; import java.io.*; import java.rmi.RemoteException; import java.util.*; -public class GenerateiLabChargesUpload extends DefaultGenericPlugin { +//**************Can I upload a dummy charge upload to actual IGO core room? ***************** + + +public class GenerateiLabChargesUpload extends DefaultGenericPlugin { + public List> dataValues = new LinkedList<>(); // SampleReceving Request Type pick list ID private static final Map serviceInfoMap = new HashMap<>(); @@ -229,15 +232,25 @@ public boolean shouldRun() throws RemoteException { !this.activeTask.getTask().getTaskOptions().containsKey("GENERATE ILAB CHARGES SHEET GENERATED"); } + /** + * At any run we are processing charges for ALL requests for which their samples are present in the flowcell we are + * looking at, at the Illumina sequencing workflow + * */ public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email // address, PI email address, Date of request, service_request_id? List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); - DataRecord firstSample = flowCellSamples.get(0).getParentsOfType("Sample", user).get(0); - List chargesInfo = outputChargesInfo(firstSample); - setFieldsForReport(chargesInfo); - generateiLabChargeSheet(); + Set uniqueRequestsOnTheFlowCell = new HashSet<>(); + for(DataRecord eachSample : flowCellSamples) { + DataRecord firstSampleOfEachRequest = eachSample.getParentsOfType("Sample", user).get(0); + String requestId = firstSampleOfEachRequest.getParentsOfType("Request", user).get(0).getStringVal("RequestId", user); + if (uniqueRequestsOnTheFlowCell.add(requestId)) { + dataValues = outputChargesInfo(firstSampleOfEachRequest); + generateiLabChargeSheet(); + } + dataValues.clear(); + } return new PluginResult(true); } @@ -246,29 +259,47 @@ public PluginResult run() throws Throwable { * @param firstSample * @return all iLab template sheet information for the bulk charge upload * */ - private List outputChargesInfo(DataRecord firstSample) { + private List> outputChargesInfo(DataRecord firstSample) { - List chargeInfoRecords = new LinkedList<>(); + List> chargeInfoRecords = new LinkedList<>(); try { String serviceType = firstSample.getParentsOfType("Request", user).get(0) .getStringVal("RequestName", user); + // Request level information + DataRecord requestRecord = firstSample.getParentsOfType("Request", user).get(0); + String ownerEmail = requestRecord.getStringVal("ProjectOwner", user); + String piEmail = requestRecord.getStringVal("PIemail", user); + String requestId = requestRecord.getStringVal("RequestId", user); + String purchaseDate = requestRecord.getStringVal("RequestDate", user); + String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); + // Sample level information String species = firstSample.getStringVal("Species", user); String preservation = firstSample.getStringVal("Preservation", user); String tumorOrNormal = firstSample.getStringVal("TumorOrNormal", user); String assay = firstSample.getStringVal("Assay", user); String origin = firstSample.getStringVal("SampleOrigin", user); - + // Sequencing Requirements DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); String maxNumOfReads = seqRequeirements[0].getStringVal("RequestedReads", user); String covrage = seqRequeirements[0].getStringVal("CoverageTarget", user); String runLength = seqRequeirements[0].getStringVal("SequencingRunType", user); // Request name in Request table is a drop down menu with certain options - Object serviceId; - // Adding rows of charges information for each service - if(serviceType.contains("DNA") && serviceType.contains("Extraction")) { + String serviceId; + Map reportFieldValues = new HashMap<>(); + reportFieldValues.put("note", requestId); + reportFieldValues.put("serviceQuantity", serviceQuantity); + reportFieldValues.put("purchasedOn", purchaseDate); + reportFieldValues.put("serviceRequestId", ); + reportFieldValues.put("ownerEmail", ownerEmail); + reportFieldValues.put("pIEmail", piEmail); + chargeInfoRecords.add(reportFieldValues); + + if(serviceType.contains("DNA") && serviceType.contains("Extraction")) { + serviceId = serviceInfoMap.get(serviceType); + reportFieldValues.put("serviceId", serviceId); } if(serviceType.contains("RNA") && serviceType.contains("Extraction")) { @@ -382,6 +413,7 @@ private List outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { + //490181 } if(serviceType.equals("10XGenomics_Multiome")) { @@ -486,19 +518,20 @@ private List outputChargesInfo(DataRecord firstSample) { if(serviceType.equals("TCRSeq-IGO")) { } - serviceId = serviceInfoMap.get(serviceType); - // Adding recognized serviceId to the last element of the returned list - chargeInfoRecords.add(chargeInfoRecords.size(), (DataRecord) serviceId); } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); } return chargeInfoRecords; } + + /** + * Generating the iLab bulk charge upload CSV sheet + * */ private void generateiLabChargeSheet() { // Make the sheet with 7 columns List headerValues; - List> dataValues; + //List> dataValues; List dataLines = new LinkedList<>(); String[] headersArray = new String[headerValues.size()]; int i = 0; @@ -537,7 +570,6 @@ private void generateiLabChargeSheet() { String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("").toString(); //"/pskis34/vialelab/LIMS/iLabBulkUploadCharges" - try (OutputStream fos = new FileOutputStream(outFile, false)){ fos.write(bytes); outFile.setReadOnly(); @@ -545,8 +577,6 @@ private void generateiLabChargeSheet() { } catch (Exception e) { logInfo("Error in writing to shared drive: " + e.getMessage()); } - - } catch (NotFound e) { logError(String.format("NotFoundException -> Error while exporting iLab bulk charge sheet:\n%s", ExceptionUtils.getStackTrace(e))); } catch (IoError e) { @@ -563,41 +593,4 @@ private void generateiLabChargeSheet() { } } } - - /** - * Setting the iLab template sheet fields - * @param chargesInformation - * @return List of map of iLab template fields and their values - * */ - private List> setFieldsForReport(List chargesInformation) { - List> reportFieldValueMaps = new ArrayList<>(); - for (DataRecord record : chargesInformation) { - Map reportFieldValues = new HashMap<>(); - try { - DataRecord requestRecord = record.getParentsOfType("Request", user).get(0); - String ownerEmail = requestRecord.getStringVal("ProjectOwner", user); - String piEmail = requestRecord.getStringVal("PIemail", user); - String requestId = requestRecord.getStringVal("RequestId", user); - String purchaseDate = requestRecord.getStringVal("RequestDate", user); - String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); - - reportFieldValues.put("serviceId", chargesInformation.get(chargesInformation.size() - 1).toString()); - reportFieldValues.put("note", requestId); - reportFieldValues.put("serviceQuantity", serviceQuantity); - reportFieldValues.put("purchasedOn", purchaseDate); - reportFieldValues.put("serviceRequestId", ); - reportFieldValues.put("ownerEmail", ownerEmail); - reportFieldValues.put("pIEmail", piEmail); - - reportFieldValueMaps.add(reportFieldValues); - } catch (IoError e) { - logError(String.format("IOError -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(e))); - } catch (RemoteException e) { - logError(String.format("RemoteException -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(e))); - } catch (NotFound notFound) { - logError(String.format("NotFound Exception -> Error setting field values for charges sheet:\n%s", ExceptionUtils.getStackTrace(notFound))); - } - } - return reportFieldValueMaps; - } } From e5cf3dd930423384157ddaf7b83c468aa0d25827 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 14 Sep 2022 10:06:45 -0400 Subject: [PATCH 09/27] Reducing code redundancy. --- .../Sequencing/GenerateiLabChargesUpload.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 7c903300..b786e0e1 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -287,19 +287,16 @@ private List> outputChargesInfo(DataRecord firstSample) { // Request name in Request table is a drop down menu with certain options String serviceId; - Map reportFieldValues = new HashMap<>(); + Map reportFieldValues; + Set requestsSeviceIds = new HashSet<>(); - reportFieldValues.put("note", requestId); - reportFieldValues.put("serviceQuantity", serviceQuantity); - reportFieldValues.put("purchasedOn", purchaseDate); - reportFieldValues.put("serviceRequestId", ); - reportFieldValues.put("ownerEmail", ownerEmail); - reportFieldValues.put("pIEmail", piEmail); - chargeInfoRecords.add(reportFieldValues); if(serviceType.contains("DNA") && serviceType.contains("Extraction")) { serviceId = serviceInfoMap.get(serviceType); - reportFieldValues.put("serviceId", serviceId); + // All the sample and request level condition checks occur here to figure out the appropriate set of + // service ids for each service + requestsSeviceIds.add(serviceId); + } if(serviceType.contains("RNA") && serviceType.contains("Extraction")) { @@ -518,6 +515,20 @@ private List> outputChargesInfo(DataRecord firstSample) { if(serviceType.equals("TCRSeq-IGO")) { } + + for(String eachServiceId : requestsSeviceIds) { + reportFieldValues = new HashMap<>(); + reportFieldValues.put("serviceId", eachServiceId); + reportFieldValues.put("note", requestId); + reportFieldValues.put("serviceQuantity", serviceQuantity); + reportFieldValues.put("purchasedOn", purchaseDate); + reportFieldValues.put("serviceRequestId", ); + reportFieldValues.put("ownerEmail", ownerEmail); + reportFieldValues.put("pIEmail", piEmail); + chargeInfoRecords.add(reportFieldValues); + } + + } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); } From 3d8ada8245c1592a059ff78d5b2dd8eeaafa2537 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 14 Sep 2022 10:59:36 -0400 Subject: [PATCH 10/27] Hardcoded header values. --- .../workflows/Sequencing/GenerateiLabChargesUpload.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index b786e0e1..aa562848 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -19,6 +19,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { + private List headerValues = Arrays.asList("service_id", "note", "service_quantity", "purchased_on", + "service_request_id", "owner_email", "pi_email_or_group_id"); public List> dataValues = new LinkedList<>(); // SampleReceving Request Type pick list ID @@ -527,8 +529,6 @@ private List> outputChargesInfo(DataRecord firstSample) { reportFieldValues.put("pIEmail", piEmail); chargeInfoRecords.add(reportFieldValues); } - - } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); } @@ -541,7 +541,6 @@ private List> outputChargesInfo(DataRecord firstSample) { * */ private void generateiLabChargeSheet() { // Make the sheet with 7 columns - List headerValues; //List> dataValues; List dataLines = new LinkedList<>(); String[] headersArray = new String[headerValues.size()]; From 79e605162a71a25ba301594cc796dd39a2e1fd0b Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 15 Sep 2022 14:08:19 -0400 Subject: [PATCH 11/27] Some more request -> service id specification + task options fixed. --- .../Sequencing/GenerateiLabChargesUpload.java | 89 ++++++++++++++----- 1 file changed, 68 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index aa562848..b467703b 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -92,7 +92,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); // DLP Sequencing serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? - serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample Preservation: FFPE? + serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: FFPE? serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? @@ -129,7 +129,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("RiboDepletion Library Prep", "490512"); // Lib prep //serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen - serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample preservation? + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample origin? serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? @@ -187,8 +187,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? - serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? - serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? + serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? Pathology + serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology serviceInfoMap.put("SMARTer Amplification", "261859"); // Request name: RNASeq-SMARTerAmp @@ -240,9 +240,8 @@ public boolean shouldRun() throws RemoteException { * */ public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools - // need to access initial samples and their parent the request to publish: project_id, number of samples, investigator email - // address, PI email address, Date of request, service_request_id? List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); + // On igo-lims04 I checked sample for normalization of pooled libraries datatype allowable parent Set uniqueRequestsOnTheFlowCell = new HashSet<>(); for(DataRecord eachSample : flowCellSamples) { DataRecord firstSampleOfEachRequest = eachSample.getParentsOfType("Sample", user).get(0); @@ -281,7 +280,7 @@ private List> outputChargesInfo(DataRecord firstSample) { String assay = firstSample.getStringVal("Assay", user); String origin = firstSample.getStringVal("SampleOrigin", user); - // Sequencing Requirements + // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); String maxNumOfReads = seqRequeirements[0].getStringVal("RequestedReads", user); String covrage = seqRequeirements[0].getStringVal("CoverageTarget", user); @@ -289,18 +288,22 @@ private List> outputChargesInfo(DataRecord firstSample) { // Request name in Request table is a drop down menu with certain options String serviceId; - Map reportFieldValues; + Map chargesFieldValues; Set requestsSeviceIds = new HashSet<>(); - if(serviceType.contains("DNA") && serviceType.contains("Extraction")) { + if(serviceType.equals("DNAExtraction")) { + // Preservation & Origin + // DNA QC? serviceId = serviceInfoMap.get(serviceType); // All the sample and request level condition checks occur here to figure out the appropriate set of // service ids for each service requestsSeviceIds.add(serviceId); } - if(serviceType.contains("RNA") && serviceType.contains("Extraction")) { + if(serviceType.equals("RNAExtraction")) { + // Preservation & Origin + // RNA QC? } // if(serviceType.equals("RNAExtraction-COVIDScreen")) { @@ -313,6 +316,8 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("DNA/RNASimultaneous")) { + serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("PATH-DNAExtraction")) { @@ -325,6 +330,7 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("BloodExtraction")) { + // "DNA Extraction - Blood"? } if(serviceType.equals("DNA-QC")) { @@ -336,6 +342,7 @@ private List> outputChargesInfo(DataRecord firstSample) { if(serviceType.equals("Library-QC")) { } + // IMPACT: Spicies: Mouse? Tumor/Normal? if(serviceType.equals("IMPACT341")) { } @@ -361,24 +368,54 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("HemePACT_v3")) { + // Tumor/Normal } if(serviceType.equals("HemePACT_v3+")) { + // Tumor/Normal } if(serviceType.equals("HemePACT_v4")) { + // Tumor/Normal } if(serviceType.equals("CustomCapture")) { } if(serviceType.equals("MSK-ACCESS_v1")) { + // Tumor/Normal } if(serviceType.equals("MissionBio")) { } if(serviceType.equals("RNASeq-TruSeqPolyA")) { + // "PolyA Library Prep", "490511" + + if (Integer.parseInt(maxNumOfReads) < 20) { + // "RNASeq - polyA - 10-20M", "490506" + } + else if (Integer.parseInt(maxNumOfReads) < 30) { + // "RNASeq - polyA - 20-30M", "404330" + } + else if (Integer.parseInt(maxNumOfReads) < 40) { + // "RNASeq - polyA - 30-40M", "404331" + } + else if (Integer.parseInt(maxNumOfReads) < 50) { + // "RNASeq - polyA - 40-50M", "487566" + } + else if (Integer.parseInt(maxNumOfReads) < 60) { + // "RNASeq - polyA - 50-60M", "404332" + } + else if (Integer.parseInt(maxNumOfReads) < 80) { + //"RNASeq - polyA - 60-80M", "490144" + } + else if (Integer.parseInt(maxNumOfReads) < 100) { + // "RNASeq - polyA - 80-100M", "404334" + } + else { + // "RNASeq - polyA - 100M+", "490507" + } } if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { @@ -397,6 +434,7 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("Archer")) { + // How to pick from one of three above? } if(serviceType.equals("NanoString")) { @@ -491,43 +529,53 @@ private List> outputChargesInfo(DataRecord firstSample) { // sequencing only } if(serviceType.equals("ddPCR")) { + // Assays picklist } if(serviceType.equals("DLP")) { + // "DLP Library - 800 cells", "490187" DLP Lib Prep + // "DLP Sequencing - 1 quadrant", "490188" DLP Sequencing } if(serviceType.equals("PED-PEG")) { } - if(serviceType.equals("IGO-Test")) { + if(serviceType.equals("IGO-Test")) { // Any charge?! } if(serviceType.equals("FragmentAnalysis")) { } if(serviceType.equals("CellLineAuthentication")) { + // + serviceId = serviceInfoMap.get("Cell Line Authentication"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("SingleCellCNV")) { } if(serviceType.equals("CMO-CH")) { + // "CMO-CH", "492855" + // If analysis requested: "Data Analysis - CMO-CH", "495937" } if(serviceType.equals("TCRSeq-IGO")) { + // "TCRSeq-IGO", "498671" + // "TCRSeq-IGO", "498671" } for(String eachServiceId : requestsSeviceIds) { - reportFieldValues = new HashMap<>(); - reportFieldValues.put("serviceId", eachServiceId); - reportFieldValues.put("note", requestId); - reportFieldValues.put("serviceQuantity", serviceQuantity); - reportFieldValues.put("purchasedOn", purchaseDate); - reportFieldValues.put("serviceRequestId", ); - reportFieldValues.put("ownerEmail", ownerEmail); - reportFieldValues.put("pIEmail", piEmail); - chargeInfoRecords.add(reportFieldValues); + chargesFieldValues = new HashMap<>(); + chargesFieldValues.put("serviceId", eachServiceId); + chargesFieldValues.put("note", requestId); + chargesFieldValues.put("serviceQuantity", serviceQuantity); + chargesFieldValues.put("purchasedOn", purchaseDate); + chargesFieldValues.put("serviceRequestId", ); + chargesFieldValues.put("ownerEmail", ownerEmail); + chargesFieldValues.put("pIEmail", piEmail); + chargeInfoRecords.add(chargesFieldValues); } } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); @@ -541,7 +589,6 @@ private List> outputChargesInfo(DataRecord firstSample) { * */ private void generateiLabChargeSheet() { // Make the sheet with 7 columns - //List> dataValues; List dataLines = new LinkedList<>(); String[] headersArray = new String[headerValues.size()]; int i = 0; From d5be57660764f1ba354aeaa79b191f4428b6d5b0 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 15 Sep 2022 14:09:41 -0400 Subject: [PATCH 12/27] Some more request -> service id specification + task options fixed. --- .../workflows/Sequencing/GenerateiLabChargesUpload.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index b467703b..618db53b 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -24,7 +24,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { public List> dataValues = new LinkedList<>(); // SampleReceving Request Type pick list ID - private static final Map serviceInfoMap = new HashMap<>(); + private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID //QC serviceInfoMap.put("QC - Agilent", "256044"); // DNA? RNA? Library? @@ -160,7 +160,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Sequencing - 10M Reads - 10X Standard", "490149"); serviceInfoMap.put("Sequencing - 10M Reads - PE100", "490147"); serviceInfoMap.put("Sequencing - 10M Reads - PE150", "490148"); - serviceInfoMap.put("Sequencing - 11000M Reads - 200c", "490173"); + serviceInfoMap.put("Sequencing - 11000M Reads - 200c", "490173"); // What is 200c? serviceInfoMap.put("Sequencing - 11000M Reads - 300c", "490174"); serviceInfoMap.put("Sequencing - 1800M Reads - 100c", "490165"); serviceInfoMap.put("Sequencing - 1800M Reads - 200c", "490166"); @@ -231,7 +231,7 @@ public GenerateiLabChargesUpload() { @Override public boolean shouldRun() throws RemoteException { return activeTask.getTask().getTaskOptions().containsKey("GENERATE ILAB CHARGES SHEET") && - !this.activeTask.getTask().getTaskOptions().containsKey("GENERATE ILAB CHARGES SHEET GENERATED"); + !this.activeTask.getTask().getTaskOptions().containsKey("ILAB CHARGES SHEET GENERATED"); } /** @@ -252,6 +252,7 @@ public PluginResult run() throws Throwable { } dataValues.clear(); } + this.activeTask.getTask().getTaskOptions().put("ILAB CHARGES SHEET GENERATED", ""); return new PluginResult(true); } From 81bf3a2cace23498ceee6ad7876dae04d3906c32 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Mon, 26 Sep 2022 09:11:55 -0400 Subject: [PATCH 13/27] More logic towards charges details --- .../Sequencing/GenerateiLabChargesUpload.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 618db53b..77d33c35 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -27,12 +27,12 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID //QC - serviceInfoMap.put("QC - Agilent", "256044"); // DNA? RNA? Library? - serviceInfoMap.put("QC - Quant-it", "259492"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Agilent", "256044"); // DLP + serviceInfoMap.put("QC - Quant-it", "259492"); // DDPCR serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DNA? RNA? Library? // DDPCR Non-Sequencing serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR - serviceInfoMap.put("ddPCR Assay Design", "288524"); // Where do this property + serviceInfoMap.put("ddPCR Assay Design", "288524"); // assay ignore serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); // Pick list ID: ddPCR Assay Type serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); // Pick list ID: ddPCR Assay Type serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species @@ -119,7 +119,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded - serviceInfoMap.put("Micronic Tube", "308755"); // Where is it included? + serviceInfoMap.put("Micronic Tube", "308755"); // Where is it included? could be ignored serviceInfoMap.put("PlateSeq Library Prep", "490185"); serviceInfoMap.put("PlateSeq Sequencing - 1 column", "490186"); @@ -129,7 +129,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("RiboDepletion Library Prep", "490512"); // Lib prep //serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen - serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample origin? + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample preservation? serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? @@ -187,16 +187,16 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? - serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? Pathology - serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology + serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? Pathology, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology, PATH-DNA/RNA/simultaious Extraction serviceInfoMap.put("SMARTer Amplification", "261859"); // Request name: RNASeq-SMARTerAmp - serviceInfoMap.put("Special Processing -- Extraction", "487571"); // ? + serviceInfoMap.put("Special Processing -- Extraction", "487571"); // exceptional, ignore serviceInfoMap.put("TCRSeq-IGO", "498671"); - serviceInfoMap.put("UMI Library Prep", "351940"); // ? + serviceInfoMap.put("UMI Library Prep", "351940"); // ACCESS, CMO-CH serviceInfoMap.put("WES - 100X", "289981"); // WholeExomeKapaLib + coverage serviceInfoMap.put("WES - 150X", "289982"); @@ -205,7 +205,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("WES - 30X", "289979"); serviceInfoMap.put("WES - 70X", "289980"); - serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? + serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? [WholeGenomeLibProtocol3]: PCR cycles + serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); serviceInfoMap.put("WGS - PCR+ - 150X", "490205"); serviceInfoMap.put("WGS - PCR+ - 30X", "490199"); From 7cd0fa85818c92b989852b1c2011012563b46ecd Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 28 Sep 2022 17:34:39 -0400 Subject: [PATCH 14/27] More logic extracted. --- .../Sequencing/GenerateiLabChargesUpload.java | 287 ++++++++++-------- 1 file changed, 152 insertions(+), 135 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 77d33c35..852cf7a0 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -14,7 +14,7 @@ import java.rmi.RemoteException; import java.util.*; -//**************Can I upload a dummy charge upload to actual IGO core room? ***************** +//**************Can I upload a dummy charge upload to actual IGO core room? Yes, under IGO-Test @@ -27,9 +27,9 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID //QC - serviceInfoMap.put("QC - Agilent", "256044"); // DLP - serviceInfoMap.put("QC - Quant-it", "259492"); // DDPCR - serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DNA? RNA? Library? + serviceInfoMap.put("QC - Agilent", "256044"); + serviceInfoMap.put("QC - Quant-it", "259492"); + serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DDPCR Non-Sequencing serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR serviceInfoMap.put("ddPCR Assay Design", "288524"); // assay ignore @@ -43,7 +43,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { // Data Analysis serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? - serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); // analysis Pipelinable or BIC AutoRunnable? (request table) + serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); serviceInfoMap.put("Data Handling", "491618"); // IGO Internal, Any expense entered in the iLab? // Library Prep @@ -87,14 +87,15 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("CMO-CH", "492855"); // Request name: CMO-CH serviceInfoMap.put("CRISPR-Seq", "308754"); // Request name: CRISPRSeq + serviceInfoMap.put("Custom Fragment Analysis", "504490"); serviceInfoMap.put("DLP Library - 800 cells", "490187"); // DLP Lib Prep serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); // DLP Sequencing - serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? + //serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: FFPE? - serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen - serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? + //serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen + //serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? @@ -130,8 +131,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { //serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample preservation? - serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? - serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? + //serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? + //serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads @@ -160,7 +161,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Sequencing - 10M Reads - 10X Standard", "490149"); serviceInfoMap.put("Sequencing - 10M Reads - PE100", "490147"); serviceInfoMap.put("Sequencing - 10M Reads - PE150", "490148"); - serviceInfoMap.put("Sequencing - 11000M Reads - 200c", "490173"); // What is 200c? + serviceInfoMap.put("Sequencing - 11000M Reads - 200c", "490173"); // What is 200c? cycle, seq req: read length serviceInfoMap.put("Sequencing - 11000M Reads - 300c", "490174"); serviceInfoMap.put("Sequencing - 1800M Reads - 100c", "490165"); serviceInfoMap.put("Sequencing - 1800M Reads - 200c", "490166"); @@ -296,7 +297,7 @@ private List> outputChargesInfo(DataRecord firstSample) { if(serviceType.equals("DNAExtraction")) { // Preservation & Origin - // DNA QC? + // serviceId = serviceInfoMap.get(serviceType); // All the sample and request level condition checks occur here to figure out the appropriate set of // service ids for each service @@ -304,8 +305,7 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("RNAExtraction")) { - // Preservation & Origin - // RNA QC? + // Preservation } // if(serviceType.equals("RNAExtraction-COVIDScreen")) { @@ -318,6 +318,7 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("DNA/RNASimultaneous")) { + // look at the preservation serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); requestsSeviceIds.add(serviceId); @@ -331,67 +332,69 @@ private List> outputChargesInfo(DataRecord firstSample) { if(serviceType.equals("PATH-DNA/RNASimultaneous")) { } - if(serviceType.equals("BloodExtraction")) { - // "DNA Extraction - Blood"? - - } - if(serviceType.equals("DNA-QC")) { - - } - if(serviceType.equals("RNA-QC")) { - - } - if(serviceType.equals("Library-QC")) { - - } +// if(serviceType.equals("BloodExtraction")) { +// // "DNA Extraction - Blood"? +// +// } +// if(serviceType.equals("DNA-QC")) { +// +// } +// if(serviceType.equals("RNA-QC")) { +// +// } +// if(serviceType.equals("Library-QC")) { +// +// } // IMPACT: Spicies: Mouse? Tumor/Normal? - if(serviceType.equals("IMPACT341")) { - - } - if(serviceType.equals("IMPACT341+")) { - - } - if(serviceType.equals("IMPACT410")) { - - } - if(serviceType.equals("IMPACT410+")) { - - } - if(serviceType.equals("IMPACT468")) { - - } +// if(serviceType.equals("IMPACT341")) { +// +// } +// if(serviceType.equals("IMPACT341+")) { +// +// } +// if(serviceType.equals("IMPACT410")) { +// +// } +// if(serviceType.equals("IMPACT410+")) { +// +// } +// if(serviceType.equals("IMPACT468")) { +// +// } if(serviceType.equals("IMPACT505")) { } - if(serviceType.equals("PM-IMPACT")) { - - } +// if(serviceType.equals("PM-IMPACT")) { +// +// } if(serviceType.equals("M-IMPACT")) { + //Mouse } - if(serviceType.equals("HemePACT_v3")) { - // Tumor/Normal - - } - if(serviceType.equals("HemePACT_v3+")) { - // Tumor/Normal - - } +// if(serviceType.equals("HemePACT_v3")) { +// // Tumor/Normal +// +// } +// if(serviceType.equals("HemePACT_v3+")) { +// // Tumor/Normal +// +// } if(serviceType.equals("HemePACT_v4")) { // Tumor/Normal } - if(serviceType.equals("CustomCapture")) { - - } +// if(serviceType.equals("CustomCapture")) { Complex +// +// } if(serviceType.equals("MSK-ACCESS_v1")) { // Tumor/Normal } - if(serviceType.equals("MissionBio")) { - - } - if(serviceType.equals("RNASeq-TruSeqPolyA")) { +// if(serviceType.equals("MissionBio")) { +// // depends on panel +// +// } + if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id // "PolyA Library Prep", "490511" if (Integer.parseInt(maxNumOfReads) < 20) { @@ -420,118 +423,134 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } } - if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { - - } - if(serviceType.equals("RNASeq-TruSeqFusion")) { - - } - if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { +// if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { +// +// } +// if(serviceType.equals("RNASeq-TruSeqFusion")) { +// +// } + if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { // Same as polyA } - if(serviceType.equals("RNASeq-SMARTerAmp")) { + if(serviceType.equals("RNASeq-SMARTerAmp")) { // Same as polyA } - if(serviceType.equals("Rapid-RCC")) { + if(serviceType.equals("Rapid-RCC")) { // Single price, ask Neeman } if(serviceType.equals("Archer")) { - // How to pick from one of three above? - } - if(serviceType.equals("NanoString")) { - - } - if(serviceType.equals("10XGenomics_GeneExpression")) { } - if(serviceType.equals("10XGenomics_VDJ")) { +// if(serviceType.equals("NanoString")) { +// +// } + if(serviceType.equals("10XGenomics_GeneExpression")) { // Cassidy will provide } - if(serviceType.equals("10XGenomics_CNV")) { + if(serviceType.equals("10XGenomics_VDJ")) { // same as Feature barcoding } +// if(serviceType.equals("10XGenomics_CNV")) { +// +// } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { //490181 } - if(serviceType.equals("10XGenomics_Multiome")) { - - } - if(serviceType.equals("10XGenomics_Visium")) { - - } - if(serviceType.equals("96Well_SmartSeq2")) { - - } - if(serviceType.equals("WholeExome + IMPACT")) { - - } - if(serviceType.equals("WholeExome-KAPALib")) { - - } - if(serviceType.equals("HumanWholeGenome")) { - - } - if(serviceType.equals("MouseWholeGenome")) { - - } - if(serviceType.equals("WholeGenome")) { - - } - if(serviceType.equals("sWGS")) { - - } - if(serviceType.equals("ChIPSeq")) { - - } - if(serviceType.equals("MethylSeq")) { + if(serviceType.equals("10XGenomics_Multiome")) { // use seq req } - if(serviceType.equals("CRISPRSeq")) { + if(serviceType.equals("10XGenomics_Visium")) { // use seq req } - if(serviceType.equals("shRNAScreen")) { +// if(serviceType.equals("96Well_SmartSeq2")) { +// +// } + if(serviceType.equals("WholeExome + IMPACT")) { // not often } - if(serviceType.equals("RiboProfileSeq")) { + if(serviceType.equals("WholeExome-KAPALib")) { // preservation: FFPE or non FFPE + seqreq: coverage } - if(serviceType.equals("ATACSeq")) { + if(serviceType.equals("HumanWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage } - if(serviceType.equals("AmpliSeq")) { + if(serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage } - if(serviceType.equals("AmpliconSeq")) { + if(serviceType.equals("WholeGenome")) { // seqr > 10 M + add sequencing charge } - if(serviceType.equals("AdaptiveImmunoSeq")) { + if(serviceType.equals("sWGS")) { // QC + one price } - if(serviceType.equals("CLIPSeq")) { + if(serviceType.equals("ChIPSeq")) { // similar to wholegenome } - if(serviceType.equals("HiSeq-Other")) { + if(serviceType.equals("MethylSeq")) { // QC + one price } - if(serviceType.equals("MiSeq-Other")) { + if(serviceType.equals("CRISPRSeq")) { // QC + one price } - if(serviceType.equals("NextSeq-Other")) { +// if(serviceType.equals("shRNAScreen")) { +// // user prepared library +// } +// if(serviceType.equals("RiboProfileSeq")) { +// +// } + if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge } - if(serviceType.equals("NovaSeq-Other")) { +// if(serviceType.equals("AmpliSeq")) { +// +// } + if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually } - if(serviceType.equals("Investigator Prepared Libraries")) { - // sequencing only - } - if(serviceType.equals("Investigator Prepared Pools")) { - // sequencing only - } +// if(serviceType.equals("AdaptiveImmunoSeq")) { +// +// } +// if(serviceType.equals("CLIPSeq")) { +// +// } +// if(serviceType.equals("HiSeq-Other")) { +// +// } +// if(serviceType.equals("MiSeq-Other")) { +// +// } +// if(serviceType.equals("NextSeq-Other")) { +// +// } +// if(serviceType.equals("NovaSeq-Other")) { +// +// } + // Dropped for now + // if(serviceType.equals("Investigator Prepared Libraries")) { + // // sequencing only + // } + // if(serviceType.equals("Investigator Prepared Pools")) { // number of micronic tubes = # pools + // // sequencing only + // } if(serviceType.equals("ddPCR")) { // Assays picklist + //QC- Quant-it + serviceId = serviceInfoMap.get("QC - Quant-it"); + requestsSeviceIds.add(serviceId); + //QC - Quantity + Quality + serviceId = serviceInfoMap.get("QC - Quantity + Quality"); + requestsSeviceIds.add(serviceId); + //ddPCR (1 reaction) + serviceId = serviceInfoMap.get("ddPCR (1 reaction)"); // * sum of the number of wells: number of replicates in ddpcr protocl 2s + requestsSeviceIds.add(serviceId); + //ddPCR Human % Assay + serviceId = serviceInfoMap.get("ddPCR Human % Assay"); + requestsSeviceIds.add(serviceId); + //ddPCR KRAS Multiplexing + serviceId = serviceInfoMap.get("ddPCR KRAS Multiplexing"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("DLP")) { @@ -539,27 +558,25 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { // "DLP Sequencing - 1 quadrant", "490188" DLP Sequencing } - if(serviceType.equals("PED-PEG")) { - - } - if(serviceType.equals("IGO-Test")) { // Any charge?! + if(serviceType.equals("PED-PEG")) { // Single price, ask Neeman } if(serviceType.equals("FragmentAnalysis")) { + //Custom Fragment Analysis + serviceId = serviceInfoMap.get("Custom Fragment Analysis"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("CellLineAuthentication")) { - // serviceId = serviceInfoMap.get("Cell Line Authentication"); requestsSeviceIds.add(serviceId); - - } - if(serviceType.equals("SingleCellCNV")) { + serviceId = serviceInfoMap.get("QC - Quant-it"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("CMO-CH")) { // "CMO-CH", "492855" - // If analysis requested: "Data Analysis - CMO-CH", "495937" + // "Data Analysis - CMO-CH", "495937" } if(serviceType.equals("TCRSeq-IGO")) { From b9e8209204df0b6eeb37d4e30720e53b87c646d0 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 29 Sep 2022 17:14:17 -0400 Subject: [PATCH 15/27] Charges logic incorporated.. --- .../Sequencing/GenerateiLabChargesUpload.java | 374 +++++++++++++----- 1 file changed, 266 insertions(+), 108 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 852cf7a0..16f5622a 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -40,6 +40,10 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { // CellLine Aut (STR) Non-Sequencing serviceInfoMap.put("Cell Line Authentication", "490142"); // Request name: CellLineAuthentication serviceInfoMap.put("Fingerprinting - STR", "302835"); // None Sequencing, Cell line Auth? + + serviceInfoMap.put("GeoMx Experiment Optimization", "504495"); + serviceInfoMap.put("GeoMx Library", "504496"); + serviceInfoMap.put("GeoMx Slide Prep", "504497"); // Data Analysis serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? @@ -77,14 +81,14 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); // Request name: Archer serviceInfoMap.put("Archer Immunoverse", "490140"); // Request name: Archer - serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal, Request name: ATACSeq, Do we charge for IGO internals? + serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq - serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); // What is the request name? + serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); // Request name: ChIPSeq - serviceInfoMap.put("CMO-CH", "492855"); // Request name: CMO-CH + serviceInfoMap.put("CMO-CH", "492855"); serviceInfoMap.put("CRISPR-Seq", "308754"); // Request name: CRISPRSeq serviceInfoMap.put("Custom Fragment Analysis", "504490"); @@ -99,8 +103,6 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? - serviceInfoMap.put("Double Capture", "497933"); // IGO Internal, iLab charge? Request name: CustomCapture??? - serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq??? serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); // what is it? @@ -115,43 +117,33 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("IMPACT - Normal", "256124"); serviceInfoMap.put("IMPACT - Tumor", "406813"); - serviceInfoMap.put("KAPA HT Library Prep", "256127"); - serviceInfoMap.put("KAPA Hyper Library Prep", "351941"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded - serviceInfoMap.put("KAPA WGS Library Prep - PCR+", "490516"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded - serviceInfoMap.put("KAPA WGS Library Prep - PCR-free", "490515"); // Available request name: WholeExome-KAPALib and RNASeq-KAPAmRNAStranded - serviceInfoMap.put("Micronic Tube", "308755"); // Where is it included? could be ignored serviceInfoMap.put("PlateSeq Library Prep", "490185"); serviceInfoMap.put("PlateSeq Sequencing - 1 column", "490186"); - serviceInfoMap.put("PolyA Library Prep", "490511"); // Lib prep - - serviceInfoMap.put("RiboDepletion Library Prep", "490512"); // Lib prep - //serviceInfoMap.put("RNA Extraction + COVID19 Testing", "490141"); // Request name: RNAExtraction-COVIDScreen - - serviceInfoMap.put("RNA Extraction - FFPE", "256100"); // Where does FFPE come from? Sample preservation? - //serviceInfoMap.put("RNA Extraction - Fresh/Frozen", "256097"); // Fresh/ Frozen -> sample properties: Sample preservation? - //serviceInfoMap.put("RNA Extraction - Viably Frozen", "490137"); // Viably Frozen -> sample property: Sample preservation? - - serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 30-40M", "404331"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 40-50M", "487566"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 50-60M", "404332"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 60-80M", "490144"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - polyA - 80-100M", "404334"); // Sequencing, Request name: RNASeq-TruSeqPolyA + requested reads - serviceInfoMap.put("RNASeq - Ribodeplete - 10-20M", "490508"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 100M+", "490509"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 20-30M", "490145"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 30-40M", "404335"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 40-50M", "490146"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); // Sequencing, Request name: RNASeq-TruSeqRiboDeplete? - - serviceInfoMap.put("Sample Capture + Library", "490514"); // Where is it included? + serviceInfoMap.put("PolyA Library Prep", "490511"); + + serviceInfoMap.put("RiboDepletion Library Prep", "490512"); + + serviceInfoMap.put("RNA Extraction - FFPE", "256100"); + + serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); + serviceInfoMap.put("RNASeq - polyA - 100M+", "490507"); + serviceInfoMap.put("RNASeq - polyA - 20-30M", "404330"); + serviceInfoMap.put("RNASeq - polyA - 30-40M", "404331"); + serviceInfoMap.put("RNASeq - polyA - 40-50M", "487566"); + serviceInfoMap.put("RNASeq - polyA - 50-60M", "404332"); + serviceInfoMap.put("RNASeq - polyA - 60-80M", "490144"); + serviceInfoMap.put("RNASeq - polyA - 80-100M", "404334"); + serviceInfoMap.put("RNASeq - Ribodeplete - 10-20M", "490508"); + serviceInfoMap.put("RNASeq - Ribodeplete - 100M+", "490509"); + serviceInfoMap.put("RNASeq - Ribodeplete - 20-30M", "490145"); + serviceInfoMap.put("RNASeq - Ribodeplete - 30-40M", "404335"); + serviceInfoMap.put("RNASeq - Ribodeplete - 40-50M", "490146"); + serviceInfoMap.put("RNASeq - Ribodeplete - 50-60M", "404336"); + serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); + serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); serviceInfoMap.put("Sample Pooling", "491619"); // Is it included in all services going into sequencing? @@ -188,17 +180,13 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? - serviceInfoMap.put("Slide Dissection", "260643"); // Where is it included? Pathology, PATH-DNA/RNA/simultaious Extraction - serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Dissection", "260643"); // in Pathology protocol 1: MicrodissectionRequired, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology protocol 1: ScrapingCurlsRequired, PATH-DNA/RNA/simultaious Extraction - serviceInfoMap.put("SMARTer Amplification", "261859"); // Request name: RNASeq-SMARTerAmp - - serviceInfoMap.put("Special Processing -- Extraction", "487571"); // exceptional, ignore + serviceInfoMap.put("SMARTer Amplification", "261859"); serviceInfoMap.put("TCRSeq-IGO", "498671"); - serviceInfoMap.put("UMI Library Prep", "351940"); // ACCESS, CMO-CH - serviceInfoMap.put("WES - 100X", "289981"); // WholeExomeKapaLib + coverage serviceInfoMap.put("WES - 150X", "289982"); serviceInfoMap.put("WES - 200X", "289983"); @@ -207,21 +195,22 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("WES - 70X", "289980"); serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? [WholeGenomeLibProtocol3]: PCR cycles - serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); - serviceInfoMap.put("WGS - PCR+ - 150X", "490205"); + serviceInfoMap.put("WGS - PCR+ - 120X", "490205"); serviceInfoMap.put("WGS - PCR+ - 30X", "490199"); serviceInfoMap.put("WGS - PCR+ - 40X", "490200"); serviceInfoMap.put("WGS - PCR+ - 50X", "490201"); serviceInfoMap.put("WGS - PCR+ - 60X", "490202"); + serviceInfoMap.put("WGS - PCR+ - 70X", "504521"); serviceInfoMap.put("WGS - PCR+ - 80X", "490203"); serviceInfoMap.put("WGS - PCR-free - 100X", "490197"); serviceInfoMap.put("WGS - PCR-free - 10X", "495933"); - serviceInfoMap.put("WGS - PCR-free - 150X", "490198"); + serviceInfoMap.put("WGS - PCR-free - 120X", "490198"); serviceInfoMap.put("WGS - PCR-free - 30X", "490192"); serviceInfoMap.put("WGS - PCR-free - 40X", "490193"); serviceInfoMap.put("WGS - PCR-free - 50X", "490194"); serviceInfoMap.put("WGS - PCR-free - 60X", "490195"); + serviceInfoMap.put("WGS - PCR-free - 70X", "504522"); serviceInfoMap.put("WGS - PCR-free - 80X", "490196"); } @@ -282,35 +271,53 @@ private List> outputChargesInfo(DataRecord firstSample) { String tumorOrNormal = firstSample.getStringVal("TumorOrNormal", user); String assay = firstSample.getStringVal("Assay", user); String origin = firstSample.getStringVal("SampleOrigin", user); + String sampleType = firstSample.getStringVal("SampleType", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); String maxNumOfReads = seqRequeirements[0].getStringVal("RequestedReads", user); String covrage = seqRequeirements[0].getStringVal("CoverageTarget", user); - String runLength = seqRequeirements[0].getStringVal("SequencingRunType", user); + String SequencingRunType = seqRequeirements[0].getStringVal("SequencingRunType", user); + + //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS + DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); + int numOfReplicates = 0; + for (DataRecord ddpcrProtocol2 : ddpcrProtocol2s) { + numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); + } + + + // Pathology info + // PathologyProtocol1 is a potential child of sample: to be marked in LIMS + DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); + Boolean pathScrapping = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); + Boolean pathMicrodissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); // Request name in Request table is a drop down menu with certain options String serviceId; Map chargesFieldValues; Set requestsSeviceIds = new HashSet<>(); + serviceId = serviceInfoMap.get("QC - Quantity + Quality"); + requestsSeviceIds.add(serviceId); if(serviceType.equals("DNAExtraction")) { - // Preservation & Origin - // - serviceId = serviceInfoMap.get(serviceType); - // All the sample and request level condition checks occur here to figure out the appropriate set of - // service ids for each service - requestsSeviceIds.add(serviceId); - + if (sampleType.toLowerCase().contains("cfdna")) { + serviceId = serviceInfoMap.get("cfDNA Extraction - Plasma"); + requestsSeviceIds.add(serviceId); + } else if (preservation.toLowerCase().contains("ffpe")) { + serviceId = serviceInfoMap.get("DNA Extraction - FFPE"); + requestsSeviceIds.add(serviceId); + } + else { + serviceId = serviceInfoMap.get("DNA Extraction - Viably Frozen"); + requestsSeviceIds.add(serviceId); + } } if(serviceType.equals("RNAExtraction")) { - // Preservation - + serviceId = serviceInfoMap.get("RNA Extraction - FFPE"); + requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("RNAExtraction-COVIDScreen")) { -// -// } if(serviceType.equals("DNA Cleanup")) { } @@ -318,19 +325,56 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("DNA/RNASimultaneous")) { - // look at the preservation serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); requestsSeviceIds.add(serviceId); } if(serviceType.equals("PATH-DNAExtraction")) { + if (sampleType.toLowerCase().contains("cfdna")) { + serviceId = serviceInfoMap.get("cfDNA Extraction - Plasma"); + requestsSeviceIds.add(serviceId); + } else if (preservation.toLowerCase().contains("ffpe")) { + serviceId = serviceInfoMap.get("DNA Extraction - FFPE"); + requestsSeviceIds.add(serviceId); + } + else { + serviceId = serviceInfoMap.get("DNA Extraction - Viably Frozen"); + requestsSeviceIds.add(serviceId); + } + + if (pathScrapping) { + serviceId = serviceInfoMap.get("Slide Scraping"); + requestsSeviceIds.add(serviceId); + } + else if (pathMicrodissection) { + serviceId = serviceInfoMap.get("Slide Dissection"); + requestsSeviceIds.add(serviceId); + } } if(serviceType.equals("PATH-RNAExtraction")) { - + serviceId = serviceInfoMap.get("RNA Extraction - FFPE"); + requestsSeviceIds.add(serviceId); + if (pathScrapping) { + serviceId = serviceInfoMap.get("Slide Scraping"); + requestsSeviceIds.add(serviceId); + } + else if (pathMicrodissection) { + serviceId = serviceInfoMap.get("Slide Dissection"); + requestsSeviceIds.add(serviceId); + } } if(serviceType.equals("PATH-DNA/RNASimultaneous")) { - + serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); + requestsSeviceIds.add(serviceId); + if (pathScrapping) { + serviceId = serviceInfoMap.get("Slide Scraping"); + requestsSeviceIds.add(serviceId); + } + else if (pathMicrodissection) { + serviceId = serviceInfoMap.get("Slide Dissection"); + requestsSeviceIds.add(serviceId); + } } // if(serviceType.equals("BloodExtraction")) { // // "DNA Extraction - Blood"? @@ -362,14 +406,21 @@ private List> outputChargesInfo(DataRecord firstSample) { // // } if(serviceType.equals("IMPACT505")) { - + if (tumorOrNormal.toLowerCase().contains("normal")) { + serviceId = serviceInfoMap.get("IMPACT - Normal"); + requestsSeviceIds.add(serviceId); + } + else { + serviceId = serviceInfoMap.get("IMPACT - Tumor"); + requestsSeviceIds.add(serviceId); + } } // if(serviceType.equals("PM-IMPACT")) { // // } if(serviceType.equals("M-IMPACT")) { - //Mouse - + serviceId = serviceInfoMap.get("IMPACT - Mouse"); + requestsSeviceIds.add(serviceId); } // if(serviceType.equals("HemePACT_v3")) { // // Tumor/Normal @@ -380,48 +431,61 @@ private List> outputChargesInfo(DataRecord firstSample) { // // } if(serviceType.equals("HemePACT_v4")) { - // Tumor/Normal - + if (tumorOrNormal.toLowerCase().contains("tumor")) { + serviceId = serviceInfoMap.get("HemePACT - Tumor"); + requestsSeviceIds.add(serviceId); + } + else { + serviceId = serviceInfoMap.get("HemePACT - Normal"); + requestsSeviceIds.add(serviceId); + } } // if(serviceType.equals("CustomCapture")) { Complex // // } if(serviceType.equals("MSK-ACCESS_v1")) { - // Tumor/Normal - + if (tumorOrNormal.toLowerCase().contains("tumor")) { + serviceId = serviceInfoMap.get("ACCESS - Tumor"); + requestsSeviceIds.add(serviceId); + } + else { + serviceId = serviceInfoMap.get("ACCESS - Normal"); + requestsSeviceIds.add(serviceId); + } } -// if(serviceType.equals("MissionBio")) { +// if(serviceType.equals("MissionBio")) { //Easy to bill manually // // depends on panel // // } if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id - // "PolyA Library Prep", "490511" + serviceId = serviceInfoMap.get("PolyA Library Prep"); + requestsSeviceIds.add(serviceId); if (Integer.parseInt(maxNumOfReads) < 20) { - // "RNASeq - polyA - 10-20M", "490506" + serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); } else if (Integer.parseInt(maxNumOfReads) < 30) { - // "RNASeq - polyA - 20-30M", "404330" + serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); } else if (Integer.parseInt(maxNumOfReads) < 40) { - // "RNASeq - polyA - 30-40M", "404331" + serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); } else if (Integer.parseInt(maxNumOfReads) < 50) { - // "RNASeq - polyA - 40-50M", "487566" + serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); } else if (Integer.parseInt(maxNumOfReads) < 60) { - // "RNASeq - polyA - 50-60M", "404332" + serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); } else if (Integer.parseInt(maxNumOfReads) < 80) { - //"RNASeq - polyA - 60-80M", "490144" + serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); } else if (Integer.parseInt(maxNumOfReads) < 100) { - // "RNASeq - polyA - 80-100M", "404334" + serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); } else { - // "RNASeq - polyA - 100M+", "490507" + serviceId = serviceInfoMap.get("RNASeq - polyA - 100M+"); } - + requestsSeviceIds.add(serviceId); } // if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { // @@ -429,10 +493,39 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { // if(serviceType.equals("RNASeq-TruSeqFusion")) { // // } - if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { // Same as polyA + if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { + serviceId = serviceInfoMap.get("RiboDepletion Library Prep"); + requestsSeviceIds.add(serviceId); + if (Integer.parseInt(maxNumOfReads) < 20) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); + } + else if (Integer.parseInt(maxNumOfReads) < 30) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); + } + else if (Integer.parseInt(maxNumOfReads) < 40) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); + } + else if (Integer.parseInt(maxNumOfReads) < 50) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); + } + else if (Integer.parseInt(maxNumOfReads) < 60) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); + } + else if (Integer.parseInt(maxNumOfReads) < 80) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); + } + else if (Integer.parseInt(maxNumOfReads) < 100) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); + } + else { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + } + requestsSeviceIds.add(serviceId); } - if(serviceType.equals("RNASeq-SMARTerAmp")) { // Same as polyA + if(serviceType.equals("RNASeq-SMARTerAmp")) { + serviceId = serviceInfoMap.get("SMARTer Amplification"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("Rapid-RCC")) { // Single price, ask Neeman @@ -462,37 +555,88 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } if(serviceType.equals("10XGenomics_Visium")) { // use seq req - + serviceId = serviceInfoMap.get("10X Visium Library"); + requestsSeviceIds.add(serviceId); + serviceInfoMap.get("10X Visium Optimization"); + requestsSeviceIds.add(serviceId); } // if(serviceType.equals("96Well_SmartSeq2")) { // // } - if(serviceType.equals("WholeExome + IMPACT")) { // not often - - } +// if(serviceType.equals("WholeExome + IMPACT")) { // not often +// +// } if(serviceType.equals("WholeExome-KAPALib")) { // preservation: FFPE or non FFPE + seqreq: coverage + if (preservation.toLowerCase().contains("ffpe")) { + + } + else { + + } } if(serviceType.equals("HumanWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage + if (preservation.toLowerCase().contains("ffpe")) { + + } + else { + } } if(serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage + if (preservation.toLowerCase().contains("ffpe")) { + + } + else { + } } if(serviceType.equals("WholeGenome")) { // seqr > 10 M + add sequencing charge + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; + if (remainigReadsRequestedToCharge < 20) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); + } + else if (Integer.parseInt(maxNumOfReads) < 30) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); + } + else if (Integer.parseInt(maxNumOfReads) < 40) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); + } + else if (Integer.parseInt(maxNumOfReads) < 50) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); + } + else if (Integer.parseInt(maxNumOfReads) < 60) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); + } + else if (Integer.parseInt(maxNumOfReads) < 80) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); + } + else if (Integer.parseInt(maxNumOfReads) < 100) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); + } + else { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + } + requestsSeviceIds.add(serviceId); } if(serviceType.equals("sWGS")) { // QC + one price - + serviceId = serviceInfoMap.get("Shallow WGS"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("ChIPSeq")) { // similar to wholegenome + serviceId = serviceInfoMap.get("ChIP-Seq/CUT&RUN"); + requestsSeviceIds.add(serviceId); + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; } - if(serviceType.equals("MethylSeq")) { // QC + one price - + if(serviceType.equals("MethylSeq")) { + serviceId = serviceInfoMap.get("EPIC Methyl Capture"); + requestsSeviceIds.add(serviceId); } - if(serviceType.equals("CRISPRSeq")) { // QC + one price - + if(serviceType.equals("CRISPRSeq")) { + serviceId = serviceInfoMap.get("CRISPR-Seq"); + requestsSeviceIds.add(serviceId); } // if(serviceType.equals("shRNAScreen")) { // // user prepared library @@ -501,13 +645,23 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { // // } if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge + if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("ATAC-Seq"); + requestsSeviceIds.add(serviceId); + } + else { + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; + } } // if(serviceType.equals("AmpliSeq")) { // // } if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually - + if (SequencingRunType.equals("PE100")) { + serviceId = serviceInfoMap.get("AmpliconSeq"); + requestsSeviceIds.add(serviceId); + } } // if(serviceType.equals("AdaptiveImmunoSeq")) { // @@ -539,24 +693,27 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { //QC- Quant-it serviceId = serviceInfoMap.get("QC - Quant-it"); requestsSeviceIds.add(serviceId); - //QC - Quantity + Quality - serviceId = serviceInfoMap.get("QC - Quantity + Quality"); - requestsSeviceIds.add(serviceId); //ddPCR (1 reaction) - serviceId = serviceInfoMap.get("ddPCR (1 reaction)"); // * sum of the number of wells: number of replicates in ddpcr protocl 2s - requestsSeviceIds.add(serviceId); + serviceId = serviceInfoMap.get("ddPCR (1 reaction)"); + for (int i = 0; i < numOfReplicates; i++) { + requestsSeviceIds.add(serviceId); + } //ddPCR Human % Assay - serviceId = serviceInfoMap.get("ddPCR Human % Assay"); - requestsSeviceIds.add(serviceId); + if(assay.toLowerCase().contains("")) { + serviceId = serviceInfoMap.get("ddPCR Human % Assay"); + } //ddPCR KRAS Multiplexing - serviceId = serviceInfoMap.get("ddPCR KRAS Multiplexing"); + else if (assay.toLowerCase().contains("")) { + serviceId = serviceInfoMap.get("ddPCR KRAS Multiplexing"); + } requestsSeviceIds.add(serviceId); } if(serviceType.equals("DLP")) { - // "DLP Library - 800 cells", "490187" DLP Lib Prep - // "DLP Sequencing - 1 quadrant", "490188" DLP Sequencing - + serviceId = serviceInfoMap.get("DLP Library - 800 cells"); + requestsSeviceIds.add(serviceId); + serviceId = serviceInfoMap.get("DLP Sequencing - 1 quadrant"); + requestsSeviceIds.add(serviceId); } if(serviceType.equals("PED-PEG")) { // Single price, ask Neeman @@ -575,14 +732,15 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } if(serviceType.equals("CMO-CH")) { + serviceId = serviceInfoMap.get("CMO-CH"); + requestsSeviceIds.add(serviceId); // "CMO-CH", "492855" // "Data Analysis - CMO-CH", "495937" } if(serviceType.equals("TCRSeq-IGO")) { - // "TCRSeq-IGO", "498671" - // "TCRSeq-IGO", "498671" - + serviceId = serviceInfoMap.get("TCRSeq-IGO"); + requestsSeviceIds.add(serviceId); } for(String eachServiceId : requestsSeviceIds) { @@ -591,7 +749,7 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { chargesFieldValues.put("note", requestId); chargesFieldValues.put("serviceQuantity", serviceQuantity); chargesFieldValues.put("purchasedOn", purchaseDate); - chargesFieldValues.put("serviceRequestId", ); + chargesFieldValues.put("serviceRequestId", ); // from iLab! chargesFieldValues.put("ownerEmail", ownerEmail); chargesFieldValues.put("pIEmail", piEmail); chargeInfoRecords.add(chargesFieldValues); From cab12d1621f6dbf5cb46bc8dcea229ab10cbdea9 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Mon, 3 Oct 2022 14:21:42 -0400 Subject: [PATCH 16/27] Updating the service type to service id map. --- .../Sequencing/GenerateiLabChargesUpload.java | 133 +++++------------- 1 file changed, 33 insertions(+), 100 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 16f5622a..75bc5300 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -33,8 +33,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { // DDPCR Non-Sequencing serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR serviceInfoMap.put("ddPCR Assay Design", "288524"); // assay ignore - serviceInfoMap.put("ddPCR Assay Order - CNV", "290735"); // Pick list ID: ddPCR Assay Type - serviceInfoMap.put("ddPCR Assay Order - Mutation/GEX", "288525"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Assay Order - CNV/GEX", "290735"); // Pick list ID: ddPCR Assay Type + serviceInfoMap.put("ddPCR Assay Order - Mutation", "288525"); // Pick list ID: ddPCR Assay Type serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // What is "KRAS Multiplexing"? // CellLine Aut (STR) Non-Sequencing @@ -67,7 +67,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("10X Visium Library", "490190"); // Lib Prep? serviceInfoMap.put("10X Visium Optimization", "490189"); // What property is "Optimization"? - serviceInfoMap.put("10X Visium Sequencing (25%)", "490191"); // Sequencing + serviceInfoMap.put("10X Visium Sequencing (Frozen)", "490191"); // Sequencing + serviceInfoMap.put("10X Visium Sequencing (FFPE)", "504489"); serviceInfoMap.put("ACCESS - Normal", "406820"); //Tumor or normal in sample @@ -84,7 +85,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq - serviceInfoMap.put("cfDNA Extraction - Plasma", "261860"); + serviceInfoMap.put("cfDNA Extraction", "261860"); serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); // Request name: ChIPSeq @@ -94,19 +95,17 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Custom Fragment Analysis", "504490"); serviceInfoMap.put("DLP Library - 800 cells", "490187"); // DLP Lib Prep - serviceInfoMap.put("DLP Sequencing - 1 quadrant", "490188"); // DLP Sequencing + serviceInfoMap.put("DLP Sequencing - 800 cells", "504524"); // DLP Sequencing - //serviceInfoMap.put("DNA Extraction - Blood", "256034"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: Blood? + serviceInfoMap.put("DNA Extraction - Oxford Nanopore", "504492"); + serviceInfoMap.put("DNA Extraction", "504491"); serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: FFPE? - //serviceInfoMap.put("DNA Extraction - Fresh/Frozen", "256043"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample preservation: Fresh/Frozen - //serviceInfoMap.put("DNA Extraction - Nails", "288528"); // Available request names: DNAExtraction and PATH-DNAExtraction, What property is Nails? - serviceInfoMap.put("DNA Extraction - Viably Frozen", "490136"); // Available request names: DNAExtraction and PATH-DNAExtraction, What is Viably Frozen? serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? + serviceInfoMap.put("DNA/RNA Dual Extraction - FFPE", "504493"); serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq??? - serviceInfoMap.put("FFPE Sectioning - Curls", "260306"); // what is it? - serviceInfoMap.put("FFPE Sectioning - Slides", "260305"); // what is it? + serviceInfoMap.put("FFPE Sectioning", "260306"); // what is it? serviceInfoMap.put("H&E Stain", "260304"); // Is it a request name? What property is it? @@ -126,6 +125,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("RiboDepletion Library Prep", "490512"); + serviceInfoMap.put("RNA Extraction", "504499"); serviceInfoMap.put("RNA Extraction - FFPE", "256100"); serviceInfoMap.put("RNASeq - polyA - 10-20M", "490506"); @@ -145,7 +145,15 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("RNASeq - Ribodeplete - 60-80M", "404337"); serviceInfoMap.put("RNASeq - Ribodeplete - 80-100M", "404338"); - serviceInfoMap.put("Sample Pooling", "491619"); // Is it included in all services going into sequencing? + serviceInfoMap.put("RNASeq - SMARTer - 10-20M", "504501"); + serviceInfoMap.put("RNASeq - SMARTer - 100M+", "504500"); + serviceInfoMap.put("RNASeq - SMARTer - 20-30M", "504502"); + serviceInfoMap.put("RNASeq - SMARTer - 30-40M", "504503"); + serviceInfoMap.put("RNASeq - SMARTer - 40-50M", "504504"); + serviceInfoMap.put("RNASeq - SMARTer - 50-60M", "504506"); + serviceInfoMap.put("RNASeq - SMARTer - 60-80M", "504507"); + serviceInfoMap.put("RNASeq - SMARTer - 80-100M", "504509"); + // Sequencing Only serviceInfoMap.put("Sequencing - 100M Reads - 150c", "490157"); @@ -187,12 +195,19 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("TCRSeq-IGO", "498671"); - serviceInfoMap.put("WES - 100X", "289981"); // WholeExomeKapaLib + coverage - serviceInfoMap.put("WES - 150X", "289982"); - serviceInfoMap.put("WES - 200X", "289983"); - serviceInfoMap.put("WES - 250X", "289984"); - serviceInfoMap.put("WES - 30X", "289979"); - serviceInfoMap.put("WES - 70X", "289980"); + serviceInfoMap.put("WES - FFPE - 100X", "289981"); // WholeExomeKapaLib + coverage + serviceInfoMap.put("WES - FFPE - 150X", "289982"); + serviceInfoMap.put("WES - FFPE - 200X", "289983"); + serviceInfoMap.put("WES - FFPE - 250X", "289984"); + serviceInfoMap.put("WES - FFPE - 30X", "289979"); + serviceInfoMap.put("WES - FFPE - 70X", "289980"); + + serviceInfoMap.put("WES - Frozen - 100X", "504515"); + serviceInfoMap.put("WES - Frozen - 150X", "504516"); + serviceInfoMap.put("WES - Frozen - 200X", "504517"); + serviceInfoMap.put("WES - Frozen - 250X", "504518"); + serviceInfoMap.put("WES - Frozen - 30X", "504519"); + serviceInfoMap.put("WES - Frozen - 70X", "504520"); serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? [WholeGenomeLibProtocol3]: PCR cycles serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); @@ -318,12 +333,7 @@ private List> outputChargesInfo(DataRecord firstSample) { serviceId = serviceInfoMap.get("RNA Extraction - FFPE"); requestsSeviceIds.add(serviceId); } - if(serviceType.equals("DNA Cleanup")) { - - } - if(serviceType.equals("RNA Cleanup")) { - } if(serviceType.equals("DNA/RNASimultaneous")) { serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); requestsSeviceIds.add(serviceId); @@ -376,35 +386,6 @@ else if (pathMicrodissection) { requestsSeviceIds.add(serviceId); } } -// if(serviceType.equals("BloodExtraction")) { -// // "DNA Extraction - Blood"? -// -// } -// if(serviceType.equals("DNA-QC")) { -// -// } -// if(serviceType.equals("RNA-QC")) { -// -// } -// if(serviceType.equals("Library-QC")) { -// -// } - // IMPACT: Spicies: Mouse? Tumor/Normal? -// if(serviceType.equals("IMPACT341")) { -// -// } -// if(serviceType.equals("IMPACT341+")) { -// -// } -// if(serviceType.equals("IMPACT410")) { -// -// } -// if(serviceType.equals("IMPACT410+")) { -// -// } -// if(serviceType.equals("IMPACT468")) { -// -// } if(serviceType.equals("IMPACT505")) { if (tumorOrNormal.toLowerCase().contains("normal")) { serviceId = serviceInfoMap.get("IMPACT - Normal"); @@ -415,21 +396,10 @@ else if (pathMicrodissection) { requestsSeviceIds.add(serviceId); } } -// if(serviceType.equals("PM-IMPACT")) { -// -// } if(serviceType.equals("M-IMPACT")) { serviceId = serviceInfoMap.get("IMPACT - Mouse"); requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("HemePACT_v3")) { -// // Tumor/Normal -// -// } -// if(serviceType.equals("HemePACT_v3+")) { -// // Tumor/Normal -// -// } if(serviceType.equals("HemePACT_v4")) { if (tumorOrNormal.toLowerCase().contains("tumor")) { serviceId = serviceInfoMap.get("HemePACT - Tumor"); @@ -487,12 +457,6 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("RNASeq-KAPAmRNAStranded")) { -// -// } -// if(serviceType.equals("RNASeq-TruSeqFusion")) { -// -// } if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { serviceId = serviceInfoMap.get("RiboDepletion Library Prep"); requestsSeviceIds.add(serviceId); @@ -535,18 +499,12 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } -// if(serviceType.equals("NanoString")) { -// -// } if(serviceType.equals("10XGenomics_GeneExpression")) { // Cassidy will provide } if(serviceType.equals("10XGenomics_VDJ")) { // same as Feature barcoding } -// if(serviceType.equals("10XGenomics_CNV")) { -// -// } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { //490181 @@ -560,9 +518,6 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { serviceInfoMap.get("10X Visium Optimization"); requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("96Well_SmartSeq2")) { -// -// } // if(serviceType.equals("WholeExome + IMPACT")) { // not often // // } @@ -654,33 +609,12 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } } -// if(serviceType.equals("AmpliSeq")) { -// -// } if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually if (SequencingRunType.equals("PE100")) { serviceId = serviceInfoMap.get("AmpliconSeq"); requestsSeviceIds.add(serviceId); } } -// if(serviceType.equals("AdaptiveImmunoSeq")) { -// -// } -// if(serviceType.equals("CLIPSeq")) { -// -// } -// if(serviceType.equals("HiSeq-Other")) { -// -// } -// if(serviceType.equals("MiSeq-Other")) { -// -// } -// if(serviceType.equals("NextSeq-Other")) { -// -// } -// if(serviceType.equals("NovaSeq-Other")) { -// -// } // Dropped for now // if(serviceType.equals("Investigator Prepared Libraries")) { // // sequencing only @@ -734,7 +668,6 @@ else if (assay.toLowerCase().contains("")) { if(serviceType.equals("CMO-CH")) { serviceId = serviceInfoMap.get("CMO-CH"); requestsSeviceIds.add(serviceId); - // "CMO-CH", "492855" // "Data Analysis - CMO-CH", "495937" } From f6f7874d7e392567795b1695a6629867ca3cd0e5 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Tue, 4 Oct 2022 08:10:38 -0400 Subject: [PATCH 17/27] Request id filled. --- .../workflows/Sequencing/GenerateiLabChargesUpload.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 75bc5300..06b3f9bc 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -593,12 +593,6 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { serviceId = serviceInfoMap.get("CRISPR-Seq"); requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("shRNAScreen")) { -// // user prepared library -// } -// if(serviceType.equals("RiboProfileSeq")) { -// -// } if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge if (Integer.parseInt(maxNumOfReads) <= 50) { serviceId = serviceInfoMap.get("ATAC-Seq"); @@ -682,7 +676,7 @@ else if (assay.toLowerCase().contains("")) { chargesFieldValues.put("note", requestId); chargesFieldValues.put("serviceQuantity", serviceQuantity); chargesFieldValues.put("purchasedOn", purchaseDate); - chargesFieldValues.put("serviceRequestId", ); // from iLab! + chargesFieldValues.put("serviceRequestId", requestId); // from iLab! chargesFieldValues.put("ownerEmail", ownerEmail); chargesFieldValues.put("pIEmail", piEmail); chargeInfoRecords.add(chargesFieldValues); From 06c3f842efa55997aef3f0898eb2e7330655cf7f Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 13 Oct 2022 17:19:07 -0400 Subject: [PATCH 18/27] Completing the logic and started testing.. --- .../Sequencing/GenerateiLabChargesUpload.java | 271 +++++++++--------- 1 file changed, 128 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 06b3f9bc..617c6c64 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -62,8 +62,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("10X Multiome Sequencing - 1K nuclei", "490183"); serviceInfoMap.put("10X VDJ Library", "490178"); // Lib Prep? - serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); // Sequencing, VDJ/FB? - serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); // Sequencing, VDJ/FB? + serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); + serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); serviceInfoMap.put("10X Visium Library", "490190"); // Lib Prep? serviceInfoMap.put("10X Visium Optimization", "490189"); // What property is "Optimization"? @@ -73,14 +73,11 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("ACCESS - Normal", "406820"); //Tumor or normal in sample serviceInfoMap.put("ACCESS - Tumor", "406821"); -// serviceInfoMap.put("Adaptive immunoSEQ - Deep", "490139"); // Where to find Deep/ Survey/ Ultradeep? -// serviceInfoMap.put("Adaptive immunoSEQ - Survey", "490138"); -// serviceInfoMap.put("Adaptive immunoSEQ - Ultradeep", "490504"); serviceInfoMap.put("AmpliconSeq", "490510"); // Request name: AmpliconSeq - serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); // Request name: Archer - serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); // Request name: Archer - serviceInfoMap.put("Archer Immunoverse", "490140"); // Request name: Archer + serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); + serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); + serviceInfoMap.put("Archer Immunoverse", "490140"); serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq @@ -183,7 +180,6 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Sequencing - MiSeq Micro 300c", "490152"); serviceInfoMap.put("Sequencing - MiSeq Nano 300c", "490150"); serviceInfoMap.put("Sequencing - MiSeq Nano 500c", "490151"); - // End of Sequencing Only serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? @@ -249,9 +245,10 @@ public PluginResult run() throws Throwable { List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); // On igo-lims04 I checked sample for normalization of pooled libraries datatype allowable parent Set uniqueRequestsOnTheFlowCell = new HashSet<>(); - for(DataRecord eachSample : flowCellSamples) { - DataRecord firstSampleOfEachRequest = eachSample.getParentsOfType("Sample", user).get(0); - String requestId = firstSampleOfEachRequest.getParentsOfType("Request", user).get(0).getStringVal("RequestId", user); + for(DataRecord eachPool : flowCellSamples) { + DataRecord firstSampleOfEachRequest = eachPool.getParentsOfType("Sample", user).get(0); + String requestId = firstSampleOfEachRequest.getAncestorsOfType("Request", user).get(0) + .getStringVal("RequestId", user); if (uniqueRequestsOnTheFlowCell.add(requestId)) { dataValues = outputChargesInfo(firstSampleOfEachRequest); generateiLabChargeSheet(); @@ -271,15 +268,15 @@ private List> outputChargesInfo(DataRecord firstSample) { List> chargeInfoRecords = new LinkedList<>(); try { - String serviceType = firstSample.getParentsOfType("Request", user).get(0) - .getStringVal("RequestName", user); // Request level information - DataRecord requestRecord = firstSample.getParentsOfType("Request", user).get(0); + DataRecord requestRecord = firstSample.getAncestorsOfType("Request", user).get(0); + String serviceType = requestRecord.getStringVal("RequestName", user); + String ownerEmail = requestRecord.getStringVal("ProjectOwner", user); String piEmail = requestRecord.getStringVal("PIemail", user); String requestId = requestRecord.getStringVal("RequestId", user); - String purchaseDate = requestRecord.getStringVal("RequestDate", user); - String serviceQuantity = requestRecord.getStringVal("SampleNumber", user); + String purchaseDate = requestRecord.getDataField("RequestDate", user).toString(); + String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); // Sample level information String species = firstSample.getStringVal("Species", user); String preservation = firstSample.getStringVal("Preservation", user); @@ -287,12 +284,14 @@ private List> outputChargesInfo(DataRecord firstSample) { String assay = firstSample.getStringVal("Assay", user); String origin = firstSample.getStringVal("SampleOrigin", user); String sampleType = firstSample.getStringVal("SampleType", user); + String recipe = firstSample.getStringVal("Recipe", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype - DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); - String maxNumOfReads = seqRequeirements[0].getStringVal("RequestedReads", user); - String covrage = seqRequeirements[0].getStringVal("CoverageTarget", user); - String SequencingRunType = seqRequeirements[0].getStringVal("SequencingRunType", user); + DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); + String numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); + String maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + //String covrage = seqRequeirements[0].getDataField("CoverageTarget", user).toString(); + String SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); @@ -305,91 +304,78 @@ private List> outputChargesInfo(DataRecord firstSample) { // Pathology info // PathologyProtocol1 is a potential child of sample: to be marked in LIMS DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); - Boolean pathScrapping = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); - Boolean pathMicrodissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); + Boolean pathScrapping = false; + Boolean pathMicrodissection = false; + if (pathRecords.length > 0) { + pathScrapping = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); + pathMicrodissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); + } + // Request name in Request table is a drop down menu with certain options String serviceId; Map chargesFieldValues; Set requestsSeviceIds = new HashSet<>(); - serviceId = serviceInfoMap.get("QC - Quantity + Quality"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if(serviceType.equals("DNAExtraction")) { if (sampleType.toLowerCase().contains("cfdna")) { - serviceId = serviceInfoMap.get("cfDNA Extraction - Plasma"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); } else if (preservation.toLowerCase().contains("ffpe")) { - serviceId = serviceInfoMap.get("DNA Extraction - FFPE"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); } else { - serviceId = serviceInfoMap.get("DNA Extraction - Viably Frozen"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); } } if(serviceType.equals("RNAExtraction")) { - serviceId = serviceInfoMap.get("RNA Extraction - FFPE"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); } if(serviceType.equals("DNA/RNASimultaneous")) { - serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); } if(serviceType.equals("PATH-DNAExtraction")) { if (sampleType.toLowerCase().contains("cfdna")) { - serviceId = serviceInfoMap.get("cfDNA Extraction - Plasma"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); } else if (preservation.toLowerCase().contains("ffpe")) { - serviceId = serviceInfoMap.get("DNA Extraction - FFPE"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); } else { - serviceId = serviceInfoMap.get("DNA Extraction - Viably Frozen"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); } if (pathScrapping) { - serviceId = serviceInfoMap.get("Slide Scraping"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } else if (pathMicrodissection) { - serviceId = serviceInfoMap.get("Slide Dissection"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); } } if(serviceType.equals("PATH-RNAExtraction")) { - serviceId = serviceInfoMap.get("RNA Extraction - FFPE"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); if (pathScrapping) { - serviceId = serviceInfoMap.get("Slide Scraping"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } else if (pathMicrodissection) { - serviceId = serviceInfoMap.get("Slide Dissection"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); } } if(serviceType.equals("PATH-DNA/RNASimultaneous")) { - serviceId = serviceInfoMap.get("DNA/RNA Dual Extraction"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); if (pathScrapping) { - serviceId = serviceInfoMap.get("Slide Scraping"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } else if (pathMicrodissection) { - serviceId = serviceInfoMap.get("Slide Dissection"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); } } if(serviceType.equals("IMPACT505")) { if (tumorOrNormal.toLowerCase().contains("normal")) { - serviceId = serviceInfoMap.get("IMPACT - Normal"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Normal")); } else { serviceId = serviceInfoMap.get("IMPACT - Tumor"); @@ -397,39 +383,26 @@ else if (pathMicrodissection) { } } if(serviceType.equals("M-IMPACT")) { - serviceId = serviceInfoMap.get("IMPACT - Mouse"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Mouse")); } if(serviceType.equals("HemePACT_v4")) { if (tumorOrNormal.toLowerCase().contains("tumor")) { - serviceId = serviceInfoMap.get("HemePACT - Tumor"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Tumor")); } else { - serviceId = serviceInfoMap.get("HemePACT - Normal"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Normal")); } } -// if(serviceType.equals("CustomCapture")) { Complex -// -// } if(serviceType.equals("MSK-ACCESS_v1")) { if (tumorOrNormal.toLowerCase().contains("tumor")) { - serviceId = serviceInfoMap.get("ACCESS - Tumor"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Tumor")); } else { - serviceId = serviceInfoMap.get("ACCESS - Normal"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Normal")); } } -// if(serviceType.equals("MissionBio")) { //Easy to bill manually -// // depends on panel -// -// } if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id - serviceId = serviceInfoMap.get("PolyA Library Prep"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("PolyA Library Prep")); if (Integer.parseInt(maxNumOfReads) < 20) { serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); @@ -458,8 +431,7 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { - serviceId = serviceInfoMap.get("RiboDepletion Library Prep"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("RiboDepletion Library Prep")); if (Integer.parseInt(maxNumOfReads) < 20) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); @@ -488,16 +460,22 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-SMARTerAmp")) { - serviceId = serviceInfoMap.get("SMARTer Amplification"); - requestsSeviceIds.add(serviceId); - - } - if(serviceType.equals("Rapid-RCC")) { // Single price, ask Neeman + requestsSeviceIds.add(serviceInfoMap.get("SMARTer Amplification")); } +// if(serviceType.equals("Rapid-RCC")) { // Single price, ask Neeman +// +// } if(serviceType.equals("Archer")) { - - + if (recipe.toLowerCase().contains("Archer-HemePanel")) { + requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Heme Panel")); + } + else if (recipe.toLowerCase().contains("Archer-SolidTumorPanel")) { + requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Solid Tumor (MSK) Panel")); + } + else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { + requestsSeviceIds.add(serviceInfoMap.get("Archer Immunoverse")); + } } if(serviceType.equals("10XGenomics_GeneExpression")) { // Cassidy will provide @@ -506,21 +484,18 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { - //490181 - + requestsSeviceIds.add(serviceInfoMap.get("10X FB Library")); + if (Integer.parseInt(maxNumOfReads) >= 50) { + serviceId = serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells"); + } + else { + serviceId = serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells"); + } + requestsSeviceIds.add(serviceId); } if(serviceType.equals("10XGenomics_Multiome")) { // use seq req } - if(serviceType.equals("10XGenomics_Visium")) { // use seq req - serviceId = serviceInfoMap.get("10X Visium Library"); - requestsSeviceIds.add(serviceId); - serviceInfoMap.get("10X Visium Optimization"); - requestsSeviceIds.add(serviceId); - } -// if(serviceType.equals("WholeExome + IMPACT")) { // not often -// -// } if(serviceType.equals("WholeExome-KAPALib")) { // preservation: FFPE or non FFPE + seqreq: coverage if (preservation.toLowerCase().contains("ffpe")) { @@ -576,51 +551,67 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { requestsSeviceIds.add(serviceId); } if(serviceType.equals("sWGS")) { // QC + one price - serviceId = serviceInfoMap.get("Shallow WGS"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); } if(serviceType.equals("ChIPSeq")) { // similar to wholegenome - serviceId = serviceInfoMap.get("ChIP-Seq/CUT&RUN"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; } if(serviceType.equals("MethylSeq")) { - serviceId = serviceInfoMap.get("EPIC Methyl Capture"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("EPIC Methyl Capture")); } if(serviceType.equals("CRISPRSeq")) { - serviceId = serviceInfoMap.get("CRISPR-Seq"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("CRISPR-Seq")); } if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge - if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("ATAC-Seq"); - requestsSeviceIds.add(serviceId); - } - else { + requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); + if (Integer.parseInt(maxNumOfReads) > 50) { int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; - } + int seqReadsService = remainigReadsRequestedToCharge / 10; + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + + if (seqReadsService < 20) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 30) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 40) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 50) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 60) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 80) { + serviceId = serviceInfoMap.get(""); + } + else if (seqReadsService < 100) { + serviceId = serviceInfoMap.get(""); + } + else { + serviceId = serviceInfoMap.get(""); + } + requestsSeviceIds.add(serviceId); + } } if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually + requestsSeviceIds.add(serviceInfoMap.get("AmpliconSeq")); if (SequencingRunType.equals("PE100")) { - serviceId = serviceInfoMap.get("AmpliconSeq"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + + } else if (SequencingRunType.equals("PE150")) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE150")); } } - // Dropped for now - // if(serviceType.equals("Investigator Prepared Libraries")) { - // // sequencing only - // } - // if(serviceType.equals("Investigator Prepared Pools")) { // number of micronic tubes = # pools - // // sequencing only - // } if(serviceType.equals("ddPCR")) { // Assays picklist //QC- Quant-it - serviceId = serviceInfoMap.get("QC - Quant-it"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); //ddPCR (1 reaction) serviceId = serviceInfoMap.get("ddPCR (1 reaction)"); for (int i = 0; i < numOfReplicates; i++) { @@ -638,36 +629,28 @@ else if (assay.toLowerCase().contains("")) { } if(serviceType.equals("DLP")) { - serviceId = serviceInfoMap.get("DLP Library - 800 cells"); - requestsSeviceIds.add(serviceId); - serviceId = serviceInfoMap.get("DLP Sequencing - 1 quadrant"); - requestsSeviceIds.add(serviceId); - } - if(serviceType.equals("PED-PEG")) { // Single price, ask Neeman - + requestsSeviceIds.add(serviceInfoMap.get("DLP Library - 800 cells")); + requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 1 quadrant")); } +// if(serviceType.equals("PED-PEG")) { // Single price, ask Neeman +// +// } if(serviceType.equals("FragmentAnalysis")) { //Custom Fragment Analysis - serviceId = serviceInfoMap.get("Custom Fragment Analysis"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Custom Fragment Analysis")); } if(serviceType.equals("CellLineAuthentication")) { - serviceId = serviceInfoMap.get("Cell Line Authentication"); - requestsSeviceIds.add(serviceId); - serviceId = serviceInfoMap.get("QC - Quant-it"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("Cell Line Authentication")); + requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); } if(serviceType.equals("CMO-CH")) { - serviceId = serviceInfoMap.get("CMO-CH"); - requestsSeviceIds.add(serviceId); - // "Data Analysis - CMO-CH", "495937" - + requestsSeviceIds.add(serviceInfoMap.get("CMO-CH")); + requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - CMO-CH")); } if(serviceType.equals("TCRSeq-IGO")) { - serviceId = serviceInfoMap.get("TCRSeq-IGO"); - requestsSeviceIds.add(serviceId); + requestsSeviceIds.add(serviceInfoMap.get("TCRSeq-IGO")); } for(String eachServiceId : requestsSeviceIds) { @@ -728,9 +711,11 @@ private void generateiLabChargeSheet() { } bytes = allData.toString().getBytes(); ExemplarConfig exemplarConfig = new ExemplarConfig(managerContext); - String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("").toString(); + String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("iLabBulkUploadChargesPath").toString(); //"/pskis34/vialelab/LIMS/iLabBulkUploadCharges" + // Check for permission to write into shared drive + try (OutputStream fos = new FileOutputStream(outFile, false)){ fos.write(bytes); outFile.setReadOnly(); From d6be9986ac58a36329d2ac240498c2ba2fba6652 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Tue, 18 Oct 2022 07:29:52 -0400 Subject: [PATCH 19/27] Correctly generating a bulk charge file and writing on the shared drive. --- .../Sequencing/GenerateiLabChargesUpload.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 617c6c64..ae615ded 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -272,8 +272,9 @@ private List> outputChargesInfo(DataRecord firstSample) { DataRecord requestRecord = firstSample.getAncestorsOfType("Request", user).get(0); String serviceType = requestRecord.getStringVal("RequestName", user); - String ownerEmail = requestRecord.getStringVal("ProjectOwner", user); - String piEmail = requestRecord.getStringVal("PIemail", user); + String requestName = requestRecord.getStringVal("RequestName", user); + String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); //LabHeadEmail + String piEmail = requestRecord.getStringVal("LabHeadEmail", user); //PIemail String requestId = requestRecord.getStringVal("RequestId", user); String purchaseDate = requestRecord.getDataField("RequestDate", user).toString(); String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); @@ -656,7 +657,7 @@ else if (assay.toLowerCase().contains("")) { for(String eachServiceId : requestsSeviceIds) { chargesFieldValues = new HashMap<>(); chargesFieldValues.put("serviceId", eachServiceId); - chargesFieldValues.put("note", requestId); + chargesFieldValues.put("note", requestName); chargesFieldValues.put("serviceQuantity", serviceQuantity); chargesFieldValues.put("purchasedOn", purchaseDate); chargesFieldValues.put("serviceRequestId", requestId); // from iLab! @@ -684,12 +685,15 @@ private void generateiLabChargeSheet() { } dataLines.add(headersArray); i = 0; + String request = ""; String[] dataInfoArray = new String[headerValues.size()]; for(Map row : dataValues) { + dataInfoArray[i++] = row.get("serviceId"); dataInfoArray[i++] = row.get("note"); dataInfoArray[i++] = row.get("serviceQuantity"); dataInfoArray[i++] = row.get("purchasedOn"); dataInfoArray[i++] = row.get("serviceRequestId"); + request = row.get("serviceRequestId"); dataInfoArray[i++] = row.get("ownerEmail"); dataInfoArray[i++] = row.get("pIEmail"); dataLines.add(dataInfoArray); @@ -697,14 +701,15 @@ private void generateiLabChargeSheet() { i = 0; } - + logInfo("Inside generateiLabChargeSheet method"); ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); try { - File outFile = null; + File outFile; StringBuffer allData = new StringBuffer(); byte[] bytes; for (String[] eachLine: dataLines) { for (String eachCell : eachLine) { + logInfo("each cell is: " + eachCell); allData.append(eachCell + ","); } allData.append("\n"); @@ -713,12 +718,13 @@ private void generateiLabChargeSheet() { ExemplarConfig exemplarConfig = new ExemplarConfig(managerContext); String iLabChargeUpload = exemplarConfig.getExemplarConfigValues().get("iLabBulkUploadChargesPath").toString(); //"/pskis34/vialelab/LIMS/iLabBulkUploadCharges" - + outFile = new File(iLabChargeUpload + "/" + request + "_ilabcharge.csv"); + clientCallback.writeBytes(bytes, outFile.getName()); // Check for permission to write into shared drive try (OutputStream fos = new FileOutputStream(outFile, false)){ fos.write(bytes); - outFile.setReadOnly(); + //outFile.setReadOnly(); byteStream.close(); } catch (Exception e) { logInfo("Error in writing to shared drive: " + e.getMessage()); From 086e0eb3b25a59d3457172b6f1a71b2fb5be4a4e Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 19 Oct 2022 16:53:46 -0400 Subject: [PATCH 20/27] Only 10X and PATH logics remained. --- .../Sequencing/GenerateiLabChargesUpload.java | 374 ++++++++++++------ 1 file changed, 246 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index ae615ded..c13d994d 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -31,27 +31,26 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("QC - Quant-it", "259492"); serviceInfoMap.put("QC - Quantity + Quality", "256029"); // DDPCR Non-Sequencing - serviceInfoMap.put("ddPCR (1 reaction)", "256041"); // Request name: DDPCR - serviceInfoMap.put("ddPCR Assay Design", "288524"); // assay ignore - serviceInfoMap.put("ddPCR Assay Order - CNV/GEX", "290735"); // Pick list ID: ddPCR Assay Type - serviceInfoMap.put("ddPCR Assay Order - Mutation", "288525"); // Pick list ID: ddPCR Assay Type - serviceInfoMap.put("ddPCR Human % Assay", "490143"); // Pick list ID: ddPCR Species - serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // What is "KRAS Multiplexing"? + serviceInfoMap.put("ddPCR (1 reaction)", "256041"); + serviceInfoMap.put("ddPCR Assay Design", "288524"); + serviceInfoMap.put("ddPCR Assay Order - CNV/GEX", "290735"); + serviceInfoMap.put("ddPCR Assay Order - Mutation", "288525"); + serviceInfoMap.put("ddPCR Human % Assay", "490143"); + serviceInfoMap.put("ddPCR KRAS Multiplexing", "337962"); // CellLine Aut (STR) Non-Sequencing - serviceInfoMap.put("Cell Line Authentication", "490142"); // Request name: CellLineAuthentication - serviceInfoMap.put("Fingerprinting - STR", "302835"); // None Sequencing, Cell line Auth? + serviceInfoMap.put("Cell Line Authentication", "490142"); + serviceInfoMap.put("Fingerprinting - STR", "302835"); serviceInfoMap.put("GeoMx Experiment Optimization", "504495"); serviceInfoMap.put("GeoMx Library", "504496"); serviceInfoMap.put("GeoMx Slide Prep", "504497"); // Data Analysis - serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); // Request name: MSK-ACCESS_v1? - serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); // Request name: MSK-ACCESS_v1? + serviceInfoMap.put("Data Analysis - ACCESS (N)", "495935"); + serviceInfoMap.put("Data Analysis - ACCESS (T)", "495936"); serviceInfoMap.put("Data Analysis - CMO-CH", "495937"); - serviceInfoMap.put("Data Handling", "491618"); // IGO Internal, Any expense entered in the iLab? // Library Prep - serviceInfoMap.put("10X FB Library", "490181"); //Feature Barcoding + serviceInfoMap.put("10X FB Library", "490181"); serviceInfoMap.put("10X GEX Library", "490175"); // Gene Expression Library Prep serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); // Gene Expression Sequencing + cell count (sample table) @@ -71,28 +70,27 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("10X Visium Sequencing (FFPE)", "504489"); - serviceInfoMap.put("ACCESS - Normal", "406820"); //Tumor or normal in sample + serviceInfoMap.put("ACCESS - Normal", "406820"); serviceInfoMap.put("ACCESS - Tumor", "406821"); - serviceInfoMap.put("AmpliconSeq", "490510"); // Request name: AmpliconSeq + serviceInfoMap.put("AmpliconSeq", "490510"); serviceInfoMap.put("Archer Fusion - Heme Panel", "334267"); serviceInfoMap.put("Archer Fusion - Solid Tumor (MSK) Panel", "334266"); serviceInfoMap.put("Archer Immunoverse", "490140"); - serviceInfoMap.put("ATAC Library Prep", "490513"); // IGO Internal - serviceInfoMap.put("ATAC-Seq", "483257"); // Request name: ATACSeq + serviceInfoMap.put("ATAC-Seq", "483257"); serviceInfoMap.put("cfDNA Extraction", "261860"); - serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); // Request name: ChIPSeq + serviceInfoMap.put("ChIP-Seq/CUT&RUN", "483258"); serviceInfoMap.put("CMO-CH", "492855"); - serviceInfoMap.put("CRISPR-Seq", "308754"); // Request name: CRISPRSeq + serviceInfoMap.put("CRISPR-Seq", "308754"); serviceInfoMap.put("Custom Fragment Analysis", "504490"); - serviceInfoMap.put("DLP Library - 800 cells", "490187"); // DLP Lib Prep - serviceInfoMap.put("DLP Sequencing - 800 cells", "504524"); // DLP Sequencing + serviceInfoMap.put("DLP Library - 800 cells", "490187"); + serviceInfoMap.put("DLP Sequencing - 800 cells", "504524"); serviceInfoMap.put("DNA Extraction - Oxford Nanopore", "504492"); serviceInfoMap.put("DNA Extraction", "504491"); @@ -100,16 +98,16 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? serviceInfoMap.put("DNA/RNA Dual Extraction - FFPE", "504493"); - serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq??? + serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq? serviceInfoMap.put("FFPE Sectioning", "260306"); // what is it? serviceInfoMap.put("H&E Stain", "260304"); // Is it a request name? What property is it? - serviceInfoMap.put("HemePACT - Normal", "259603"); // Tumor or normal Sample level info - serviceInfoMap.put("HemePACT - Tumor", "406819"); // Tumor or normal Sample level info + serviceInfoMap.put("HemePACT - Normal", "259603"); + serviceInfoMap.put("HemePACT - Tumor", "406819"); - serviceInfoMap.put("IMPACT - Mouse", "331388"); // Tumor or normal/ Species Sample level info + serviceInfoMap.put("IMPACT - Mouse", "331388"); serviceInfoMap.put("IMPACT - Normal", "256124"); serviceInfoMap.put("IMPACT - Tumor", "406813"); @@ -184,8 +182,8 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? - serviceInfoMap.put("Slide Dissection", "260643"); // in Pathology protocol 1: MicrodissectionRequired, PATH-DNA/RNA/simultaious Extraction - serviceInfoMap.put("Slide Scraping", "296697"); // Where is it included? Pathology protocol 1: ScrapingCurlsRequired, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Dissection", "260643"); // Pathology protocol 1: MicrodissectionRequired, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Scraping", "296697"); // Pathology protocol 1: ScrapingCurlsRequired, PATH-DNA/RNA/simultaious Extraction serviceInfoMap.put("SMARTer Amplification", "261859"); @@ -286,12 +284,13 @@ private List> outputChargesInfo(DataRecord firstSample) { String origin = firstSample.getStringVal("SampleOrigin", user); String sampleType = firstSample.getStringVal("SampleType", user); String recipe = firstSample.getStringVal("Recipe", user); + // QC information // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); String numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); String maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); - //String covrage = seqRequeirements[0].getDataField("CoverageTarget", user).toString(); + String coverage = seqRequeirements[0].getDataField("CoverageTarget", user).toString(); String SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS @@ -300,6 +299,8 @@ private List> outputChargesInfo(DataRecord firstSample) { for (DataRecord ddpcrProtocol2 : ddpcrProtocol2s) { numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); } + DataRecord[] ddpcrProtocol1s = firstSample.getChildrenOfType("DdPcrProtocol1", user); + String Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); // Pathology info @@ -312,6 +313,8 @@ private List> outputChargesInfo(DataRecord firstSample) { pathMicrodissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); } + DataRecord[] wholeGenomeLib = firstSample.getChildrenOfType("WholeGenomeLibProtocol3", user); + String pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); // Request name in Request table is a drop down menu with certain options String serviceId; @@ -327,7 +330,7 @@ private List> outputChargesInfo(DataRecord firstSample) { requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); } else { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction")); } } if(serviceType.equals("RNAExtraction")) { @@ -335,7 +338,13 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("DNA/RNASimultaneous")) { - requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); + if (preservation.toLowerCase().contains("ffpe")) { + requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction - FFPE")); + } + else { + requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } } if(serviceType.equals("PATH-DNAExtraction")) { @@ -375,6 +384,12 @@ else if (pathMicrodissection) { } } if(serviceType.equals("IMPACT505")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); + } + if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } if (tumorOrNormal.toLowerCase().contains("normal")) { requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Normal")); } @@ -385,8 +400,17 @@ else if (pathMicrodissection) { } if(serviceType.equals("M-IMPACT")) { requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Mouse")); + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } } if(serviceType.equals("HemePACT_v4")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); + } + else if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } if (tumorOrNormal.toLowerCase().contains("tumor")) { requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Tumor")); } @@ -395,35 +419,46 @@ else if (pathMicrodissection) { } } if(serviceType.equals("MSK-ACCESS_v1")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); + } + if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } if (tumorOrNormal.toLowerCase().contains("tumor")) { requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Tumor")); + requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (T)")); } else { requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Normal")); + requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (N)")); } } if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id + if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("PolyA Library Prep")); - if (Integer.parseInt(maxNumOfReads) < 20) { + if (Integer.parseInt(maxNumOfReads) <= 20) { serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); } - else if (Integer.parseInt(maxNumOfReads) < 30) { + else if (Integer.parseInt(maxNumOfReads) <= 30) { serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); } - else if (Integer.parseInt(maxNumOfReads) < 40) { + else if (Integer.parseInt(maxNumOfReads) <= 40) { serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); } - else if (Integer.parseInt(maxNumOfReads) < 50) { + else if (Integer.parseInt(maxNumOfReads) <= 50) { serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); } - else if (Integer.parseInt(maxNumOfReads) < 60) { + else if (Integer.parseInt(maxNumOfReads) <= 60) { serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); } - else if (Integer.parseInt(maxNumOfReads) < 80) { + else if (Integer.parseInt(maxNumOfReads) <= 80) { serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); } - else if (Integer.parseInt(maxNumOfReads) < 100) { + else if (Integer.parseInt(maxNumOfReads) <= 100) { serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); } else { @@ -432,27 +467,30 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { + if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("RiboDepletion Library Prep")); - if (Integer.parseInt(maxNumOfReads) < 20) { + if (Integer.parseInt(maxNumOfReads) <= 20) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); } - else if (Integer.parseInt(maxNumOfReads) < 30) { + else if (Integer.parseInt(maxNumOfReads) <= 30) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); } - else if (Integer.parseInt(maxNumOfReads) < 40) { + else if (Integer.parseInt(maxNumOfReads) <= 40) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); } - else if (Integer.parseInt(maxNumOfReads) < 50) { + else if (Integer.parseInt(maxNumOfReads) <= 50) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); } - else if (Integer.parseInt(maxNumOfReads) < 60) { + else if (Integer.parseInt(maxNumOfReads) <= 60) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); } - else if (Integer.parseInt(maxNumOfReads) < 80) { + else if (Integer.parseInt(maxNumOfReads) <= 80) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); } - else if (Integer.parseInt(maxNumOfReads) < 100) { + else if (Integer.parseInt(maxNumOfReads) <= 100) { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); } else { @@ -461,10 +499,38 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-SMARTerAmp")) { + if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("SMARTer Amplification")); + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 10-20M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 20-30M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 30-40M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 40-50M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 50-60M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 60-80M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 80-100M"); + } + else { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); + } + requestsSeviceIds.add(serviceId); } -// if(serviceType.equals("Rapid-RCC")) { // Single price, ask Neeman +// if(serviceType.equals("Rapid-RCC")) { // // } if(serviceType.equals("Archer")) { @@ -478,7 +544,7 @@ else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { requestsSeviceIds.add(serviceInfoMap.get("Archer Immunoverse")); } } - if(serviceType.equals("10XGenomics_GeneExpression")) { // Cassidy will provide + if(serviceType.equals("10XGenomics_GeneExpression")) { } if(serviceType.equals("10XGenomics_VDJ")) { // same as Feature barcoding @@ -498,66 +564,145 @@ else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { } if(serviceType.equals("WholeExome-KAPALib")) { // preservation: FFPE or non FFPE + seqreq: coverage + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || + firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } if (preservation.toLowerCase().contains("ffpe")) { - + if ((Integer.parseInt(coverage) == 30 || Integer.parseInt(coverage) == 70)) { + requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 70X")); + } + else if (Integer.parseInt(coverage) == 100) { + requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 100X")); + } + else if (Integer.parseInt(coverage) == 150) { + requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 150X")); + } + else if (Integer.parseInt(coverage) == 200) { + requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 200X")); + } + else if (Integer.parseInt(coverage) == 250) { + requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 250X")); + } } - else { - + else if (preservation.toLowerCase().contains("frozen")) { + if ((Integer.parseInt(coverage) == 30 || Integer.parseInt(coverage) == 70)) { + requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 70X")); + } + else if (Integer.parseInt(coverage) == 100) { + requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 100X")); + } + else if (Integer.parseInt(coverage) == 150) { + requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 150X")); + } + else if (Integer.parseInt(coverage) == 200) { + requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 200X")); + } + else if (Integer.parseInt(coverage) == 250) { + requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 250X")); + } } - } - if(serviceType.equals("HumanWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage - if (preservation.toLowerCase().contains("ffpe")) { - + if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } - else { - + if (Integer.parseInt(pcrCycles) > 0) { + if (Integer.parseInt(coverage) == 10) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 10X")); + } + else if (Integer.parseInt(coverage) == 30) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 30X")); + } + else if (Integer.parseInt(coverage) == 40) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 40X")); + } + else if (Integer.parseInt(coverage) == 50) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 50X")); + } + else if (Integer.parseInt(coverage) == 60) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 60X")); + } + else if (Integer.parseInt(coverage) == 70) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 70X")); + } + else if (Integer.parseInt(coverage) == 80) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 80X")); + } + else if (Integer.parseInt(coverage) == 100) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 100X")); + } + else if (Integer.parseInt(coverage) == 120) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 120X")); + } + } + else { // PCR Free + if (Integer.parseInt(coverage) == 10) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 10X")); + } + else if (Integer.parseInt(coverage) == 30) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 30X")); + } + else if (Integer.parseInt(coverage) == 40) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 40X")); + } + else if (Integer.parseInt(coverage) == 50) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 50X")); + } + else if (Integer.parseInt(coverage) == 60) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 60X")); + } + else if (Integer.parseInt(coverage) == 70) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 70X")); + } + else if (Integer.parseInt(coverage) == 80) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 80X")); + } + else if (Integer.parseInt(coverage) == 100) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 100X")); + } + else if (Integer.parseInt(coverage) == 120) { + requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 120X")); + } } } - if(serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage - if (preservation.toLowerCase().contains("ffpe")) { +// if(serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage +// if (preservation.toLowerCase().contains("ffpe")) { +// +// } +// else { +// +// } +// } + if(serviceType.equals("WholeGenome")) { // seqr > 10 M + add sequencing charge + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); } - else { + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; + int seqReadsService = remainigReadsRequestedToCharge / 10; + for (int i = 0; i < seqReadsService; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); } } - if(serviceType.equals("WholeGenome")) { // seqr > 10 M + add sequencing charge - int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; + if(serviceType.equals("sWGS")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || + firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (remainigReadsRequestedToCharge < 20) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); - } - else if (Integer.parseInt(maxNumOfReads) < 30) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); - } - else if (Integer.parseInt(maxNumOfReads) < 40) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); - } - else if (Integer.parseInt(maxNumOfReads) < 50) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); - } - else if (Integer.parseInt(maxNumOfReads) < 60) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); - } - else if (Integer.parseInt(maxNumOfReads) < 80) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); } - else if (Integer.parseInt(maxNumOfReads) < 100) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); - } - else { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); - } - requestsSeviceIds.add(serviceId); - } - if(serviceType.equals("sWGS")) { // QC + one price requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); } if(serviceType.equals("ChIPSeq")) { // similar to wholegenome requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; - + int seqReadsService = remainigReadsRequestedToCharge / 10; + for (int i = 0; i < seqReadsService; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + } } if(serviceType.equals("MethylSeq")) { requestsSeviceIds.add(serviceInfoMap.get("EPIC Methyl Capture")); @@ -568,36 +713,13 @@ else if (Integer.parseInt(maxNumOfReads) < 100) { if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); if (Integer.parseInt(maxNumOfReads) > 50) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; int seqReadsService = remainigReadsRequestedToCharge / 10; - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - if (seqReadsService < 20) { - serviceId = serviceInfoMap.get(""); - } - else if (seqReadsService < 30) { - serviceId = serviceInfoMap.get(""); - } - else if (seqReadsService < 40) { - serviceId = serviceInfoMap.get(""); + for (int i = 0; i < seqReadsService; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); } - else if (seqReadsService < 50) { - serviceId = serviceInfoMap.get(""); - } - else if (seqReadsService < 60) { - serviceId = serviceInfoMap.get(""); - } - else if (seqReadsService < 80) { - serviceId = serviceInfoMap.get(""); - } - else if (seqReadsService < 100) { - serviceId = serviceInfoMap.get(""); - } - else { - serviceId = serviceInfoMap.get(""); - } - requestsSeviceIds.add(serviceId); - } } if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually @@ -610,34 +732,31 @@ else if (seqReadsService < 100) { } } if(serviceType.equals("ddPCR")) { - // Assays picklist - //QC- Quant-it - requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - //ddPCR (1 reaction) - serviceId = serviceInfoMap.get("ddPCR (1 reaction)"); - for (int i = 0; i < numOfReplicates; i++) { - requestsSeviceIds.add(serviceId); + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || + firstSample.getChildrenOfType("QcReportLibrary", user).length > 0 || + firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } + //requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); //ddPCR Human % Assay - if(assay.toLowerCase().contains("")) { + if(Ch1Target.toLowerCase().contains("Mouse_Human_CNV_PTGER2")) { serviceId = serviceInfoMap.get("ddPCR Human % Assay"); } - //ddPCR KRAS Multiplexing - else if (assay.toLowerCase().contains("")) { - serviceId = serviceInfoMap.get("ddPCR KRAS Multiplexing"); + else if (numOfReplicates > 1) { + for (int i = 0; i < numOfReplicates; i++) { + requestsSeviceIds.add(serviceInfoMap.get("ddPCR (1 reaction)")); + } } - requestsSeviceIds.add(serviceId); - } if(serviceType.equals("DLP")) { requestsSeviceIds.add(serviceInfoMap.get("DLP Library - 800 cells")); requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 1 quadrant")); } -// if(serviceType.equals("PED-PEG")) { // Single price, ask Neeman +// if(serviceType.equals("PED-PEG")) { // // } if(serviceType.equals("FragmentAnalysis")) { - //Custom Fragment Analysis requestsSeviceIds.add(serviceInfoMap.get("Custom Fragment Analysis")); } @@ -668,7 +787,6 @@ else if (assay.toLowerCase().contains("")) { } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); } - return chargeInfoRecords; } From bbead2c343ad875951ba228790ce0d418bca539f Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 20 Oct 2022 10:48:51 -0400 Subject: [PATCH 21/27] ATAC-seq tested. --- .../Sequencing/GenerateiLabChargesUpload.java | 263 ++++++++++++------ 1 file changed, 171 insertions(+), 92 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index c13d994d..6a26512f 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -9,20 +9,17 @@ import com.velox.sapioutils.server.plugin.DefaultGenericPlugin; import com.velox.sapioutils.shared.utilities.ExemplarConfig; import org.apache.commons.lang3.exception.ExceptionUtils; +import org.mockito.internal.matchers.Null; import java.io.*; import java.rmi.RemoteException; +import java.text.SimpleDateFormat; import java.util.*; -//**************Can I upload a dummy charge upload to actual IGO core room? Yes, under IGO-Test - - - public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private List headerValues = Arrays.asList("service_id", "note", "service_quantity", "purchased_on", "service_request_id", "owner_email", "pi_email_or_group_id"); public List> dataValues = new LinkedList<>(); - // SampleReceving Request Type pick list ID private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID @@ -52,21 +49,21 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { // Library Prep serviceInfoMap.put("10X FB Library", "490181"); - serviceInfoMap.put("10X GEX Library", "490175"); // Gene Expression Library Prep - serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); // Gene Expression Sequencing + cell count (sample table) - serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); // Gene Expression Sequencing + cell count (sample table) + serviceInfoMap.put("10X GEX Library", "490175"); + serviceInfoMap.put("10X GEX Sequencing - 10K cells", "490177"); + serviceInfoMap.put("10X GEX Sequencing - 1K cells", "490176"); - serviceInfoMap.put("10X Multiome Library", "490182"); // Multiome Lib Prep - serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); // Where to find Nuclei info? which table? + serviceInfoMap.put("10X Multiome Library", "490182"); + serviceInfoMap.put("10X Multiome Sequencing - 10K nuclei", "490184"); serviceInfoMap.put("10X Multiome Sequencing - 1K nuclei", "490183"); - serviceInfoMap.put("10X VDJ Library", "490178"); // Lib Prep? + serviceInfoMap.put("10X VDJ Library", "490178"); serviceInfoMap.put("10X VDJ/FB Sequencing - 10K cells", "490180"); serviceInfoMap.put("10X VDJ/FB Sequencing - 1K cells", "490179"); - serviceInfoMap.put("10X Visium Library", "490190"); // Lib Prep? + serviceInfoMap.put("10X Visium Library", "490190"); serviceInfoMap.put("10X Visium Optimization", "490189"); // What property is "Optimization"? - serviceInfoMap.put("10X Visium Sequencing (Frozen)", "490191"); // Sequencing + serviceInfoMap.put("10X Visium Sequencing (Frozen)", "490191"); serviceInfoMap.put("10X Visium Sequencing (FFPE)", "504489"); @@ -94,15 +91,15 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("DNA Extraction - Oxford Nanopore", "504492"); serviceInfoMap.put("DNA Extraction", "504491"); - serviceInfoMap.put("DNA Extraction - FFPE", "256048"); // Available request names: DNAExtraction and PATH-DNAExtraction, Sample origin: FFPE? - serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); // Request name: PATH-DNA/RNASimultaneous?? + serviceInfoMap.put("DNA Extraction - FFPE", "256048"); + serviceInfoMap.put("DNA/RNA Dual Extraction", "256092"); serviceInfoMap.put("DNA/RNA Dual Extraction - FFPE", "504493"); serviceInfoMap.put("EPIC Methyl Capture", "483259"); // request name: MethylSeq? - serviceInfoMap.put("FFPE Sectioning", "260306"); // what is it? + serviceInfoMap.put("FFPE Sectioning", "260306"); - serviceInfoMap.put("H&E Stain", "260304"); // Is it a request name? What property is it? + serviceInfoMap.put("H&E Stain", "260304"); serviceInfoMap.put("HemePACT - Normal", "259603"); serviceInfoMap.put("HemePACT - Tumor", "406819"); @@ -180,16 +177,16 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("Sequencing - MiSeq Nano 500c", "490151"); // End of Sequencing Only - serviceInfoMap.put("Shallow WGS", "341254"); // Human Whole Genome/ Mouse Whole Genome/ Whole Genome? + serviceInfoMap.put("Shallow WGS", "341254"); - serviceInfoMap.put("Slide Dissection", "260643"); // Pathology protocol 1: MicrodissectionRequired, PATH-DNA/RNA/simultaious Extraction - serviceInfoMap.put("Slide Scraping", "296697"); // Pathology protocol 1: ScrapingCurlsRequired, PATH-DNA/RNA/simultaious Extraction + serviceInfoMap.put("Slide Dissection", "260643"); + serviceInfoMap.put("Slide Scraping", "296697"); serviceInfoMap.put("SMARTer Amplification", "261859"); serviceInfoMap.put("TCRSeq-IGO", "498671"); - serviceInfoMap.put("WES - FFPE - 100X", "289981"); // WholeExomeKapaLib + coverage + serviceInfoMap.put("WES - FFPE - 100X", "289981"); serviceInfoMap.put("WES - FFPE - 150X", "289982"); serviceInfoMap.put("WES - FFPE - 200X", "289983"); serviceInfoMap.put("WES - FFPE - 250X", "289984"); @@ -203,7 +200,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { serviceInfoMap.put("WES - Frozen - 30X", "504519"); serviceInfoMap.put("WES - Frozen - 70X", "504520"); - serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); // PCR information? [WholeGenomeLibProtocol3]: PCR cycles + serviceInfoMap.put("WGS - PCR+ - 100X", "490204"); serviceInfoMap.put("WGS - PCR+ - 10X", "495934"); serviceInfoMap.put("WGS - PCR+ - 120X", "490205"); serviceInfoMap.put("WGS - PCR+ - 30X", "490199"); @@ -274,7 +271,7 @@ private List> outputChargesInfo(DataRecord firstSample) { String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); //LabHeadEmail String piEmail = requestRecord.getStringVal("LabHeadEmail", user); //PIemail String requestId = requestRecord.getStringVal("RequestId", user); - String purchaseDate = requestRecord.getDataField("RequestDate", user).toString(); + Long purchaseDate = requestRecord.getDateVal("RequestDate", user); String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); // Sample level information String species = firstSample.getStringVal("Species", user); @@ -284,13 +281,18 @@ private List> outputChargesInfo(DataRecord firstSample) { String origin = firstSample.getStringVal("SampleOrigin", user); String sampleType = firstSample.getStringVal("SampleType", user); String recipe = firstSample.getStringVal("Recipe", user); - // QC information // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); String numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); String maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); - String coverage = seqRequeirements[0].getDataField("CoverageTarget", user).toString(); + //logInfo("seqRequeirements length is: " + seqRequeirements.length); + int coverage = 0; + if (seqRequeirements[0].getStringVal("CoverageTarget", user) != null) { + logInfo("seqRequeirements[0] CoverageTarget is: " + seqRequeirements[0].getStringVal("CoverageTarget", user)); + coverage = seqRequeirements[0].getIntegerVal("CoverageTarget", user); + } + String SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS @@ -300,26 +302,35 @@ private List> outputChargesInfo(DataRecord firstSample) { numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); } DataRecord[] ddpcrProtocol1s = firstSample.getChildrenOfType("DdPcrProtocol1", user); - String Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); - + String Ch1Target = ""; + if (ddpcrProtocol1s.length > 0) { + Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); + } // Pathology info // PathologyProtocol1 is a potential child of sample: to be marked in LIMS DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); - Boolean pathScrapping = false; - Boolean pathMicrodissection = false; + Boolean scrappingCurls = false; + Boolean microdissection = false; + Boolean HERequired = false; + Boolean SectioningRequired = false; if (pathRecords.length > 0) { - pathScrapping = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); - pathMicrodissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); + scrappingCurls = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); + microdissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); + HERequired = pathRecords[0].getBooleanVal("HERequired", user); + SectioningRequired = pathRecords[0].getBooleanVal("SectioningRequired", user); } DataRecord[] wholeGenomeLib = firstSample.getChildrenOfType("WholeGenomeLibProtocol3", user); - String pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); + String pcrCycles = ""; + if (wholeGenomeLib.length > 0) { + pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); + } // Request name in Request table is a drop down menu with certain options String serviceId; Map chargesFieldValues; - Set requestsSeviceIds = new HashSet<>(); + List requestsSeviceIds = new LinkedList<>(); requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); @@ -348,39 +359,54 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("PATH-DNAExtraction")) { - if (sampleType.toLowerCase().contains("cfdna")) { - requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); - } else if (preservation.toLowerCase().contains("ffpe")) { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); + if (HERequired) { + requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); } - else { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); + if (SectioningRequired) { + requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); } - - if (pathScrapping) { + if (scrappingCurls) { requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } - else if (pathMicrodissection) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); + if (microdissection) { + requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); } +// if (sampleType.toLowerCase().contains("cfdna")) { +// requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); +// } else if (preservation.toLowerCase().contains("ffpe")) { +// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); +// } +// else { +// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); +// } } if(serviceType.equals("PATH-RNAExtraction")) { - requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); - if (pathScrapping) { + if (HERequired) { + requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); + } + if (SectioningRequired) { + requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); + } + if (scrappingCurls) { requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } - else if (pathMicrodissection) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); + if (microdissection) { + requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); } } if(serviceType.equals("PATH-DNA/RNASimultaneous")) { - requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); - if (pathScrapping) { + if (HERequired) { + requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); + } + if (SectioningRequired) { + requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); + } + if (scrappingCurls) { requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); } - else if (pathMicrodissection) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Dissection")); + if (microdissection) { + requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Extraction - FFPE")); } } if(serviceType.equals("IMPACT505")) { @@ -545,123 +571,171 @@ else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { } } if(serviceType.equals("10XGenomics_GeneExpression")) { - + requestsSeviceIds.add((serviceInfoMap.get("10X GEX Library"))); + if (Integer.parseInt(maxNumOfReads) >= 200) { + requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 10K cells"))); + if (Integer.parseInt(maxNumOfReads) > 200) { + int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 200) / 10; + for (int i = 0; i < remainingReadsToCharge; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + } + } + } + else { + int countOfAdditions = Integer.parseInt(maxNumOfReads) / 20; + for (int i = 0; i < countOfAdditions; i++) { + requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 1K cells"))); + } + } } - if(serviceType.equals("10XGenomics_VDJ")) { // same as Feature barcoding + if(serviceType.equals("10XGenomics_VDJ")) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ Library")); + if (Integer.parseInt(maxNumOfReads) >= 50) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); + if (Integer.parseInt(maxNumOfReads) > 50) { + int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; + for (int i = 0; i < remainingReadsToCharge; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + } + } + } + else { + int numOfAdditions = Integer.parseInt(maxNumOfReads) / 5; + for (int i= 0; i < numOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); + } + } } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { requestsSeviceIds.add(serviceInfoMap.get("10X FB Library")); if (Integer.parseInt(maxNumOfReads) >= 50) { - serviceId = serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells"); + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); + if (Integer.parseInt(maxNumOfReads) > 50) { + int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; + for (int i = 0; i < remainingReadsToCharge; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + } + } } else { - serviceId = serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells"); + int countOfAdditions = Integer.parseInt(maxNumOfReads) / 5; + for (int i = 0; i < countOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); + } } - requestsSeviceIds.add(serviceId); } - if(serviceType.equals("10XGenomics_Multiome")) { // use seq req - + if(serviceType.equals("10XGenomics_Multiome")) { + requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Library")); + if (Integer.parseInt(maxNumOfReads) >= 200) { + requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 10K nuclei")); + } + else { + int numberOfAdditions = Integer.parseInt(maxNumOfReads) / 20; + for (int i = 0; i < numberOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 1K nuclei")); + } + } } - if(serviceType.equals("WholeExome-KAPALib")) { // preservation: FFPE or non FFPE + seqreq: coverage + if(serviceType.equals("WholeExome-KAPALib")) { if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } if (preservation.toLowerCase().contains("ffpe")) { - if ((Integer.parseInt(coverage) == 30 || Integer.parseInt(coverage) == 70)) { + if (coverage == 30 || coverage == 70) { requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 70X")); } - else if (Integer.parseInt(coverage) == 100) { + else if (coverage == 100) { requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 100X")); } - else if (Integer.parseInt(coverage) == 150) { + else if (coverage == 150) { requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 150X")); } - else if (Integer.parseInt(coverage) == 200) { + else if (coverage == 200) { requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 200X")); } - else if (Integer.parseInt(coverage) == 250) { + else if (coverage == 250) { requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 250X")); } } else if (preservation.toLowerCase().contains("frozen")) { - if ((Integer.parseInt(coverage) == 30 || Integer.parseInt(coverage) == 70)) { + if (coverage == 30 || coverage == 70) { requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 70X")); } - else if (Integer.parseInt(coverage) == 100) { + else if (coverage== 100) { requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 100X")); } - else if (Integer.parseInt(coverage) == 150) { + else if (coverage == 150) { requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 150X")); } - else if (Integer.parseInt(coverage) == 200) { + else if (coverage == 200) { requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 200X")); } - else if (Integer.parseInt(coverage) == 250) { + else if (coverage == 250) { requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 250X")); } } } - if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage + if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } if (Integer.parseInt(pcrCycles) > 0) { - if (Integer.parseInt(coverage) == 10) { + if (coverage== 10) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 10X")); } - else if (Integer.parseInt(coverage) == 30) { + else if (coverage == 30) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 30X")); } - else if (Integer.parseInt(coverage) == 40) { + else if (coverage == 40) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 40X")); } - else if (Integer.parseInt(coverage) == 50) { + else if (coverage == 50) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 50X")); } - else if (Integer.parseInt(coverage) == 60) { + else if (coverage == 60) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 60X")); } - else if (Integer.parseInt(coverage) == 70) { + else if (coverage == 70) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 70X")); } - else if (Integer.parseInt(coverage) == 80) { + else if (coverage == 80) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 80X")); } - else if (Integer.parseInt(coverage) == 100) { + else if (coverage == 100) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 100X")); } - else if (Integer.parseInt(coverage) == 120) { + else if (coverage == 120) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 120X")); } } else { // PCR Free - if (Integer.parseInt(coverage) == 10) { + if (coverage == 10) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 10X")); } - else if (Integer.parseInt(coverage) == 30) { + else if (coverage == 30) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 30X")); } - else if (Integer.parseInt(coverage) == 40) { + else if (coverage == 40) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 40X")); } - else if (Integer.parseInt(coverage) == 50) { + else if (coverage == 50) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 50X")); } - else if (Integer.parseInt(coverage) == 60) { + else if (coverage == 60) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 60X")); } - else if (Integer.parseInt(coverage) == 70) { + else if (coverage == 70) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 70X")); } - else if (Integer.parseInt(coverage) == 80) { + else if (coverage == 80) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 80X")); } - else if (Integer.parseInt(coverage) == 100) { + else if (coverage == 100) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 100X")); } - else if (Integer.parseInt(coverage) == 120) { + else if (coverage == 120) { requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 120X")); } } @@ -674,7 +748,7 @@ else if (Integer.parseInt(coverage) == 120) { // // } // } - if(serviceType.equals("WholeGenome")) { // seqr > 10 M + add sequencing charge + if(serviceType.equals("WholeGenome")) { if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); @@ -695,7 +769,7 @@ else if (Integer.parseInt(coverage) == 120) { } requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); } - if(serviceType.equals("ChIPSeq")) { // similar to wholegenome + if(serviceType.equals("ChIPSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; @@ -710,7 +784,7 @@ else if (Integer.parseInt(coverage) == 120) { if(serviceType.equals("CRISPRSeq")) { requestsSeviceIds.add(serviceInfoMap.get("CRISPR-Seq")); } - if(serviceType.equals("ATACSeq")) { // seq req <= 50M reads no addional seq charge + if(serviceType.equals("ATACSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); if (Integer.parseInt(maxNumOfReads) > 50) { requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); @@ -778,7 +852,12 @@ else if (numOfReplicates > 1) { chargesFieldValues.put("serviceId", eachServiceId); chargesFieldValues.put("note", requestName); chargesFieldValues.put("serviceQuantity", serviceQuantity); - chargesFieldValues.put("purchasedOn", purchaseDate); + + Date date = new Date(); + date.setTime(purchaseDate); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss"); + String formattedDate = formatter.format(date); + chargesFieldValues.put("purchasedOn", formattedDate); chargesFieldValues.put("serviceRequestId", requestId); // from iLab! chargesFieldValues.put("ownerEmail", ownerEmail); chargesFieldValues.put("pIEmail", piEmail); From 6b564ed1e89af236077c0dfff80bd492c71567a9 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Tue, 1 Nov 2022 15:58:59 -0400 Subject: [PATCH 22/27] iLab service request fixed. --- .../Sequencing/GenerateiLabChargesUpload.java | 279 +++++++++--------- 1 file changed, 142 insertions(+), 137 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 6a26512f..9e4e84a6 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -1,5 +1,6 @@ package com.velox.sloan.cmo.workflows.workflows.Sequencing; +import com.fasterxml.jackson.databind.JsonNode; import com.velox.api.datarecord.DataRecord; import com.velox.api.datarecord.IoError; import com.velox.api.datarecord.NotFound; @@ -9,7 +10,6 @@ import com.velox.sapioutils.server.plugin.DefaultGenericPlugin; import com.velox.sapioutils.shared.utilities.ExemplarConfig; import org.apache.commons.lang3.exception.ExceptionUtils; -import org.mockito.internal.matchers.Null; import java.io.*; import java.rmi.RemoteException; @@ -238,17 +238,25 @@ public boolean shouldRun() throws RemoteException { public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); + logInfo("After checking for the step attachments!!"); // On igo-lims04 I checked sample for normalization of pooled libraries datatype allowable parent Set uniqueRequestsOnTheFlowCell = new HashSet<>(); - for(DataRecord eachPool : flowCellSamples) { - DataRecord firstSampleOfEachRequest = eachPool.getParentsOfType("Sample", user).get(0); - String requestId = firstSampleOfEachRequest.getAncestorsOfType("Request", user).get(0) - .getStringVal("RequestId", user); - if (uniqueRequestsOnTheFlowCell.add(requestId)) { - dataValues = outputChargesInfo(firstSampleOfEachRequest); - generateiLabChargeSheet(); - } - dataValues.clear(); + if (flowCellSamples != null && flowCellSamples.size() > 0) { + for (DataRecord eachPool : flowCellSamples) { + List samplesOfEachPool = eachPool.getAncestorsOfType("Sample", user); + for (DataRecord sampleOfAPool : samplesOfEachPool) { + List requests = sampleOfAPool.getParentsOfType("Request", user); + for (DataRecord request : requests) { + DataRecord firstSampleOfEachRequest = request.getChildrenOfType("Sample", user)[0]; + String requestId = request.getStringVal("RequestId", user); + if (uniqueRequestsOnTheFlowCell.add(requestId)) { + dataValues = outputChargesInfo(firstSampleOfEachRequest); + generateiLabChargeSheet(); + } + dataValues.clear(); + } + } + } } this.activeTask.getTask().getTaskOptions().put("ILAB CHARGES SHEET GENERATED", ""); return new PluginResult(true); @@ -268,9 +276,9 @@ private List> outputChargesInfo(DataRecord firstSample) { String serviceType = requestRecord.getStringVal("RequestName", user); String requestName = requestRecord.getStringVal("RequestName", user); - String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); //LabHeadEmail - String piEmail = requestRecord.getStringVal("LabHeadEmail", user); //PIemail - String requestId = requestRecord.getStringVal("RequestId", user); + String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); + String piEmail = requestRecord.getStringVal("LabHeadEmail", user); + String requestId = requestRecord.getStringVal("iLabServiceRequestId", user); Long purchaseDate = requestRecord.getDateVal("RequestDate", user); String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); // Sample level information @@ -283,18 +291,22 @@ private List> outputChargesInfo(DataRecord firstSample) { String recipe = firstSample.getStringVal("Recipe", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype - DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); - String numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); - String maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); - //logInfo("seqRequeirements length is: " + seqRequeirements.length); + DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); + String numOfReads = ""; + String maxNumOfReads = ""; + String SequencingRunType = ""; int coverage = 0; - if (seqRequeirements[0].getStringVal("CoverageTarget", user) != null) { - logInfo("seqRequeirements[0] CoverageTarget is: " + seqRequeirements[0].getStringVal("CoverageTarget", user)); - coverage = seqRequeirements[0].getIntegerVal("CoverageTarget", user); + if (seqRequeirements.length > 0) { + numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + logInfo("seqRequeirements length is: " + seqRequeirements.length); + if (seqRequeirements[0].getDataField("CoverageTarget", user) != null) { + logInfo("seqRequeirements[0] CoverageTarget is: " + seqRequeirements[0].getDataField( + "CoverageTarget", user).toString()); + coverage = seqRequeirements[0].getIntegerVal("CoverageTarget", user); + SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); + } } - - String SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); - //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); int numOfReplicates = 0; @@ -465,96 +477,85 @@ else if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("PolyA Library Prep")); - - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); - } - else { - serviceId = serviceInfoMap.get("RNASeq - polyA - 100M+"); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); + } + else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); + } + else { + serviceId = serviceInfoMap.get("RNASeq - polyA - 100M+"); + } + requestsSeviceIds.add(serviceId); } - requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("RiboDepletion Library Prep")); - - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); - } - else { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); + } else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); + } else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); + } else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); + } else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); + } else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); + } else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); + } else { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + } + requestsSeviceIds.add(serviceId); } - requestsSeviceIds.add(serviceId); } if(serviceType.equals("RNASeq-SMARTerAmp")) { if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("SMARTer Amplification")); - - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 10-20M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 20-30M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 30-40M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 40-50M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 50-60M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 60-80M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 80-100M"); - } - else { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 10-20M"); + } else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 20-30M"); + } else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 30-40M"); + } else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 40-50M"); + } else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 50-60M"); + } else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 60-80M"); + } else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 80-100M"); + } else { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); + } + requestsSeviceIds.add(serviceId); } - requestsSeviceIds.add(serviceId); } // if(serviceType.equals("Rapid-RCC")) { // @@ -572,7 +573,7 @@ else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { } if(serviceType.equals("10XGenomics_GeneExpression")) { requestsSeviceIds.add((serviceInfoMap.get("10X GEX Library"))); - if (Integer.parseInt(maxNumOfReads) >= 200) { + if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) >= 200) { requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 10K cells"))); if (Integer.parseInt(maxNumOfReads) > 200) { int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 200) / 10; @@ -590,50 +591,52 @@ else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { } if(serviceType.equals("10XGenomics_VDJ")) { requestsSeviceIds.add(serviceInfoMap.get("10X VDJ Library")); - if (Integer.parseInt(maxNumOfReads) >= 50) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); - if (Integer.parseInt(maxNumOfReads) > 50) { - int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; - for (int i = 0; i < remainingReadsToCharge; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) >= 50) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); + if (Integer.parseInt(maxNumOfReads) > 50) { + int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; + for (int i = 0; i < remainingReadsToCharge; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + } + } + } else { + int numOfAdditions = Integer.parseInt(maxNumOfReads) / 5; + for (int i = 0; i < numOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); } } } - else { - int numOfAdditions = Integer.parseInt(maxNumOfReads) / 5; - for (int i= 0; i < numOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); - } - } - } if(serviceType.equals("10XGenomics_FeatureBarcoding")) { requestsSeviceIds.add(serviceInfoMap.get("10X FB Library")); - if (Integer.parseInt(maxNumOfReads) >= 50) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); - if (Integer.parseInt(maxNumOfReads) > 50) { - int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; - for (int i = 0; i < remainingReadsToCharge; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) >= 50) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); + if (Integer.parseInt(maxNumOfReads) > 50) { + int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; + for (int i = 0; i < remainingReadsToCharge; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); + } + } + } else { + int countOfAdditions = Integer.parseInt(maxNumOfReads) / 5; + for (int i = 0; i < countOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); } - } - } - else { - int countOfAdditions = Integer.parseInt(maxNumOfReads) / 5; - for (int i = 0; i < countOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); } } } if(serviceType.equals("10XGenomics_Multiome")) { requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Library")); - if (Integer.parseInt(maxNumOfReads) >= 200) { - requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 10K nuclei")); - } - else { - int numberOfAdditions = Integer.parseInt(maxNumOfReads) / 20; - for (int i = 0; i < numberOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 1K nuclei")); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) >= 200) { + requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 10K nuclei")); + } else { + int numberOfAdditions = Integer.parseInt(maxNumOfReads) / 20; + for (int i = 0; i < numberOfAdditions; i++) { + requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 1K nuclei")); + } } } } @@ -772,10 +775,12 @@ else if (coverage == 120) { if(serviceType.equals("ChIPSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; - int seqReadsService = remainigReadsRequestedToCharge / 10; - for (int i = 0; i < seqReadsService; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + if (!maxNumOfReads.equals("")) { + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; + int seqReadsService = remainigReadsRequestedToCharge / 10; + for (int i = 0; i < seqReadsService; i++) { + requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + } } } if(serviceType.equals("MethylSeq")) { @@ -786,7 +791,7 @@ else if (coverage == 120) { } if(serviceType.equals("ATACSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); - if (Integer.parseInt(maxNumOfReads) > 50) { + if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) > 50) { requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; int seqReadsService = remainigReadsRequestedToCharge / 10; @@ -858,7 +863,7 @@ else if (numOfReplicates > 1) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss"); String formattedDate = formatter.format(date); chargesFieldValues.put("purchasedOn", formattedDate); - chargesFieldValues.put("serviceRequestId", requestId); // from iLab! + chargesFieldValues.put("serviceRequestId", requestId); chargesFieldValues.put("ownerEmail", ownerEmail); chargesFieldValues.put("pIEmail", piEmail); chargeInfoRecords.add(chargesFieldValues); From 7eee9cb02b178ef9ae9770ef6cc2d578252ae8bf Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 2 Nov 2022 13:38:23 -0400 Subject: [PATCH 23/27] QC charge fixed. --- .../Sequencing/GenerateiLabChargesUpload.java | 100 ++++++++++++------ 1 file changed, 68 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 9e4e84a6..25faa0ec 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -237,23 +237,33 @@ public boolean shouldRun() throws RemoteException { * */ public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools - List flowCellSamples = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); - logInfo("After checking for the step attachments!!"); + List flowCellPools = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); + logInfo("Step attachments found."); // On igo-lims04 I checked sample for normalization of pooled libraries datatype allowable parent Set uniqueRequestsOnTheFlowCell = new HashSet<>(); - if (flowCellSamples != null && flowCellSamples.size() > 0) { - for (DataRecord eachPool : flowCellSamples) { + if (flowCellPools != null && flowCellPools.size() > 0) { + for (DataRecord eachPool : flowCellPools) { List samplesOfEachPool = eachPool.getAncestorsOfType("Sample", user); for (DataRecord sampleOfAPool : samplesOfEachPool) { List requests = sampleOfAPool.getParentsOfType("Request", user); - for (DataRecord request : requests) { - DataRecord firstSampleOfEachRequest = request.getChildrenOfType("Sample", user)[0]; - String requestId = request.getStringVal("RequestId", user); - if (uniqueRequestsOnTheFlowCell.add(requestId)) { - dataValues = outputChargesInfo(firstSampleOfEachRequest); - generateiLabChargeSheet(); + if(requests != null && requests.size() > 0) { + for (DataRecord request : requests) { + // skipping the loop, assuming every sample is in only 1 request + DataRecord firstSampleOfEachRequest = request.getChildrenOfType("Sample", user)[0]; + String requestId = request.getStringVal("RequestId", user); + logInfo("request id is: " + requestId); + String iLabServiceRequestId = request.getStringVal("iLabServiceRequestId", user); + logInfo("iLabServiceRequestId is: " + iLabServiceRequestId); + // Below: checking for processing every request only once and if whether there is an iLab form filled out for the request + if (uniqueRequestsOnTheFlowCell.add(requestId) && iLabServiceRequestId != null && + !iLabServiceRequestId.trim().equals("")) { + dataValues = outputChargesInfo(firstSampleOfEachRequest); + if(dataValues.size() > 0) { + generateiLabChargeSheet(); + } + } + dataValues.clear(); } - dataValues.clear(); } } } @@ -272,13 +282,16 @@ private List> outputChargesInfo(DataRecord firstSample) { List> chargeInfoRecords = new LinkedList<>(); try { // Request level information - DataRecord requestRecord = firstSample.getAncestorsOfType("Request", user).get(0); + logInfo("First sample igo id is: " + firstSample.getDataField("SampleId", user)); + DataRecord requestRecord = firstSample.getParentsOfType("Request", user).get(0); + logInfo("request project id is: " + requestRecord.getDataField("RequestId", user)); String serviceType = requestRecord.getStringVal("RequestName", user); - + logInfo("service type is: " + serviceType); String requestName = requestRecord.getStringVal("RequestName", user); String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); String piEmail = requestRecord.getStringVal("LabHeadEmail", user); String requestId = requestRecord.getStringVal("iLabServiceRequestId", user); + logInfo("ilab service req id = " + requestId); Long purchaseDate = requestRecord.getDateVal("RequestDate", user); String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); // Sample level information @@ -287,11 +300,12 @@ private List> outputChargesInfo(DataRecord firstSample) { String tumorOrNormal = firstSample.getStringVal("TumorOrNormal", user); String assay = firstSample.getStringVal("Assay", user); String origin = firstSample.getStringVal("SampleOrigin", user); - String sampleType = firstSample.getStringVal("SampleType", user); + String sampleType = firstSample.getStringVal("ExemplarSampleType", user); String recipe = firstSample.getStringVal("Recipe", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype - DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); + DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); + logInfo("seqRequeirements size is: " + seqRequeirements.length); String numOfReads = ""; String maxNumOfReads = ""; String SequencingRunType = ""; @@ -299,6 +313,7 @@ private List> outputChargesInfo(DataRecord firstSample) { if (seqRequeirements.length > 0) { numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + logInfo("maxNumOfReads = " + maxNumOfReads); logInfo("seqRequeirements length is: " + seqRequeirements.length); if (seqRequeirements[0].getDataField("CoverageTarget", user) != null) { logInfo("seqRequeirements[0] CoverageTarget is: " + seqRequeirements[0].getDataField( @@ -344,9 +359,9 @@ private List> outputChargesInfo(DataRecord firstSample) { Map chargesFieldValues; List requestsSeviceIds = new LinkedList<>(); - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if(serviceType.equals("DNAExtraction")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if (sampleType.toLowerCase().contains("cfdna")) { requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); } else if (preservation.toLowerCase().contains("ffpe")) { @@ -357,10 +372,12 @@ private List> outputChargesInfo(DataRecord firstSample) { } } if(serviceType.equals("RNAExtraction")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); } if(serviceType.equals("DNA/RNASimultaneous")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if (preservation.toLowerCase().contains("ffpe")) { requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction - FFPE")); } @@ -371,6 +388,7 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("PATH-DNAExtraction")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if (HERequired) { requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); } @@ -394,6 +412,7 @@ private List> outputChargesInfo(DataRecord firstSample) { // } } if(serviceType.equals("PATH-RNAExtraction")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if (HERequired) { requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); } @@ -408,6 +427,8 @@ private List> outputChargesInfo(DataRecord firstSample) { } } if(serviceType.equals("PATH-DNA/RNASimultaneous")) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); if (HERequired) { requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); } @@ -561,6 +582,9 @@ else if (Integer.parseInt(maxNumOfReads) <= 100) { // // } if(serviceType.equals("Archer")) { + if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } if (recipe.toLowerCase().contains("Archer-HemePanel")) { requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Heme Panel")); } @@ -784,6 +808,9 @@ else if (coverage == 120) { } } if(serviceType.equals("MethylSeq")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("EPIC Methyl Capture")); } if(serviceType.equals("CRISPRSeq")) { @@ -802,6 +829,7 @@ else if (coverage == 120) { } } if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); requestsSeviceIds.add(serviceInfoMap.get("AmpliconSeq")); if (SequencingRunType.equals("PE100")) { requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); @@ -830,7 +858,7 @@ else if (numOfReplicates > 1) { } if(serviceType.equals("DLP")) { requestsSeviceIds.add(serviceInfoMap.get("DLP Library - 800 cells")); - requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 1 quadrant")); + requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 800 cells")); } // if(serviceType.equals("PED-PEG")) { // @@ -845,28 +873,36 @@ else if (numOfReplicates > 1) { } if(serviceType.equals("CMO-CH")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("CMO-CH")); requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - CMO-CH")); } if(serviceType.equals("TCRSeq-IGO")) { + if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); + } requestsSeviceIds.add(serviceInfoMap.get("TCRSeq-IGO")); } - for(String eachServiceId : requestsSeviceIds) { - chargesFieldValues = new HashMap<>(); - chargesFieldValues.put("serviceId", eachServiceId); - chargesFieldValues.put("note", requestName); - chargesFieldValues.put("serviceQuantity", serviceQuantity); - - Date date = new Date(); - date.setTime(purchaseDate); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss"); - String formattedDate = formatter.format(date); - chargesFieldValues.put("purchasedOn", formattedDate); - chargesFieldValues.put("serviceRequestId", requestId); - chargesFieldValues.put("ownerEmail", ownerEmail); - chargesFieldValues.put("pIEmail", piEmail); - chargeInfoRecords.add(chargesFieldValues); + if(requestsSeviceIds.size() > 0) { + for (String eachServiceId : requestsSeviceIds) { + chargesFieldValues = new HashMap<>(); + chargesFieldValues.put("serviceId", eachServiceId); + chargesFieldValues.put("note", requestName); + chargesFieldValues.put("serviceQuantity", serviceQuantity); + + Date date = new Date(); + date.setTime(purchaseDate); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss"); + String formattedDate = formatter.format(date); + chargesFieldValues.put("purchasedOn", formattedDate); + chargesFieldValues.put("serviceRequestId", requestId); + chargesFieldValues.put("ownerEmail", ownerEmail); + chargesFieldValues.put("pIEmail", piEmail); + chargeInfoRecords.add(chargesFieldValues); + } } } catch (IoError | RemoteException | NotFound e) { logError("An exception occurred while retrieving first sample's request info"); From d3857a455b8e94603737a9825dabbb0accd3ede0 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 2 Nov 2022 14:40:43 -0400 Subject: [PATCH 24/27] New added column (payment_number) added to the hear. --- .../workflows/Sequencing/GenerateiLabChargesUpload.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 25faa0ec..3b829bb8 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -18,7 +18,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private List headerValues = Arrays.asList("service_id", "note", "service_quantity", "purchased_on", - "service_request_id", "owner_email", "pi_email_or_group_id"); + "service_request_id", "owner_email", "pi_email_or_group_id", "payment_number"); public List> dataValues = new LinkedList<>(); private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update @@ -901,6 +901,7 @@ else if (numOfReplicates > 1) { chargesFieldValues.put("serviceRequestId", requestId); chargesFieldValues.put("ownerEmail", ownerEmail); chargesFieldValues.put("pIEmail", piEmail); + chargesFieldValues.put("paymentNumber", ""); chargeInfoRecords.add(chargesFieldValues); } } @@ -934,6 +935,7 @@ private void generateiLabChargeSheet() { request = row.get("serviceRequestId"); dataInfoArray[i++] = row.get("ownerEmail"); dataInfoArray[i++] = row.get("pIEmail"); + dataInfoArray[i++] = row.get("paymentNumber"); dataLines.add(dataInfoArray); dataInfoArray = new String[headerValues.size()]; i = 0; From 6902a7d1bbe8ebe27324f3f482a12356cb839e63 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Wed, 22 Feb 2023 07:33:27 -0500 Subject: [PATCH 25/27] Keeping service types we want for the first phase of automation --- .../Sequencing/GenerateiLabChargesUpload.java | 621 +++++++++--------- 1 file changed, 312 insertions(+), 309 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 3b829bb8..f532ed3b 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -304,7 +304,7 @@ private List> outputChargesInfo(DataRecord firstSample) { String recipe = firstSample.getStringVal("Recipe", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype - DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirementPooled", user); + DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); logInfo("seqRequeirements size is: " + seqRequeirements.length); String numOfReads = ""; String maxNumOfReads = ""; @@ -322,37 +322,37 @@ private List> outputChargesInfo(DataRecord firstSample) { SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); } } - //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS - DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); - int numOfReplicates = 0; - for (DataRecord ddpcrProtocol2 : ddpcrProtocol2s) { - numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); - } - DataRecord[] ddpcrProtocol1s = firstSample.getChildrenOfType("DdPcrProtocol1", user); - String Ch1Target = ""; - if (ddpcrProtocol1s.length > 0) { - Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); - } - - // Pathology info - // PathologyProtocol1 is a potential child of sample: to be marked in LIMS - DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); - Boolean scrappingCurls = false; - Boolean microdissection = false; - Boolean HERequired = false; - Boolean SectioningRequired = false; - if (pathRecords.length > 0) { - scrappingCurls = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); - microdissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); - HERequired = pathRecords[0].getBooleanVal("HERequired", user); - SectioningRequired = pathRecords[0].getBooleanVal("SectioningRequired", user); - } +// //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS +// DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); +// int numOfReplicates = 0; +// for (DataRecord ddpcrProtocol2 : ddpcrProtocol2s) { +// numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); +// } +// DataRecord[] ddpcrProtocol1s = firstSample.getChildrenOfType("DdPcrProtocol1", user); +// String Ch1Target = ""; +// if (ddpcrProtocol1s.length > 0) { +// Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); +// } - DataRecord[] wholeGenomeLib = firstSample.getChildrenOfType("WholeGenomeLibProtocol3", user); - String pcrCycles = ""; - if (wholeGenomeLib.length > 0) { - pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); - } +// // Pathology info +// // PathologyProtocol1 is a potential child of sample: to be marked in LIMS +// DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); +// Boolean scrappingCurls = false; +// Boolean microdissection = false; +// Boolean HERequired = false; +// Boolean SectioningRequired = false; +// if (pathRecords.length > 0) { +// scrappingCurls = pathRecords[0].getBooleanVal("ScrapingCurlsRequired", user); +// microdissection = pathRecords[0].getBooleanVal("MicrodissectionRequired", user); +// HERequired = pathRecords[0].getBooleanVal("HERequired", user); +// SectioningRequired = pathRecords[0].getBooleanVal("SectioningRequired", user); +// } +// +// DataRecord[] wholeGenomeLib = firstSample.getChildrenOfType("WholeGenomeLibProtocol3", user); +// String pcrCycles = ""; +// if (wholeGenomeLib.length > 0) { +// pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); +// } // Request name in Request table is a drop down menu with certain options String serviceId; @@ -360,138 +360,141 @@ private List> outputChargesInfo(DataRecord firstSample) { List requestsSeviceIds = new LinkedList<>(); - if(serviceType.equals("DNAExtraction")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (sampleType.toLowerCase().contains("cfdna")) { - requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); - } else if (preservation.toLowerCase().contains("ffpe")) { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); - } - else { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction")); - } - } - if(serviceType.equals("RNAExtraction")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); - } - - if(serviceType.equals("DNA/RNASimultaneous")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (preservation.toLowerCase().contains("ffpe")) { - requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction - FFPE")); - } - else { - requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - - } - if(serviceType.equals("PATH-DNAExtraction")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (HERequired) { - requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); - } - if (SectioningRequired) { - requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); - } - if (scrappingCurls) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); - } - if (microdissection) { - requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); - } - +// if(serviceType.equals("DNAExtraction")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // if (sampleType.toLowerCase().contains("cfdna")) { // requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); // } else if (preservation.toLowerCase().contains("ffpe")) { // requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); // } // else { -// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); +// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction")); // } - } - if(serviceType.equals("PATH-RNAExtraction")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (HERequired) { - requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); - } - if (SectioningRequired) { - requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); - } - if (scrappingCurls) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); - } - if (microdissection) { - requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); - } - } - if(serviceType.equals("PATH-DNA/RNASimultaneous")) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - if (HERequired) { - requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); - } - if (SectioningRequired) { - requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); - } - if (scrappingCurls) { - requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); - } - if (microdissection) { - requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Extraction - FFPE")); - } - } - if(serviceType.equals("IMPACT505")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - } - if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - if (tumorOrNormal.toLowerCase().contains("normal")) { - requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Normal")); - } - else { - serviceId = serviceInfoMap.get("IMPACT - Tumor"); - requestsSeviceIds.add(serviceId); - } - } - if(serviceType.equals("M-IMPACT")) { - requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Mouse")); - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - } - if(serviceType.equals("HemePACT_v4")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - } - else if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - if (tumorOrNormal.toLowerCase().contains("tumor")) { - requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Tumor")); - } - else { - requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Normal")); - } - } - if(serviceType.equals("MSK-ACCESS_v1")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - } - if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - if (tumorOrNormal.toLowerCase().contains("tumor")) { - requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Tumor")); - requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (T)")); - } - else { - requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Normal")); - requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (N)")); - } +// } +// if(serviceType.equals("RNAExtraction")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); +// } +// +// if(serviceType.equals("DNA/RNASimultaneous")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// if (preservation.toLowerCase().contains("ffpe")) { +// requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction - FFPE")); +// } +// else { +// requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Dual Extraction")); +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// +// } +// if(serviceType.equals("PATH-DNAExtraction")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// if (HERequired) { +// requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); +// } +// if (SectioningRequired) { +// requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); +// } +// if (scrappingCurls) { +// requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); +// } +// if (microdissection) { +// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); +// } +// +//// if (sampleType.toLowerCase().contains("cfdna")) { +//// requestsSeviceIds.add(serviceInfoMap.get("cfDNA Extraction - Plasma")); +//// } else if (preservation.toLowerCase().contains("ffpe")) { +//// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - FFPE")); +//// } +//// else { +//// requestsSeviceIds.add(serviceInfoMap.get("DNA Extraction - Viably Frozen")); +//// } +// } +// if(serviceType.equals("PATH-RNAExtraction")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// if (HERequired) { +// requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); +// } +// if (SectioningRequired) { +// requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); +// } +// if (scrappingCurls) { +// requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); +// } +// if (microdissection) { +// requestsSeviceIds.add(serviceInfoMap.get("RNA Extraction - FFPE")); +// } +// } +// if(serviceType.equals("PATH-DNA/RNASimultaneous")) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// if (HERequired) { +// requestsSeviceIds.add(serviceInfoMap.get("H&E Stain")); +// } +// if (SectioningRequired) { +// requestsSeviceIds.add(serviceInfoMap.get("FFPE Sectioning")); +// } +// if (scrappingCurls) { +// requestsSeviceIds.add(serviceInfoMap.get("Slide Scraping")); +// } +// if (microdissection) { +// requestsSeviceIds.add(serviceInfoMap.get("DNA/RNA Extraction - FFPE")); +// } +// } +// if(serviceType.equals("IMPACT505")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); +// } +// if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// if (tumorOrNormal.toLowerCase().contains("normal")) { +// requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Normal")); +// } +// else { +// serviceId = serviceInfoMap.get("IMPACT - Tumor"); +// requestsSeviceIds.add(serviceId); +// } +// } +// if(serviceType.equals("M-IMPACT")) { +// requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Mouse")); +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// } +// if(serviceType.equals("HemePACT_v4")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); +// } +// else if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// if (tumorOrNormal.toLowerCase().contains("tumor")) { +// requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Tumor")); +// } +// else { +// requestsSeviceIds.add(serviceInfoMap.get("HemePACT - Normal")); +// } +// } +// if(serviceType.equals("MSK-ACCESS_v1")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); +// } +// if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// if (tumorOrNormal.toLowerCase().contains("tumor")) { +// requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Tumor")); +// requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (T)")); +// } +// else { +// requestsSeviceIds.add(serviceInfoMap.get("ACCESS - Normal")); +// requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - ACCESS (N)")); +// } +// } + if(serviceType.equals("Investigator Prepared Libraries")) { + } if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { @@ -581,20 +584,20 @@ else if (Integer.parseInt(maxNumOfReads) <= 100) { // if(serviceType.equals("Rapid-RCC")) { // // } - if(serviceType.equals("Archer")) { - if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - if (recipe.toLowerCase().contains("Archer-HemePanel")) { - requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Heme Panel")); - } - else if (recipe.toLowerCase().contains("Archer-SolidTumorPanel")) { - requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Solid Tumor (MSK) Panel")); - } - else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { - requestsSeviceIds.add(serviceInfoMap.get("Archer Immunoverse")); - } - } +// if(serviceType.equals("Archer")) { +// if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// if (recipe.toLowerCase().contains("Archer-HemePanel")) { +// requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Heme Panel")); +// } +// else if (recipe.toLowerCase().contains("Archer-SolidTumorPanel")) { +// requestsSeviceIds.add(serviceInfoMap.get("Archer Fusion - Solid Tumor (MSK) Panel")); +// } +// else if (recipe.toLowerCase().contains("Archer-Immunoverse")) { +// requestsSeviceIds.add(serviceInfoMap.get("Archer Immunoverse")); +// } +// } if(serviceType.equals("10XGenomics_GeneExpression")) { requestsSeviceIds.add((serviceInfoMap.get("10X GEX Library"))); if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) >= 200) { @@ -704,69 +707,69 @@ else if (coverage == 250) { } } } - if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - if (Integer.parseInt(pcrCycles) > 0) { - if (coverage== 10) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 10X")); - } - else if (coverage == 30) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 30X")); - } - else if (coverage == 40) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 40X")); - } - else if (coverage == 50) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 50X")); - } - else if (coverage == 60) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 60X")); - } - else if (coverage == 70) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 70X")); - } - else if (coverage == 80) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 80X")); - } - else if (coverage == 100) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 100X")); - } - else if (coverage == 120) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 120X")); - } - } - else { // PCR Free - if (coverage == 10) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 10X")); - } - else if (coverage == 30) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 30X")); - } - else if (coverage == 40) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 40X")); - } - else if (coverage == 50) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 50X")); - } - else if (coverage == 60) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 60X")); - } - else if (coverage == 70) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 70X")); - } - else if (coverage == 80) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 80X")); - } - else if (coverage == 100) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 100X")); - } - else if (coverage == 120) { - requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 120X")); - } - } - } +// if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// if (Integer.parseInt(pcrCycles) > 0) { +// if (coverage== 10) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 10X")); +// } +// else if (coverage == 30) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 30X")); +// } +// else if (coverage == 40) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 40X")); +// } +// else if (coverage == 50) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 50X")); +// } +// else if (coverage == 60) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 60X")); +// } +// else if (coverage == 70) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 70X")); +// } +// else if (coverage == 80) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 80X")); +// } +// else if (coverage == 100) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 100X")); +// } +// else if (coverage == 120) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR+ - 120X")); +// } +// } +// else { // PCR Free +// if (coverage == 10) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 10X")); +// } +// else if (coverage == 30) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 30X")); +// } +// else if (coverage == 40) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 40X")); +// } +// else if (coverage == 50) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 50X")); +// } +// else if (coverage == 60) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 60X")); +// } +// else if (coverage == 70) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 70X")); +// } +// else if (coverage == 80) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 80X")); +// } +// else if (coverage == 100) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 100X")); +// } +// else if (coverage == 120) { +// requestsSeviceIds.add(serviceInfoMap.get("WGS - PCR-free - 120X")); +// } +// } +// } // if(serviceType.equals("MouseWholeGenome")) { // preservation: FFPE or non FFPE + seqreq: coverage // if (preservation.toLowerCase().contains("ffpe")) { // @@ -775,27 +778,27 @@ else if (coverage == 120) { // // } // } - if(serviceType.equals("WholeGenome")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); - - } - int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; - int seqReadsService = remainigReadsRequestedToCharge / 10; - - for (int i = 0; i < seqReadsService; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - } - } - if(serviceType.equals("sWGS")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || - firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - - } - requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); - } +// if(serviceType.equals("WholeGenome")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); +// +// } +// int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; +// int seqReadsService = remainigReadsRequestedToCharge / 10; +// +// for (int i = 0; i < seqReadsService; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); +// } +// } +// if(serviceType.equals("sWGS")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || +// firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// +// } +// requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); +// } if(serviceType.equals("ChIPSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); @@ -828,63 +831,63 @@ else if (coverage == 120) { } } } - if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - requestsSeviceIds.add(serviceInfoMap.get("AmpliconSeq")); - if (SequencingRunType.equals("PE100")) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - - } else if (SequencingRunType.equals("PE150")) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE150")); - } - } - if(serviceType.equals("ddPCR")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || - firstSample.getChildrenOfType("QcReportLibrary", user).length > 0 || - firstSample.getChildrenOfType("QcReportRna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - - } - //requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - //ddPCR Human % Assay - if(Ch1Target.toLowerCase().contains("Mouse_Human_CNV_PTGER2")) { - serviceId = serviceInfoMap.get("ddPCR Human % Assay"); - } - else if (numOfReplicates > 1) { - for (int i = 0; i < numOfReplicates; i++) { - requestsSeviceIds.add(serviceInfoMap.get("ddPCR (1 reaction)")); - } - } - } - if(serviceType.equals("DLP")) { - requestsSeviceIds.add(serviceInfoMap.get("DLP Library - 800 cells")); - requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 800 cells")); - } -// if(serviceType.equals("PED-PEG")) { +// if(serviceType.equals("AmpliconSeq")) { // seq req: requested read length, only if PE100, else do it manually +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// requestsSeviceIds.add(serviceInfoMap.get("AmpliconSeq")); +// if (SequencingRunType.equals("PE100")) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); // +// } else if (SequencingRunType.equals("PE150")) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE150")); +// } +// } +// if(serviceType.equals("ddPCR")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || +// firstSample.getChildrenOfType("QcReportLibrary", user).length > 0 || +// firstSample.getChildrenOfType("QcReportRna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// +// } +// //requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); +// //ddPCR Human % Assay +// if(Ch1Target.toLowerCase().contains("Mouse_Human_CNV_PTGER2")) { +// serviceId = serviceInfoMap.get("ddPCR Human % Assay"); +// } +// else if (numOfReplicates > 1) { +// for (int i = 0; i < numOfReplicates; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("ddPCR (1 reaction)")); +// } +// } +// } +// if(serviceType.equals("DLP")) { +// requestsSeviceIds.add(serviceInfoMap.get("DLP Library - 800 cells")); +// requestsSeviceIds.add(serviceInfoMap.get("DLP Sequencing - 800 cells")); +// } +//// if(serviceType.equals("PED-PEG")) { +//// +//// } +// if(serviceType.equals("FragmentAnalysis")) { +// requestsSeviceIds.add(serviceInfoMap.get("Custom Fragment Analysis")); +// +// } +// if(serviceType.equals("CellLineAuthentication")) { +// requestsSeviceIds.add(serviceInfoMap.get("Cell Line Authentication")); +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); +// +// } +// if(serviceType.equals("CMO-CH")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// requestsSeviceIds.add(serviceInfoMap.get("CMO-CH")); +// requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - CMO-CH")); +// } +// if(serviceType.equals("TCRSeq-IGO")) { +// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); +// } +// requestsSeviceIds.add(serviceInfoMap.get("TCRSeq-IGO")); // } - if(serviceType.equals("FragmentAnalysis")) { - requestsSeviceIds.add(serviceInfoMap.get("Custom Fragment Analysis")); - - } - if(serviceType.equals("CellLineAuthentication")) { - requestsSeviceIds.add(serviceInfoMap.get("Cell Line Authentication")); - requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); - - } - if(serviceType.equals("CMO-CH")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - requestsSeviceIds.add(serviceInfoMap.get("CMO-CH")); - requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - CMO-CH")); - } - if(serviceType.equals("TCRSeq-IGO")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { - requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); - } - requestsSeviceIds.add(serviceInfoMap.get("TCRSeq-IGO")); - } if(requestsSeviceIds.size() > 0) { for (String eachServiceId : requestsSeviceIds) { From 4e229e2cb71523c4ec466bbda64c91d4e357d3e7 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 23 Feb 2023 10:43:14 -0500 Subject: [PATCH 26/27] Checking sequencing requirements at sample level. --- .../Sequencing/GenerateiLabChargesUpload.java | 485 ++++++++++-------- 1 file changed, 264 insertions(+), 221 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index f532ed3b..4dfeef91 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -11,6 +11,7 @@ import com.velox.sapioutils.shared.utilities.ExemplarConfig; import org.apache.commons.lang3.exception.ExceptionUtils; +import javax.xml.crypto.Data; import java.io.*; import java.rmi.RemoteException; import java.text.SimpleDateFormat; @@ -20,6 +21,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private List headerValues = Arrays.asList("service_id", "note", "service_quantity", "purchased_on", "service_request_id", "owner_email", "pi_email_or_group_id", "payment_number"); public List> dataValues = new LinkedList<>(); + private Map requestsToNumOfNonFalilingSamples = new HashMap<>(); private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID @@ -238,6 +240,7 @@ public boolean shouldRun() throws RemoteException { public PluginResult run() throws Throwable { // Illumina Sequencing Workflow last step has FlowCellSamples attached to it, which are pools List flowCellPools = activeTask.getAttachedDataRecords("NormalizationPooledLibProtocol", user); + logInfo("Step attachments found."); // On igo-lims04 I checked sample for normalization of pooled libraries datatype allowable parent Set uniqueRequestsOnTheFlowCell = new HashSet<>(); @@ -246,10 +249,12 @@ public PluginResult run() throws Throwable { List samplesOfEachPool = eachPool.getAncestorsOfType("Sample", user); for (DataRecord sampleOfAPool : samplesOfEachPool) { List requests = sampleOfAPool.getParentsOfType("Request", user); + requestsToNumOfNonFalilingSamples.put(requests.get(0).getValue("requestId", user).toString(), + String.valueOf(samplesOfEachPool.size())); if(requests != null && requests.size() > 0) { for (DataRecord request : requests) { // skipping the loop, assuming every sample is in only 1 request - DataRecord firstSampleOfEachRequest = request.getChildrenOfType("Sample", user)[0]; + DataRecord [] samplesOfEachRequest = request.getChildrenOfType("Sample", user); String requestId = request.getStringVal("RequestId", user); logInfo("request id is: " + requestId); String iLabServiceRequestId = request.getStringVal("iLabServiceRequestId", user); @@ -257,7 +262,7 @@ public PluginResult run() throws Throwable { // Below: checking for processing every request only once and if whether there is an iLab form filled out for the request if (uniqueRequestsOnTheFlowCell.add(requestId) && iLabServiceRequestId != null && !iLabServiceRequestId.trim().equals("")) { - dataValues = outputChargesInfo(firstSampleOfEachRequest); + dataValues = outputChargesInfo(samplesOfEachRequest); if(dataValues.size() > 0) { generateiLabChargeSheet(); } @@ -265,6 +270,7 @@ public PluginResult run() throws Throwable { dataValues.clear(); } } + } } } @@ -274,24 +280,26 @@ public PluginResult run() throws Throwable { /** * Logic for charges corresponding to different service types - * @param firstSample + * @param samplesOfaRequest * @return all iLab template sheet information for the bulk charge upload * */ - private List> outputChargesInfo(DataRecord firstSample) { + private List> outputChargesInfo(DataRecord [] samplesOfaRequest) { List> chargeInfoRecords = new LinkedList<>(); try { // Request level information + DataRecord firstSample = samplesOfaRequest[0]; logInfo("First sample igo id is: " + firstSample.getDataField("SampleId", user)); DataRecord requestRecord = firstSample.getParentsOfType("Request", user).get(0); + String requestId = requestRecord.getStringVal("RequestId", user); logInfo("request project id is: " + requestRecord.getDataField("RequestId", user)); String serviceType = requestRecord.getStringVal("RequestName", user); logInfo("service type is: " + serviceType); String requestName = requestRecord.getStringVal("RequestName", user); String ownerEmail = requestRecord.getStringVal("Investigatoremail", user); String piEmail = requestRecord.getStringVal("LabHeadEmail", user); - String requestId = requestRecord.getStringVal("iLabServiceRequestId", user); - logInfo("ilab service req id = " + requestId); + String iLabServiceRequestId = requestRecord.getStringVal("iLabServiceRequestId", user); + logInfo("ilab service req id = " + iLabServiceRequestId); Long purchaseDate = requestRecord.getDateVal("RequestDate", user); String serviceQuantity = requestRecord.getDataField("SampleNumber", user).toString(); // Sample level information @@ -304,31 +312,28 @@ private List> outputChargesInfo(DataRecord firstSample) { String recipe = firstSample.getStringVal("Recipe", user); // Sequencing Requirements: on igo-lims04 I checked sample as allowable parent for sequencing requirement datatype - DataRecord [] seqRequeirements = firstSample.getChildrenOfType("SeqRequirement", user); - logInfo("seqRequeirements size is: " + seqRequeirements.length); + List allSeqRequeirements = new LinkedList<>(); String numOfReads = ""; String maxNumOfReads = ""; String SequencingRunType = ""; int coverage = 0; - if (seqRequeirements.length > 0) { - numOfReads = seqRequeirements[0].getDataField("RequestedReads", user).toString(); - maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); - logInfo("maxNumOfReads = " + maxNumOfReads); - logInfo("seqRequeirements length is: " + seqRequeirements.length); - if (seqRequeirements[0].getDataField("CoverageTarget", user) != null) { - logInfo("seqRequeirements[0] CoverageTarget is: " + seqRequeirements[0].getDataField( - "CoverageTarget", user).toString()); - coverage = seqRequeirements[0].getIntegerVal("CoverageTarget", user); - SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); + for (DataRecord sample : samplesOfaRequest) { + DataRecord [] seqRequeirements = sample.getChildrenOfType("SeqRequirement", user); + allSeqRequeirements.add(seqRequeirements); + logInfo("seqRequeirements size is: " + seqRequeirements.length); + if (seqRequeirements.length > 0) { + if (seqRequeirements[0].getDataField("CoverageTarget", user) != null) { + SequencingRunType = seqRequeirements[0].getDataField("SequencingRunType", user).toString(); + } } } // //DDPCR: DdPcrProtocol2 is a potential child of sample: to be marked in LIMS -// DataRecord[] ddpcrProtocol2s = firstSample.getChildrenOfType("DdPcrProtocol2", user); +// DataRecord[] ddpcrProtocol2s = samplesOfaRequest.getChildrenOfType("DdPcrProtocol2", user); // int numOfReplicates = 0; // for (DataRecord ddpcrProtocol2 : ddpcrProtocol2s) { // numOfReplicates += ddpcrProtocol2.getIntegerVal("NumberOfReplicates", user); // } -// DataRecord[] ddpcrProtocol1s = firstSample.getChildrenOfType("DdPcrProtocol1", user); +// DataRecord[] ddpcrProtocol1s = samplesOfaRequest.getChildrenOfType("DdPcrProtocol1", user); // String Ch1Target = ""; // if (ddpcrProtocol1s.length > 0) { // Ch1Target = ddpcrProtocol1s[0].getStringVal("Ch1Target", user); @@ -336,7 +341,7 @@ private List> outputChargesInfo(DataRecord firstSample) { // // Pathology info // // PathologyProtocol1 is a potential child of sample: to be marked in LIMS -// DataRecord[] pathRecords = firstSample.getChildrenOfType("PathologyProtocol1", user); +// DataRecord[] pathRecords = samplesOfaRequest.getChildrenOfType("PathologyProtocol1", user); // Boolean scrappingCurls = false; // Boolean microdissection = false; // Boolean HERequired = false; @@ -348,16 +353,17 @@ private List> outputChargesInfo(DataRecord firstSample) { // SectioningRequired = pathRecords[0].getBooleanVal("SectioningRequired", user); // } // -// DataRecord[] wholeGenomeLib = firstSample.getChildrenOfType("WholeGenomeLibProtocol3", user); +// DataRecord[] wholeGenomeLib = samplesOfaRequest.getChildrenOfType("WholeGenomeLibProtocol3", user); // String pcrCycles = ""; // if (wholeGenomeLib.length > 0) { // pcrCycles = wholeGenomeLib[0].getStringVal("NumberPCRCycles", user); // } // Request name in Request table is a drop down menu with certain options - String serviceId; + String serviceId = ""; Map chargesFieldValues; List requestsSeviceIds = new LinkedList<>(); + Map serviceIdsToQuantity = new HashMap<>(); // if(serviceType.equals("DNAExtraction")) { @@ -443,10 +449,10 @@ private List> outputChargesInfo(DataRecord firstSample) { // } // } // if(serviceType.equals("IMPACT505")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); // } -// if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportLibrary", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // if (tumorOrNormal.toLowerCase().contains("normal")) { @@ -459,15 +465,15 @@ private List> outputChargesInfo(DataRecord firstSample) { // } // if(serviceType.equals("M-IMPACT")) { // requestsSeviceIds.add(serviceInfoMap.get("IMPACT - Mouse")); -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // } // if(serviceType.equals("HemePACT_v4")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); // } -// else if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// else if (samplesOfaRequest.getChildrenOfType("QcReportLibrary", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // if (tumorOrNormal.toLowerCase().contains("tumor")) { @@ -478,10 +484,10 @@ private List> outputChargesInfo(DataRecord firstSample) { // } // } // if(serviceType.equals("MSK-ACCESS_v1")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quant-it")); // } -// if (firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportLibrary", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // if (tumorOrNormal.toLowerCase().contains("tumor")) { @@ -497,95 +503,103 @@ private List> outputChargesInfo(DataRecord firstSample) { } if(serviceType.equals("RNASeq-TruSeqPolyA")) { // seq req might be under source sample id - if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + if (samplesOfaRequest[0].getChildrenOfType("QcReportRna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("PolyA Library Prep")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); - } - else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); - } - else { - serviceId = serviceInfoMap.get("RNASeq - polyA - 100M+"); + for (DataRecord[] seqReq : allSeqRequeirements) { + numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); // each sample has one sequencing requirement record + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + logInfo("maxNumOfReads = " + maxNumOfReads); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 10-20M"); + } else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 20-30M"); + } else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 30-40M"); + } else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 40-50M"); + } else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 50-60M"); + } else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 60-80M"); + } else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - polyA - 80-100M"); + } else { + serviceId = serviceInfoMap.get("RNASeq - polyA - 100M+"); + } + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } - requestsSeviceIds.add(serviceId); } } if(serviceType.equals("RNASeq-TruSeqRiboDeplete")) { - if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + if (samplesOfaRequest[0].getChildrenOfType("QcReportRna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("RiboDepletion Library Prep")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); - } else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); - } else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); - } else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); - } else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); - } else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); - } else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); - } else { - serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + for (DataRecord[] seqReq : allSeqRequeirements) { + numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); // each sample has one sequencing requirement record + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + logInfo("maxNumOfReads = " + maxNumOfReads); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 10-20M"); + } else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 20-30M"); + } else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 30-40M"); + } else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 40-50M"); + } else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 50-60M"); + } else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 60-80M"); + } else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 80-100M"); + } else { + serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); + } + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } - requestsSeviceIds.add(serviceId); } } if(serviceType.equals("RNASeq-SMARTerAmp")) { - if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { + if (samplesOfaRequest[0].getChildrenOfType("QcReportRna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("SMARTer Amplification")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) <= 20) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 10-20M"); - } else if (Integer.parseInt(maxNumOfReads) <= 30) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 20-30M"); - } else if (Integer.parseInt(maxNumOfReads) <= 40) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 30-40M"); - } else if (Integer.parseInt(maxNumOfReads) <= 50) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 40-50M"); - } else if (Integer.parseInt(maxNumOfReads) <= 60) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 50-60M"); - } else if (Integer.parseInt(maxNumOfReads) <= 80) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 60-80M"); - } else if (Integer.parseInt(maxNumOfReads) <= 100) { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 80-100M"); - } else { - serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); + for (DataRecord[] seqReq : allSeqRequeirements) { + numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); // each sample has one sequencing requirement record + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + logInfo("maxNumOfReads = " + maxNumOfReads); + if (!maxNumOfReads.equals("")) { + if (Integer.parseInt(maxNumOfReads) <= 20) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 10-20M"); + } else if (Integer.parseInt(maxNumOfReads) <= 30) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 20-30M"); + } else if (Integer.parseInt(maxNumOfReads) <= 40) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 30-40M"); + } else if (Integer.parseInt(maxNumOfReads) <= 50) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 40-50M"); + } else if (Integer.parseInt(maxNumOfReads) <= 60) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 50-60M"); + } else if (Integer.parseInt(maxNumOfReads) <= 80) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 60-80M"); + } else if (Integer.parseInt(maxNumOfReads) <= 100) { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 80-100M"); + } else { + serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); + } + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } - requestsSeviceIds.add(serviceId); } } // if(serviceType.equals("Rapid-RCC")) { // // } // if(serviceType.equals("Archer")) { -// if (firstSample.getChildrenOfType("QcReportRna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportRna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // if (recipe.toLowerCase().contains("Archer-HemePanel")) { @@ -598,117 +612,117 @@ else if (Integer.parseInt(maxNumOfReads) <= 100) { // requestsSeviceIds.add(serviceInfoMap.get("Archer Immunoverse")); // } // } - if(serviceType.equals("10XGenomics_GeneExpression")) { - requestsSeviceIds.add((serviceInfoMap.get("10X GEX Library"))); - if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) >= 200) { - requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 10K cells"))); - if (Integer.parseInt(maxNumOfReads) > 200) { - int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 200) / 10; - for (int i = 0; i < remainingReadsToCharge; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); - } - } - } - else { - int countOfAdditions = Integer.parseInt(maxNumOfReads) / 20; - for (int i = 0; i < countOfAdditions; i++) { - requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 1K cells"))); - } - } - } - if(serviceType.equals("10XGenomics_VDJ")) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ Library")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) >= 50) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); - if (Integer.parseInt(maxNumOfReads) > 50) { - int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; - for (int i = 0; i < remainingReadsToCharge; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); - } - } - } else { - int numOfAdditions = Integer.parseInt(maxNumOfReads) / 5; - for (int i = 0; i < numOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); - } - } - } - } - if(serviceType.equals("10XGenomics_FeatureBarcoding")) { - requestsSeviceIds.add(serviceInfoMap.get("10X FB Library")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) >= 50) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); - if (Integer.parseInt(maxNumOfReads) > 50) { - int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; - for (int i = 0; i < remainingReadsToCharge; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); - } - } - } else { - int countOfAdditions = Integer.parseInt(maxNumOfReads) / 5; - for (int i = 0; i < countOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); - } - } - } - } - if(serviceType.equals("10XGenomics_Multiome")) { - requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Library")); - if (!maxNumOfReads.equals("")) { - if (Integer.parseInt(maxNumOfReads) >= 200) { - requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 10K nuclei")); - } else { - int numberOfAdditions = Integer.parseInt(maxNumOfReads) / 20; - for (int i = 0; i < numberOfAdditions; i++) { - requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 1K nuclei")); - } - } - } - } +// if(serviceType.equals("10XGenomics_GeneExpression")) { +// requestsSeviceIds.add((serviceInfoMap.get("10X GEX Library"))); +// if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) >= 200) { +// requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 10K cells"))); +// if (Integer.parseInt(maxNumOfReads) > 200) { +// int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 200) / 10; +// for (int i = 0; i < remainingReadsToCharge; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); +// } +// } +// } +// else { +// int countOfAdditions = Integer.parseInt(maxNumOfReads) / 20; +// for (int i = 0; i < countOfAdditions; i++) { +// requestsSeviceIds.add((serviceInfoMap.get("10X GEX Sequencing - 1K cells"))); +// } +// } +// } +// if(serviceType.equals("10XGenomics_VDJ")) { +// requestsSeviceIds.add(serviceInfoMap.get("10X VDJ Library")); +// if (!maxNumOfReads.equals("")) { +// if (Integer.parseInt(maxNumOfReads) >= 50) { +// requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); +// if (Integer.parseInt(maxNumOfReads) > 50) { +// int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; +// for (int i = 0; i < remainingReadsToCharge; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); +// } +// } +// } else { +// int numOfAdditions = Integer.parseInt(maxNumOfReads) / 5; +// for (int i = 0; i < numOfAdditions; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); +// } +// } +// } +// } +// if(serviceType.equals("10XGenomics_FeatureBarcoding")) { +// requestsSeviceIds.add(serviceInfoMap.get("10X FB Library")); +// if (!maxNumOfReads.equals("")) { +// if (Integer.parseInt(maxNumOfReads) >= 50) { +// requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 10K cells")); +// if (Integer.parseInt(maxNumOfReads) > 50) { +// int remainingReadsToCharge = (Integer.parseInt(maxNumOfReads) - 50) / 10; +// for (int i = 0; i < remainingReadsToCharge; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - 10X Standard")); +// } +// } +// } else { +// int countOfAdditions = Integer.parseInt(maxNumOfReads) / 5; +// for (int i = 0; i < countOfAdditions; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("10X VDJ/FB Sequencing - 1K cells")); +// } +// } +// } +// } +// if(serviceType.equals("10XGenomics_Multiome")) { +// requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Library")); +// if (!maxNumOfReads.equals("")) { +// if (Integer.parseInt(maxNumOfReads) >= 200) { +// requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 10K nuclei")); +// } else { +// int numberOfAdditions = Integer.parseInt(maxNumOfReads) / 20; +// for (int i = 0; i < numberOfAdditions; i++) { +// requestsSeviceIds.add(serviceInfoMap.get("10X Multiome Sequencing - 1K nuclei")); +// } +// } +// } +// } if(serviceType.equals("WholeExome-KAPALib")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || - firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { + if (samplesOfaRequest[0].getChildrenOfType("QcReportDna", user).length > 0 || + samplesOfaRequest[0].getChildrenOfType("QcReportLibrary", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } - if (preservation.toLowerCase().contains("ffpe")) { - if (coverage == 30 || coverage == 70) { - requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 70X")); + for (DataRecord[] seqReq : allSeqRequeirements) { + if (seqReq[0].getDataField("CoverageTarget", user) != null) { + logInfo("seqRequeirements[0] CoverageTarget is: " + seqReq[0].getDataField( + "CoverageTarget", user).toString()); + coverage = seqReq[0].getIntegerVal("CoverageTarget", user); + logInfo("coverage = " + coverage); } - else if (coverage == 100) { - requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 100X")); - } - else if (coverage == 150) { - requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 150X")); - } - else if (coverage == 200) { - requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 200X")); - } - else if (coverage == 250) { - requestsSeviceIds.add(serviceInfoMap.get("WES - FFPE - 250X")); - } - } - else if (preservation.toLowerCase().contains("frozen")) { - if (coverage == 30 || coverage == 70) { - requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 70X")); - } - else if (coverage== 100) { - requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 100X")); - } - else if (coverage == 150) { - requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 150X")); - } - else if (coverage == 200) { - requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 200X")); - } - else if (coverage == 250) { - requestsSeviceIds.add(serviceInfoMap.get("WES - Frozen - 250X")); + if (preservation.toLowerCase().contains("ffpe")) { + if (coverage == 30 || coverage == 70) { + serviceId = serviceInfoMap.get("WES - FFPE - 70X"); + } else if (coverage == 100) { + serviceId = serviceInfoMap.get("WES - FFPE - 100X"); + } else if (coverage == 150) { + serviceId = serviceInfoMap.get("WES - FFPE - 150X"); + } else if (coverage == 200) { + serviceId = serviceInfoMap.get("WES - FFPE - 200X"); + } else if (coverage == 250) { + serviceId = serviceInfoMap.get("WES - FFPE - 250X"); + } + } else if (preservation.toLowerCase().contains("frozen")) { + if (coverage == 30 || coverage == 70) { + serviceId = serviceInfoMap.get("WES - Frozen - 70X"); + } else if (coverage == 100) { + serviceId = serviceInfoMap.get("WES - Frozen - 100X"); + } else if (coverage == 150) { + serviceId = serviceInfoMap.get("WES - Frozen - 150X"); + } else if (coverage == 200) { + serviceId = serviceInfoMap.get("WES - Frozen - 200X"); + } else if (coverage == 250) { + serviceId = serviceInfoMap.get("WES - Frozen - 250X"); + } } + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } } // if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // if (Integer.parseInt(pcrCycles) > 0) { @@ -779,7 +793,7 @@ else if (coverage == 250) { // } // } // if(serviceType.equals("WholeGenome")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // requestsSeviceIds.add(serviceInfoMap.get("Shallow WGS")); // @@ -792,8 +806,8 @@ else if (coverage == 250) { // } // } // if(serviceType.equals("sWGS")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || -// firstSample.getChildrenOfType("QcReportLibrary", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0 || +// samplesOfaRequest.getChildrenOfType("QcReportLibrary", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // // } @@ -802,16 +816,22 @@ else if (coverage == 250) { if(serviceType.equals("ChIPSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ChIP-Seq/CUT&RUN")); requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - if (!maxNumOfReads.equals("")) { - int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; - int seqReadsService = remainigReadsRequestedToCharge / 10; - for (int i = 0; i < seqReadsService; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + for (DataRecord [] seqReq : allSeqRequeirements) { + numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + if (!maxNumOfReads.equals("")) { + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 10; + int seqReadsService = remainigReadsRequestedToCharge / 10; + for (int i = 0; i < seqReadsService; i++) { + serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); + } } + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } + } if(serviceType.equals("MethylSeq")) { - if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { + if (samplesOfaRequest[0].getChildrenOfType("QcReportDna", user).length > 0) { requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); } requestsSeviceIds.add(serviceInfoMap.get("EPIC Methyl Capture")); @@ -821,13 +841,18 @@ else if (coverage == 250) { } if(serviceType.equals("ATACSeq")) { requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); - if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) > 50) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); - int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; - int seqReadsService = remainigReadsRequestedToCharge / 10; - - for (int i = 0; i < seqReadsService; i++) { - requestsSeviceIds.add(serviceInfoMap.get("Sequencing - 10M Reads - PE100")); + for (DataRecord [] seqReq : allSeqRequeirements) { + numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); + maxNumOfReads = numOfReads.substring(0, numOfReads.length() - 2); + if (!maxNumOfReads.equals("") && Integer.parseInt(maxNumOfReads) > 50) { + serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); + int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; + int seqReadsService = remainigReadsRequestedToCharge / 10; + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + for (int i = 0; i < seqReadsService; i++) { + serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } } } } @@ -842,9 +867,9 @@ else if (coverage == 250) { // } // } // if(serviceType.equals("ddPCR")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0 || -// firstSample.getChildrenOfType("QcReportLibrary", user).length > 0 || -// firstSample.getChildrenOfType("QcReportRna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0 || +// samplesOfaRequest.getChildrenOfType("QcReportLibrary", user).length > 0 || +// samplesOfaRequest.getChildrenOfType("QcReportRna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // // } @@ -876,25 +901,43 @@ else if (coverage == 250) { // // } // if(serviceType.equals("CMO-CH")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // requestsSeviceIds.add(serviceInfoMap.get("CMO-CH")); // requestsSeviceIds.add(serviceInfoMap.get("Data Analysis - CMO-CH")); // } // if(serviceType.equals("TCRSeq-IGO")) { -// if (firstSample.getChildrenOfType("QcReportDna", user).length > 0) { +// if (samplesOfaRequest.getChildrenOfType("QcReportDna", user).length > 0) { // requestsSeviceIds.add(serviceInfoMap.get("QC - Quantity + Quality")); // } // requestsSeviceIds.add(serviceInfoMap.get("TCRSeq-IGO")); // } + chargesFieldValues = new HashMap<>(); if(requestsSeviceIds.size() > 0) { for (String eachServiceId : requestsSeviceIds) { - chargesFieldValues = new HashMap<>(); chargesFieldValues.put("serviceId", eachServiceId); chargesFieldValues.put("note", requestName); - chargesFieldValues.put("serviceQuantity", serviceQuantity); + chargesFieldValues.put("serviceQuantity", requestsToNumOfNonFalilingSamples.get(iLabServiceRequestId)); + + Date date = new Date(); + date.setTime(purchaseDate); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss"); + String formattedDate = formatter.format(date); + chargesFieldValues.put("purchasedOn", formattedDate); + chargesFieldValues.put("serviceRequestId", requestId); + chargesFieldValues.put("ownerEmail", ownerEmail); + chargesFieldValues.put("pIEmail", piEmail); + chargesFieldValues.put("paymentNumber", ""); + chargeInfoRecords.add(chargesFieldValues); + } + } + if (serviceIdsToQuantity.size() > 0) { + for (Map.Entry entry : serviceIdsToQuantity.entrySet()) { + chargesFieldValues.put("serviceId", entry.getKey()); + chargesFieldValues.put("note", requestName); + chargesFieldValues.put("serviceQuantity", String.valueOf(serviceIdsToQuantity.get(entry.getKey()))); Date date = new Date(); date.setTime(purchaseDate); From 008e22f7deb416621071fc23c82b591d6e6bbc00 Mon Sep 17 00:00:00 2001 From: Mirhaj Date: Thu, 2 Mar 2023 16:24:26 -0500 Subject: [PATCH 27/27] fixing map insertions. --- .../Sequencing/GenerateiLabChargesUpload.java | 64 +++++++++++++++---- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java index 4dfeef91..c2ff6c10 100644 --- a/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java +++ b/src/main/java/com/velox/sloan/cmo/workflows/workflows/Sequencing/GenerateiLabChargesUpload.java @@ -9,6 +9,7 @@ import com.velox.sapio.commons.exemplar.plugin.PluginOrder; import com.velox.sapioutils.server.plugin.DefaultGenericPlugin; import com.velox.sapioutils.shared.utilities.ExemplarConfig; +import com.velox.sloan.cmo.generic.LoadGeneralInfomationButton; import org.apache.commons.lang3.exception.ExceptionUtils; import javax.xml.crypto.Data; @@ -21,7 +22,7 @@ public class GenerateiLabChargesUpload extends DefaultGenericPlugin { private List headerValues = Arrays.asList("service_id", "note", "service_quantity", "purchased_on", "service_request_id", "owner_email", "pi_email_or_group_id", "payment_number"); public List> dataValues = new LinkedList<>(); - private Map requestsToNumOfNonFalilingSamples = new HashMap<>(); + private Map requestsToNumOfNonFalilingSamples = new HashMap<>(); private static final Map serviceInfoMap = new HashMap<>(); // or reading from the file on iLabs in case of any update static { // Make the map of Service Name -> Service ID @@ -247,10 +248,19 @@ public PluginResult run() throws Throwable { if (flowCellPools != null && flowCellPools.size() > 0) { for (DataRecord eachPool : flowCellPools) { List samplesOfEachPool = eachPool.getAncestorsOfType("Sample", user); + logInfo("samplesOfEachPool.size() = " + samplesOfEachPool.size()); + Set requests = new HashSet<>(); for (DataRecord sampleOfAPool : samplesOfEachPool) { - List requests = sampleOfAPool.getParentsOfType("Request", user); - requestsToNumOfNonFalilingSamples.put(requests.get(0).getValue("requestId", user).toString(), - String.valueOf(samplesOfEachPool.size())); + logInfo("at pool sample: " + sampleOfAPool.getStringVal("SampleId", user)); + DataRecord currectReqId = sampleOfAPool.getAncestorsOfType("Request", user).get(0); + requests.add(currectReqId); + logInfo("requests.size() = " + requests.size()); + if (requestsToNumOfNonFalilingSamples.containsKey(currectReqId)) { + requestsToNumOfNonFalilingSamples.put(currectReqId.toString(), requestsToNumOfNonFalilingSamples.get(currectReqId) + 1); + } + else { + requestsToNumOfNonFalilingSamples.put(currectReqId.toString(), 1); + } if(requests != null && requests.size() > 0) { for (DataRecord request : requests) { // skipping the loop, assuming every sample is in only 1 request @@ -318,6 +328,7 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ String SequencingRunType = ""; int coverage = 0; for (DataRecord sample : samplesOfaRequest) { + logInfo("at sample " + sample.getStringVal("SampleId", user)); DataRecord [] seqRequeirements = sample.getChildrenOfType("SeqRequirement", user); allSeqRequeirements.add(seqRequeirements); logInfo("seqRequeirements size is: " + seqRequeirements.length); @@ -560,7 +571,12 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ } else { serviceId = serviceInfoMap.get("RNASeq - Ribodeplete - 100M+"); } - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } } } } @@ -591,7 +607,12 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ } else { serviceId = serviceInfoMap.get("RNASeq - SMARTer - 100M+"); } - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } } } } @@ -718,7 +739,12 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ serviceId = serviceInfoMap.get("WES - Frozen - 250X"); } } - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } } } // if(serviceType.equals("HumanWholeGenome") || serviceType.equals("MouseWholeGenome")) { @@ -824,9 +850,14 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ int seqReadsService = remainigReadsRequestedToCharge / 10; for (int i = 0; i < seqReadsService; i++) { serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } } } - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); } } @@ -840,6 +871,7 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ requestsSeviceIds.add(serviceInfoMap.get("CRISPR-Seq")); } if(serviceType.equals("ATACSeq")) { + logInfo("Request is an atac"); requestsSeviceIds.add(serviceInfoMap.get("ATAC-Seq")); for (DataRecord [] seqReq : allSeqRequeirements) { numOfReads = seqReq[0].getDataField("RequestedReads", user).toString(); @@ -848,10 +880,20 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); int remainigReadsRequestedToCharge = Integer.parseInt(maxNumOfReads) - 50; int seqReadsService = remainigReadsRequestedToCharge / 10; - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } for (int i = 0; i < seqReadsService; i++) { serviceId = serviceInfoMap.get("Sequencing - 10M Reads - PE100"); - serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + if (serviceIdsToQuantity.containsKey(serviceId)) { + serviceIdsToQuantity.put(serviceId, serviceIdsToQuantity.get(serviceId) + 1); + } + else { + serviceIdsToQuantity.put(serviceId, 1); + } } } } @@ -919,7 +961,7 @@ private List> outputChargesInfo(DataRecord [] samplesOfaRequ for (String eachServiceId : requestsSeviceIds) { chargesFieldValues.put("serviceId", eachServiceId); chargesFieldValues.put("note", requestName); - chargesFieldValues.put("serviceQuantity", requestsToNumOfNonFalilingSamples.get(iLabServiceRequestId)); + chargesFieldValues.put("serviceQuantity", String.valueOf(requestsToNumOfNonFalilingSamples.get(requestId))); Date date = new Date(); date.setTime(purchaseDate);