Line data Source code
1 : #include "crpropa/module/Tools.h"
2 : #include "crpropa/Clock.h"
3 :
4 : #include <iostream>
5 : #include <sstream>
6 :
7 : using namespace std;
8 :
9 : namespace crpropa {
10 :
11 0 : PerformanceModule::~PerformanceModule() {
12 : double total = 0;
13 0 : for (size_t i = 0; i < modules.size(); i++) {
14 : _module_info &m = modules[i];
15 0 : total += m.time;
16 : }
17 0 : cout << "Performance for " << calls << " calls:" << endl;
18 0 : for (size_t i = 0; i < modules.size(); i++) {
19 : _module_info &m = modules[i];
20 0 : cout << " - " << floor((1000 * m.time / total) + 0.5) / 10 << "% -> "
21 0 : << m.module->getDescription() << ": " << (m.time / calls)
22 : << endl;
23 : }
24 0 : }
25 :
26 0 : void PerformanceModule::add(Module *module) {
27 : _module_info info;
28 0 : info.module = module;
29 0 : info.time = 0;
30 0 : modules.push_back(info);
31 0 : }
32 :
33 0 : void PerformanceModule::process(Candidate *candidate) const {
34 0 : vector<double> times(modules.size());
35 0 : for (size_t i = 0; i < modules.size(); i++) {
36 : _module_info &m = modules[i];
37 0 : double start = Clock::getInstance().getMillisecond();
38 0 : m.module->process(candidate);
39 0 : double end = Clock::getInstance().getMillisecond();
40 0 : times[i] = end - start;
41 : }
42 :
43 0 : #pragma omp critical(PerformanceModule)
44 : {
45 0 : for (size_t i = 0; i < modules.size(); i++) {
46 : _module_info &m = modules[i];
47 0 : m.time += times[i];
48 : }
49 0 : calls++;
50 : }
51 0 : }
52 :
53 0 : string PerformanceModule::getDescription() const {
54 0 : stringstream sstr;
55 0 : sstr << "PerformanceModule (";
56 0 : for (size_t i = 0; i < modules.size(); i++) {
57 : _module_info &m = modules[i];
58 0 : if (i > 0)
59 0 : sstr << ", ";
60 0 : sstr << m.module->getDescription();
61 : }
62 0 : sstr << ")";
63 0 : return sstr.str();
64 0 : }
65 :
66 : // ----------------------------------------------------------------------------
67 0 : ParticleFilter::ParticleFilter() {
68 :
69 0 : }
70 1 : ParticleFilter::ParticleFilter(const std::set<int> &ids) : ids(ids) {
71 :
72 1 : }
73 0 : void ParticleFilter::addId(int id) {
74 : ids.insert(id);
75 0 : }
76 0 : void ParticleFilter::removeId(int id) {
77 : ids.erase(id);
78 0 : }
79 :
80 0 : std::set<int> &ParticleFilter::getIds() {
81 0 : return ids;
82 : }
83 :
84 7 : void ParticleFilter::process(Candidate* candidate) const {
85 14 : if (ids.find(candidate->current.getId()) == ids.end())
86 5 : reject(candidate);
87 : else
88 2 : accept(candidate);
89 7 : }
90 :
91 0 : string ParticleFilter::getDescription() const {
92 0 : stringstream sstr;
93 0 : sstr << "ParticleFilter: ";
94 0 : for (std::set<int>::const_iterator i = ids.begin(); i != ids.end(); i++) {
95 0 : sstr << *i << ", ";
96 : }
97 0 : sstr << ")";
98 0 : return sstr.str();
99 0 : }
100 :
101 : // ----------------------------------------------------------------------------
102 0 : EmissionMapFiller::EmissionMapFiller(EmissionMap *emissionMap) : emissionMap(emissionMap) {
103 :
104 0 : }
105 :
106 0 : void EmissionMapFiller::setEmissionMap(EmissionMap *emissionMap) {
107 0 : this->emissionMap = emissionMap;
108 0 : }
109 :
110 0 : void EmissionMapFiller::process(Candidate* candidate) const {
111 0 : if (emissionMap) {
112 0 : #pragma omp critical(EmissionMap)
113 : {
114 0 : emissionMap->fillMap(candidate->source);
115 : }
116 : }
117 0 : }
118 :
119 0 : string EmissionMapFiller::getDescription() const {
120 0 : return "EmissionMapFiller";
121 : }
122 :
123 : } // namespace crpropa
|