コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
def filter_experiments(experiments, filters):
    # TODO: сделать фильтрацию экспериментов https://tracker.yandex.ru/VPAGROUPDEV-601
    return models_to_list(experiments)
コード例 #12
0
import json