59 static const char*
const rates_t =
"rates";
60 static const char*
const count_t =
"counts";
61 static const char*
const tails_t =
"tails";
62 static const char*
const rndms_t =
"randoms";
103 const Int_t nx = this->getNumberOfPairs();
123 return (h2s !=
NULL &&
144 inline double getP(
const double E1,
const double E2,
const double ED,
const int M_min,
const int M_max)
148 double P = E1 * E2 *
exp(-(E1 + E2 +
ED));
224 JParser<> zap(
"Auxiliary program to determine PMT parameters from K40 data.");
243 catch(
const exception &error) {
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);
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);
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);
329 t0.push_back(i * 2 * TMax_ns);
382 for (JMultipleFileScanner_t::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
391 for (
JDAQHeader header; in.hasNext() && counter != numberOfEvents; ++counter) {
411 ERROR(
"Frame indices do not match at "
412 <<
"[counter = " << counter <<
"]"
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());
439 }
else if (background ==
tails_t) {
443 }
else if (background ==
rndms_t) {
447 }
else if (background ==
rates_t) {
460 FATAL(
"Summary frame of module " << frame->getModuleID() <<
" not found at frame index " << timeslice->
getFrameIndex() <<
endl);
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);
513 while (++q != data.end() && q->getT() - p->getT() <= TMax_ns) {}
517 if (multiplicity(N)) {
552 *i =
hit_type(i->getPMT(),
JHit(i->getT() + t0[i->getPMT()], i->getToT()));
555 sort(data.begin(), data.end());
563 while (++q != data.end() && q->getT() - p->getT() <= TMax_ns) {}
567 if (multiplicity(N)) {
581 h1b->Fill((
double)
combinatorics.getIndex(p->getPMT(),q->getPMT()), 1.0);
593 }
else if (background ==
rates_t ||
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);
635 for (
size_t i = 0; i <
combinatorics.getNumberOfPairs(); ++i) {
641 h1L->Fill(i, livetime_s);
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) ;
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);
int main(int argc, char **argv)
KM3NeT DAQ constants, bit handling, etc.
Data structure for detector geometry and calibration.
Basic data structure for L0 hit.
Match operator for consecutive hits.
General purpose messaging.
#define DEBUG(A)
Message macros.
Direct access to module in detector data structure.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
PMT analogue signal processor.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Auxiliaries for pre-processing of hits.
I/O formatting auxiliaries.
#define MAKE_CSTRING(A)
Make C-string.
Auxiliary class to define a range between two values.
Scanning of objects from a single file according a format that follows from the extension of each fil...
ROOT TTree parameter settings of various packages.
Address of module in detector data structure.
int first
index of module in detector data structure
Router for direct addressing of module data in detector data structure.
bool hasModule(const JObjectID &id) const
Has module.
const JModuleAddress & getAddress(const JObjectID &id) const
Get address of module.
Data structure for a composite optical module.
virtual const char * what() const override
Get error message.
Auxiliary class for object identification.
Template definition of a multi-dimensional oscillation probability interpolation table.
File router for fast addressing of summary data.
void update(const JDAQHeader &header)
Update router.
bool hasSummaryFrame(const JDAQModuleIdentifier &module) const
Has summary frame.
const JDAQSummaryFrame & getSummaryFrame(const JDAQModuleIdentifier &module) const
Get summary frame.
Reduced data structure for L0 hit.
int getDetectorID() const
Get detector identifier.
int getRunNumber() const
Get run number.
int getFrameIndex() const
Get frame index.
const JDAQFrameStatus & getDAQFrameStatus() const
Get DAQ frame status.
Data storage class for rate measurements of all PMTs in one module.
double getRate(const int tdc, const double factor=1.0) const
Get count rate.
JRate_t getValue(const int tdc) const
Get value.
static const char *const _2S
Name extension for 2D counts.
static const char *const WB_t
Named bin for value of TMax_ns in JCalibrateK40.
static const char *const weights_hist_t
Histogram naming.
static const char *const _1B
Name extension for 1D background.
static const char *const WS_t
Named bin for time residual bin width.
static const char *const W1_overall_t
Named bin for duration of the run.
static const char *const _1L
Name extension for 1D live time.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
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.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
bool is_valid(const json &js)
Check validity of JSon data.
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
bool getDAQStatus(const JDAQFrameStatus &frame, const JStatus &status)
Test status of DAQ.
bool getPMTStatus(const JStatus &status)
Test status of PMT.
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Transmission with position.
Auxiliary class to sort pairs of PMT addresses within optical module.
PMT analogue signal processor.
virtual double getNPE(const double tot_ns) const override
Get number of photo-electrons.
double getIntegralOfChargeProbability(const double xmin, const double xmax, const int NPE) const
Get integral of probability.
Auxiliary data structure for streaming of STL containers.
Auxiliary class to select ROOT class based on class name.
static counter_type max()
Get maximum counter value.
Auxiliary base class for list of file names.
Auxiliary class for specifying the way of pre-processing of hits.
static std::vector< JPreprocessor > getOptions()
Get options.
@ filter_t
filter consecutive hits according match criterion