1 #ifndef __JRUNANALYZER__
2 #define __JRUNANALYZER__
90 while (scanner.hasNext()) {
101 if (event.hasTriggerBit(
i)) {
107 int counter_3dmuon = 0;
109 JRange_t
range(JRange_t::DEFAULT_RANGE());
114 const double t1 =
getTime(hit->getT(), module.
getPMT(hit->getPMT()));
120 if(trigger_mask.hasTriggerBit(getTriggerBit<JTrigger3DMuon>())) counter_3dmuon++;
134 if(trigger_mask.hasTriggerBit(getTriggerBit<JTrigger3DMuon>())){
140 if (hit -> hasTriggerBit(
i)) {
146 FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
164 int pmt = hit-> getPMT();
177 FATAL(
"JModuleRouter trying to access non existing identifier: "<< hit->getModuleID());
191 TH1D* h_tres =
new TH1D(
"h_tres",
";Time residuals [ns]; Entries", 100, -50, 150);
192 TH1D* h_likelihood =
new TH1D (
"h_likelihood",
" ; Likelihood; Reconstructed Events ", 100, -1000, 1000);
193 TH1D* h_beta0 =
new TH1D(
"h_beta0",
"; beta0; Reconstructed Events", 20, 0, 1);
194 TH1D* h_energy =
new TH1D (
"h_energy",
" ; Energy [GeV]; Reconstructed Events ", 65, 0, 9);
196 TH1D* h_zenith =
new TH1D(
"h_zenith",
"; cosZenith; Reconstructed Events", 20, -1, 1);
197 TH1D* h_azimuth =
new TH1D(
"h_azimuth",
"; cosAzimuth; Reconstructed Events", 20, -1, 1);
198 TH1D* h_radial_position =
new TH1D (
"h_radial_position",
"; Radial Position [m]; Reconstructed Events", 60, 0, 4.2);
200 TH1D* h_z_position =
new TH1D (
"h_z_position",
"; Z Position [m] ; Reconstructed Events", 50, 0, 3.2);
203 while (scanner.hasNext()) {
212 JEvt::iterator best = evt->begin();
213 h_energy -> Fill(best->getE());
214 h_likelihood -> Fill(best->getQ());
215 h_z_position -> Fill(best->getZ());
216 h_radial_position -> Fill(sqrt(best->getX()*best->getX() + best->getY()*best->getY()));
229 h_tres -> Fill(hit->getT() - track.
getT(hit->getPosition()));
238 h_likelihood -> Write();
239 h_z_position -> Write();
240 h_radial_position -> Write();
242 h_azimuth -> Write();
268 while (scanner.hasNext()){
272 for (JDAQSummaryslice::const_iterator frame = slice.begin() ; frame != slice.end() ; ++ frame) {
300 const double factor = 1.0e-3;
304 rate += frame->getRate(
i, factor);
306 h2->Fill(
i , frame->getRate(
i, factor));
308 PMT_rate_quantiles[string][floor][
i].put(frame->getRate(
i, factor));
316 DOM_rate_quantiles[string][floor].put(rate);
321 const double factor = 1.0e-3;
325 rate += frame->getRate(
i, factor);
332 DOM_rate_quantiles[string][floor].put(rate);
337 FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame->getModuleID());
342 for (
const auto& i1 : DOM_rate_quantiles) {
343 for (
const auto& i2 : i1.second) {
344 if (i2.second.getCount() > 0) {
351 for (
const auto& i1 : PMT_rate_quantiles){
356 for (
const auto& i2 : i1.second) {
358 if (i2.second[i3].getCount() > 0){
359 h2->Fill(i3, i2.first, i2.second[i3].getMean());
360 h1->Fill(i2.second[i3].getMean());
380 double inverseFrameTimeSec = 1. / (1.0e-9 *
getFrameTime());
382 while (scanner.hasNext()){
384 T slice = *(scanner.next());
386 for(
auto & frame : slice) {
390 double rate = frame.numberOfHits * inverseFrameTimeSec;
394 DOM_rate_quantiles[string][floor].put(rate);
404 h2 -> Fill(hit->getPMT() , hit->getToT()) ;
406 pmt_hit_count[hit->getPMT()]++;
419 FATAL(
"JModuleRouter trying to access non existing identifier: "<< frame.getModuleID());
441 if (scanner.hasNext()) {
457 if(scanner.hasNext()) {
474 if(scanner.hasNext()) {
490 if(scanner.hasNext()) {
503 f->mkdir(
"Detector");
522 j->second->Scale(1.,
"width");
TH1D * h_pmt_distribution_snapshot_hits
TH2D * h_Snapshot_hits_per_module
void iterateTimesliceTree(JTreeScanner< T > &scanner)
ROOT TTree parameter settings of various packages.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
int countFIFOStatus() const
Count FIFO status.
TH1D * h_pmt_distribution_triggered_hits
vector< JManager< string, TH2D > * > m_pmt_tot_distributions
JManager< string, TH1D > * m_mean_summary_rate_distribution
int getFloor() const
Get floor number.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Data structure for a composite optical module.
Auxiliary class for trigger mask.
then usage $script[< detector identifier >< run range >]< QA/QCfile > nExample script to produce data quality plots nWhen a detector identifier and run range are data are downloaded from the database nand subsequently stored in the given QA QC file
virtual const multi_pointer_type & next() override
Get next element.
JTrack3E getTrack(const Trk &track)
Get track.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
vector< TH2D * > h_dom_mean_rates
Template specialisation of L0 builder for JHitL0 data type.
JRA_Histograms histograms
TH1D * h_Number_of_overlays
TH2D * h_Triggered_hits_per_module
Router for direct addressing of module data in detector data structure.
then set_variable singlesRate set_variable doublesRate set_variable numberOfSlices echo Generating random background echo Singles rate
void writeToFile(TFile *f, int analysis_level)
General purpose class for parallel reading of objects from a single file or multiple files...
TH2D * h_daq_status_per_dom
JLimit_t numberOfTimeslices
Dynamic ROOT object management.
void initialize_summary_histograms()
double getTime(const Hit &hit)
Get true time of hit.
double getPhi() const
Get phi angle.
JSingleFileScanner inputFile
void iterateSummarysliceTree(JTreeScanner< JDAQSummaryslice > &scanner)
JManager< string, TH2D > * m_mean_summary_rate
Class dedicated to the analysis of KM3NeT runs.
Template definition for direct access of elements in ROOT TChain.
JVersor3D getDirection(const JVector3D &pos) const
Get photon direction of Cherenkov light on PMT.
TH1D * h_dom_rate_distribution
#define MAKE_STRING(A)
Make string.
Basic data structure for L0 hit.
void Fill_mean_ToT_histograms()
void iterateRecoEventTree(JParallelFileScanner< JTypeList< JDAQEvent, JFIT::JEvt > > &scanner, TFile &f)
Auxiliary class for defining the range of iterations of objects.
Type definition of range.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
TimesliceHistograms h_timeslice
~JRunAnalyzer()
Destructor.
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()).
TH1D * h_tot_distribution_snapshot_hits
TriggerHistograms h_trigger
double getFrameTime()
Get frame time duration.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
double getTheta() const
Get theta angle.
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
void Write_manager_table_in_key_dir(TFile &f, vector< JManager< T, V > * > table)
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v3.4.0-8-ge14cb17 https://git.km3net.de/common/km3net-dataformat.
TH1D * h_pmt_rate_distribution
JRunAnalyzer(const JSingleFileScanner<> &file, const JDetector &detector, TFile *out, JLimit_t nTimeslices, JLimit_t nSummaryslices, JLimit_t nEvents, int analysislevel)
Constructor.
void Write_histogram_table_to_file(TFile &f, string dirname, vector< vector< T * > > table)
TH1D * h_Trigger_bit_event
const JPMT & getPMT(const int index) const
Get PMT.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
void iterateEventTree(JTreeScanner< JDAQEvent > &scanner)
vector< JManager< string, TH1D > * > m_mean_ToT_distribution
Scanning of objects from multiple files according a format that follows from the extension of each fi...
SummaryHistograms h_summary
Direct access to module in detector data structure.
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
int getString() const
Get string number.
Auxiliary class to define a range between two values.
int countHighRateVeto() const
Count high-rate veto status.
JManager< string, TH2D > * m_summary_rate_distribution
void Write_manager_in_key_dir(TFile &f, JManager< T, V > *manager)
General purpose string class.
then JHobbit a $DETECTOR f
std::string to_string(const T &value)
Convert value to string.
vector< JManager< string, TH2D > * > m_mean_ToT
vector< JManager< string, TH2D > * > m_pmt_rate_distributions
bool hasModule(const JObjectID &id) const
Has module.
TH1D * h_tot_distribution_triggered_hits
TH1D * h_Triggered_hits_3dmuon
JLimit_t numberOfSummaryslices
Object reading from a list of files.
TH2D * h_Triggered_hits_3dmuon_per_module
Indexing of data type in type list.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
bool testDAQStatus() const
Test DAQ status of packets.
void initialize_trigger_histograms()
JManager< string, TH2D > * m_Snapshot_hits_per_pmt
void initialize_timeslice_histograms()
TH1D * h_Triggered_over_Snapshot_hits