80 typedef JRange<int> JRange_t;
95 JParser<> zap(
"Example program to analyse acoustic data from data base.");
110 catch(
const exception &error) {
111 FATAL(error.what() << endl);
115 const double SOUND_VELOCITY = 1481.0;
121 load(detectorFile, detector);
123 catch(
const JException& error) {
127 const JModuleRouter router(detector);
129 const int MODULE[] = {
130 detector.getModule(JModuleLocation(1, 1)).getID(),
131 detector.getModule(JModuleLocation(1, 17)).getID()
142 tripod[12] = (JUTMPosition(587888, 4017079, detector.getUTMZ()) - detector.getUTMPosition()).
getPosition();
143 tripod[14] = (JUTMPosition(587436, 4016992, detector.getUTMZ()) - detector.getUTMPosition()).
getPosition();
144 tripod[16] = (JUTMPosition(587843, 4016727, detector.getUTMZ()) - detector.getUTMPosition()).
getPosition();
146 DEBUG(
"Tripods" << endl);
150 const JPosition3D pos = i->second - JPosition3D(detector.getModule(JModuleLocation(1, 1)).getX(),
151 detector.getModule(JModuleLocation(1, 1)).getY(),
154 DEBUG(setw(2) << i->first <<
' '
155 <<
FIXED(7,2) << pos.getX() <<
' '
156 <<
FIXED(7,2) << pos.getY() <<
' '
157 <<
FIXED(7,2) << pos.getZ() <<
' '
158 <<
FIXED(7,2) << sqrt(pos.getX()*pos.getX() + pos.getY()*pos.getY())
179 JSelector selector = getSelector<JToAshort>(detid,
180 runs.getLowerLimit(),
181 runs.getUpperLimit());
183 ResultSet& rs =
getResultSet(getTable<JToAshort>(), selector);
185 int number_of_rows = 0;
187 for (JToAshort parameters; rs >> parameters; ++number_of_rows) {
189 STATUS(setw(8) << number_of_rows <<
'\r' << flush);
DEBUG(endl);
195 const double d1 = (router.getModule(parameters.DOMID).getPosition() - tripod[parameters.EMITTERID]).getLength();
196 const double t1 = parameters.UNIXTIMEBASE + parameters.TOA_S - d1 / SOUND_VELOCITY;
197 const double q1 = parameters.QUALITYFACTOR;
199 f1[parameters.EMITTERID][parameters.DOMID].push_back(JElement_t(t1,q1));
203 catch(
const exception& error) {
204 FATAL(error.what() << endl);
210 TH1D* h1 = H1[emitter->first];
214 for (
int i = 0; i !=
sizeof(MODULE)/
sizeof(MODULE[0]); ++i) {
216 buffer_type& buffer = emitter->second[MODULE[i]];
218 JQuantile Q1(
"quality", buffer.begin(), buffer.end(), &JElement_t::q1);
220 const double Qmin = Q1.getQuantile(Q);
222 buffer_type::iterator __end = partition(buffer.begin(), buffer.end(),
make_predicate(&JElement_t::q1, Qmin, JComparison::gt()));
224 buffer.erase(__end, buffer.end());
226 sort(buffer.begin(), buffer.end());
231 buffer_type::const_iterator p0 = emitter->second[MODULE[0]].begin();
232 buffer_type::const_iterator
p1 = emitter->second[MODULE[1]].begin();
234 buffer_type::const_iterator end0 = emitter->second[MODULE[0]].end();
235 buffer_type::const_iterator end1 = emitter->second[MODULE[1]].end();
237 if (p0 != end0 &&
p1 != end1) {
239 for ( ; ; ++p0, ++
p1) {
241 while (p0 != end0 && p0->t1 <
p1->t1 - TMax_s) { ++p0; }
242 while (
p1 != end1 &&
p1->t1 < p0->t1 - TMax_s) { ++
p1; }
244 if (p0 != end0 &&
p1 != end1)
245 h1->Fill(
p1->t1 - p0->t1);