예제 #1
0
    def make_post_processor(self, case_path):
        """
        Abstract factory method for that produces a postprocessor

        Args:
            case_path (str): path to case

        Returns:
           postprocessor object, expected to be a derived class of casePostProcessor
        """
        from HbO2.postprocess.factory.case import make_post_processor
        return make_post_processor(case_path, settings_dict=self.post_processing_settings)
예제 #2
0
    def plotProfiles(self):
        for caseName in self.post_processor.param_study.caseNames():
            print "Plotting profiles for %s" % caseName
            postprocessor = make_post_processor(caseName)
            plotter = COSHPlotter(postprocessor)
            plotter.plotODEMeanHbProfile()
            plotter.plotSimMeanHbProfile()
            self.fig_options.saveFig('plotCOSHHbProfiles_%s' % caseName)
            plt.clf()

            plotter.plotODEStdHbProfile()
            plotter.plotODELinearizedStdHbProfile()
            plotter.plotSimStdHbProfile()
            plotter.plotExponentialFitStdHb()
            self.fig_options.saveFig('plotCOSHStdProfiles_%s' % caseName)
            plt.gca().set_yscale('log')
            self.fig_options.saveFig('plotCOSHStdProfilesLogScale_%s' %
                                     caseName)
            plt.clf()
#!/usr/bin/env python
"""
Postprocess hemoglobin values from simulations in a graph
"""

import argparse

from HbO2.postprocess.factory.case import make_post_processor
from utilities.arguments import add_case_argument

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    add_case_argument(parser)
    parser.add_argument('--settingsFile', default='postprocess.json')
    args = parser.parse_args()
    case_name = args.caseName
    settings_file = args.settingsFile
    pp = make_post_processor(case_name, settings_file)
    pp.write_results()
    print 'Wrote results to {:s}'.format(pp.output_file_name)
    print 'Inlet edges: ', pp.rbcDataPostProcessor.rbc_path_analyzer.inlet_edges(
    )
    print 'Outlet edges:', pp.rbcDataPostProcessor.rbc_path_analyzer.outlet_edges(
    )
    print 'Post-converging bifurcation edges:', pp.rbcDataPostProcessor.rbc_path_analyzer.\
                                                post_converging_bifurcation_edges()
예제 #4
0
#!/usr/bin/env python
"""
Compute the hemoglobin saturation along a capillary network using the ODE model.
"""

import argparse
import cPickle as pickle

from HbO2.setup.graph import make_graph_from_post_processor, plot_graph
from HbO2.postprocess.factory.case import make_post_processor

from utilities.arguments import add_case_argument

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    add_case_argument(parser)
    parser.add_argument('--settingsFile', default='postprocess.json')
    parser.add_argument('--pickleName', default='graph.pkl')
    args = parser.parse_args()
    case_name = args.caseName
    param_file = args.settingsFile
    pickle_name = args.pickleName
    pp = make_post_processor(case_name, param_file)
    graph = make_graph_from_post_processor(pp)
    plot_graph(graph)
    pickle.dump(graph, open(pickle_name, 'wb'))
    print "Wrote graph pickle to {:s}".format(pickle_name)
figOptions = FigureOptions(parser)
args = parser.parse_args()
model_only = args.modelOnly
model_names = args.modelNames
exponential_fit = args.exponentialFit
plot_mean = not args.noMean
linearized_ode = 'linearized_ODE' in model_names
try:
    model_names.remove('linearized_ODE')
except ValueError:
    pass
figOptions.parseOptions(args)

parallel_capillaries = ParallelCapillaries.fromKeyValueFile('geometricData', 2)
simParams = IOHbO2ParametersStraightCapillaries('.')
postprocessor = make_post_processor('.')

plot_name_suffix = '' if simParams.cocurrentFlow() else '_countercurrent'
if model_only:
    for model_name in postprocessor.integrators:
        plotter = DiffusiveInteractionModelPlotter(
            postprocessor.integrators[model_name])
        plotter.plotAll()
        figOptions.saveFig('plot_{:s}_modelDiffusiveInteraction_Hb{:s}'.\
                           format(model_name, plot_name_suffix))
        plt.clf()
else:
    plotter = DiffusiveInteractionComparisonPlotter(postprocessor, model_names)
    if args.multipanel:
        panel_layout = (2, 1) if not args.panelLayout else args.panelLayout
        fig, axs = plt.subplots(*panel_layout, sharex=True)
def plotHbSimulatedAxisymmetric(case_name):
    postprocessor = make_post_processor(case_name)
    plotter = AxisymmetricCasePlotter(postprocessor)
    plotter.plot_field_average_profile('Hb_mean', n_average=1)
                    type=int,
                    default=2,
                    help='Minimal number of profiles to plot')
parser.add_argument('--multipanel',
                    action='store_true',
                    help='Whether to create multiple panels in one figure')
figOptions = FigureOptions(parser)
args = parser.parse_args()
case_name = args.caseName
settings_file = args.settingsFile
integrated_profiles = args.integratedProfiles
n_profile_min = args.nProfileMin
multipanel = args.multipanel
figOptions.parseOptions(args)

postprocessor = make_post_processor(case_name, param_file=settings_file)
plotter = HemoglobinOnSegmentsPlotter(postprocessor,
                                      n_profile_min=n_profile_min)

if args.allSegments:
    sids = plotter.edge_ids()
else:
    sids = args.segmentIndices

if multipanel:
    nrow = len(sids) / ncol
    fig, axs = plt.subplots(nrow, ncol)
    flattened_axs = [ax for sublist in axs for ax in sublist]
    for si, ax, annotation in zip(sids, flattened_axs, annotations):
        plt.sca(ax)
        plotter.plot_hb_profiles(si)
add_multi_panel_parser_options(parser)
fig_options = FigureOptions(parser)
args = parser.parse_args()
file_name = args.paramFile
method_name = args.methodName
fig_options.parseOptions(args)

case_names = [os.path.join(param_study_path, case_name_profile)
              for param_study_path in parameter_studies]

panel_layout = (2, 1) if not args.panelLayout else args.panelLayout
fig, axs = plt.subplots(*panel_layout)

plt.sca(axs[0])
case_name = os.path.join(parameter_studies[1], case_name_profile)
postprocessor = make_post_processor(case_name)
plotter = DiffusiveInteractionComparisonPlotter(postprocessor, model_names)
plotter.plotHbProfiles()
add_arrows(axs[0])

plt.sca(axs[1])
styles = [{'style': {'linestyle': '-', 'color': 'k'}},
          {'style': {'linestyle': '--', 'color': 'k', 'dashes': (4, 4)}}]
for param_study_path, style in zip(parameter_studies, styles):
    param_study_file = os.path.join(param_study_path, file_name)
    param_study = ParameterStudyFactory().makeParameterStudy(param_study_file)
    settings_dict = load_settings_file(param_study_path)
    postprocessor = ParameterStudyPostProcessor(param_study, settings_dict)
    plotter = DiffusiveInteractionParameterStudyPlotter(postprocessor, fig_options, model_names)
    getattr(plotter, method_name)(**style)
예제 #9
0
                        default=10,
                        help='Number of RBC paths used for averaging')
    parser.add_argument(
        '--nPlot',
        type=int,
        default=10,
        help='Number of RBCs used for plotting individual paths')
    add_multi_panel_parser_options(parser)
    figOptions = FigureOptions(parser)
    args = parser.parse_args()
    case_path = args.caseName
    nAverage = args.nAverage
    nPlot = args.nPlot
    figOptions.parseOptions(args)

    postprocessor = make_post_processor(case_path)
    plotter = COSHPlotter(postprocessor)

    if args.multipanel:
        panel_layout = (2, 1) if not args.panelLayout else args.panelLayout
        fig, axs = plt.subplots(*panel_layout, sharex=True)
        plt.sca(axs[0])
        plotHbProfiles(plotter)
        annotate_axis_corner(axs[0], 'A')
        if panel_layout[1] == 1:
            axs[0].set_xlabel('')
        plt.sca(axs[1])
        plotStdHbProfiles(plotter)
        annotate_axis_corner(axs[1], 'B')
        figOptions.saveFig('plotCOSHHbProfilesMultipanel')
    else: