37   int      neighbour, setmax;
 
   42     JParser<> zap(
"Program to extract time offsets of DOM-DOM correlations");
 
   44     zap[
'f'] = 
make_field(inputFile,    
"input file")                                        = 
"monitor.root";
 
   46     zap[
'a'] = 
make_field(detectorFile, 
"detector file");
 
   47     zap[
'n'] = 
make_field(neighbour,     
"neighbour level")                              = 5;
 
   48     zap[
'm'] = 
make_field(setmax,        
"minimal entries")                                 = 5;
 
   51     if (zap.read(argc, argv) != 0) {
 
   55   catch(
const exception &error) {
 
   56     FATAL(error.what() << endl);
 
   65   catch(
const JException& error) {
 
   70   const JStringRouter string(
detector);
 
   74   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
   75     zmap[module->getString()][module->getFloor()] = module->getID();
 
   86   TF1 
f1(
"f1", 
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
 
   92   double maxarr[number_of_strings][number_of_strings][3];
 
   93   int duarr[number_of_strings];
 
   97   TFile* 
in = TFile::Open(inputFile.c_str(), 
"exist");
 
   99   if (
in == NULL || !
in->IsOpen()) {
 
  100     FATAL(
"File: " << inputFile << 
" not opened." << endl);
 
  104   for (
const auto& string_1 : zmap) {
 
  105     duarr[
string.getIndex(string_1.first)]=string_1.first;
 
  107     for (
const auto& floor_1 : string_1.second) {
 
  109       const int module_1 = floor_1.second;                  
 
  117       for (
const auto& string_2 : zmap) {
 
  118       duarr[
string.getIndex(string_2.first)]=string_2.first;
 
  120         if (string_1.first != string_2.first) {
 
  122           TH1D* h1 = H1[string_1.first][string_2.first].p;
 
  126                     h1 = 
new TH1D(
MAKE_CSTRING(string_1.first << 
"_" << string_2.first << 
"_" << neighbour << 
".2T"), NULL,
 
  127                           h2->GetYaxis()->GetNbins(), h2->GetYaxis()->GetXmin(), h2->GetYaxis()->GetXmax());
 
  129             H1[string_1.first][string_2.first].p = h1;      
 
  132           for (
const auto& floor_2 : string_2.second) {
 
  133             if (floor_1.first > floor_2.first && (floor_1.first - floor_2.first) == neighbour) {            
 
  135               const int module_2 = floor_2.second;          
 
  137               TH1D* py = h2->ProjectionY(
"__py",
 
  138                                          h2->GetXaxis()->FindBin(TString(Form(
"%i", module_2))), 
 
  139                                          h2->GetXaxis()->FindBin(TString(Form(
"%i", module_2))), 
"e");
 
  147           if (floor_1.first == 18){
 
  149            double mm=h1->GetXaxis()->GetBinCenter(h1->GetMaximumBin());
 
  151            f1.SetParameter(0, 
double(h1->GetMaximum()));
 
  152            f1.SetParameter(1, 
double(mm));
 
  153            f1.SetParameter(2, 50.);
 
  155            for (Int_t 
i = 0; 
i != 
f1.GetNpar(); ++
i) {
 
  156              f1.SetParError(
i, 0.0);
 
  161             if (h1->GetMaximum()>0){
 
  163               h1->Fit(&
f1,
"LQ", 
"same");
 
  167              maxarr[ 
string.getIndex(string_1.first) ][ 
string.getIndex(string_2.first) ][0] = h1->GetFunction(
"f1")->GetParameter(1);
 
  168              maxarr[ 
string.getIndex(string_1.first) ][ 
string.getIndex(string_2.first) ][1] = h1->GetFunction(
"f1")->GetParameter(0);
 
  169              maxarr[ 
string.getIndex(string_1.first) ][ 
string.getIndex(string_2.first) ][2] = h1->GetFunction(
"f1")->GetParameter(2);
 
  178   for (
int i=0;
i<number_of_strings;
i++){
 
  179     for (
int j=
i+1;
j<number_of_strings;
j++){
 
  180            if (maxarr[
i][
j][1]>setmax && maxarr[
j][
i][1]>setmax && maxarr[
i][
j][2]>20. && maxarr[
j][
i][2]>20.){
 
  181             cout << 
i << 
" " << 
j << 
" " << maxarr[
i][
j][0] << 
" " << maxarr[
j][
i][0] << 
" " << (maxarr[
i][
j][0]-maxarr[
j][
i][0])/2. << 
" " << maxarr[
i][
j][1] << 
" " << maxarr[
j][
i][1] << 
" " << 
" " << duarr[
i] << 
" " << duarr[
j] << 
" " << neighbour << endl;
 
  192   for (
auto& h1 : H1) {
 
  193     for (
auto& h2 : h1.second) {
 
  194       h2.second.p->Write();
 
Utility class to parse command line options. 
 
#define MAKE_CSTRING(A)
Make C-string. 
 
const JPolynome f1(1.0, 2.0, 3.0)
Function. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
static const JStringCounter getNumberOfStrings
Function object to count unique strings. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
then fatal The output file must have the wildcard in the e g root fi eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
do set_variable DETECTOR_TXT $WORKDIR detector