def _postAnalyze(self): """_postAnalyze doc...""" ratios = [] for name, curve in DictUtils.iter(self.data): segments = curve.segments for i in ListUtils.rangeOn(segments): segment = segments[i] segmentLine = segment.line # If this is an extrapolated segment, use the length from the neighboring segment # instead of the artificial length of this segment. if segment == segments[0]: segmentLine = segments[i + 1].line elif segment == segments[-1]: segmentLine = segments[i - 1].line for pairData in segment.pairs: projectionLine = pairData["line"] ratios.append(100.0 * projectionLine.length.raw / segmentLine.length.raw) h = Histogram( data=ratios, binCount=50, xLabel="Projection/Stride Ratio (%)", title="Relative Stride to Projection Length Ratios", ) h.shaveDataToXLimits() self._paths.append(h.save(path=self.getTempFilePath(extension="pdf"))) self.mergePdfs(self._paths, "Curve-Projection.pdf")
def _processCurveDeviations(self, key, label): """_processCurveDeviations doc...""" d = [data['deviations'][key] for k, data in DictUtils.iter(self.trackwaysData)] dCurved = [] dStraight = [] for item in d: if item < 1.0: dStraight.append(item) else: dCurved.append(min(10.0, item)) plot = Histogram( data=dCurved, title='%s Trackway Deviations' % label, xLabel='Trackway Index') self._paths.insert(0, plot.save(self.getTempFilePath(extension='pdf'))) d = [(index, d[index]) for index in ListUtils.rangeOn(d)] dCurved = [] dStraight = [] for item in d: if item[-1] < 1.0: dStraight.append(item) else: dCurved.append((item[0], min(10.0, item[1])) ) self.logger.write('%s Trackways: %s/%s (%s%%)' % ( label, len(dCurved), len(dCurved) + len(dStraight), 100.0*len(dCurved)/(len(dCurved) + len(dStraight)) )) plot = MultiScatterPlot( {'data':dStraight, 'color':'blue'}, {'data':dCurved, 'color':'red'}, title='%s Trackway Deviations' % label, xLabel='Trackway Index', yLabel='Fractional Deviation') self._paths.insert(1, plot.save(self.getTempFilePath(extension='pdf')))
def _drawCurveSeries(cls, drawing, series): """_drawCurveSeries doc...""" line = None for i in ListUtils.rangeOn(series.tracks): track = series.tracks[i] try: nextTrack = series.tracks[i + 1] except Exception: cls._drawLine( drawing=drawing, line=line, color='#009900', opacity=0.1, startCap=False, connect=False) return line = LineSegment2D(track.positionValue, nextTrack.positionValue) cls._drawLine( drawing=drawing, line=line, color='#009900', opacity=0.1, endCap=False )