diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 33f961be..747135e5 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1081,7 +1081,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', makeprivate=False, oarlength=2.89, inboard=0.88, forceunit='lbs', - consistencychecks=False): + consistencychecks=False, + impeller=False): message = None powerperc = 100 * np.array([r.pw_ut2, @@ -1289,7 +1290,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', startdatetime=workoutstartdatetime, inboard=inboard, oarlength=oarlength, timezone=timezone_str, - privacy=privacy) + privacy=privacy, + impeller=impeller) try: w.save() except ValidationError: @@ -1421,24 +1423,32 @@ def handle_nonpainsled(f2, fileformat, summary=''): oarlength = 2.89 inboard = 0.88 hasrecognized = False + impeller = False row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary) # Handle c2log if (fileformat == 'c2log' or fileformat == 'rowprolog'): - return (0,'',0,0,'') + return (0,'',0,0,'',impeller) if not hasrecognized: - return (0,'',0,0,'') + return (0,'',0,0,'',impeller) f_to_be_deleted = f2 # should delete file f2 = f2[:-4] + 'o.csv' try: row2 = rrdata(df = row.df) + if fileformat == 'speedcoach2': + # impeller consistency + impellerdata, consistent, ratio = row.impellerconsistent(threshold=0.3) + if impellerdata and consistent: + impeller = True + if impellerdata and not consistent: + row2.use_gps() row2.write_csv(f2, gzip=True) except: - return (0,'',0,0,'') + return (0,'',0,0,'',impeller) # os.remove(f2) try: @@ -1449,7 +1459,7 @@ def handle_nonpainsled(f2, fileformat, summary=''): except: pass - return (f2, summary, oarlength, inboard, fileformat) + return (f2, summary, oarlength, inboard, fileformat, impeller) # Create new workout from file and store it in the database # This routine should be used everywhere in views.py and mailprocessing.py @@ -1476,6 +1486,7 @@ def new_workout_from_file(r, f2, inboard = 0.88 if len(fileformat) == 3 and fileformat[0] == 'zip': f_to_be_deleted = f2 + impeller = False workoutsbox = Mailbox.objects.filter(name='workouts')[0] msg = Message(mailbox=workoutsbox, from_header=r.user.email, @@ -1543,7 +1554,7 @@ def new_workout_from_file(r, f2, # handle non-Painsled by converting it to painsled compatible CSV if (fileformat != 'csv'): - f2, summary, oarlength, inboard, fileformat = handle_nonpainsled( + f2, summary, oarlength, inboard, fileformat, impeller = handle_nonpainsled( f2, fileformat, summary=summary @@ -1571,7 +1582,8 @@ def new_workout_from_file(r, f2, summary=summary, inboard=inboard, oarlength=oarlength, title=title, - forceunit='N' + forceunit='N', + impeller=impeller, ) return (id, message, f2) diff --git a/rowers/models.py b/rowers/models.py index 47b6d629..fd830b37 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2734,6 +2734,7 @@ class Workout(models.Model): choices=privacychoices) rankingpiece = models.BooleanField(default=False,verbose_name='Ranking Piece') duplicate = models.BooleanField(default=False,verbose_name='Duplicate Workout') + impeller = models.BooleanField(default=False,verbose_name='Impeller') def save(self, *args, **kwargs): user = self.user