16 #include "evt/Head.hh"
90 void compile(
const double Tmax,
91 const unsigned int L1 = 2)
93 std::sort(this->begin(), this->end());
97 for (const_iterator i = this->begin(); i != this->end(); ) {
110 buffer.insert(i->getID());
112 const_iterator j = i;
114 for (
double t1 = i->getLowerLimit(); ++j != this->end() && j->getLowerLimit() - t1 < Tmax; t1 = j->getLowerLimit()) {
115 buffer.insert(j->getID());
118 if (buffer.size() >= L1) {
119 *out =
JPulse(*i, *((--j)++));
127 this->erase(out, end());
138 inline bool has(
const JTimeRange& timerange)
const
140 const_iterator i = std::lower_bound(this->begin(), this->end(), timerange.
getLowerLimit());
142 return i != this->end() && i->overlap(timerange);
156 inline bool matchAll(
const JHitL1& first,
const JHitL1& second)
172 JHorizon(
const double ct,
186 bool operator()(
const JHitL1& hit)
const
190 for (JHitL1::const_iterator i = hit.begin(); i != hit.end(); ++i) {
210 int main(
int argc,
char **argv)
214 using namespace KM3NETDAQ;
230 JParser<> zap(
"Example program to test performance of various hit filters.");
240 zap[
'c'] =
make_field(cluster) =
'A',
'B',
'C',
'D',
'E',
'F';
246 catch(
const exception &error) {
247 FATAL(error.what() << endl);
251 using namespace KM3NETDAQ;
277 if (histogram == 1) {
283 for ( ; x < 30.0; x += 1.0)
286 for ( ; x < 50.0; x += 2.0)
289 for ( ; x < 100.0; x += 5.0)
292 for ( ; x < 200.0; x += 10.0)
295 he =
new TProfile(
"he", NULL, X.size() - 1, X.data());
296 hp =
new TProfile(
"hp", NULL, X.size() - 1, X.data());
300 he =
new TProfile(
"he", NULL, 28, 0.0, 7.0);
301 hp =
new TProfile(
"hp", NULL, 28, 0.0, 7.0);
304 TH1D ht1(
"ht1", NULL, 550, -50.0, +500.0);
305 TH1D ht2(
"ht2", NULL, 550, -50.0, +500.0);
306 TH1D hd1(
"hd1", NULL, 100, -1.0, +1.0);
307 TH1D hd2(
"hd2", NULL, 100, -1.0, +1.0);
308 TH1D hx1(
"hx1", NULL, 100, 0.0, +250.0);
309 TH1D hx2(
"hx2", NULL, 100, 0.0, +250.0);
310 TH1D hw1(
"hw1", NULL, 100, -0.5, +99.5);
311 TH1D hw2(
"hw2", NULL, 100, -0.5, +99.5);
323 const JHorizon horizon(0.2, 2);
328 while (inputFile.hasNext()) {
330 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
335 const Evt*
event = ps;
340 const double E = neutrino.E;
352 if (
is_muon(*track) && track->E > Emax) {
359 if (muon !=
event->mc_trks.end()) {
385 for (JMap_t::iterator i = zmap.begin(); i != zmap.end(); ) {
387 i->second.compile(Tmax_ns, 2);
389 if (i->second.empty())
395 const int L1mc = zmap.size();
405 for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
409 buildL2(*i, moduleRouter.
getModule(i->getModuleID()), back_inserter(zbuf));
413 sort(zbuf.begin(), zbuf.end(), timeSorter<JHitL1>);
415 dataL1.push_back(*zbuf.begin());
422 JDataL1_t::iterator __end = dataL1.begin();
432 __end =
clusterize(dataL1.begin(), dataL1.end(), weightSorter<JHitL1>, match3D);
436 __end =
clusterize(dataL1.begin(), dataL1.end(), match3B);
445 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
450 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
459 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
462 __end = partition(dataL1.begin(), __end, horizon);
465 for (JDataL1_t::iterator i = dataL1.begin(); i != dataL1.end(); ++i)
471 __end = dataL1.end();
478 JDataL1_t::iterator __q = __end;
487 const double t1 = converter.
getTime(*hit);
497 iter_swap(hit, --__q);
502 if (L1mc != 0 && !L1.empty()) {
504 Double_t x = numeric_limits<Double_t>::max();
511 he->Fill(x, (Double_t) L1ok.size() / (Double_t) L1mc);
512 hp->Fill(x, (Double_t) L1ok.size() / (Double_t) L1.size());
517 for (JDataL1_t::iterator hit = dataL1.begin(); hit != __end; ++hit) {
522 for (JDataL1_t::iterator hit = dataL1.begin(); hit != __end; ++hit) {
528 for (JHitL1::const_iterator i = hit->begin(); i != hit->end(); ++i) {
529 if (i->getDot(gui) < dot)
530 dot = i->getDot(gui);
533 const double w = (hit->rbegin()->
getT() - hit->begin()->
getT());
535 if (distance(hit, __q) > 0) {
538 hx1.Fill(hit->
getX());
543 hx2.Fill(hit->
getX());
Match operator for Cherenkov light from muon in any direction.
Router for direct addressing of PMT data in detector data structure.
Utility class to parse command line options.
int getModuleID() const
Get module identifier.
Match operator for Cherenkov light from muon with given direction.
Data structure for L1 hit.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Algorithms for hit clustering and sorting.
Synchronously read DAQ events and Monte Carlo events (and optionally other events).
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Router for direct addressing of module data in detector data structure.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
double getT(const unsigned int i) const
Get time of hit i.
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
JMatchHelper< JHit_t > make_match(bool(*match)(const JHit_t &, const JHit_t &))
Auxiliary method to make JMatch object based on pointer to match function.
double getTime() const
Get DAQ/trigger minus Monte Carlo hit time.
static counter_type max()
Get maximum counter value.
Data structure for detector geometry and calibration.
JHitIterator_t clusterizeWeight(JHitIterator_t __begin, JHitIterator_t __end, const JMatch< JHit_t > &match)
Partition data according given binary match operator.
bool is_noise(const Hit &hit)
Verify hit origin.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Basic data structure for L0 hit.
Basic data structure for time and time over threshold information of hit.
Auxiliary class for defining the range of iterations of objects.
JHitIterator_t clusterize(JHitIterator_t __begin, JHitIterator_t __end, const JMatch< JHit_t > &match, const int Nmin=1)
Partition data according given binary match operator.
void transform(const JRotation3D &R, const JVector3D &pos)
Transform hit.
Match operator for Cherenkov light from muon in any direction.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
Direct access to PMT in detector data structure.
General purpose messaging.
Direct access to module in detector data structure.
Time-over-threshold (ToT) pulse from a PMT.
double getZ() const
Get z position.
Auxiliary class for a time-over-threshold pulse from a PMT.
Utility class to parse command line options.
ROOT TTree parameter settings.
JDirection3D getDirection(const Vec &v)
Get direction.
Auxiliary class to convert DAQ/trigger hit time to/from Monte Carlo hit time.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
Data structure for normalised vector in three dimensions.
General purpose class for multiple pointers.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
double getX() const
Get x position.
int getParentModuleID(const JObjectID &id) const
Get parent module identifier.
Basic data structure for L1 hit.
3D match criterion with road width.
#define DEBUG(A)
Message macros.
JPosition3D getPosition(const Vec &v)
Get position.
int main(int argc, char *argv[])