25{
   28 
   29  string  detectorFile;
   30  double  P;
   31  size_t  size;
   32  ULong_t seed;
   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;
 
   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 {
   61  }
   64  }
   65 
   67 
   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 
   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.
 
#define ASSERT(A,...)
Assert macro.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Router for direct addressing of module data in detector data structure.
 
Utility class to parse command line options.
 
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
 
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.
 
Auxiliary class to define policy for invalid modules.