def make_mouse_boxplot(self, request, user, pk=None): # pylint: disable=unused-argument try: try: meta = AverageFeaturesMeta.objects.get( average_frames_value=Defaults.AverageFramesCount.value) except Exception: return create_custom_response( status.HTTP_400_BAD_REQUEST, { 'reason': 'no meta for average features (create average features first)' }) features = models_to_list( AveragedMiceFeatures.objects.filter( mouse=pk, meta=meta.id, ).order_by('date')) # TODO: boxplots boxplot = BoxPlot.create(features) db_boxplot = [ MiceBoxPlot(**{ **boxplot[index], 'mouse_id': pk, }) for index in range(len(boxplot)) ] MiceBoxPlot.objects.filter(mouse=pk).delete() MiceBoxPlot.objects.bulk_create(db_boxplot) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_mouse_averaged_normalized_features(self, request, user, pk=None): # pylint: disable=unused-argument try: request_data = json.loads(request.body) average_frames_count = int( request_data.get( 'average_frames_count', Defaults.AverageFramesCount.value, )) normalization_method = request_data.get( 'method', Defaults.NormalizationMethod.value) meta, _ = AverageFeaturesMeta.objects.get_or_create( average_frames_value=average_frames_count) # find latest date added before try: latest_added_date = AveragedNormalizedMiceFeatures.objects\ .filter( mouse=pk, normalization_method=normalization_method, meta=meta.id, )\ .latest(FeatureNames.Date.value).date except Exception: latest_added_date = datetime.min averaged_features = models_to_list( AveragedMiceFeatures.objects.filter( mouse=pk, meta=meta.id, date__gt=latest_added_date, ).order_by('date')) averaged_normalized_features = Preprocessing.normalize_features( averaged_features, normalization_method) db_averaged_normalized_features = [ AveragedNormalizedMiceFeatures( **{ **averaged_normalized_features[features_index], 'mouse_id': pk, 'normalization_method': normalization_method, 'meta': meta, }) for features_index in range(len(averaged_normalized_features)) ] AveragedNormalizedMiceFeatures.objects.bulk_create( db_averaged_normalized_features) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def list(self, request, user): # pylint: disable=unused-argument try: user_id = user['user_info']['id'] cameras = list(Cameras.objects.filter(user_id=user_id)) return create_custom_response(status.HTTP_200_OK, {'cameras': models_to_list(cameras)}) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_mouse_normalized_average_healthy(self, request, user, pk=None): # pylint: disable=unused-argument try: request_data = json.loads(request.body) average_frames_count = int( request_data.get( 'average_frames_count', Defaults.AverageFramesCount.value, )) normalization_method = request_data.get( 'method', Defaults.NormalizationMethod.value) meta, _ = AverageFeaturesMeta.objects.get_or_create( average_frames_value=average_frames_count) averaged_normalized_features = models_to_list( AveragedNormalizedMiceFeatures.objects.filter( mouse=pk, meta=meta.id, normalization_method=normalization_method, ).order_by('date')) normalized_average_healthy = Preprocessing.create_average_healthy( averaged_normalized_features, ) db_normalized_average_healthy = [ NormalizedAverageHealthyMice( **{ **normalized_average_healthy[features_index], 'mouse_id': pk, 'normalization_method': normalization_method, 'meta': meta, }) for features_index in range(len(normalized_average_healthy)) ] NormalizedAverageHealthyMice.objects\ .filter( mouse=pk, normalization_method=normalization_method, meta=meta.id, )\ .delete() NormalizedAverageHealthyMice.objects.bulk_create( db_normalized_average_healthy) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_experiment_pca(self, request, user, pk=None): # pylint: disable=unused-argument try: try: meta = AverageFeaturesMeta.objects.get( average_frames_value=Defaults.AverageFramesCount.value) except Exception: return create_custom_response( status.HTTP_400_BAD_REQUEST, { 'reason': 'no meta for average features (create average features first)' }) is_days = json.loads(request.body)['is_days'] experiment_mice = Mice.objects \ .filter(experiment=pk). \ values_list('id', flat=True) mice_features = { mouse_id: models_to_list( AveragedMiceFeatures.objects.filter( mouse=mouse_id, meta=meta.id, ).order_by('date')) for mouse_id in experiment_mice } experiment_pca = PCA.create(mice_features, is_days=is_days) ExperimentsPCA.objects.filter( experiment=pk, is_days=is_days, ).delete() db_experiment_pca = [ ExperimentsPCA( **{ **experiment_pca[index], 'experiment_id': pk, 'meta': meta, 'is_days': is_days, }) for index in range(len(experiment_pca)) ] ExperimentsPCA.objects.bulk_create(db_experiment_pca) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def list(self, request, user): # pylint: disable=unused-argument try: user_id = user['user_info']['id'] favorite_mice_ids = FavoriteMice.objects\ .filter(user_id=user_id)\ .values_list('mouse', flat=True) mice = models_to_list(Mice.objects.filter(id__in=favorite_mice_ids)) return create_custom_response( status.HTTP_200_OK, {'favorite': mice} ) except Exception: return create_custom_response(status.HTTP_500_INTERNAL_SERVER_ERROR)
def retrieve(self, request, user, pk=None): # pylint: disable=unused-argument try: user_id = user['user_info']['id'] project = model_to_dict( AnalysisProjects.objects.get(user_id=user_id, id=pk)) project_mice = AnalysisMouseRelation.objects.filter( analysis_project=pk) project['mice'] = models_to_list(project_mice) return create_custom_response(status.HTTP_200_OK, {'project': project}) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_mouse_normalized_features(self, request, user, pk=None): # pylint: disable=unused-argument try: request_data = json.loads(request.body) normalization_method = request_data.get( 'method', Defaults.NormalizationMethod.value, ) # find latest date added before try: latest_added_date = NormalizedMiceFeatures.objects\ .filter( mouse=pk, normalization_method=normalization_method, )\ .latest(FeatureNames.Date.value).date except Exception: latest_added_date = datetime.min features = models_to_list( MiceFeatures.objects.filter( mouse=pk, date__gt=latest_added_date, ).order_by('date')) normalized_features = Preprocessing.normalize_features( features, normalization_method) db_normalized_features = [ NormalizedMiceFeatures( **{ **normalized_features[features_index], 'mouse_id': pk, 'normalization_method': normalization_method, }) for features_index in range(len(normalized_features)) ] NormalizedMiceFeatures.objects.bulk_create(db_normalized_features) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_mouse_heatmap(self, request, user, pk=None): # pylint: disable=unused-argument try: features = models_to_list( AveragedMiceFeatures.objects.filter(mouse=pk).order_by('date')) heatmap = HeatMap.create(features) db_heatmap = [ MiceHeatMap(**{ **heatmap[index], 'mouse_id': pk, }) for index in range(len(heatmap)) ] MiceHeatMap.objects.filter(mouse=pk).delete() MiceHeatMap.objects.bulk_create(db_heatmap) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def make_mouse_seasonal_decomposition(self, request, user, pk=None): # pylint: disable=unused-argument try: try: meta = AverageFeaturesMeta.objects.get( average_frames_value=Defaults.AverageFramesCount.value) except Exception: return create_custom_response( status.HTTP_400_BAD_REQUEST, { 'reason': 'no meta for average features (create average features first)' }) features = models_to_list( AveragedMiceFeatures.objects.filter( mouse=pk, meta=meta.id, ).order_by('date')) seasonal_decomposition = SeasonalDecomposition.create(features) MiceSeasonalDecomposition.objects.filter(mouse=pk).delete() db_seasonal_decomposition = [ MiceSeasonalDecomposition( **{ **seasonal_decomposition[component][index], 'mouse_id': pk, 'component': component, }) for component in SEASONAL_DECOMPOSITION_COMPONENTS for index in range(len(seasonal_decomposition[component])) ] MiceSeasonalDecomposition.objects.bulk_create( db_seasonal_decomposition) return create_custom_response(status.HTTP_200_OK, ) except Exception: return create_custom_response( status.HTTP_500_INTERNAL_SERVER_ERROR)
def filter_experiments(experiments, filters): # TODO: сделать фильтрацию экспериментов https://tracker.yandex.ru/VPAGROUPDEV-601 return models_to_list(experiments)
import json