30 int main(
int argc, 
char **argv)
 
   45     JParser<> zap(
"Auxiliary application to plot detector parameters.");
 
   47     zap[
'a'] = 
make_field(detectorFileA,     
"detector file.");
 
   50     zap[
'r'] = 
make_field(regexp,            
"regular expresion to extract bin labels for the x-axis")  = 
" ";
 
   51     zap[
'L'] = 
make_field(labelInterval,     
"interval between x-axis bins for which labels are shown") = 1;
 
   56   catch(
const exception &error) {
 
   57     FATAL(error.what() << endl);
 
   61   if (detectorFileA.empty()) {
 
   62     FATAL(
"No detector file specified." << endl);
 
   65   if (detectorFileB.size() != 0 && detectorFileB.size() != detectorFileA.size()) {
 
   66     FATAL(
"Detector file size " << detectorFileA.size() << 
" != " << detectorFileB.size() << endl);
 
   70   const int NUMBER_OF_FILES = detectorFileA.size();
 
   73                                           NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5,
 
   76   manager->Sumw2(kFALSE);
 
   80     const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
 
   82     const TPRegexp buffer(regexp);
 
   84     for (
int i = 0; i != NUMBER_OF_FILES; ++i){
 
   87         manager->GetXaxis()->SetBinLabel(i+1 , 
parse(buffer , TString(detectorFileA[i].c_str())));
 
   89         manager->GetXaxis()->SetBinLabel(i+1 , 
" ");
 
   94   if (detectorFileB.empty()) {
 
  106       FATAL(
"Empty detector." << endl);
 
  110     for (
int i = 0; i != NUMBER_OF_FILES; ++i) {
 
  112       NOTICE(
"Histogram " << detectorFileA[i] << 
" relative to " << detectorFileA[0] << endl);
 
  117         load(detectorFileA[i], buffer);
 
  125       for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  127         TH2D* h2 = manager[
MAKE_CSTRING(module->getID() << 
"." << 
"t0")];
 
  129         for (
size_t pmt = 0; pmt != module->size(); ++pmt) {
 
  130           h2->SetBinContent(i+1, pmt+1, router.
getModule(module->getID()).
getPMT(pmt).
getT0() - module->getPMT(pmt).getT0());
 
  137     for (
int i = 0; i != NUMBER_OF_FILES; ++i) {
 
  139       NOTICE(
"Histogram " << detectorFileA[i] << 
" relative to " << detectorFileB[i] << endl);
 
  145         load(detectorFileA[i], detectorA);
 
  146         load(detectorFileB[i], detectorB);
 
  154       for (JDetector::iterator module = detectorA.begin(); module != detectorA.end(); ++module) {
 
  156         TH2D* h2 = manager[
MAKE_CSTRING(module->getID() << 
"." << 
"t0")];
 
  158         for (
size_t pmt = 0; pmt != module->size(); ++pmt) {
 
  159           h2->SetBinContent(i+1, pmt+1, router.
getModule(module->getID()).
getPMT(pmt).
getT0() - module->getPMT(pmt).getT0());
 
  167     i->second->Sumw2(kFALSE);
 
KM3NeT DAQ constants, bit handling, etc.
 
Data structure for detector geometry and calibration.
 
Dynamic ROOT object management.
 
General purpose messaging.
 
Direct access to module in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
int main(int argc, char **argv)
 
I/O formatting auxiliaries.
 
#define MAKE_CSTRING(A)
Make C-string.
 
double getT0() const
Get time offset.
 
Router for direct addressing of module data in detector data structure.
 
const JModule & getModule(const JObjectID &id) const
Get module parameters.
 
const JPMT & getPMT(const int index) const
Get PMT.
 
Utility class to parse command line options.
 
void Write(TDirectory &out, const bool wm=false)
Write objects to file.
 
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).
 
KM3NeT DAQ data structures and auxiliaries.
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
 
boost::property_tree::ptree parse(std::string str)
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...