Jpp  18.4.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JSTDevK40.cc File Reference
#include <string>
#include <iostream>
#include <iomanip>
#include <array>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "TH2D.h"
#include "km3net-dataformat/online/JDAQ.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JDetectorAddressMap.hh"
#include "JDetector/JDetectorSupportkit.hh"
#include "JROOT/JRootToolkit.hh"
#include "JCalibrate/JCalibrateK40.hh"
#include "JGizmo/JGizmoToolkit.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 31 of file JSTDevK40.cc.

32 {
33  using namespace std;
34  using namespace JPP;
35  using namespace KM3NETDAQ;
36 
37  const char* const address_t = "address";
38  const char* const index_t = "index";
39 
40  array<string, 2> inputFile;
41  string outputFile;
42  string detectorFile;
43  string option;
44  int debug;
45 
46  try {
47 
48  JParser<> zap;
49 
50  zap['f'] = make_field(inputFile, "1st output of JMergeCalibrateK40 and 2nd output of JFitK40");
51  zap['o'] = make_field(outputFile, "output file.") = "stdevk40.root";
52  zap['a'] = make_field(detectorFile, "detector file.");
53  zap['O'] = make_field(option, "axis label") = address_t, index_t;
54  zap['d'] = make_field(debug, "debug.") = 1;
55 
56  zap(argc, argv);
57  }
58  catch(const exception &error) {
59  FATAL(error.what() << endl);
60  }
61 
62 
63  JDetector detector;
64 
65  try {
66  load(detectorFile, detector);
67  }
68  catch(const JException& error) {
69  FATAL(error);
70  }
71 
72  const JDetectorAddressMap& demo = getDetectorAddressMap(detector.getID());
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 
87  TFile out(outputFile.c_str(), "recreate");
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)),
97  (TH2D*) in[1]->Get(MAKE_CSTRING(module->getID() << _2F))
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 
107  const JCombinatorics_t combinatorics(*module);
108 
109  const JModuleAddressMap memo = demo.get(module->getID());
110 
111  TH1D h1(MAKE_CSTRING(module->getID() << ".1D"), NULL,
112  h2[0]->GetXaxis()->GetNbins(), h2[0]->GetXaxis()->GetXmin(), h2[0]->GetXaxis()->GetXmax());
113 
114  TH2D hx(MAKE_CSTRING(module->getID() << ".2X"), NULL,
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 
120  const pair_type pair = combinatorics.getPair(ix - 1);
121 
122  double Y = 0.0; // summed data
123  double F = 0.0; // summed function value
124  double V = 0.0; // summed standard deviation
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() << ' '
153  << "(" << memo.getPMTPhysicalAddress(pair.first) << "," << memo.getPMTPhysicalAddress(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) {
160  setAxisLabels(hx, "X", memo);
161  setAxisLabels(hx, "Y", memo);
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 }
Utility class to parse command line options.
Definition: JParser.hh:1514
JCombinatorics::pair_type pair_type
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
Definition: JLocation.hh:246
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:136
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
string outputFile
const JPolynome f1(1.0, 2.0, 3.0)
Function.
static const char *const _2F
Name extension for 2F rate fitted.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
void setAxisLabels(TAxis *axis, const JModuleAddressMap &memo)
Set axis with PMT address labels.
static const char *const _2R
Name extension for 2D rate measured.
then awk F
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
Auxiliary data structure for sequence of same character.
Definition: JManip.hh:328
#define FATAL(A)
Definition: JMessage.hh:67
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
Definition: JMuonPostfit.sh:40
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
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:48
do set_variable DETECTOR_TXT $WORKDIR detector
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62