Files
eqn.ios/Sources/Earthquake Network/Models/Monitoring/EQNRilevamento.m
T
2020-12-07 09:57:27 +01:00

58 lines
1.9 KiB
Objective-C

//
// EQNRilevamento.m
// Earthquake Network
//
// Created by Luca Beretta on 19/09/18.
// Copyright © 2018 Luca Beretta. All rights reserved.
//
#import "EQNRilevamento.h"
#import <CoreMotion/CoreMotion.h>
#import "EQNMath.h"
#import "EQNAccelerometroManager.h"
@implementation EQNRilevamento
#pragma mark - Init
- (instancetype)initWithMedia:(float)media deviazione:(float)deviazione maxAssoluto:(float)maxAssoluto rilievo:(EQNRilevamentoSoglia)rilievo timestamp:(NSDate *)timestamp
{
self = [super init];
if (self) {
self.media = media;
self.deviazione = deviazione;
self.maxAssoluto = maxAssoluto;
self.rilievo = rilievo;
self.timestamp = timestamp;
}
return self;
}
#pragma mark - Public
+ (void)startRilevamentoWithCalibrazione:(EQNCalibrazione *)cal result:(calibrationCompletion)rilevamento
{
if (!cal) {
rilevamento(nil);
return;
}
[EQNAccelerometroManager avviaLetturaAccellerometroIsCalibrazione:NO withCompletion:^(NSArray *dati) {
float media = [[EQNMath meanOf:dati] floatValue];
float deviazione = [[EQNMath standardDeviationOf:dati] floatValue];
NSDictionary *rDic = [EQNMath rLimiti:dati];
float max = [rDic[rMax] floatValue] - cal.media;
float maxAssoluto = fabsf(max);
EQNRilevamentoSoglia rilievo = (deviazione > SOGLIA_DEVIAZIONE_RILIEVO*cal.deviazione) ? EQNRilevamentoSogliaPositivo : EQNRilevamentoSogliaNegativo;
EQNRilevamento *aRilievo = [[EQNRilevamento alloc] initWithMedia:media
deviazione:deviazione
maxAssoluto:maxAssoluto
rilievo:rilievo
timestamp:[NSDate date]];
rilevamento(aRilievo);
}];
}
@end