52{
   55  
   56  
   57  
   58  
   59  
   60 
   61  string             inputFile;
   63  string             detectorFile;
   64  int                line;
   66  int                minMultiplicity;
   67  int                minLiveTime_s;
   68  
   69 
   70  try { 
   71 
   72    JParser<> zap(
"Auxiliary program to find depth dependence of multiplicity rates");
 
   73    
   74    zap[
'f'] = 
make_field(inputFile, 
"JMM input file");
 
   76    
   80    zap[
'M'] = 
make_field(minMultiplicity, 
"Minimum multiplicity") = 8;
 
   81    zap[
'T'] = 
make_field(minLiveTime_s, 
"Minimum DOM livetime [s] to be eligible for plotting") = 3600;
 
   82 
   83    zap(argc, argv);
   84  }
   85  
   86  catch(const exception &error) {
   87    FATAL(error.what() << endl);
 
   88  }
   89 
   90 
   91  
   92  
   93  
   94  
   96 
   97  try {
   99  }
  102  }
  103 
  105    FATAL(
"Empty detector." << endl);
 
  106 
  108 
  110 
  111  NOTICE(
"Detector base UTM z [m]: " << utm_z << endl);
 
  112 
  113  
  114  
  115  
  116 
  117    
  118  DEBUG(
"Loading input file " << inputFile << endl);
 
  119 
  120  TFile* in = TFile::Open(inputFile.c_str(), "exist");
  121 
  122  if (in == NULL || !in->IsOpen()) {
  123    FATAL(
"File: " << inputFile << 
" not opened." << endl);
 
  124  }
  125 
  126  
  127  
  128  
  129 
  130 
  131  DEBUG(
"Loading livetime histogram from " << inputFile << endl);
 
  132 
  133  TH1D* liveTime = (TH1D*)in->Get("LiveTime");
  134    
  135  if (liveTime == NULL) {
  136    FATAL(
"Missing live time histogram.");
 
  137  }
  138 
  142 
  143  for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  144    
  145    if (module->getString() != line) { continue; }
  146 
  147    STATUS(
"Loading data histogram for from input file: " << 
getLabel(*module) << 
"\t ID = " << module->getID()  << endl);
 
  148 
  149    TH1D* data_histogram = (TH1D*)in->Get(TString(
getLabel(*module)) + 
"_P");
 
  150 
  151    if (data_histogram != NULL) {
  152 
  153      double data_count    = 
getCount(data_histogram, minMultiplicity);
 
  154      double data_livetime = getLiveTime(liveTime, *module);
  155 
  156      double module_depth = - utm_z - module->getZ();
  157 
  158      if (data_livetime > minLiveTime_s) {
  159        
  160        double val = data_count       / data_livetime;
  161        double err = sqrt(data_count) / data_livetime;
  162 
  163        NOTICE(module_depth << 
" " << val << endl);
 
  164 
  165        rate_val.push_back(val);
  166        rate_err.push_back(err);
  167        depth.push_back( module_depth);
 
  168    
  169      }
  170 
  171    }
  172 
  173  }
  174 
  175 
  176  TGraph* gr_data = 
new TGraphErrors(
depth.size(), &
depth[0], &rate_val[0], 0, &rate_err[0]);
 
  177 
  178  gr_data->SetTitle(TString("KM3NeT Preliminary; Depth [m]; Inclusive ") + Form("%d", minMultiplicity) + TString("-fold coincidence rate [Hz]"));
  179 
  181 
  182  gr_data->Write();
  183 
  184  out.Close();
  185 
  186  return 0;
  187 
  188}
#define DEBUG(A)
Message macros.
 
#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.
 
size_t getCount(const array_type< T > &buffer, const JCompare_t &compare)
Count number of unique values.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).