Jpp  18.3.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Private Attributes | List of all members
JACOUSTICS::JSydney Struct Reference

Main class for pre-calibration using acoustics data. More...

Classes

struct  detector_type
 Auxiliary data structure for detector with decomposed strings. More...
 
struct  fits_t
 Auxiliary data structure for group of lists of identifiers of to-be-fitted objects. More...
 
struct  ids_t
 List of object identifiers. More...
 
struct  JAnchorEditor
 Auxiliary class to edit orientation of anchor. More...
 
struct  JDyneemaEditor
 Auxiliary class to edit length of Dyneema ropes. More...
 
struct  JModuleEditor
 Auxiliary class to edit (z) position of module. More...
 
struct  JParameters_t
 Extended data structure for parameters of stage. More...
 
struct  JStringEditor
 Auxiliary class to edit (x,y,z) position of string. More...
 
struct  JTripodEditor
 Auxiliary class to edit (x,y,z) position of tripod. More...
 
struct  string_type
 Auxiliary data structure for decomposed string. More...
 

Public Types

typedef std::vector< JEventinput_type
 

Public Member Functions

 JSydney (const JFilenames &filenames, const JSoundVelocity &V, const size_t threads, const int debug)
 Constructor. More...
 
void stage_0 (const JParameters_t &parameters)
 Fit procedure to determine the positions of tripods and transmitters using strings that are fixed. More...
 
void stage_a (const JParameters_t &parameters)
 Fit procedure to determine the positions of the strings and tripods. More...
 
void stage_b (const JParameters_t &parameters)
 Fit procedure to determine the stretching and z-positions of individual strings. More...
 
void stage_c (const JParameters_t &parameters)
 Fit procedure to determine the z-positions of the modules. More...
 
void stage_e (const JParameters_t &parameters)
 Fit procedure to determine the (x,y,z) positions of the modules. More...
 
double operator() (const int option) const
 Get chi2. More...
 
void run (const std::string &script)
 Run. More...
 
void store (const std::string &dir=".")
 Store data in given directory. More...
 
ids_t getReceivers () const
 Get list of identifiers of receivers. More...
 
ids_t getEmitters () const
 Get list of identifiers of emitters. More...
 

Public Attributes

JFilenames filenames
 
JSoundVelocity V
 
size_t threads
 
int debug
 
JSetup setup
 
fits_t fits
 
JTOOLS::JHashMap< int, JLocationreceivers
 
std::unique_ptr< JLocationRouterrouter
 
std::vector< input_typeinput
 

Static Public Attributes

static constexpr double RADIUS_M = 1.0
 maximal horizontal distance between T-bar and emitter/hydrophone More...
 

Private Attributes

std::vector< JSuperEvtoutput
 
JDetector detector
 PMTs. More...
 
JFitParameters parameters
 

Detailed Description

Main class for pre-calibration using acoustics data.

Definition at line 133 of file JSydney.cc.

Member Typedef Documentation

Definition at line 1208 of file JSydney.cc.

Constructor & Destructor Documentation

JACOUSTICS::JSydney::JSydney ( const JFilenames filenames,
const JSoundVelocity V,
const size_t  threads,
const int  debug 
)
inline

Constructor.

Parameters
filenamesfile names
Vsound velocity
threadsthreads
debugdebug

Definition at line 582 of file JSydney.cc.

585  :
586  filenames(filenames),
587  V(V),
588  threads(threads),
589  debug(debug)
590  {
591  load(filenames.detector, setup.detector);
592 
593  setup.tripods.load(filenames.tripod.c_str());
594 
595  if (filenames.hydrophone != "") { setup.hydrophones .load(filenames.hydrophone .c_str()); }
596  if (filenames.transmitter != "") { setup.transmitters.load(filenames.transmitter.c_str()); }
597 
598  for (JDetector::const_iterator i = setup.detector.begin(); i != setup.detector.end(); ++i) {
599  receivers[i->getID()] = i->getLocation();
600  }
601 
602  // detach PMTs
603 
605 
606  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
607  module->clear();
608  }
609 
610  router.reset(new JLocationRouter(setup.detector));
611 
613 
614  this->V.set(setup.detector.getUTMZ()); // sound velocity at detector depth
615 
618 
620 
621  ROOT::EnableThreadSafety();
622  }
void initialise(const JSetup &setup)
Initialise.
Definition: JSydney.cc:245
JDetector detector
detector
Definition: JSydney.cc:108
std::string detector
detector
Definition: JSydney.cc:97
tripods_container tripods
tripods
Definition: JSydney.cc:109
transmitters_container transmitters
transmitters
Definition: JSydney.cc:126
double getUTMZ() const
Get UTM Z.
hydrophones
hydrophones
std::string hydrophone
hydrophone
Definition: JSydney.cc:99
Detector file.
Definition: JHead.hh:226
Router for direct addressing of location data in detector data structure.
JFilenames filenames
Definition: JSydney.cc:1198
JSoundVelocity V
Definition: JSydney.cc:1199
void load(const char *file_name)
Load from input file.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JTOOLS::JHashMap< int, JLocation > receivers
Definition: JSydney.cc:1205
std::string tripod
tripod
Definition: JSydney.cc:98
std::string transmitter
transmitter
Definition: JSydney.cc:100
JSoundVelocity & set(const double z0)
Set depth.
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
Template definition of fit function of acoustic model.
Definition: JKatoomba_t.hh:146

Member Function Documentation

void JACOUSTICS::JSydney::stage_0 ( const JParameters_t parameters)
inline

Fit procedure to determine the positions of tripods and transmitters using strings that are fixed.

Parameters
parametersparameters

Definition at line 671 of file JSydney.cc.

672  {
673  using namespace std;
674  using namespace JPP;
675 
676  this->parameters = parameters;
677 
678  JDetector A; // old strings
679  detector_type B; // new strings with transmitter -> fit only base module
680  JDetector C; // new strings w/o transmitter -> discard completely from fit
681 
682  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
683 
684  if (fits.strings .count(module->getString()) == 0)
685  A.push_back(*module);
686  else if (fits.transmitters.count(module->getString()) != 0)
687  B.push_back(*module);
688  else
689  C.push_back(*module);
690  }
691 
692  setup.detector.swap(A);
693 
694  for (const auto& element : B) {
695  setup.detector.push_back(element.second.base);
696  }
697 
698  router.reset(new JLocationRouter(setup.detector));
699 
700  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
701 
702  for (const int i : fits.tripods) {
703  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.x: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3X_t), parameters.steps[0]));
704  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.y: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Y_t), parameters.steps[0]));
705  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.z: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Z_t), parameters.steps[0]));
706  }
707 
708  for (const int i : fits.transmitters) {
709  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.x: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3X_t, true), parameters.steps[0]));
710  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.y: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Y_t, true), parameters.steps[0]));
711  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.z: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Z_t, true), parameters.steps[0]));
712  }
713 
714  const double chi2 = fit(*this);
715 
716  for (auto& element : B) {
717 
718  const JModule& base = setup.detector.getModule(router->getAddress(JLocation(element.second.base.getString(),0)));
719  const JVector3D pos = base.getPosition() - element.second.base.getPosition();
720 
721  for (string_type::iterator module = element.second.begin(); module != element.second.end(); ++module) {
722 
723  module->add(pos);
724 
725  setup.detector.push_back(*module);
726  }
727  }
728 
729  copy(C.begin(), C.end(), back_inserter(setup.detector));
730 
732 
733  router.reset(new JLocationRouter(setup.detector));
734 
735  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
736  }
JDetector detector
detector
Definition: JSydney.cc:108
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Data structure for a composite optical module.
Definition: JModule.hh:67
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:89
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
Auxiliary class to edit time offset of data per string.
Definition: JPerth.cc:85
static const JVector3D JVector3X_t(1, 0, 0)
unit x-vector
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
static const double C
Physics constants.
Data structure for vector in three dimensions.
Definition: JVector3D.hh:34
Router for direct addressing of location data in detector data structure.
Logical location of module.
Definition: JLocation.hh:37
const JLocation & getLocation() const
Get location.
Definition: JLocation.hh:69
ids_t transmitters
identifiers of strings with transmitter
Definition: JSydney.cc:258
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:130
const JModule & getModule(const JModuleAddress &address) const
Get module parameters.
Definition: JDetector.hh:270
Auxiliary data structure for editable parameter.
Definition: JGradient.hh:47
JFitParameters parameters
Definition: JSydney.cc:1215
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
ids_t tripods
identifiers of tripods
Definition: JSydney.cc:256
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:162
static const JVector3D JVector3Y_t(0, 1, 0)
unit y-vector
Conjugate gradient fit.
Definition: JGradient.hh:73
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
JVector3D & add(const JVector3D &vector)
Add vector.
Definition: JVector3D.hh:142
void JACOUSTICS::JSydney::stage_a ( const JParameters_t parameters)
inline

Fit procedure to determine the positions of the strings and tripods.

Parameters
parametersparameters

Definition at line 744 of file JSydney.cc.

745  {
746  using namespace std;
747  using namespace JPP;
748 
749  this->parameters = parameters;
750 
751  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
752 
753  for (const int i : fits.strings) {
754  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.x: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3X_t, true), parameters.steps[0]));
755  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.y: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Y_t, true), parameters.steps[0]));
756  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.z: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Z_t, false), parameters.steps[0]));
757  }
758 
759  for (const int i : fits.tripods) {
760  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.x: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3X_t), parameters.steps[1]));
761  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.y: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Y_t), parameters.steps[1]));
762  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.z: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Z_t), parameters.steps[1]));
763  }
764 
765  for (const int i : ids_t(fits.hydrophones, fits.transmitters)) {
766  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.R: " << RIGHT(4) << i), new JAnchorEditor(setup, i), parameters.steps[0] / RADIUS_M));
767  }
768 
769  for (const int i : fits.transmitters) {
770 
771  JModule& module = setup.detector.getModule(router->getAddress(JLocation(i,0)));
772 
773  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.R: " << RIGHT(4) << i), new JAnchorEditor(setup, i), parameters.steps[0] / RADIUS_M));
774  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.z: " << RIGHT(4) << i), new JModuleEditor(module), parameters.steps[0]));
775  }
776 
777  const double chi2 = fit(*this);
778 
779  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
780  }
JDetector detector
detector
Definition: JSydney.cc:108
Data structure for a composite optical module.
Definition: JModule.hh:67
#define STATUS(A)
Definition: JMessage.hh:63
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
Auxiliary class to edit time offset of data per string.
Definition: JPerth.cc:85
static const JVector3D JVector3X_t(1, 0, 0)
unit x-vector
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
Logical location of module.
Definition: JLocation.hh:37
ids_t transmitters
identifiers of strings with transmitter
Definition: JSydney.cc:258
const JModule & getModule(const JModuleAddress &address) const
Get module parameters.
Definition: JDetector.hh:270
Auxiliary data structure for editable parameter.
Definition: JGradient.hh:47
JFitParameters parameters
Definition: JSydney.cc:1215
ids_t hydrophones
identifiers of strings with hydrophone
Definition: JSydney.cc:257
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
ids_t tripods
identifiers of tripods
Definition: JSydney.cc:256
static const JVector3D JVector3Y_t(0, 1, 0)
unit y-vector
Conjugate gradient fit.
Definition: JGradient.hh:73
static constexpr double RADIUS_M
maximal horizontal distance between T-bar and emitter/hydrophone
Definition: JSydney.cc:135
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
void JACOUSTICS::JSydney::stage_b ( const JParameters_t parameters)
inline

Fit procedure to determine the stretching and z-positions of individual strings.

Parameters
parametersparameters

Definition at line 788 of file JSydney.cc.

789  {
790  using namespace std;
791  using namespace JPP;
792 
793  this->parameters = parameters;
794 
795  map<int, JDetector> buffer;
796 
797  double z0 = 0.0;
798 
799  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
800 
801  buffer[module->getString()].push_back(*module);
802 
803  if (module->getZ() > z0) {
804  z0 = module->getZ();
805  }
806  }
807 
808  JDetector tx;
809 
810  for (transmitters_container::iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
811  try {
812  tx.push_back(router->getModule(i->getLocation()));
813  }
814  catch(const exception&) {}
815  }
816 
817  for (const int i : fits.strings) {
818 
819  setup.detector.swap(buffer[i]);
820 
821  copy(tx.begin(), tx.end(), back_inserter(setup.detector));
822 
823  router.reset(new JLocationRouter(setup.detector));
824 
825  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
826 
827  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.M: " << RIGHT(4) << i), new JDyneemaEditor(setup, i, z0), parameters.steps[0]));
828  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.z: " << RIGHT(4) << i), new JStringEditor (setup, i, JVector3Z_t, false), parameters.steps[1]));
829 
830  const double chi2 = fit(*this);
831 
832  STATUS("string: " << setw(4) << i << ' ' << FIXED(9,4) << chi2 << endl);
833 
834  buffer[i].clear();
835 
836  copy_if(setup.detector.begin(), setup.detector.end(), back_inserter(buffer[i]), make_predicate(&JModule::getString, i));
837  }
838 
839  setup.detector.clear();
840 
841  for (const auto& element : buffer) {
842  copy(element.second.begin(), element.second.end(), back_inserter(setup.detector));
843  }
844 
845  router.reset(new JLocationRouter(setup.detector));
846  }
JDetector detector
detector
Definition: JSydney.cc:108
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
Definition: JPredicate.hh:128
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:89
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
transmitters_container transmitters
transmitters
Definition: JSydney.cc:126
Auxiliary class to edit time offset of data per string.
Definition: JPerth.cc:85
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
Router for direct addressing of location data in detector data structure.
Auxiliary data structure for editable parameter.
Definition: JGradient.hh:47
int getString() const
Get string number.
Definition: JLocation.hh:134
JFitParameters parameters
Definition: JSydney.cc:1215
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:162
Conjugate gradient fit.
Definition: JGradient.hh:73
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
void JACOUSTICS::JSydney::stage_c ( const JParameters_t parameters)
inline

Fit procedure to determine the z-positions of the modules.

Parameters
parametersparameters

Definition at line 854 of file JSydney.cc.

855  {
856  using namespace std;
857  using namespace JPP;
858 
859  this->parameters = parameters;
860 
861  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
862 
863  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
864  if (fits.strings.count(module->getString()) != 0 && module->getFloor() != 0) {
865  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "module.z: " << right << module->getLocation()), new JModuleEditor(*module), parameters.steps[0]));
866  }
867  }
868 
869  const double chi2 = fit(*this);
870 
871  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
872  }
JDetector detector
detector
Definition: JSydney.cc:108
#define STATUS(A)
Definition: JMessage.hh:63
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
Auxiliary data structure for editable parameter.
Definition: JGradient.hh:47
JFitParameters parameters
Definition: JSydney.cc:1215
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
Conjugate gradient fit.
Definition: JGradient.hh:73
void JACOUSTICS::JSydney::stage_e ( const JParameters_t parameters)
inline

Fit procedure to determine the (x,y,z) positions of the modules.

Parameters
parametersparameters

Definition at line 880 of file JSydney.cc.

881  {
882  using namespace std;
883  using namespace JPP;
884 
885  this->parameters = parameters;
886 
887  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
888 
889  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
890  if (fits.strings.count(module->getString()) != 0 && module->getFloor() != 0) {
891  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "module.x: " << right << module->getLocation()), new JModuleEditor(*module, JVector3X_t), parameters.steps[0]));
892  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "module.y: " << right << module->getLocation()), new JModuleEditor(*module, JVector3Y_t), parameters.steps[0]));
893  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "module.z: " << right << module->getLocation()), new JModuleEditor(*module, JVector3Z_t), parameters.steps[0]));
894  }
895  }
896 
897  const double chi2 = fit(*this);
898 
899  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
900  }
JDetector detector
detector
Definition: JSydney.cc:108
#define STATUS(A)
Definition: JMessage.hh:63
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
static const JVector3D JVector3X_t(1, 0, 0)
unit x-vector
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
Auxiliary data structure for editable parameter.
Definition: JGradient.hh:47
JFitParameters parameters
Definition: JSydney.cc:1215
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Definition: JMatrixNZ.sh:106
static const JVector3D JVector3Y_t(0, 1, 0)
unit y-vector
Conjugate gradient fit.
Definition: JGradient.hh:73
double JACOUSTICS::JSydney::operator() ( const int  option) const
inline

Get chi2.

Parameters
optionoption
Returns
chi2/NDF

Definition at line 909 of file JSydney.cc.

910  {
911  using namespace std;
912  using namespace JPP;
913 
914  const JGeometry geometry(setup.detector, setup.hydrophones);
915 
916  JHashMap<int, JEmitter> emitters;
917 
918  for (tripods_container::const_iterator i = setup.tripods.begin(); i != setup.tripods.end(); ++i) {
919  {
920  emitters[i->getID()] = JEmitter(i->getID(), i->getUTMPosition() - setup.detector.getUTMPosition());
921  }
922  }
923 
924  for (transmitters_container::const_iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
925  try {
926  emitters[i->getID()] = JEmitter(i->getID(), i->getPosition() + router->getModule(i->getLocation()).getPosition());
927  }
928  catch(const exception&) {} // if no module available, discard transmitter
929  }
930 
931  if (option == 0 || // step wise improvement of the chi2
932  option == 1) { // evaluation of the chi2 before the determination of the gradient of the chi2
933 
934  this->output.clear();
935 
936  JSTDObjectWriter<JSuperEvt> out(this->output); // write data for subsequent use
937 
938  JFremantle::output = (option == 1 ? &out : NULL);
939 
940  {
941  JFremantle fremantle(geometry, V, parameters, threads, 2 * threads);
942 
943  for (const input_type& superevt : input) {
944 
945  const JWeight getWeight(superevt.begin(), superevt.end());
946 
947  set<int> counter;
949 
950  for (input_type::const_iterator evt = superevt.begin(); evt != superevt.end(); ++evt) {
951 
952  if (emitters.has(evt->getID())) {
953 
954  const JEmitter& emitter = emitters [evt->getID()];
955  const double weight = getWeight(evt->getID());
956 
957  for (JEvent::const_iterator i = evt->begin(); i != evt->end(); ++i) {
958 
959  if (geometry.hasLocation(receivers[i->getID()])) {
960 
961  data.push_back(JHit(emitter,
962  distance(superevt.begin(), evt),
963  receivers[i->getID()],
964  i->getToA(),
966  weight));
967 
968  counter.insert(evt->getID());
969  }
970  }
971  }
972  }
973 
974  if (counter.size() >= parameters.Nmin) {
975  fremantle.enqueue(data);
976  }
977  }
978  }
979 
980  return JFremantle::Q.getMean(numeric_limits<float>::max());
981 
982  } else if (option == 2) { // evaluation of the derivative of the chi2 to each fit parameter
983 
984  {
986 
987  JPlatypus platypus(geometry, emitters, V, parameters, in, threads);
988  }
989 
990  return JPlatypus::Q.getMean(numeric_limits<float>::max());
991 
992  } else {
993 
994  return numeric_limits<float>::max();
995  }
996  }
JDetector detector
detector
Definition: JSydney.cc:108
double getWeight(T __begin, T __end)
Get total weight of data points.
Definition: JKatoomba_t.hh:61
const JUTMPosition & getUTMPosition() const
Get UTM position.
Definition: JUTMPosition.hh:84
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
JVector3D getPosition(T __begin, T __end, const JPredicate< JTypename_t, JComparator_t > &predicate)
Get position from element in data which corresponds to given predicate.
General purpose class for hash map of unique keys.
Definition: JHashMap.hh:72
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
tripods_container tripods
tripods
Definition: JSydney.cc:109
transmitters_container transmitters
transmitters
Definition: JSydney.cc:126
Acoustics hit.
size_t Nmin
minimum number of emitters
hydrophones
hydrophones
Implementation of object output from STD container.
Acoustic emitter.
Definition: JEmitter.hh:27
JSoundVelocity V
Definition: JSydney.cc:1199
std::vector< input_type > input
Definition: JSydney.cc:1209
static JQuantile Q
chi2/NDF
Definition: JPlatypus_t.hh:134
std::vector< JSuperEvt > output
Definition: JSydney.cc:1212
static JQuantile Q
chi2/NDF
Thread pool for global fits using super events.
Definition: JPlatypus_t.hh:32
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
Definition: JCanberra.sh:48
static output_type * output
optional output
JFitParameters parameters
Definition: JSydney.cc:1215
JTOOLS::JHashMap< int, JLocation > receivers
Definition: JSydney.cc:1205
Thread pool for global fits.
Definition: JFremantle_t.hh:31
double sigma_s
time-of-arrival resolution [s]
long double getMean() const
Get mean value.
Definition: JKatoomba_t.hh:113
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
void JACOUSTICS::JSydney::run ( const std::string script)
inline

Run.

Parameters
scriptsteering script

Definition at line 1004 of file JSydney.cc.

1005  {
1006  using namespace std;
1007  using namespace JPP;
1008 
1009  ifstream in(script.c_str());
1010 
1011  while (in) {
1012 
1013  string buffer, key;
1014 
1015  if (getline(in, buffer)) {
1016 
1017  if (buffer.empty() || buffer[0] == skip_t) {
1018  continue;
1019  }
1020 
1021  istringstream is(buffer);
1022 
1023  is >> key;
1024 
1025  if (key == initialise_t) { // set object identifiers
1026 
1028 
1029  } else if (key == fix_t) { // fix object identifiers
1030 
1031  string type; // type of object
1032  ids_t id; // identifiers
1033 
1034  if (is >> type >> id) {
1035  if (type == string_t) {
1036  fits.strings .fix(id);
1037  fits.hydrophones .fix(id);
1038  fits.transmitters.fix(id);
1039  } else if (type == tripod_t) {
1040  fits.tripods .fix(id);
1041  } else {
1042  THROW(JValueOutOfRange, "Invalid type <" << type << ">");
1043  }
1044  }
1045 
1046  } else if (key == stage_t) { // stage
1047 
1048  string stage;
1049  JParameters_t input;
1050 
1051  if (is >> stage >> input) {
1052 
1053  STATUS("stage " << setw(3) << stage << " {" << input << "}" << endl);
1054 
1055  JTimer timer;
1056 
1057  timer.start();
1058 
1059  ofstream out(MAKE_CSTRING("stage-" << stage << ".log"));
1060 
1061  {
1062  JRedirectStream redirect(cout, out);
1063 
1064  switch (stage[stage.size() - 1]) {
1065 
1066  case '0':
1067  stage_0(input);
1068  break;
1069 
1070  case 'a':
1071  case 'A':
1072  stage_a(input);
1073  break;
1074 
1075  case 'b':
1076  case 'B':
1077  stage_b(input);
1078  break;
1079 
1080  case 'c':
1081  case 'C':
1082  stage_c(input);
1083  break;
1084 
1085  case 'e':
1086  case 'E':
1087  stage_e(input);
1088  break;
1089 
1090  default:
1091  THROW(JValueOutOfRange, "Invalid stage <" << stage << ">");
1092  break;
1093  }
1094  }
1095 
1096  out.close();
1097 
1098  store(stage);
1099  store();
1100 
1101  timer.stop();
1102 
1103  STATUS("Elapsed time " << FIXED(12,3) << timer.usec_wall * 1.0e-6 << " s." << endl);
1104  }
1105 
1106  } else {
1107  THROW(JValueOutOfRange, "Invalid key <" << key << ">");
1108  }
1109  }
1110  }
1111 
1112  in.close();
1113  }
void initialise(const JSetup &setup)
Initialise.
Definition: JSydney.cc:245
void stage_b(const JParameters_t &parameters)
Fit procedure to determine the stretching and z-positions of individual strings.
Definition: JSydney.cc:788
void stage_a(const JParameters_t &parameters)
Fit procedure to determine the positions of the strings and tripods.
Definition: JSydney.cc:744
$WORKDIR stage
static const std::string fix_t
fix objects
Definition: JSydney.cc:87
#define STATUS(A)
Definition: JMessage.hh:63
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:136
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
is
Definition: JDAQCHSM.chsm:167
void stop()
Stop timer.
Definition: JTimer.hh:113
static const std::string stage_t
fit stage
Definition: JSydney.cc:90
ids_t strings
identifiers of strings
Definition: JSydney.cc:255
static const std::string tripod_t
tripod
Definition: JSydney.cc:89
void store(const std::string &dir=".")
Store data in given directory.
Definition: JSydney.cc:1121
This class can be used to temporarily redirect one output (input) stream to another output (input) st...
void fix(const ids_t &B)
Fix.
Definition: JSydney.cc:180
std::vector< input_type > input
Definition: JSydney.cc:1209
ids_t transmitters
identifiers of strings with transmitter
Definition: JSydney.cc:258
Auxiliary class for CPU timing and usage.
Definition: JTimer.hh:32
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478
void stage_e(const JParameters_t &parameters)
Fit procedure to determine the (x,y,z) positions of the modules.
Definition: JSydney.cc:880
void stage_c(const JParameters_t &parameters)
Fit procedure to determine the z-positions of the modules.
Definition: JSydney.cc:854
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
Definition: JCanberra.sh:48
ids_t hydrophones
identifiers of strings with hydrophone
Definition: JSydney.cc:257
ids_t tripods
identifiers of tripods
Definition: JSydney.cc:256
static const char skip_t
Script commands.
Definition: JSydney.cc:85
static const std::string initialise_t
initialise
Definition: JSydney.cc:86
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:178
script
Definition: JAcoustics.sh:2
void stage_0(const JParameters_t &parameters)
Fit procedure to determine the positions of tripods and transmitters using strings that are fixed...
Definition: JSydney.cc:671
unsigned long long usec_wall
Definition: JTimer.hh:224
void start()
Start timer.
Definition: JTimer.hh:89
static const std::string string_t
string
Definition: JSydney.cc:88
void JACOUSTICS::JSydney::store ( const std::string dir = ".")
inline

Store data in given directory.

Parameters
dirdirectory

Definition at line 1121 of file JSydney.cc.

1122  {
1123  using namespace JPP;
1124 
1125  if (getFileStatus(dir.c_str()) || (mkdir(dir.c_str(), S_IRWXU | S_IRWXG) != -1)) {
1126 
1127  // attach PMTs
1128 
1129  for (JDetector::iterator module = detector.begin(); module != detector.end(); ++module) {
1130  module->set(router->getModule(module->getLocation()).getPosition());
1131  }
1132 
1134 
1135  setup.tripods.store(getFilename(dir, filenames.tripod).c_str());
1136 
1137  if (filenames.hydrophone != "") { setup.hydrophones .store(getFilename(dir, filenames.hydrophone) .c_str()); }
1139 
1140  } else {
1141 
1142  THROW(JValueOutOfRange, "Invalid directory <" << dir << ">");
1143  }
1144  }
std::string detector
detector
Definition: JSydney.cc:97
JVector3D getPosition(T __begin, T __end, const JPredicate< JTypename_t, JComparator_t > &predicate)
Get position from element in data which corresponds to given predicate.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
tripods_container tripods
tripods
Definition: JSydney.cc:109
transmitters_container transmitters
transmitters
Definition: JSydney.cc:126
hydrophones
hydrophones
std::string hydrophone
hydrophone
Definition: JSydney.cc:99
Detector file.
Definition: JHead.hh:226
JFilenames filenames
Definition: JSydney.cc:1198
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
static JStat getFileStatus
Function object for file status.
Definition: JStat.hh:173
void store(const char *file_name) const
Store to output file.
std::string tripod
tripod
Definition: JSydney.cc:98
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
Definition: JeepToolkit.hh:128
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:178
std::string transmitter
transmitter
Definition: JSydney.cc:100
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206
ids_t JACOUSTICS::JSydney::getReceivers ( ) const
inline

Get list of identifiers of receivers.

Returns
list of identifiers

Definition at line 1152 of file JSydney.cc.

1153  {
1154  ids_t buffer;
1155 
1156  for (JDetector::const_iterator i = setup.detector.begin(); i != setup.detector.end(); ++i) {
1157  if ((i->getFloor() != 0 && !i->has(PIEZO_DISABLE)) || (setup.hydrophones.hasString(i->getString()) && !i->has(HYDROPHONE_DISABLE))) {
1158  buffer.insert(i->getID());
1159  }
1160  }
1161 
1162  return buffer;
1163  }
JDetector detector
detector
Definition: JSydney.cc:108
hydrophones
hydrophones
static const int PIEZO_DISABLE
Enable (disable) use of piezo if this status bit is 0 (1);.
static const int HYDROPHONE_DISABLE
Enable (disable) use of hydrophone if this status bit is 0 (1);.
ids_t JACOUSTICS::JSydney::getEmitters ( ) const
inline

Get list of identifiers of emitters.

Returns
list of identifiers

Definition at line 1171 of file JSydney.cc.

1172  {
1173  using namespace std;
1174 
1175  ids_t buffer;
1176 
1177  for (tripods_container::const_iterator i = setup.tripods.begin(); i != setup.tripods.end(); ++i) {
1178  buffer.insert(i->getID());
1179  }
1180 
1181  for (transmitters_container::const_iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
1182 
1183  try {
1184 
1185  const JModule& module = router->getModule(i->getLocation());
1186 
1187  if (!module.has(TRANSMITTER_DISABLE)) {
1188  buffer.insert(i->getID());
1189  }
1190  }
1191  catch(const exception&) {}
1192  }
1193 
1194  return buffer;
1195  }
Data structure for a composite optical module.
Definition: JModule.hh:67
tripods_container tripods
tripods
Definition: JSydney.cc:109
transmitters_container transmitters
transmitters
Definition: JSydney.cc:126
bool has(const int bit) const
Test PMT status.
Definition: JStatus.hh:120
static const int TRANSMITTER_DISABLE
Enable (disable) use of transmitter if this status bit is 0 (1);.
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1206

Member Data Documentation

constexpr double JACOUSTICS::JSydney::RADIUS_M = 1.0
static

maximal horizontal distance between T-bar and emitter/hydrophone

Definition at line 135 of file JSydney.cc.

JFilenames JACOUSTICS::JSydney::filenames

Definition at line 1198 of file JSydney.cc.

JSoundVelocity JACOUSTICS::JSydney::V

Definition at line 1199 of file JSydney.cc.

size_t JACOUSTICS::JSydney::threads

Definition at line 1200 of file JSydney.cc.

int JACOUSTICS::JSydney::debug

Definition at line 1201 of file JSydney.cc.

JSetup JACOUSTICS::JSydney::setup

Definition at line 1202 of file JSydney.cc.

fits_t JACOUSTICS::JSydney::fits

Definition at line 1203 of file JSydney.cc.

JTOOLS::JHashMap<int, JLocation> JACOUSTICS::JSydney::receivers

Definition at line 1205 of file JSydney.cc.

std::unique_ptr<JLocationRouter> JACOUSTICS::JSydney::router

Definition at line 1206 of file JSydney.cc.

std::vector<input_type> JACOUSTICS::JSydney::input

Definition at line 1209 of file JSydney.cc.

std::vector<JSuperEvt> JACOUSTICS::JSydney::output
mutableprivate

Definition at line 1212 of file JSydney.cc.

JDetector JACOUSTICS::JSydney::detector
private

PMTs.

Definition at line 1214 of file JSydney.cc.

JFitParameters JACOUSTICS::JSydney::parameters
private

Definition at line 1215 of file JSydney.cc.


The documentation for this struct was generated from the following file: