12 #include "TProfile2D.h"
35 int main(
int argc,
char **argv)
39 using namespace KM3NETDAQ;
54 JParser<> zap(
"Auxiliary program to determine time slewing from K40 data.");
59 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
69 catch(
const exception &error) {
70 FATAL(error.what() << endl);
75 using namespace KM3NETDAQ;
77 if (!multiplicity.is_valid()) {
FATAL(
"Invalid multiplicity " << multiplicity << endl); }
78 if ( multiplicity.getLowerLimit() < 2) {
FATAL(
"Invalid multiplicity " << multiplicity << endl); }
79 if (!totVeto_ns .
is_valid()) {
FATAL(
"Invalid time over threshold " << totVeto_ns << endl); }
93 FATAL(
"Empty detector." << endl);
101 TH1D h0(
"h0", NULL, 41, -TMax_ns, +TMax_ns);
102 TH1D
h1(
"h1", NULL, 50, -0.5, 49.5);
103 TProfile2D hx(
"hx", NULL, 50, -0.5, 49.5, 50, -0.5, 49.5, -2*TMax_ns, +2*TMax_ns);
104 TProfile h2(
"h2", NULL, 100, 0.5, 100.5, -2*TMax_ns, +2*TMax_ns);
112 while (inputFile.hasNext()) {
114 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
118 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
120 if (router.
hasModule(super_frame->getModuleID()) && !super_frame->empty()) {
126 buffer.resize(super_frame->size());
135 sort(buffer.begin(), buffer.end());
141 while (++q != buffer.end() && q->getT() - p->getT() <= TMax_ns ) {}
151 module.
getPMT(__q->getPMT()));
155 h0.Fill(__q->getT() - __p->getT());
156 h1.Fill(__q->getToT());
157 hx.Fill(__p->getToT(), __q->getToT(), __q->getT() - __p->getT());
159 if (totVeto_ns(__p->getToT())) {
160 h2.Fill(__q->getToT(), __q->getT() - __p->getT());
179 TF1 f1(
"f1",
"[0]*exp([1]*sqrt(x) + [2]*x) + [3]");
181 f1.SetParameter(0, h2.GetMaximum());
182 f1.SetParameter(1, -0.01);
183 f1.SetParameter(2, -0.05);
184 f1.SetParameter(3, h2.GetMinimum());
186 h2.ProjectionX()->Fit(&f1,
"",
"same");
188 for (
int i = 0; i != f1.GetNpar(); ++i) {
189 cout <<
"\tstatic double p" << i <<
"() { return " << setw(9) << setprecision(5) << f1.GetParameter(i) <<
"; }" << endl;
Utility class to parse command line options.
ROOT TTree parameter settings.
Basic data structure for L0 hit.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
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.
Router for direct addressing of module data in detector data structure.
then for HISTOGRAM in h0 h1
Data structure for detector geometry and calibration.
Auxiliary class for defining the range of iterations of objects.
Reduced data structure for L0 hit.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
bool is_valid(const json &js)
Check validity of JSon data.
double getDot(const JFirst_t &first, const JSecond_t &second)
Get dot product of objects.
then $JPP_DIR examples JDetector JSlewing P slewing
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
const JPMT & getPMT(const int index) const
Get PMT.
General purpose messaging.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to module in detector data structure.
Auxiliary class to define a range between two values.
General purpose class for object reading from a list of file names.
Utility class to parse command line options.
bool hasModule(const JObjectID &id) const
Has module.
const JLimit & getLimit() const
Get limit.
KM3NeT DAQ constants, bit handling, etc.
JHitL0 getHit(const Hit &hit)
Get transformation.
#define DEBUG(A)
Message macros.
int main(int argc, char *argv[])