Jpp  17.2.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JDepthDependence.cc File Reference

Auxiliary program to find depth dependence of multiplicity rates. More...

#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
#include "TFile.h"
#include "TH1D.h"
#include "TMath.h"
#include "TROOT.h"
#include "TApplication.h"
#include "TLegend.h"
#include "TGraphErrors.h"
#include "km3net-dataformat/online/JDAQ.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JModuleRouter.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JLang/JString.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JSupport.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to find depth dependence of multiplicity rates.

Author
mlincetto

Definition in file JDepthDependence.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 53 of file JDepthDependence.cc.

54 {
55  using namespace std;
56  using namespace JPP;
57 
58  //-----------------------------------------------------------
59  // parameter interface
60  //-----------------------------------------------------------
61 
62 
63  string inputFile;
64  string outputFile;
65  string detectorFile;
66  int line;
67  int debug;
68  int minMultiplicity;
69  int minLiveTime_s;
70  // string summaryFile;
71 
72  try {
73 
74  JParser<> zap("Auxiliary program to find depth dependence of multiplicity rates");
75 
76  zap['f'] = make_field(inputFile, "JMM input file");
77  zap['o'] = make_field(outputFile, "output file") = "depthdependence.root";
78  // zap['s'] = make_field(summaryFile, "summary file") = "depthdependence.txt";
79  zap['a'] = make_field(detectorFile);
80  zap['d'] = make_field(debug) = 1;
81  zap['l'] = make_field(line) = 1;
82  zap['M'] = make_field(minMultiplicity, "Minimum multiplicity") = 8;
83  zap['T'] = make_field(minLiveTime_s, "Minimum DOM livetime [s] to be eligible for plotting") = 3600;
84 
85  zap(argc, argv);
86  }
87 
88  catch(const exception &error) {
89  FATAL(error.what() << endl);
90  }
91 
92  cout.tie(&cerr);
93 
94 
95  //----------------------
96  // loading detector file
97  //----------------------
98 
100 
101  try {
102  load(detectorFile, detector);
103  }
104  catch(const JException& error) {
105  FATAL(error);
106  }
107 
108  if (detector.empty())
109  FATAL("Empty detector." << endl);
110 
111  const JModuleRouter router(detector);
112 
113  double utm_z = detector.getUTMZ();
114 
115  NOTICE("Detector base UTM z [m]: " << utm_z << endl);
116 
117  //-----------------------------------------------------------
118  // load input files
119  //-----------------------------------------------------------
120 
121 
122  DEBUG("Loading input file " << inputFile << endl);
123 
124  TFile* in = TFile::Open(inputFile.c_str(), "exist");
125 
126  if (in == NULL || !in->IsOpen()) {
127  FATAL("File: " << inputFile << " not opened." << endl);
128  }
129 
130  //-----------------------------------------------------------
131  // recover rates from histograms
132  //-----------------------------------------------------------
133 
134 
135 
136  DEBUG("Loading livetime histogram from " << inputFile << endl);
137 
138  TH1D* liveTime = (TH1D*)in->Get("LiveTime");
139 
140  if (liveTime == NULL) {
141  FATAL("Missing live time histogram.");
142  }
143 
145  vector<double> rate_val;
146  vector<double> rate_err;
147 
148  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
149 
150  if (module->getString() != line) { continue; }
151 
152  STATUS("Loading data histogram for from input file: " << getLabel(*module) << "\t ID = " << module->getID() << endl);
153 
154  TH1D* data_histogram = (TH1D*)in->Get(TString(getLabel(*module)) + "_P");
155 
156  if (data_histogram != NULL) {
157 
158  double data_count = getCount(data_histogram, minMultiplicity);
159  double data_livetime = getLiveTime(liveTime, *module);
160 
161  double module_depth = - utm_z - module->getZ();
162 
163  if (data_livetime > minLiveTime_s) {
164 
165  double val = data_count / data_livetime;
166  double err = sqrt(data_count) / data_livetime;
167 
168  NOTICE(module_depth << " " << val << endl);
169 
170  rate_val.push_back(val);
171  rate_err.push_back(err);
172  depth.push_back( module_depth);
173 
174  }
175 
176  }
177 
178  }
179 
180 
181  TGraph* gr_data = new TGraphErrors(depth.size(), &depth[0], &rate_val[0], 0, &rate_err[0]);
182 
183  gr_data->SetTitle(TString("KM3NeT Preliminary; Depth [m]; Inclusive ") + Form("%d", minMultiplicity) + TString("-fold coincidence rate [Hz]"));
184 
185  TFile out(outputFile.c_str(), "recreate");
186 
187  gr_data->Write();
188 
189  out.Close();
190 
191  return 0;
192 
193 }
Utility class to parse command line options.
Definition: JParser.hh:1517
General exception.
Definition: JException.hh:23
Depth.
Definition: JHead.hh:967
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
Definition: JLocation.hh:246
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:89
Router for direct addressing of module data in detector data structure.
string outputFile
Detector file.
Definition: JHead.hh:226
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1993
#define NOTICE(A)
Definition: JMessage.hh:64
#define FATAL(A)
Definition: JMessage.hh:67
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
int getCount(const T &hit)
Get hit count.
do set_variable DETECTOR_TXT $WORKDIR detector
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] 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
Definition: JCanberra.sh:46
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62