備忘録ブログ

個人的な備忘録です。

CDスペクトラ

CDスペクトラデータ前処理

昨日に引き続き、実験データ処理シリーズです。
核酸を研究している人ならお馴染み、TmとCDはセットですよね。
CDのデータも一つのスペクトルに対して一つのtxtファイルが生み出されます。   ただ、CDの場合はCDの機械に接続されているPC(ソフトウェア)でバッファーひいたりFFT処理したりするので、Tmよりはまし。

でてくるデータはこんな感じ。

f:id:xkwnc284:20191106210646j:plain
CD

そしておしりにも測定条件やらなんやらかんやらはいってる。

f:id:xkwnc284:20191106210723j:plain
cd2

最初と最後の測定条件などがはいっているところをカットして、さらに左から2列分だけほしい。
そんでもって一番左はUVのwavelengthなので、ここを共通にして他の配列や条件でとったデータをならべてゆきたい。と思います。

tmデータの処理をRで始めちゃったので、Rで。

#ディレクトリのファイル名をリスト化
#最初に読み込むファイルを選んで読み込む。(XXXのところ)
before_plot_CD <- function(){
  files <- list.files()
  for(file.name in files){
    if (grepl(".txt", file.name)==TRUE){
      if (grepl("XXX", file.name) == TRUE){
      XXX <- read.table(file.name, skip=21, nrows=321, header=F, sep="\t")      
      colnames(XXX) <- c("wavelength", "XXX")
      
      next
    }
    }
  }
#次のfor文で、XXXの文字のないファイルをデータファイルとしてよみこむ。
  options(digits=8)
  df <- data.frame(XXX[,1:2])
  #wavelengthだけ格納したデータフレームを準備。ここにデータを足していく
  for (file.name in files){
    if (grepl(".txt", file.name)==TRUE){
      if (grepl("XXX", file.name) == F){
        row <- read.table(file.name, skip=21, nrows=321, header=F, sep="\t")
        data <- row[,2]
        
        name <- sub(".txt","",file.name) #ファイル名から.txtを除いたものをnameに入れる→グラフ表記やfigureのファイル名などに使う
       
        
        df <- cbind(df, data)
        #df <- data.frame(buffer[,1], norm2)    #x軸とy軸のデータを統合してdfに格納
        
        names(df)[ which( names(df)=="data" ) ] <- name
        #列名がnorm2のところを元のファイル名から取ってきたnameに変える
        #print(head(df))
   
      
        next
        }
  }
  }
  write.table(df, file="result.txt", quote=F, append=F, col.names=T, row.names=F)
  }

Tmのスクリプトからの転用なので、bufferファイルの代わりに一つフォルダの中のファイルを選ぶようにした。

pythonでも書いてみたのですが、Rでcbindのところをappendとかにするとなんかいい感じに結合されなくて、挫折しました。

Rさんにグラフも描いてもらう

CDは重ね書きができるスクリプトも書いてみました。
一つのフォルダにあるファイルが全部一つのfigureになるというもの。
最初は喜んでいたけれど、今はigor Proでfigureつくってる。

#同じディレクトリにあるファイルを一つのfigureに重ね書き、CD用
kasanegaki_CD <- function(){


pdf("figures.pdf")


n <- 1 #カーブの色指定用
col_list <- c("red","darkorange1","green3",'green4',"cyan3",'mediumblue','darkorchid2',"darkorchid4","maroon2")
files <- list.files()
for (file.name in files){
  if (grepl(".txt", file.name)==TRUE){
    if (n==1){
      row <- read.table(file.name, skip=21, nrows=321, header=F, sep="\t")  
      name <- sub(".txt","",file.name)
      name_list <- list(name)
      par(ps=18)
      par(mar=c(5.5, 6.0, 4.1, 2)) #余白の広さを行数で指定
      par(mgp = c(4, 1.2, 0)) #余白の使い方、説明、ラベル、軸の位置を行で指定
      
      plot(row[,1],row[,2], xlab="Wavelength (nm)", ylab=expression(paste("[", theta,"] (",10^{3}, " deg ", cm^{2}," ", dmol^{-1},")")), type = "l", xlim = c(200, 340), ylim=c(-8,18),lwd=2, col=col_list[n])
      
        n <- n+1 #次に描かれるプロットで色が変わる
        
        par(new=T)
      next
  }else{
    row <- read.table(file.name, skip=21, nrows=321, header=F, sep="\t")    
    name <- sub(".txt","",file.name)
    par(ps=18)
    par(mar=c(5.5, 6.0, 4.1, 2)) #余白の広さを行数で指定
    par(mgp = c(4, 1.2, 0)) #余白の使い方、説明、ラベル、軸の位置を行で指定
    
    plot(row[,1],row[,2], xlab="", ylab="", type = "l", xlim = c(200, 340), ylim=c(-8,18),lwd=2, ann=F, bty="n",col=col_list[n],axes=FALSE)
    name_list <- c(name_list, name)
    n <- n+1 #次に描かれるプロットで色が変わる
    
    par(new=T)
    next
  }
    }
}
legend("topright", legend = name_list, col = col_list, lty=1,lwd=2,bty = "n",y.intersp=1.5)
#print(name_list)
dev.off()
}

縦軸ラベルのシータをだすのとか、地味に大変だった、、、
完全に自分用備忘録です。