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)...