Skip to content

Commit

Permalink
Stop requiring a monthly dataset for Annual Cycle Graphs
Browse files Browse the repository at this point in the history
  • Loading branch information
corviday committed Feb 21, 2018
1 parent 9d95c5a commit e131c05
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 61 deletions.
17 changes: 11 additions & 6 deletions src/components/graphs/AnnualCycleGraph/AnnualCycleGraph.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export default class AnnualCycleGraph extends React.Component {
// TODO: model_id, variable_id, and experiment are used only to set the
// initial instance. Could instead make `initialInstance` a prop, which
// the client computes according to their own recipe. Not sure whether
// this is a gain or not, since the same computation (`firstMonthlyMetadata`)
// this is a gain or not, since the same computation (`initialInstance`)
// would be done in each client.
static propTypes = {
meta: PropTypes.array,
Expand All @@ -58,17 +58,22 @@ export default class AnnualCycleGraph extends React.Component {
super(props);

const { start_date, end_date, ensemble_member } =
this.firstMonthlyMetadata(this.props);
this.initialInstance(this.props);
this.state = {
instance: { start_date, end_date, ensemble_member },
graphSpec: blankGraphSpec,
};
}

firstMonthlyMetadata({ meta, model_id, variable_id, experiment }) {
return _.findWhere(
meta,
{ model_id, variable_id, experiment, timescale: 'monthly' }
initialInstance({ meta, model_id, variable_id, experiment }) {
//selects a starting instance, preferring the highest-resolution data available.
return (
_.findWhere(meta,
{ model_id, variable_id, experiment, timescale: 'monthly' }) ||
_.findWhere(meta,
{ model_id, variable_id, experiment, timescale: 'seasonal' }) ||
_.findWhere(meta,
{ model_id, variable_id, experiment, timescale: 'yearly' })
);
}

Expand Down
78 changes: 37 additions & 41 deletions src/components/graphs/DualAnnualCycleGraph.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import AnnualCycleGraph from './AnnualCycleGraph';

export default function DualAnnualCycleGraph(props) {
function getMetadata(instance) {
console.log("starting getMetadata");

// Find and return metadata matching model_id, experiment, variable_id
// and instance (start_date, end_date, ensemble_name) for monthly, seasonal
// and instance (start_date, end_date, ensemble_member) for monthly, seasonal
// and annual timescales.
// Do the the same for comparand_id and comparandMeta.

Expand All @@ -22,49 +24,43 @@ export default function DualAnnualCycleGraph(props) {
comparand_id, comparandMeta,
} = props;

var findMetadataForInstance = function (variable, timeres, metadataList) {
return _.findWhere(metadataList, {
model_id, experiment,
...instance,
timescale: timeres,
variable_id: variable
});
}

// Set up metadata sets for variable
const monthlyVariableMetadata = _.findWhere(meta, {
model_id, experiment, variable_id,
...instance,
timescale: 'monthly',
});
const seasonalVariablelMetadata = findMatchingMetadata(
monthlyVariableMetadata, { timescale: 'seasonal' }, meta
);
const yearlyVariableMetadata = findMatchingMetadata(
monthlyVariableMetadata, { timescale: 'yearly' }, meta
);

let metadataSets = [
const monthlyVariableMetadata = findMetadataForInstance(variable_id, 'monthly', meta);
const seasonalVariableMetadata = findMetadataForInstance(variable_id, 'seasonal', meta);
const yearlyVariableMetadata = findMetadataForInstance(variable_id, 'yearly', meta);

let metadataSets =[
monthlyVariableMetadata,
seasonalVariablelMetadata,
seasonalVariableMetadata,
yearlyVariableMetadata,
];

// Extend metadata sets with comparand, if present and different from variable
const monthlyComparandMetadata = findMatchingMetadata(
monthlyVariableMetadata, { variable_id: comparand_id }, comparandMeta
);

if (
monthlyVariableMetadata && monthlyComparandMetadata &&
monthlyComparandMetadata.unique_id !== monthlyVariableMetadata.unique_id
) {
const seasonalComparandlMetadata = findMatchingMetadata(
monthlyComparandMetadata, { timescale: 'seasonal' }, comparandMeta
);
const yearlyComparandMetadata = findMatchingMetadata(
monthlyComparandMetadata, { timescale: 'yearly' }, comparandMeta
);

metadataSets = metadataSets.concat([
monthlyComparandMetadata,
seasonalComparandlMetadata,
yearlyComparandMetadata,
]);
}

return metadataSets;
// Extend metadata sets with comparand, if different from variable
// Include only comparand time resolutions present for the variable.
if(variable_id !== comparand_id) {
if(monthlyVariableMetadata) {
metadataSets = metadataSets.concat(
findMetadataForInstance(comparand_id, 'monthly', comparandMeta));
}
if(seasonalVariableMetadata) {
metadataSets = metadataSets.concat(
findMetadataForInstance(comparand_id, 'seasonal', comparandMeta));
}
if(yearlyVariableMetadata) {
metadataSets = metadataSets.concat(
findMetadataForInstance(comparand_id, 'yearly', comparandMeta));
}
}
return _.compact(metadataSets);
}

function dataToGraphSpec(meta, data) {
Expand All @@ -78,9 +74,9 @@ export default function DualAnnualCycleGraph(props) {
// graph line colors.
const sortByVariable = dataSeries => {
const seriesName = dataSeries[0].toLowerCase();
if (seriesName.search(props.variable_id) !== -1) {
if (seriesName.search(props.variable_id.toLowerCase()) !== -1) {
return 0;
} else if (seriesName.search(props.comparand_id) !== -1) {
} else if (seriesName.search(props.comparand_id.toLowerCase()) !== -1) {
return 1;
} else {
// if only one variable is selected, it won't be in any series names.
Expand Down
29 changes: 15 additions & 14 deletions src/components/graphs/SingleAnnualCycleGraph.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,24 @@ export default function SingleAnnualCycleGraph(props) {
model_id, experiment,
variable_id, meta,
} = props;

var findMetadataForResolution = function (resolution) {
return _.findWhere(meta, {
model_id, experiment, variable_id,
...instance,
timescale: resolution,
});
}

const monthlyVariableMetadata = _.findWhere(meta, {
model_id, experiment, variable_id,
...instance,
timescale: 'monthly',
});
const seasonalVariablelMetadata = findMatchingMetadata(
monthlyVariableMetadata, { timescale: 'seasonal' }, meta
);
const yearlyVariableMetadata = findMatchingMetadata(
monthlyVariableMetadata, { timescale: 'yearly' }, meta
);
const metadataSets = [
const monthlyVariableMetadata = findMetadataForResolution('monthly');
const seasonalVariableMetadata = findMetadataForResolution('seasonal');
const yearlyVariableMetadata = findMetadataForResolution('yearly');

const metadataSets = _.compact([
monthlyVariableMetadata,
seasonalVariablelMetadata,
seasonalVariableMetadata,
yearlyVariableMetadata,
];
]);
return metadataSets;
}

Expand Down

0 comments on commit e131c05

Please sign in to comment.