Kopra
This page is a study.
The page identifier is Op_en3052 |
|---|
| Moderator:Jouni (see all) |
|
|
| Upload data
|
Kopra was a research project about health impacts of fine particles in Finland.
Contents
Research question
Answer
Rationale
Data
←--#: . See N:\YMAL\Projects\R83_piltti filelist_kopra.txt for data list. --Jouni (talk) 14:12, 18 April 2017 (UTC) (type: truth; paradigms: science: defence)
Calculations
Mika's iF calculations
- This section is for documentation only. The codes do not run.
- The codes are from U:\arkisto_kuopio\huippuyksikko\Tutkimus\R19_kopra\Mallit\Mika\Concentration_Background (date 3.3.2006).
IF_kaikki.r
- Input: Used data from ..\R19_Kopra\Data\Model_Converted\ but this data was not used in the final calculations.
- Output: Two files IFConcentration_Backround[5|1]0km.txt
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
# PM2.5
# Concentration_Background
# Kaikki
pm25kaikki <- function(koko){
# 50x50 ja 10x10 ruudut & PM2.5
AlkuAika <- Sys.time()
SummaPixCi <- NULL
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\Concentration_Backround\\PM2.5\\"
if(koko==50){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\50km\\ciesin_center_63lon_50km_2",sep=""))
}
if(koko==10){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\10km\\ciesin_center_63lon_10km_2",sep=""))
}
for(i in 1:12){
if(koko==50){
tiedosto <- paste("Concentration_Background\\2.5\\joinfilelist_month",i,".joined.out",sep="")
}
if(koko==10){
tiedosto <- paste("Concentration_Background\\2.5\\joinfilelist_month",i,".joined.out.1",sep="")
}
PitoisuusData <- NULL
PitoisuusData <- read.table(paste(polku, tiedosto ,sep=""))
PitoisuusMatriisi <- NULL
for(j in 4:dim(PitoisuusData)[2])
PitoisuusMatriisi <- cbind(PitoisuusMatriisi, PitoisuusData[,j])
apu <- NULL
apu <- matrix(1,dim(PitoisuusMatriisi)[2],1)
PitoisuusVektori <- PitoisuusMatriisi%*%apu
SummaPixCi[i] <- (t(PitoisuusVektori)%*%PopulaatioData[,3])
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
# Q <- 3479.5265 Gg/vuosi
# Q <- 3479.5265 * 10^6/(365*24*60*60) kg/s
BR <- 20/(24 * 60 * 60)
# Luetaan joka maalle oma Q_i tiedostosta
# C:\omat\dataa\MaaKohtainenQ.csv ja lasketaan yhteen.
MaaKohtainenQ <- read.csv2("C:\\omat\\dataa\\MaaKohtainenQ.csv", header=FALSE)
Q <- sum(MaaKohtainenQ[,5])
IFConcentrationBackround <- NULL
for(i in 1:12)
IFConcentrationBackround[i] <- SummaPixCi[i]/(Q * 10^6/(365*24*60*60))* BR
if(koko==50){
TalletusKohde <- paste(talletuspolku,"IFConcentration_Backround50km.txt",sep="")
}
if(koko==10){
TalletusKohde <- paste(talletuspolku,"IFConcentration_Backround10km.txt",sep="")
}
write.table(IFConcentrationBackround, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
#rm(MaaKohtainenQ,Q, SummaPixCi, apu, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto,
#PitoisuusData, PitoisuusMatriisi, BR, IFConcentrationBackround, TalletusKohde)
}
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
# PM2.5-10
# Concentration_Background
# Kaikki
pm2510kaikki <- function(koko){
# 50x50 ja 10x10 ruudut & PM2.5-10
AlkuAika <- Sys.time()
SummaPixCi <- NULL
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\Concentration_Backround\\PM2.5-10\\"
if(koko==50){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\50km\\ciesin_center_63lon_50km_2",sep=""))
}
if(koko==10){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\10km\\ciesin_center_63lon_10km_2",sep=""))
}
for(i in 1:12){
if(koko==50){
tiedosto <- paste("Concentration_Background\\2.5-10\\joinfilelist_month",i,".joined.out",sep="")
}
if(koko==10){
tiedosto <- paste("Concentration_Background\\2.5-10\\joinfilelist_month",i,".joined.out.1",sep="")
}
PitoisuusData <- NULL
PitoisuusData <- read.table(paste(polku, tiedosto ,sep=""))
PitoisuusMatriisi <- NULL
for(j in 4:dim(PitoisuusData)[2])
PitoisuusMatriisi <- cbind(PitoisuusMatriisi, PitoisuusData[,j])
apu <- NULL
apu <- matrix(1,dim(PitoisuusMatriisi)[2],1)
PitoisuusVektori <- PitoisuusMatriisi%*%apu
SummaPixCi[i] <- (t(PitoisuusVektori)%*%PopulaatioData[,3])
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
# Q <- 3479.5265 Gg/vuosi
# Q <- 3479.5265 * 10^6/(365*24*60*60) kg/s
BR <- 20/(24 * 60 * 60)
# Luetaan joka maalle oma Q_i tiedostosta
# C:\omat\dataa\MaaKohtainenQ.csv ja lasketaan yhteen.
MaaKohtainenQ <- read.csv2("C:\\omat\\dataa\\MaaKohtainenQ.csv", header=FALSE)
Q <- sum(MaaKohtainenQ[,6])
IFConcentrationBackround <- NULL
for(i in 1:12)
IFConcentrationBackround[i] <- SummaPixCi[i]/(Q * 10^6/(365*24*60*60))* BR
if(koko==50){
TalletusKohde <- paste(talletuspolku,"IFConcentration_Backround50km.txt",sep="")
}
if(koko==10){
TalletusKohde <- paste(talletuspolku,"IFConcentration_Backround10km.txt",sep="")
}
write.table(IFConcentrationBackround, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
#rm(MaaKohtainenQ,Q, SummaPixCi, apu, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto,
#PitoisuusData, PitoisuusMatriisi, BR, IFConcentrationBackround, TalletusKohde)
}
|
IFmaille_erikseen.r
- Input: Used data from ..\R19_Kopra\Data\Model_Converted\ but this data was not used in the final calculations.
- Output: Two files maakohtainen_IFConcentration_Backround[5|1]0km.txt
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
# Luetaan ensin joka maalle oma Q_i tiedostosta
# C:\omat\dataa\MaaKohtainenQ.txt
#PM2.5
MaaKohtainenQ <- NULL
MaaKohtainenQ <- read.csv2("C:\\omat\\dataa\\MaaKohtainenQ.csv", header=FALSE)
Vaesto <- "Eurooppa"
HilaKoko <- 10
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
if(Vaesto == "Eurooppa"){
#Vaesto = Eurooppa
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\",HilaKoko,"km\\ciesin_center_63lon_", HilaKoko,"km_2",sep=""))
}
if(Vaesto == "Suomi"){
#Vaesto = Suomi
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Finland\\","fin_v00_",HilaKoko,"km.txt",sep=""))
}
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0,]
if(HilaKoko == 10) paate <- "out.1"
if(HilaKoko == 50) paate <- "out"
#Maakohtainen_Concentration_Background
AlkuAika <- Sys.time()
SummaPixCi <- NULL
talletuspolku <- "c:\\omat\\dataa\\Concentration_Backround\\PM2.5\\"
apu<-NULL
for(i in 1:12){
tiedosto<-paste("Concentration_Background\\2.5\\joinfilelist_month",i,".joined.",paate,sep="")
apuPitData <- NULL
apuPitData <- read.table(paste(polku, tiedosto,sep=""))
PitoisuusData <- NULL
PitoisuusData <- apuPitData[PopulaatioData[,3]!=0,]
# Yhdistetään Saksat Saksaksi ja Venäjän alueet Venäjäksi. Sekä poistetaan LO, LA ja All
PitoisuusMatriisi <- cbind(PitoisuusData[,4:18],PitoisuusData[,19] + PitoisuusData[,20],
PitoisuusData[,21:40], PitoisuusData[,41]+ PitoisuusData[,42]+PitoisuusData[,43]+PitoisuusData[,44],
PitoisuusData[,45:49])
apu <- (t(PitoisuusMatriisi)%*%apuPD[,3])
SummaPixCi <- rbind(SummaPixCi,t(apu))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
# Q <- 3479.5265 Gg/vuosi
# Q <- 3479.5265 * 10^6/(365*24*60*60) kg/s
BR <- 20/(24 * 60 * 60)
maakohtainenIFConcentrationBackround <- NULL
#PM2.5 on Q taulussa sarakkeessa 5
for(i in 1:12)
maakohtainenIFConcentrationBackround <-
rbind(maakohtainenIFConcentrationBackround,(SummaPixCi[i,]/(t(MaaKohtainenQ[,5]) * 10^6/(365*24*60*60))) * BR)
TalletusKohde <- paste(talletuspolku,"maakohtainen_IFConcentration_Backround_",HilaKoko,"km_",Vaesto,".txt",sep="")
write.table(maakohtainenIFConcentrationBackround, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
rm(MaaKohtainenQ, SummaPixCi50km, apu, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto,
PitoisuusData, PitoisuusMatriisi, BR, maakohtainenIFConcentrationBackround50km, TalletusKohde)
#----------------------------------------------------------------------
# Piirto PM2.5 maat erikseen
Vaesto <- "Suomi"
yAkseliYlaraja <- 4*10^(-7)
IFmat10<-
read.table(paste("c:\\omat\\dataa\\concentration_backround\\PM2.5\\maakohtainen_IFConcentration_Backround_10km_",
Vaesto,".txt",sep=""))
IFmat50<-
read.table(paste("c:\\omat\\dataa\\concentration_backround\\PM2.5\\maakohtainen_IFConcentration_Backround_50km_",
Vaesto,".txt",sep=""))
maat <- read.table("c:\\omat\\dataa\\maat.txt")
postscript(file=
paste("c:\\omat\\dataa\\concentration_backround\\PM2.5\\maaterikseen_",Vaesto,".ps",sep=""),
width=7,height=15,horizontal=F)
# par(mfrow = c(2,1))
for(i in 1:42){
maa <- paste(maat[i+1,1], maat[i+1,2],sep=", ")
plot(c(1:12),IFmat10[,i],type="b", xlim=c(1,12), ylim=c(0, yAkseliYlaraja),xlab="kuukausi",
ylab="IF 10km (punainen) ja 50km (musta)", col=rgb(1,0,0), main=maa)
par(new=T)
plot(c(1:12),IFmat50[,i],type="b", xlim=c(1,12), ylim=c(0, yAkseliYlaraja),xlab="kuukausi",
ylab="IF 10km (punainen) ja 50km (musta)", col=rgb(0,0,0), main=maa)
}
dev.off()
#---------------------------------------------------------
#---------------------
pm2510 <- function(koko){
# 50x50 ja 10x10 ruudut & PM2.5-10
AlkuAika <- Sys.time()
# Luetaan ensin joka maalle oma Q_i tiedostosta
# C:\omat\dataa\MaaKohtainenQ.txt
MaaKohtainenQ <- read.csv2("C:\\omat\\dataa\\MaaKohtainenQ.csv", header=FALSE)
SummaPixCi <- NULL
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\Concentration_Backround\\PM2.5-10\\"
if(koko==50){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\50km\\ciesin_center_63lon_50km_2",sep=""))
}
if(koko==10){
PopulaatioData <- NULL
PopulaatioData <-read.table(paste(polku,"Population_Europe\\10km\\ciesin_center_63lon_10km_2",sep=""))
}
apu<-NULL
for(i in 1:12){
if(koko==50){
tiedosto <- paste("Concentration_Background\\2.5-10\\joinfilelist_month",i,".joined.out",sep="")
}
if(koko==10){
tiedosto <- paste("Concentration_Background\\2.5-10\\joinfilelist_month",i,".joined.out.1",sep="")
}
PitoisuusData <- NULL
PitoisuusData <- read.table(paste(polku, tiedosto ,sep=""))
# Yhdistetään Saksat Saksaksi ja Venäjän alueet Venäjäksi. Sekä poistetaan LO, LA ja All
PitoisuusMatriisi <- cbind(PitoisuusData[,4:18],PitoisuusData[,19] + PitoisuusData[,20],
PitoisuusData[,21:40], PitoisuusData[,41]+ PitoisuusData[,42]+PitoisuusData[,43]+PitoisuusData[,44],
PitoisuusData[,45:49])
apu <- (t(PitoisuusMatriisi)%*%PopulaatioData[,3])
SummaPixCi <- rbind(SummaPixCi,t(apu))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
# Q <- 3479.5265 Gg/vuosi
# Q <- 3479.5265 * 10^6/(365*24*60*60) kg/s
BR <- 20/(24 * 60 * 60)
maakohtainenIFConcentrationBackround <- NULL
for(i in 1:12)
maakohtainenIFConcentrationBackround <- rbind(maakohtainenIFConcentrationBackround,(SummaPixCi[i,]/(t(MaaKohtainenQ[,6]) * 10^6/(365*24*60*60))) * BR)
if(koko==50){
TalletusKohde <- paste(talletuspolku,"maakohtainen_IFConcentration_Backround50km.txt",sep="")
}
if(koko==10){
TalletusKohde <- paste(talletuspolku,"maakohtainen_IFConcentration_Backround10km.txt",sep="")
}
write.table(maakohtainenIFConcentrationBackround, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
#rm(MaaKohtainenQ, SummaPixCi, apu, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto,
#PitoisuusData, PitoisuusMatriisi, BR, maakohtainenIFConcentrationBackround, TalletusKohde)
}
#---------------------
|
- Code from U:\arkisto_kuopio\huippuyksikko\Tutkimus\R19_kopra\Mallit\Mika\Concentration_Finland (date 1.3.2006)
PM2_5Erikseen.r
- Input: Used data from ..\R19_Kopra\Data\Model_Converted\ but this data was not used in the final calculations.
- Output: Two files IFConcentration_Backround[5|1]0km.txt
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
#PM2.5 Erikseen DOM, OTH, TRA, AGR,...
#Concentration_Finland
AlkuAika <- Sys.time()
PaastoLahde <- "AGR"
HilaKoko <- "10"
Vaesto <- "Eurooppa"
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- paste("c:\\omat\\dataa\\Concentration_Finland\\",PaastoLahde,"\\", sep="")
Qtaulu <- NULL
Qtaulu <- read.table(paste("N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Origin\\Emission_Silam_massbudget\\",
"Suomi","PM25Q.txt",sep=""))
if(Vaesto == "Eurooppa"){
#Vaesto = Eurooppa
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\",HilaKoko,"km\\ciesin_center_63lon_", HilaKoko,"km_2",sep=""))
}
if(Vaesto == "Suomi"){
#Vaesto = Suomi
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Finland\\","fin_v00_",HilaKoko,"km.txt",sep=""))
}
SummaPixCi <- NULL
apu <- NULL
Pitoisuus <- NULL
#Paasto <- NULL
IFConcentration <-NULL
TalletusKohde <- NULL
Q <- NULL
#tiedosto <- "Emission_grads\\fmsyke_data_joined_original_hila"
#Paasto <- read.table(paste(polku, tiedosto, sep=""))
#AGR:ssä vain 2 saraketta
#Q <- Paasto[,14] + Paasto[,20]
#Q <- Paasto[,12] + Paasto[,18] + Paasto[,24]
tiedosto <- paste("Concentration_Finland\\", HilaKoko,"km\\pm_0.1\\joinfilelist_PM_", PaastoLahde,".joined.out", sep="")
pm01 <- read.table(paste(polku, tiedosto, sep=""))
tiedosto <- paste("Concentration_Finland\\", HilaKoko,"km\\pm_0.1_1\\joinfilelist_PM_", PaastoLahde,".joined.out", sep="")
pm011 <- read.table(paste(polku, tiedosto, sep=""))
tiedosto <- paste("Concentration_Finland\\", HilaKoko,"km\\pm_1_2.5\\joinfilelist_PM_", PaastoLahde,".joined.out", sep="")
pm125 <- read.table(paste(polku, tiedosto, sep=""))
apu <- pm01 + pm011 + pm125
Pitoisuus <- cbind(Pitoisuus,apu[,3])
for( i in 2:9) Pitoisuus <- cbind(Pitoisuus,apu[,(i + 2 + 3)])
for( i in 10:12) Pitoisuus <- cbind(Pitoisuus,apu[,(i + 2 - 8)])
for(i in 1:12){
SummaPixCi[i] <- sum(PopulaatioData[,3]*Pitoisuus[,i])
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
#Q Kiloa sekunnissa
Q <- sum(Qtaulu[PaastoLahde==Qtaulu[,1],2:4])*(365/372)/(365*24*60*60)
IFConcentration <- SummaPixCi * BR/Q
TalletusKohde <- paste(talletuspolku,Vaesto,"_",HilaKoko,"km.txt",sep="")
write.table(IFConcentration, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
#rm(apu, SummaPixCi50km, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto,
#PitoisuusData, Q, BR, IFConcentration_FinlandAGR50km, TalletusKohde,PitoisuusAGR)
#-----------------------------------
# Kuvien piirto
#PaastoLahde <- "TRA"
piirtopolku <- paste("c:\\omat\\dataa\\Concentration_Finland\\",PaastoLahde,"\\", sep="")
postscript(file=paste(piirtopolku,"IF_kuva_",Vaesto,".ps", sep=""), width=10,height=10)#,horizontal=F)
IFmat10<-read.table(paste(piirtopolku,Vaesto,"_10km.txt", sep=""))
IFmat50<-read.table(paste(piirtopolku,Vaesto,"_50km.txt", sep=""))
plot(c(1:12),IFmat10[,1],type="b", xlim=c(1,12), ylim=c(0,1.2*10^(-6)),xlab="kuukausi", ylab="IF 10km ja 50 km (50km on musta)", col=rgb(1,0,0))
par(new=T)
plot(c(1:12),IFmat50[,1],type="b", xlim=c(1,12), ylim=c(0,1.2*10^(-6)),xlab="kuukausi", ylab="IF 10km ja 50 km (50km on musta)", col=rgb(0,0,0))
# musta on 0,0,0
dev.off()
|
- Codes from U:\arkisto_kuopio\huippuyksikko\Tutkimus\R19_kopra\Mallit\Mika\Concentration_Point (dates 10.11.2005 - 16.6.2006)
R_Kopra.r (10.11.2005)
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
#--------------
# Concentration_Point
# 50x50 ruudut
AlkuAika <- Sys.time()
SummaPixCi50km <- matrix(nrow=12,ncol=18)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\concentration_point\\"
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\50km\\ciesin_center_63lon_50km_2",sep=""))
for(i in 1:12){
tiedosto1<-paste("joinfilelist_",i,"_PM_0_1.joined.out",sep="")
tiedosto2<-paste("joinfilelist_",i,"_PM_0_1_1.joined.out",sep="")
tiedosto3<-paste("joinfilelist_",i,"_PM_1_2_5.joined.out",sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData <- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
for(j in 1:18)
SummaPixCi50km[i,j] <- sum( PM2.5PitoisuusData[,(j+2)] * PopulaatioData[,3] )
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IFConcentrationPoint50km <- SummaPixCi50km * BR/Q
TalletusKohde <- paste(talletuspolku,"IFConcentrationPoint50km.txt",sep="")
write.table(IFConcentrationPoint50km, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
rm(SummaPixCi50km, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto1, tiedosto2, tiedosto3, PitoisuusData1, PitoisuusData2, PitoisuusData3, PM2.5PitoisuusData, Q, BR, IFConcentrationPoint50km, TalletusKohde)
#-----------------------------
# 10x10 ruudut
AlkuAika <- Sys.time()
SummaPixCi10km <- matrix(nrow=12,ncol=18)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\concentration_point\\"
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\10km\\ciesin_center_63lon_10km_2",sep=""))
for(i in 1:12){
tiedosto1<-paste("joinfilelist_",i,"_PM_0_1.joined.out.1",sep="")
tiedosto2<-paste("joinfilelist_",i,"_PM_0_1_1.joined.out.1",sep="")
tiedosto3<-paste("joinfilelist_",i,"_PM_1_2_5.joined.out.1",sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData <- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
for(j in 1:18)
SummaPixCi10km[i,j] <- sum( PM2.5PitoisuusData[,(j+2)] * PopulaatioData[,3] )
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IFConcentrationPoint10km <- SummaPixCi10km * BR/Q
TalletusKohde <- paste(talletuspolku,"IFConcentrationPoint10km.txt",sep="")
write.table(IFConcentrationPoint10km, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
rm(SummaPixCi10km, polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto1, tiedosto2, tiedosto3, PitoisuusData1, PitoisuusData2, PitoisuusData3, PM2.5PitoisuusData, Q, BR, IFConcentrationPoint10km, TalletusKohde)
|
Distance_piirto.r (25.1.2006)
#-----------------------------------------------------------------------
#Maan pinnalla sijaitsevien pisteiden etäisyyden laskeva funktio
#-----------------------------------------------------------------------
#maan säde n. 6371 km
Etaisyys <- function(sade, p1LO, p1LA, p2LO, p2LA)
{
piste1LA <- p1LA * (2*pi/360)
piste1LO <- p1LO * (2*pi/360)
piste2LA <- p2LA * (2*pi/360)
piste2LO <- p2LO * (2*pi/360)
#pallokoorinaatistoa käyttäen
SuoraValiMatka <- sade * sqrt( (cos(piste1LO)*cos(piste1LA) - cos(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LO)*cos(piste1LA) - sin(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LA) - sin(piste2LA))^2 )
#cosini lause
Kulma <- acos(1 - SuoraValiMatka^2/(2*sade^2))
#kaaren pituus on kulma(radiaaneina)*säde
sade * Kulma
}
#----------------------------------------------------------------------------
# PopulaatioData siirtävä funktio
#-------------------------------------------------------------------------
LohkoPituus <- 354
Lohkoja <- dim(PopulaatioData)[1]/LohkoPituus
# PD <- PDSiirto(0,0,2,0,PopulaatioData, Lohkoja, LohkoPituus)
PDSiirto <- function(poh, ita, ete, lan, PopulaatioData, Lohkoja, LohkoPituus){
UusiPD <- NULL
UusiPD <- PopulaatioData
#Siirto etelään
if(ete > 0){
#Siirretään dataa
for( i in 1:(Lohkoja-ete)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i + ete - 1)*LohkoPituus + 1):((i+ete)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:ete){
UusiPD[((Lohkoja-ete)*LohkoPituus+1):((Lohkoja - ete +1)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(lan > 0){
#Siirto länteen
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(apu1[(1+lan):LohkoPituus],rep(0,lan))))
}
}
if(poh > 0){
#Siirto pohjoiseen
#Siirretään dataa
for( i in (poh + 1):(Lohkoja)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i-poh)*LohkoPituus + 1):((i-poh+1)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:poh){
UusiPD[((i-1)*LohkoPituus+1):((i)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(ita > 0){
#Siirto itään
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(rep(0,ita),apu1[1:(LohkoPituus - ita)])))
}
}
UusiPD
}
#-----------------------------------------------------------
#Lähimpien Ruutujen etsintä
#-----------------------------------------------------------
# Annetaan pisteen Lo ja La koordinaatit, piste itse, Populaatio data ja Pienhiukkasdata.
# Viimeisin annetaan, jotta ruutujen määrää voidaan vähentää.
#-----------------------------------------------------------
LahimmatRuudut <- function(LO,LA, PD, PM, Piste){
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
apuPD <- NULL
apuPD <- PD[PD[,3]!=0 & (PM[,(1 + 2*Piste)]!=0 | PM[,(2 + 2*Piste)]!=0),]
apu1 <- NULL
#Sade 50 km
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2])) <= 50 &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays)) <= 50)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2])) <= 50 &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays)) <= 50)
}
}
apuPD <- apuPD[apu1,]
apu2 <- NULL
apu2 <- rep(FALSE,(dim(apuPD)[1]))
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] <= LO & apuPD[k,2] <= LA) &
(LO < (apuPD[k,1] + LOLisays) & LA < (apuPD[k,2] + LALisays)) )
{
apu2[k] <- (1==1)
Ruutu <- k
}
}
for(k in 1:dim(apuPD)[1]){
if
(
((apuPD[Ruutu,1]-LOLisaysArvio)<= apuPD[k,1]) & (apuPD[k,1] <= (apuPD[Ruutu,1]+LOLisaysArvio)) &
((apuPD[Ruutu,2]-LALisaysArvio) <= apuPD[k,2]) & (apuPD[k,2] <= (apuPD[Ruutu,2]+LALisaysArvio))
)
{
apu2[k] <- (1==1)
if(length(apu2[apu2]) == 9){ k <- dim(apuPD)[1] + 1}
}
}
apu2
}
#------------------------------------------------------
# IF-datan piirtävä koodi
#------------------------------------------------
#polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
polku <- "c:\\omat\\dataa\\concentration_point\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
SadeLisays <- 50
PieninSade <- 50
MaxSade <- 1500
for(i in 1:1){
Piste <- i
#data <- paste(polku,"IF_Piste_",Piste,"_Distance.txt",sep="")
data <- paste(polku,"IF_Piste_",Piste,"_Distance_Siirretty_kk3.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance_alle_50.txt",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,".ps",sep="")
kohde <- paste(talletuspolku, "Piste_",Piste,"_Siirretty_kk3.ps",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,"_alle_50.ps",sep="")
postscript(file=kohde, width=10,height=10,horizontal=F)
IFDist<-read.table(data)
xAkseli <- seq(PieninSade, MaxSade, by=SadeLisays)
for(kk in 1:1){
yAkseliHI <- NULL
yAkseliLO <- NULL
for(y in 1:(dim(IFDist)[2]/2)){
yAkseliHI[y] <- IFDist[kk,(2*y - 1)]
yAkseliLO[y] <- IFDist[kk,(2*y)]
}
plot(xAkseli,yAkseliHI, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, 2.5*10^(-6)),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(1,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
par(new=T)
plot(xAkseli,yAkseliLO, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, 2.5*10^(-6)),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(0,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
}
# musta on 0,0,0
dev.off()
}
#-------------------------------------------------------------------------------------------------------------
#Perustaso
DataRuudut <- 10
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
SadeLisays <- 50
PieninSade <- 50
MaxSade <- 50
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
PisteKK <- c(25,60,22,60.5,22,63,26,62,30,63,24.5,65,29.5,65,24,67.5,28,69)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
for( Piste in 1:1){
LO <- PisteKK[(2*Piste-1)]
LA <- PisteKK[(2*Piste)]
SummaPixCi <- NULL
# Seuraavassa loopissa kk on kuukausi
for(kk in 1:12){
tiedosto1<-paste("joinfilelist_",kk,"_PM_0_1.joined", paate,sep="")
tiedosto2<-paste("joinfilelist_",kk,"_PM_0_1_1.joined", paate,sep="")
tiedosto3<-paste("joinfilelist_",kk,"_PM_1_2_5.joined", paate,sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData<- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
apuPM <- NULL
apuPM <- PM2.5PitoisuusData[(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0)
& PopulaatioData[,3]!=0,]
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0 &
(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0),]
apuHI <- NULL
apuLO <- NULL
apuSumma <- NULL
#apu1 <- rep(FALSE, dim(apuPD)[1])
for(Sade in seq(MaxSade, PieninSade, by= -SadeLisays )){
apu1 <- NULL
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2])) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays)) < Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2])) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays)) < Sade)
}
}
apuPM <- apuPM[apu1,]
apuPD <- apuPD[apu1,]
}
#-------------------------------------------------------
#Viimeisten ruutujen etsintä
apu2 <- NULL
apu2 <- LahimmatRuudut(LO,LA, apuPD, apuPM, Piste)
apuPM <- apuPM[apu2,]
apuPD <- apuPD[apu2,]
#------------------------------------------------------------------
apuHI[1] <- sum( apuPM[,(1 + 2*Piste)] * apuPD[,3] )
apuLO[1] <- sum( apuPM[,(2 + 2*Piste)] * apuPD[,3] )
apuSumma[1] <- apuHI[1]
apuSumma[2] <- apuLO[1]
SummaPixCi <- rbind(SummaPixCi, t(apuSumma))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IF <- SummaPixCi * BR/Q
TalletusKohde <- paste(talletuspolku,"IF_Piste_",Piste,"_Perus_Distance.txt",sep="")
write.table(IF, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
|
Distance.r (17.2.2006) Codes varaDistance.r (31.1.2006) and varmuuskopioDistance.r (13.2.3006) omitted.
#-----------------------------------------------------------------------
#Maan pinnalla sijaitsevien pisteiden etäisyyden laskeva funktio
#-----------------------------------------------------------------------
#maan säde n. 6371 km
#jos laskutapa on 1, niin lasketaan 2 pisteen välimatka pallon pintaa pitkin
# jos laskutapa =2, niin lasketaan pisteiden (p1LO, p1LA) ja (p2LO, p2LA) euklidinen etäisyys,
# tällöin säteellä ei ole merkitystä
Etaisyys <- function(sade, p1LO, p1LA, p2LO, p2LA, laskutapa)
{
if(laskutapa == 1){
piste1LA <- p1LA * (2*pi/360)
piste1LO <- p1LO * (2*pi/360)
piste2LA <- p2LA * (2*pi/360)
piste2LO <- p2LO * (2*pi/360)
#pallokoorinaatistoa käyttäen
SuoraValiMatka <- sade * sqrt( (cos(piste1LO)*cos(piste1LA) - cos(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LO)*cos(piste1LA) - sin(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LA) - sin(piste2LA))^2 )
#cosini lause
Kulma <- acos(1 - SuoraValiMatka^2/(2*sade^2))
#kaaren pituus on kulma(radiaaneina)*säde
tulos <- sade * Kulma
}
if(laskutapa == 2)
{
tulos <- sqrt((p1LO - p2LO)^2 + (p1LA - p2LA)^2)
}
tulos
}
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
#----------------------------------------------------------------------------
# PopulaatioData siirtävä funktio
#-------------------------------------------------------------------------
LohkoPituus <- 354
Lohkoja <- dim(PopulaatioData)[1]/LohkoPituus
# sPD <- PDSiirto(0,0,2,0,PopulaatioData, Lohkoja, LohkoPituus)
PDSiirto <- function(poh, ita, ete, lan, PopulaatioData, Lohkoja, LohkoPituus){
UusiPD <- NULL
UusiPD <- PopulaatioData
#Siirto etelään
if(ete > 0){
#Siirretään dataa
for( i in 1:(Lohkoja-ete)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i + ete - 1)*LohkoPituus + 1):((i+ete)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:ete){
UusiPD[((Lohkoja-ete)*LohkoPituus+1):((Lohkoja - ete +1)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(lan > 0){
#Siirto länteen
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(apu1[(1+lan):LohkoPituus],rep(0,lan))))
}
}
if(poh > 0){
#Siirto pohjoiseen
#Siirretään dataa
for( i in (poh + 1):(Lohkoja)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i-poh)*LohkoPituus + 1):((i-poh+1)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:poh){
UusiPD[((i-1)*LohkoPituus+1):((i)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(ita > 0){
#Siirto itään
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(rep(0,ita),apu1[1:(LohkoPituus - ita)])))
}
}
UusiPD
}
PData <- LahimmatRuudut(25,60.08,PopulaatioData,1, 58, 65)
apuri <- PopulaatioData[58 <= PopulaatioData[,2] & PopulaatioData[,2] <= 65, ]
apuri[PData,]
PData
#-----------------------------------------------------------
#Lähimpien Ruutujen etsintä
#-----------------------------------------------------------
# Annetaan pisteen Lo ja La koordinaatit, piste itse, Populaatio data ja Pienhiukkasdata.
# Viimeisin annetaan, jotta ruutujen määrää voidaan vähentää.
# Voidaan myös rajata antamalla alaraja ja yläraja Latitudelle
#-----------------------------------------------------------
LahimmatRuudut <-function(LO,LA, PD, Sade,Sateella, LAalaraja, LAylaraja){
#function(LO,LA, PD, PM, Piste){
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
apuPD <- NULL
#apuPD <- PD[PD[,3]!=0 & (PM[,(1 + 2*Piste)]!=0 | PM[,(2 + 2*Piste)]!=0),]
#apuPD <- PD[PD[,3]!=0 & LAalaraja <= PD[,2] & PD[,2] <= LAylaraja,]
apuPD <- PD[LAalaraja <= PD[,2] & PD[,2] <= LAylaraja,]
apu2 <- NULL
if(Sateella==1){
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu2[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) <= Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) <= Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu2[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) <= Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) <= Sade)
}
}
#apuPD <- apuPD[apu2,]
}
if(Sateella==0)
{
apu2 <- rep(FALSE,(dim(apuPD)[1]))
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] <= LO & apuPD[k,2] <= LA) &
(LO < (apuPD[k,1] + LOLisays) & LA < (apuPD[k,2] + LALisays)) )
{
apu2[k] <- (1==1)
Ruutu <- k
}
}
for(k in 1:dim(apuPD)[1]){
if
(
((apuPD[Ruutu,1]-LOLisaysArvio)<= apuPD[k,1]) & (apuPD[k,1] <= (apuPD[Ruutu,1]+LOLisaysArvio)) &
((apuPD[Ruutu,2]-LALisaysArvio) <= apuPD[k,2]) & (apuPD[k,2] <= (apuPD[Ruutu,2]+LALisaysArvio))
)
{
apu2[k] <- (1==1)
if(length(apu2[apu2]) == 9){ k <- dim(apuPD)[1] + 1}
}
}
}
apuPD[apu2,]
}
#------------------------------------------------------
# IF-datan piirtävä koodi
#------------------------------------------------
#polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
#polku <- "c:\\omat\\dataa\\concentration_point\\"
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
SadeLisays <- 50
PieninSade <- 50
MaxSade <- 1700
for(i in 1:1){
Piste <- i
data <- paste(polku,"IF_Piste_",Piste,"_Distance.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance_alle_50.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance_Siirretty.txt",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,".ps",sep="")
kohde <- paste(talletuspolku, "Piste_",Piste,"_Siirretty.ps",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,"_alle_50.ps",sep="")
postscript(file=kohde, width=10,height=10,horizontal=F)
IFDist<-read.table(data)
xAkseli <- seq(PieninSade, MaxSade, by=SadeLisays)
for(kk in 1:12){
yAkseliHI <- NULL
yAkseliLO <- NULL
for(y in 1:(dim(IFDist)[2]/2)){
yAkseliHI[y] <- IFDist[kk,(2*y - 1)]
yAkseliLO[y] <- IFDist[kk,(2*y)]
}
plot(xAkseli,yAkseliHI, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, 5*10^(-6)),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(1,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
par(new=T)
plot(xAkseli,yAkseliLO, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, 5*10^(-6)),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(0,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
}
# musta on 0,0,0
dev.off()
}
#-------------------------------------------------------------------------------------------------------------
DataRuudut <- 10
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
SadeLisays <- 50
PieninSade <- 50
MaxSade <- 1700
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
PisteKK <- c(25,60,22,60.5,22,63,26,62,30,63,24.5,65,29.5,65,24,67.5,28,69)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
PopulaatioData <- sPD
for( Piste in 1:1){
LO <- PisteKK[(2*Piste-1)]
LA <- PisteKK[(2*Piste)]
SummaPixCi <- NULL
# Seuraavassa loopissa kk on kuukausi
for(kk in 1:12){
tiedosto1<-paste("joinfilelist_",kk,"_PM_0_1.joined", paate,sep="")
tiedosto2<-paste("joinfilelist_",kk,"_PM_0_1_1.joined", paate,sep="")
tiedosto3<-paste("joinfilelist_",kk,"_PM_1_2_5.joined", paate,sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData<- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
apuPM <- NULL
apuPM <- PM2.5PitoisuusData[(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0)
& PopulaatioData[,3]!=0,]
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0 &
(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0),]
apuHI <- NULL
apuLO <- NULL
apuSumma <- NULL
#apu1 <- rep(FALSE, dim(apuPD)[1])
sadeindeksi <- 0
for(Sade in seq(MaxSade, PieninSade, by= -SadeLisays )){
apu1 <- NULL
sadeindeksi <- sadeindeksi + 1
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) < Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) < Sade)
}
}
apuPM <- apuPM[apu1,]
apuPD <- apuPD[apu1,]
apuHI[sadeindeksi] <- sum( apuPM[,(1 + 2*Piste)] * apuPD[,3] )
apuLO[sadeindeksi] <- sum( apuPM[,(2 + 2*Piste)] * apuPD[,3] )
aputaulu <- c(Sade, dim(apuPD)[1])
TalletusKohde <- paste(talletuspolku,"Piste_",Piste,"\\IF_Piste_",Piste,"_kk_",kk,"_Sade_",Sade,"_Distance.txt",sep="")
write.table(t(aputaulu), file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
#-------------------------------------------------------
#Viimeisten ruutujen etsintä
#apu2 <- NULL
#apu2 <- LahimmatRuudut(LO,LA, apuPD, apuPM, Piste)
#apuPM <- apuPM[apu2,]
#apuPD <- apuPD[apu2,]
#apuHI[1] <- sum( apuPM[,(1 + 2*Piste)] * apuPD[,3] )
#apuLO[1] <- sum( apuPM[,(2 + 2*Piste)] * apuPD[,3] )
#apuSumma[1] <- apuHI[1]
#apuSumma[2] <- apuLO[1]
#------------------------------------------------------------------
ylaraja <- length(apuHI)
for(i in 1: ylaraja){
apuSumma[(2*i - 1)] <- apuHI[(ylaraja - i + 1)]
apuSumma[2*i] <- apuLO[(ylaraja - i + 1)]
}
SummaPixCi <- rbind(SummaPixCi, t(apuSumma))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IF <- SummaPixCi * BR/Q
TalletusKohde <- paste(talletuspolku,"IF_Piste_",Piste,"_Distance.txt",sep="")
write.table(IF, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
#----------------------------------------------------------
#Kolmion pinta-ala, kun tiedetään sivujen pituudet
HeronAla <- function(a,b,c){
p <- (a+b+c)/2
sqrt(p*(p-a)*(p-b)*(p-c))
}
KantaKorkeus <- function(k, h){
1/2 * k * h
}
#--------------------------------------------------------------------------
# Voi tulla ongelmia, jos piste on kulmapisteiden välisellä janalla !
# Jos palautetun vektorin 1. koordinaatti on 1, niin tarkasteltavan
# kolmion tilavuus on nolla. Muutoin ensimmäinen koordinaatti on 1, 2. koord.
# on A pisteen x-koord, 3. koord. on A pisteen y-koord., ..., 8. koord. on 1 jos
# piste on kolmion sisällä, muutoin 8. koord on nolla.
KolmionSisalla <- function(x1,x2,D1,D2,E1,E2,F1,F2){
xvek <- c(D1,E1,F1)
yvek <- c(D2,E2,F2)
jarjvek <- NULL
paha <- 0
#Huonot tapaukset
#pisteiden D ja E kautta kulkeva suora -> testataan ovatko pisteet samalla suoralla
if(xvek[1] != xvek[2]){
k <- (yvek[2] - yvek[1])/(xvek[2] - xvek[1])
y <- k*(xvek[3] - xvek[1]) + yvek[1]
if(yvek[3] == y){ paha <- 1}
}
# Kaksi pistettä samat tai samalla vaakasuoralla tai samalla pystysuoralla
if( (xvek[1] == xvek[2] & yvek[1] == yvek[2]) |
(xvek[1] == xvek[3] & yvek[1] == yvek[3]) |
(xvek[2] == xvek[3] & yvek[2] == yvek[3]) |
(xvek[1] == xvek[2] & xvek[1] == xvek[3]) |
(yvek[1] == yvek[2] & yvek[1] == yvek[3])
)
{
paha <- 1
}
jarjvek[1] <- paha
if(paha == 0)
{
apu1 <- min(xvek)
if( length(xvek[xvek==apu1])==1)
{
jarjvek[2] <- xvek[xvek == apu1]
jarjvek[3] <- yvek[xvek == apu1]
apu2 <- max(yvek[xvek != apu1])
if( length(yvek[(xvek!= apu1 & yvek == apu2)]) ==1)
{
jarjvek[4] <- xvek[(xvek!= apu1 & yvek == apu2)]
jarjvek[5] <- yvek[(xvek!= apu1 & yvek == apu2)]
jarjvek[6] <- xvek[(xvek!= apu1 & yvek != apu2)]
jarjvek[7] <- yvek[(xvek!= apu1 & yvek != apu2)]
}
if( length(yvek[(xvek!= apu1 & yvek == apu2)]) ==2)
{
apu3 <- min(xvek[xvek!= apu1])
jarjvek[4] <- xvek[(xvek!= apu1 & xvek == apu3)]
jarjvek[5] <- yvek[(xvek!= apu1 & xvek == apu3)]
jarjvek[6] <- xvek[(xvek!= apu1 & xvek != apu3)]
jarjvek[7] <- yvek[(xvek!= apu1 & xvek != apu3)]
}
#Jos piste C on janan AB yläpuolella, niin vaihdetaan B ja C
janaT <- NULL
janaT[1] <- (jarjvek[6] - jarjvek[2])/(jarjvek[4] - jarjvek[2])
janaY <- NULL
janaY[1] <- jarjvek[5] * janaT[1] + (1 - janaT[1])* jarjvek[3]
if(jarjvek[7] > janaY[1]){
apu4 <- jarjvek
jarjvek[4:5] <- apu4[6:7]
jarjvek[6:7] <- apu4[4:5]
}
}
if( length(xvek[xvek==apu1])==2)
{
apu2 <- min(yvek[xvek == apu1])
jarjvek[2] <- xvek[(xvek == apu1 & yvek == apu2)]
jarjvek[3] <- yvek[(xvek == apu1 & yvek == apu2)]
jarjvek[4] <- xvek[(xvek == apu1 & yvek != apu2)]
jarjvek[5] <- yvek[(xvek == apu1 & yvek != apu2)]
jarjvek[6] <- xvek[xvek != apu1 ]
jarjvek[7] <- yvek[xvek != apu1 ]
}
}
if(jarjvek[1]==0)
{
#Janan koordinaatit aina järjestyksessä AB, BC, AC
janaT <- NULL
janaT[1] <- (x1 - jarjvek[2])/(jarjvek[4] - jarjvek[2])
janaT[2] <- (x1 - jarjvek[4])/(jarjvek[6] - jarjvek[4])
janaT[3] <- (x1 - jarjvek[2])/(jarjvek[6] - jarjvek[2])
janaY <- NULL
janaY[1] <- jarjvek[5] * janaT[1] + (1 - janaT[1])* jarjvek[3]
janaY[2] <- jarjvek[7] * janaT[2] + (1 - janaT[2])* jarjvek[5]
janaY[3] <- jarjvek[7] * janaT[3] + (1 - janaT[3])* jarjvek[3]
if(jarjvek[2]==jarjvek[4])
{
jarjvek[8] <- 0
if((jarjvek[2]<= x1) & (x2 <= janaY[2]) & (janaY[3]<= x2))
{
jarjvek[8] <- 1
}
}
if(jarjvek[2]!=jarjvek[4])
{
if(jarjvek[4]==jarjvek[6])
{
jarjvek[8] <- 0
if((x1 <= jarjvek[4]) & (x2 <= janaY[1]) & (janaY[3]<= x2))
{
jarjvek[8] <- 1
}
}
if(jarjvek[4]!=jarjvek[6])
{
jarjvek[8] <- 0
if( ((jarjvek[6] > jarjvek[4]) & (x2 <= janaY[1]) &
(x2 <= janaY[2]) & (janaY[3] <= x2)) |
((jarjvek[6] < jarjvek[4]) & (x2 <= janaY[1]) &
(janaY[2] <= x2) & (janaY[3] <= x2))
)
{
jarjvek[8] <- 1
}
}
}
}
jarjvek
}
#------------------------------------------------------------------------
#Pistevektoriin syötetään KolmionSisalla tuottama vektori!!!!!
# x1, x2 on ympyrän keskipiste
PisteenAlue <- function(x1,x2, pistevek){
alue <- c(0,0,0)
# C Kärkenä piste C
A <- pistevek[1:2]
B <- pistevek[3:4]
C <- pistevek[5:6]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 1
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 4
alue[2] <- t1
alue[3] <- t2
}
if(alue[1] == 0){
# C Kärkenä piste A
#---------------------------
A <- pistevek[3:4]
B <- pistevek[5:6]
C <- pistevek[1:2]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
#--------------------------------------
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 3
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 6
alue[2] <- t1
alue[3] <- t2
}
if(alue[1] == 0){
# C Kärkenä piste B
#-----------------------------------
A <- pistevek[5:6]
B <- pistevek[1:2]
C <- pistevek[3:4]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
#---------------------------------------------------
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 5
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 2
alue[2] <- t1
alue[3] <- t2
}
}
}
alue
}
#-----------------------------------------------------------------------------
#Laskee ympyrän ja kolmion leikkauksen alan, kun ympyrän keskipiste on yksi
#kolmion kulmista
#Palauttaa vektorin jonka 1. komponentti on leikkausen pinta-ala
# 2. komp. kolmion pinta-ala, 3. on näiden suhde ja 4. kolmion korkeus.
AlaYmpyranKpKolmionKulma <- function(kp1, kp2, r, kv1,kv2,kv3,kv4)
{
ala <- 0
vek <- c(kp1, kp2, r, kv1,kv2,kv3,kv4)
tilavek <- KolmionSisalla(vek[1],vek[2],vek[4],vek[5],vek[6], vek[7],vek[1],vek[2])
if(tilavek[1]==1 ){
tulos <- c(0,0,0,0)
}
if(tilavek[1]==0){
hNollaraja <- 10^(-12)
kp <- c(kp1,kp2)
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
if(kp[1]==A[1] & kp[2]==A[2]){
A <- B
B <- C
}
if(kp[1]==B[1] & kp[2]==B[2]){
B <- A
A <- C
}
#oikea kolmioa
if(tilavek[1]==0)
{
AB <- Etaisyys(6371,A[1],A[2],B[1],B[2],1)
kpB <- Etaisyys(6371,kp[1],kp[2],B[1],B[2],1)
kpA <- Etaisyys(6371,kp[1],kp[2],A[1],A[2],1)
cosAlpha <- (kpA^2 + AB^2 - kpB^2)/(2*AB*kpA)
cosBeta <- (kpB^2 + AB^2 - kpA^2)/(2*AB*kpB)
cosGamma <- (kpA^2 + kpB^2 - AB^2)/(2*kpB*kpA)
if( cosAlpha >= 0)
{
h <- sqrt(kpA^2 - kpA^2*cosAlpha^2)
#A ja B eivät kuulu ympyrään ja ympyrä ei leikkaa niiden välistä janaa.
if(r <= h){
ala <- 1/2 * r^2 * acos(cosGamma)
}
# A ja B eivät kuulu ympyrään ja ympyrä leikkaa niiden välistä janaa.
if(h < r & kpA > r & kpB > r){
if(cosBeta <=0) ala <- 1/2*r^2*acos(cosGamma)
if(cosBeta > 0)
ala <- 1/2 * r^2*(acos(h/kpB) - acos(h/r)) +
KantaKorkeus(2*sqrt(r^2 - h^2),h) +
1/2 * r^2* (acos(h/kpA) - acos(h/r))
}
# B kuuluu ympyrään ja A ei kuulu
if(h < r & kpB <= r & kpA > r){
if(cosBeta > 0)
x <- sqrt(abs(kpB^2 - h^2)) + sqrt(r^2 - h^2)
if(cosBeta <= 0)
x <- sqrt(r^2 - h^2) - sqrt(abs(kpB^2 - h^2))
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpA) - acos(h/r))
}
# B ei kuulu ympyrään ja A kuuluu
if(h < r & kpB > r & kpA <= r){
x <- sqrt(abs(kpA^2 - h^2)) + sqrt(r^2 - h^2)
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpB) - acos(h/r))
}
# A ja B kuuluvat ympyrään
if(h < r & kpA <= r & kpB <= r){
ala <- KantaKorkeus(AB, h)
}
tulos <- c(ala, (1/2*h*AB), (ala/(1/2*h*AB)),h)
}
if( cosAlpha < 0)
{
h <- sqrt(kpB^2 - kpB^2*cosBeta^2)
# A ja B eivät kuulu ympyrään ja ympyrä ei leikkaa niiden välistä janaa.
if(r <= h){
ala <- 1/2 * r^2 * acos(cosGamma)
}
# A ja B eivät kuulu ympyrään ja ympyrä leikkaa niiden välistä janaa.
# Tämä ei ole mahdollista, koska Alpha > 90 astetta
# B kuuluu ympyrään ja A ei kuulu
# Ei mahdollista, koska kpA < kpB
# B ei kuulu ympyrään ja A kuuluu
if(h < r & kpB > r & kpA <= r){
x <- sqrt(r^2 - h^2) - sqrt(abs(kpA^2 - h^2))
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpB) - acos(h/r))
}
# A ja B kuuluvat ympyrään
if(h < r & kpA <= r & kpB <= r){
ala <- KantaKorkeus(AB, h)
}
tulos <- c(ala, (1/2*h*AB), (ala/(1/2*h*AB)),h)
}
}
}
tulos
}
#-----------------------------------------------------------------------------
#Laskee ympyrän ja kolmion leikkauksen alan, kun ympyrän keskipiste on kolmion sisällä
AlaYmpyranKpKolmionSisalla <- function(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
{
tilavek <- KolmionSisalla(kp1,kp2,kv1,kv2,kv3,kv4,kv5,kv6)
hNollaraja <- 10^(-6)
kp <- c(kp1,kp2)
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
KolmionKulmat <- rbind(A,B,C,A)
#oikea kolmioa ja piste kolmion sisalla
if(tilavek[1]==0 & tilavek[8]==1)
{
AB <- Etaisyys(6371,tilavek[2],tilavek[3],tilavek[4],tilavek[5],1)
BC <- Etaisyys(6371,tilavek[4],tilavek[5],tilavek[6],tilavek[7],1)
AC <- Etaisyys(6371,tilavek[2],tilavek[3],tilavek[6],tilavek[7],1)
etA <- Etaisyys(6371, kp1, kp2, tilavek[2], tilavek[3],1)
etB <- Etaisyys(6371, kp1, kp2, tilavek[4], tilavek[5],1)
etC <- Etaisyys(6371, kp1, kp2, tilavek[6], tilavek[7],1)
etv <- c(etA, etB, etC, etA)
valit <- c(AB, BC, AC)
#h <- c(-100,-100,-100)
h <- c(1,1,1)
# Tapaukset, joissa ymp. kp on kolmion kulmapiste
if( (kp == A)[1] & (kp == A)[2]){ h[1] <- 0
h[3] <- 0
}
if( (kp == B)[1] & (kp == B)[2]){ h[1] <- 0
h[2] <- 0
}
if( (kp == C)[1] & (kp == C)[2]){ h[2] <- 0
h[3] <- 0
}
# Tapaukset, joissa ymp. kp on kolmion kulmapisteiden välisellä suoralla
if(A[1]!=B[1])
{
k <- (B[2] - A[2])/(B[1] - A[1])
y <- k* (kp[1] - A[1]) + A[2]
if( abs(kp[2] - y) < hNollaraja) h[1] <- 0
}
if( (A[1] == B[1] & kp[1]==A[1]))
{
h[1] <- 0
}
if(B[1]!=C[1])
{
k <- (C[2] - B[2])/(C[1] - B[1])
y <- k* (kp[1] - B[1]) + B[2]
if( abs(kp[2] - y) < hNollaraja) h[2] <- 0
}
if( (B[1] == C[1] & kp[1]==B[1]))
{
h[2] <- 0
}
if(C[1]!=A[1])
{
k <- (A[2] - C[2])/(A[1] - C[1])
y <- k* (kp[1] - C[1]) + C[2]
if( abs(kp[2] - y) < hNollaraja) h[3] <- 0
}
if( (C[1] == A[1] & kp[1]==C[1]))
{
h[3] <- 0
}
ala <- NULL
for(i in 1:3){
if(h[i] >= hNollaraja){
ala[i] <- AlaYmpyranKpKolmionKulma(kp[1], kp[2], r, KolmionKulmat[i,1],
KolmionKulmat[i,2],KolmionKulmat[(i+1),1],KolmionKulmat[(i+1),2])[1]
}
if(h[i] < hNollaraja){
ala[i] <- 0
}
}
tulos <- NULL
tulos[1] <- sum(ala)
tulos[2] <- KantaKorkeus(valit[1],
sqrt(valit[3]^2 - ((valit[1]^2 + valit[3]^2 - valit[2]^2)/(2*valit[1]))^2))
tulos[3] <- tulos[1]/tulos[2]
}
if(tilavek[1]==1 & length(tilavek)==1)
{
tulos <- c(0,0,0)
}
if(length(tilavek) > 1 & tilavek[8]== 0)
{
tulos <- c(-1,-1,-1)
}
tulos
}
#-------------------------------------------------------------------------------------------
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!
YmpyraNelikulmioKpSisalla <- function(kpLO, kpLA, r, ALO, ALA, BLO, BLA, CLO, CLA, DLO, DLA)
{
tyovek <- c(kpLO, kpLA, r, ALO, ALA, BLO, BLA, CLO, CLA, DLO, DLA)
kp <- tyovek[1:2]
KolmionKulmat <- rbind(c(tyovek[4:5],tyovek[6:7]),
c(tyovek[6:7],tyovek[8:9]),
c(tyovek[8:9],tyovek[10:11]),
c(tyovek[10:11],tyovek[4:5]))
ala <- NULL
for(i in 1:4){
ala[i] <- AlaYmpyranKpKolmionKulma(kp[1], kp[2], r,
KolmionKulmat[i,1], KolmionKulmat[i,2],
KolmionKulmat[i,3],KolmionKulmat[i,4])[1]
}
AB <- Etaisyys(6371, tyovek[4],tyovek[5], tyovek[6], tyovek[7],1)
BC <- Etaisyys(6371, tyovek[6], tyovek[7], tyovek[8], tyovek[9],1)
CD <- Etaisyys(6371, tyovek[8], tyovek[9], tyovek[10], tyovek[11],1)
DA <- Etaisyys(6371, tyovek[10], tyovek[11], tyovek[4], tyovek[5],1)
AC <- Etaisyys(6371, tyovek[4], tyovek[5], tyovek[8], tyovek[9],1)
tulos <- NULL
tulos[1] <- sum(ala)
tulos[2] <- HeronAla(AB, BC, AC) + HeronAla(AC, CD, DA)
tulos[3] <- tulos[1]/tulos[2]
tulos
}
#----------------------------------------------------------------------------
#kv on vektori, joka sisaltaa kolmion kulmat
KolmioYmpyranAla <- function(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
{
ala <- NULL
tilavek <- KolmionSisalla(kp1,kp2,kv1,kv2,kv3,kv4,kv5,kv6)
#oikea kolmioa ja piste kolmion sisalla
if(tilavek[1]==0 & tilavek[8]==1)
{
ala <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
}
#Oikea kolmio ja piste kolmion ulkopuolella
if(tilavek[1]==0 & tilavek[8]==0)
{
paikkavek <- PisteenAlue(kp1,kp2,tilavek[2:7])
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
AB <- Etaisyys(6371,A[1],A[2],B[1],B[2],1)
BC <- Etaisyys(6371,B[1],B[2],C[1],C[2],1)
AC <- Etaisyys(6371,A[1],A[2],C[1],C[2],1)
if(paikkavek[1] == 1)
{
# kp = (1 - paikkavek[3])*C + paikkavek[3]*(paikkavek[2]*B + (1-paikkavek[2])*A)
uusiA <- (1 - (paikkavek[3] + 1))*C + (paikkavek[3] + 1)*A
uusiB <- (1 - (paikkavek[3] + 1))*C + (paikkavek[3] + 1)*B
uusiC <- C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], A[1], A[2], B[1], B[2])[1]
}
if(paikkavek[1] == 2)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], B[1],B[2], kp1, kp2)[1]
}
if(paikkavek[1] == 3)
{
uusiA <- A
uusiB <- (1 - (paikkavek[3] + 1))*A + (paikkavek[3] + 1)*B
uusiC <- (1 - (paikkavek[3] + 1))*A + (paikkavek[3] + 1)*C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], B[1], B[2], C[1], C[2], uusiC[1], uusiC[2])[1]
}
if(paikkavek[1] == 4)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], B[1],B[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]
}
if(paikkavek[1] == 5)
{
uusiA <- (1 - (paikkavek[3] + 1))*B + (paikkavek[3] + 1)*A
uusiB <- B
uusiC <- (1 - (paikkavek[3] + 1))*B + (paikkavek[3] + 1)*C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiA[1], uusiA[2], uusiC[1], uusiC[2], C[1], C[2], A[1], A[2])[1]
}
if(paikkavek[1] == 6)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, C[1], C[2], B[1],B[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], A[1],A[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]
}
ala[2] <- HeronAla(AB,BC,AC)
ala[3] <- ala[1]/ala[2]
}
ala
}
#----------------------------------------------------------------------------
# Syötä kulmat kiertojärjestyksessä vastapäivään!!!!!!
YmpyraNelikulmioAla <-function(kp,r,kulmat)
{
tulos <- NULL
apu1 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[1],kulmat[2],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
apu2 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[5],kulmat[6],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
tulos[1:2] <- apu1[1:2] + apu2[1:2]
tulos[3] <- tulos[1]/tulos[2]
tulos
}
pisteLO <- kojetaulu[4,1]
pisteLA <- kojetaulu[4,2]
leik <- NULL
for(sade in 0:30){
leik[sade] <- YmpyraNelikulmioAla(c(25,60),sade, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
}
KolmioYmpyranAla(25,61,1,24,59,25,61,26,59)
for(km in seq(0,20,by=0.2)){
cat(km)
cat(" ")
cat(KolmioYmpyranAla(1,1,0.5*km,5,0,2,3,-2,0))
cat("\n")
}
kp1 <- -5
kp2 <- -1500
r <- 1503
tilavek <- KolmionSisalla(kp1,kp2,10,1,-4,1,-4,8)
tilavek
PisteenAlue(kp1,kp2,tilavek[2:7])
KolmioYmpyranAla(kp1,kp2,r,10,1,-4,1,-4,8)
kp1 <- 5
kp2 <- -4
#Ongelma säteellä 9!!!!!!!!!!!!!!!!!!!!!
r <- 9
KolmioYmpyranAla(kp1,kp2,9,5,2,12,2,5,6)
tilavek <- KolmionSisalla(kp1,kp2,5,2,12,2,5,6)
paikkavek <- PisteenAlue(kp1,kp2,tilavek[2:7])
x1 <- kp1
x2 <- kp2
pistevek <- tilavek[2:7]
kp <- c(1,500)
kp <- c(-4,4)
PisteenAlue(kp[1],kp[2],KolmionSisalla(kp[1],kp[2],A[1],A[2],B[1],B[2],C[1],C[2])[2:7])
x1 <- kp[1]
x2 <- kp[2]
pistevek <- KolmionSisalla(kp[1],kp[2],A[1],A[2],B[1],B[2],C[1],C[2])[2:7]
|
datansiirtoYMS.r (24.2.2006)
#-----------------------------------------------------------------------
#Maan pinnalla sijaitsevien pisteiden etäisyyden laskeva funktio
#-----------------------------------------------------------------------
#maan säde n. 6371 km
#jos laskutapa on 1, niin lasketaan 2 pisteen välimatka pallon pintaa pitkin
# jos laskutapa =2, niin lasketaan pisteiden (p1LO, p1LA) ja (p2LO, p2LA) euklidinen etäisyys,
# tällöin säteellä ei ole merkitystä
Etaisyys <- function(sade, p1LO, p1LA, p2LO, p2LA, laskutapa)
{
if(laskutapa == 1){
piste1LA <- p1LA * (2*pi/360)
piste1LO <- p1LO * (2*pi/360)
piste2LA <- p2LA * (2*pi/360)
piste2LO <- p2LO * (2*pi/360)
#pallokoorinaatistoa käyttäen
SuoraValiMatka <- sade * sqrt( (cos(piste1LO)*cos(piste1LA) - cos(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LO)*cos(piste1LA) - sin(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LA) - sin(piste2LA))^2 )
#cosini lause
Kulma <- acos(1 - SuoraValiMatka^2/(2*sade^2))
#kaaren pituus on kulma(radiaaneina)*säde
tulos <- sade * Kulma
}
if(laskutapa == 2)
{
tulos <- sqrt((p1LO - p2LO)^2 + (p1LA - p2LA)^2)
}
tulos
}
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
DataRuudut <- 10
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
#----------------------------------------------------------------------------
# PopulaatioData siirtävä funktio
#-------------------------------------------------------------------------
LohkoPituus <- 354
Lohkoja <- dim(PopulaatioData)[1]/LohkoPituus
# sPD <- PDSiirto(0,0,2,0,PopulaatioData, Lohkoja, LohkoPituus)
PDSiirto <- function(poh, ita, ete, lan, PopulaatioData, Lohkoja, LohkoPituus){
UusiPD <- NULL
UusiPD <- PopulaatioData
#Siirto etelään
if(ete > 0){
#Siirretään dataa
for( i in 1:(Lohkoja-ete)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i + ete - 1)*LohkoPituus + 1):((i+ete)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:ete){
UusiPD[((Lohkoja-ete)*LohkoPituus+1):((Lohkoja - ete +1)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(lan > 0){
#Siirto länteen
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(apu1[(1+lan):LohkoPituus],rep(0,lan))))
}
}
if(poh > 0){
#Siirto pohjoiseen
#Siirretään dataa
for( i in (poh + 1):(Lohkoja)){
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
PopulaatioData[((i-poh)*LohkoPituus + 1):((i-poh+1)*LohkoPituus),3]
}
#Täytetään lopusta nollilla
for(i in 1:poh){
UusiPD[((i-1)*LohkoPituus+1):((i)*LohkoPituus),3] <- t(t(rep(0,LohkoPituus)))
}
}
if(ita > 0){
#Siirto itään
#Siirretään dataa
for( i in 1:Lohkoja){
apu1 <- NULL
apu1 <- PopulaatioData[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3]
UusiPD[((i-1)*LohkoPituus + 1):(i*LohkoPituus),3] <-
t(t(c(rep(0,ita),apu1[1:(LohkoPituus - ita)])))
}
}
UusiPD
}
kojetaulu2 <- LahimmatRuudut(1,25,60.08,sPD,60,1, 58, 65)
kojetaulu3 <- LahimmatRuudut(1,25,60,sPD,500,1, 52.2,64.8)
#Pietari lähellä pistettä 30.2, 60
PietariTot <- LahimmatRuudut(2.5,30.1,60,PopulaatioData,PopulaatioData,100,1, 0, 80, 1)
PData <- LahimmatRuudut(25,60.08,PopulaatioData,1, 58, 64.8)
apuri <- PopulaatioData[58 <= PopulaatioData[,2] & PopulaatioData[,2] <= 65, ]
apuri[PData,]
PData
#-----------------------------------------------------------
#Lähimpien Ruutujen etsintä
#-----------------------------------------------------------
# Annetaan pisteen Lo ja La koordinaatit, piste itse, Populaatio data ja Pienhiukkasdata.
# Viimeisin annetaan, jotta ruutujen määrää voidaan vähentää.
# Voidaan myös rajata antamalla alaraja ja yläraja Latitudelle
#-----------------------------------------------------------
LahimmatRuudut <-function(Piste,LO,LA, PD, PM, Sade,Sateella, LAalaraja, LAylaraja, totuustaulu){
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
apuPD <- NULL
apuPD <- PD
#apuPD <- PD[(PD[,3]!=0 & LAalaraja <= PD[,2] & PD[,2] <= LAylaraja),]
#apuPD <- PD[(PD[,3]!=0 & (PM[,]!=0 | PM[,]!=0)),]
#apuPD <- PD[PD[,3]!=0 & (PM[,(1 + 2*Piste)]!=0 | PM[,(2 + 2*Piste)]!=0),]
#apuPD <- PD[PD[,3]!=0 & LAalaraja <= PD[,2] & PD[,2] <= LAylaraja,]
#apuPD <- PD[LAalaraja <= PD[,2] & PD[,2] <= LAylaraja,]
apu2 <- NULL
if(Sateella==1){
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu2[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) <= Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) <= Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu2[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) <= Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) <= Sade)
}
}
}
if(Sateella==0)
{
apu2 <- rep(FALSE,(dim(apuPD)[1]))
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] <= LO & apuPD[k,2] <= LA) &
(LO < (apuPD[k,1] + LOLisays) & LA < (apuPD[k,2] + LALisays)) )
{
apu2[k] <- (1==1)
Ruutu <- k
}
}
for(k in 1:dim(apuPD)[1]){
if
(
((apuPD[Ruutu,1]-LOLisaysArvio)<= apuPD[k,1]) & (apuPD[k,1] <= (apuPD[Ruutu,1]+LOLisaysArvio)) &
((apuPD[Ruutu,2]-LALisaysArvio) <= apuPD[k,2]) & (apuPD[k,2] <= (apuPD[Ruutu,2]+LALisaysArvio))
)
{
apu2[k] <- (1==1)
if(length(apu2[apu2]) == 9){ k <- dim(apuPD)[1] + 1}
}
}
}
if(totuustaulu == 1)
{
tulos <- apu2
}
if(totuustaulu == 0)
{
tulos <- apuPD[apu2,]
}
tulos
}
#------------------------------------------------------
# IF-datan piirtävä koodi
#------------------------------------------------
#polku <- "c:\\omat\\dataa\\concentration_point\\"
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
SadeLisays <- 1
PieninSade <- 0
MaxSade <- 100
PiirYlaRaja <- 3.5*10^(-6)
for(i in 4:4){
Piste <- i
data <- paste(polku,"IF_Piste_",Piste,"_Distance_Osuus_Kokeilu_SadeVali_1_Suurin_100.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance_alle_50.txt",sep="")
#data <- paste(polku,"IF_Piste_",Piste,"_Distance_Siirretty.txt",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,".ps",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,"_Siirretty.ps",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,"_Siirretty_Osuus_Kokeilu_SadeVali_1_Suurin_100.ps",sep="")
#kohde <- paste(talletuspolku, "Piste_",Piste,"_alle_50.ps",sep="")
kohde <- paste(talletuspolku, "Piste_",Piste,"_Siirretty_Osuus_Kokeilu_SadeVali_1_Suurin_100_Helsingin_Skaala.ps",sep="")
postscript(file=kohde, width=10,height=10,horizontal=F)
IFDist<-read.table(data)
xAkseli <- seq(PieninSade, MaxSade, by=SadeLisays)
for(kk in 1:12){
yAkseliHI <- NULL
yAkseliLO <- NULL
for(y in 1:(dim(IFDist)[2]/2)){
yAkseliHI[y] <- IFDist[kk,(2*y - 1)]
yAkseliLO[y] <- IFDist[kk,(2*y)]
}
plot(xAkseli,yAkseliHI, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, PiirYlaRaja),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(1,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
par(new=T)
plot(xAkseli,yAkseliLO, xlim=c(1,(MaxSade+ 2* SadeLisays)), ylim=c(0, PiirYlaRaja),
xlab="Säde", ylab="IF (high = punainen, low = musta)", col=rgb(0,0,0), main = paste("Piste ", Piste, " kuukausi ", kk, sep=""))
}
# musta on 0,0,0
dev.off()
}
#-------------------------------------------------------------------------------------------------------------
DataRuudut <- 10
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
SadeLisays <- 50
PieninSade <- 50
MaxSade <- 1700
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
PisteKK <- c(25,60,22,60.5,22,63,26,62,30,63,24.5,65,29.5,65,24,67.5,28,69)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
PopulaatioData <- sPD
for( Piste in 1:1){
LO <- PisteKK[(2*Piste-1)]
LA <- PisteKK[(2*Piste)]
SummaPixCi <- NULL
# Seuraavassa loopissa kk on kuukausi
for(kk in 1:12){
tiedosto1<-paste("joinfilelist_",kk,"_PM_0_1.joined", paate,sep="")
tiedosto2<-paste("joinfilelist_",kk,"_PM_0_1_1.joined", paate,sep="")
tiedosto3<-paste("joinfilelist_",kk,"_PM_1_2_5.joined", paate,sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData<- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
apuPM <- NULL
apuPM <- PM2.5PitoisuusData[(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0)
& PopulaatioData[,3]!=0,]
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0 &
(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0),]
apuHI <- NULL
apuLO <- NULL
apuSumma <- NULL
#apu1 <- rep(FALSE, dim(apuPD)[1])
sadeindeksi <- 0
for(Sade in seq(MaxSade, PieninSade, by= -SadeLisays )){
apu1 <- NULL
sadeindeksi <- sadeindeksi + 1
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) < Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) < Sade)
}
}
apuPM <- apuPM[apu1,]
apuPD <- apuPD[apu1,]
apuHI[sadeindeksi] <- sum( apuPM[,(1 + 2*Piste)] * apuPD[,3] )
apuLO[sadeindeksi] <- sum( apuPM[,(2 + 2*Piste)] * apuPD[,3] )
aputaulu <- c(Sade, dim(apuPD)[1])
TalletusKohde <- paste(talletuspolku,"Piste_",Piste,"\\IF_Piste_",Piste,"_kk_",kk,"_Sade_",Sade,"_Distance.txt",sep="")
write.table(t(aputaulu), file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
ylaraja <- length(apuHI)
for(i in 1: ylaraja){
apuSumma[(2*i - 1)] <- apuHI[(ylaraja - i + 1)]
apuSumma[2*i] <- apuLO[(ylaraja - i + 1)]
}
SummaPixCi <- rbind(SummaPixCi, t(apuSumma))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IF <- SummaPixCi * BR/Q
TalletusKohde <- paste(talletuspolku,"IF_Piste_",Piste,"_Distance.txt",sep="")
write.table(IF, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
write.table(t(t(PietariTot)), file = paste(talletuspolku,"Pietari_100km_totuus.txt",sep=""), row.names = FALSE, col.names = FALSE)
leikkausData <- NULL
osuus <- NULL
for(i in 1:dim(kojetaulu)[1]){
pisteLO <- NULL
pisteLA <- NULL
pisteLO <- kojetaulu[i,1]
pisteLA <- kojetaulu[i,2]
osuus[i] <- YmpyraNelikulmioAla(c(25,60),150, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
}
leikkausData <- osuus*kojetaulu[,3]
leik <- NULL
for(sade in 0:30){
leik[sade] <- YmpyraNelikulmioAla(c(25,60),sade, c(24.9272,59.9944,24.9272+LOLisays,59.9944,
24.9272+LOLisays,59.9944 + LALisays,24.9272,59.9944+ LALisays))[3]
}
pisteLO <- kojetaulu[4,1]
pisteLA <- kojetaulu[4,2]
leik <- NULL
for(sade in 0:30){
leik[sade] <- YmpyraNelikulmioAla(c(25,60),sade, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
}
KolmioYmpyranA25,61,1,24,59,25,61,26,59)
for(km in seq(0,20,by=0.2)){
cat(km)
cat(" ")
cat(KolmioYmpyranAla(1,1,0.5*km,5,0,2,3,-2,0))
cat("\n")
}
kp1 <- -5
kp2 <- -1500
r <- 1503
tilavek <- KolmionSisalla(kp1,kp2,10,1,-4,1,-4,8)
tilavek
PisteenAlue(kp1,kp2,tilavek[2:7])
KolmioYmpyranAla(kp1,kp2,r,10,1,-4,1,-4,8)
kp1 <- 5
kp2 <- -4
#Ongelma säteellä 9!!!!!!!!!!!!!!!!!!!!!
r <- 9
KolmioYmpyranAla(kp1,kp2,9,5,2,12,2,5,6)
tilavek <- KolmionSisalla(kp1,kp2,5,2,12,2,5,6)
paikkavek <- PisteenAlue(kp1,kp2,tilavek[2:7])
x1 <- kp1
x2 <- kp2
pistevek <- tilavek[2:7]
kp <- c(1,500)
kp <- c(-4,4)
PisteenAlue(kp[1],kp[2],KolmionSisalla(kp[1],kp[2],A[1],A[2],B[1],B[2],C[1],C[2])[2:7])
x1 <- kp[1]
x2 <- kp[2]
pistevek <- KolmionSisalla(kp[1],kp[2],A[1],A[2],B[1],B[2],C[1],C[2])[2:7]
|
ympyran_ja-monikulmion_leikkaus.r (16.6.2006)
#-----------------------------------------------------------------------
#Maan pinnalla sijaitsevien pisteiden etäisyyden laskeva funktio
#-----------------------------------------------------------------------
# maan säteen arviona voidaan käyttää 6371 km
# jos laskutapa on 1, niin lasketaan 2 pisteen välimatka pallon pintaa pitkin
# jos laskutapa on 2, niin lasketaan pisteiden (p1LO, p1LA) ja (p2LO, p2LA) euklidinen etäisyys,
# tällöin säteellä ei ole merkitystä
Etaisyys <- function(sade, p1LO, p1LA, p2LO, p2LA, laskutapa)
{
if(laskutapa == 1){
piste1LA <- p1LA * (2*pi/360)
piste1LO <- p1LO * (2*pi/360)
piste2LA <- p2LA * (2*pi/360)
piste2LO <- p2LO * (2*pi/360)
#pallokoorinaatistoa käyttäen
SuoraValiMatka <- sade * sqrt( (cos(piste1LO)*cos(piste1LA) - cos(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LO)*cos(piste1LA) - sin(piste2LO)*cos(piste2LA))^2
+ (sin(piste1LA) - sin(piste2LA))^2 )
#cosini lause
Kulma <- acos(1 - SuoraValiMatka^2/(2*sade^2))
#kaaren pituus on kulma(radiaaneina)*säde
tulos <- sade * Kulma
}
if(laskutapa == 2)
{
tulos <- sqrt((p1LO - p2LO)^2 + (p1LA - p2LA)^2)
}
tulos
}
#----------------------------------------------------------------------------
#----------------------------------------------------------
#Kolmion pinta-ala, kun tiedetään sivujen pituudet
HeronAla <- function(a,b,c){
p <- (a+b+c)/2
sqrt(p*(p-a)*(p-b)*(p-c))
}
#Tavallisella tavalla laskettava kolmion pinta-ala
KantaKorkeus <- function(k, h){
1/2 * k * h
}
#--------------------------------------------------------------------------
#----------------------------------------------------------------------------
# Voi tulla ongelmia, jos piste on kulmapisteiden välisellä janalla !
# Jos palautetun vektorin 1. koordinaatti on 1, niin tarkasteltavan
# kolmion tilavuus on nolla. Muutoin ensimmäinen koordinaatti on 0, 2. koord.
# on A pisteen x-koord, 3. koord. on A pisteen y-koord., ..., 8. koord. on 1 jos
# piste on kolmion sisällä, muutoin 8. koord on nolla.
KolmionSisalla <- function(x1,x2,D1,D2,E1,E2,F1,F2){
xvek <- c(D1,E1,F1)
yvek <- c(D2,E2,F2)
jarjvek <- NULL
paha <- 0
#Huonot tapaukset
#pisteiden D ja E kautta kulkeva suora -> testataan ovatko pisteet samalla suoralla
if(xvek[1] != xvek[2]){
k <- (yvek[2] - yvek[1])/(xvek[2] - xvek[1])
y <- k*(xvek[3] - xvek[1]) + yvek[1]
if(yvek[3] == y){ paha <- 1}
}
# Kaksi pistettä samat tai samalla vaakasuoralla tai samalla pystysuoralla
if( (xvek[1] == xvek[2] & yvek[1] == yvek[2]) |
(xvek[1] == xvek[3] & yvek[1] == yvek[3]) |
(xvek[2] == xvek[3] & yvek[2] == yvek[3]) |
(xvek[1] == xvek[2] & xvek[1] == xvek[3]) |
(yvek[1] == yvek[2] & yvek[1] == yvek[3])
)
{
paha <- 1
}
jarjvek[1] <- paha
if(paha == 0)
{
apu1 <- min(xvek)
if( length(xvek[xvek==apu1])==1)
{
jarjvek[2] <- xvek[xvek == apu1]
jarjvek[3] <- yvek[xvek == apu1]
apu2 <- max(yvek[xvek != apu1])
if( length(yvek[(xvek!= apu1 & yvek == apu2)]) ==1)
{
jarjvek[4] <- xvek[(xvek!= apu1 & yvek == apu2)]
jarjvek[5] <- yvek[(xvek!= apu1 & yvek == apu2)]
jarjvek[6] <- xvek[(xvek!= apu1 & yvek != apu2)]
jarjvek[7] <- yvek[(xvek!= apu1 & yvek != apu2)]
}
if( length(yvek[(xvek!= apu1 & yvek == apu2)]) ==2)
{
apu3 <- min(xvek[xvek!= apu1])
jarjvek[4] <- xvek[(xvek!= apu1 & xvek == apu3)]
jarjvek[5] <- yvek[(xvek!= apu1 & xvek == apu3)]
jarjvek[6] <- xvek[(xvek!= apu1 & xvek != apu3)]
jarjvek[7] <- yvek[(xvek!= apu1 & xvek != apu3)]
}
#Jos piste C on janan AB yläpuolella, niin vaihdetaan B ja C
janaT <- NULL
janaT[1] <- (jarjvek[6] - jarjvek[2])/(jarjvek[4] - jarjvek[2])
janaY <- NULL
janaY[1] <- jarjvek[5] * janaT[1] + (1 - janaT[1])* jarjvek[3]
if(jarjvek[7] > janaY[1]){
apu4 <- jarjvek
jarjvek[4:5] <- apu4[6:7]
jarjvek[6:7] <- apu4[4:5]
}
}
if( length(xvek[xvek==apu1])==2)
{
apu2 <- min(yvek[xvek == apu1])
jarjvek[2] <- xvek[(xvek == apu1 & yvek == apu2)]
jarjvek[3] <- yvek[(xvek == apu1 & yvek == apu2)]
jarjvek[4] <- xvek[(xvek == apu1 & yvek != apu2)]
jarjvek[5] <- yvek[(xvek == apu1 & yvek != apu2)]
jarjvek[6] <- xvek[xvek != apu1 ]
jarjvek[7] <- yvek[xvek != apu1 ]
}
}
if(jarjvek[1]==0)
{
#Janan koordinaatit aina järjestyksessä AB, BC, AC
janaT <- NULL
janaT[1] <- (x1 - jarjvek[2])/(jarjvek[4] - jarjvek[2])
janaT[2] <- (x1 - jarjvek[4])/(jarjvek[6] - jarjvek[4])
janaT[3] <- (x1 - jarjvek[2])/(jarjvek[6] - jarjvek[2])
janaY <- NULL
janaY[1] <- jarjvek[5] * janaT[1] + (1 - janaT[1])* jarjvek[3]
janaY[2] <- jarjvek[7] * janaT[2] + (1 - janaT[2])* jarjvek[5]
janaY[3] <- jarjvek[7] * janaT[3] + (1 - janaT[3])* jarjvek[3]
if(jarjvek[2]==jarjvek[4])
{
jarjvek[8] <- 0
if((jarjvek[2]<= x1) & (x2 <= janaY[2]) & (janaY[3]<= x2))
{
jarjvek[8] <- 1
}
}
if(jarjvek[2]!=jarjvek[4])
{
if(jarjvek[4]==jarjvek[6])
{
jarjvek[8] <- 0
if((x1 <= jarjvek[4]) & (x2 <= janaY[1]) & (janaY[3]<= x2))
{
jarjvek[8] <- 1
}
}
if(jarjvek[4]!=jarjvek[6])
{
jarjvek[8] <- 0
if( ((jarjvek[6] > jarjvek[4]) & (x2 <= janaY[1]) &
(x2 <= janaY[2]) & (janaY[3] <= x2)) |
((jarjvek[6] < jarjvek[4]) & (x2 <= janaY[1]) &
(janaY[2] <= x2) & (janaY[3] <= x2))
)
{
jarjvek[8] <- 1
}
}
}
}
jarjvek
}
#----------------------------------------------------------------------------
#------------------------------------------------------------------------
#Pistevektoriin syötetään KolmionSisalla tuottama vektori!!!!!
# x1, x2 on ympyrän keskipiste
PisteenAlue <- function(x1,x2, pistevek){
alue <- c(0,0,0)
# C Kärkenä piste C
A <- pistevek[1:2]
B <- pistevek[3:4]
C <- pistevek[5:6]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 1
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 4
alue[2] <- t1
alue[3] <- t2
}
if(alue[1] == 0){
# C Kärkenä piste A
#---------------------------
A <- pistevek[3:4]
B <- pistevek[5:6]
C <- pistevek[1:2]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
#--------------------------------------
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 3
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 6
alue[2] <- t1
alue[3] <- t2
}
if(alue[1] == 0){
# C Kärkenä piste B
#-----------------------------------
A <- pistevek[5:6]
B <- pistevek[1:2]
C <- pistevek[3:4]
t1 <-
((x2 - C[2])*(A[1] - C[1]) - (x1 - C[1])*(A[2] - C[2]))/
((x1 - C[1])*(B[2] - A[2]) - (x2 - C[2])*(B[1] - A[1]))
if(t1==0){
suunta <- -1
if((A[1] - C[1])!=0 & ((x1 - C[1])/(A[1] - C[1]))>=0)
suunta <- 1
if((A[1] - C[1])==0 & ((x2 - C[2])/(A[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, A[1],A[2], C[1],C[2],2)* suunta
}
if(t1==1){
suunta <- -1
if((B[1] - C[1])!=0 & ((x1 - C[1])/(B[1] - C[1]))>=0)
suunta <- 1
if((B[1] - C[1])==0 & ((x2 - C[2])/(B[2] - C[2]))>=0)
suunta <- 1
t2 <- Etaisyys(6371, x1,x2, C[1],C[2],2)/
Etaisyys(6371, B[1],B[2], C[1],C[2],2)*suunta
}
if(t1!=0 & t1!=1)
ifelse(x1==C[1],
{
suunta <- -1
if(sum(C - t1*B + (1 - t1)*A)/sum(C - c(x1,x2))>=0)
suunta <- 1
t2 <- Etaisyys( 6371, x1,x2,C[1],C[2],2)/
Etaisyys(6371,C[1],C[2],t1*B[1] + (1 - t1)*A[1],t1*B[2] + (1 - t1)*A[2],2) *suunta
},
t2 <-
(x1 - C[1])/(t1*B[1] + (1 - t1)*A[1] - C[1])
)
#---------------------------------------------------
if(0<= t1 & t1 <= 1 & 1 < t2)
{
alue[1] <- 5
alue[2] <- t1
alue[3] <- t2
}
if(0< t1 & t1 < 1 & t2 < 0)
{
alue[1] <- 2
alue[2] <- t1
alue[3] <- t2
}
}
}
alue
}
#----------------------------------------------------------------------------
#kp1, kp2, r, A[1],A[2],C[1],C[2]
#kulm <- c(B[1],B[2],C[1],C[2])
#kv1 <- kulm[1]
#kv2 <- kulm[2]
#kv3 <- kulm[3]
#kv4 <- kulm[4]
#----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
#Laskee ympyrän ja kolmion leikkauksen alan, kun ympyrän keskipiste on yksi
#kolmion kulmista
#Palauttaa vektorin jonka 1. komponentti on leikkausen pinta-ala
# 2. komp. kolmion pinta-ala, 3. on näiden suhde ja 4. kolmion korkeus.
AlaYmpyranKpKolmionKulma <- function(kp1, kp2, r, kv1,kv2,kv3,kv4)
{
ala <- 0
vek <- c(kp1, kp2, r, kv1,kv2,kv3,kv4)
tilavek <- KolmionSisalla(vek[1],vek[2],vek[4],vek[5],vek[6], vek[7],vek[1],vek[2])
if(tilavek[1]==1 ){
tulos <- c(0,0,0,0)
}
# Oikea kolmio
if(tilavek[1]==0){
hNollaraja <- 10^(-12)
kp <- c(kp1,kp2)
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
if(kp[1]==A[1] & kp[2]==A[2]){
A <- B
B <- C
}
if(kp[1]==B[1] & kp[2]==B[2]){
B <- A
A <- C
}
AB <- Etaisyys(6371,A[1],A[2],B[1],B[2],1)
kpB <- Etaisyys(6371,kp[1],kp[2],B[1],B[2],1)
kpA <- Etaisyys(6371,kp[1],kp[2],A[1],A[2],1)
cosAlpha <- (kpA^2 + AB^2 - kpB^2)/(2*AB*kpA)
cosBeta <- (kpB^2 + AB^2 - kpA^2)/(2*AB*kpB)
cosGamma <- (kpA^2 + kpB^2 - AB^2)/(2*kpB*kpA)
if( cosAlpha >= 0)
{
h <- sqrt(kpA^2 - kpA^2*cosAlpha^2)
#A ja B eivät kuulu ympyrään ja ympyrä ei leikkaa niiden välistä janaa.
if(r <= h | (h < r & r <= kpB & cosBeta < 0)){
ala <- 1/2 * r^2 * acos(cosGamma)
}
# A ja B eivät kuulu ympyrään ja ympyrä leikkaa niiden välistä janaa.
if(h < r & kpA > r & kpB > r){
if(cosBeta <=0) ala <- 1/2*r^2*acos(cosGamma)
if(cosBeta > 0)
ala <- 1/2 * r^2*(acos(h/kpB) - acos(h/r)) +
KantaKorkeus(2*sqrt(r^2 - h^2),h) +
1/2 * r^2* (acos(h/kpA) - acos(h/r))
}
# B kuuluu ympyrään ja A ei kuulu
if(h < r & kpB <= r & kpA > r){
if(cosBeta > 0)
x <- sqrt(abs(kpB^2 - h^2)) + sqrt(r^2 - h^2)
if(cosBeta <= 0)
x <- sqrt(r^2 - h^2) - sqrt(abs(kpB^2 - h^2))
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpA) - acos(h/r))
}
# B ei kuulu ympyrään ja A kuuluu
if(h < r & kpB > r & kpA <= r){
x <- sqrt(abs(kpA^2 - h^2)) + sqrt(r^2 - h^2)
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpB) - acos(h/r))
}
# A ja B kuuluvat ympyrään
if(h < r & kpA <= r & kpB <= r){
ala <- KantaKorkeus(AB, h)
}
tulos <- c(ala, (1/2*h*AB), (ala/(1/2*h*AB)),h)
}
if( cosAlpha < 0)
{
h <- sqrt(kpB^2 - kpB^2*cosBeta^2)
# A ja B eivät kuulu ympyrään ja ympyrä ei leikkaa niiden välistä janaa.
if(r <= h | (h < r & r <= kpA)){
ala <- 1/2 * r^2 * acos(cosGamma)
}
# A ja B eivät kuulu ympyrään ja ympyrä leikkaa niiden välistä janaa.
# Tämä ei ole mahdollista, koska Alpha > 90 astetta
# B kuuluu ympyrään ja A ei kuulu
# Ei mahdollista, koska kpA < kpB
# B ei kuulu ympyrään ja A kuuluu
if(h < r & kpB > r & kpA <= r){
x <- sqrt(r^2 - h^2) - sqrt(abs(kpA^2 - h^2))
ala <- KantaKorkeus(x,h) + 1/2 * r^2 * (acos(h/kpB) - acos(h/r))
}
# A ja B kuuluvat ympyrään
if(h < r & kpA <= r & kpB <= r){
ala <- KantaKorkeus(AB, h)
}
tulos <- c(ala, (1/2*h*AB), (ala/(1/2*h*AB)),h)
}
}
tulos
}
#----------------------------------------------------------------------------
#leik <- NULL
# for(sade in 0:30){
# leik[sade+1] <- YmpyraNelikulmioAla(c(25,60),sade, c(24.9272,59.9944,24.9272+LOLisays,59.9944,
# 24.9272+LOLisays,59.9944 + LALisays,24.9272,59.9944+ LALisays))[3]
# }
#leik
#pisteLO <- kojetaulu[4,1]
#pisteLA <- kojetaulu[4,2]
#leik <- NULL
#for(sade in 0:30){
#leik[sade+1] <- YmpyraNelikulmioAla(c(25,60),sade, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
#pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
#}
#leik
#kp <- c(25,60)
#kulmat <- c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
#pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays)
#r <- 1
#KolmioYmpyranAla(kp[1], kp[2], r, kulmat[1],kulmat[2],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
#KolmioYmpyranAla(kp[1], kp[2], r, kulmat[5],kulmat[6],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
#kulmavek <- c(kulmat[1],kulmat[2],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
#r <- 1
#kp1 <- kp[1]
#kp2 <- kp[2]
#kv1 <- kulmavek[1]
#kv2 <- kulmavek[2]
#kv3 <- kulmavek[3]
#kv4 <- kulmavek[4]
#kv5 <- kulmavek[5]
#kv6 <- kulmavek[6]
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
#kv on vektori, joka sisaltaa kolmion kulmat
KolmioYmpyranAla <- function(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
{
ala <- NULL
tilavek <- KolmionSisalla(kp1,kp2,kv1,kv2,kv3,kv4,kv5,kv6)
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
AB <- Etaisyys(6371,A[1],A[2],B[1],B[2],1)
BC <- Etaisyys(6371,B[1],B[2],C[1],C[2],1)
AC <- Etaisyys(6371,A[1],A[2],C[1],C[2],1)
#Lasketaan tarvittavien kolmioiden leikkaus
alaKPAB <- AlaYmpyranKpKolmionKulma(kp1, kp2, r, A[1],A[2],B[1],B[2])[1]
alaKPBC <- AlaYmpyranKpKolmionKulma(kp1, kp2, r, B[1],B[2],C[1],C[2])[1]
alaKPAC <- AlaYmpyranKpKolmionKulma(kp1, kp2, r, A[1],A[2],C[1],C[2])[1]
#oikea kolmio ja piste kolmion sisalla
if(tilavek[1]==0 & tilavek[8]==1)
{
ala[1] <- alaKPAB + alaKPAC + alaKPBC
ala[2] <- HeronAla(AB,BC,AC)
if(ala[1] < 0) ala[1] <- 0
if(ala[1] > ala[2]) ala[1] <- ala[2]
ala[3] <- ala[1]/ala[2]
}
#Oikea kolmio ja piste kolmion ulkopuolella
if(tilavek[1]==0 & tilavek[8]==0)
{
paikkavek <- PisteenAlue(kp1,kp2,tilavek[2:7])
if(paikkavek[1] == 1)
{
ala[1] <- alaKPAC + alaKPBC - alaKPAB
}
if(paikkavek[1] == 2)
{
ala[1] <- alaKPAC - alaKPAB - alaKPBC
}
if(paikkavek[1] == 3)
{
ala[1] <- alaKPAB + alaKPAC - alaKPBC
}
if(paikkavek[1] == 4)
{
ala[1] <- alaKPAB - alaKPAC - alaKPBC
}
if(paikkavek[1] == 5)
{
ala[1] <- alaKPAB + alaKPBC - alaKPAC
}
if(paikkavek[1] == 6)
{
ala[1] <- alaKPBC - alaKPAC - alaKPAB
}
ala[2] <- HeronAla(AB,BC,AC)
if(ala[1] < 0) ala[1] <- 0
if(ala[1] > ala[2]) ala[1] <- ala[2]
ala[3] <- ala[1]/ala[2]
}
ala
}
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
# Syötä kulmat kiertojärjestyksessä vastapäivään!!!!!!
YmpyraNelikulmioAla <-function(kp,r,kulmat)
{
tulos <- NULL
apu1 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[1],kulmat[2],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
apu2 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[5],kulmat[6],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
tulos[1:2] <- apu1[1:2] + apu2[1:2]
tulos[3] <- tulos[1]/tulos[2]
tulos
}
#-----------------------------------------------------------------------------
#leikkausData <- NULL
#osuus <- NULL
#for(i in 1:dim(kojetaulu3)[1]){
#for(i in 1:100){
#pisteLO <- NULL
#pisteLA <- NULL
#pisteLO <- kojetaulu[i,1]
#pisteLA <- kojetaulu[i,2]
#osuus[i] <- YmpyraNelikulmioAla(c(25,60),25, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
#pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
#}
#leikkausData <- osuus*kojetaulu[,3]
#cbind(kojetaulu[,3],t(t(leikkausData)))
#summary(cbind(kojetaulu3[,3],t(t(leikkausData)))[,2])
#-----------------------------------------------------------------------------
#Laskeetaan pienempiä ympyröitä osuuksien avulla.
DataRuudut <- 10
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
SadeLisays <- 50
PieninSade <- 0
MaxSade <- 1700
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
PisteKK <- c(25,60,22,60.5,22,63,26,62,30,63,24.5,65,29.5,65,24,67.5,28,69)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
PopulaatioData <- sPD
for( Piste in 4:4){
LO <- PisteKK[(2*Piste-1)]
LA <- PisteKK[(2*Piste)]
SummaPixCi <- NULL
# Seuraavassa loopissa kk on kuukausi
for(kk in 1:12){
tiedosto1<-paste("joinfilelist_",kk,"_PM_0_1.joined", paate,sep="")
tiedosto2<-paste("joinfilelist_",kk,"_PM_0_1_1.joined", paate,sep="")
tiedosto3<-paste("joinfilelist_",kk,"_PM_1_2_5.joined", paate,sep="")
PitoisuusData1 <- NULL
PitoisuusData1 <-read.table(paste(polku,"Concentration_Point\\",tiedosto1,sep=""))
PitoisuusData2 <- NULL
PitoisuusData2 <-read.table(paste(polku,"Concentration_Point\\",tiedosto2,sep=""))
PitoisuusData3 <- NULL
PitoisuusData3 <-read.table(paste(polku,"Concentration_Point\\",tiedosto3,sep=""))
PM2.5PitoisuusData<- NULL
PM2.5PitoisuusData <- PitoisuusData1 + PitoisuusData2 + PitoisuusData3
apuPM <- NULL
apuPM <- PM2.5PitoisuusData[(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0)
& PopulaatioData[,3]!=0,]
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0 &
(PM2.5PitoisuusData[,(1 + 2*Piste)]!=0 | PM2.5PitoisuusData[,(2 + 2*Piste)]!=0),]
apuHI <- NULL
apuLO <- NULL
apuSumma <- NULL
sadeindeksi <- 0
for(Sade in seq(MaxSade, PieninSade, by= -SadeLisays )){
apu1 <- NULL
sadeindeksi <- sadeindeksi + 1
#-------------------------------------------------------------
#Etäisyyden laskentatapa
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) < Sade)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) < Sade &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) < Sade )
}
}
# for(k in 1:dim(apuPD)[1]){
# if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
# apu1[k] <-
# (Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) < Sade+25 &
# Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) < Sade+25)
# }
# if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
# apu1[k] <-
# (Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) < Sade+25 &
# Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) < Sade+25)
# }
# }
apuPM <- apuPM[apu1,]
apuPD <- apuPD[apu1,]
# osuus <- NULL
# apuPDOsuus <- NULL
# for(i in 1:dim(apuPD)[1]){
# pisteLO <- NULL
# pisteLA <- NULL
# pisteLO <- apuPD[i,1]
# pisteLA <- apuPD[i,2]
# osuus[i] <- YmpyraNelikulmioAla(c(LO,LA),Sade, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
# pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
# }
# apuPDOsuus <- apuPD[,3]*t(t(osuus))
#
# apuHI[sadeindeksi] <- sum( apuPM[,(1 + 2*Piste)] * apuPDOsuus )
# apuLO[sadeindeksi] <- sum( apuPM[,(2 + 2*Piste)] * apuPDOsuus )
apuHI[sadeindeksi] <- sum( apuPM[,(1 + 2*Piste)] * apuPD[,3] )
apuLO[sadeindeksi] <- sum( apuPM[,(2 + 2*Piste)] * apuPD[,3] )
#Etäisyyden laskentatapa
#--------------------------------------------------------------------------
aputaulu <- c(Sade, dim(apuPD)[1])
# TalletusKohde <- paste(talletuspolku,"Piste_",Piste,"\\IF_Piste_",Piste,"_kk_",kk,"_Sade_",Sade,"_Distance_Osuus_kokeilu.txt",sep="")
TalletusKohde <- paste(talletuspolku,"Piste_",Piste,"\\IF_Piste_",Piste,"_kk_",kk,"_Sade_",Sade,"_Distance.txt",sep="")
write.table(t(aputaulu), file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
ylaraja <- length(apuHI)
for(i in 1: ylaraja){
apuSumma[(2*i - 1)] <- apuHI[(ylaraja - i + 1)]
apuSumma[2*i] <- apuLO[(ylaraja - i + 1)]
}
SummaPixCi <- rbind(SummaPixCi, t(apuSumma))
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 3 * 1/(365 * 24 * 60 * 60)kg/s
Q <- 3/(365 * 24 * 60 * 60)
IF <- SummaPixCi * BR/Q
TalletusKohde <- paste(talletuspolku,"IF_Piste_",Piste,"_Distance.txt",sep="")
# TalletusKohde <- paste(talletuspolku,"IF_Piste_",Piste,"_Distance_Osuus_Kokeilu_SadeVali_1_Suurin_100.txt",sep="")
write.table(IF, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
#-----------------------------------------------------------------------------
# valitaan ruudut annetulla säteellä.
DataRuudut <- 10
MaxSade
# HUOM! tiedostoissa pääte .out on 50km ja .out.1 on 10km
if (DataRuudut == 10) paate <- ".out.1"
if (DataRuudut == 50) paate <- ".out"
SadeLisays <- 5
PieninSade <- 0
MaxSade <- 100
LOLisays <- 0.1981
LOLisaysArvio <- 0.199
LALisays <- 0.08995
LALisaysArvio <- 0.09
PisteKK <- c(25,60,22,60.5,22,63,26,62,30,63,24.5,65,29.5,65,24,67.5,28,69)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Mallit\\IntakeFraction\\Distance\\"
PopulaatioData <- NULL
PopulaatioData <-
read.table(paste(polku,"Population_Europe\\",DataRuudut,"km\\ciesin_center_63lon_",DataRuudut,"km_2",sep=""))
apuPD <- NULL
apuPD <- PopulaatioData[PopulaatioData[,3]!=0 ,]
aputaulu <- NULL
for(Sade in seq(MaxSade, PieninSade, by= -SadeLisays )){
apu1 <- NULL
apu1[1] <- Sade
for(k in 1:dim(apuPD)[1]){
if( (apuPD[k,1] >= LO & apuPD[k,2] >= LA) | (apuPD[k,1] < LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2]),1) < Sade+25 &
Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2] + LALisays),1) < Sade+25)
}
if((apuPD[k,1] < LO & apuPD[k,2] >= LA) | (apuPD[k,1] >= LO & apuPD[k,2] < LA ) ){
apu1[k] <-
(Etaisyys(6371,LO, LA, (apuPD[k,1]), (apuPD[k,2]),1) < Sade+25 &
Etaisyys(6371,LO, LA, (apuPD[k,1] + LOLisays), (apuPD[k,2] + LALisays),1) < Sade+25)
}
}
aputaulu <- rbind(aputaulu, apu1)
TalletusKohde <- paste(talletuspolku,"PopulData_Sateittain.txt",sep="")
write.table(t(aputaulu), file = TalletusKohde, row.names = FALSE, col.names = FALSE)
}
#---------------------------------------------------------------------------------------------------------
kulmat <- c(24.9272,59.9944,24.9272+LOLisays,59.9944,
24.9272+LOLisays,59.9944 + LALisays,24.9272,59.9944+ LALisays)
kp <- c(25,60)
r <- 1
leik <- NULL
for(sade in 0:50){
leik[sade] <- YmpyraNelikulmioAla(c(25,60),sade, c(24.9272,59.9944,24.9272+LOLisays,59.9944,
24.9272+LOLisays,59.9944 + LALisays,24.9272,59.9944+ LALisays))[3]
}
leik
kulmat <- c(24.9272,59.9944,24.9272+LOLisays,59.9944,
24.9272+LOLisays,59.9944 + LALisays,24.9272,59.9944+ LALisays)
kp <- c(25,60)
r<- 7
leikkausData <- NULL
leikkausData <- t(t(kojetaulu2[,3]))
for(Sade in seq(1, 40, by= 1 )){
osuus <- NULL
for(i in 1:dim(leikkausData)[1]){
pisteLO <- NULL
pisteLA <- NULL
pisteLO <- kojetaulu2[i,1]
pisteLA <- kojetaulu2[i,2]
osuus[i] <- YmpyraNelikulmioAla(c(LO,LA),Sade, c(pisteLO,pisteLA,pisteLO+LOLisays,pisteLA,
pisteLO+LOLisays,pisteLA + LALisays,pisteLO,pisteLA+ LALisays))[3]
}
leikkausData <- cbind(leikkausData,kojetaulu2[,3]*t(t(osuus)))
}
alue <- NULL
for(i in 1:41){
alue[i] <- sum(leikkausData[,i])
}
#---------------------------------------------------------
#---------------------------------------------------------
#
# Vanhaa tavaraa!!!!
#-----------------------------------------------------------------------------
#Laskee ympyrän ja kolmion leikkauksen alan, kun ympyrän keskipiste on kolmion sisällä
AlaYmpyranKpKolmionSisalla <- function(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
{
tilavek <- KolmionSisalla(kp1,kp2,kv1,kv2,kv3,kv4,kv5,kv6)
hNollaraja <- 10^(-6)
kp <- c(kp1,kp2)
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
KolmionKulmat <- rbind(A,B,C,A)
#oikea kolmioa ja piste kolmion sisalla
if(tilavek[1]==0 & tilavek[8]==1)
{
AB <- Etaisyys(6371,tilavek[2],tilavek[3],tilavek[4],tilavek[5],1)
BC <- Etaisyys(6371,tilavek[4],tilavek[5],tilavek[6],tilavek[7],1)
AC <- Etaisyys(6371,tilavek[2],tilavek[3],tilavek[6],tilavek[7],1)
etA <- Etaisyys(6371, kp1, kp2, tilavek[2], tilavek[3],1)
etB <- Etaisyys(6371, kp1, kp2, tilavek[4], tilavek[5],1)
etC <- Etaisyys(6371, kp1, kp2, tilavek[6], tilavek[7],1)
etv <- c(etA, etB, etC, etA)
valit <- c(AB, BC, AC)
#h <- c(-100,-100,-100)
h <- c(1,1,1)
# Tapaukset, joissa ymp. kp on kolmion kulmapiste
if( (kp == A)[1] & (kp == A)[2]){ h[1] <- 0
h[3] <- 0
}
if( (kp == B)[1] & (kp == B)[2]){ h[1] <- 0
h[2] <- 0
}
if( (kp == C)[1] & (kp == C)[2]){ h[2] <- 0
h[3] <- 0
}
# Tapaukset, joissa ymp. kp on kolmion kulmapisteiden välisellä suoralla
if(A[1]!=B[1])
{
k <- (B[2] - A[2])/(B[1] - A[1])
y <- k* (kp[1] - A[1]) + A[2]
if( abs(kp[2] - y) < hNollaraja) h[1] <- 0
}
if( (A[1] == B[1] & kp[1]==A[1]))
{
h[1] <- 0
}
if(B[1]!=C[1])
{
k <- (C[2] - B[2])/(C[1] - B[1])
y <- k* (kp[1] - B[1]) + B[2]
if( abs(kp[2] - y) < hNollaraja) h[2] <- 0
}
if( (B[1] == C[1] & kp[1]==B[1]))
{
h[2] <- 0
}
if(C[1]!=A[1])
{
k <- (A[2] - C[2])/(A[1] - C[1])
y <- k* (kp[1] - C[1]) + C[2]
if( abs(kp[2] - y) < hNollaraja) h[3] <- 0
}
if( (C[1] == A[1] & kp[1]==C[1]))
{
h[3] <- 0
}
ala <- NULL
for(i in 1:3){
if(h[i] >= hNollaraja){
ala[i] <- AlaYmpyranKpKolmionKulma(kp[1], kp[2], r, KolmionKulmat[i,1],
KolmionKulmat[i,2],KolmionKulmat[(i+1),1],KolmionKulmat[(i+1),2])[1]
}
if(h[i] < hNollaraja){
ala[i] <- 0
}
}
tulos <- NULL
tulos[1] <- sum(ala)
tulos[2] <- KantaKorkeus(valit[1],
sqrt(valit[3]^2 - ((valit[1]^2 + valit[3]^2 - valit[2]^2)/(2*valit[1]))^2))
tulos[3] <- tulos[1]/tulos[2]
}
if(tilavek[1]==1 & length(tilavek)==1)
{
tulos <- c(0,0,0)
}
if(length(tilavek) > 1 & tilavek[8]== 0)
{
tulos <- c(-1,-1,-1)
}
tulos
}
#-------------------------------------------------------------------------------------------
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!
YmpyraNelikulmioKpSisalla <- function(kpLO, kpLA, r, ALO, ALA, BLO, BLA, CLO, CLA, DLO, DLA)
{
tyovek <- c(kpLO, kpLA, r, ALO, ALA, BLO, BLA, CLO, CLA, DLO, DLA)
kp <- tyovek[1:2]
KolmionKulmat <- rbind(c(tyovek[4:5],tyovek[6:7]),
c(tyovek[6:7],tyovek[8:9]),
c(tyovek[8:9],tyovek[10:11]),
c(tyovek[10:11],tyovek[4:5]))
ala <- NULL
for(i in 1:4){
ala[i] <- AlaYmpyranKpKolmionKulma(kp[1], kp[2], r,
KolmionKulmat[i,1], KolmionKulmat[i,2],
KolmionKulmat[i,3],KolmionKulmat[i,4])[1]
}
AB <- Etaisyys(6371, tyovek[4],tyovek[5], tyovek[6], tyovek[7],1)
BC <- Etaisyys(6371, tyovek[6], tyovek[7], tyovek[8], tyovek[9],1)
CD <- Etaisyys(6371, tyovek[8], tyovek[9], tyovek[10], tyovek[11],1)
DA <- Etaisyys(6371, tyovek[10], tyovek[11], tyovek[4], tyovek[5],1)
AC <- Etaisyys(6371, tyovek[4], tyovek[5], tyovek[8], tyovek[9],1)
tulos <- NULL
tulos[1] <- sum(ala)
tulos[2] <- HeronAla(AB, BC, AC) + HeronAla(AC, CD, DA)
tulos[3] <- tulos[1]/tulos[2]
tulos
}
#----------------------------------------------------------------------------
#kv on vektori, joka sisaltaa kolmion kulmat
KolmioYmpyranAla <- function(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
{
ala <- NULL
tilavek <- KolmionSisalla(kp1,kp2,kv1,kv2,kv3,kv4,kv5,kv6)
#oikea kolmioa ja piste kolmion sisalla
if(tilavek[1]==0 & tilavek[8]==1)
{
ala <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, kv1,kv2,kv3,kv4,kv5,kv6)
}
#Oikea kolmio ja piste kolmion ulkopuolella
if(tilavek[1]==0 & tilavek[8]==0)
{
paikkavek <- PisteenAlue(kp1,kp2,tilavek[2:7])
A <- tilavek[2:3]
B <- tilavek[4:5]
C <- tilavek[6:7]
AB <- Etaisyys(6371,A[1],A[2],B[1],B[2],1)
BC <- Etaisyys(6371,B[1],B[2],C[1],C[2],1)
AC <- Etaisyys(6371,A[1],A[2],C[1],C[2],1)
if(paikkavek[1] == 1)
{
# kp = (1 - paikkavek[3])*C + paikkavek[3]*(paikkavek[2]*B + (1-paikkavek[2])*A)
uusiA <- (1 - (paikkavek[3] + 1))*C + (paikkavek[3] + 1)*A
uusiB <- (1 - (paikkavek[3] + 1))*C + (paikkavek[3] + 1)*B
uusiC <- C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], A[1], A[2], B[1], B[2])[1]
}
if(paikkavek[1] == 2)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], B[1],B[2], kp1, kp2)[1]
}
if(paikkavek[1] == 3)
{
uusiA <- A
uusiB <- (1 - (paikkavek[3] + 1))*A + (paikkavek[3] + 1)*B
uusiC <- (1 - (paikkavek[3] + 1))*A + (paikkavek[3] + 1)*C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], B[1], B[2], C[1], C[2], uusiC[1], uusiC[2])[1]
}
if(paikkavek[1] == 4)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], B[1],B[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], C[1],C[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]
}
if(paikkavek[1] == 5)
{
uusiA <- (1 - (paikkavek[3] + 1))*B + (paikkavek[3] + 1)*A
uusiB <- B
uusiC <- (1 - (paikkavek[3] + 1))*B + (paikkavek[3] + 1)*C
#Pisteiden koordinaatit syötettävä kiertosuunnassa vastapäivään!!!!!!!!!!
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r,
uusiB[1], uusiB[2], uusiA[1], uusiA[2], uusiC[1], uusiC[2])[1]-
YmpyraNelikulmioKpSisalla(kp1, kp2, r,
uusiA[1], uusiA[2], uusiC[1], uusiC[2], C[1], C[2], A[1], A[2])[1]
}
if(paikkavek[1] == 6)
{
#iso kolmio - pikkukolmiot
ala[1] <- AlaYmpyranKpKolmionSisalla(kp1, kp2, r, C[1], C[2], B[1],B[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, B[1], B[2], A[1],A[2], kp1, kp2)[1]-
AlaYmpyranKpKolmionSisalla(kp1, kp2, r, A[1], A[2], C[1],C[2], kp1, kp2)[1]
}
ala[2] <- HeronAla(AB,BC,AC)
ala[3] <- ala[1]/ala[2]
}
ala
}
#----------------------------------------------------------------------------
# Syötä kulmat kiertojärjestyksessä vastapäivään!!!!!!
YmpyraNelikulmioAla <-function(kp,r,kulmat)
{
tulos <- NULL
apu1 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[1],kulmat[2],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
apu2 <- KolmioYmpyranAla(kp[1], kp[2], r, kulmat[5],kulmat[6],kulmat[3],kulmat[4],kulmat[7],kulmat[8])
tulos[1:2] <- apu1[1:2] + apu2[1:2]
tulos[3] <- tulos[1]/tulos[2]
tulos
}
|
- Code from U:\arkisto_kuopio\huippuyksikko\Tutkimus\R19_kopra\Mallit\Mika\Concentration_SOX (27.2.2006)
Piirto.r
Polku <- "C:\\omat\\dataa\\Concentration_SOX\\"
PaastoLahde <- "SO2"
postscript(file=paste(Polku,"IFConcentration",PaastoLahde,".ps",sep=""), width=10,height=10,horizontal=F)
IFmat10<-read.table(paste(Polku,"IFConcentration",PaastoLahde,"10km.txt",sep=""))
IFmat50<-read.table(paste(Polku,"IFConcentration",PaastoLahde,"50km.txt",sep=""))
#Ensin piirretään pisteen High sitten Low (=rgb(0,0,0) = musta)
for(i in 1:9){
piste <- paste("Piste ", i, sep="")
plot(c(1:12),IFmat10[,(2*i - 1)],type="b", xlim=c(1,12), ylim=c(0,1*10^(-5)),
xlab="kuukausi", ylab="IF 10km", col=rgb(1,0,0), main = paste(piste,"High = punainen, Low = musta"))
par(new=T)
plot(c(1:12),IFmat10[,(2*i)],type="b", xlim=c(1,12), ylim=c(0,1*10^(-5)),
xlab="kuukausi", ylab="IF 10km", col=rgb(0,0,0), main = paste(piste,"High = punainen, Low = musta"))
}
for(i in 1:9){
piste <- paste("Piste ", i, sep="")
plot(c(1:12),IFmat50[,(2*i - 1)],type="b", xlim=c(1,12), ylim=c(0,1*10^(-5)),
xlab="kuukausi", ylab="IF 50km", col=rgb(1,0,0), main = paste(piste,"High = punainen, Low = musta"))
par(new=T)
plot(c(1:12),IFmat50[,(2*i)],type="b", xlim=c(1,12), ylim=c(0,1*10^(-5)),
xlab="kuukausi", ylab="IF 50km", col=rgb(0,0,0), main = paste(piste,"High = punainen, Low = musta"))
}
# musta on 0,0,0
dev.off()
#_-----------------------------------------------------------
Polku <- "C:\\omat\\dataa\\Concentration_SOX\\"
PaastoLahde <- "SO4"
postscript(file=paste(Polku,"IFConcentration",PaastoLahde,".ps",sep=""), width=10,height=10,horizontal=F)
IFmat10<-read.table(paste(Polku,"IFConcentration",PaastoLahde,"10km.txt",sep=""))
IFmat50<-read.table(paste(Polku,"IFConcentration",PaastoLahde,"50km.txt",sep=""))
#Ensin piirretään pisteen High sitten Low (=rgb(0,0,0) = musta)
for(i in 1:9){
piste <- paste("Piste ", i, sep="")
plot(c(1:12),IFmat10[,(2*i - 1)],type="b", xlim=c(1,12), ylim=c(0,1.5*10^(-4)),
xlab="kuukausi", ylab="IF 10km", col=rgb(1,0,0), main = paste(piste,"High = punainen, Low = musta"))
par(new=T)
plot(c(1:12),IFmat10[,(2*i)],type="b", xlim=c(1,12), ylim=c(0,1.5*10^(-4)),
xlab="kuukausi", ylab="IF 10km", col=rgb(0,0,0), main = paste(piste,"High = punainen, Low = musta"))
}
for(i in 1:9){
piste <- paste("Piste ", i, sep="")
plot(c(1:12),IFmat50[,(2*i - 1)],type="b", xlim=c(1,12), ylim=c(0,1.5*10^(-4)),
xlab="kuukausi", ylab="IF 50km", col=rgb(1,0,0), main = paste(piste,"High = punainen, Low = musta"))
par(new=T)
plot(c(1:12),IFmat50[,(2*i)],type="b", xlim=c(1,12), ylim=c(0,1.5*10^(-4)),
xlab="kuukausi", ylab="IF 50km", col=rgb(0,0,0), main = paste(piste,"High = punainen, Low = musta"))
}
# musta on 0,0,0
dev.off()
|
koodi.r
# Datat -> N:\Huippuyksikko\Tutkimus\R19_Kopra\Data\Model_Converted
#--------------
# Concentration_SOX
# 50x50 ruudut
AlkuAika <- Sys.time()
SummaPixCi50kmSO2 <- matrix(nrow=12,ncol=18)
SummaPixCi50kmSO4 <- matrix(nrow=12,ncol=18)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\concentration_SOX\\"
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\50km\\ciesin_center_63lon_50km_2",sep=""))
for(i in 1:12){
tiedosto1<-paste("joinfilelist_",i,"_SO2.joined.out",sep="")
tiedosto2<-paste("joinfilelist_",i,"_SO4.joined.out",sep="")
PitoisuusDataSO2 <- NULL
PitoisuusDataSO2 <-read.table(paste(polku,"Concentration_SOX\\",tiedosto1,sep=""))
PitoisuusDataSO4 <- NULL
PitoisuusDataSO4 <-read.table(paste(polku,"Concentration_SOX\\",tiedosto2,sep=""))
for(j in 1:18){
SummaPixCi50kmSO2[i,j] <- sum( PitoisuusDataSO2[,(j+2)] * PopulaatioData[,3] )
SummaPixCi50kmSO4[i,j] <- sum( PitoisuusDataSO4[,(j+2)] * PopulaatioData[,3] )
}
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 1 * 1/(365 * 24 * 60 * 60) mol/s
Q <- 1/(365 * 24 * 60 * 60)
IFConcentrationPoint50kmSO2 <- SummaPixCi50kmSO2 * BR/Q
IFConcentrationPoint50kmSO4 <- SummaPixCi50kmSO4 * BR/Q
TalletusKohde <- paste(talletuspolku,"IFConcentrationSO250km.txt",sep="")
write.table(IFConcentrationPoint50kmSO2, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
TalletusKohde <- paste(talletuspolku,"IFConcentrationSO450km.txt",sep="")
write.table(IFConcentrationPoint50kmSO4, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
rm(SummaPixCi50kmSO2, SummaPixCi50kmSO4,polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto1, tiedosto2, PitoisuusDataSO2, PitoisuusDataSO4, Q,
BR, IFConcentrationPoint50kmSO2, IFConcentrationPoint50kmSO4, TalletusKohde)
#-----------------------------
# 10x10 ruudut
AlkuAika <- Sys.time()
SummaPixCi10kmSO2 <- matrix(nrow=12,ncol=18)
SummaPixCi10kmSO4 <- matrix(nrow=12,ncol=18)
polku <- "N:\\Huippuyksikko\\Tutkimus\\R19_Kopra\\Data\\Model_Converted\\"
talletuspolku <- "c:\\omat\\dataa\\concentration_SOX\\"
PopulaatioData <- NULL
PopulaatioData<-read.table(paste(polku,"Population_Europe\\10km\\ciesin_center_63lon_10km_2",sep=""))
for(i in 1:12){
tiedosto1<-paste("joinfilelist_",i,"_SO2.joined.out.1",sep="")
tiedosto2<-paste("joinfilelist_",i,"_SO4.joined.out.1",sep="")
PitoisuusDataSO2 <- NULL
PitoisuusDataSO2 <-read.table(paste(polku,"Concentration_SOX\\",tiedosto1,sep=""))
PitoisuusDataSO4 <- NULL
PitoisuusDataSO4 <-read.table(paste(polku,"Concentration_SOX\\",tiedosto2,sep=""))
for(j in 1:18){
SummaPixCi10kmSO2[i,j] <- sum( PitoisuusDataSO2[,(j+2)] * PopulaatioData[,3] )
SummaPixCi10kmSO4[i,j] <- sum( PitoisuusDataSO4[,(j+2)] * PopulaatioData[,3] )
}
}
# BR <- 20 m^3/päivä
# BR <- 20/(24 * 60 * 60) m^3/s
BR <- 20/(24 * 60 * 60)
# Q <- 1/(365 * 24 * 60 * 60) mol/s
Q <- 1/(365 * 24 * 60 * 60)
IFConcentrationPoint10kmSO2 <- SummaPixCi10kmSO2 * BR/Q
IFConcentrationPoint10kmSO4 <- SummaPixCi10kmSO4 * BR/Q
TalletusKohde <- paste(talletuspolku,"IFConcentrationSO210km.txt",sep="")
write.table(IFConcentrationPoint10kmSO2, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
TalletusKohde <- paste(talletuspolku,"IFConcentrationSO410km.txt",sep="")
write.table(IFConcentrationPoint10kmSO4, file = TalletusKohde, row.names = FALSE, col.names = FALSE)
LoppuAika <- Sys.time()
LoppuAika - AlkuAika
rm(SummaPixCi10kmSO2, SummaPixCi10kmSO4,polku, talletuspolku, PopulaatioData, AlkuAika, LoppuAika, tiedosto1, tiedosto2, PitoisuusDataSO2, PitoisuusDataSO4, Q,
BR, IFConcentrationPoint10kmSO2, IFConcentrationPoint10kmSO4, TalletusKohde)
|
Marko's iF calculations
- The codes are from U:\arkisto_kuopio\huippuyksikko\Tutkimus\R19_kopra\Mallit\IntakeFraction2. This section is for documentation only. The codes do not run.
Tainio_iF_emis_eur_pop_all_01.R
#7.3.2008, Marko Tainio
# This model calculates intake fractions (iF) for European
# primary PM2.5 emissions. Description of model:
# - Emission source: European primary PM2.5 emissions from different countries
# - Dispersion: Dispersion over the Europe
# - Population: European population divided to different countries (38)
# (Note: the population data does not include Finnish population!!)
#Work folders - the location of data and where the output is recorded
wrk_input = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Data 2/"
wrk_output = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/Result/"
#Breathing rate, 20 m^3/day -> unit g/s
BR = 20/(24 * 60 * 60)
# Calculation for different countries. The iF's are calculated separately
# for all emission sources (countires). There are 48 sources in data.
for (k in 1:48) {
# This reads from file the titles of countries to be used in calculations
maa = read.table("N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/EUR_country.txt", sep="")
maa = maa[,k]
#Emission volume - this part estimates emission volume in unit g/s
Q = read.csv("N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/Eur_emission_05.csv", header=T)
#Concentration data
#The order in list debends on the prepared emission data
rm(conc)
conc = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Data 2/Concentration_primary_Europe_2000/EMEP_monthly_PM2_5_2000/"
conc = paste(conc,"EMEP_2000_PM_2_5_hirlam_v3_8_1_",maa,"_200012.txt", sep="")
conc = read.table(conc, header=T, sep="")
#Population data:
rm(pop)
pop = paste(wrk_input, "Population_Combined/Pop_eur00_all3.txt", sep="")
pop = read.table(pop, header=T, sep="")
#Co-ordination check-in - this check that co-ordinate system is same
#in population and concentration data.
check = (conc["lon"] - pop["Lo"]) + (conc["lat"] - pop["La"])
sum(check)
#This part slice the concentration data from the data file
#(that is, LO and LA data is sliced oof)
month = c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", "annual")
conc = data.frame(conc[month])
#Unit change in concentration data: kg/m^3 -> g/m^3
conc = conc * 1000
#This part slice the population data from the data file
#(that is, LO and LA data is sliced off)
rm(country_eur)
country_eur = c("Sum_Austri", "Sum_Belgiu", "Sum_Cyprus", "Sum_Czech_", "Sum_Denmar", "Sum_Estoni", "Sum_France", "Sum_German", "Sum_Greece", "Sum_Hungar", "Sum_Irish_", "Sum_Italy", "Sum_Latvia", "Sum_Lithua", "Sum_Luxemb", "Sum_Malta", "Sum_Nether", "Sum_Poland", "Sum_Portug", "Sum_Romani", "Sum_Slovak", "Sum_Sloven", "Sum_Spain", "Sum_UK", "Sum_Sweden", "Sum_Bulgar", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Sum_Switze", "Sum_Ukrain", "Sum_Moldov", "Sum_Croati", "Sum_Serbia", "Sum_Albani", "Sum_Macedo", "Sum_Turkey", "Sum_bosni", "Sum_Finl", "Sum_all")
pop = data.frame(pop[country_eur])
#X must be defined before for -loop
x = NULL
#Month/concentration - month 13 in annual mean
for (i in 1:13) {
#Removal of huge values
#There are some weird very high values in some concentration datasets.
#This code replace those values with value 0.
y = conc[,i]
y = ifelse(y > 100, 0, y)
#Country/population - there are 40 different population data files
for (j in 1:40) {
x[j] = sum(y * pop[,j])
}
#Calculation of iF
x = (x * BR) / Q[k,i]
#Names for the data
names(x) = c("Sum_Austri", "Sum_Belgiu", "Sum_Cyprus", "Sum_Czech_", "Sum_Denmar", "Sum_Estoni", "Sum_France", "Sum_German", "Sum_Greece", "Sum_Hungar", "Sum_Irish_", "Sum_Italy", "Sum_Latvia", "Sum_Lithua", "Sum_Luxemb", "Sum_Malta", "Sum_Nether", "Sum_Poland", "Sum_Portug", "Sum_Romani", "Sum_Slovak", "Sum_Sloven", "Sum_Spain", "Sum_UK", "Sum_Sweden", "Sum_Bulgar", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Sum_Switze", "Sum_Ukrain", "Sum_Moldov", "Sum_Croati", "Sum_Serbia", "Sum_Albani", "Sum_Macedo", "Sum_Turkey", "Sum_bosni", "Sum_Finl", "Sum_all")
#Recording of results
write.table(x, paste(wrk_output, file = "European_emission/2000/if_emis_eur_year_2000_country_",maa,"_month_",i,"_pop_all.txt", sep=""), row.names = TRUE, col.names = FALSE)
}
}
#Remove of all data from memory
rm(wrk_input, wrk_output, BR, k, maa, Q, pop, check, conc, month, country_eur, x, i, y, j)
|
Tainio_iF_emis_eur_pop_all_data-conbination.R
# 18.4.2008 Marko Tainio
# This model change the calculated 1-dimensional data to 2-dimensional so
# that data can be downloaded e.g. to Analytica more easily.
# Description of data:
# - Intake fraction data: iF for European population due to European emissions
#The location of data files
folder="N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/Result/European_emission/"
#Month/concentration - month 13 in annual mean
for (i in 1:13) {
#Y must be defined before for -loop
y = NULL
# Calculation for different countries. There are 48 sources in data.
for (j in 1:48) {
# This reads from file the titles of countries to be used in calculations
maa = read.table("N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/EUR_country.txt", sep="")
maa = maa[,j]
# This read the intake fraction data files
a = paste(folder,"2000/if_emis_eur_year_2000_country_",maa,"_month_",i,"_pop_all.txt", sep="")
a = read.table(a, sep="")
#This combines all the data to 1-dimensional data
y = c(y, a[,2])
}
#This change the 1-dimensional data to 2-dimensional
# 40 is the number of populations used, 48 is number of emission sources (countries)
dim(y) = c(40,48)
#Recording of results
write.csv(y, paste(folder, file="comb_if_year_2000_country_all_month_",i,".csv", sep=""))
}
#Remove of all data from memory
rm(folder, i, y, maa, a)
|
Tainio_iF_emis_fin_pop_all_02.R
#21.4.2008, Marko Tainio
# This model calculates intake fractions (iF) for Finnish
# primary PM2.5 emissions. Description of model:
# - Emission source: Finnish primary PM2.5 emissions from different sectors
# - Dispersion: Dispersion over the Europe - small scale (11 countries)
# - Population: European population (11 countries)
#Work folders - the location of data and where the output is recorded
wrk_input = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Data 2/"
wrk_output = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/Result/"
wrk_emis = "N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/"
#Breathing rate, 20 m^3/day -> unit g/s
BR = 20/(24 * 60 * 60)
#Calculation of different years (2000, 2001, 2002)
for (l in 0:2) {
#The calcultion of sectors - seven sectors are [DOM OTH TRA LPC LPP AGR ALL]
for (k in 1:7) {
#Emission volume - this part copy emission data in unit g/s
Q = paste(wrk_emis,"fin_emission_200",l,"_01.csv", sep="")
Q = read.csv(Q, header=T)
#Concentration data
#The data is read separately for different years because
#year 2000 and 2001,2002 data has different dimensions
rm(conc)
if (l == 0) (conc = paste(wrk_input,"Concentration_primary_sector_200",l,"/monthly_PM_2_5/Fin_200",l,"_PM_hirlam_v3_8_1_", sep=""))
if (l == 1) (conc = paste(wrk_input,"Concentration_primary_sector_200",l,"/monthly_200",l,"_PM_2_5/Fin_200",l,"_PM_EC_v3_8_1_", sep=""))
if (l == 2) (conc = paste(wrk_input,"Concentration_primary_sector_200",l,"/monthly_200",l,"_PM_2_5/Fin_200",l,"_PM_EC_v3_8_1_", sep=""))
#The reading order for the data files
if (k == 1) (conc = paste(conc,"_DOM_200",l,"12.txt", sep=""))
if (k == 2) (conc = paste(conc,"_OTH_200",l,"12.txt", sep=""))
if (k == 3) (conc = paste(conc,"_TRA_200",l,"12.txt", sep=""))
if (k == 4) (conc = paste(conc,"_LPC_200",l,"12.txt", sep=""))
if (k == 5) (conc = paste(conc,"_LPP_200",l,"12.txt", sep=""))
if (k == 6) (conc = paste(conc,"_AGR_200",l,"12.txt", sep=""))
if (k == 7) (conc = paste(conc,"all_srcs.txt", sep=""))
conc = read.table(conc, header=T, sep="")
#Population data
#The data is read separately for different years because
#year 2000 and 2001,2002 data has different dimensions
rm(pop)
if (l == 0) (pop = paste(wrk_input, "Population_Combined/Pop_fin00_all.txt", sep=""))
if (l == 1) (pop = paste(wrk_input, "Population_Combined/Pop_fin01_all.txt", sep=""))
if (l == 2) (pop = paste(wrk_input, "Population_Combined/Pop_fin01_all.txt", sep=""))
pop = read.table(pop, header=T, sep="")
#Co-ordination check-in - this check that co-ordinate system is same
#in population and concentration data.
check = (conc["lon"] - pop["Lo"]) + (conc["lat"] - pop["La"])
sum(check)
#This part slice the concentration data from the data file
#(that is, LO and LA data is sliced off)
month = c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", "annual")
conc = data.frame(conc[month])
#Unit change in concentration data: kg/m^3 -> g/m^3
conc = conc * 1000
#This part slice the population data from the data file
#(that is, LO and LA data is sliced off)
#The data is read separately for different years because
#year 2000 and 2001,2002 data has different dimensions
rm(country_fin)
if (l == 0) (country_fin = c("Sum_ASUKKA", "Sum_Estoni", "Sum_Latvia", "Sum_Lithua", "Sum_Sweden", "Sum_Poland", "Sum_Denmar", "Sum_German", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Pop_all"))
if (l == 1) (country_fin = c("Finland", "Sum_Estoni", "Sum_Latvia", "Sum_Lithua", "Sum_Poland", "Sum_Sweden", "Sum_Denmar", "Sum_German", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Pop_all"))
if (l == 2) (country_fin = c("Finland", "Sum_Estoni", "Sum_Latvia", "Sum_Lithua", "Sum_Poland", "Sum_Sweden", "Sum_Denmar", "Sum_German", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Pop_all"))
pop = data.frame(pop[country_fin])
#X must be defined before for -loop
x = NULL
#Month/concentration - month 13 in annual mean
for (i in 1:13) {
#Removal of huge values
#There are some weird very high values in some concentration datasets.
#This code replace those values with value 0.
y = conc[,i]
y = ifelse(y > 100, 0, y)
#Country/population - iF's are calculated separately for 12 different population
for (j in 1:12) {
x[j] = sum(y * pop[,j])
}
#Calculation of iF
x = (x * BR) / Q[k,i]
#Names for the data
names(x) = c("FIN", "EST", "LAT", "LIT", "SWE", "POL", "DEN", "GER", "NOR", "BEL", "RUS", "All")
#Recording of results
write.table(x, paste(wrk_output, file = "Finnish_emission/200",l,"/if_emis_fin_year_200",l,"_sector_",k,"_month_",i,".txt", sep=""), row.names = TRUE, col.names = FALSE)
}
}
}
rm(wrk_input, wrk_output, wrk_emis, BR, l, k, Q, conc, pop, check, month, country_fin, x, i, y, j)
|
Tainio_iF_emis_fin_pop_all_data_conbination.R
# 21.4.2008 Marko Tainio
# This model change the calculated 1-dimensional data to 2-dimensional so
# that data can be downloaded e.g. to Analytica more easily.
# Description of data:
# - Intake fraction data: iF for European population due to Finnish emissions
#The location of data files
folder="N:/Huippuyksikko/Tutkimus/R19_Kopra/Mallit/IntakeFraction2/Result/Finnish_emission/"
#Year (2000, 2001, 2002)
for (k in 0:2) {
#The calcultion of sectors - seven sectors are [DOM OTH TRA LPC LPP AGR ALL]
for (j in 1:7) {
#Y must be defined before for -loop
y = NULL
#Month/concentration - month 13 in annual mean
for (i in 1:13) {
# This read the intake fraction data files
a = paste(folder,"200",k,"/if_emis_fin_year_200",k,"_sector_",j,"_month_",i,".txt", sep="")
a = read.table(a, sep="")
#This combines all the data to 1-dimensional data
y = c(y, a[,2])
}
#This change the 1-dimensional data to 2-dimensional
# 12 is the number of populations used, 13 is month (13 in annual mean)
dim(y) = c(12,13)
#Recording of results
write.csv(y, paste(folder, file="comb_if_year_200",k,"_sector_",j,"_month_all.csv", sep=""))
}
}
rm(folder, k, j, y, i, a)
|
Tainio_population_01.R
#7.3.2008 Marko Tainio
#This model summarise the population from different population datasets used
#in intake fraction calculation
#######
#Data location for all datasets
data_input = ("C:/Varsova/Kopra/Data 2/")
data_output = ("C:/Varsova/Muutokset/Result/")
#######
#Finnish emissions, year 2000 population data
pop_fin00_all = paste(data_input,"Population_Combined/Pop_fin00_all.txt", sep="")
a_fin00 = read.table(pop_fin00_all, sep="", header=T)
title_fin00 = c("Sum_ASUKKA", "Sum_Estoni", "Sum_Latvia", "Sum_Lithua", "Sum_Sweden", "Sum_Poland", "Sum_Denmar", "Sum_German", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Pop_all")
a_fin00 = data.frame(a_fin00[title_fin00])
a = NULL
for (i in 1:12) {
a[i] = sum(a_fin00[,i])
}
names(a) = c("FIN", "EST", "LAT", "LIT", "SWE", "POL", "DEN", "GER", "NOR", "BEL", "RUS", "All")
write.csv(a, paste(data_output, file="pop_fin00_sum.csv", sep=""))
rm(pop_fin00_all, a_fin00, title_fin00, a)
#######
#Finnish emissions, year 2001 population data
pop_fin01_all = paste(data_input,"Population_Combined/Pop_fin01_all.txt", sep="")
a_fin01 = read.table(pop_fin01_all, sep="", header=T)
title_fin01 = c("Finland", "Sum_Estoni", "Sum_Latvia", "Sum_Lithua", "Sum_Sweden", "Sum_Poland", "Sum_Denmar", "Sum_German", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Pop_all")
a_fin01 = data.frame(a_fin01[title_fin01])
a = NULL
for (i in 1:12) {
a[i] = sum(a_fin01[,i])
}
names(a) = c("FIN", "EST", "LAT", "LIT", "SWE", "POL", "DEN", "GER", "NOR", "BEL", "RUS", "All")
write.csv(a, paste(data_output, file="pop_fin01_sum.csv", sep=""))
rm(pop_fin01_all, a_fin01, title_fin01, a)
#######
#European emissions, year 2000 population data
pop_eur00_all = paste(data_input,"Population_Combined/Pop_Eur00_all.txt", sep="")
a_eur00 = read.table(pop_eur00_all, sep="", header=T)
title_eur00 = c("Sum_Austri", "Sum_Belgiu", "Sum_Cyprus", "Sum_Czech_", "Sum_Denmar", "Sum_Estoni", "Sum_France", "Sum_German", "Sum_Greece", "Sum_Hungar", "Sum_Irish_", "Sum_Italy", "Sum_Latvia", "Sum_Lithua", "Sum_Luxemb", "Sum_Malta", "Sum_Nether", "Sum_Poland", "Sum_Portug", "Sum_Romani", "Sum_Slovak", "Sum_Sloven", "Sum_Spain", "Sum_UK", "Sum_Sweden", "Sum_Bulgar", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Sum_Switze", "Sum_Ukrain", "Sum_Moldov", "Sum_Croati", "Sum_Serbia", "Sum_Albani", "Sum_Macedo", "Sum_Turkey", "pop_all")
a_eur00 = data.frame(a_eur00[title_eur00])
a = NULL
for (i in 1:38) {
a[i] = sum(a_eur00[,i])
}
names(a) = c("Sum_Austri", "Sum_Belgiu", "Sum_Cyprus", "Sum_Czech_", "Sum_Denmar", "Sum_Estoni", "Sum_France", "Sum_German", "Sum_Greece", "Sum_Hungar", "Sum_Irish_", "Sum_Italy", "Sum_Latvia", "Sum_Lithua", "Sum_Luxemb", "Sum_Malta", "Sum_Nether", "Sum_Poland", "Sum_Portug", "Sum_Romani", "Sum_Slovak", "Sum_Sloven", "Sum_Spain", "Sum_UK", "Sum_Sweden", "Sum_Bulgar", "Sum_Norway", "Sum_Belaru", "Sum_Russia", "Sum_Switze", "Sum_Ukrain", "Sum_Moldov", "Sum_Croati", "Sum_Serbia", "Sum_Albani", "Sum_Macedo", "Sum_Turkey", "pop_all")
write.csv(a, paste(data_output, file="pop_eur00_sum.csv", sep=""))
rm(pop_eur00_all, a_eur00, title_eur00, a)
#European emissions, year 2000 population data, Finnish
pop_eur00_fin = paste(data_input,"Population_Combined/Pop_Eur00_fin.txt", sep="")
a_eur00 = read.table(pop_eur00_fin, sep="", header=T)
a_eur00 = sum(a_eur00[,3])
write.csv(a_eur00, paste(data_output, file="pop_eur00_sum_fin.csv", sep=""))
rm(pop_eur00_fin, a_eur00)
#######
rm(data_input, data_output)
|