13 #include "TFitResult.h" 
   58     JSetup(
const string& file_name) :
 
   61       fp = TFile::Open(file_name.c_str(), 
"read");
 
   75       ResultSet& rs  = 
getResultSet(getTable   <JPMTHVRunSettings>(),
 
   83           location = 
JLocation_t(parameters.DUID, parameters.FLOORID, parameters.PMTINTID);
 
   85           location = 
JLocation_t(parameters.DUID, parameters.FLOORID, parameters.CABLEPOS);
 
   87         HV[location] = parameters.HV_VALUE;
 
   99     TH2D* 
get(
const string& key) 
const 
  101       return (TH2D*) fp->Get(key.c_str());
 
  120 int main(
int argc, 
char **argv)
 
  124   using namespace KM3NETDAQ;
 
  147     JParser<> zap(
"Auxiliary program to check t0's.");
 
  154     zap[
'f'] = 
make_field(inputFile,         
"pair of input files (output of JCalibrateK40)");
 
  156     zap[
'e'] = 
make_field(precision,         
"precision for HV comparison")             = 0.5;
 
  158     zap[
'x'] = 
make_field(
X,                 
"ROOT fit range (PMT pairs).")             = 
JRange_t(300, numeric_limits<size_t>::max());
 
  159     zap[
'O'] = 
make_field(option,            
"ROOT fit option, see TH1::Fit.")          = 
"";
 
  165   catch(
const exception &error) {
 
  166     FATAL(error.what() << endl);
 
  173   catch(
const exception& error) {
 
  174     FATAL(error.what() << endl);
 
  178     JSetup(inputFile.first), 
 
  179     JSetup(inputFile.second)
 
  182   for (
int i = 0; i != 2; ++i) {
 
  183     DEBUG(setw(32) << setups[i].file_name << 
' ' << setups[i].header.getDetectorID() << 
' ' << setups[i].header.getRunNumber() << endl);
 
  195   if (option.find(
'S') == string::npos) { option += 
'S'; }
 
  202   TF1 
f1(
"f1", 
"[0]*TMath::Gaus(x,[1],[2]) + [3]");
 
  204   for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  211     DEBUG(
"Module " << setw(10) << module->getID() << 
' ' << (h2[0] != NULL) << (h2[0] != NULL) << endl);
 
  226     for (
size_t ip = max(
X.getLowerLimit(), size_t(0)); ip != min(
X.getUpperLimit(), combinatorics.
getNumberOfPairs()); ++ip) {
 
  230       const JLocation_t location_1(module->getString(), module->getFloor(), pair.first);
 
  231       const JLocation_t location_2(module->getString(), module->getFloor(), pair.second);
 
  233       const bool hv_1 = (fabs(setups[0].HV[location_1] - setups[1].HV[location_1]) < precision);
 
  234       const bool hv_2 = (fabs(setups[0].HV[location_2] - setups[1].HV[location_2]) < precision);
 
  237         numeric_limits<double>::max(),
 
  238         numeric_limits<double>::max()
 
  241       const Int_t ix = ip + 1;
 
  243       for (
int i = 0; i != 2; ++i) {
 
  245         TH1D h1(
"__py", NULL, h2[i]->GetYaxis()->GetNbins(), h2[i]->GetYaxis()->GetXmin(), h2[i]->GetYaxis()->GetXmax());
 
  249         Double_t ymin   =  numeric_limits<double>::max();
 
  250         Double_t ymax   =  numeric_limits<double>::lowest();
 
  252         Double_t 
sigma  =  4.5;
 
  255         for (
int iy = 1; iy <= h1.GetNbinsX(); ++iy) {
 
  257           const Double_t 
x = h1.GetBinCenter(iy);
 
  258           const Double_t y = h2[i]->GetBinContent(ix,iy);
 
  260           h1.SetBinContent(iy, y);
 
  261           h1.SetBinError  (iy, sqrt(y));
 
  277           f1.SetParameter(0, ymax);
 
  278           f1.SetParameter(1, mean);
 
  279           f1.SetParameter(2, sigma);
 
  280           f1.SetParameter(3, ymin);
 
  282           TFitResultPtr 
result = h1.Fit(&f1, option.c_str(), 
"same");
 
  284           if (result.Get() == NULL) {
 
  285             FATAL(
"Invalid TFitResultPtr " << h1.GetName() << endl);
 
  289             cout << 
"Histogram slice: " 
  290                  << setw(3)    << ix                    << 
' ' 
  291                  << 
FIXED(7,3) << f1.GetParameter(1)    << 
" +/- " 
  292                  << 
FIXED(7,3) << f1.GetParError(1)     << 
' ' 
  293                  << 
FIXED(7,3) << result->Chi2()        << 
'/' 
  294                  << result->Ndf()                       << 
' ' 
  295                  << (result->IsValid() ? 
"" : 
"failed") << endl;
 
  298           t1[i] = f1.GetParameter(1);
 
  302       if (t1[0] != numeric_limits<double>::max() &&
 
  303           t1[1] != numeric_limits<double>::max()) {
 
  318             cout << setw(10) << module->getID() << 
"." << 
FILL(2,
'0') << p2.first  << 
FILL() << 
' ';
 
  319             cout << 
"(" << 
FILL(2,
'0') << p2.second << 
FILL() << 
")" << 
' ';
 
  320             cout << 
FIXED(6,2) << (combinatorics.
getSign(p2) * (t1[1] - t1[0])) << endl;
 
  323           Q[p2.first].put(combinatorics.
getSign(p2) * (t1[1] - t1[0]));
 
  330         H1[module->getID()]->SetBinContent(i+1, 
Q[i].
getMean());
 
  331         H1[module->getID()]->SetBinError  (i+1, 
Q[i].getSTDev());
 
Utility class to parse command line options. 
 
JCombinatorics::pair_type pair_type
 
Q(UTCMax_s-UTCMin_s)-livetime_s
 
int main(int argc, char *argv[])
 
#define gmake_property(A)
macro to convert (template) parameter to JPropertiesElement object 
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message. 
 
Utility class to parse parameter values. 
 
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
 
#define MAKE_CSTRING(A)
Make C-string. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Dynamic ROOT object management. 
 
Auxiliary data structure for floating point format specification. 
 
Data structure for detector geometry and calibration. 
 
double getMean(vector< double > &v)
get mean of vector content 
 
JDetectorsHelper & getDetector()
Auxiliary function for helper object initialisation. 
 
Utility class to parse parameter values. 
 
const JPolynome f1(1.0, 2.0, 3.0)
Function. 
 
Type definition of range. 
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
 
I/O formatting auxiliaries. 
 
Auxiliary class to sort pairs of PMT addresses within optical module. 
 
Auxiliary data structure for location of product in detector. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
void Write(TDirectory &out, const bool wm=false)
Write objects to file. 
 
ROOT TTree parameter settings. 
 
General purpose messaging. 
 
Auxiliary data structure for sequence of same character. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
Auxiliary class to define a range between two values. 
 
Utility class to parse command line options. 
 
ResultSet & getResultSet(const std::string &query)
Get result set. 
 
std::vector< JServer > getServernames()
Get list of names of available database servers. 
 
int getCount(const T &hit)
Get hit count. 
 
Wrapper class for server name. 
 
no fit printf nominal n $STRING awk v X
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
KM3NeT DAQ constants, bit handling, etc. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
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
 
Template definition for getting table specific selector. 
 
static const char *const _2S
Name extension for 2D counts. 
 
#define DEBUG(A)
Message macros.