Ejemplo n.º 1
0
        /// <summary>
        /// Read next fingerprint rec from file
        /// </summary>
        /// <param name="fi"></param>
        /// <returns></returns>

        public FingerprintRec ReadFingerprintRec(
            int fi)
        {
            if (Rfpa == null || Rfpa.reader != ReadStreams[fi])             // start reading file
            {
                Rfpa = new ReadFingerprintRecArgs();
                Rfpa.Initialize(ReadStreams[fi], FpLengthInLongs);
            }

            if (!ReadRawFingerprintRec(Rfpa))
            {
                return(null);                                          // end of file
            }
            FingerprintRec r = new FingerprintRec();

            r.molId = Rfpa.uci;
            r.SrcId = Rfpa.src;
            string cid = ASCIIEncoding.ASCII.GetString(Rfpa.cidBytes, 0, Rfpa.cidLength);

            r.Cid         = CompoundIdNormalizeForDatabase(cid);
            r.Cardinality = Rfpa.cardinality;
            r.Fingerprint = (long[])Rfpa.fingerprint.Clone();

            return(r);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ReadFingerprintRec
        /// </summary>
        /// <returns></returns>
        public FingerprintRec ReadFingerprintRec()
        {
            if (Rsi < 0)
            {
                Rsi = 0;                      // first file
            }
            FingerprintRec r = ReadFingerprintRec(Rsi);

            while (r == null)             // if end of file try going to next
            {
                if (Rsi + 1 >= ReadStreams.Length)
                {
                    return(null);
                }

                Rsi++;
                Rfpa = new ReadFingerprintRecArgs();
                Rfpa.Initialize(ReadStreams[Rsi], FpLengthInLongs);

                r = ReadFingerprintRec(Rsi);
            }

            r.molId = Rfpa.uci;
            r.SrcId = Rfpa.src;
            string cid = ASCIIEncoding.ASCII.GetString(Rfpa.cidBytes, 0, Rfpa.cidLength);

            r.Cid = CompoundIdNormalizeForDatabase(cid);

            r.Cardinality = Rfpa.cardinality;
            r.Fingerprint = (long[])Rfpa.fingerprint.Clone();

            return(r);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Search a single file
        /// </summary>

        void SearchSingleFile(int fi)
        {
            StructSearchMatch sm = null;

            AssertMx.IsNotNull(FpDao, "FpDao");

            List <StructSearchMatch> matchList = FileMatchLists[fi];

            AssertMx.IsNotNull(matchList, "matchList");

            OpenBitSet queryObs = new OpenBitSet(QueryFpLongArray, QueryFpLongArray.Length);

            AssertMx.IsNotNull(queryObs, "queryObs");

            OpenBitSet dbObs = new OpenBitSet(QueryFpLongArray, QueryFpLongArray.Length);             // gets set to DB fp for intersect

            AssertMx.IsNotNull(dbObs, "dbObs");

            FileStream fs = FileStreamReaders[fi];

            AssertMx.IsNotNull(fs, "fs");

            ReadFingerprintRecArgs a = new ReadFingerprintRecArgs();

            a.Initialize(fs, QueryFpLongArray.Length);

            try
            {
                while (true)
                {
                    bool readOk = FpDao.ReadRawFingerprintRec(a);
                    if (!readOk)
                    {
                        break;
                    }

                    //if (IsSrcCidMatch("03435269", a)) a = a;  // debug

                    dbObs.Bits = a.fingerprint;
                    dbObs.Intersect(queryObs);
                    int   commonCnt = (int)dbObs.Cardinality();
                    float simScore  = commonCnt / (float)(a.cardinality + QueryFpCardinality - commonCnt);

                    if (simScore >= MinimumSimilarity)
                    {
                        sm            = ReadFingerprintRec_To_StructSearchMatch(a);
                        sm.SearchType = StructureSearchType.MolSim;
                        sm.MatchScore = simScore;

                        matchList.Add(sm);
                    }
                }
            }

            catch (Exception ex)
            {
                string msg = ex.Message;
                msg += string.Format("\r\nfi: {0}, fs.Name: {1}, sm: {2}", fi, fs.Name, sm != null ? sm.Serialize() : "");
                DebugLog.Message(DebugLog.FormatExceptionMessage(ex, msg));
                throw new Exception(msg, ex);
            }

            return;
        }