Search in sources :

Example 1 with PoolQC

use of uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC in project miso-lims by miso-lims.

the class BulkPoolQCIT method testAutoUpdateVolume.

@Test
public void testAutoUpdateVolume() throws Exception {
    // Goal: ensure that volume and volume units are updated by the QC
    BulkQCPage page = getAddPage(Arrays.asList(2201L), 1);
    HandsOnTable table = page.getTable();
    Map<String, String> attrs = Maps.newLinkedHashMap();
    attrs.put(QcColumns.DATE, "2018-07-10");
    attrs.put(QcColumns.TYPE, "update volume qc");
    attrs.put(QcColumns.RESULT, "10.43");
    fillRow(table, 0, attrs);
    assertFalse(table.isWritable(QcColumns.POOL_ALIAS, 0));
    assertFalse(table.isWritable(QcColumns.UNITS, 0));
    assertColumnValues(table, 0, attrs, "pre-save");
    assertTrue(page.save(false));
    PoolQC saved = getLatestQc();
    assertQCAttributes(attrs, saved);
    assertEquals(String.format("Expected volume to be updated to %s, instead got %f", "10.43", saved.getPool().getVolume()), 0, saved.getPool().getVolume().compareTo(new BigDecimal("10.43")));
    assertEquals(String.format("Expected volume units to be updated to %s, instead got %s", VolumeUnit.MICROLITRES.getUnits(), saved.getPool().getVolumeUnits().getUnits()), VolumeUnit.MICROLITRES, saved.getPool().getVolumeUnits());
}
Also used : HandsOnTable(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.element.HandsOnTable) BulkQCPage(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.BulkQCPage) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) BigDecimal(java.math.BigDecimal) Test(org.junit.Test)

Example 2 with PoolQC

use of uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC in project miso-lims by miso-lims.

the class Dtos method to.

public static QC to(@Nonnull QcDto dto) {
    QC to;
    switch(dto.getQcTarget()) {
        case "Library":
            LibraryQC newLibraryQc = new LibraryQC();
            Library ownerLibrary = new LibraryImpl();
            ownerLibrary.setId(dto.getEntityId());
            newLibraryQc.setLibrary(ownerLibrary);
            to = newLibraryQc;
            break;
        case "Sample":
            SampleQC newSampleQc = new SampleQC();
            Sample ownerSample = new SampleImpl();
            ownerSample.setId(dto.getEntityId());
            newSampleQc.setSample(ownerSample);
            to = newSampleQc;
            break;
        case "Pool":
            PoolQC newPoolQc = new PoolQC();
            Pool ownerPool = new PoolImpl();
            ownerPool.setId(dto.getEntityId());
            newPoolQc.setPool(ownerPool);
            to = newPoolQc;
            break;
        case "Container":
            ContainerQC newContainerQc = new ContainerQC();
            SequencerPartitionContainer ownerContainer = new SequencerPartitionContainerImpl();
            ownerContainer.setId(dto.getEntityId());
            newContainerQc.setContainer(ownerContainer);
            to = newContainerQc;
            break;
        case "Requisition":
            RequisitionQC newRequisitionQc = new RequisitionQC();
            Requisition ownerRequisition = new Requisition();
            ownerRequisition.setId(dto.getEntityId());
            newRequisitionQc.setRequisition(ownerRequisition);
            to = newRequisitionQc;
            break;
        default:
            throw new IllegalArgumentException("No such QC target: " + dto.getQcTarget());
    }
    if (dto.getId() != null) {
        to.setId(dto.getId());
    }
    to.setDate(parseDate(dto.getDate()));
    setBigDecimal(to::setResults, dto.getResults());
    setObject(to::setType, QcType::new, dto.getQcTypeId());
    to.setDescription(dto.getDescription());
    setObject(to::setInstrument, InstrumentImpl::new, dto.getInstrumentId());
    setObject(to::setKit, KitDescriptor::new, dto.getKitDescriptorId());
    setString(to::setKitLot, dto.getKitLot());
    addQcControlRuns(dto.getControls(), to, QcTarget.valueOf(dto.getQcTarget()));
    return to;
}
Also used : SequencerPartitionContainer(uk.ac.bbsrc.tgac.miso.core.data.SequencerPartitionContainer) InstrumentImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.InstrumentImpl) ParentSample(uk.ac.bbsrc.tgac.miso.core.data.impl.view.ParentSample) DetailedSample(uk.ac.bbsrc.tgac.miso.core.data.DetailedSample) Sample(uk.ac.bbsrc.tgac.miso.core.data.Sample) WorksetSample(uk.ac.bbsrc.tgac.miso.core.data.impl.workset.WorksetSample) GrandparentSample(uk.ac.bbsrc.tgac.miso.core.data.impl.view.GrandparentSample) TransferSample(uk.ac.bbsrc.tgac.miso.core.data.impl.transfer.TransferSample) SampleQC(uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQC) RequisitionQC(uk.ac.bbsrc.tgac.miso.core.data.qc.RequisitionQC) LibraryQC(uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQC) PoolImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.PoolImpl) LibraryQC(uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQC) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) QC(uk.ac.bbsrc.tgac.miso.core.data.qc.QC) SampleQC(uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQC) ContainerQC(uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQC) RequisitionQC(uk.ac.bbsrc.tgac.miso.core.data.qc.RequisitionQC) KitDescriptor(uk.ac.bbsrc.tgac.miso.core.data.impl.kit.KitDescriptor) LibraryImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.LibraryImpl) DetailedLibraryImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.DetailedLibraryImpl) SequencerPartitionContainerImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.SequencerPartitionContainerImpl) TransferPool(uk.ac.bbsrc.tgac.miso.core.data.impl.transfer.TransferPool) Pool(uk.ac.bbsrc.tgac.miso.core.data.Pool) InstrumentStatusPositionRunPool(uk.ac.bbsrc.tgac.miso.core.data.impl.view.instrumentstatus.InstrumentStatusPositionRunPool) ContainerQC(uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQC) TransferLibrary(uk.ac.bbsrc.tgac.miso.core.data.impl.transfer.TransferLibrary) ParentLibrary(uk.ac.bbsrc.tgac.miso.core.data.impl.view.ParentLibrary) DetailedLibrary(uk.ac.bbsrc.tgac.miso.core.data.DetailedLibrary) WorksetLibrary(uk.ac.bbsrc.tgac.miso.core.data.impl.workset.WorksetLibrary) Library(uk.ac.bbsrc.tgac.miso.core.data.Library) IonTorrentRunDto(uk.ac.bbsrc.tgac.miso.dto.run.IonTorrentRunDto) QcHierarchyNodeDto(uk.ac.bbsrc.tgac.miso.dto.dashi.QcHierarchyNodeDto) RunPositionDto(uk.ac.bbsrc.tgac.miso.dto.run.RunPositionDto) PacBioRunDto(uk.ac.bbsrc.tgac.miso.dto.run.PacBioRunDto) Ls454RunDto(uk.ac.bbsrc.tgac.miso.dto.run.Ls454RunDto) IlluminaNotificationDto(ca.on.oicr.gsi.runscanner.dto.IlluminaNotificationDto) OxfordNanoporeRunDto(uk.ac.bbsrc.tgac.miso.dto.run.OxfordNanoporeRunDto) IlluminaRunDto(uk.ac.bbsrc.tgac.miso.dto.run.IlluminaRunDto) NotificationDto(ca.on.oicr.gsi.runscanner.dto.NotificationDto) OxfordNanoporeNotificationDto(ca.on.oicr.gsi.runscanner.dto.OxfordNanoporeNotificationDto) RunDto(uk.ac.bbsrc.tgac.miso.dto.run.RunDto) SolidRunDto(uk.ac.bbsrc.tgac.miso.dto.run.SolidRunDto) OrderAliquotDto(uk.ac.bbsrc.tgac.miso.dto.PoolOrderDto.OrderAliquotDto) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) Requisition(uk.ac.bbsrc.tgac.miso.core.data.impl.Requisition) SampleImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.SampleImpl) DetailedSampleImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.DetailedSampleImpl) QcType(uk.ac.bbsrc.tgac.miso.core.data.type.QcType)

Example 3 with PoolQC

use of uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC in project miso-lims by miso-lims.

the class DefaultQualityControlService method saveControlRuns.

private void saveControlRuns(long savedId, QC from, QcTargetStore handler) throws IOException {
    QC to = get(from.getEntity().getQcTarget(), from.getId());
    List<QcControlRun> toDelete = new ArrayList<>();
    for (QcControlRun toControl : to.getControls()) {
        if (!toControl.isSaved()) {
            // newly created QC
            continue;
        }
        QcControlRun fromControl = from.getControls().stream().filter(fc -> fc.getId() == toControl.getId()).findFirst().orElse(null);
        if (fromControl == null) {
            toDelete.add(toControl);
        } else {
            toControl.setControl(fromControl.getControl());
            toControl.setLot(fromControl.getLot());
            toControl.setQcPassed(fromControl.isQcPassed());
            handler.updateControlRun(toControl);
        }
    }
    for (QcControlRun control : toDelete) {
        handler.deleteControlRun(control);
    }
    for (QcControlRun fromControl : from.getControls()) {
        if (!fromControl.isSaved()) {
            switch(to.getType().getQcTarget()) {
                case Container:
                    ((ContainerQcControlRun) fromControl).setQc((ContainerQC) to);
                    break;
                case Library:
                    ((LibraryQcControlRun) fromControl).setQc((LibraryQC) to);
                    break;
                case Pool:
                    ((PoolQcControlRun) fromControl).setQc((PoolQC) to);
                    break;
                case Sample:
                    ((SampleQcControlRun) fromControl).setQc((SampleQC) to);
                    break;
                default:
                    throw new IllegalArgumentException("Unhandled QC target: " + to.getType().getQcTarget());
            }
            handler.createControlRun(fromControl);
        }
    }
}
Also used : ContainerQC(uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQC) LibraryQC(uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQC) QC(uk.ac.bbsrc.tgac.miso.core.data.qc.QC) SampleQC(uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQC) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) PoolQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQcControlRun) SampleQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQcControlRun) QcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.QcControlRun) PoolQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQcControlRun) LibraryQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQcControlRun) ContainerQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQcControlRun) SampleQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQcControlRun) ArrayList(java.util.ArrayList) LibraryQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQcControlRun) ContainerQcControlRun(uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQcControlRun)

Example 4 with PoolQC

use of uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC in project miso-lims by miso-lims.

the class BulkPoolQCIT method testAutoUpdateConcentration.

@Test
public void testAutoUpdateConcentration() throws Exception {
    // Goal: ensure that volume and volume units are updated by the QC
    BulkQCPage page = getAddPage(Arrays.asList(2201L), 1);
    HandsOnTable table = page.getTable();
    Map<String, String> attrs = Maps.newLinkedHashMap();
    attrs.put(QcColumns.DATE, "2018-07-10");
    attrs.put(QcColumns.TYPE, "update concentration qc");
    attrs.put(QcColumns.RESULT, "24.78");
    fillRow(table, 0, attrs);
    assertFalse(table.isWritable(QcColumns.POOL_ALIAS, 0));
    assertFalse(table.isWritable(QcColumns.UNITS, 0));
    assertColumnValues(table, 0, attrs, "pre-save");
    assertTrue(page.save(false));
    PoolQC saved = getLatestQc();
    assertQCAttributes(attrs, saved);
    assertEquals(String.format("Expected concentration to be updated to %s, instead got %f", "24.78", saved.getPool().getConcentration()), 0, saved.getPool().getConcentration().compareTo(new BigDecimal("24.78")));
    assertEquals(String.format("Expected concentration units to be updated to %s, instead got %s", ConcentrationUnit.NANOMOLAR.getUnits(), saved.getPool().getConcentrationUnits().getUnits()), ConcentrationUnit.NANOMOLAR, saved.getPool().getConcentrationUnits());
}
Also used : HandsOnTable(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.element.HandsOnTable) BulkQCPage(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.BulkQCPage) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) BigDecimal(java.math.BigDecimal) Test(org.junit.Test)

Example 5 with PoolQC

use of uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC in project miso-lims by miso-lims.

the class BulkPoolQCIT method testEditQc.

@Test
public void testEditQc() throws Exception {
    // Goal: ensure a pool QC can be edited
    BulkQCPage page = getEditPage(Arrays.asList(2201L));
    HandsOnTable table = page.getTable();
    Map<String, String> attrs = Maps.newLinkedHashMap();
    attrs.put(QcColumns.DATE, "2018-07-10");
    attrs.put(QcColumns.RESULT, "32.6");
    fillRow(table, 0, attrs);
    assertFalse(table.isWritable(QcColumns.POOL_ALIAS, 0));
    assertFalse(table.isWritable(QcColumns.UNITS, 0));
    assertFalse(table.isWritable(QcColumns.TYPE, 0));
    assertColumnValues(table, 0, attrs, "pre-save");
    assertTrue(page.save(false));
    PoolQC saved = getLatestQc();
    assertQCAttributes(attrs, saved);
}
Also used : HandsOnTable(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.element.HandsOnTable) BulkQCPage(uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.BulkQCPage) PoolQC(uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC) Test(org.junit.Test)

Aggregations

PoolQC (uk.ac.bbsrc.tgac.miso.core.data.qc.PoolQC)7 Test (org.junit.Test)4 BulkQCPage (uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.BulkQCPage)3 HandsOnTable (uk.ac.bbsrc.tgac.miso.webapp.integrationtest.page.element.HandsOnTable)3 BigDecimal (java.math.BigDecimal)2 ContainerQC (uk.ac.bbsrc.tgac.miso.core.data.qc.ContainerQC)2 LibraryQC (uk.ac.bbsrc.tgac.miso.core.data.qc.LibraryQC)2 QC (uk.ac.bbsrc.tgac.miso.core.data.qc.QC)2 SampleQC (uk.ac.bbsrc.tgac.miso.core.data.qc.SampleQC)2 IlluminaNotificationDto (ca.on.oicr.gsi.runscanner.dto.IlluminaNotificationDto)1 NotificationDto (ca.on.oicr.gsi.runscanner.dto.NotificationDto)1 OxfordNanoporeNotificationDto (ca.on.oicr.gsi.runscanner.dto.OxfordNanoporeNotificationDto)1 ArrayList (java.util.ArrayList)1 DetailedLibrary (uk.ac.bbsrc.tgac.miso.core.data.DetailedLibrary)1 DetailedSample (uk.ac.bbsrc.tgac.miso.core.data.DetailedSample)1 Library (uk.ac.bbsrc.tgac.miso.core.data.Library)1 Pool (uk.ac.bbsrc.tgac.miso.core.data.Pool)1 Sample (uk.ac.bbsrc.tgac.miso.core.data.Sample)1 SequencerPartitionContainer (uk.ac.bbsrc.tgac.miso.core.data.SequencerPartitionContainer)1 DetailedLibraryImpl (uk.ac.bbsrc.tgac.miso.core.data.impl.DetailedLibraryImpl)1