def customReport_VRMS_Nusselt(sciBTest, mResults):
    # Some custom output generation and analysis
    vrmsTCs, vrmsResults = sciBTest.getTCRes("VRMS vs Blankenbach")
    nusseltTCs, nusseltResults = sciBTest.getTCRes("Nusselt vs Blankenbach")
    vrmsActuals = [tc.actualVal for tc in vrmsTCs]
    nusseltActuals = [tc.actualVal for tc in nusseltTCs]
    # TODO: useful if below values available on modelResults automatically.
    for mRes in mResults: mRes.readFrequentOutput()
    nSteps = [mRes.freqOutput.finalStep() for mRes in mResults]
    # Plotting / CSV writing
    thermalConvPostProc.plotResultsVsBlankenbach(BBRa,
        BBVrmsMin, BBVrmsMax,
        BBNusseltMin, BBNusseltMax,
        {"UW Actual":vrmsActuals}, {"UW Actual":nusseltActuals},
        os.path.join(sciBTest.outputPathBase, "VrmsAndNusseltValues.png"))
    observables = {'Vrms':vrmsActuals, 'Vrms Passed':vrmsResults,
        'Nusselt':nusseltActuals, 'Nusselt Passed':nusseltResults,
        'nSteps':nSteps}
    msuite.writeInputsOutputsToCSV(sciBTest.mSuite, observables,
        "thermalDimBMResults.csv")
    modelplots.plotOverAllRuns(mResults, 'Nusselt',
        path=sciBTest.outputPathBase)   
    modelplots.plotOverAllRuns(mResults, 'Vrms',
        path=sciBTest.outputPathBase)   
    #TODO: modularise the below
    import plotCpuTimesAllRuns as plotCpus
    plotCpus.plotAllRuns(sciBTest.outputPathBase)
    sciBTest.mSuite.analysisImages = [
        'VrmsAndNusseltValues.png',
        'Nusselt-multiRunTimeSeries.png',
        'Vrms-multiRunTimeSeries.png',
        'cpuTimePerStep.png']
    sciBTest.mSuite.modelImagesToDisplay = [[] for runI in \
        range(len(sciBTest.mSuite.runs))]
    lastImgSteps = []
    for finalStep, mRun in zip(nSteps, sciBTest.mSuite.runs):
        simParams = mRun.getSimParams()
        lastImgSteps.append(simParams.nearestDumpStep(finalStep, finalStep))
    sciBTest.mSuite.modelImagesToDisplay[0] = [
        (0, ""),
        (700, ""),
        (lastImgSteps[0], "")]
    sciBTest.mSuite.modelImagesToDisplay[1] = [
        (0, ""),
        (800, ""),
        (lastImgSteps[1], "")]
    sciBTest.mSuite.modelImagesToDisplay[2] = [
        (0, ""),
        (400, ""),
        (lastImgSteps[2], "")]
    for rGen in getGenerators(["RST", "ReportLab"], sciBTest.outputPathBase):
        sReps.makeSciBenchReport(sciBTest, mResults, rGen,
            os.path.join(sciBTest.outputPathBase, "%s-report.%s" %\
                (sciBTest.testName, rGen.stdExt)), imgPerRow=3)    
def customReporting(sciBTest, mResults):    
    #Plotting/CSV writing
    for mRes in mResults: mRes.readFrequentOutput()
    vrmsTCs, vrmsResults = sciBTest.getTCRes("Scaled VRMS")
    recSteps = [mRes.freqOutput.finalStep() for mRes in mResults]
    vrmsActuals = [mRes.freqOutput.getValueAtStep("Nusselt", ns) \
        for mRes, ns in zip(mResults, recSteps)]
    nusseltActuals = [mRes.freqOutput.getValueAtStep("Nusselt", ns) \
        for mRes, ns in zip(mResults, recSteps)]
    for mRes in mResults:    
        mRes.freqOutput.plotOverTime('Vrms', depName='Time', show=False,
            path=mRes.outputPath)
        mRes.freqOutput.plotOverTime('Nusselt', depName='Time', show=False,
            path=mRes.outputPath)
    observables = {'Vrms':vrmsActuals, 'Vrms Pass':vrmsResults,
        'Nusselt':nusseltActuals, 'nSteps':recSteps,
        'ScalingFac':vrmsScalingFactors}
    msuite.writeInputsOutputsToCSV(sciBTest.mSuite, observables,
        "scalingResults.csv")
    # Actually for this benchmark, we want to show the VRMS and Nusselt
    #  images generated in _each run_
    sciBTest.mSuite.analysisImages = None
    #sciBTest.mSuite.analysisImages = [
    #    'VrmsAndNusseltValues.png',
    #    'Nusselt-multiRunTimeSeries.png',
    #    'Vrms-multiRunTimeSeries.png']
    sciBTest.mSuite.modelImagesToDisplay = [[] for runI in \
        range(len(sciBTest.mSuite.runs))]
    lastImgSteps = []
    for finalStep, mRun in zip(recSteps, sciBTest.mSuite.runs):
        simParams = mRun.getSimParams()
        lastImgSteps.append(simParams.nearestDumpStep(finalStep, finalStep))
    for runI in range(len(mResults)):
        sciBTest.mSuite.modelImagesToDisplay[runI] = [
            (0, "initial"),
            (lastImgSteps[runI], "final")]
    for rGen in getGenerators(["RST", "ReportLab"], sciBTest.outputPathBase):
        sReps.makeSciBenchReport(sciBTest, mResults, rGen,
            os.path.join(sciBTest.outputPathBase, "%s-report.%s" %\
                (sciBTest.testName, rGen.stdExt)), imgPerRow=2)
def customReporting(sciBTest, mResults):
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    stress = {}
    recDeviatoricStress = {}
    recDeviatoricStressTCs = {}
    recDeviatoricStressRes = {}
    stressTCs = {}
    stressRes = {}
    for fComp in ["XX", "XY", "YY"]:
        recDeviatoricStressTCs[fComp], recDeviatoricStressRes[fComp] = sciBTest.getTCRes(\
            "recoveredDeviatoricStress-%s" % fComp)
        stressTCs[fComp], stressRes[fComp] = sciBTest.getTCRes(\
            "Stress-%s" % fComp)
        recDeviatoricStress[fComp] = [tc.actualVal for tc in recDeviatoricStressTCs[fComp]]
        stress[fComp] = [tc.actualVal for tc in stressTCs[fComp]]

    inIter = msuite.getVariantIndicesIter(sciBTest.mSuite.modelVariants,
        iterStrategy)
    varDicts = msuite.getVariantNameDicts(sciBTest.mSuite.modelVariants,
        inIter)
    for resI, mRes in enumerate(mResults):
        print "Post-process result %d" % (resI),
        print "with variants applied of:"
        print varDicts[resI]
        
        print "Value of recDeviatoricStress(%s) is (%s)\n stress(%s) is (%s)." %\
            (", ".join(fCompMap),
                ", ".join(["%g" % recDeviatoricStress[c][resI] for c in fCompMap]),
                ", ".join(fCompMap),
                ", ".join(["%g" % stress[c][resI] for c in fCompMap]))
    # TO DO:
    #plotDeviatoricStressVsAnalytic(maxStressXX, maxStressYY, maxStressXY,
    #	minStressXX, minStressYY, minStressXY,
    #    {"DeviatoricStress_XX":recDeviatoricStress['XX']}, {"DeviatoricStress_YY":recDeviatoricStress['YY']},
    #    {"DeviatoricStress_XY":recDeviatoricStress['XY']},
    #	{"Stress_XX":stressXX}, {"Stress_YY":stressYY}, {"Stress_XY":stressXY})

    #plt.savefig(os.path.join(mSuite.outputPathBase,
    #    "RecoveredDeviatoricStressAndStressValues.png"), 
    #       dpi=None, facecolor='w', edgecolor='w',
     #      orientation='portrait', papertype=None, format=None,
      #    transparent=False)	  
            
    # Save to a CSV file.
    observables = {'recovered DeviatoricStress XX': recDeviatoricStress['XX'],
        'recovered DeviatoricStress XX Passed': recDeviatoricStressRes['XX'],
        'recovered DeviatoricStress YY': recDeviatoricStress['YY'],
        'recovered DeviatoricStress YY Passed': recDeviatoricStressRes['YY'],
        'recovered DeviatoricStress XY': recDeviatoricStress['XY'],
        'recovered DeviatoricStress XY Passed': recDeviatoricStressRes['XY'],
        'stress XX': stress['XX'],
        'stress XX Passed': stressRes['XX'],
        'stress YY': stress['YY'], 
        'stress YY Passed': stressRes['YY'],
        'stress XY': stress['XY'],
        'stress XY Passed': stressRes['XY']}
    msuite.writeInputsOutputsToCSV(sciBTest.mSuite, observables,
        "OrthotropicTestStressValues.csv")
    sciBTest.mSuite.analysisImages = None    
    sciBTest.mSuite.modelImagesToDisplay = None
    for rGen in getGenerators(["RST", "ReportLab"], sciBTest.outputPathBase):
        sReps.makeSciBenchReport(sciBTest, mResults, rGen,
            os.path.join(sciBTest.outputPathBase, "%s-report.%s" %\
                (sciBTest.testName, rGen.stdExt)))