Add seg_int database

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-11-11 09:38:36 +01:00 committed by Tim 'mithro' Ansell
parent 612e5b10cd
commit fea6a9efb0
5 changed files with 72 additions and 29 deletions

View File

@ -1,2 +1,2 @@
/specimen_[0-9][0-9][0-9]/
/seg_clbl[lm].segbits
/seg_int.segbits

View File

@ -1,19 +1,16 @@
N := 5
N := 15
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
database: database/clbll database/clblm
database: $(SPECIMENS_OK)
../../tools/segmatch -m 5 -M 15 -o seg_int.segbits \
$(addsuffix /segdata_clbll.txt,$(SPECIMENS)) \
$(addsuffix /segdata_clblm.txt,$(SPECIMENS))
pushdb: pushdb/clbll pushdb/clblm
database/%: $(SPECIMENS_OK)
../../tools/segmatch -o seg_$(notdir $@).segbits \
$(addsuffix /segdata_$(notdir $@).txt,$(SPECIMENS))
pushdb/%:
bash ../../utils/mergedb.sh seg_$(notdir $@).segbits \
../../database/$(XRAY_DATABASE)/seg_$(notdir $@).segbits
pushdb:
bash ../../utils/mergedb.sh seg_int.segbits \
../../database/$(XRAY_DATABASE)/seg_int.segbits
$(SPECIMENS_OK):
bash generate.sh $(subst /OK,,$@)

View File

@ -41,9 +41,9 @@ for tile, pips_srcs_dsts in tiledata.items():
for pip, src_dst in pipdata.items():
if pip in pips:
segmk.addtag(tile, pip, 1)
segmk.addtag(tile, "%s.%s" % (src_dst[1], src_dst[0]), 1)
elif src_dst[1] not in dsts:
segmk.addtag(tile, pip, 0)
segmk.addtag(tile, "%s.%s" % (src_dst[1], src_dst[0]), 0)
segmk.compile()
segmk.write()

View File

@ -7,6 +7,7 @@
#include <iostream>
#include <fstream>
#include <numeric>
#include <algorithm>
#include <map>
#include <set>
@ -140,14 +141,21 @@ void andc_masks(vector<bool> &dst_mask, const vector<bool> &src_mask)
int main(int argc, char **argv)
{
const char *outfile = nullptr;
int min_each = 0, min_total = 0;
int opt;
while ((opt = getopt(argc, argv, "io:")) != -1)
while ((opt = getopt(argc, argv, "io:m:M:")) != -1)
switch (opt)
{
case 'o':
outfile = optarg;
break;
case 'm':
min_each = atoi(optarg);
break;
case 'M':
min_total = atoi(optarg);
break;
case 'i':
mode_inv = true;
break;
@ -163,6 +171,12 @@ help:
fprintf(stderr, " -o <filename>\n");
fprintf(stderr, " set output file\n");
fprintf(stderr, "\n");
fprintf(stderr, " -m <int>\n");
fprintf(stderr, " min number of set/cleared samples each\n");
fprintf(stderr, "\n");
fprintf(stderr, " -M <int>\n");
fprintf(stderr, " min number of set/cleared samples total\n");
fprintf(stderr, "\n");
fprintf(stderr, " -i\n");
fprintf(stderr, " add inverted tags\n");
fprintf(stderr, "\n");
@ -200,10 +214,12 @@ help:
int max_candidates = 0;
float avg_candidates = 0;
std::vector<std::string> out_lines;
for (int tag_idx = 0; tag_idx < num_tags; tag_idx++)
{
vector<bool> mask(num_bits, true);
bool got1 = false, got0 = false;
int count1 = 0, count0 = 0;
for (auto &segdat : segdata)
{
@ -214,36 +230,54 @@ help:
assert(!tag1 || !tag0);
if (tag1) {
got1 = true;
count1++;
and_masks(mask, segdata_bits(sd));
continue;
}
if (tag0) {
got0 = true;
count0++;
andc_masks(mask, segdata_bits(sd));
continue;
}
}
assert(got1 || got0);
assert(count1 || count0);
fprintf(f, "%s", tag_ids_r.at(tag_idx).c_str());
std::string out_line = tag_ids_r.at(tag_idx);
if (!got1) {
fprintf(f, " <const0>\n");
if (count1 < min_each) {
char buffer[64];
snprintf(buffer, 64, " <m1 %d>", count1);
out_line += buffer;
}
if (count0 < min_each) {
char buffer[64];
snprintf(buffer, 64, " <m0 %d>", count0);
out_line += buffer;
}
if (count1 + count0 < min_total) {
char buffer[64];
snprintf(buffer, 64, " <M %d %d>", count1, count0);
out_line += buffer;
}
if (!count1) {
out_lines.push_back(out_line + " <const0>");
cnt_const0 += 1;
continue;
}
if (!got0) {
fprintf(f, " <const1>");
if (!count0) {
out_line += " <const1>";
cnt_const1 += 1;
}
int num_candidates = std::accumulate(mask.begin(), mask.end(), 0);
if (got0) {
if (count0) {
min_candidates = std::min(min_candidates, num_candidates);
max_candidates = std::max(max_candidates, num_candidates);
avg_candidates += num_candidates;
@ -251,15 +285,27 @@ help:
}
if (0 < num_candidates && num_candidates <= 4) {
std::vector<std::string> out_tags;
for (int bit_idx = 0; bit_idx < num_bits; bit_idx++)
if (mask.at(bit_idx))
fprintf(f, " %s", bit_ids_r.at(bit_idx).c_str());
fprintf(f, "\n");
out_tags.push_back(bit_ids_r.at(bit_idx));
std::sort(out_tags.begin(), out_tags.end());
for (auto &tag : out_tags)
out_line += " " + tag;
} else {
fprintf(f, " <%d candidates>\n", num_candidates);
char buffer[64];
snprintf(buffer, 64, " <%d candidates>", num_candidates);
out_line += buffer;
}
out_lines.push_back(out_line);
}
std::sort(out_lines.begin(), out_lines.end());
for (auto &line : out_lines)
fprintf(f, "%s\n", line.c_str());
if (cnt_candidates)
avg_candidates /= cnt_candidates;

View File

@ -4,5 +4,5 @@ test $# = 2
test -e "$1"
touch "$2"
tmp=`mktemp -p .`
sort -u "$1" "$2" > "$tmp"
sort -u "$1" "$2" | grep -v '<.*>' > "$tmp"
mv "$tmp" "$2"