---
title: "R Notebook"
output: html_notebook
---


```{r echo=FALSE, message=FALSE, warning=FALSE}


install.packages(pkgs = "")
install.packages(file_name_and_path, repos = NULL, type="source")


# RStudio - cran

# RStudio - archiv

# GitHub
library(devtools)
install_github("Momocs",username="jfpalomeque")
install_github("jfpalomeque/Momocs")


# Bioconductor
# https://www.bioconductor.org/
if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install(version = "3.14")

BiocManager::available()

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("Rchemcpp")
BiocManager::install("biodb")


# Search

library(pkgsearch)
pkg_search_addin(query = "", viewer = c("dialog", "browser"))

# https://www.itl.nist.gov/div898/education/datasets.htm


library(NCmisc)
require(NCmisc)

summarise.r.datasets()
summarise.r.datasets(filter=TRUE,"matrix")

```


Přiřazení hodnoty proměnné

```{r echo=FALSE, warning=FALSE}

x <- -7
x

x = -7; x

(x = -7)


library(schoolmath)
schoolmath::is.negative(x)
schoolmath::is.positive(x)
schoolmath::is.real.positive(x)

abs(x)

```


Sčítání, odčítání, násobení a dělení

```{r echo=FALSE, message=FALSE, warning=FALSE}

3+3
9-3
3*3
9/3

x = 9
x+3
x-3
x*3
x/3
(x-3)/(x/3)

1/0
Inf*Inf
Inf/Inf
0/0


# celociselne deleni (intager division)
13%/%2
library(numbers)
div(13,2)  

# zbytek po deleni (reminder after division)
13%%2
library(numbers)
mod(13,2) 

```


Převod desetinných čísel na zlomky

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(MASS)
fractions(-0.1666667)
fractions(0.14)
fractions(0.4)

library(schoolmath)
decimal2fraction(0.1,6)

library(fractional)
fractional(-0.1666667, eps = 1e-06, maxConv = 20, sync = FALSE)
numerators(-0.1666667) # vypise citatele (numerator)
denominators(-0.1666667) # vypise jmenovatele (denominator)
numerical(-1/6)
unfractional(-1/6)

# zjednodusení zlomku (fractions simplification)
library(schoolmath)
cancel.fraction(42, 56)
cancel.fraction(-167, 100)


# Nejvetsi spolecny delitel (greatest common divisor)
x = 12
y = 8
library(schoolmath)
schoolmath::gcd(x, y)
library(DescTools)
DescTools::GCD(x, y, na.rm = FALSE)
DescTools::GCD(c(12,10,8), na.rm = FALSE)


# Nejmensi spolecny nasobek (smallest common multiple)
x = 12
y = 8
library(schoolmath)
schoolmath::scm(x, y)
library(DescTools)
DescTools::LCM(x, y)
DescTools::LCM(c(12,10,8), na.rm = FALSE)

```


Mocniny a odmocniny

```{r echo=FALSE, message=FALSE, warning=FALSE}

x = 9
y=4

sqrt(x)
x^(1/2)
x^(-1/2)

x**2
x^2
x^(-2)


# zda je cislo mocninou celeho cisla

library(numbers)
isIntpower(144)
isIntpower(8)

```


Exponenty a logaritmy

```{r echo=FALSE, message=FALSE, warning=FALSE}

### Exponenty ###
x = 2
10^x # exponent
10**x # exponent

x = 2
exp(x)   # e^x


### Prirozeny logaritmus ###
x = 10
log(x)  # base e
log(x, base = exp(1))  # base e
log(0)


### Dekadicky logaritmus ###
x = 10
log10(x) # base 10
log(x,base = 10)
log10(0)

```


Goniometrické funkce

```{r echo=FALSE, message=FALSE, warning=FALSE}

x = pi/2
cos(x)
sin(x)
tan(x)

x = 1
acos(x)
asin(x)
atan(x)


# prevod uhly vs radiany
library(pracma)
deg2rad(120) 
rad2deg(3.14)

```


Vypočítejte pH 0.001 M kyseliny chlorovodíkové, 0.01 M hydroxidu sodného, 0.15 M kyseliny octové (Ka = 1.75e-5) a 0.01 M amoniaku (Kb = 1.8e-5)

```{r echo=FALSE, message=FALSE, warning=FALSE}

# HCl
pH = -log10(0.001); pH


# NaOH
pH = 14 - (-log10(0.01)); pH


# CH3COOOH
pH = (-log10(1.75e-5)-log10(0.15))/2; pH

library(ch)
monoa(ka=1.75e-5, c=0.15, digits = 2)
mono(ka=1.75e-5, c=0.15, digits = 4, acid = TRUE, kw = 1e-14)


# NH4OH
pH = 14 - (-log10(1.8e-5)-log10(0.01))/2; pH

library(ch)
monob(ka=1.8e-5, c=0.01, digits = 2)
mono(ka=1.8e-5, c=0.01, digits = 4, acid = FALSE, kw = 1e-14)

```


Matematické konstanty

```{r echo=FALSE, message=FALSE, warning=FALSE}

### Ludolfovo cislo ####
pi
print(pi, digits=20)

### Eulerovo cislo ####
exp(1)
print(exp(1), digits=20) 

```


Vektory - generování řady čísel

```{r echo=FALSE, message=FALSE, warning=FALSE}

1:6
c(2:12)
rev(c(2:12))

seq(from=1, to=20, by=2)
seq(5, -5, -1)
seq(from=5, by=-1, along.with = 1:20)

rep(1, len = 9)
rep(1:4, len = 9)
rep(1:4, 2)
rep(1:4, each = 2)       # not the same.
rep(1:4, each = 2, len = 4)    # first 4 only.
rep(1:4, each = 2, times = 3)  

```


Vektory - řada náhodných čísel z daného rozmezí

```{r echo=FALSE, message=FALSE, warning=FALSE}

# set.seed(123)
sample(12:99, 9, replace = FALSE) # bez opakovani
sort(sample(1:20, 9, replace = FALSE))
sample(12:99, 9, replace = TRUE) # s opakovanim
sort(sample(1:20, 9, replace = TRUE))

rnorm(n=6, mean=0, sd=1)
rnorm(6,9,1.5)

rbinom(30,c(0,1),0.5) #mince
rbinom(30,c(1:6),(1/6)) #kostka (dice)

runif(n=5, min=0, max=1) # rovnomerne rozdeleni
runif(6,-2,2)

```


Indexy

```{r echo=FALSE, message=FALSE, warning=FALSE}
set.seed(123) # generator nahodnych cisel
x = sample(12:99,19, replace = FALSE)
is.vector(x)
x
x[1]
x[1:5]
x[c(1:5)]
x[length(x)]
x[(length(x)-1)]
x[-1]
x[-(1:5)]
x[-c(1:5)]
x[-length(x)]
x[(length(x)-3):length(x)]#posledni 4 hodnoty
x[c(1,4,7)]#vybrane hodnoty
which.max(x)
which.min(x)
library(Rmpfr)
which.min(x)
which(x<=50)
x[which(x<=50)]
x[x<=50]
which(x>=50)
x[which(x>=50)]
which(x == max(x))#maximalni hodnota
which(x == 10)
which(x != 10)
x[x > 40]#hodnoty vyssi nez 40.
x[x < 40]#hodnoty mensi nez 40
which(x > 10)#hodnoty vyssi nez 10.
which(x < 10)#hodnoty mensi nez 10.

```


Uspořádání vektoru

```{r echo=FALSE, message=FALSE, warning=FALSE}

x = sample(12:99,19, replace = FALSE)

rank(x)  # vhodne pro vektory, nevhodne pro matice 

sort(x, decreasing = FALSE)
sort(x, decreasing = TRUE)
sort(x[which(x>=50)])
order(x)  # poradi (indexy) pro sort
x[order(x)]

```


Množiny

```{r echo=FALSE, message=FALSE, warning=FALSE}

x = 10

x == 0
x != 0
x == 10
x != 10
x>0
x<0
x>=0
x>=10
x<=10
-x>=10

library(extraoperators)
# https://joshuawiley.com/extraoperators/
x%l%10 # <
x%le%10 # <=
x%g%10 # >
x%ge%10 # >=
 
 
x <- c(sort(sample(1:20, 3)))

x>5 & x<10 # 5 < x AND x < 11
x>5 | x<10 # 5 < x OR x < 11

library(extraoperators)
# https://joshuawiley.com/extraoperators/

5%gl%10 # # 5 < x AND x < 11 (5, 11)
5%gel%10 # 5 <= x AND x < 11 [5, 11)
5%gle%10 # 5 < x AND x <= 11 (5, 11]
5%gele%10 # 5 <= x AND x <= 11 [x, y]


y <- c(sort(sample(3:23, 7)))

union(x, y) # sjednoceni
intersect(x, y) # prunik
setdiff(x, y) # rozdil mnozin
setdiff(y, x) # rozdil mnozin


# kladne vs. zaporne cislo
x <- c(-1, -2, 3.02, 4, -5.2, 6, -7, 0) 
schoolmath::is.negative(x)
schoolmath::is.positive(x)
schoolmath::is.real.positive(x)

# sude vs. liche cislo
x <- c(1, 2, 3, 4, 5, 6, 7) 
schoolmath::is.even(x)
schoolmath::is.odd(x)
x %% 2 == 0 
x %% 2 != 0

```


Vektorová aritmetika

```{r}
a = c(1, 3, 5, 7) 
b = c(1, 2, 4, 8) 
5 * a
a + b 
a - b 
a * b 
a / b

u = c(10, 20, 30) 
v = c(1, 2, 3, 4, 5, 6, 7, 8, 9) 
u + v 

diff(u)
diff(v)


max(x)
min(x)
range(x)
library(DescTools)
Range(x)
sum(x)
cumsum(x)
prod(x)
cumprod(x)
diff(x)
sign(x)

```


Filtrování hodnot ve vektoru

```{r}

x = sample(12:99, 9, replace = TRUE)
x
unique(x)
table(x)
summary(as.factor(x))
# frekvence vyskytu daneho cisla
sum(x==32)
length(which(x==57))


numbers =c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,7,65,34,435)
table(numbers)[2]==1
numbers[2]
sum(numbers==435)

duplicated(numbers) # identifying duplicated elements 
numbers[duplicated(numbers)]
unique(numbers) # extracting unique elements,

```


Matice

```{r}

x = sample(12:99,18, replace = FALSE); x
matrix(x,nrow=6,ncol=3,byrow = TRUE)
matrix(x,nrow=6,ncol=3,byrow = FALSE)


x1 = sample(12:99,19, replace = FALSE)
x2 = sample(12:99,19, replace = TRUE)

x12 = rbind(x1,x2)
x12 = cbind(x1,x2)
is.matrix(x12)
nrow(x12)
ncol(x12)

x12[order(x1),]
x12[order(x2),]
x12[,1]
x12[,"x"]
x12$x

colnames(x12)
colnames(x12)=c("X","Y")
rownames(x12)
rownames(x12) = LETTERS[1:length(x1)] 

```


Dataframes

```{r echo=FALSE, message=FALSE, warning=FALSE}

x1 = sample(12:99,19, replace = FALSE)
x2 = sample(12:99,19, replace = TRUE)
z = LETTERS[1:length(x1)] 

x12 = rbind(x1,x2,z)
x12 = cbind(x1,x2,z)
nrow(x12)
ncol(x12)
is.data.frame(x12)
is.matrix(x12)

x12 = as.data.frame(x12)
x12[,1] = as.numeric(x12[,1])
x12[,2] = as.numeric(x12[,2])

is.data.frame(x12)
colnames(x12)
rownames(x12)
as.matrix(x12)


mean(x1)
mean(as.numeric(x12[,1]))

```


Seznamy (lists)

```{r echo=FALSE, message=FALSE, warning=FALSE}

x= list(1,2,3)
names(x) = c("x1","x2","x3")
x$x1[1]
x[[2]][1]

x1 = sample(12:99,19, replace = FALSE)
x2 = sample(12:99,19, replace = TRUE)
x3 = sample(12:99,19, replace = TRUE)
z = LETTERS[1:length(x1)] 

x123 = list(x1,x2,x3,z)
is.list(x123)
names(x123) = c("x1","x2","x3","z") 
x123$x1
x123[[1]]


x1 = sample(12:99,19, replace = FALSE)
x2 = sample(12:99,19, replace = TRUE)
x3 = sample(12:99,19, replace = TRUE)
LL = list(x1,x2,x3)
names(LL) = c("x1","x2","x3")

LL[[2]][3]
LL$x2[3]

```



Vypočítejte molekulové hmotnosti alkanů C1 - C12.

```{r echo=FALSE, message=FALSE, warning=FALSE}

HC = function(n){n*12.011 + (2*n + 2)*1.008}

hc112 = HC(c(1:12))
names(hc112) = c(1:12)
hc112

hc112 = sapply(c(1:12),HC)
names(hc112) = c(1:12)
hc112

hc112 = lapply(c(1:12),HC)
names(hc112) = c(1:12)
hc112

```


Vliv 3 ůzných druhů krmiva na přírůstek živé váhy (v kg) prasat, rozdělených do 4 různých skupin. 

```{r echo=FALSE, message=FALSE, warning=FALSE}

A = c(7.0, 16.0, 10.5, 13.5)
B = c(14.0, 15.5, 15.0, 21.0)
C = c(8.5, 16.5, 9.5, 13.5)
ps =cbind(A,B,C)
colnames(ps) = c("A","B","C")
rownames(ps) = c("I","II","III","IV")
ps

colSums(ps)
rowSums(ps)

colMeans(ps)
rowMeans(ps)

apply(ps,2,mean)
apply(ps,1,mean)

# deleni hodnot ve sloupci sumou sloupce
sup = apply(ps,2,sum)
sapply(c(1:3),function(i){ps[,i]/sup[i]})


library(reshape2)
melt(ps)
pr = setNames(melt(ps), c('serie','krmeni','prirustek'))
pr

as.data.frame(pr)
as.matrix(pr)

acast(pr,serie ~ krmeni)


st = stack(as.data.frame(ps)); st
unstack(st)


prirustek = pr[,"prirustek"]
serie = as.factor(pr[,"serie"])
krmeni = as.factor(pr[,"krmeni"])

aggregate(prirustek,list(krmeni), FUN=mean)
aggregate(prirustek,list(serie,krmeni), FUN=mean)

tapply(prirustek, list(krmeni), mean)
tapply(pr$prirustek, pr$krmeni, mean)



lps = list(A,B,C)
lps
names(lps) = c("A","B","C")
lps

unlist(lps)

do.call(cbind,lps)

sapply(lps,mean)
lapply(lps,mean)


st = stack(lps); st
unstack(st)

library(reshape2)
melt(lps)
lpr = setNames(melt(lps), c('krmeni','prirustek'))
lpr


```


Pipe operator (%>%) v R

```{r}

a = 3.14159
b = seq(from = a,10,3)
round(b,3)

a = 3.14159
seq(round(a,3),10,3)

# pipe operator
library(magrittr)
a = 3.14159
a %>% seq(10,3) %>% round(3)

```


Příkaz if-else

```{r}

x = sample(12:99,18, replace = FALSE); x
ifelse(x<50,0,1)
x[x<50] = 0
x[x>=50] = 1
x

```


Vypocítejte vazebnou energii atomového jádra pomoci Bethe - Weiszackerovy rovnice B = 14.0 - 13.1*A^(2/3) + 0.585*Z*(Z-1)/A^(1/3) - (18.1*(A-2*Z)^2)/A + C/A, kde
A - nukleonove cislo, Z - atomove cislo, C - konstanta, pro jádra se sudým počtem protonů i neutronů je rovna 132, 
pro jádra s lichým počtem protonů i neutronů je rovna -132, pro lichy počet protonů a sudý počet neutronů a naopak je rovna 0.

```{r}

# alpha particle
A = 4 
Z = 2

# U-235
A = 235 
Z = 92

# funkce
N = A-Z
if (N%%2==0 & Z%%2==0){C = 132} else if (N%%2!=0 & Z%%2!=0){C = -132} else {C = 0}
B = 14.0 - 13.1*A^(2/3) + 0.585*Z*(Z-1)/A^(1/3) - (18.1*(A-2*Z)^2)/A + C/A
B # [MeV]
B/A # energie na 1 nukleon [MeV]

# polomer jadra: R = R0 * A^(1/3)
R0 = 1.4e-13 # [cm]
R = R0 * A^(1/3)
R = R*10e-15 
R   # [m]

```


Cyklus typu while

Vypočítejte molekulové hmotnosti alkanů C1 - C12 (while loop)

```{r}

n = 1
Mhc = NULL
while(n <= 12){
  hc = n*12.011 + (2*n + 2)*1.008
  Mhc = c(Mhc,hc)
  n = n+1
}
names(Mhc) = c(1:12)
Mhc

```


Cyklus typu for (for loop)

Vypočítejte molekulové hmotnosti alkanů C1 - C12

```{r}

Mhc = NULL
for(n in c(1:12)){
  hc = n*12.011 + (2*n + 2)*1.008
  Mhc = c(Mhc,hc) 
}
names(Mhc) = c(1:12)
Mhc

```


Vypočítejte střední kvadratickou rychlost molekul daných plynů v rozmezí teplot od 150 K do 500 K s krokem 50 K.

```{r}

el = c("H2","He", "O2", "Kr")
M = c(2.0159, 4.0026, 31.9988, 83.8) # [g / mol]
Ts = seq(from=150, to=500, by=50) # [K]
R = 8314.34 # [J / kmol K]
MKV = NULL
for(tt in Ts){
  mkv= rep(0, length(M))
  for(ii in c(1:length(M))){
    mkv[ii] = (3*R*tt/M[ii])^(1/2)
  }
  MKV = rbind(MKV, mkv)   
}
colnames(MKV) = el
rownames(MKV) = Ts
MKV
plot(0,0,xlim=c(min(Ts),max(Ts)),ylim = c(min(MKV),max(MKV)), type ="n",xlab="T [K]",ylab="str. kv. rychlost [m/s]")
for(ii in c(1:length(M))){points(Ts,MKV[,ii], type="p",col=ii,pch=16)}
legend("topleft",legend=el,col=c(1:length(M)),pch=16,cex=.8)

```


Fyzikální konstanty

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(marelac)
data(Constants)
Constants

# Univerzalni plynova konstanta
Constants$gasCt1
Constants$gasCt2
Constants$gasCt3
R = as.numeric(Constants$gasCt2[1]); R # hodnota
Constants$gasCt2[2] # jednotka


library(constants)
codata
syms_with_errors
syms_with_units

lookup("planck", ignore.case=TRUE)
lookup("avogadro", ignore.case=TRUE)
lookup("faraday", ignore.case=TRUE)
lookup("molar", ignore.case=TRUE)
lookup("molar mass", ignore.case=TRUE)
lookup("light", ignore.case=TRUE)
lookup("boltzmann", ignore.case=TRUE)
lookup("mass", ignore.case=TRUE)
lookup("mass constant", ignore.case=TRUE)
lookup("proton mass", ignore.case=TRUE)
lookup("electron mass", ignore.case=TRUE)

# Univerzalni plynova konstanta
lookup("gas", ignore.case=TRUE)
codata[134,]
R = as.numeric(codata[134,5]) # hodnota
Ru = as.numeric(codata[134,6]) # nejistota
codata[134,7] # jednotka

```


```{r}

library(ch)
period_table()

library(DescTools)
data(d.periodic)
d.periodic

library(loon.data)
data(elements)
elements

library(PeriodicTable)
data(periodicTable)
periodicTable
#
el = "Se"
pel = periodicTable[which(periodicTable$symb==el),]
pel$config
pel$mass
pel$Eneg
vel = pel$group-10  # pocet valencnich elektronu atomu

library(ChemmineR) # bioc
data(atomprop)
atomprop

library(CHNOSZ)
thermo()$element
thermo()$element[,c(1,4)]


#### Atomove hmotnosti

library(marelac)
data(AtomicWeight)
AtomicWeight

AtomicWeight[AtomicWeight$Symbol == "C",]
atomicweight$C 

molweight("H") 
molweight("C")

library(CHNOSZ)
AW = CHNOSZ::mass("Ca"); AW

library(biogas)
molMass("C")
molMass('Fe')

```


Určete délku měděného drátu o průměru 1.6 mm jehož hmotnost je 0.8 kg.

```{r}

library(PeriodicTable)
data(periodicTable)
ptCu = periodicTable[which(periodicTable$symb=="Cu"),]
ptCu$density

hm = 0.8 # kg
rho = ptCu$density*1000 # kg/m3
# rho = 8900 # kg/m3
d = 1.6e-3 # m

V = hm/rho
S = pi*(d/2)^2
L = V/S; L

paste("Délka drátu je", round(L,0), "m.")

```


Molekulové hmotnosti

```{r}

library(enviPat)
data(chemforms)
chemforms
formula1<-c("C12H10Cl10")
formula2<-c("C3H5")
# odecitani 2 vzorcu
subform(formula1,formula2)
# scitani 2 vzorcu
mergeform(formula1,formula2)
# nasobeni vzorce
formula1<-c("C12H10Cl10")
multiform(formula1,3)


library(marelac)
molweight("CO2") 
molweight("HCO3") 
molweight("H3PO4")
molweight("CH3CH2CHCHCH2CHCHCH2CHCHCH2CHCHCH2CHCH(CH2)3COOH") # eicosapentaenoic acid (EPA) 
molweight("C20H30O2")
molweight(c("C2H5OH", "CO2", "H2O")) 
molweight(c("SiOFH4", "NaHCO3", "C6H12O6", "Ca(HCO3)2", "Pb(NO3)2", "(NH4)2SO4"))


library(CHNOSZ)
MW = CHNOSZ::mass("CaCO3"); MW
# pocet atomu prvku ve vzorci
ce = count.elements("CaCO3"); ce
as.chemical.formula(ce, drop.zero = TRUE)

me = makeup("C6H12O6", multiplier = 1, sum = TRUE, count.zero = TRUE); me
ce = count.elements("C6H12O6"); ce
i2A("C6H12O6")
as.chemical.formula(ce, drop.zero = TRUE)
as.chemical.formula(me, drop.zero = TRUE)


library(biogas)
molMass("C6H12O6")
molMass(c("C6H12O6", "CH3COOH"))
molMass("H3C(CH2)5COOH")
molMass('FeSO4(H2O)7') # hydrates
molMass("(C6H12O6)0.24999 (H3COOH)0.75001")


library(BRAIN) # Bioc
calculateAverageMass(list(C=60, H=30, N=0, O=30, S=0))


library(MSbox)
MSbox::mass('C7H7O')
MSbox::mass('C7h7o1')
MSbox::mass('C7H7O', caseSensitive = TRUE)

```


Uhlovodík o molekulové hmotnosti 84 g/mol obsahuje 85.71 % uhlíku a 14.29 % vodíku. Určete molekulový vzorec.

```{r}

M = 84 # g/mol
mc = 0.8571
mh = 0.1429
library(marelac)
mC = molweight("C") # g/mol
mH = molweight("H") # g/mol

rs = c(mc/mC,mh/mH)/min(mc/mC,mh/mH)
rs = round(rs,0)
n = M/sum(rs*c(mC,mH))
n = round(n,0)
form = rs*n; form
gsub(" ", "", paste("C",form[1],"H",form[2]))


library(Rdisop)
dmp = decomposeMass(mass=M, ppm=1, mzabs=0.1,  elements=initializeElements(c("C","H")), z=1, minElements="C4", maxElements="C10")
dmp$formula

library(rcdk)
generate.formula(M, window=5, validation=FALSE, charge=1,elements=list(c("C",2,10),c("H",4,30)))

```


Izotopy

```{r}

library(enviPat)
data(isotopes)
isotopes

library(ecipex)
nistiso
nistiso$mass
nistiso$abundance
nistiso$element

library(IsoSpecR)
data(isotopicData)
isotopicData

library(CIAAWconsensus)
ciaaw.mass.2003
ciaaw.mass.2012
ciaaw.mass.2016

```


Izotopové patterny

```{r echo=FALSE, message=FALSE, warning=FALSE}


library(OrgMassSpecR)
IsotopicDistribution(formula = list(C = 1, H = 1, Cl = 3), charge = 1)
# allowed elements: C, H,N, O, S, P, Br, Cl, F, Si.
# relative atomic masses of the elements are from the NIST Physical Reference Data 
# https://www.nist.gov/pml/atomic-weights-and-isotopic-compositions-relative-atomic-masses.

mx <- IsotopicDistribution(formula = list(C = 9, H = 4, Br = 5, Cl = 1, N = 2))
library(lattice)
xyplot(percent ~ mz, data = mx,type = "h",xlab = "m/z",ylab = "intensity (%)",main = "Isotopic Distribution, C9H4Br5ClN2")


# C60H30O30

library(OrgMassSpecR)
x <- IsotopicDistribution(formula = ListFormula("C60H30O30"))
plot(x$mz, x$percent,type = "h",xlab = "m/z",ylab = "intensity (%)",main = "Isotopic Distribution, C60H30O30",lwd=2)
abline(h=0,lty=2)

library(ecipex)
xx <- ecipex("C60H30O30", isoinfo = nistiso, limit = 0.0005,id = FALSE, sortby = "mass")
lmass = xx$C60H30O30$mass
labun = xx$C60H30O30$abundance
plot(lmass,labun,type="h",xlab="m/z",ylab="abundance")
abline(h=0,lty=2)

library(rcdk)
formula1 <- get.formula("C60H30O30", charge = 1)
isot1 <- get.isotopes.pattern(formula1,minAbund=0.00005)
plot(isot1[,1], isot1[,2],type = "h",xlab = "m/z",ylab = "intensity (%)",main = "Isotopic Distribution, C60H30O30",lwd=2)
abline(h=0,lty=2)

library(enviPat)
data(isotopes)

patt = isopattern(isotopes, "C60H30O30", threshold = 0.001, charge = FALSE,emass = 0.00054858, plotit = TRUE, algo=1, rel_to = 0, verbose = TRUE,return_iso_calc_amount = FALSE)

envelope(pattern=patt, ppm = FALSE, dmz = "get", frac = 1/4, env = "Gaussian",resolution = 5e+03, plotit = TRUE, verbose = TRUE)


library(Rdisop)
Mm <- getMolecule("C60H30O30", z=0, elements=initializeElements(c("C","H","O")))
getMass(Mm)
getFormula(Mm)
getIsotope(Mm)
getIsotope(Mm, index=1)
getValid(Mm)
isotopes <- getIsotope(Mm, seq(1,10))
isotopes
plot(isotopes[1,], isotopes[2,],type = "h",xlab = "m/z",ylab = "abundance",main = "C60H30O30",lwd=2)
abline(h=0,lty=2)


library(BRAIN) # bioc
aC = list(C=60, H=30, N=0, O=30, S=0)
nrPeaks = calculateNrPeaks(aC)
nrPeaks
res <- calculateIsotopicProbabilities(aC = aC, stopOption="nrPeaks", nrPeaks = nrPeaks)
res


library(IsoSpecR)
IsoSpecify(molecule = c(C=10,H=22,O=1), stopCondition = .9999 )

```


Izotopové poměry

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(CIAAWconsensus)

## Normalizace údajů o izotopech platiny na platinu-195
normalize.ratios(platinum.data, "platinum", "195Pt")

## Konsenzuální poměry množství izotopů platiny 
df=normalize.ratios(platinum.data, "platinum", "195Pt") 
mmm(df$R, df$u.R)

## Izotopové poměry zinku z izotopových zastoupení 
x = c(0.48630, 0.27900, 0.04100, 0.18750, 0.00620) 
ux = c(0.00091, 0.00076, 0.00031, 0.00135, 0.00010) 
z = abundances2ratios(x,ux,ref=2); z
at.weight(z$R,z$R.cov,"zinc","66Zn")

## Atomová hmotnost a izotopové zastoupení iridia, které odpovídají poměru izotopů 191Ir/193Ir = 0,59471(13) 
at.weight(0.59471, matrix(0.00013^2), "iridium", "193Ir")

## Atomová hmotnost a izotopové zastoupení křemíku, které odpovídají izotopovým poměrům 28Si/29Si = 1,074(69) a 30Si/29Si = 260(11) s korelací 0,80 mezi oběma izotopovými poměry. 
ratios = c(1.074,260) 
r.cov = matrix(c(0.069^2,0.80*0.069*11,0.80*0.069*11,11^2),ncol=2,byrow=TRUE) 
at.weight(ratios, r.cov, "silicon", "29Si")

```


Vlastnosti vzduchu a vody

```{r}

# Slozeni atmosfery
library(marelac)
atmComp() 

## Hustota vzduchu 
library(marelac)
air_density(t = 25, P = 1.013253)
# t - temperature in °C, P - pressure in bars

## Hustota vody
library(rLakeAnalyzer)
water.density(wtr = 25, sal = 0)
# wtr - temperature in °C
library(CHNOSZ)
rho.IAPWS95(T = 298.15, P = 1, state="", trace=0)
# T - temperature in K, P - pressure in bars


library(IAPWS95)
library(marelac)
library(CHNOSZ)

library(CHNOSZ)
thermo()$OBIGT

```




Disociační konstanty

```{r echo=FALSE, message=FALSE, warning=FALSE}

#https://chem.libretexts.org/Ancillary_Materials/Reference/Reference_Tables/Equilibrium_Constants/E1%3A_Acid_Dissociation_Constants_at_25C


library(seacarb)
Kd1 = K1p(S=0, T=25, P=0, pHscale="T", kSWS2scale="x", warn="n")
pKa1 = -log10(Kd1); pKa1
Kd2 = K2p(S=0, T=25, P=0, pHscale="T", kSWS2scale="x", warn="n")
pKa2 = -log10(Kd2); pKa2
Kd3 = K3p(S=0, T=25, P=0, pHscale="T", kSWS2scale="x", warn="n")
pKa3 = -log10(Kd3); pKa3

library(seacarb)
bjerrum(K1=Kd1[1], K2=Kd2[1], K3=Kd3[1], phmin=1, phmax=13, by=0.1, conc=1,type="l", col=c(2,3,4,6), ylab="Relative concentration (%)", add=FALSE)


library(SolveSAPHE)
AK_PHOS_1_MILL95(t_k=298,s=0, p_bar=0)
AK_PHOS_2_MILL95(t_k=298,s=35, p_bar=0)
AK_PHOS_3_MILL95(t_k=298,s=0, p_bar=0)


library(AquaEnv)
data(PhysChemConst)
PhysChemConst

```


```{r}

library(seqinr)
data(aaindex)
aaindex

a("Glu")
aaa("A")


library(CHNOSZ)
thermo = thermo()
thermo$protein
pf <- protein.formula(thermo$protein); pf
iA <- info("alanine")
info(iA)$formula
as.chemical.formula(makeup(iA))

```



Převody jednotek

```{r echo=FALSE, message=FALSE, warning=FALSE}
library(measurements)
conv_unit_options # pouzivane jednotky

# length
conv_unit(1, from="mm", to="m")
conv_unit(1, from="nm", to="angstrom")

# pressure
conv_unit(101, from="Pa", to="mmHg")
conv_unit(1, from="atm", to="Pa")

# temperature
conv_unit(100, from="C", to="K")

# energy
conv_unit(500, from="cal", to="J")
conv_unit(1, from="erg", to="J")

#volume
conv_unit(100, from="l", to="m3")

# mass
conv_unit(100, from="g", to="mg")
conv_unit(100, from="ug", to="g")

# speed
conv_unit(1, from="km_per_hr", to="m_per_sec")
conv_unit(1, from="light", to="km_per_hr")
conv_unit(1, from="light", to="m_per_sec")


### multiunits
conv_multiunit(x = 1, from="ug / l", to="g / m3")
conv_multiunit(x = 1, from="mg / l", to="kg / m3")
conv_multiunit(x = 1, from="cal / kg", to="J / g")


## Prevod teplot
library(weathermetrics)
convert_temperature(temperature=0, old_metric="c", new_metric="k", round = 2)
# metric = "c","f","k"
celsius.to.fahrenheit(T.celsius, round = 2)
celsius.to.kelvin(T.celsius, round = 2)
fahrenheit.to.kelvin(T.fahrenheit, round = 2)
fahrenheit.to.celsius(T.fahrenheit, round = 2)
kelvin.to.celsius(T.kelvin, round = 2)
kelvin.to.fahrenheit(T.kelvin, round = 2)


#### nasobky jednotek SI
library(sitools)
f2si(10000)
f2si(0.023, unit="l")
f2si(3.5e-5, unit="mol")
numbers <- c(1e5, 3.5e-12, 0.004) 
f2si(numbers, unit="g")

sapply(numbers,function(x){f2si(x, unit="g")})


# Prevod casovych jednotek

library(datetime)

xx = as.minute(60) # 60 min
as.second(xx)
as.hour(xx)
as.day(xx)

library(lubridate)
dur = duration(week=0,day=0.04166667,hours=1,minutes=0,seconds=3600)
as.numeric(dur, "minutes")


# Opticke jednotky
library(photobiology)
T2A(0.99, action = NULL, byref = FALSE, clean = TRUE) # transmitance na absorbanci
T2Afr(0.99, Rfr = 1/4, byref = FALSE, clean = TRUE) # transmitance na absorptanci (s danou mirou reflektance vzorku)
A2T(0.01, action = NULL, byref = FALSE, clean = TRUE) # absorbance na transmitanci


```


Plynný systém mění svůj objem o 1200 ml za konstantního vnějšího tlaku 30 atm. Jakou práci vykoná plyn při expanzi? Vyjádřete v různých energetických jednotkách.

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(measurements)

# W = p . dV
dV = conv_unit(1200, from="ml", to="m3"); dV
p = conv_unit(30, from="atm", to="Pa"); p
W = p*dV; W # [J]
W1 = conv_unit(W, from="J", to="cal"); W1 # [cal]
W2 = conv_unit(W, from="J", to="Wsec"); W2 # [W.s]
W3 = conv_unit(W, from="J", to="erg"); W3 # [erg]

```


Ocelová láhev o objemu 20.5 l je naplněna kyslíkem. Při 17 °C je tlak v láhvi 87 atm. Vypočítejte hmotnost kyslíku.

```{r}

library(marelac)
R = as.numeric(Constants$gasCt2[1]); R
Constants$gasCt2[2]
library(measurements)
P = conv_unit(87, from="atm", to="Pa"); P
Tk = conv_unit(17, from="C", to="K"); Tk
V = conv_unit(20.5, from="l", to="m3"); V
library(CHNOSZ)
M = mass("O2"); M # g/mol

m = P*V*M/(R*Tk)
m = ceiling(m); m # g
mk = conv_unit(m, from="g", to="kg")
mk = round(mk,2); mk # kg

paste("Hmotnost kyslíku je", m, "g, resp.", mk, "kg.")

```


Vypočítejte molekulovou hmotnost benzenu, váží-li 600 ml jeho par při 87 °C a tlaku 624 mm Hg 1.3 g.

```{r}

m = 1.3 # g
library(marelac)
R = as.numeric(Constants$gasCt2[1]); R
Constants$gasCt2[2]
library(measurements)
P = conv_unit(624, from="mmHg", to="Pa"); P
Tk = conv_unit(87, from="C", to="K"); Tk
V = conv_unit(600, from="ml", to="m3"); V

M = m*R*Tk/(P*V); M # g/mol

library(CHNOSZ)
Mb = mass("C6H6"); Mb # g/mol

paste("Zjištěná molární hmotnost benzenu je", round(M,0), "g/mol.")

```


Pokus trval celkem 7658 minut. Kolik je to dní, hodin a minut?

```{r echo=FALSE, message=FALSE, warning=FALSE}

tt = 7658 # [min]

library(lubridate)
tim = seconds_to_period(tt*60); tim
library(datetime)
tim = seconds_to_period(as.second(as.minute(tt))); tim

tn = regmatches(tim, gregexpr("[[:digit:]]+", tim))
tn = as.numeric(unlist(tn))
t1 = tn[1]
t2 = tn[2]
t3 = tn[3]
t4 = tn[4]
  
paste("Pokus trval", t1, "dní,", t2, "hodin,", t3, "minut a", t4, "sekund.")

```



Zaokrouhlování čísel na daný pocet desetinných míst

```{r echo=FALSE, message=FALSE, warning=FALSE}

round(1234.567,2)
round(123.456,digits=2)
ceiling(1234.567)
floor(1234.567)
trunc(1234.567)

library(guf)
round_something(123.456, decimals = 2)
round_something("123.456", decimals = 2)

library(PKNCA)
roundString(3141.59265, digits = 3, sci_range = 0, sci_sep = "e")
roundString(3141.59265, digits = 3, sci_range = 0, sci_sep = "x10^")
roundString(3141.59265, digits = 3, sci_range = Inf, sci_sep = "e")

# vektory
x <- c(sort(sample(1.765:20, 10)))
round(x,digits=2)
ceiling(x)
floor(x)
trunc(x)

library(ch)
Round(x, n=2)
Round2(x, n=2)


# matice

X = matrix(x,5,2,byrow = TRUE)
round(X,digits=2)
ceiling(X)
floor(X)
trunc(X)

Round(X, n=2)
Round2(X, n=2)

```


Nejistoty a chyby měření

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(errors)
xe <- set_errors(3.602, 0.008)
options(errors.notation = "plus-minus") 
print(xe, digits = 2)
options(errors.notation = "parenthesis")
print(xe, digits = 2)

# elementarni naboj
e <- set_errors(1.6021766208e-19, 0.0000000098e-19) 
options(errors.notation = "plus-minus") 
print(e, digits = 2)
options(errors.notation = "parenthesis")
print(e, digits = 3)

```


Ze zásilky kaprolaktamu bylo odebráno 10 vzorku a byl u nich stanoven bod tání. Vypočítejte průměrnou hodnotu bodu tání v zásilce a její směrodatnou odchylku.

```{r echo=FALSE, message=FALSE, warning=FALSE}

xc = c(68.5, 68.7, 68.3, 68.8, 68.5, 68.2, 68.6, 68.4, 68.2, 68.7)
mean(xc)
sd(xc) # sd
sd(xc)/sqrt(length(xc)) # str chyba prumeru

e <- set_errors(mean(xc), sd(xc)/sqrt(length(xc))) 
options(errors.notation = "plus-minus"); print(e, digits = 2)

```


Sireni chyb

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

# z prumeru a nejistoty, bez uvedení poctu stupnu volnosti, resp. poctu opakovani

x <- c(5, 0.01) 
y <- c(1, 0.01) 

EXPR1 <- expression(x/y) 
DF1 <- cbind(x, y)
RES1 <- propagate(expr = EXPR1, data = DF1, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000) 
RES1
RES1$data
RES1$prop
RES1$sim
summary(RES1)
plot(RES1)

EXPR <- expression(a^b*x)
a = c(5, 0.1)
b = c(10, 0.1)
x = c(1, 0.1)
DAT <- cbind(a, b, x)
(res <- propagate(EXPR, DAT))
res$data
res$prop
res$sim
summary(res)
plot(res)


# z prumeru a nejistoty, s uvedením poctu stupnu volnosti
EXPR2 <- expression(x/y) 
x <- c(5, 0.01, 12) 
y <- c(1, 0.01, 5) 
DF2 <- cbind(x, y) 
RES2 <- propagate(expr = EXPR2, data = DF2, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES2
RES2$data
RES2$prop
RES2$sim
summary(RES2)
plot(RES2)


# Výpocet pomocí intervalu 

EXPR3 <- expression(C * sqrt((520 * H * P)/(M *(t + 460))))
H <- c(64, 65)
M <- c(16, 16.2)
P <- c(361, 365)
t <- c(165, 170)
C <- c(38.4, 38.5)
DAT3 <- makeDat(EXPR3)
interval(DAT3, EXPR3, seq = 2)

EXPR5 <- expression(x^2 - x + 1)
x <- c(-2, 1)
curve(x^2 - x + 1, -2, 1)
DAT5 <- makeDat(EXPR5)
interval(DAT5, EXPR5, seq = 2)


library(metRology)

data(GUM.H.1)
GUM.H.1

## a simple uncertainty analysis for the product of two quantities
GUM(c("x1","x2"),c(2.3,1.1),c(0.030,0.015),c(5,9999),"x1*x2")

## a simple uncertainty analysis for the product of two quantities
GUM.validate(c("x1","x2"), c(2.3,1.1), c(0.030,0.015), c(5,9999), c("A","B"),c("Normal","Rectangular"),"x1*x2")


expr <- expression(a+b*2+c*3+d/2)
x <- list(a=1, b=3, c=2, d=11)
u <- lapply(x, function(x) x/10) # nejistota 10 %
u.expr<-uncert(expr, x, u, method="NUM")
u.expr
# function method
f <- function(a,b,c,d) a+b*2+c*3+d/2
u.fun<-uncert(f, x, u, method="NUM")
u.fun
# formula method
u.form<-uncert(~a+b*2+c*3+d/2, x, u, method="NUM")
u.form


# s korelaci
u.cor<-diag(1,4)
u.cor[3,4]<-u.cor[4,3]<-0.5
u.cor
# num
u.formc<-uncert(~a+b*2+c*3+d/2, x, u, method="NUM", cor=u.cor)
u.formc
# Monte Carlo
u.formc.MC<-uncert(~a+b*2+c*3+d/2, x, u, method="MC", cor=u.cor, B=200)
u.formc.MC


expr <- expression(a/(b-c))
x <- list(a=1, b=3, c=2)
u <- lapply(x, function(x) x/20)
set.seed(403)
u.invexpr<-uncertMC(expr, x, u, distrib=rep("norm", 3), B=999, keep.x=TRUE )
u.invexpr

```


Vypočítejte hustotu a její chybu pro látku, u níž byla opakovaným měřením stanovena hmotnost 6.824 (0.008) g a objem 3.03 (0.01) ml.

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

EXPR2 <- expression(m/V) 
m = c(6.824, 0.008) #[g] 
V = c(3.03, 0.01) #[ml]
DF2 <- cbind(m, V) 
RES2 <- propagate(expr = EXPR2, data = DF2, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES2
RES2$data
RES2$prop
RES2$sim
library(errors)
e <- set_errors(RES2$sim[1], RES2$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Na píst o průměru 200 (0.05) mm působí pára tlakem 8.2 (0.1) atm. Jakou silou působí pára na píst?

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
library(measurements)

d = c(200, 0.05) # [mm] na [m]
d = as.vector(conv_unit(c(200, 0.05), from="mm", to="m"))
p = c(8.2, 0.1)  # [atm] na [Pa]
p = as.vector(conv_unit(c(8.2, 0.1), from="atm", to="Pa"))
pi
EXPR7 <- expression(p*3.141593*(d/2)^2)
DF7 <- cbind(d, p) 
RES7 <- propagate(expr = EXPR7, data = DF7, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES7
RES7$data
RES7$prop
RES7$sim
library(errors)
e <- set_errors(RES7$sim[1], RES7$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Vypočítejte koeficient viskozity roztoku glycerinu Stokesovou metodou

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

r = c(0.0112, 0.0001) # polomer kulicky [cm]
l = c(31.23, 0.05) # draha kulicky za cas t [cm]
t = c(62.1, 0.2) # cas [s]
g = c(980.1,0) # tihove zrychleni [cm/s2] z tabulek
d0 = c(13.55,0) # hustota kulicky [g/cm3] z tabulek
d = c(1.28,0) # hustota roztoku [g/cm3] z tabulek
EXPR3 <- expression((2/9)*g*(((d0-d)*r^2)/l)*t)
DF3 <- cbind(r, l, t, g, d0, d) 
RES3 <- propagate(expr = EXPR3, data = DF3, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES3
RES3$data
RES3$prop
RES3$sim
EXPR4 <- expression((2/9)*980.1*(((13.55-1.28)*r^2)/l)*t)
DF4 <- cbind(r, l, t) 
RES4 <- propagate(expr = EXPR4, data = DF4, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES4$data
RES4$prop
RES4$sim
library(errors)
e <- set_errors(RES4$sim[1], RES4$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Vypočítejte koeficient viskozity roztoku glycerinu pomocí kapilárního viskozimetru.

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
library(measurements)

p = c(20.12, 0.01) # tlak na vytoku z kapilary [mm Hg] to [Pa]
p = as.vector(conv_unit(c(20.12, 0.01), from="mmHg", to="Pa"))
r = c(0.570, 0.003) # polomer kapilary [mm] to [m]
r = conv_unit(c(0.570, 0.003), from="mm", to="m")
l = c(10.526, 0.005) # delka kapilary [mm] to [m]
l = conv_unit(c(10.526, 0.005), from="mm", to="m")
V = c(5.025, 0.001)# objem kapaliny vytekle za cas t [cm3] to [m3]
V = conv_unit(c(5.025, 0.001), from="cm3", to="m3")
t = c(27.34, 0.02) # cas [s]
pi
EXPR5 <- expression((3.141593*p*(r^4)*t)/(8*V*l))
DF5 <- cbind(p, r, l, V, t) 
RES5 <- propagate(expr = EXPR5, data = DF5, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES5 # [kg / m.s]
RES5$data
RES5$prop
RES5$sim
# conv_multiunit(x = RES5$sim[1:2], from="kg / m", to="g / cm")
library(errors)
e <- set_errors(RES5$sim[1], RES5$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Součin rozpustnosti stříbrné soli AgX má hodnotu Ks = 4.0 (0.4) x 10^-8. Jaká je chyba vypočtené rovnovážné koncentrace stříbrných iontů ve vode?

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
EXPR <- expression(x^0.5)
x = c(4.0, 0.4)
DAT <- data.frame(x)
res <- propagate(EXPR,DAT)
# NEFUNGUJE pro jednu promennou.


library(metRology)

GUM("Ks",4.0e-8,0.4e-8,1,"sqrt(Ks)",sig.digits.U = 2) 

expr <- expression(a^0.5)
x <- list(a=4.0e-8)
u <- lapply(x, function(x) x/10) # nejistota 10 %
u.expr<-uncert(expr, x, u, method="NUM")
u.expr
# function method
f <- function(a) a^0.5
u.fun<-uncert(f, x, u, method="NUM")
u.fun
# formula method
u.form<-uncert(~a^0.5, x, u, method="NUM")
u.form

```


Nejistoty a korelace

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(errors)

x = c(0.9719378, 1.9840006, 2.9961830, 4.0123346, 5.0012799)
errors(x) = c(0.01, 0.01, 0.01, 0.01, 0.01)
y = c(0.9748992, 1.9627805, 2.9935831, 3.9921237, 4.9612555)
errors(y) = c(0.02, 0.02, 0.02, 0.02, 0.02)

# bez korelace
correl(x, y) =  c(0, 0, 0, 0, 0) 
z <- x / y; z

# s korelací
correl(x, y) =  c(0.8864282, 0.9761841, 0.9140209, 0.9496266, 0.9911837)
z_correlp <- x / y; z_correlp

correl(x, y) =  c(-0.8864282, -0.9761841, -0.9140209, -0.9496266, -0.9911837)
z_correln <- x / y; z_correln

```

