Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JPolicy.cc File Reference

Example program to test policy method for missing module data. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <set>
#include <map>
#include "TRandom3.h"
#include "JCompass/JPolicy.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JModuleRouter.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to test policy method for missing module data.

Author
mdejong

Definition in file JPolicy.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 24 of file JPolicy.cc.

25{
26 using namespace std;
27 using namespace JPP;
28
29 string detectorFile;
30 double P;
31 size_t size;
32 ULong_t seed;
33 int debug;
34
35 try {
36
37 JParser<> zap("Example program to test policy method for missing module data.");
38
39 zap['a'] = make_field(detectorFile, "Detector file");
40 zap['P'] = make_field(P, "Survival probability");
41 zap['N'] = make_field(size, "Minimal size") = 1;
42 zap['S'] = make_field(seed) = 0;
43 zap['d'] = make_field(debug) = 3;
44
45 zap(argc, argv);
46 }
47 catch(const exception &error) {
48 FATAL(error.what() << endl);
49 }
50
51 gRandom->SetSeed(seed);
52
53 if (P <= 0.0 || P > 1.0) {
54 FATAL("Invalid probability " << P << endl);
55 }
56
58
59 try {
60 load(detectorFile, detector);
61 }
62 catch(const JException& error) {
63 FATAL(error);
64 }
65
66 const JModuleRouter router(detector);
67
68 struct counter_type {
69 counter_type() :
70 count(0)
71 {}
72
73 int count;
74 };
75
77
78 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
79 strings[module->getString()].count += 1;
80 }
81
82 set<int> buffer;
83
84 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
85 if (gRandom->Rndm() <= P || strings[module->getString()].count == 1)
86 buffer.insert(module->getID());
87 else
88 strings[module->getString()].count -= 1;
89 }
90
91 DEBUG("Number of modules " << buffer.size() << "/" << detector.size() << endl);
92
93
94 const JPolicy policy(router, buffer.begin(), buffer.end(), size);
95
96 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
97
98 const int id = module->getID();
99
100 if (debug >= debug_t || buffer.count(id) == 0) {
101
102 cout << "module: " << setw(10) << id << ' '
103 << getLabel(module->getLocation()) << ' '
104 << buffer.count(id) << flush;
105
106 if (buffer.count(id) == 0) {
107
108 cout << " ->";
109
110 if (module->getFloor() != 0) {
111
112 const JPolicy::mapped_type result = policy.at(id);
113
114 for (JPolicy::mapped_type::const_iterator i = result.begin(); i != result.end(); ++i) {
115 cout << ' ' << getLabel(router.getModule(*i).getLocation());
116 }
117
118 } else {
119
120 cout << ' ' << "skip";
121 }
122 }
123
124 cout << endl;
125 }
126
127 if (module->getFloor() != 0) {
128 ASSERT(buffer.count(id) != 0 || !policy.at(id).empty(), "Test policy module at " << module->getLocation());
129 }
130 }
131
132 return 0;
133}
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
Definition JLocation.hh:247
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
Detector file.
Definition JHead.hh:227
Auxiliary class to define policy for invalid modules.
Definition JPolicy.hh:34