31 int main(
int argc, 
char **argv)
 
   35   using namespace KM3NETDAQ;
 
   43     JParser<> zap(
"Auxiliary program to merge K40 data.");
 
   45     zap[
'f'] = 
make_field(inputFile,         
"input file (output from JCalibrateK40).");
 
   51   catch(
const exception &error) {
 
   52     FATAL(error.what() << endl);
 
   56   gErrorIgnoreLevel = kError;
 
   58   TH1* weights_hist = NULL;
 
   67     DEBUG(
"Processing " << *i << endl) ;
 
   69     TFile 
in(i->c_str(), 
"read");
 
   74       FATAL(
"Histogram does not contain weights histogram." << endl);
 
   79     if (weights_hist == NULL) {
 
   81       weights_hist = (TH1*) weights_hist_i->Clone();
 
   87       TAxis* x_axis = weights_hist->GetXaxis();
 
   89       if (weights_hist_i->GetBinContent(x_axis->FindBin(
WS_t)) != 
 
   90           weights_hist  ->GetBinContent(x_axis->FindBin(
WS_t))) {
 
   91         FATAL(
"Number of y-bins does not match for this file " << *i << endl);
 
   94       if (weights_hist_i->GetBinContent(x_axis->FindBin(
WB_t)) != 
 
   95           weights_hist  ->GetBinContent(x_axis->FindBin(
WB_t))) {
 
   96         FATAL(
"TMax_ns is not the same for this file " << *i << endl);
 
  101       weights_hist->SetBinContent(x_axis->FindBin(
W1_overall_t), 
 
  102                                   weights_hist  ->GetBinContent(x_axis->FindBin(
W1_overall_t)) + 
 
  103                                   weights_hist_i->GetBinContent(x_axis->FindBin(
W1_overall_t)));
 
  107     TIter iter(
in.GetListOfKeys());
 
  109     for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
 
  111       if (TString(key->GetName()).EndsWith(
_2S) ||
 
  112           TString(key->GetName()).EndsWith(
_1B) ||
 
  113           TString(key->GetName()).EndsWith(
_1L)) {
 
  115         TH1* 
h1 = 
dynamic_cast<TH1*
>(key->ReadObj());
 
  117         map_type::iterator p = zmap.find(h1->GetName());
 
  119         if (p == zmap.end()) {
 
  121           DEBUG(
"Clone " << h1->GetName() << endl);
 
  123           p = zmap.insert(make_pair(h1->GetName(), (TH1*) h1->Clone())).first;
 
  127           DEBUG(
"Add   " << h1->GetName() << endl);
 
  134     weights_hist->SetDirectory(0);
 
  136     for (map_type::iterator i = zmap.begin(); i != zmap.end(); ++i) {
 
  137       i->second->SetDirectory(0);
 
  144   if (weights_hist == NULL) {
 
  153   const Double_t WS = weights_hist->GetBinContent(weights_hist->GetXaxis()->FindBin(
WS_t)) ;  
 
  154   const Double_t WB = weights_hist->GetBinContent(weights_hist->GetXaxis()->FindBin(
WB_t)) ;  
 
  156   for (map_type::iterator i = zmap.begin(); i != zmap.end(); ++i) {
 
  158     if (i->first.EndsWith(
_2S)) {
 
  160       TH2D* h2s = (TH2D*) i->second;
 
  162       if (h2s->GetEntries() != 0) {
 
  164         TH1D* h1b = (TH1D*) zmap.find(TString(i->first).ReplaceAll(
_2S, 
_1B))->second;
 
  165         TH1D* h1L = (TH1D*) zmap.find(TString(i->first).ReplaceAll(
_2S, 
_1L))->second;
 
  171         for (
int ix = 1; ix <= h2s->GetXaxis()->GetNbins(); ++ix) {
 
  176           if (h1L->GetBinContent(ix) == 0.0) {
 
  178             h1b->SetBinContent(ix, 0.0);
 
  179             h1b->SetBinError  (ix, 0.0);
 
  181             for (
int iy = 1; iy <= h2s->GetYaxis()->GetNbins(); ++iy) {
 
  182               h2s->SetBinContent(ix, iy,   0.0);
 
  183               h2s->SetBinError  (ix, iy, 999.999);
 
  188             const double Y = h1b->GetBinContent(ix) / h1L->GetBinContent(ix) / WB;
 
  189             const double W = h1b->GetBinError  (ix) / h1L->GetBinContent(ix) / WB;
 
  191             h1b->SetBinContent(ix, Y);
 
  192             h1b->SetBinError  (ix, W);
 
  194             for (
int iy = 1; iy <= h2s->GetYaxis()->GetNbins(); ++iy) {
 
  196               double y = h2s->GetBinContent(ix, iy) / h1L->GetBinContent(ix) / WS;
 
  197               double w = h2s->GetBinError  (ix, iy) / h1L->GetBinContent(ix) / WS;
 
  203                 w = 1.0 / h1L->GetBinContent(ix) / WS;
 
  206               h2s->SetBinContent(ix, iy, y - Y);
 
  207               h2s->SetBinError  (ix, iy, TMath::Sqrt(w*w + W*W));
 
  214         for (
int ix = 0; ix <= h2s->GetXaxis()->GetNbins() + 1; ++ix) {
 
  215           h2s->SetBinContent(ix, 0, 0.0);  h2s->SetBinContent(ix, h2s->GetYaxis()->GetNbins() + 1, 0.0);
 
  216           h2s->SetBinError  (ix, 0, 0.0);  h2s->SetBinError  (ix, h2s->GetYaxis()->GetNbins() + 1, 0.0);
 
  219         for (
int iy = 0; iy <= h2s->GetYaxis()->GetNbins() + 1; ++iy) {
 
  220           h2s->SetBinContent(0, iy, 0.0);  h2s->SetBinContent(h2s->GetXaxis()->GetNbins() + 1, iy, 0.0);
 
  221           h2s->SetBinError  (0, iy, 0.0);  h2s->SetBinError  (h2s->GetXaxis()->GetNbins() + 1, iy, 0.0);
 
  224         NOTICE(
"Biased coincidence rate [Hz] " << h2s->GetName() << 
' ' << h2s->GetSumOfWeights() * WS << endl);
 
  226         h2s->SetName(TString(i->first).ReplaceAll(
_2S, 
_2R));
 
Utility class to parse command line options. 
 
int main(int argc, char *argv[])
 
static const char *const WB_t
Named bin for value of TMax_ns in JCalibrateK40. 
 
then for HISTOGRAM in h0 h1
 
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
 
static const char *const WS_t
Named bin for time residual bin width. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
static const char *const _1B
Name extension for 1D background. 
 
static const char *const _2R
Name extension for 2D rate measured. 
 
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory. 
 
General purpose messaging. 
 
static const char *const weights_hist_t
Histogram naming. 
 
static const char *const _1L
Name extension for 1D live time. 
 
Utility class to parse command line options. 
 
static const char *const W1_overall_t
Named bin for duration of the run. 
 
void copy(const Head &from, JHead &to)
Copy header from from to to. 
 
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
 
static const char *const _2S
Name extension for 2D counts. 
 
#define DEBUG(A)
Message macros.