Jpp 20.0.0-27-g39925593c-D
the software that should make you happy
Loading...
Searching...
No Matches
Functions
JClusterBuilder.cc File Reference

Example program to demonstrate the usage of JClusterBuilder. More...

#include <string>
#include "Jeep/JParser.hh"
#include "km3net-dataformat/online/JDAQ.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JSupport.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JModuleRouter.hh"
#include "JMonitor/JCluster.hh"
#include "JMonitor/JClusterBuilder.hh"
#include "TH2D.h"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to demonstrate the usage of JClusterBuilder.

If the option -v ("verbose") is used, the number of coincidence clusters is printed for each DOM for each time slice.

Definition in file JClusterBuilder.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

loop over all clusters the begin/end_inclusive_m(M) methods return the begin and end iterator for clusters of multiplicity M or higher

loop over clusters of a given multiplicity the begin/end_m(M) methods return the begin and end iterator for clusters of multiplicity exactly M

Definition at line 36 of file JClusterBuilder.cc.

36 {
37 const unsigned int max_multiplicity = 31 ;
38
39 //------------------------------------------------------------
40 // READ COMMAND-LINE OPTIONS
41 //------------------------------------------------------------
43 string detectorFile ;
44 double window ;
45 int maxnslices ;
46 bool verbose ;
47 string ofname ;
48
49 try {
51
52 zap['f'] = make_field(input) ;
53 zap['m'] = make_field(maxnslices) = 100 ;
55 zap['w'] = make_field(window) ;
56 zap['v'] = make_field(verbose) ;
57 zap['o'] = make_field(ofname) = "out.root" ;
58 zap(argc, argv);
59 }
60 catch(const exception &error) {
61 cerr << error.what() << endl ;
62 cout << "Use option -h! to display command line options." << endl ;
63 exit(1) ;
64 }
65
66 //------------------------------------------------------------
67 // OPEN DETECTOR FILE
68 //------------------------------------------------------------
70 try {
72 }
73 catch(const JException& error) {
74 cerr << "FATAL ERROR. Could not open detector file '" << detectorFile << "'." << endl ;
75 exit(1) ;
76 }
77 JModuleRouter moduleRouter(detector) ;
78
79 //------------------------------------------------------------
80 // ALLOCATE HISTOGRAMS
81 //------------------------------------------------------------
82 const int ncolors = 5 ;
83 const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
84
85 // demonstration plots: the ToT distribution for hits in clusters
86 // of different sizes
87 vector<TH1D*> hToT(max_multiplicity+1,NULL) ;
88 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
89 char hname[200] ;
90 sprintf( hname, "hToT_m%u", m ) ;
91 char htitle[300] ;
92 sprintf( htitle, "Exclusive %u-fold coincidence clusters;ToT [ns];a.u. (normalized)", m ) ;
93 hToT[m] = new TH1D( hname, htitle, 256, -0.5, 255.5 ) ;
94 hToT[m]->SetLineColor( nice_colors[m%ncolors] ) ;
95 hToT[m]->SetLineWidth(2) ;
96 }
97
98 // demonstration plots: the time distribution of the hits in the clusters
99 vector<TH1D*> ht(max_multiplicity+1,NULL) ;
100 for( unsigned int m=0; m<max_multiplicity+1; ++m ) {
101 char hname[200] ;
102 sprintf( hname, "ht_m%u", m ) ;
103 char htitle[300] ;
104 sprintf( htitle, "Exclusive %u-fold coincidence clusters;Time after first hits [ns];a.u. (normalized)", m ) ;
105 const int margin = 5 ; // ns
106 double xmin = -margin ;
107 double xmax = ceil(window) + margin ;
108 int nbins = (int) round(xmax-xmin) ;
109 ht[m] = new TH1D( hname, htitle, nbins, xmin, xmax ) ;
110 ht[m]->SetLineColor( nice_colors[m%ncolors] ) ;
111 ht[m]->SetLineWidth(2) ;
112 }
113
114
115 // another demonstration plot showing the relation between cluster size
116 // and cluster multiplicity (they are practically always the same)
117 TH2D hSizeVsMultiplicity("hSizeVsMultiplicity",";cluster size;cluster multiplicity",
118 32,-0.5,31.5,
119 32,-0.5,31.5 ) ;
120 hSizeVsMultiplicity.SetOption("colz") ;
121
122 //------------------------------------------------------------
123 // READ FILES
124 //------------------------------------------------------------
125 cout << endl ;
126 cout << "---------- Reading file(s) ----------" << endl ;
127
129
131
132 unsigned int nTS = 0 ; // time slice counter
133 while( scan.hasNext() ) {
134 JDAQTimeslice* ts = scan.next() ;
135 if( (int)nTS == maxnslices ) break ;
136 ++nTS ;
137
138 if( verbose ) {
139 cout << "------ Frame index = " << ts->getFrameIndex() << endl ;
140 }
141
142 // loop over the JDAQSuperFrames
143 for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
144 // ignore frames without hits
145 if( sf->size() == 0 ) continue ;
146
147 int moduleID = sf->getModuleID() ;
148 int localID = moduleRouter.getAddress(moduleID).first ;
149 JModule module = detector[localID] ;
150
151 // build clusters
152 cluster_builder.reset(*sf,module) ;
153
154 // print number of clusters found in this frame
155 if( verbose ) {
156 cout << "--- " << "S" << module.getString() << "F" << module.getFloor() << endl ;
157 cout << setw(10) << "multiplicity"
158 << setw(20) << "excl. nclusters"
159 << setw(20) << "incl. nclusters"
160 << endl ;
161 for( unsigned int m=2; m<=max_multiplicity; ++m) {
162 if( cluster_builder.getNclusters(m) != 0 ) {
163 cout << setw(10) << m
164 << setw(20) << cluster_builder.getNclusters(m)
165 << setw(20) << cluster_builder.getInclusiveNclusters(m)
166 << endl ;
167 }
168 }
169 }
170
171 /**
172 loop over all clusters
173 the begin/end_inclusive_m(M) methods return the begin and end iterator
174 for clusters of multiplicity M or higher
175 **/
176 for( vector<JCluster>::const_iterator it=cluster_builder.begin_inclusive_m(0); it!=cluster_builder.end_inclusive_m(0); ++it ) {
177 hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
178 }
179
180 /**
181 loop over clusters of a given multiplicity
182 the begin/end_m(M) methods return the begin and end iterator for
183 clusters of multiplicity exactly M
184 **/
185 for( unsigned int m=0; m<=max_multiplicity; ++m) {
187 // loop over the hits in the cluster to fill ToT histogram
188 for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
189 hToT[m]->Fill( hit->getToT() ) ;
190 }
191 // loop over the hits after the first hit to fill dt histogram
192 if( it->size() > 1 ) {
193 JHitL1::const_iterator first_hit = it->begin() ;
194 JHitL1::const_iterator hit(first_hit) ;
195 for( ++hit; hit!=it->end(); ++hit ) {
196 ht[m]->Fill( hit->getT() - first_hit->getT() ) ;
197 }
198 }
199 }
200 }
201
202 } // end of loop over JDAQSuperFrames
203
204 if( verbose ) cout << endl ;
205
206 } // end of loop over JDAQTimeSlices
207
208 cout << "Read " << nTS << " time slices." << endl ;
209
210 TFile* f = new TFile( ofname.c_str(), "recreate" ) ;
211
212 hSizeVsMultiplicity.Write() ;
213
214 for( unsigned int m=0; m<=max_multiplicity; ++m) {
215 if( hToT[m]->GetEntries()>0 ) {
216 // normalize
217 hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
218 // write
219 hToT[m]->Write() ;
220 }
221 if( ht[m]->GetEntries()>0 ) {
222 // normalize
223 ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
224 // write
225 ht[m]->Write() ;
226 }
227 }
228
229 f->Close() ;
230 delete f ;
231 cout << "Output in '" << ofname << "'." << endl ;
232
233 cout << endl ;
234}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Definition JModule.hh:76
General exception.
Definition JException.hh:24
Local coincidence cluster builder.
Template definition of a multi-dimensional oscillation probability interpolation table.
int getFrameIndex() const
Get frame index.
int verbose
Definition elog.cc:70
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Detector file.
Definition JHead.hh:227