Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JUTCProfile.cc
Go to the documentation of this file.
1
2#include <string>
3#include <iostream>
4#include <iomanip>
5
6#include "TROOT.h"
7#include "TFile.h"
8#include "TH1D.h"
9
11#include "JDAQ/JDAQEvaluator.hh"
13
16#include "JSupport/JSupport.hh"
17
18#include "Jeep/JParser.hh"
19#include "Jeep/JMessage.hh"
20
21
22namespace {
23
25
26 typedef long long int JUTCTime_t;
27
28 /**
29 * Get time.
30 *
31 * \param utc UTC time
32 * \return time [ns]
33 */
34 inline JUTCTime_t getTime(const JDAQUTCExtended& utc)
35 {
36 JUTCTime_t t0 = utc.getUTCseconds();
37 JUTCTime_t t1 = utc.getUTC16nanosecondcycles();
38
39 t0 *= 1000000000;
40 t1 *= 16;
41
42 return t0 + t1;
43 }
44
45
46 /**
47 * Get time.
48 *
49 * \param frame_index frame index
50 * \return time [ns]
51 */
52 inline JUTCTime_t getTime(const int frame_index)
53 {
55
56 return (JUTCTime_t) (frame_index * getFrameTime());
57 }
58}
59
60
61/**
62 * \file
63 *
64 * Example program to histogram UTC profiles.
65 * \author mdejong
66 */
67int main(int argc, char **argv)
68{
69 using namespace std;
70 using namespace JPP;
71 using namespace KM3NETDAQ;
72
73 JMultipleFileScanner<> inputFile;
74 JLimit_t& numberOfEvents = inputFile.getLimit();
75 string outputFile;
76 int debug;
77
78 try {
79
80 JParser<> zap("Example program to histogram UTC profiles.");
81
82 zap['f'] = make_field(inputFile);
83 zap['o'] = make_field(outputFile) = "profile.root";
84 zap['n'] = make_field(numberOfEvents) = JLimit::max();
85 zap['d'] = make_field(debug) = 1;
86
87 zap(argc, argv);
88 }
89 catch(const exception& error) {
90 FATAL(error.what() << endl);
91 }
92
93
95
96 counter_type N = in.getEntries();
97
98 if (N > numberOfEvents.getUpperLimit()) {
99 N = numberOfEvents.getUpperLimit();
100 }
101
102 if (N == 0) {
103 FATAL("Number of time slices in file(s) " << N << endl);
104 }
105
106 const Long64_t NX = in.getEntry(N-1)->getFrameIndex() - in.getEntry(0)->getFrameIndex() + 1;
107 const Double_t xmin = (Double_t) in.getEntry( 0 )->getFrameIndex() - 0.5;
108 const Double_t xmax = (Double_t) in.getEntry(N-1)->getFrameIndex() + 0.5;
109
110
111 TFile out(outputFile.c_str(), "recreate");
112
113 TH1D h0("UTC", NULL, NX, xmin, xmax);
114 TH1D h1("!utc", NULL, NX, xmin, xmax);
115 TH1D h2("dt", NULL, 1001, -500.5, +500.5);
116
117
118 const int frame_index = in.getEntry(0)->getFrameIndex();
119 const JUTCTime_t t0 = getTime(in.getEntry(0)->getTimesliceStart());
120
121 for (in.rewind(); in.hasNext() && in.getCounter() != numberOfEvents.getUpperLimit(); ) {
122
123 STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
124
125 JDAQTimeslice* timeslice = in.next();
126
127 const Double_t x = timeslice->getFrameIndex();
128 const JDAQUTCExtended utc = timeslice->getTimesliceStart();
129
130 const JUTCTime_t t1 = t0 + getTime(timeslice->getFrameIndex() - frame_index);
131
132 h0.Fill(x, getTime(utc) - t0);
133
134 for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
135
136 if (utc != frame->getTimesliceStart()) {
137 h1.Fill(x);
138 }
139
140 h2.Fill(getTime(frame->getTimesliceStart()) - t1);
141 }
142 }
143 STATUS(endl);
144
145 out.Write();
146 out.Close();
147}
string outputFile
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
ROOT TTree parameter settings of various packages.
int main(int argc, char **argv)
Utility class to parse command line options.
Definition JParser.hh:1698
Template definition for direct access of elements in ROOT TChain.
T getUpperLimit() const
Get upper limit.
Definition JRange.hh:213
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
int getFrameIndex() const
Get frame index.
Data structure for UTC time.
uint32_t getUTC16nanosecondcycles() const
Get minor time.
uint32_t getUTCseconds() const
Get major time.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
const char * getTime()
Get current local time conform ISO-8601 standard.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
double getFrameTime()
Get frame time duration.
Definition JDAQClock.hh:162
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128