#!/usr/bin/ruby # Main program for getting CORRELATION file for GA # # Written by k-fleak require "#{ENV["HOME"]}/myRuby/parseCORRELATION.rb" require "#{ENV["HOME"]}/myRuby/parseENERGY.rb" require "#{ENV["HOME"]}/myRuby/parseECI.rb" class GetGAcorrelation def initialize corrAll = ParseCorrelation.new("./CORRELATION.all") @correlationAll = corrAll.getCorrelation eng = ParseEnergy.new("ENERGY") @energy = eng.getEnergyArray end def startCorrFile calcGAcorrelation writeCorrFile end def startLSin calcLSin writeLSin end def startPureEnergy(indexA, indexB, eciFileIndex) calcPureEnergy(indexA, indexB, eciFileIndex) writePureEnergy(eciFileIndex) end private def calcPureEnergy(indexA, indexB, eciFileIndex) @engPure = Array.new eciFile = ParseECI.new("ECI.#{eciFileIndex}") @eci = eciFile.getECI energyA = 0.0 energyB = 0.0 @eci.each do |ec| cluster = ec[0] eci = ec[1] corrA = @correlationAll[indexA][cluster] corrB = @correlationAll[indexB][cluster] energyA += eci * corrA energyB += eci * corrB end @engPure.push(["1.0 #{energyA} \n"]) @engPure.push(["0.0 #{energyB} \n"]) end def writePureEnergy(eciFileIndex) output = open("PureEnergy.#{eciFileIndex}", "w") @engPure.each do |ep| output.write(ep) end output.close end def calcLSin @lsIn = Array.new @numCluster = 0 @correlationAll.each do |corr| @numCluster = corr[1].size break end @lsIn.push(["#{@numCluster} \n"]) baseCluster = open("BASECLUSTER", "r") baseCluster.each do |bc| @lsIn.push(bc) end end def writeLSin lsInIndex = getLSinIndex lsFile = open("LS.in.#{lsInIndex}", "w") @lsIn.each do |li| lsFile.write(li) end lsFile.close print lsInIndex end def getLSinIndex lsIndexArray = Array.new flag = nil Dir.entries("./").each do |files| if FileTest.file?(files) and /LS.in./ =~ files then flag = 1 lsIndexArray.push(files.strip.gsub(/LS.in./, '').to_i) end end if flag then lsIndexArray.sort! lsIndexNew = (lsIndexArray[lsIndexArray.size() -1] + 1).to_s else lsIndexNew = 1 end return lsIndexNew end def calcGAcorrelation @gaCorrelation = Array.new @energy.each do |eng| structure = eng[0] @gaCorrelation.push(["structure:#{structure} \n"]) correlation = @correlationAll[structure] correlation.each do |corr| @gaCorrelation.push(["#{corr} \n"]) end end end def writeCorrFile output = open("CORRELATION", "w") @gaCorrelation.each do |gc| output.write(gc) end output.close end end gg = GetGAcorrelation.new if /-c/ =~ ARGV[0] then gg.startCorrFile elsif /-l/ =~ ARGV[0] then gg.startLSin elsif /-e/ =~ ARGV[0] then gg.startPureEnergy(ARGV[1], ARGV[2], ARGV[3]) end