30 using namespace KM3NETDAQ ;
32 using namespace JDETECTOR ;
33 using namespace JTRIGGER ;
34 using namespace JMONITOR ;
36 int main(
int argc,
char **argv) {
37 const unsigned int max_multiplicity = 31 ;
60 catch(
const exception &error) {
61 cerr << error.what() << endl ;
62 cout <<
"Use option -h! to display command line options." << endl ;
71 load(detectorFile, detector);
74 cerr <<
"FATAL ERROR. Could not open detector file '" << detectorFile <<
"'." << endl ;
82 const int ncolors = 5 ;
83 const int nice_colors[ncolors] = { kRed, kBlue, kBlack, kViolet, kCyan } ;
88 for(
unsigned int m=0; m<max_multiplicity+1; ++m ) {
90 sprintf( hname,
"hToT_m%u", m ) ;
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) ;
100 for(
unsigned int m=0; m<max_multiplicity+1; ++m ) {
102 sprintf( hname,
"ht_m%u", m ) ;
104 sprintf( htitle,
"Exclusive %u-fold coincidence clusters;Time after first hits [ns];a.u. (normalized)", m ) ;
105 const int margin = 5 ;
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) ;
117 TH2D hSizeVsMultiplicity(
"hSizeVsMultiplicity",
";cluster size;cluster multiplicity",
120 hSizeVsMultiplicity.SetOption(
"colz") ;
126 cout <<
"---------- Reading file(s) ----------" << endl ;
132 unsigned int nTS = 0 ;
135 if( (
int)nTS == maxnslices ) break ;
139 cout <<
"------ Frame index = " << ts->
getFrameIndex() << endl ;
143 for(JDAQTimeslice::const_iterator sf = ts->begin() ; sf!=ts->end() ; ++sf ) {
145 if( sf->size() == 0 )
continue ;
147 int moduleID = sf->getModuleID() ;
149 JModule module = detector[localID] ;
152 cluster_builder.
reset(*sf,module) ;
156 cout <<
"--- " <<
"S" << module.
getString() <<
"F" << module.
getFloor() << endl ;
157 cout << setw(10) <<
"multiplicity"
158 << setw(20) <<
"excl. nclusters"
159 << setw(20) <<
"incl. nclusters"
161 for(
unsigned int m=2; m<=max_multiplicity; ++m) {
163 cout << setw(10) << m
177 hSizeVsMultiplicity.Fill( it->size(), it->getMultiplicity() ) ;
185 for(
unsigned int m=0; m<=max_multiplicity; ++m) {
188 for( JHitL1::const_iterator hit=it->begin(); hit!=it->end(); ++hit ) {
189 hToT[m]->Fill( hit->getToT() ) ;
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() ) ;
204 if( verbose ) cout << endl ;
208 cout <<
"Read " << nTS <<
" time slices." << endl ;
210 TFile*
f =
new TFile( ofname.c_str(),
"recreate" ) ;
212 hSizeVsMultiplicity.Write() ;
214 for(
unsigned int m=0; m<=max_multiplicity; ++m) {
215 if( hToT[m]->GetEntries()>0 ) {
217 hToT[m]->Scale( 1.0/hToT[m]->Integral() ) ;
221 if( ht[m]->GetEntries()>0 ) {
223 ht[m]->Scale( 1.0/ht[m]->Integral() ) ;
231 cout <<
"Output in '" << ofname <<
"'." << endl ;
Utility class to parse command line options.
ROOT TTree parameter settings of various packages.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
unsigned int getInclusiveNclusters(const unsigned int multiplicity) const
return the number of clusters with at least the given multiplicity
Router for direct addressing of module data in detector data structure.
void reset(const JDAQSuperFrame &frame, const JModule &module)
This is a way to re-use the allocated memory.
do set_array DAQHEADER JPrintDAQHeader f
Data structure for detector geometry and calibration.
vector< JCluster >::const_iterator end_m(unsigned int multiplicity) const
returns end iterator for clusters with exactly the given multiplicity
int getFrameIndex() const
Get frame index.
int first
index of module in detector data structure
virtual bool hasNext() override
Check availability of next element.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
vector< JCluster >::const_iterator end_inclusive_m(unsigned int multiplicity) const
returns end iterator for clusters with at least the given multiplicity
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to module in detector data structure.
int getString() const
Get string number.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Utility class to parse command line options.
unsigned int getNclusters(const unsigned int multiplicity) const
return the number of clusters with exactly the given multiplicity
const JModuleAddress & getAddress(const JObjectID &id) const
Get address of module.
virtual const pointer_type & next() override
Get next element.
vector< JCluster >::const_iterator begin_inclusive_m(unsigned int multiplicity) const
returns begin iterator for clusters with at least the given multiplicity
do set_variable DETECTOR_TXT $WORKDIR detector
KM3NeT DAQ constants, bit handling, etc.
Local coincidence cluster builder.
vector< JCluster >::const_iterator begin_m(unsigned int multiplicity) const
returns begin iterator for clusters with exactly the given multiplicity
int main(int argc, char *argv[])