205   using namespace KM3NETDAQ;
 
  224     JParser<> zap(
"Auxiliary program to determine PMT parameters from K40 data.");
 
  226     zap[
'f'] = 
make_field(inputFile,      
"input file.");
 
  228     zap[
'n'] = 
make_field(numberOfEvents)                                                = JLimit::max();
 
  229     zap[
'a'] = 
make_field(detectorFile,   
"detector file.");
 
  230     zap[
'T'] = 
make_field(TMax_ns,        
"time window [ns].")                           = 20.0;
 
  232     zap[
't'] = 
make_field(totRange_ns,    
"PMT time-over-threshold range [ns].")         = { 4.0, 7.0, ToTmax_ns };
 
  233     zap[
'b'] = 
make_field(background,     
"background estimation method.")               = rates_t, count_t, tails_t, rndms_t;
 
  236     zap[
'D'] = 
make_field(deadTime_us,    
"L1 dead time (us)")                           = 0.0;
 
  237     zap[
'C'] = 
make_field(selector,       
"timeslice selector, e.g. JDAQTimesliceL1.")   = getROOTClassSelection<JDAQTimesliceTypes_t>();
 
  238     zap[
'O'] = 
make_field(option,         
"hit pre-processing option.")                  = JPreprocessor::getOptions(JPreprocessor::filter_t);
 
  243   catch(
const exception &error) {
 
  244     FATAL(error.what() << endl);
 
  252   if (selector == JDAQTimesliceL2::Class_Name() ||
 
  253       selector == JDAQTimesliceSN::Class_Name()) {
 
  254     FATAL(
"Option -C <selector> " << selector << 
" not compatible with calibration method." << endl);
 
  257   if (selector == JDAQTimeslice  ::Class_Name() ||
 
  258       selector == JDAQTimesliceL1::Class_Name()) {
 
  266       FATAL(
"No trigger parameters from input:" << error.
what() << endl);
 
  269     if ((selector == JDAQTimeslice  ::Class_Name() && parameters.writeL1.prescale > 0) ||
 
  270         (selector == JDAQTimesliceL1::Class_Name())) {
 
  272       if (parameters.TMaxLocal_ns < TMax_ns) {
 
  273         FATAL(
"Option -T <TMax_ns> = " << TMax_ns << 
" is larger than in the trigger " << parameters.TMaxLocal_ns << endl);
 
  276       if (background == rndms_t ||
 
  277           background == count_t) {
 
  278         FATAL(
"Option -C <selector> " << selector << 
" incompatible with option -b <background> " << background << endl);
 
  283   if (!multiplicity.is_valid() || multiplicity.getLowerLimit() < 2 || multiplicity.getUpperLimit() > 
NUMBER_OF_PMTS) {
 
  284     FATAL(
"Invalid option -M <multiplicity> " << multiplicity << endl);
 
  287   if (totRange_ns[0] > totRange_ns[1] ||
 
  288       totRange_ns[1] > totRange_ns[2]) {
 
  289     FATAL(
"Invalid option -t <totRange_ns> " << 
JEEPZ() << totRange_ns << endl);
 
  292   if (background == tails_t) {
 
  294     if (!Tail_ns.is_valid()) {
 
  295       FATAL(
"Invalid option -B <Tail_ns> " << Tail_ns << endl);
 
  298     if (Tail_ns.getUpperLimit() > TMax_ns) {
 
  299       FATAL(
"Invalid option -B <Tail_ns> " << Tail_ns << 
"; upper limit larger than option -T <TMax_ns> " << TMax_ns << endl);
 
  317     FATAL(
"Empty detector." << endl);
 
  329     t0.push_back(
i * 2 * TMax_ns);
 
  339   const double RTU = (cpu.getIntegralOfChargeProbability(cpu.getNPE(totRange_ns[0]), cpu.getNPE(totRange_ns[2]), NPE)
 
  341                       cpu.getIntegralOfChargeProbability(cpu.getNPE(0.0),            cpu.getNPE(ToTmax_ns),      NPE));
 
  350   const Double_t ymin = -floor(TMax_ns) + 0.5;
 
  351   const Double_t ymax = +floor(TMax_ns) - 0.5;
 
  352   const Int_t    ny   = (Int_t) ((ymax - ymin) / 1.0);
 
  354   for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  356     const JModuleAddress& address = router.getAddress(module->getID());
 
  358     if (!module->empty()) {
 
  360       NOTICE(
"Booking histograms for module " << module->getID() << endl);
 
  373   const double deadTime_ns  =  deadTime_us * 1e3;
 
  382   for (JMultipleFileScanner_t::const_iterator 
i = inputFile.begin(); 
i != inputFile.end(); ++
i) {
 
  384     STATUS(
"Processing: " << *
i << endl);
 
  391     for (
JDAQHeader header; 
in.hasNext() && counter != numberOfEvents; ++counter) {
 
  393       STATUS(
"event: " << setw(10) << counter << 
'\r'); 
DEBUG(endl);
 
  405       if (background == rates_t) {
 
  409         if (timeslice->
getFrameIndex() != summary.getSummaryslice()->getFrameIndex()) {
 
  411           ERROR(
"Frame indices do not match at "  
  412                 << 
"[counter = "      << counter                                    << 
"]"  
  414                 << 
"[summaryslice = " << summary.getSummaryslice()->getFrameIndex() << 
"]" << endl);
 
  420       for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
 
  422         if (router.hasModule(frame->getModuleID())) {
 
  424           const JModule& module = router.getModule(frame->getModuleID());
 
  433           if        (background == count_t) {
 
  439           } 
else if (background == tails_t) {
 
  443           } 
else if (background == rndms_t) {
 
  447           } 
else if (background == rates_t) {
 
  449             if (summary.hasSummaryFrame(frame->getModuleID())) {
 
  451               const JDAQSummaryFrame& sum = summary.getSummaryFrame(frame->getModuleID());
 
  460               FATAL(
"Summary frame of module " << frame->getModuleID() << 
" not found at frame index " << timeslice->
getFrameIndex() << endl);
 
  472                 !rateRange_Hz(rate_Hz[
i])) {
 
  478           const JCombinatorics& combinatorics = histogram.getCombinatorics();
 
  480           TH2D* h2s = histogram.h2s;
 
  481           TH1D* h1b = histogram.h1b;
 
  482           TH1D* h1L = histogram.h1L;
 
  488           JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, module);
 
  490           buffer.preprocess(option, match);
 
  492           for (JSuperFrame2D_t::iterator 
i = buffer.begin(); 
i != buffer.end(); ++
i) {
 
  493             if (veto[
i->getPMTAddress()]) {
 
  498           JSuperFrame1D_t& 
data = JSuperFrame1D_t::multiplex(buffer);
 
  500           DEBUG(
"Number of hits " << timeslice->
getFrameIndex() << 
":" << frame->getModuleID() << 
' ' << frame->size() << 
' ' << data.size() << endl);
 
  505           size_t numberOfSignalEvents = 0;
 
  507           double t1 = numeric_limits<double>::lowest();
 
  513             while (++q != data.end() && q->getT() - p->getT() <= TMax_ns) {}
 
  517             if (multiplicity(N)) {
 
  519               numberOfSignalEvents += 1;
 
  521               if (p->getT() > t1 + deadTime_ns) {
 
  526                     if ((__p->getToT() >= totRange_ns[0])    &&
 
  527                         (__q->getToT() >= totRange_ns[0])    &&
 
  528                         (__p->getToT() >= totRange_ns[1] ||
 
  529                          __q->getToT() >= totRange_ns[1])    &&
 
  530                         (__p->getToT() <= totRange_ns[2])    &&
 
  531                         (__q->getToT() <= totRange_ns[2])) {
 
  533                       h2s->Fill((
double) combinatorics.getIndex(__p->getPMT(),__q->getPMT()), 
 
  534                                 JCombinatorics::getSign(__p->getPMT(),__q->getPMT()) * (__q->getT() - __p->getT()));
 
  549           if        (background == rndms_t) {
 
  555             sort(data.begin(), data.end());
 
  557             double t1 = numeric_limits<double>::lowest();
 
  563               while (++q != data.end() && q->getT() - p->getT() <= TMax_ns) {}
 
  567               if (multiplicity(N)) {
 
  569                 if (p->getT() > t1 + deadTime_ns) {
 
  574                       if ((__p->getToT() >= totRange_ns[0])    &&
 
  575                           (__q->getToT() >= totRange_ns[0])    &&
 
  576                           (__p->getToT() >= totRange_ns[1] ||
 
  577                            __q->getToT() >= totRange_ns[1])    &&
 
  578                           (__p->getToT() <= totRange_ns[2])    &&
 
  579                           (__q->getToT() <= totRange_ns[2])) {
 
  581                         h1b->Fill((
double) combinatorics.getIndex(p->getPMT(),q->getPMT()), 1.0);
 
  593           } 
else if (background == rates_t ||
 
  594                      background == count_t) {
 
  607                 if (!veto[
i] && !veto[
j]) {
 
  609                   const double R1 = rate_Hz[
i];                    
 
  610                   const double R2 = rate_Hz[
j];                    
 
  617                   const double N = 
getP((R1)           * 2 * TMax_ns * 1e-9,
 
  618                                         (R2)           * 2 * TMax_ns * 1e-9,
 
  619                                         (Rs - R1 - R2) * 2 * TMax_ns * 1e-9,
 
  620                                         multiplicity.getLowerLimit(), 
 
  621                                         multiplicity.getUpperLimit()) * 
getFrameTime() / (2*TMax_ns);
 
  623                   h1b->Fill((
double) combinatorics.getIndex(
i,j), 
N);
 
  635           for (
size_t i = 0; 
i < combinatorics.getNumberOfPairs(); ++
i) {
 
  637             const int pmt1 = combinatorics.getPair(
i).first;
 
  638             const int pmt2 = combinatorics.getPair(
i).second;
 
  640             if (!veto[pmt1] && !veto[pmt2]) {
 
  641               h1L->Fill(
i, livetime_s);
 
  650   if (background == tails_t ) {
 
  652     const double R = (2.0*TMax_ns) / ((ymax - ymin)/ny);
 
  656       if (hr->is_valid()) {
 
  661         for (
int ix = 1; ix <= h1b->GetXaxis()->GetNbins(); ++ix) {
 
  667           for (
int iy = 1; iy <= h2s->GetYaxis()->GetNbins(); ++iy) {
 
  669             const double y = h2s->GetYaxis()->GetBinCenter(iy) ;
 
  671             if (Tail_ns(fabs(y))) { 
 
  672               Y += h2s->GetBinContent(ix,iy);
 
  673               W += h2s->GetBinError  (ix,iy) * h2s->GetBinError(ix,iy);
 
  678           h1b->SetBinContent(ix,      Y/N  * R);
 
  679           h1b->SetBinError  (ix, sqrt(W/N) * R);
 
  692   weights_hist.GetXaxis()->SetBinLabel(2, 
WS_t);                 
 
  693   weights_hist.GetXaxis()->SetBinLabel(3, 
WB_t);                 
 
  696   weights_hist.Fill(
WS_t,         (ymax - ymin)/ny);             
 
  697   weights_hist.Fill(
WB_t,         2.0*TMax_ns);                  
 
Utility class to parse command line options. 
 
double getRate(const int tdc, const double factor=1.0) const 
Get count rate. 
 
Data structure for a composite optical module. 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
int getDetectorID() const 
Get detector identifier. 
 
static const char *const WB_t
Named bin for value of TMax_ns in JCalibrateK40. 
 
Auxiliary class to select ROOT class based on class name. 
 
Router for direct addressing of module data in detector data structure. 
 
*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
 
Long64_t counter_type
Type definition for counter. 
 
then warning Cannot perform comparison test for histogram
 
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 class for multiplexing object iterators. 
 
int getRunNumber() const 
Get run number. 
 
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
 
int getFrameIndex() const 
Get frame index. 
 
1-dimensional frame with time calibrated data from one optical module. 
 
int first
index of module in detector data structure 
 
static const char *const WS_t
Named bin for time residual bin width. 
 
Reduced data structure for L0 hit. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
JRate_t getValue(const int tdc) const 
Get value. 
 
double getFrameTime()
Get frame time duration. 
 
Data storage class for rate measurements of all PMTs in one module. 
 
File router for fast addressing of summary data. 
 
Address of module in detector data structure. 
 
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory. 
 
Auxiliary data structure for streaming of STL containers. 
 
double getP(const double expval, bool hit)
Get Poisson probability to observe a hit or not for given expectation value for the number of hits...
 
PMT analogue signal processor. 
 
static const char *const weights_hist_t
Histogram naming. 
 
then JCookie sh JDataQuality D $DETECTOR_ID R
 
Auxiliary base class for list of file names. 
 
virtual const char * what() const override
Get error message. 
 
bool getPMTStatus(const JStatus &status)
Test status of PMT. 
 
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
then fatal The output file must have the wildcard in the e g root fi 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 W1_overall_t
Named bin for duration of the run. 
 
2-dimensional frame with time calibrated data from one optical module. 
 
Object reading from a list of files. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
bool getDAQStatus(const JDAQFrameStatus &frame, const JStatus &status)
Test status of DAQ. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
Auxiliary class for specifying the way of pre-processing of hits. 
 
const JDAQFrameStatus & getDAQFrameStatus() const 
Get DAQ frame status. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable STRING $argv[2] set_array QUANTILES set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"` source JAcousticsToolkit.sh typeset -A TRIPODS get_tripods $WORKDIR/tripod.txt TRIPODS XMEAN
 
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters. 
 
#define DEBUG(A)
Message macros.