use of ca.corefacility.bioinformatics.irida.model.workflow.analysis.AnalysisFastQC in project irida by phac-nml.
the class RESTSampleSequenceFilesController method readQCForSequenceFile.
/**
* Get the fastqc metrics for a {@link SequenceFile}
*
* @param sampleId
* {@link Sample} id of the file
* @param objectType
* type of {@link SequencingObject}
* @param objectId
* id of the {@link SequencingObject}
* @param fileId
* id of the {@link SequenceFile}
* @return an {@link AnalysisFastQC} for the file
*/
@RequestMapping(value = "/api/samples/{sampleId}/{objectType}/{objectId}/files/{fileId}/qc", method = RequestMethod.GET)
public ModelMap readQCForSequenceFile(@PathVariable Long sampleId, @PathVariable String objectType, @PathVariable Long objectId, @PathVariable Long fileId) {
ModelMap modelMap = new ModelMap();
Sample sample = sampleService.read(sampleId);
SequencingObject readSequencingObjectForSample = sequencingObjectService.readSequencingObjectForSample(sample, objectId);
AnalysisFastQC fastQCAnalysisForSequenceFile = analysisService.getFastQCAnalysisForSequenceFile(readSequencingObjectForSample, fileId);
if (fastQCAnalysisForSequenceFile == null) {
throw new EntityNotFoundException("No QC data for file");
}
fastQCAnalysisForSequenceFile.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).readSequenceFileForSequencingObject(sampleId, objectType, objectId, fileId)).withRel(REL_QC_SEQFILE));
fastQCAnalysisForSequenceFile.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).readQCForSequenceFile(sampleId, objectType, objectId, fileId)).withSelfRel());
modelMap.addAttribute(RESTGenericController.RESOURCE_NAME, fastQCAnalysisForSequenceFile);
return modelMap;
}
use of ca.corefacility.bioinformatics.irida.model.workflow.analysis.AnalysisFastQC in project irida by phac-nml.
the class SequencingObjectServiceImplIT method testCreateCompressedSequenceFile.
@Test
@WithMockUser(username = "fbristow", roles = "SEQUENCER")
public void testCreateCompressedSequenceFile() throws IOException, InterruptedException {
final Long expectedRevisionNumber = 2L;
SequenceFile sf = new SequenceFile();
Path sequenceFile = Files.createTempFile("TEMPORARY-SEQUENCE-FILE", ".gz");
OutputStream gzOut = new GZIPOutputStream(Files.newOutputStream(sequenceFile));
gzOut.write(FASTQ_FILE_CONTENTS);
gzOut.close();
sf.setFile(sequenceFile);
SingleEndSequenceFile singleEndSequenceFile = new SingleEndSequenceFile(sf);
logger.trace("About to save the file.");
SequencingObject sequencingObject = objectService.create(singleEndSequenceFile);
logger.trace("Finished saving the file.");
assertNotNull("ID wasn't assigned.", sequencingObject.getId());
// Sleeping for a bit to let file processing run
Thread.sleep(10000);
// figure out what the version number of the sequence file is (should be
// 2; the file was gzipped)
// get the MOST RECENT version of the sequence file from the database
// (it will have been modified outside of the create method.)
SequencingObject readObject = null;
do {
readObject = asRole(Role.ROLE_ADMIN, "admin").objectService.read(sequencingObject.getId());
sf = readObject.getFiles().iterator().next();
if (sf.getFileRevisionNumber() < expectedRevisionNumber) {
logger.info("Still waiting on thread to finish, having a bit of a sleep.");
Thread.sleep(1000);
}
} while (sf.getFileRevisionNumber() < expectedRevisionNumber);
assertEquals("Wrong version number after processing.", expectedRevisionNumber, sf.getFileRevisionNumber());
assertFalse("File name is still gzipped.", sf.getFile().getFileName().toString().endsWith(".gz"));
AnalysisFastQC analysis = asRole(Role.ROLE_ADMIN, "admin").analysisService.getFastQCAnalysisForSequenceFile(readObject, sf.getId());
// verify the file checksum was taken properly
assertEquals("checksum should be equal", ZIPPED_CHECKSUM, sf.getUploadSha256());
Set<OverrepresentedSequence> overrepresentedSequences = analysis.getOverrepresentedSequences();
assertNotNull("No overrepresented sequences were found.", overrepresentedSequences);
assertEquals("Wrong number of overrepresented sequences were found.", 1, overrepresentedSequences.size());
OverrepresentedSequence overrepresentedSequence = overrepresentedSequences.iterator().next();
assertEquals("Sequence was not the correct sequence.", SEQUENCE, overrepresentedSequence.getSequence());
assertEquals("The count was not correct.", 2, overrepresentedSequence.getOverrepresentedSequenceCount());
assertEquals("The percent was not correct.", new BigDecimal("100.00"), overrepresentedSequence.getPercentage());
// confirm that the file structure is correct
String filename = sequenceFile.getFileName().toString();
filename = filename.substring(0, filename.lastIndexOf('.'));
Path idDirectory = baseDirectory.resolve(Paths.get(sf.getId().toString()));
assertTrue("Revision directory doesn't exist.", Files.exists(idDirectory.resolve(Paths.get(sf.getFileRevisionNumber().toString(), filename))));
// no other files or directories should be beneath the ID directory
int fileCount = 0;
Iterator<Path> dir = Files.newDirectoryStream(idDirectory).iterator();
while (dir.hasNext()) {
dir.next();
fileCount++;
}
assertEquals("Wrong number of directories beneath the id directory", 2, fileCount);
}
use of ca.corefacility.bioinformatics.irida.model.workflow.analysis.AnalysisFastQC in project irida by phac-nml.
the class SequencingRunServiceImplIT method testAddSequenceFileToMiseqRun.
private void testAddSequenceFileToMiseqRun() throws IOException, InterruptedException {
SequencingRun miseqRun = miseqRunService.read(1L);
// we can't actually know a file name in the XML file that we use to
// populate the database for these tests, so the files don't exist
// anywhere. Create a new temp file and update that in the database
// prior to adding a file to a miseq run so that we have something there
// that we can link to.
Path sequenceFile = Files.createTempFile(null, null);
Files.write(sequenceFile, FASTQ_FILE_CONTENTS);
SequenceFile sf = new SequenceFile(sequenceFile);
SequencingObject so = new SingleEndSequenceFile(sf);
so = objectService.create(so);
miseqRunService.addSequencingObjectToSequencingRun(miseqRun, so);
SequencingRun saved = miseqRunService.read(1L);
SequencingObject readObject = objectService.read(so.getId());
Set<SequencingObject> sequencingObjectsForSequencingRun = objectService.getSequencingObjectsForSequencingRun(saved);
assertTrue("Saved miseq run should have seqence file", sequencingObjectsForSequencingRun.contains(so));
if (SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream().anyMatch(auth -> auth.getAuthority().equals("ROLE_ADMIN"))) {
AnalysisFastQC analysis = null;
do {
try {
readObject = objectService.read(so.getId());
SequenceFile readFile = readObject.getFiles().iterator().next();
analysis = analysisService.getFastQCAnalysisForSequenceFile(readObject, readFile.getId());
} catch (final EntityNotFoundException e) {
logger.info("Fastqc still isn't finished, sleeping a bit.");
Thread.sleep(1000);
}
} while (analysis == null);
assertNotNull("FastQC analysis should have been created for uploaded file.", analysis);
}
}
use of ca.corefacility.bioinformatics.irida.model.workflow.analysis.AnalysisFastQC in project irida by phac-nml.
the class SampleServiceImplTest method testGetTotalBasesForSampleSuccessTwo.
/**
* Tests out successfully getting the total bases from a sample with two
* sequence files.
*
* @throws SequenceFileAnalysisException
* @throws AnalysisAlreadySetException
*/
@Test
public void testGetTotalBasesForSampleSuccessTwo() throws SequenceFileAnalysisException, AnalysisAlreadySetException {
Sample s1 = new Sample();
s1.setId(1L);
SequenceFile sf1 = new SequenceFile();
sf1.setId(2222L);
SequenceFile sf2 = new SequenceFile();
sf1.setId(3333L);
SampleSequencingObjectJoin join1 = new SampleSequencingObjectJoin(s1, new SingleEndSequenceFile(sf1));
SampleSequencingObjectJoin join2 = new SampleSequencingObjectJoin(s1, new SingleEndSequenceFile(sf2));
AnalysisFastQC analysisFastQC1 = AnalysisFastQC.sloppyBuilder().executionManagerAnalysisId("id").totalBases(1000L).build();
sf1.setFastQCAnalysis(analysisFastQC1);
AnalysisFastQC analysisFastQC2 = AnalysisFastQC.sloppyBuilder().executionManagerAnalysisId("id2").totalBases(1000L).build();
sf2.setFastQCAnalysis(analysisFastQC2);
when(ssoRepository.getSequencesForSample(s1)).thenReturn(Arrays.asList(join1, join2));
when(analysisRepository.findFastqcAnalysisForSequenceFile(sf1)).thenReturn(analysisFastQC1);
when(analysisRepository.findFastqcAnalysisForSequenceFile(sf2)).thenReturn(analysisFastQC2);
long actualBases = sampleService.getTotalBasesForSample(s1);
assertEquals(2000, actualBases);
}
use of ca.corefacility.bioinformatics.irida.model.workflow.analysis.AnalysisFastQC in project irida by phac-nml.
the class AnalysisServiceTest method testCreateAnalysisWithOneOutputFile.
@Test
public void testCreateAnalysisWithOneOutputFile() throws IOException {
Path outputFile = Files.createTempFile(null, null);
AnalysisOutputFile report = new AnalysisOutputFile(outputFile, "", "", null);
AnalysisFastQC analysis = AnalysisFastQC.sloppyBuilder().description("something").fastQCReport(report).build();
analysisService.create(analysis);
verify(analysisOutputFileRepository).save(report);
verify(analysisRepository).save(analysis);
}
Aggregations