Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/public/data_matrix_comparison.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"query": {
"url": "/data_matrix_aggregations/?type=File&sample_summary.studies=Benchmarking&dataset!=No+value&dataset!=colo829blt_in_silico&dataset!=colo829_snv_indel_challenge_data&dataset!=mei_detection_challenge_data&dataset!=ipsc_snv_indel_challenge_data&status=open&status=open-early&status=open-network&status=protected&status=protected-early&status=protected-network&limit=all",
"columnAggFields": ["file_sets.libraries.assay.display_title", "sequencing.sequencer.platform"],
"rowAggFields": ["donors.display_title", "sample_summary.tissues", "dataset", "data_type"]
"rowAggFields": ["donors.display_title", "sample_summary.tissue_short_names", "dataset", "data_type"]
},
"resultItemPostProcessFuncKey": "cellLinePostProcess",
"resultTransformedPostProcessFuncKey": "dsaChainFile",
Expand Down Expand Up @@ -48,7 +48,7 @@
"query": {
"url": "/data_matrix_aggregations/?type=File&sample_summary.studies=Production&dataset!=No+value&status=open&status=open-early&status=open-network&status=protected&status=protected-early&status=protected-network&limit=all",
"columnAggFields": ["file_sets.libraries.assay.display_title", "sequencing.sequencer.platform"],
"rowAggFields": ["donors.display_title", "sample_summary.tissues"]
"rowAggFields": ["donors.display_title", "sample_summary.tissue_short_names"]
},
"headerFor": null,
"idLabel": "production"
Expand Down
58 changes: 57 additions & 1 deletion src/encoded/item_utils/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,36 @@
get_property_values_from_identifiers,
)

# temporary mapping for tissue short names
# to be used in tests until proper metadata implementation is done
# the format will be: [TPC code] - [Portal facet]
TPC_CODE_TO_FULL_NAME = {
"3A": "3A - Whole Blood",
"3B": "3B - Buccal Swab",
"3C": "3C - Esophagus",
"3E": "3E - Colon, Asc",
"3G": "3G - Colon, Desc",
"3I": "3I - Liver",
"3K": "3K - Adrenal Gland, L",
"3M": "3M - Adrenal Gland, R",
"3O": "3O - Aorta",
"3Q": "3Q - Lung",
"3S": "3S - Heart",
"3U": "3U - Testis, L",
"3W": "3W - Testis, R",
"3Y": "3Y - Ovary, L",
"3AA": "3AA - Ovary, R",
"3AC": "3AC - Fibroblast",
"3AD": "3AD - Skin, Calf",
"3AF": "3AF - Skin, Abdomen",
"3AH": "3AH - Muscle",
"3AK": "3AK - Brain, Frontal Lobe",
"3AL": "3AL - Brain, Temporal Lobe",
"3AM": "3AM - Brain, Cerebellum",
"3AN": "3AN - Brain, Hippocampus, L",
"3AO": "3AO - Brain, Hippocampus, R",
}


def get_file_format(properties: Dict[str, Any]) -> Union[str, Dict[str, Any]]:
"""Get file format from properties."""
Expand Down Expand Up @@ -485,4 +515,30 @@ def get_tissue_category(file: Dict[str, Any], request_handler: RequestHandler) -
partial(
tissue.get_category, request_handler=request_handler
)
)
)

def get_tissue_protocol_id(file: Dict[str, Any], request_handler: RequestHandler) -> List[str]:
"""
Get tissue protocol ID from external ID.
"""
return get_property_values_from_identifiers(
request_handler,
get_tissues(file, request_handler),
partial(
tissue.get_protocol_id
)
)

def get_tissue_short_name(file: Dict[str, Any], request_handler: RequestHandler) -> List[str]:
"""
Get tissue short name from protocol ID using temporary mapping.
"""
protocol_ids = get_tissue_protocol_id(file, request_handler)
short_names = []
for pid in protocol_ids:
short_name = TPC_CODE_TO_FULL_NAME.get(pid)
if short_name:
short_names.append(short_name)
else:
short_names.append(pid) # Fallback to protocol ID if not found
return short_names
2 changes: 1 addition & 1 deletion src/encoded/schemas/file.json
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@
"title": "Donor Hardy Scale",
"aggregation_type": "stats"
},
"sample_summary.tissues": {
"sample_summary.tissue_short_names": {
"title": "Tissue"
},
"file_sets.libraries.assay.display_title": {
Expand Down
1 change: 1 addition & 0 deletions src/encoded/static/components/util/Schemas.js
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ export const Field = {
'file_format.display_title': 'File Format',
'data_category': 'Data Category',
'software.display_title': 'Software',
'sample_summary.tissue_subtypes': 'Subtype',
'@id': 'Link',
display_title: 'Title',
},
Expand Down
73 changes: 52 additions & 21 deletions src/encoded/static/components/util/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,69 @@
const germLayerTissueMapping = {
Ectoderm: {
values: [
'Brain',
'Brain - Cerebellum',
'Brain - Frontal lobe',
'Brain - Hippocampus',
'Brain - Temporal lobe',
'Skin',
'Skin - Abdomen (non-exposed)',
'Skin - Calf (sun-exposed)',
'Non-exposed Skin',
'Sun-exposed Skin',
"Brain",
"Brain, FL 3AK",
"Brain, TL 3AL",
"Brain, CB 3AM",
"Brain, HL 3AN",
"Brain, HR 3AO",
"Skin",
"Non-exposed Skin",
"Sun-exposed Skin",
"Skin, SE 3AD",
"Skin, NE 3AF",
],
},
Mesoderm: {
values: ['Aorta', 'Fibroblast', 'Heart', 'Muscle', 'Adrenal Gland'],
values: [
"Aorta",
"Aorta 3O",
"Fibroblast",
"Fibroblast 3AC",
"Heart",
"Heart 3S",
"Muscle",
"Muscle 3AH",
"Adrenal Gland",
"Adrenal Gland, L 3K",
"Adrenal Gland, R 3M",
],
},
Endoderm: {
values: [
'Colon',
'Colon - Ascending',
'Colon - Descending',
'Ascending Colon',
'Descending Colon',
'Esophagus',
'Liver',
'Lung',
"Colon",
"Colon - Ascending",
"Colon - Descending",
"Ascending Colon",
"Descending Colon",
"Colon, Asc 3E",
"Colon, Desc 3G",
"Esophagus",
"Esophagus 3C",
"Liver",
"Liver 3I",
"Lung",
"Lung 3Q",
],
},
'Germ cells': {
values: ['Ovary', 'Testis'],
values: [
"Ovary",
"Ovary, L 3Y",
"Ovary, R 3AA",
"Testis",
"Testis, L 3U",
"Testis, R 3W",
],
},
'Clinically accessible': {
values: ['Blood', 'Buccal swab', 'Buccal Swab'],
values: [
"Blood",
"Blood 3A",
"Buccal swab",
"Buccal Swab",
"Buccal Swab 3B",
],
},
};

Expand Down
36 changes: 35 additions & 1 deletion src/encoded/static/components/viz/BarPlot/Chart.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,22 @@ import { barplot_color_cycler } from './../ColorCycler';
import { RotatedLabel } from './../components';
import { PopoverViewContainer } from './ViewContainer';

function shiftColor(color, delta = 0.1) {
const parsed = d3.color(color);
if (!parsed) return color;
const mixTarget = delta >= 0 ? 255 : 0;
const amount = Math.min(Math.abs(delta), 1);
parsed.r = Math.round(parsed.r + (mixTarget - parsed.r) * amount);
parsed.g = Math.round(parsed.g + (mixTarget - parsed.g) * amount);
parsed.b = Math.round(parsed.b + (mixTarget - parsed.b) * amount);
return parsed.formatHex();
}

function variantFromBaseColor(baseColor, index = 0) {
const deltas = [0, 0.12, -0.08, 0.18, -0.14];
return shiftColor(baseColor, deltas[index % deltas.length]);
}


/**
* Return an object containing bar dimensions for first field which has more than 1 possible term, index of field used, and all fields passed originally.
Expand Down Expand Up @@ -131,7 +147,25 @@ export function genChartBarDims(
_.forEach(barData.bars, function(bar){
if (!Array.isArray(bar.bars)) return;
_.forEach(bar.bars, function(b){
return _.extend(b, { 'color' : barplot_color_cycler.colorForNode(b) });
const baseColor = barplot_color_cycler.colorForNode(b);
_.extend(b, { 'color': baseColor, 'baseColor': baseColor });

if (Array.isArray(b.bars)) {
const sortedGrandChildren = b.bars.slice(0).sort(function(g1, g2){
const g1Count = typeof g1[aggregateType] === 'number' ? g1[aggregateType] : g1.count || 0;
const g2Count = typeof g2[aggregateType] === 'number' ? g2[aggregateType] : g2.count || 0;
return g1Count - g2Count;
});
const len = sortedGrandChildren.length;
_.forEach(sortedGrandChildren, function(grandChild, idx) {
// If only one secondary bucket, keep the exact primary color to stay in sync with the legend.
const ratio = len > 1 ? idx / (len - 1) : 0;
const delta = len > 1 ? (0.2 - (0.4 * ratio)) : 0;
const variantColor = len > 1 ? shiftColor(baseColor, delta) : baseColor;
_.extend(grandChild, { 'color': variantColor, 'baseColor': baseColor });
});
b.bars = sortedGrandChildren;
}
});
});

Expand Down
Loading
Loading