RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
DebugTrace.h
Go to the documentation of this file.
1//
2// Copyright (C) 2014 Novartis Institutes for BioMedical Research
3//
4// @@ All Rights Reserved @@
5// This file is part of the RDKit.
6// The contents are covered by the terms of the BSD license
7// which is included in the file license.txt, found at the root
8// of the RDKit source tree.
9//
10#include <RDGeneral/export.h>
11#pragma once
12#include <cstdio>
13#include <cstring>
14#include <cstddef>
15#include <ctime>
16#ifdef _MSC_VER
17#define _CRT_SECURE_NO_WARNINGS
18#define NOMINMAX
19#include <Winsock2.h> // for timeval
20#ifdef _DEBUG // check memory leaks
21#include <crtdbg.h>
22#define _CRTDBG_MAP_ALLOC
23#ifndef new
24#define new new (_NORMAL_BLOCK, __FILE__, __LINE__)
25#endif
26#endif
27#else
28#include <unistd.h>
29#include <fcntl.h>
30#include <sys/time.h>
31#ifndef _WIN32
32#include <sys/resource.h>
33#endif
34#endif
35
36// SELECT ALGORITHM OPTIONS by comment some lines to exclude additional or
37// experimental optimisations:
38
39#define SEED_GROW_DEEP // fast and works much times faster (but it can depend
40 // on molecules)
41// #define EXCLUDE_WRONG_COMPOSITION // fast but with a little effect, because
42// amount of external bonds usually is very small.
43// Exclude mismatched bonds combinations during seed growing (2^N-1 stage)
44
45#define FAST_SUBSTRUCT_CACHE // based on a hash of Morgan code
46#define DUP_SUBSTRUCT_CACHE // based on list of query atoms and bonds. For
47 // rings where seeds growing in both directions
48 // throw the same ring.
49
50#define FAST_INCREMENTAL_MATCH // fast and some time very useful. request
51 // PRECOMPUTED_TABLES_MATCH
52// previous match result based match checking without finding new matched
53// substructure location in the target
54
55#define VERBOSE_STATISTICS_ON
56
57#ifdef _MSC_VER
58#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
59
60struct timezone {
61 int tz_minuteswest; // minutes W of Greenwich
62 int tz_dsttime; // type of dst correction
63};
64
65static inline int gettimeofday(struct timeval *tv, struct timezone *tz) {
66 FILETIME ft;
67 unsigned __int64 tmpres = 0;
68 static int tzflag;
69
70 if (nullptr != tv) {
71 GetSystemTimeAsFileTime(&ft);
72
73 tmpres |= ft.dwHighDateTime;
74 tmpres <<= 32;
75 tmpres |= ft.dwLowDateTime;
76
77 // converting file time to unix epoch
78 tmpres -= DELTA_EPOCH_IN_MICROSECS;
79 tmpres /= 10; // convert into microseconds
80 tv->tv_sec = (long)(tmpres / 1000000UL);
81 tv->tv_usec = (long)(tmpres % 1000000UL);
82 }
83
84 if (nullptr != tz) {
85 if (!tzflag) {
86 _tzset();
87 tzflag++;
88 }
89 tz->tz_minuteswest = _timezone / 60;
90 tz->tz_dsttime = _daylight;
91 }
92 return 0;
93}
94#endif
95
96static inline unsigned long long nanoClock(
97 void) { // actually returns microseconds
98 struct timeval t;
99 gettimeofday(&t, (struct timezone *)nullptr);
100 return t.tv_usec + t.tv_sec * 1000000ULL;
101}
102
103namespace RDKit {
104namespace FMCS {
105
106#ifdef VERBOSE_STATISTICS_ON
107
108// compute statistics of really very very fast calls.
109// It a bit decrease overal performance, but might be interested for
110// investigation purpose (only)
111// #define VERBOSE_STATISTICS_FASTCALLS_ON
112
114 unsigned int TotalSteps{0}, MCSFoundStep{0};
115 unsigned long long MCSFoundTime;
117 unsigned int Seed{0}, RemainingSizeRejected{0};
119 unsigned int MatchCall{0}, MatchCallTrue{0};
121 unsigned int ExactMatchCall{0}, ExactMatchCallTrue{0}; // hash cache
127
129};
130#endif
131} // namespace FMCS
132} // namespace RDKit
static unsigned long long nanoClock(void)
Definition DebugTrace.h:96
Std stuff.
unsigned long long MCSFoundTime
Definition DebugTrace.h:115
unsigned int RemainingSizeRejected
Definition DebugTrace.h:117
unsigned int WrongCompositionDetected
Definition DebugTrace.h:125
unsigned int DupCacheFoundMatch
Definition DebugTrace.h:126
unsigned int MismatchedInitialSeed
Definition DebugTrace.h:116
unsigned int ExactMatchCallTrue
Definition DebugTrace.h:121
unsigned int IndividualBondExcluded
Definition DebugTrace.h:118
unsigned int WrongCompositionRejected
Definition DebugTrace.h:125
unsigned int HashKeyFoundInCache
Definition DebugTrace.h:122