added Rhythm to flex plot
This commit is contained in:
@@ -478,6 +478,7 @@ def read_cols_df_sql(ids,columns):
|
||||
|
||||
connection = engine.raw_connection()
|
||||
df = pd.read_sql_query(query,engine)
|
||||
df = df.fillna(value=0)
|
||||
engine.dispose()
|
||||
return df
|
||||
|
||||
@@ -489,6 +490,7 @@ def read_df_sql(id):
|
||||
id=id)), engine)
|
||||
|
||||
engine.dispose()
|
||||
df = df.fillna(value=0)
|
||||
return df
|
||||
|
||||
# Get the necessary data from the strokedata table in the DB.
|
||||
@@ -562,7 +564,15 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
||||
|
||||
forceratio = averageforce/peakforce
|
||||
forceratio = forceratio.fillna(value=0)
|
||||
|
||||
|
||||
try:
|
||||
drivetime = rowdatadf.ix[:,' DriveTime (ms)']
|
||||
recoverytime = rowdatadf.ix[:,' StrokeRecoveryTime (ms)']
|
||||
rhythm = 100.*drivetime/(recoverytime+drivetime)
|
||||
rhythm = rhythm.fillna(value=0)
|
||||
except:
|
||||
rhythm = 0.0*forceratio
|
||||
|
||||
f = rowdatadf['TimeStamp (sec)'].diff().mean()
|
||||
windowsize = 2*(int(10./(f)))+1
|
||||
if windowsize <= 3:
|
||||
@@ -612,6 +622,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
||||
forceratio=forceratio,
|
||||
distance=distance,
|
||||
drivespeed=drivespeed,
|
||||
rhythm=rhythm,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ axlabels = {
|
||||
'finish': 'Finish (degrees)',
|
||||
'wash': 'Wash (degrees)',
|
||||
'peakforceangle': 'Peak Force Angle (degrees)',
|
||||
'rhythm': 'Stroke Rhythm (%)',
|
||||
'None': '',
|
||||
}
|
||||
|
||||
@@ -87,6 +88,7 @@ yaxminima = {
|
||||
'finish': 20,
|
||||
'wash': 0,
|
||||
'peakforceangle': -20,
|
||||
'rhythm':20,
|
||||
}
|
||||
|
||||
yaxmaxima = {
|
||||
@@ -105,6 +107,7 @@ yaxmaxima = {
|
||||
'finish': 55,
|
||||
'wash': 30,
|
||||
'peakforceangle': 20,
|
||||
'rhythm':55,
|
||||
}
|
||||
|
||||
def tailwind(bearing,vwind,winddir):
|
||||
|
||||
@@ -339,6 +339,7 @@ class StrokeData(models.Model):
|
||||
finish = models.FloatField(default=0,null=True)
|
||||
wash = models.FloatField(default=0,null=True)
|
||||
peakforceangle = models.FloatField(default=0,null=True)
|
||||
rhythm = models.FloatField(default=1.0,null=True)
|
||||
|
||||
# A wrapper around the png files
|
||||
class GraphImage(models.Model):
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/drivelength/{{ yparam2 }}/{{ plottype }}">Drive Length</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/driveenergy/{{ yparam2 }}/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/drivespeed/{{ yparam2 }}/{{ plottype }}">Drive Speed</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/rhythm/{{ yparam2 }}/{{ plottype }}">Stroke Rhythm</a>
|
||||
{% else %}
|
||||
<a class="button rosy small" href="/rowers/promembership">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Average Force (Pro)</a>
|
||||
@@ -99,6 +100,7 @@
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Stroke Rhytm (Pro)</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
@@ -117,6 +119,7 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/drivelength/{{ plottype }}">Drive Length</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/driveenergy/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/drivespeed/{{ plottype }}">Drive Speed</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/rhythm/{{ plottype }}">Drive Rhythm</a>
|
||||
{% else %}
|
||||
<a class="button rosy small" href="/rowers/promembership">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Average Force (Pro)</a>
|
||||
@@ -124,6 +127,7 @@
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Rhythm (Pro)</a>
|
||||
{% endif %}
|
||||
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/None/{{ plottype }}">None</a>
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/drivelength/{{ yparam2 }}/{{ plottype }}">Drive Length</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/driveenergy/{{ yparam2 }}/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/drivespeed/{{ yparam2 }}/{{ plottype }}">Drive Speed</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/rhythm/{{ yparam2 }}/{{ plottype }}">Drive Rhythm</a>
|
||||
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/catch/{{ yparam2 }}/{{ plottype }}">Catch Angle</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/finish/{{ yparam2 }}/{{ plottype }}">Finish Angle</a>
|
||||
@@ -117,6 +118,7 @@
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Rhythm (Pro)</a>
|
||||
|
||||
<a class="button rosy small" href="/rowers/promembership">Catch Angle (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Finish Angle(Pro)</a>
|
||||
@@ -141,6 +143,7 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/drivelength/{{ plottype }}">Drive Length</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/driveenergy/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/drivespeed/{{ plottype }}">Drive Speed</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/rhythm/{{ plottype }}">Drive Rhythm</a>
|
||||
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/catch/{{ plottype }}">Catch Angle</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/finish/{{ plottype }}">Finish Angle</a>
|
||||
@@ -154,6 +157,7 @@
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Rhythm (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Catch Angle (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Finish Angle (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Slip (Pro)</a>
|
||||
|
||||
Reference in New Issue
Block a user