52{
   56 
   57  string               detectorFile;
   60  string               regexp;
   61  int                  labelInterval;
   62  bool                 showPMTAddress;
   63  bool                 relative;
   65  
   66  try { 
   67 
   68    JParser<> zap(
"Auxiliary application to plot PMT parameters.");
 
   69 
   70    zap[
'a'] = 
make_field(detectorFile,      
"detector file.");
 
   71    zap[
'P'] = 
make_field(inputFile,         
"PMT calibration data file(s)");
 
   73    zap[
'r'] = 
make_field(regexp,            
"regular expresion to extract bin labels for the x-axis")  = 
"";
 
   74    zap[
'A'] = 
make_field(showPMTAddress,    
"show PMT address on y-axis");
 
   75    zap[
'L'] = 
make_field(labelInterval,     
"interval between x-axis bins for which labels are shown") = 1;
 
   76    zap[
'R'] = 
make_field(relative,          
"monitor changes relative to first input");
 
   78 
   79    zap(argc, argv);
   80  }
   81  catch(const exception &error) {
   82    FATAL(error.what() << endl);
 
   83  }
   84 
   86 
   87  try {
   89  }
   92  }
   93 
   95    FATAL(
"Empty detector." << endl);
 
   96  }
   97 
   99 
  100  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
  102  }
  103 
  104 
  105  const int NUMBER_OF_FILES = parameters.size();
  106 
  107  JManager<string, TH2D> manager(new TH2D("%", NULL,
  108                                          NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5,
  109                                          NUMBER_OF_PMTS,  -0.5, NUMBER_OF_PMTS  - 0.5));
  110 
  111  manager->Sumw2(kFALSE);
  112 
  113  if (regexp != "") {
  114 
  115    const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
 
  116 
  117    const TPRegexp buffer(regexp);
  118    
  119    for (int i = 0; i != NUMBER_OF_FILES; ++i) {
  120 
  121      if(i%n == 0)
  122        manager->GetXaxis()->SetBinLabel(i+1 , 
parse(buffer, TString(inputFile[i].c_str())));
 
  123      else
  124        manager->GetXaxis()->SetBinLabel(i+1 , " ");
  125    }
  126  }
  127  
  128  for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  129 
  130    DEBUG(
"Module " << setw(10) << module->getID() << endl);
 
  131 
  132    for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
  133 
  135 
  136      for (int i = 0; i != NUMBER_OF_FILES; ++i) {
  137 
  139 
  140        for (JProperties::const_iterator p = properties.begin(); p != properties.end(); ++p) {
  141 
  142          double value = 0.0;
  143 
  144          try { value = (p->second.getValue<const double>()); }           catch(const exception& error) {}
  145          try { value = (p->second.getValue<const bool>() ? 1.0 : 0.0); } catch(const exception& error) {}
  146 
  147          if (i  ==  0) { buffer[p->first] = value;  }
  148          if (relative) { value -= buffer[p->first]; }
  149 
  150          manager[
MAKE_CSTRING(module->getID() << 
"." << p->first)]->SetBinContent(i + 1, pmt + 1, value);
 
  151        }
  152 
  153        double value = getEfficiency(parameters[i].getPMTParameters(
JPMTIdentifier(module->getID(), pmt)));
 
  154 
  155        if (i  ==  0) { buffer[EFFICIENCY] = value;  }
  156        if (relative) { value -= buffer[EFFICIENCY]; }
  157 
  158        manager[
MAKE_CSTRING(module->getID() << 
"." << EFFICIENCY)]->SetBinContent(i + 1, pmt + 1, value);
 
  159      }
  160    }
  161  }
  162 
  163  for (JManager<string, TH2D>::iterator i = manager.begin(); i != manager.end(); ++i) {
  164    i->second->Sumw2(kFALSE);
  165  }
  166 
  167  if (showPMTAddress) {
  168 
  170  
  171    for (JManager<string, TH2D>::iterator i = manager.begin(); i != manager.end(); ++i) {
  172 
  173      int id;
  174 
  175      istringstream(i->first) >> id;
  176 
  178    }
  179  }
  180 
  182}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
#define MAKE_CSTRING(A)
Make C-string.
 
Lookup table for PMT addresses in detector.
 
const JModuleAddressMap & get(const int id) const
Get module address map.
 
Auxiliary class for map of PMT parameters.
 
Utility class to parse parameter values.
 
Utility class to parse command line options.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
 
void setAxisLabels(TAxis *axis, const JModuleAddressMap &memo)
Set axis with PMT address labels.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
KM3NeT DAQ data structures and auxiliaries.
 
boost::property_tree::ptree parse(std::string str)