diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 93d26206..f5e7a775 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1202,7 +1202,7 @@ def getsmallrowdata_db(columns,ids=[],doclean=True,workstrokesonly=True): return data # Fetch both the workout and the workout stroke data (from CSV file) -def getrowdata(id=0,convertnewtons=True): +def getrowdata(id=0): # check if valid ID exists (workout exists) row = Workout.objects.get(id=id) @@ -1263,7 +1263,7 @@ def read_cols_df_sql(ids,columns,convertnewtons=True): if not c in axx: columns.remove(c) - columns = list(columns)+['distance','spm'] + columns = list(columns)+['distance','spm','workoutid'] columns = [x for x in columns if x != 'None'] columns = list(set(columns)) cls = '' @@ -1297,14 +1297,14 @@ def read_cols_df_sql(ids,columns,convertnewtons=True): funits = ((w.id,w.forceunit) for w in Workout.objects.filter(id__in=ids)) for id,u in funits: if u=='lbs': - mask = data['workoutid']==id + mask = df['workoutid']==id df.loc[mask,'peakforce'] = data.loc[mask,'peakforce']*lbstoN if 'averageforce' in columns: funits = ((w.id,w.forceunit) for w in Workout.objects.filter(id__in=ids)) for id,u in funits: if u=='lbs': - mask = data['workoutid']==id - df.loc[mask,'averageforce'] = data.loc[mask,'averageforce']*lbstoN + mask = df['workoutid']==id + df.loc[mask,'averageforce'] = df.loc[mask,'averageforce']*lbstoN engine.dispose() return df @@ -1399,6 +1399,9 @@ def smalldataprep(therows,xparam,yparam1,yparam2): # data fusion def datafusion(id1,id2,columns,offset): + workout1 = Workout.objects.get(id=id1) + workout2 = Workout.objects.get(id=id2) + df1,w1 = getrowdata_db(id=id1) df1 = df1.drop([#'cumdist', 'hr_ut2', @@ -1412,7 +1415,7 @@ def datafusion(id1,id2,columns,offset): 'workoutid', 'id'], 1,errors='ignore') - + # Add coordinates to DataFrame latitude,longitude = get_latlon(id1) @@ -1421,6 +1424,18 @@ def datafusion(id1,id2,columns,offset): df2 = getsmallrowdata_db(['time']+columns,ids=[id2],doclean=False) + + forceunit = 'N' + # set Force to same units + if 'averageforce' in columns or 'peakforce' in columns: + forceunit = workout2.forceunit + if workout1.forceunit == 'lbs' and workout2.forceunit == 'N': + df1['averageforce'] *= lbstoN + df1['peakforce'] *= lbstoN + if workout1.forceunit == 'N' and workout2.forceunit == 'lbs': + df1['averageforce'] /= lbstoN + df1['peakforce'] /= lbstoN + offsetmillisecs = offset.seconds*1000+offset.microseconds/1000. offsetmillisecs += offset.days*(3600*24*1000) df2['time'] = df2['time']+offsetmillisecs