52 int main(
int argc,
char **argv)
56 using namespace KM3NETDAQ;
73 JParser<> zap(
"Example program to determine N-fold coincidence rates.");
77 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
80 zap[
'C'] =
make_field(selector) = getROOTClassSelection<JDAQTimesliceTypes_t>();
82 zap[
's'] =
make_field(summaryFile) =
"halibut.txt";
88 catch(
const exception &error) {
89 FATAL(error.what() << endl);
121 JManager_t
H1(
new TH1D(
"H1[%]", NULL, 100, -TMax_ns, +TMax_ns));
122 JManager_t T1(
new TH1D(
"T1[%]", NULL, 100, 0.0, TMax_s[
M.getLowerLimit()]));
139 STATUS(
"Processing " << *i << endl);
145 for ( ; ps->hasNext() && counter != inputFile.getLimit(); ++counter) {
147 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
151 for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
153 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*frame, router.
getModule(frame->getModuleID()));
155 for (JSuperFrame2D_t::iterator i = buffer.begin(); i != buffer.end(); ++i) {
159 JSuperFrame1D_t& data = JSuperFrame1D_t::multiplex(buffer);
161 if (data.size() > 1) {
163 TH1D*
h1 = H1[frame->getModuleID()];
164 TH1D* t1 = T1[frame->getModuleID()];
170 while (++q != data.end() && q->getT() - p->getT() <= TMax_ns ) {}
176 const int i = router.
getIndex(frame->getModuleID());
177 const double ts =
getTimeOfRTS(frame->getFrameIndex()) + p->getT();
179 t1->Fill((ts - t0[i]) * 1.0e-9);
187 h1->Fill(JCombinatorics::getSign(__p->getPMT(),__q->getPMT()) * (__q->getT() - __p->getT()), 1.0/W);
202 const double V = (H1->GetXaxis()->GetXmax() - H1->GetXaxis()->GetXmin()) / (
double) H1->GetXaxis()->GetNbins();
205 for (JManager_t::iterator i = H1.begin(); i != H1.end(); ++i) {
206 i->second->Scale(1.0/(V*W));
209 for (JManager_t::iterator i = T1.begin(); i != T1.end(); ++i) {
210 i->second->Scale(1.0/i->second->GetMaximum());
214 if (summaryFile !=
"") {
216 const double V = (H1->GetXaxis()->GetXmax() - H1->GetXaxis()->GetXmin()) / (
double) H1->GetXaxis()->GetNbins();
220 const int PRECISION = (
M.getLowerLimit() > 2 ? 4 : 3);
222 ofstream out(summaryFile.c_str());
224 out <<
"Multiplicity " <<
M << endl;
225 out <<
"-------------------------------------------------------" << endl;
226 out <<
" location | Gauss | S - B | Total | slope " << endl;
227 out <<
" | [Hz] | [Hz] | [Hz] | [Hz] " << endl;
228 out <<
"-------------------------------------------------------" << endl;
232 for (
int string = 1;
string <= number_of_strings; ++string) {
233 for (
int floor = number_of_floors; floor >= 1; --floor) {
237 out <<
" " << setw(3) <<
string <<
' ' << setw(2) << floor <<
" ";
239 TH1D*
h1 = (H1.find(
id) != H1.end() ? H1[id] : NULL);
240 TH1D* t1 = (T1.find(
id) != T1.end() ? T1[id] : NULL);
244 TF1 f1(
"f1",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))/(TMath::Sqrt(2*TMath::Pi())*[2]) + [3]");
246 f1.SetParameter(0, h1->GetMaximum());
247 f1.SetParameter(1, 0.0);
248 f1.SetParameter(2, h1->GetRMS() * 0.25);
249 f1.SetParameter(3, h1->GetMinimum());
251 h1->Fit(&f1, option.c_str(),
"same");
253 out <<
" | " <<
FIXED(8,PRECISION) << f1.GetParameter(0);
254 out <<
" | " <<
FIXED(8,PRECISION) << (h1->GetSumOfWeights() - f1.GetParameter(3) * h1->GetNbinsX()) * V;
255 out <<
" | " <<
FIXED(8,PRECISION) << h1->GetSumOfWeights() * V;
257 Q[0].
put( f1.GetParameter(0));
258 Q[1].
put((h1->GetSumOfWeights() - f1.GetParameter(3) * h1->GetNbinsX()) * V);
259 Q[2].
put( h1->GetSumOfWeights() * V);
264 TF1 f1(
"f1",
"[0]*exp(-[1]*x)");
266 f1.SetParameter(0, t1->GetMaximum());
267 f1.SetParameter(1, 1.0 / t1->GetRMS());
269 t1->Fit(&f1, option.c_str(),
"same");
271 out <<
" | " <<
FIXED(8,PRECISION) << f1.GetParameter(1);
273 Q[3].
put(f1.GetParameter(1));
284 out <<
"-------------------------------------------------------" << endl;
285 out << setw(10) << left <<
" average";
287 for (
int i = 0; i !=
sizeof(
Q)/
sizeof(Q[0]); ++i) {
Utility class to parse command line options.
Q(UTCMax_s-UTCMin_s)-livetime_s
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
Basic data structure for L0 hit.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
const int getIndex(const JObjectID &id) const
Get index of module.
Auxiliary class to select ROOT class based on class name.
Router for direct addressing of module data in detector data structure.
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
then for HISTOGRAM in h0 h1
Long64_t counter_type
Type definition for counter.
Dynamic ROOT object management.
Auxiliary class for a type holder.
Auxiliary data structure for floating point format specification.
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
Template definition for direct access of elements in ROOT TChain.
Data structure for detector geometry and calibration.
long long int factorial(const long long int n)
Determine factorial.
Auxiliary interface for direct access of elements in ROOT TChain.
1-dimensional frame with time calibrated data from one optical module.
Auxiliary class for defining the range of iterations of objects.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
I/O formatting auxiliaries.
Logical location of module.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getFrameTime()
Get frame time duration.
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
Match operator for consecutive hits.
General purpose messaging.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
Auxiliary class to select JTreeScanner based on ROOT class name.
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.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Auxiliary class to define a range between two values.
Utility class to parse command line options.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
int getCount(const T &hit)
Get hit count.
2-dimensional frame with time calibrated data from one optical module.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector