56{
60
62 JLimit_t& numberOfEvents = inputFile.getLimit();
64 string detectorFile;
65 double Tmax_ns;
66 double ctMin;
68
69 try {
70
71 JParser<> zap(
"Example program to determine time slewing of L1 hits.");
72
80
81 zap(argc, argv);
82 }
83 catch(const exception& error) {
84 FATAL(error.what() << endl);
85 }
86
87
89
90 try {
92 }
95 }
96
98
100
102
103
105
107
108 const int nx = 100;
109 const double xmin = -25.0;
110 const double xmax = +25.0;
111
113
114 ostringstream os;
115
116 os << "M[" << setfill('0') << setw(2) << i << "]";
117
118 H1D.push_back(new TH1D(os.str().c_str(), NULL, nx, xmin, xmax));
119 }
120
121
124
125 JSuperFrame2D <JHit> buffer;
128
129
131
133
135
137 const Evt*
event = ps;
138
140
141 vector<Trk>::const_iterator muon = find_if(event->mc_trks.begin(), event->mc_trks.end(),
is_muon);
142
143 if (muon != event->mc_trks.end()) {
144
145
146
148
149 JDataL0_t dataL0;
150 JDataL2_t dataL2;
151
152 buildL0(*tev, router, true, back_inserter(dataL0));
153 buildL2(*tev, router, true, back_inserter(dataL2));
154
155
156
158
159 dataL2.erase(unique(dataL2.begin(), dataL2.end(), equal_to<JDAQModuleIdentifier>()), dataL2.end());
160
161 for (JDataL0_t::const_iterator hit = dataL0.begin(); hit != dataL0.end(); ++hit) {
162
163 const double t0 = trk.
getT(*hit);
164 const double t1 = converter.getTime(hit->getT());
165
166 H1D[1]->Fill(t1 - t0);
167 }
168
169
170 for (JDataL2_t::const_iterator hit = dataL2.begin(); hit != dataL2.end(); ++hit) {
171
172 const double t0 = trk.
getT(*hit);
173 const double t1 = converter.getTime(hit->begin()->getT());
174 const size_t index = min(hit->size(), H1D.size() - 1);
175
176 H1D[index]->Fill(t1 - t0);
177 }
178 }
179 }
181
182
183 TF1
f1(
"f1",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
184
185 string option = "LL";
186
188 option += "Q";
189 }
190
191
193
194
195
196 Double_t ymax = 0.0;
197 Double_t x0 = 0.0;
198 Double_t
sigma = 2.0;
199 Double_t ymin = 0.0;
200
201 for (int i = 1; i != (*h1)->GetNbinsX(); ++i) {
202
203 const Double_t
x = (*h1)->GetBinCenter (i);
204 const Double_t
y = (*h1)->GetBinContent(i);
205
206 if (y > ymax) {
209 }
210 }
211
212 f1.SetParameter(0, ymax);
213 f1.SetParameter(1, x0);
214 f1.SetParameter(2, sigma);
215 f1.FixParameter(3, ymin);
216
217 for (Int_t i = 0; i !=
f1.GetNpar(); ++i) {
218 f1.SetParError(i, 0.0);
219 }
220
221
222
223
224 (*h1)->Fit(&f1, option.c_str(), "same", x0 - 3 * sigma, x0 + 3 * sigma);
225
226
227 cout <<
"\tt0.push_back(" << showpos <<
FIXED(4,2) <<
f1.GetParameter(1) <<
");" << endl;
228 }
229
230 out.Write();
231 out.Close();
232}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Router for direct addressing of module data in detector data structure.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Utility class to parse command line options.
counter_type getCounter() const
Get counter.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
JTrack3E getTrack(const Trk &track)
Get track.
JPosition3D getPosition(const Vec &pos)
Get position.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Vec getOffset(const JHead &header)
Get offset.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
bool timeSorter(const JHit_t &first, const JHit_t &second)
Compare two hits by weight.
KM3NeT DAQ data structures and auxiliaries.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Auxiliary data structure for floating point format specification.
General purpose class for multiple pointers.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
virtual bool hasNext() override
Check availability of next element.
virtual const multi_pointer_type & next() override
Get next element.
Data structure for L2 parameters.
The Vec class is a straightforward 3-d vector, which also works in pyroot.