public static List<string> ExecuteKNRSEQ(IndexArgumentSetup setup, string nick, int numrefs, int k, double maxcand_ratio)
{
var idxname = String.Format ("{0}/Index.knrseq-{1}-{2}", nick, numrefs, k);
MetricDB db = SpaceGenericIO.Load (setup.BINARY_DATABASE);
Index idx;
var suffix = "";
var resnamelist = new List<string> ();
if (!File.Exists (idxname)) {
Console.WriteLine ("*** creating index {0}", idxname);
var s = DateTime.Now.Ticks;
var c = db.NumberDistances;
var IDX = new KnrSeqSearch ();
var refsDB = new SampleSpace("", db, numrefs);
var refsIDX = new EPTable ();
refsIDX.Build(refsDB, 4, (_db, _rand) => new EPListOptimizedA(_db, 4, _rand));
if (k == 0) {
k = KnrEstimateParameters.EstimateKnrEnsuringSharedNeighborhoods (db, refsIDX, (int)Math.Abs (setup.QARG));
suffix = String.Format ("estimated-K={0}.", k);
}
IDX.Build (db, refsIDX, k, int.MaxValue);
SaveConstructionTime (idxname, DateTime.Now.Ticks - s, db.NumberDistances - c);
IndexGenericIO.Save (idxname, IDX);
idx = IDX;
} else {
Console.WriteLine ("*** loading index {0}", idxname);
idx = IndexGenericIO.Load (idxname);
if (k == 0) {
var _idx = idx as KnrSeqSearch;
suffix = String.Format ("estimated-K={0}.", _idx.K);
}
}
string resname;
// PPIndex
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.PPI", maxcand_ratio));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
var knr = idx as KnrSeqSearch;
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
PerformSearch (resname, knr, idxname, setup);
}
// KnrSeqSearchCosine
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.COS", maxcand_ratio));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
var knr = new KnrSeqSearchCosine(idx as KnrSeqSearch);
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
PerformSearch (resname, knr, idxname, setup);
}
// KnrSeqSearchFootrule
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.FOOTRULE", maxcand_ratio));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
var knr = new KnrSeqSearchFootrule(idx as KnrSeqSearch);
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
PerformSearch (resname, knr, idxname, setup);
}
// KnrSeqSearchJaccLCS
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.JACCLCS", maxcand_ratio));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
var knr = new KnrSeqSearchJaccLCS(idx as KnrSeqSearch);
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
PerformSearch (resname, knr, idxname, setup);
}
// KnrSeqSearchLCSv3
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.LCSv3", maxcand_ratio));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
var knr = new KnrSeqSearchLCSv3(idx as KnrSeqSearch);
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
PerformSearch (resname, knr, idxname, setup);
}
// NAPP
foreach (var ksearch in setup.KNR_KSEARCH) {
var knr = new NAPP(idx as KnrSeqSearch);
knr.MAXCAND = (int)(idx.DB.Count * maxcand_ratio);
resname = GetResultName (nick, idxname, setup, String.Format(suffix + "maxcand={0}.NAPP.ksearch={1}", maxcand_ratio, ksearch));
resnamelist.Add(resname);
if (!File.Exists (resname)) {
PerformSearch (resname, knr, idxname, setup);
}
}
return resnamelist;
}