use of ubic.gemma.model.genome.Taxon in project Gemma by PavlidisLab.
the class GeneSetServiceImpl method getUsersGeneGroups.
@Override
@Transactional(readOnly = true)
public Collection<GeneSet> getUsersGeneGroups(boolean privateOnly, Long taxonId, boolean sharedPublicOnly) {
Taxon tax = null;
if (taxonId != null) {
tax = taxonService.load(taxonId);
if (tax == null) {
throw new IllegalArgumentException("No such taxon with id=" + taxonId);
}
}
Collection<GeneSet> geneSets;
if (privateOnly) {
// gets all groups user can see (includes: owned by user, shared with user & public)
geneSets = this.loadAll(tax);
// this filtering is to filter out public sets
try {
if (!geneSets.isEmpty()) {
geneSets.retainAll(securityService.choosePrivate(geneSets));
}
} catch (AccessDeniedException e) {
// okay, they just aren't allowed to see those.
}
} else if (sharedPublicOnly) {
// gets all groups shared with the user and all groups owned by the user, except public ones
geneSets = this.loadMySharedGeneSets(tax);
} else {
geneSets = this.loadAll(tax);
}
return geneSets;
}
use of ubic.gemma.model.genome.Taxon in project Gemma by PavlidisLab.
the class GeneSetServiceImpl method getTaxon.
@Override
@Transactional(readOnly = true)
public Taxon getTaxon(GeneSet geneSet) {
if (geneSet == null)
return null;
Taxon tmpTax;
tmpTax = geneSetDao.getTaxon(geneSet.getId());
// check top-level parent
while (tmpTax != null && tmpTax.getParentTaxon() != null) {
tmpTax = tmpTax.getParentTaxon();
}
return tmpTax;
}
use of ubic.gemma.model.genome.Taxon in project Gemma by PavlidisLab.
the class DataUpdater method addAffyExonArrayData.
/**
* Use when we want to avoid downloading the CEL files etc. For example if GEO doesn't have them and we ran
* apt-probeset-summarize ourselves. Must be single-platform
*
* @param ee ee
* @param pathToAptOutputFile file
*/
public void addAffyExonArrayData(ExpressionExperiment ee, String pathToAptOutputFile) throws IOException {
Collection<ArrayDesign> ads = experimentService.getArrayDesignsUsed(ee);
if (ads.size() > 1) {
throw new IllegalArgumentException("Can't handle experiments with more than one platform when passing APT output file");
}
ArrayDesign ad = ads.iterator().next();
ad = arrayDesignService.thaw(ad);
ee = experimentService.thawLite(ee);
Taxon primaryTaxon = ad.getPrimaryTaxon();
ArrayDesign targetPlatform = this.prepareTargetPlatformForExonArrays(primaryTaxon);
AffyPowerToolsProbesetSummarize apt = new AffyPowerToolsProbesetSummarize();
Collection<RawExpressionDataVector> vectors = apt.processData(ee, pathToAptOutputFile, targetPlatform);
if (vectors.isEmpty()) {
throw new IllegalStateException("No vectors were returned for " + ee);
}
experimentService.replaceRawVectors(ee, vectors);
if (!targetPlatform.equals(ad)) {
AuditEventType eventType = ExpressionExperimentPlatformSwitchEvent.Factory.newInstance();
auditTrailService.addUpdateEvent(ee, eventType, "Switched in course of updating vectors using AffyPowerTools (from " + ad.getShortName() + " to " + targetPlatform.getShortName() + ")");
}
this.audit(ee, "Data vector input from APT output file " + pathToAptOutputFile + " on " + targetPlatform, true);
this.postprocess(ee);
}
use of ubic.gemma.model.genome.Taxon in project Gemma by PavlidisLab.
the class DataUpdater method addAffyExonArrayData.
/**
* Replaces any existing "preferred" data. Must be a single-platform study
*
* @param ee ee
* @param ad ad
*/
// Possible external use
@SuppressWarnings({ "unused", "WeakerAccess" })
public void addAffyExonArrayData(ExpressionExperiment ee, ArrayDesign ad) {
RawDataFetcher f = new RawDataFetcher();
Collection<LocalFile> files = f.fetch(ee.getAccession().getAccession());
if (files.isEmpty()) {
throw new RuntimeException("Data was apparently not available");
}
ad = arrayDesignService.thaw(ad);
ee = experimentService.thawLite(ee);
Taxon primaryTaxon = ad.getPrimaryTaxon();
ArrayDesign targetPlatform = this.prepareTargetPlatformForExonArrays(primaryTaxon);
assert !targetPlatform.getCompositeSequences().isEmpty();
AffyPowerToolsProbesetSummarize apt = new AffyPowerToolsProbesetSummarize();
Collection<RawExpressionDataVector> vectors = apt.processExonArrayData(ee, targetPlatform, files);
if (vectors.isEmpty()) {
throw new IllegalStateException("No vectors were returned for " + ee);
}
ee = experimentService.replaceRawVectors(ee, vectors);
if (!targetPlatform.equals(ad)) {
AuditEventType eventType = ExpressionExperimentPlatformSwitchEvent.Factory.newInstance();
auditTrailService.addUpdateEvent(ee, eventType, "Switched in course of updating vectors using AffyPowerTools (from " + ad.getShortName() + " to " + targetPlatform.getShortName() + ")");
}
this.audit(ee, "Data vector computation from CEL files using AffyPowerTools for " + targetPlatform, true);
this.postprocess(ee);
}
use of ubic.gemma.model.genome.Taxon in project Gemma by PavlidisLab.
the class ExpressionExperimentSearchServiceImpl method searchExperimentsAndExperimentGroups.
@Override
public List<SearchResultDisplayObject> searchExperimentsAndExperimentGroups(String query, Long taxonId) {
List<SearchResultDisplayObject> displayResults = new LinkedList<>();
// session-bound sets (not autogen sets until handling of large searches is fixed)
if (StringUtils.isBlank(query)) {
return this.searchExperimentsAndExperimentGroupBlankQuery(taxonId);
}
Map<Class<?>, List<SearchResult>> results = this.initialSearch(query, taxonId);
List<SearchResultDisplayObject> experimentSets = this.getExpressionExperimentSetResults(results);
List<SearchResultDisplayObject> experiments = this.getExpressionExperimentResults(results);
if (experimentSets.isEmpty() && experiments.isEmpty()) {
return displayResults;
}
/*
* ALL RESULTS BY TAXON GROUPS
*/
// if >1 result, add a group whose members are all experiments returned from search
Map<Long, Set<Long>> eeIdsByTaxonId = new HashMap<>();
// add every individual experiment to the set, grouped by taxon and also altogether.
for (SearchResultDisplayObject srdo : experiments) {
// group by the Parent Taxon, for things like salmonid - see bug 3286
Long taxId;
if (srdo.getParentTaxonId() != null) {
taxId = srdo.getParentTaxonId();
} else {
taxId = srdo.getTaxonId();
}
if (!eeIdsByTaxonId.containsKey(taxId)) {
eeIdsByTaxonId.put(taxId, new HashSet<Long>());
}
ExpressionExperimentValueObject eevo = (ExpressionExperimentValueObject) srdo.getResultValueObject();
eeIdsByTaxonId.get(taxId).add(eevo.getId());
}
// for each group
for (SearchResultDisplayObject eesSRO : experimentSets) {
ExpressionExperimentSetValueObject set = (ExpressionExperimentSetValueObject) eesSRO.getResultValueObject();
/*
* This is security filtered.
*/
Collection<Long> ids = EntityUtils.getIds(expressionExperimentSetService.getExperimentValueObjectsInSet(set.getId()));
// to account for security filtering.
set.setSize(ids.size());
if (!eeIdsByTaxonId.containsKey(set.getTaxonId())) {
eeIdsByTaxonId.put(set.getTaxonId(), new HashSet<Long>());
}
eeIdsByTaxonId.get(set.getTaxonId()).addAll(ids);
}
// make an entry for each taxon
Long taxonId2;
for (Map.Entry<Long, Set<Long>> entry : eeIdsByTaxonId.entrySet()) {
taxonId2 = entry.getKey();
Taxon taxon = taxonService.load(taxonId2);
if (taxon != null && entry.getValue().size() > 0) {
FreeTextExpressionExperimentResultsValueObject ftvo = new FreeTextExpressionExperimentResultsValueObject("All " + taxon.getCommonName() + " results for '" + query + "'", "All " + taxon.getCommonName() + " experiments found for your query", taxon.getId(), taxon.getCommonName(), entry.getValue(), query);
int numWithDifferentialExpressionAnalysis = differentialExpressionAnalysisService.getExperimentsWithAnalysis(entry.getValue()).size();
assert numWithDifferentialExpressionAnalysis <= entry.getValue().size();
int numWithCoexpressionAnalysis = coexpressionAnalysisService.getExperimentsWithAnalysis(entry.getValue()).size();
ftvo.setNumWithCoexpressionAnalysis(numWithCoexpressionAnalysis);
ftvo.setNumWithDifferentialExpressionAnalysis(numWithDifferentialExpressionAnalysis);
displayResults.add(new SearchResultDisplayObject(ftvo));
}
}
displayResults.addAll(experimentSets);
displayResults.addAll(experiments);
if (displayResults.isEmpty()) {
ExpressionExperimentSearchServiceImpl.log.info("No results for search: " + query);
} else {
ExpressionExperimentSearchServiceImpl.log.info("Results for search: " + query + " size=" + displayResults.size() + " entry0: " + ((SearchResultDisplayObject) (displayResults.toArray())[0]).getName() + " valueObject:" + ((SearchResultDisplayObject) (displayResults.toArray())[0]).getResultValueObject().toString());
}
return displayResults;
}
Aggregations