32{
   36 
   37  const char* const address_t  =  "address";
   38  const char* const index_t    =  "index";
   39 
   42  string           detectorFile;
   43  string           option;
   45 
   46  try { 
   47 
   49    
   50    zap[
'f'] = 
make_field(inputFile,         
"1st output of JMergeCalibrateK40 and 2nd output of JFitK40");
 
   52    zap[
'a'] = 
make_field(detectorFile,      
"detector file.");
 
   53    zap[
'O'] = 
make_field(option,            
"axis label")               = address_t, index_t;
 
   55 
   56    zap(argc, argv);
   57  }
   58  catch(const exception &error) {
   59    FATAL(error.what() << endl);
 
   60  }
   61 
   62 
   64 
   65  try {
   67  }
   70  }
   71 
   73 
   74 
   75  TFile* in[] = { NULL, NULL };
   76 
   77  for (int i = 0; i != 2; ++i) {
   78 
   79    in[i] = TFile::Open(inputFile[i].c_str(), "exist");
   80 
   81    if (in[i] == NULL || !in[i]->IsOpen()) {
   82      FATAL(
"File: " << inputFile[i] << 
" not opened." << endl);
 
   83    }
   84  }
   85 
   86 
   88 
   89  for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
   90 
   91    if (module->getFloor() == 0) { 
   92      continue;
   93    }
   94 
   95    TH2D* h2[] = { 
   96      (TH2D*) in[0]->Get(
MAKE_CSTRING(module->getID() << _2R)),
 
   98    };
   99 
  100    if (h2[0] == NULL || h2[0]->GetEntries() == 0 ||
  101        h2[1] == NULL || h2[1]->GetEntries() == 0) {
  102      continue;
  103    }
  104 
  105    DEBUG(
"Module " << setw(10) << module->getID() << 
' ' << 
getLabel(module->getLocation()) << endl);
 
  106 
  108 
  110    
  112            h2[0]->GetXaxis()->GetNbins(), h2[0]->GetXaxis()->GetXmin(), h2[0]->GetXaxis()->GetXmax());
  113 
  115            NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5, 
  116            NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5);
  117 
  118    for (int ix = 1; ix <= h2[0]->GetXaxis()->GetNbins(); ++ix) {
  119 
  121 
  122      double Y = 0.0;                                        
  123      double F = 0.0;                                        
  124      double V = 0.0;                                        
  125      int    N = 0;
  126 
  127      for (int iy = 1; iy <= h2[0]->GetYaxis()->GetNbins(); ++iy) {
  128 
  129        const double y1 = h2[0]->GetBinContent(ix,iy);
  130        const double w1 = h2[0]->GetBinError  (ix,iy);
  131        const double f1 = h2[1]->GetBinContent(ix,iy);
  132      
  133        if (w1 > 0.0) {
  134          Y +=  y1;
  135          F +=  f1;
  136          V += (y1 - f1) / w1; 
  137          N += 1;
  138        }
  139      }
  140 
  141      if (N != 0) {
  142 
  143        V /= N;
  144 
  145        h1.SetBinContent(ix, V);
  146 
  147        hx.Fill(
pair.first,  
pair.second, V);
 
  148        hx.Fill(
pair.second, 
pair.first,  V);
 
  149      }
  150 
  151      DEBUG(setw(3) << ix << 
' ' 
  152            << 
"(" << 
FILL(2,
'0') << 
pair.first              << 
"," << 
FILL(2,
'0') << 
pair.second              << 
")" << 
FILL() << 
' ' 
  154            << 
FIXED(9,2) << Y << 
' ' 
  155            << 
FIXED(9,2) << F << 
' ' 
  156            << 
FIXED(9,2) << V << 
' ' << (fabs(V) > 3.0 ? 
"***" : 
"") <<endl);
 
  157    }
  158 
  159    if (option == address_t) {
  162    }
  163 
  164    out << h1 << hx;
  165  }
  166 
  167  for (int i = 0; i != 2; ++i) {
  168    in[i]->Close();
  169  }
  170  
  171  out.Write();
  172  out.Close();
  173}
#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.
 
Lookup table for PMT addresses in optical module.
 
const JPMTPhysicalAddress & getPMTPhysicalAddress(const int tdc) const
Get PMT physical address.
 
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.
 
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.
 
Auxiliary data structure for sequence of same character.
 
Auxiliary data structure for floating point format specification.
 
PMT combinatorics for optical module.