nysol-take 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/mbiclique.rb +317 -0
- data/bin/mbipolish.rb +362 -0
- data/bin/mccomp.rb +235 -0
- data/bin/mclique.rb +295 -0
- data/bin/mclique2g.rb +105 -0
- data/bin/mcliqueInfo.rb +203 -0
- data/bin/mfriends.rb +202 -0
- data/bin/mgdiff.rb +252 -0
- data/bin/mhifriend.rb +456 -0
- data/bin/mhipolish.rb +465 -0
- data/bin/mitemset.rb +168 -0
- data/bin/mpal.rb +410 -0
- data/bin/mpolishing.rb +399 -0
- data/bin/msequence.rb +165 -0
- data/bin/mtra2g.rb +476 -0
- data/bin/mtra2gc.rb +360 -0
- data/ext/grhfilrun/extconf.rb +12 -0
- data/ext/grhfilrun/grhfilrun.c +85 -0
- data/ext/grhfilrun/src/_sspc.c +358 -0
- data/ext/grhfilrun/src/aheap.c +545 -0
- data/ext/grhfilrun/src/aheap.h +251 -0
- data/ext/grhfilrun/src/base.c +92 -0
- data/ext/grhfilrun/src/base.h +59 -0
- data/ext/grhfilrun/src/fstar.c +497 -0
- data/ext/grhfilrun/src/fstar.h +80 -0
- data/ext/grhfilrun/src/grhfil.c +214 -0
- data/ext/grhfilrun/src/itemset.c +713 -0
- data/ext/grhfilrun/src/itemset.h +170 -0
- data/ext/grhfilrun/src/problem.c +415 -0
- data/ext/grhfilrun/src/problem.h +179 -0
- data/ext/grhfilrun/src/queue.c +533 -0
- data/ext/grhfilrun/src/queue.h +182 -0
- data/ext/grhfilrun/src/sample.c +19 -0
- data/ext/grhfilrun/src/sspc.c +597 -0
- data/ext/grhfilrun/src/sspc2.c +491 -0
- data/ext/grhfilrun/src/stdlib2.c +1482 -0
- data/ext/grhfilrun/src/stdlib2.h +892 -0
- data/ext/grhfilrun/src/trsact.c +817 -0
- data/ext/grhfilrun/src/trsact.h +160 -0
- data/ext/grhfilrun/src/vec.c +745 -0
- data/ext/grhfilrun/src/vec.h +172 -0
- data/ext/lcmrun/extconf.rb +20 -0
- data/ext/lcmrun/lcmrun.cpp +99 -0
- data/ext/lcmrun/src/aheap.c +216 -0
- data/ext/lcmrun/src/aheap.h +111 -0
- data/ext/lcmrun/src/base.c +92 -0
- data/ext/lcmrun/src/base.h +59 -0
- data/ext/lcmrun/src/itemset.c +496 -0
- data/ext/lcmrun/src/itemset.h +157 -0
- data/ext/lcmrun/src/lcm.c +427 -0
- data/ext/lcmrun/src/problem.c +349 -0
- data/ext/lcmrun/src/problem.h +177 -0
- data/ext/lcmrun/src/queue.c +528 -0
- data/ext/lcmrun/src/queue.h +176 -0
- data/ext/lcmrun/src/sgraph.c +359 -0
- data/ext/lcmrun/src/sgraph.h +173 -0
- data/ext/lcmrun/src/stdlib2.c +1282 -0
- data/ext/lcmrun/src/stdlib2.h +823 -0
- data/ext/lcmrun/src/trsact.c +747 -0
- data/ext/lcmrun/src/trsact.h +159 -0
- data/ext/lcmrun/src/vec.c +731 -0
- data/ext/lcmrun/src/vec.h +171 -0
- data/ext/lcmseq0run/extconf.rb +20 -0
- data/ext/lcmseq0run/lcmseq0run.cpp +59 -0
- data/ext/lcmseq0run/src/aheap.c +216 -0
- data/ext/lcmseq0run/src/aheap.h +111 -0
- data/ext/lcmseq0run/src/base.c +92 -0
- data/ext/lcmseq0run/src/base.h +59 -0
- data/ext/lcmseq0run/src/itemset.c +518 -0
- data/ext/lcmseq0run/src/itemset.h +157 -0
- data/ext/lcmseq0run/src/itemset_zero.c +522 -0
- data/ext/lcmseq0run/src/lcm_seq.c +446 -0
- data/ext/lcmseq0run/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseq0run/src/problem.c +439 -0
- data/ext/lcmseq0run/src/problem.h +179 -0
- data/ext/lcmseq0run/src/problem_zero.c +439 -0
- data/ext/lcmseq0run/src/queue.c +533 -0
- data/ext/lcmseq0run/src/queue.h +182 -0
- data/ext/lcmseq0run/src/stdlib2.c +1350 -0
- data/ext/lcmseq0run/src/stdlib2.h +864 -0
- data/ext/lcmseq0run/src/trsact.c +747 -0
- data/ext/lcmseq0run/src/trsact.h +159 -0
- data/ext/lcmseq0run/src/vec.c +779 -0
- data/ext/lcmseq0run/src/vec.h +172 -0
- data/ext/lcmseqrun/extconf.rb +20 -0
- data/ext/lcmseqrun/lcmseqrun.cpp +101 -0
- data/ext/lcmseqrun/src/aheap.c +216 -0
- data/ext/lcmseqrun/src/aheap.h +111 -0
- data/ext/lcmseqrun/src/base.c +92 -0
- data/ext/lcmseqrun/src/base.h +59 -0
- data/ext/lcmseqrun/src/itemset.c +518 -0
- data/ext/lcmseqrun/src/itemset.h +157 -0
- data/ext/lcmseqrun/src/itemset_zero.c +522 -0
- data/ext/lcmseqrun/src/lcm_seq.c +447 -0
- data/ext/lcmseqrun/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseqrun/src/problem.c +439 -0
- data/ext/lcmseqrun/src/problem.h +179 -0
- data/ext/lcmseqrun/src/problem_zero.c +439 -0
- data/ext/lcmseqrun/src/queue.c +533 -0
- data/ext/lcmseqrun/src/queue.h +182 -0
- data/ext/lcmseqrun/src/stdlib2.c +1350 -0
- data/ext/lcmseqrun/src/stdlib2.h +864 -0
- data/ext/lcmseqrun/src/trsact.c +747 -0
- data/ext/lcmseqrun/src/trsact.h +159 -0
- data/ext/lcmseqrun/src/vec.c +779 -0
- data/ext/lcmseqrun/src/vec.h +172 -0
- data/ext/lcmtransrun/extconf.rb +18 -0
- data/ext/lcmtransrun/lcmtransrun.cpp +264 -0
- data/ext/macerun/extconf.rb +20 -0
- data/ext/macerun/macerun.cpp +57 -0
- data/ext/macerun/src/aheap.c +217 -0
- data/ext/macerun/src/aheap.h +112 -0
- data/ext/macerun/src/itemset.c +491 -0
- data/ext/macerun/src/itemset.h +158 -0
- data/ext/macerun/src/mace.c +503 -0
- data/ext/macerun/src/problem.c +346 -0
- data/ext/macerun/src/problem.h +174 -0
- data/ext/macerun/src/queue.c +529 -0
- data/ext/macerun/src/queue.h +177 -0
- data/ext/macerun/src/sgraph.c +360 -0
- data/ext/macerun/src/sgraph.h +174 -0
- data/ext/macerun/src/stdlib2.c +993 -0
- data/ext/macerun/src/stdlib2.h +811 -0
- data/ext/macerun/src/vec.c +634 -0
- data/ext/macerun/src/vec.h +170 -0
- data/ext/sspcrun/extconf.rb +20 -0
- data/ext/sspcrun/src/_sspc.c +358 -0
- data/ext/sspcrun/src/aheap.c +545 -0
- data/ext/sspcrun/src/aheap.h +251 -0
- data/ext/sspcrun/src/base.c +92 -0
- data/ext/sspcrun/src/base.h +59 -0
- data/ext/sspcrun/src/fstar.c +496 -0
- data/ext/sspcrun/src/fstar.h +80 -0
- data/ext/sspcrun/src/grhfil.c +213 -0
- data/ext/sspcrun/src/itemset.c +713 -0
- data/ext/sspcrun/src/itemset.h +170 -0
- data/ext/sspcrun/src/problem.c +415 -0
- data/ext/sspcrun/src/problem.h +179 -0
- data/ext/sspcrun/src/queue.c +533 -0
- data/ext/sspcrun/src/queue.h +182 -0
- data/ext/sspcrun/src/sample.c +19 -0
- data/ext/sspcrun/src/sspc.c +598 -0
- data/ext/sspcrun/src/sspc2.c +491 -0
- data/ext/sspcrun/src/stdlib2.c +1482 -0
- data/ext/sspcrun/src/stdlib2.h +892 -0
- data/ext/sspcrun/src/trsact.c +817 -0
- data/ext/sspcrun/src/trsact.h +160 -0
- data/ext/sspcrun/src/vec.c +745 -0
- data/ext/sspcrun/src/vec.h +172 -0
- data/ext/sspcrun/sspcrun.cpp +54 -0
- data/lib/nysol/enumLcmEp.rb +338 -0
- data/lib/nysol/enumLcmEsp.rb +284 -0
- data/lib/nysol/enumLcmIs.rb +275 -0
- data/lib/nysol/enumLcmSeq.rb +143 -0
- data/lib/nysol/items.rb +201 -0
- data/lib/nysol/seqDB.rb +256 -0
- data/lib/nysol/take.rb +39 -0
- data/lib/nysol/taxonomy.rb +113 -0
- data/lib/nysol/traDB.rb +257 -0
- metadata +239 -0
data/bin/mccomp.rb
ADDED
@@ -0,0 +1,235 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
|
7
|
+
# 1.0 initial development: 2016/10/17
|
8
|
+
# 1.1 出力のnode項目名をnf=の値にする: 2016/11/11
|
9
|
+
$cmd="mccomp2g.rb"
|
10
|
+
$version="1.1"
|
11
|
+
|
12
|
+
def help
|
13
|
+
|
14
|
+
STDERR.puts <<EOF
|
15
|
+
----------------------------
|
16
|
+
#{$cmd} version #{$version}
|
17
|
+
----------------------------
|
18
|
+
概要) 連結成分を出力する
|
19
|
+
|
20
|
+
用法) #{$cmd} ei= ef= [ni=] [nf=] [o=] [T=] [-verbose] [-mcmdenv] [--help]
|
21
|
+
|
22
|
+
ファイル名指定
|
23
|
+
ei= : 枝データファイル
|
24
|
+
ef= : 枝データ上の2つの節点項目名(省略時は"node1,node2")
|
25
|
+
ni= : 節点データファイル
|
26
|
+
nf= : 節点データ上の節点項目名(省略時は"node")
|
27
|
+
o= : 出力ファイル(連結成分ID-枝:-nodeを指定することでクリークID-節点に変更可能,省略時は標準出力)
|
28
|
+
|
29
|
+
その他
|
30
|
+
T= : ワークディレクトリ(default:/tmp)
|
31
|
+
-verbose : Rの実行ログを出力
|
32
|
+
--help : ヘルプの表示
|
33
|
+
|
34
|
+
入力形式)
|
35
|
+
一般グラフを節点ペアで表現した形式。
|
36
|
+
|
37
|
+
o=の出力形式)
|
38
|
+
節点と連結成分IDを出力する。
|
39
|
+
出力項目は"id,node,size"の3項目である。
|
40
|
+
sizeは連結成分を構成する節点数である。
|
41
|
+
|
42
|
+
例)
|
43
|
+
$ cat data/edge.csv
|
44
|
+
n1,n2
|
45
|
+
a,d
|
46
|
+
a,e
|
47
|
+
b,f
|
48
|
+
d,e
|
49
|
+
f,g
|
50
|
+
g,b
|
51
|
+
g,h
|
52
|
+
|
53
|
+
$ #{$cmd} ei=edge.csv ef=n1,n2 o=output.csv
|
54
|
+
##END# #{$cmd} ei=edge.csv ef=n1,n2 -node o=output.csv
|
55
|
+
$ cat output.csv
|
56
|
+
id%0,node,size
|
57
|
+
1,a,3
|
58
|
+
1,d,3
|
59
|
+
1,e,3
|
60
|
+
2,b,4
|
61
|
+
2,f,4
|
62
|
+
2,g,4
|
63
|
+
2,h,4
|
64
|
+
|
65
|
+
例) 節点ファイルも指定した例
|
66
|
+
$ cat node.csv
|
67
|
+
n
|
68
|
+
a
|
69
|
+
b
|
70
|
+
c
|
71
|
+
d
|
72
|
+
e
|
73
|
+
f
|
74
|
+
g
|
75
|
+
h
|
76
|
+
|
77
|
+
$ #{$cmd} ei=edge.csv ef=n1,n2 ni=node.csv nf=n o=output.csv
|
78
|
+
#END# #{$cmd} ei=edge.csv o=output.csv ef=n1,n2 ni=node.csv nf=n
|
79
|
+
$ cat output.csv
|
80
|
+
id%0,node,size
|
81
|
+
1,a,3
|
82
|
+
1,d,3
|
83
|
+
1,e,3
|
84
|
+
2,b,4
|
85
|
+
2,f,4
|
86
|
+
2,g,4
|
87
|
+
2,h,4
|
88
|
+
3,c,1
|
89
|
+
4,i,1
|
90
|
+
|
91
|
+
# Copyright(c) NYSOL 2012- All Rights Reserved.
|
92
|
+
EOF
|
93
|
+
exit
|
94
|
+
end
|
95
|
+
|
96
|
+
def ver()
|
97
|
+
STDERR.puts "version #{$version}"
|
98
|
+
exit
|
99
|
+
end
|
100
|
+
|
101
|
+
help() if ARGV.size <= 0 or ARGV[0]=="--help"
|
102
|
+
ver() if ARGV[0]=="--version"
|
103
|
+
|
104
|
+
args=MCMD::Margs.new(ARGV,"ei=,ef=,ni=,nf=,o=,-verbose","ei=,ef=")
|
105
|
+
|
106
|
+
# Rライブラリ実行可能確認
|
107
|
+
exit(1) unless(MCMD::chkRexe("igraph"))
|
108
|
+
|
109
|
+
# mcmdのメッセージは警告とエラーのみ
|
110
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
111
|
+
|
112
|
+
#ワークファイルパス
|
113
|
+
if args.str("T=")!=nil then
|
114
|
+
ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
|
115
|
+
end
|
116
|
+
|
117
|
+
ei = args. file("ei=","r") # edgeファイル名
|
118
|
+
ni = args. file("ni=","r") # node file name
|
119
|
+
|
120
|
+
# ---- edge field names (two nodes) on ei=
|
121
|
+
ef1,ef2 = args.field("ef=", ei, "node1,node2",2,2)["names"]
|
122
|
+
|
123
|
+
# ---- node field name on ni=
|
124
|
+
nf = args.field("nf=", ni, "node",1,1)
|
125
|
+
nf = nf["names"][0] if nf
|
126
|
+
|
127
|
+
oFile = args.file("o=", "w")
|
128
|
+
|
129
|
+
def genRscript(eFile,oFile,cidFile,scpFile)
|
130
|
+
r_proc = <<EOF
|
131
|
+
library(igraph)
|
132
|
+
## reading edge file
|
133
|
+
g=read.graph("#{eFile}",format="edgelist",directed=FALSE)
|
134
|
+
c=components(g)
|
135
|
+
seq=0:(length(c$membership)-1)
|
136
|
+
dat=data.frame(id=c$membership,nid=seq,size=c$csize[c$membership])
|
137
|
+
write.csv(dat,file="#{oFile}",quote=FALSE,row.names = FALSE)
|
138
|
+
write.table(max(c$membership),file="#{cidFile}",col.names = FALSE,row.names = FALSE)
|
139
|
+
EOF
|
140
|
+
|
141
|
+
File.open(scpFile,"w"){|fpw|
|
142
|
+
fpw.write(r_proc)
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
def conv2num(eFile,nFile,ef1,ef2,nf,numFile,mapFile,isoFile)
|
148
|
+
|
149
|
+
wf=MCMD::Mtemp.new
|
150
|
+
xxn1=wf.file
|
151
|
+
xxn2=wf.file
|
152
|
+
xxn3=wf.file
|
153
|
+
xxeNodeMF=wf.file
|
154
|
+
|
155
|
+
# create a nodes list that are included in node and edge data
|
156
|
+
system "mcut f=#{ef1}:node i=#{eFile} o=#{xxn1}"
|
157
|
+
system "mcut f=#{ef2}:node i=#{eFile} o=#{xxn2}"
|
158
|
+
unless nFile
|
159
|
+
system "echo node >#{xxn3}"
|
160
|
+
else
|
161
|
+
system "mcut f=#{nf}:node i=#{nFile} o=#{xxn3}"
|
162
|
+
end
|
163
|
+
|
164
|
+
# xxeNodeMF : nodes list that are included in edge
|
165
|
+
system "mcat i=#{xxn1},#{xxn2} | muniq k=node | msetstr v=1 a=eNode o=#{xxeNodeMF}"
|
166
|
+
|
167
|
+
# isolate nodes list
|
168
|
+
system "mcat i=#{xxn1},#{xxn2},#{xxn3} | mcommon k=node m=#{xxeNodeMF} -r | mcut f=node o=#{isoFile}"
|
169
|
+
|
170
|
+
# create a mapping table between the original node label and the number iGraph will use
|
171
|
+
f=""
|
172
|
+
f << "mcat i=#{xxn1},#{xxn2},#{xxn3} |"
|
173
|
+
f << "muniq k=node |"
|
174
|
+
f << "mjoin k=node m=#{xxeNodeMF} f=eNode |"
|
175
|
+
f << "mnullto f=eNode v=0 |"
|
176
|
+
f << "mnumber s=eNode%r,node a=nid o=#{mapFile}"
|
177
|
+
system(f)
|
178
|
+
|
179
|
+
# create a data file that R script read
|
180
|
+
f=""
|
181
|
+
f << "mjoin k=#{ef1} K=node m=#{mapFile} f=nid:nid1 i=#{eFile} |"
|
182
|
+
f << "mjoin k=#{ef2} K=node m=#{mapFile} f=nid:nid2 |"
|
183
|
+
f << "mcut f=nid1,nid2 -nfno |"
|
184
|
+
f << "tr ',' ' ' >#{numFile}"
|
185
|
+
system(f)
|
186
|
+
end
|
187
|
+
|
188
|
+
temp=MCMD::Mtemp.new
|
189
|
+
numFile=temp.file
|
190
|
+
mapFile=temp.file
|
191
|
+
isoFile=temp.file
|
192
|
+
cluFile=temp.file
|
193
|
+
cidFile=temp.file
|
194
|
+
scpFile=temp.file
|
195
|
+
iscFile=temp.file
|
196
|
+
clnFile=temp.file
|
197
|
+
conv2num(ei,ni,ef1,ef2,nf,numFile,mapFile,isoFile)
|
198
|
+
genRscript(numFile,cluFile,cidFile,scpFile)
|
199
|
+
|
200
|
+
if args.bool("-verbose") then
|
201
|
+
system "R --vanilla -q < #{scpFile} "
|
202
|
+
else
|
203
|
+
system "R --vanilla -q --slave < #{scpFile} 2>/dev/null"
|
204
|
+
end
|
205
|
+
cid=`cat #{cidFile}`.to_i
|
206
|
+
|
207
|
+
f=""
|
208
|
+
f << "mnumber s=node S=#{cid+1} a=id i=#{isoFile} |"
|
209
|
+
f << "msetstr v=1 a=size |"
|
210
|
+
f << "mcut f=id,node,size o=#{iscFile}"
|
211
|
+
system(f)
|
212
|
+
|
213
|
+
# #{cluFile}
|
214
|
+
# id,nid,size
|
215
|
+
# 1,0,3
|
216
|
+
# 2,1,4
|
217
|
+
# 1,2,3
|
218
|
+
# 1,3,3
|
219
|
+
# 2,4,4
|
220
|
+
# 2,5,4
|
221
|
+
# 2,6,4
|
222
|
+
f=""
|
223
|
+
f << "mjoin k=nid m=#{mapFile} i=#{cluFile} f=node |"
|
224
|
+
f << "mcut f=id,node,size o=#{clnFile}"
|
225
|
+
system(f)
|
226
|
+
|
227
|
+
f=""
|
228
|
+
f << "mcat i=#{clnFile},#{iscFile} |"
|
229
|
+
f << "mfldname f=node:#{nf} |" if nf
|
230
|
+
f << "msortf f=id o=#{oFile}"
|
231
|
+
system(f)
|
232
|
+
|
233
|
+
# end message
|
234
|
+
MCMD::endLog(args.cmdline)
|
235
|
+
|
data/bin/mclique.rb
ADDED
@@ -0,0 +1,295 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
require "nysol/take"
|
7
|
+
|
8
|
+
# ver="1.0" # 初期リリース 2014/2/20
|
9
|
+
# ver="1.1" # eo=,no=の機能追加 2014/3/27
|
10
|
+
# ver="1.2" # ni=,nf=の追加, eo=,no=の機能をmclique2g.rbに分離, 枝出力を廃止(-nodeによる出力のみ) 2014/8/2
|
11
|
+
$cmd=$0.sub(/.*\//,"")
|
12
|
+
$version="1.2"
|
13
|
+
|
14
|
+
def help
|
15
|
+
STDERR.puts <<EOF
|
16
|
+
----------------------------
|
17
|
+
#{$cmd} version #{$version}
|
18
|
+
----------------------------
|
19
|
+
概要) 一般グラフデータから極大クリークを列挙する。
|
20
|
+
書式) #{$cmd} ei= ef= [ni=] [nf=] [o=] [l=] [u=] [-node] [-all] [log=] [T=] [--help]
|
21
|
+
|
22
|
+
ファイル名指定
|
23
|
+
ei= : 枝データファイル
|
24
|
+
ef= : 枝データ上の2つの節点項目名(省略時は"node1,node2")
|
25
|
+
ni= : 節点データファイル
|
26
|
+
nf= : 節点データ上の節点項目名(省略時は"node")
|
27
|
+
o= : 出力ファイル(クリークID-枝:-nodeを指定することでクリークID-節点に変更可能,省略時は標準出力)
|
28
|
+
l= : クリークを構成する最小節点数(ここで指定したサイズより小さいクリークは列挙されない)
|
29
|
+
u= : クリークを構成する最大節点数(ここで指定したサイズより大きいクリークは列挙されない)
|
30
|
+
-all : 極大クリークだけでなく、全クリークを列挙する。
|
31
|
+
log= : パラメータの設定値をkey-value形式のCSVで保存するファイル名
|
32
|
+
|
33
|
+
その他
|
34
|
+
T= : ワークディレクトリ(default:/tmp)
|
35
|
+
--help : ヘルプの表示
|
36
|
+
|
37
|
+
入力形式)
|
38
|
+
一般グラフを節点ペアで表現した形式。
|
39
|
+
他のいかなる節点とも接続のない節点は、サイズが1の自明なクリークであるため、入力対象外とする。
|
40
|
+
|
41
|
+
o=の出力形式)
|
42
|
+
クリークIDと接点を出力する。
|
43
|
+
出力項目は"id,node,size"の3項目である。
|
44
|
+
sizeはクリークを構成する節点数である。
|
45
|
+
|
46
|
+
備考)
|
47
|
+
内部で起動しているコマンドmaceは0から始まる整数で指定された節点名を前提として処理する。
|
48
|
+
一方で本コマンドは、任意の文字列で節点名を表したデータを処理できる。
|
49
|
+
それは、maceを実行する前に、それら文字列と整数との対応表を前処理で作成しているからである。
|
50
|
+
|
51
|
+
例)
|
52
|
+
$ cat data/edge.csv
|
53
|
+
n1,n2
|
54
|
+
a,b
|
55
|
+
a,c
|
56
|
+
a,d
|
57
|
+
b,c
|
58
|
+
b,d
|
59
|
+
b,e
|
60
|
+
c,d
|
61
|
+
d,e
|
62
|
+
|
63
|
+
$ #{$cmd} ei=edge.csv ef=n1,n2 o=output.csv
|
64
|
+
#MSG# converting graph files into a pair of numbered nodes ...; 2014/01/06 14:27:17
|
65
|
+
#MSG# converting the numbered nodes into original name ...; 2014/01/06 14:27:17
|
66
|
+
#END# #{$cmd} ei=data/edge1.csv ef=n1,n2 -node o=output.csv; 2014/01/06 14:27:17
|
67
|
+
$ cat output.csv
|
68
|
+
id,node,size
|
69
|
+
0,b,3
|
70
|
+
0,d,3
|
71
|
+
0,e,3
|
72
|
+
1,a,4
|
73
|
+
1,b,4
|
74
|
+
1,c,4
|
75
|
+
1,d,4
|
76
|
+
|
77
|
+
例) 節点ファイルも指定した例
|
78
|
+
$ cat edge.csv
|
79
|
+
n1,n2
|
80
|
+
c,a
|
81
|
+
c,d
|
82
|
+
d,e
|
83
|
+
a,d
|
84
|
+
a,e
|
85
|
+
|
86
|
+
$ cat node.csv
|
87
|
+
n
|
88
|
+
a
|
89
|
+
b
|
90
|
+
c
|
91
|
+
d
|
92
|
+
e
|
93
|
+
f
|
94
|
+
|
95
|
+
$ #{$cmd} ei=edge.csv ef=n1,n2 ni=node.csv nf=n o=output.csv
|
96
|
+
#MSG# converting graph files into a pair of numbered nodes ...; 2014/01/06 14:27:17
|
97
|
+
#MSG# converting the numbered nodes into original name ...; 2014/01/06 14:27:17
|
98
|
+
#END# #{$cmd} ei=data/edge1.csv ef=n1,n2 -node o=output.csv; 2014/01/06 14:27:17
|
99
|
+
$ cat output.csv
|
100
|
+
id,node,size
|
101
|
+
0,b,1
|
102
|
+
1,a,3
|
103
|
+
1,d,3
|
104
|
+
1,e,3
|
105
|
+
2,a,3
|
106
|
+
2,c,3
|
107
|
+
2,d,3
|
108
|
+
3,f,1
|
109
|
+
|
110
|
+
# Copyright(c) NYSOL 2012- All Rights Reserved.
|
111
|
+
EOF
|
112
|
+
exit
|
113
|
+
end
|
114
|
+
|
115
|
+
def ver()
|
116
|
+
STDERR.puts "version #{$version}"
|
117
|
+
exit
|
118
|
+
end
|
119
|
+
|
120
|
+
help() if ARGV.size <= 0 or ARGV[0]=="--help"
|
121
|
+
ver() if ARGV[0]=="--version"
|
122
|
+
|
123
|
+
args=MCMD::Margs.new(ARGV,"ei=,ef=,ni=,nf=,-all,o=,l=,u=,log=","ei=,ef=")
|
124
|
+
|
125
|
+
# コマンド実行可能確認
|
126
|
+
#CMD_mace="mace_20140215"
|
127
|
+
#exit(1) unless(MCMD::chkCmdExe(CMD_mace, "executable"))
|
128
|
+
|
129
|
+
# mcmdのメッセージは警告とエラーのみ
|
130
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
131
|
+
|
132
|
+
#ワークファイルパス
|
133
|
+
if args.str("T=")!=nil then
|
134
|
+
ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
|
135
|
+
end
|
136
|
+
|
137
|
+
all=args.bool("-all")
|
138
|
+
|
139
|
+
ei = args. file("ei=","r") # edgeファイル名
|
140
|
+
ni = args. file("ni=","r") # node file name
|
141
|
+
|
142
|
+
# ---- edge field names (two nodes) on ei=
|
143
|
+
ef1,ef2 = args.field("ef=", ei, "node1,node2",2,2)["names"]
|
144
|
+
|
145
|
+
# ---- node field name on ni=
|
146
|
+
nf = args.field("nf=", ni, "node",1,1)
|
147
|
+
nf = nf["names"][0] if nf
|
148
|
+
|
149
|
+
minSize = args.int("l=") # クリークサイズ下限
|
150
|
+
maxSize = args.int("u=") # クリークサイズ上限
|
151
|
+
oFile = args.file("o=", "w")
|
152
|
+
logFile = args.file("log=", "w")
|
153
|
+
|
154
|
+
def g2pair(ni,nf,ei,ef1,ef2,ipair,mapFile)
|
155
|
+
MCMD::msgLog("converting graph files into a pair of numbered nodes ...")
|
156
|
+
wf=MCMD::Mtemp.new
|
157
|
+
wf1=wf.file
|
158
|
+
wf2=wf.file
|
159
|
+
wf3=wf.file
|
160
|
+
|
161
|
+
system "mcut f=#{ef1}:node i=#{ei} o=#{wf1}"
|
162
|
+
system "mcut f=#{ef2}:node i=#{ei} o=#{wf2}"
|
163
|
+
system "mcut f=#{nf}:node i=#{ni} o=#{wf3}" if ni
|
164
|
+
|
165
|
+
f=""
|
166
|
+
if ni
|
167
|
+
f << "mcat i=#{wf1},#{wf2},#{wf3} f=node |"
|
168
|
+
else
|
169
|
+
f << "mcat i=#{wf1},#{wf2} f=node |"
|
170
|
+
end
|
171
|
+
f << "msortf f=node |"
|
172
|
+
f << "muniq k=node |"
|
173
|
+
f << "mnumber s=node a=num o=#{mapFile}"
|
174
|
+
system(f)
|
175
|
+
|
176
|
+
f=""
|
177
|
+
f << "mcut f=#{ef1},#{ef2} i=#{ei} |"
|
178
|
+
f << "msortf f=#{ef1} |"
|
179
|
+
f << "mjoin k=#{ef1} K=node m=#{mapFile} f=num:num1 |"
|
180
|
+
f << "msortf f=#{ef2} |"
|
181
|
+
f << "mjoin k=#{ef2} K=node m=#{mapFile} f=num:num2 |"
|
182
|
+
f << "mcut f=num1,num2 |"
|
183
|
+
f << "mfsort f=num1,num2 |"
|
184
|
+
f << "msortf f=num1%n,num2%n -nfno o=#{ipair}"
|
185
|
+
system(f)
|
186
|
+
end
|
187
|
+
|
188
|
+
# ============
|
189
|
+
# entry point
|
190
|
+
t=Time.now
|
191
|
+
|
192
|
+
# 入力ファイルをノード番号ペアデータ(input)に変換する。
|
193
|
+
# csvで指定された場合は、番号-アイテムmapデータも作成(xxmap)。
|
194
|
+
wf=MCMD::Mtemp.new
|
195
|
+
xxinp=wf.file
|
196
|
+
xxmap=wf.file
|
197
|
+
input=ei
|
198
|
+
|
199
|
+
g2pair(ni,nf,ei,ef1,ef2,xxinp,xxmap)
|
200
|
+
input=xxinp
|
201
|
+
|
202
|
+
xxmace = wf.file # maceの出力(tra形式)
|
203
|
+
xxpair = wf.file # 上記traをpair形式に変換したデータ
|
204
|
+
|
205
|
+
# mace実行
|
206
|
+
f="Me"
|
207
|
+
f="Ce" if all
|
208
|
+
f << " -l #{minSize}" if minSize
|
209
|
+
f << " -u #{maxSize}" if maxSize
|
210
|
+
#f << " -S #{maxOut}" if maxOut
|
211
|
+
f << " #{input} #{xxmace}"
|
212
|
+
#system(f)
|
213
|
+
TAKE::run_mace(f)
|
214
|
+
|
215
|
+
MCMD::msgLog("converting the numbered nodes into original name ...")
|
216
|
+
|
217
|
+
id=0
|
218
|
+
fld="id,num,size"
|
219
|
+
MCMD::Mcsvout.new("o=#{xxpair} f=#{fld}"){|oCSV|
|
220
|
+
# xxmace
|
221
|
+
# 4 3 1
|
222
|
+
# 3 2 1 0
|
223
|
+
MCMD::Mcsvin.new("i=#{xxmace} -nfn"){|iCsv|
|
224
|
+
iCsv.each{|flds|
|
225
|
+
items=flds[0].split(" ")
|
226
|
+
size=items.size
|
227
|
+
(0...size).each{|i|
|
228
|
+
# id-node形式による出力
|
229
|
+
ar = []
|
230
|
+
ar << id
|
231
|
+
ar << items[i]
|
232
|
+
ar << size
|
233
|
+
oCSV.write(ar)
|
234
|
+
}
|
235
|
+
id+=1
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
240
|
+
# when ni= specified, it add the isolated single cliques.
|
241
|
+
if ni then
|
242
|
+
xxcliq=wf.file
|
243
|
+
xxiso =wf.file
|
244
|
+
xxcat =wf.file
|
245
|
+
|
246
|
+
f=""
|
247
|
+
f << "msortf f=num i=#{xxpair} |"
|
248
|
+
f << "mselstr f=size v=1 |" if all # when -all specified
|
249
|
+
f << "mcut f=num |"
|
250
|
+
f << "msortf f=num |"
|
251
|
+
f << "muniq k=num o=#{xxcliq}"
|
252
|
+
system(f)
|
253
|
+
|
254
|
+
# select all nodes which are not included in any cliques
|
255
|
+
f=""
|
256
|
+
f << "mcut f=num i=#{xxmap} |"
|
257
|
+
f << "msortf f=num |"
|
258
|
+
f << "mcommon k=num m=#{xxcliq} -r |"
|
259
|
+
f << "mnumber S=#{id} a=id -q|"
|
260
|
+
f << "msetstr v=1 a=size |"
|
261
|
+
f << "mcut f=id,num,size o=#{xxiso}"
|
262
|
+
system(f)
|
263
|
+
|
264
|
+
system "mcat i=#{xxpair},#{xxiso} o=#{xxcat}"
|
265
|
+
system "cp #{xxcat} #{xxpair}"
|
266
|
+
end
|
267
|
+
|
268
|
+
w4=wf.file
|
269
|
+
system "msortf f=num i=#{xxmap} o=#{w4}"
|
270
|
+
|
271
|
+
# id-node形式による出力
|
272
|
+
f = ""
|
273
|
+
f << "msortf i=#{xxpair} f=num |"
|
274
|
+
f << "msortf f=num |"
|
275
|
+
f << "mjoin m=#{w4} k=num f=node |"
|
276
|
+
f << "mcut f=id,node,size |"
|
277
|
+
f << "msortf f=id,node o=#{oFile}"
|
278
|
+
system(f)
|
279
|
+
|
280
|
+
procTime=Time.now-t
|
281
|
+
|
282
|
+
# ログファイル出力
|
283
|
+
if logFile
|
284
|
+
kv=args.getKeyValue()
|
285
|
+
kv << ["time",procTime]
|
286
|
+
MCMD::Mcsvout.new("o=#{logFile} f=key,value"){|csv|
|
287
|
+
kv.each{|line|
|
288
|
+
csv.write(line)
|
289
|
+
}
|
290
|
+
}
|
291
|
+
end
|
292
|
+
|
293
|
+
# 終了メッセージ
|
294
|
+
MCMD::endLog(args.cmdline)
|
295
|
+
|
data/bin/mclique2g.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
|
7
|
+
# ver="1.0" # 初期リリース 2014/7/04
|
8
|
+
$cmd=$0.sub(/.*\//,"")
|
9
|
+
$version=1.0
|
10
|
+
|
11
|
+
def help
|
12
|
+
STDERR.puts <<EOF
|
13
|
+
----------------------------
|
14
|
+
#{$cmd} version #{$version}
|
15
|
+
----------------------------
|
16
|
+
概要) クリークを一つの節点に変換し新たなグラフを構成する。
|
17
|
+
書式) #{$cmd} i= [id=] [f=] eo= no= [T=] [--help]
|
18
|
+
|
19
|
+
ファイル名指定
|
20
|
+
i= : クリークファイル名
|
21
|
+
id= : クリークID項目名(デフォルト:"id")
|
22
|
+
f= : クリークを構成する節点項目名(デフォルト:"node")
|
23
|
+
eo= : 枝ファイル名
|
24
|
+
no= : 節点ファイル名
|
25
|
+
|
26
|
+
その他
|
27
|
+
T= : ワークディレクトリ(default:/tmp)
|
28
|
+
--help : ヘルプの表示
|
29
|
+
|
30
|
+
入力データ)
|
31
|
+
クリークIDと節点の2項目からなるCSVファイル。
|
32
|
+
これはmclique.rbコマンドでのno=に出力されるデータに対応する。
|
33
|
+
|
34
|
+
出力データ)
|
35
|
+
eo=には枝(節点ペア)データ、no=には節点データが、以下の項目で出力される。
|
36
|
+
eo=: node1,node2,weight
|
37
|
+
node1,node2: 入力データのクリークIDを節点番号とする枝データ。
|
38
|
+
weight: 2つのクリークの共通節点数。
|
39
|
+
no=: node,weight
|
40
|
+
node: 入力データのクリークIDを節点番号とする枝データ。
|
41
|
+
weight: クリークを構成していた節点数。
|
42
|
+
|
43
|
+
例)
|
44
|
+
|
45
|
+
# Copyright(c) NYSOL 2014- All Rights Reserved.
|
46
|
+
EOF
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
|
50
|
+
def ver()
|
51
|
+
STDERR.puts "version #{$version}"
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
|
55
|
+
help() if ARGV[0]=="--help" or ARGV.size <= 0
|
56
|
+
ver() if ARGV[0]=="--version"
|
57
|
+
|
58
|
+
args=MCMD::Margs.new(ARGV,"i=,id=,f=,eo=,no=,T=","i=,eo=,no=")
|
59
|
+
|
60
|
+
# mcmdのメッセージは警告とエラーのみ
|
61
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
62
|
+
|
63
|
+
#ワークファイルパス
|
64
|
+
if args.str("T=")!=nil then
|
65
|
+
ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
|
66
|
+
end
|
67
|
+
|
68
|
+
iFile = args.file("i=" ,"r") # i=
|
69
|
+
eoFile = args.file("eo=","w") # eo=
|
70
|
+
noFile = args.file("no=","w") # no=
|
71
|
+
|
72
|
+
## id=
|
73
|
+
id=args.field("id=",iFile,"id",1,1)["names"][0]
|
74
|
+
|
75
|
+
## f=
|
76
|
+
node = args.field("f=", iFile, "node", 1, 1)["names"][0]
|
77
|
+
|
78
|
+
wf=MCMD::Mtemp.new
|
79
|
+
xxbase=wf.file
|
80
|
+
|
81
|
+
# cleaning
|
82
|
+
f=""
|
83
|
+
f << "mcut f=#{id},#{node} i=#{iFile} |"
|
84
|
+
f << "msortf f=#{id},#{node} |"
|
85
|
+
f << "muniq k=#{id},#{node} o=#{xxbase}"
|
86
|
+
system(f)
|
87
|
+
|
88
|
+
f=""
|
89
|
+
f << "mcut f=#{id}:node i=#{xxbase} |"
|
90
|
+
f << "msortf f=node |"
|
91
|
+
f << "mcount k=node a=weight o=#{noFile}"
|
92
|
+
system(f)
|
93
|
+
|
94
|
+
f=""
|
95
|
+
f << "msortf f=#{node} i=#{xxbase} |"
|
96
|
+
f << "mcombi k=#{node} f=#{id} n=2 a=node1,node2 |"
|
97
|
+
f << "mfsort f=node1,node2 |"
|
98
|
+
f << "msortf f=node1,node2 |"
|
99
|
+
f << "mcount k=node1,node2 a=weight |"
|
100
|
+
f << "mcut f=node1,node2,weight o=#{eoFile}"
|
101
|
+
system(f)
|
102
|
+
|
103
|
+
# end message
|
104
|
+
MCMD::endLog(args.cmdline)
|
105
|
+
|