59 int main(
int argc,
char **argv)
75 transmitters_container transmitters;
76 hydrophones_container hydrophones;
79 disable_container disable;
86 JParser<> zap(
"Application to fit position calibration model to acoustic data.");
88 zap[
'f'] =
make_field(inputFile,
"output of JAcousticEventBuilder[.sh]");
90 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
98 zap[
'u'] =
make_field(unify,
"unify weighing of pings");
101 "Precede name of data structure by a '+' or '-' "
102 "to add or remove data types in the output, respectively."
104 zap[
'D'] =
make_field(Tmax_s,
"deadtime [s]") = 100.0e-3;
109 catch(
const exception &error) {
110 FATAL(error.what() << endl);
128 for (JDetector::const_iterator i =
detector.begin(); i !=
detector.end(); ++i) {
129 receivers[i->getID()] = i->getLocation();
132 for (tripods_container::const_iterator i =
tripods.begin(); i !=
tripods.end(); ++i) {
133 emitters[i->getID()] =
JEmitter(i->getID(),
134 i->getUTMPosition() -
detector.getUTMPosition());
137 for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
139 emitters[i->getID()] =
JEmitter(i->getID(),
142 catch(
const exception&) {
159 TH1D h0(
"chi2/NDF", NULL, 50000, 0.0, 1000.0);
160 TH1D h1(
"h1", NULL, 51, -0.5, 50.5);
161 TH1D hn(
"hn", NULL, 100, 0.0, 6.0);
165 range.getLength() + 1,
range.getLowerLimit() - 0.5,
range.getUpperLimit() + 0.5));
169 range.getLength() + 1,
range.getLowerLimit() - 0.5,
range.getUpperLimit() + 0.5));
171 for (Int_t i = 1; i <= HA->GetXaxis()->GetNbins(); ++i) {
172 HA->GetXaxis()->SetBinLabel(i,
MAKE_CSTRING(geometry.at(i-1).first));
173 HB->GetXaxis()->SetBinLabel(i,
MAKE_CSTRING(geometry.at(i-1).first));
181 for (
const string& file_name : inputFile) {
191 else if (oid != evt->
getOID())
192 FATAL(
"Invalid detector identifier " << evt->
getOID() <<
" != " << oid << endl);
195 zmap[evt->begin()->getToE()] = file_name;
204 inputFile.push_back(i->second);
218 catch(
const exception&) {}
220 int counter[] = { 0, 0 };
222 typedef deque<JEvent> buffer_type;
224 for (buffer_type zbuf; inputFile.hasNext(); ) {
226 STATUS(inputFile.getFilename() <<
'\r');
DEBUG(endl);
230 for (
const string file_name = inputFile.getFilename(); inputFile.hasNext() && file_name == inputFile.getFilename(); ) {
232 const JEvent* evt = inputFile.next();
234 if (!evt->empty() && emitters.has(evt->
getID())) {
235 zbuf.push_back(*evt);
239 sort(zbuf.begin(), zbuf.end());
241 for (buffer_type::iterator p = zbuf.begin(), q; p != zbuf.end(); p = q) {
243 for (q = p; ++q != zbuf.end() && q->begin()->getToE() <= p->rbegin()->getToE() +
parameters.Tmax_s; ) {}
245 if (q == zbuf.end()) {
247 if (inputFile.hasNext()) {
249 zbuf.erase(zbuf.begin(), p);
263 for (buffer_type::const_iterator i = p; i != q; ++i) {
264 numberOfPings[i->getID()] += 1;
268 DEBUG(
"Number of pings " << setw(2) << i->first <<
' ' << setw(3) << i->second << endl);
271 int minimum_number_of_pings = numeric_limits<int>::max();
274 minimum_number_of_pings = min(minimum_number_of_pings, i->second);
280 for (buffer_type::iterator evt = p; evt != q; ++evt) {
282 sort(evt->begin(), evt->end(),
compare);
286 const JEmitter& emitter = emitters[evt->getID()];
287 const double weight = (unify ? (double) minimum_number_of_pings / (
double) numberOfPings[evt->getID()] : 1.0);
289 for (JEvent::const_iterator i = evt->begin(); i != __end; ++i) {
294 if (receivers.has(i->getID()) && geometry.
hasLocation(receivers[i->getID()]) && i->getQ() >=
parameters.Qmin * (unit(
parameters.Qmin) ? i->getW() : 1.0)) {
296 data.push_back(
JHit(emitter,
298 receivers[i->getID()],
303 buffer.insert(evt->getID());
311 for (data_type::const_iterator hit = data.begin(); hit != data.end(); ++hit) {
312 HA[hit->getID()]->Fill(geometry.
getIndex(hit->getString()), hit->getFloor(), 1.0);
317 const auto result = katoomba(data.begin(), data.end());
319 for (data_type::const_iterator hit =
result.begin; hit !=
result.end; ++hit) {
320 HB[hit->getID()]->Fill(geometry.
getIndex(hit->getString()), hit->getFloor(), 1.0);
325 cout <<
"result:" <<
' '
329 for (data_type::const_iterator hit =
result.begin; hit !=
result.end; ++hit) {
353 if (selection.is_valid<
JEvent>()) {
355 for (buffer_type::iterator i = p; i != q; ++i) {
361 for (JEvent::iterator hit = out.begin(); hit != out.end(); ++hit) {
384 STATUS(
"Number of events written / rejected: " << counter[0] <<
" / " << counter[1] << endl);
Worker class for complete fit procedure of acoustic model.
Utility class to parse command line options.
void overlap(T p, T q, const double Tmax_s)
Empty overlapping events.
int main(int argc, char *argv[])
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
static JDetectorMechanics getMechanics
Function object to get string mechanics.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
General purpose class for hash map of unique elements.
ROOT TTree parameter settings.
JKatoomba< JAbstractMinimiser > evaluator
Recording of objects on file according a format that follows from the file name extension.
Auxiliary class for ROOT class selection.
JEvt getEvt(const JHead &header, const JModel &model)
Get event.
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
#define MAKE_CSTRING(A)
Make C-string.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Dynamic ROOT object management.
Auxiliary data structure for floating point format specification.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors.
Data structure for detector geometry and calibration.
Data structure for hydrophone.
size_t getNumberOfEmitters(T __begin, T __end)
Get number of emitters.
Auxiliary class for defining the range of iterations of objects.
static const JSoundVelocity getSoundVelocity(1541.0,-17.0e-3,-2000.0)
Function object for velocity of sound.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Data structure for transmitter.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
set_variable E_E log10(E_{fit}/E_{#mu})"
const std::string & getOID() const
Get detector identifier.
JPosition3D getPosition(const Vec &pos)
Get position.
static struct JACOUSTICS::@4 compare
Auxiliary data structure to sort transmissions.
JTreeWriter object output.
General purpose messaging.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
Implementation for depth dependend velocity of sound.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
JTreeWriter< T > & getTreeWriter()
Get TreeWriter.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Auxiliary class to define a range between two values.
General purpose class for object reading from a list of file names.
Utility class to parse command line options.
Acoustic transmission identifier.
Fit function of acoustic model.
bool hasLocation(const JLocation &location) const
Check if this detector has given location.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
int getID() const
Get identifier.
Data structure for tripod.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Acoustic transmission identifier.
Template definition of fit function of acoustic model.
#define DEBUG(A)
Message macros.
JKatoomba< JGandalf > gandalf
Data structure for optical module.