====== Amp: Симакин, Шапошникова, 2017 ====== Краткое описание сенсора === Details === ^ Article | | ^ Collibration | Как выполнялась калибровка | ^ Precision | ± 1 kbar | ^ Ranges | 950 * заголовок * краткое описание * статья * ссылка * карточка * подробное описание * код * тест === Source === #Загрузка файла с методом пересчета source('recalc_amp_13ecnk.r'); #Основная функция сенсора sensors.p.amp_simakin <- function(Amp, usePFU = FALSE, ...){ #Параметр usePFU позволяет пропускать пересчет, предполагая, что на входе уже к.ф. if(!usePFU) Amp <- recalc.amp_13ecnk(Amp); #Расчет "давления" по точкам во всем наборе P <- 16.051*(1.8*Amp$Al_c6_pfu/(1.8-Amp$Fe_p3_pfu-Amp$Ti_C_pfu-Amp$Cr_C_pfu))-7.819; #Максимальное значение Pmax <- max(P) Pmean <- mean(P[Pmax-P <= 1]) comm <- 'norm' #нужно прокомментировать, что при Рmax<2 расплав был кислым или амфибол заместил другую фазу при реакции с расплавом 'silicious or replace' if(Pmax<1.5){Pmax<-0; comm <-'silicious or replacement'} #нужно прокомментировать, что среди них есть закалочный кристалл или метаморфический 'quenching or metamorphic' if(Pmax>15){Pmax<-100; comm <-'quenching or metamorphic'} if(Pmax==0){Pmean<-0} if(Pmax==100){Pmean<-0} n1 <- nrow(Amp) ij <- 1:n1 # Упорядочение значений "давления" во всех точках состава for (j in 1:n1) { for (i in 1:(n1-1)) { if (P[i+1]>P[i]){z<-P[i]; P[i]<-P[i+1]; P[i+1]<-z; # nam<-Amp$Name[i]; Amp$Name[i]<-Amp$Name[i+1]; Amp$Name[i+1]<-nam; } li<-Amp[i, ]; Amp[i, ]<-Amp[i+1, ]; Amp[i+1, ]<-li; } }}; # j<-1; for(j in 1:n1) {while (P[1]-P[j]<1.0}{break} # k<-1; while(k<=j){sum<-sum+P[k]/j} df1<-data.frame(Name='Summary', P_max=Pmax,P_mean=Pmean,comment=comm,n_points=n1,end=' '); df2<-data.frame(Name=Amp$Name, P_max=P,P_mean=0.0,comment=' ',n_points=' ',end=' '); df0<-data.frame(Name='_', P_max=0.0,P_mean=0.0,comment='_',n_points=' ',end=' '); return (rbind(df1,df0,df2)); # return (data.frame(Name=Amp$Name, P_max=replicate(nrow(Amp), Pmax), P_mean=replicate(nrow(Amp), Pmean))); } #Функция определяющая входные параметры сенсора sensors.p.amp_simakin.args <- function() { ars <- list(); #Список минералов в данном случае 1 элемент ars$minerals = c('Amp'); ars$ranges = c(); return(ars); } #Функция тестирования sensors.p.amp_simakin.test <- function() { #Тестовый набор данных test_data = data.frame(Name=c('test1', 'test2'), SiO2_wtp=c(42.890, 42.890), TiO2_wtp=c(1.800, 1.800), Al2O3_wtp=c(11.550, 11.550), FeO_wtp=c(14.960, 14.960), MgO_wtp=c(11.120, 11.120), CaO_wtp=c(11.490, 11.490), Na2O_wtp=c(1.870, 1.870), K2O_wtp=c(1.060, 1.060)); #Расчет result <- sensors.p.amp_simakin(test_data); print(result); #Проверка соответствия результат заданному значению expect_equal(object = result[1,]$P_mean, 2.228, tolerance = 0.05); }