Jpp  18.2.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...
 
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 1161 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 568 of file JSydney.cc.

571  :
572  filenames(filenames),
573  V(V),
574  threads(threads),
575  debug(debug)
576  {
577  load(filenames.detector, setup.detector);
578 
579  setup.tripods.load(filenames.tripod.c_str());
580 
581  if (filenames.hydrophone != "") { setup.hydrophones .load(filenames.hydrophone .c_str()); }
582  if (filenames.transmitter != "") { setup.transmitters.load(filenames.transmitter.c_str()); }
583 
584  for (JDetector::const_iterator i = setup.detector.begin(); i != setup.detector.end(); ++i) {
585  receivers[i->getID()] = i->getLocation();
586  }
587 
588  // detach PMTs
589 
591 
592  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
593  module->clear();
594  }
595 
596  router.reset(new JLocationRouter(setup.detector));
597 
599 
600  this->V.set(setup.detector.getUTMZ()); // sound velocity at detector depth
601 
604 
606 
607  ROOT::EnableThreadSafety();
608  }
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:1151
JSoundVelocity V
Definition: JSydney.cc:1152
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:1158
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:1159
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 657 of file JSydney.cc.

658  {
659  using namespace std;
660  using namespace JPP;
661 
662  this->parameters = parameters;
663 
664  JDetector A; // old strings
665  detector_type B; // new strings with transmitter -> fit only base module
666  JDetector C; // new strings w/o transmitter -> discard completely from fit
667 
668  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
669 
670  if (fits.strings .count(module->getString()) == 0)
671  A.push_back(*module);
672  else if (fits.transmitters.count(module->getString()) != 0)
673  B.push_back(*module);
674  else
675  C.push_back(*module);
676  }
677 
678  setup.detector.swap(A);
679 
680  for (const auto& element : B) {
681  setup.detector.push_back(element.second.base);
682  }
683 
684  router.reset(new JLocationRouter(setup.detector));
685 
686  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
687 
688  for (const int i : fits.tripods) {
689  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.x: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3X_t), parameters.steps[0]));
690  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.y: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Y_t), parameters.steps[0]));
691  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.z: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Z_t), parameters.steps[0]));
692  }
693 
694  for (const int i : fits.transmitters) {
695  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.x: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3X_t, true), parameters.steps[0]));
696  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.y: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Y_t, true), parameters.steps[0]));
697  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "transmitter.z: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Z_t, true), parameters.steps[0]));
698  }
699 
700  const double chi2 = fit(*this);
701 
702  for (auto& element : B) {
703 
704  const JModule& base = setup.detector.getModule(router->getAddress(JLocation(element.second.base.getString(),0)));
705  const JVector3D pos = base.getPosition() - element.second.base.getPosition();
706 
707  for (string_type::iterator module = element.second.begin(); module != element.second.end(); ++module) {
708 
709  module->add(pos);
710 
711  setup.detector.push_back(*module);
712  }
713  }
714 
715  copy(C.begin(), C.end(), back_inserter(setup.detector));
716 
718 
719  router.reset(new JLocationRouter(setup.detector));
720 
721  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
722  }
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:68
#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:1168
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:1159
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 730 of file JSydney.cc.

731  {
732  using namespace std;
733  using namespace JPP;
734 
735  this->parameters = parameters;
736 
737  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
738 
739  for (const int i : fits.strings) {
740  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.x: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3X_t, true), parameters.steps[0]));
741  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.y: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Y_t, true), parameters.steps[0]));
742  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.z: " << RIGHT(4) << i), new JStringEditor(setup, i, JVector3Z_t, false), parameters.steps[0]));
743  }
744 
745  for (const int i : fits.tripods) {
746  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.x: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3X_t), parameters.steps[1]));
747  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.y: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Y_t), parameters.steps[1]));
748  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "tripod.z: " << RIGHT(4) << i), new JTripodEditor(setup, i, JVector3Z_t), parameters.steps[1]));
749  }
750 
751  for (const int i : ids_t(fits.hydrophones, fits.transmitters)) {
752  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.R: " << RIGHT(4) << i), new JAnchorEditor(setup, i), parameters.steps[0] / RADIUS_M));
753  }
754 
755  for (const int i : fits.transmitters) {
756 
757  JModule& module = setup.detector.getModule(router->getAddress(JLocation(i,0)));
758 
759  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.R: " << RIGHT(4) << i), new JAnchorEditor(setup, i), parameters.steps[0] / RADIUS_M));
760  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "anchor.z: " << RIGHT(4) << i), new JModuleEditor(module), parameters.steps[0]));
761  }
762 
763  const double chi2 = fit(*this);
764 
765  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
766  }
JDetector detector
detector
Definition: JSydney.cc:108
Data structure for a composite optical module.
Definition: JModule.hh:68
#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:1168
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:1159
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 774 of file JSydney.cc.

775  {
776  using namespace std;
777  using namespace JPP;
778 
779  this->parameters = parameters;
780 
781  map<int, JDetector> buffer;
782 
783  double z0 = 0.0;
784 
785  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
786 
787  buffer[module->getString()].push_back(*module);
788 
789  if (module->getZ() > z0) {
790  z0 = module->getZ();
791  }
792  }
793 
794  JDetector tx;
795 
796  for (transmitters_container::iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
797  try {
798  tx.push_back(router->getModule(i->getLocation()));
799  }
800  catch(const exception&) {}
801  }
802 
803  for (const int i : fits.strings) {
804 
805  setup.detector.swap(buffer[i]);
806 
807  copy(tx.begin(), tx.end(), back_inserter(setup.detector));
808 
809  router.reset(new JLocationRouter(setup.detector));
810 
811  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
812 
813  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.M: " << RIGHT(4) << i), new JDyneemaEditor(setup, i, z0), parameters.steps[0]));
814  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "string.z: " << RIGHT(4) << i), new JStringEditor (setup, i, JVector3Z_t, false), parameters.steps[1]));
815 
816  const double chi2 = fit(*this);
817 
818  STATUS("string: " << setw(4) << i << ' ' << FIXED(9,4) << chi2 << endl);
819 
820  buffer[i].clear();
821 
822  copy_if(setup.detector.begin(), setup.detector.end(), back_inserter(buffer[i]), make_predicate(&JModule::getString, i));
823  }
824 
825  setup.detector.clear();
826 
827  for (const auto& element : buffer) {
828  copy(element.second.begin(), element.second.end(), back_inserter(setup.detector));
829  }
830 
831  router.reset(new JLocationRouter(setup.detector));
832  }
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:1168
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:1159
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 840 of file JSydney.cc.

841  {
842  using namespace std;
843  using namespace JPP;
844 
845  this->parameters = parameters;
846 
847  JGradient fit(parameters.Nmax, parameters.Nextra, parameters.epsilon, parameters.debug);
848 
849  for (JDetector::iterator module = setup.detector.begin(); module != setup.detector.end(); ++module) {
850  if (fits.strings.count(module->getString()) != 0 && module->getFloor() != 0) {
851  fit.push_back(JModifier_t(MAKE_STRING(LEFT(16) << "module.z: " << right << module->getLocation()), new JModuleEditor(*module), parameters.steps[0]));
852  }
853  }
854 
855  const double chi2 = fit(*this);
856 
857  STATUS("detector: " << FIXED(9,4) << chi2 << endl);
858  }
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:1168
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
double JACOUSTICS::JSydney::operator() ( const int  option) const
inline

Get chi2.

Parameters
optionoption
Returns
chi2/NDF

Definition at line 867 of file JSydney.cc.

868  {
869  using namespace std;
870  using namespace JPP;
871 
872  const JGeometry geometry(setup.detector, setup.hydrophones);
873 
874  JHashMap<int, JEmitter> emitters;
875 
876  for (tripods_container::const_iterator i = setup.tripods.begin(); i != setup.tripods.end(); ++i) {
877  {
878  emitters[i->getID()] = JEmitter(i->getID(), i->getUTMPosition() - setup.detector.getUTMPosition());
879  }
880  }
881 
882  for (transmitters_container::const_iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
883  try {
884  emitters[i->getID()] = JEmitter(i->getID(), i->getPosition() + router->getModule(i->getLocation()).getPosition());
885  }
886  catch(const exception&) {} // if no module available, discard transmitter
887  }
888 
889  if (option == 0 || // step wise improvement of the chi2
890  option == 1) { // evaluation of the chi2 before the determination of the gradient of the chi2
891 
892  this->output.clear();
893 
894  JSTDObjectWriter<JSuperEvt> out(this->output); // write data for subsequent use
895 
896  JFremantle::output = (option == 1 ? &out : NULL);
897 
898  {
899  JFremantle fremantle(geometry, V, parameters, threads, 2 * threads);
900 
901  for (const input_type& superevt : input) {
902 
903  const JWeight getWeight(superevt.begin(), superevt.end());
904 
905  set<int> counter;
907 
908  for (input_type::const_iterator evt = superevt.begin(); evt != superevt.end(); ++evt) {
909 
910  if (emitters.has(evt->getID())) {
911 
912  const JEmitter& emitter = emitters [evt->getID()];
913  const double weight = getWeight(evt->getID());
914 
915  for (JEvent::const_iterator i = evt->begin(); i != evt->end(); ++i) {
916 
917  if (geometry.hasLocation(receivers[i->getID()])) {
918 
919  data.push_back(JHit(emitter,
920  distance(superevt.begin(), evt),
921  receivers[i->getID()],
922  i->getToA(),
924  weight));
925 
926  counter.insert(evt->getID());
927  }
928  }
929  }
930  }
931 
932  if (counter.size() >= parameters.Nmin) {
933  fremantle.enqueue(data);
934  }
935  }
936  }
937 
938  return JFremantle::Q.getMean(numeric_limits<float>::max());
939 
940  } else if (option == 2) { // evaluation of the derivative of the chi2 to each fit parameter
941 
942  {
944 
945  JPlatypus platypus(geometry, emitters, V, parameters, in, threads);
946  }
947 
948  return JPlatypus::Q.getMean(numeric_limits<float>::max());
949 
950  } else {
951 
952  return numeric_limits<float>::max();
953  }
954  }
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:1152
std::vector< input_type > input
Definition: JSydney.cc:1162
static JQuantile Q
chi2/NDF
Definition: JPlatypus_t.hh:134
std::vector< JSuperEvt > output
Definition: JSydney.cc:1165
static JQuantile Q
chi2/NDF
Thread pool for global fits using super events.
Definition: JPlatypus_t.hh:32
static output_type * output
optional output
JFitParameters parameters
Definition: JSydney.cc:1168
JTOOLS::JHashMap< int, JLocation > receivers
Definition: JSydney.cc:1158
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
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:46
std::unique_ptr< JLocationRouter > router
Definition: JSydney.cc:1159
void JACOUSTICS::JSydney::run ( const std::string script)
inline

Run.

Parameters
scriptsteering script

Definition at line 962 of file JSydney.cc.

963  {
964  using namespace std;
965  using namespace JPP;
966 
967  ifstream in(script.c_str());
968 
969  while (in) {
970 
971  string buffer, key;
972 
973  if (getline(in, buffer)) {
974 
975  if (buffer.empty() || buffer[0] == skip_t) {
976  continue;
977  }
978 
979  istringstream is(buffer);
980 
981  is >> key;
982 
983  if (key == initialise_t) { // set object identifiers
984 
986 
987  } else if (key == fix_t) { // fix object identifiers
988 
989  string type; // type of object
990  ids_t id; // identifiers
991 
992  if (is >> type >> id) {
993  if (type == string_t) {
994  fits.strings .fix(id);
995  fits.hydrophones .fix(id);
996  fits.transmitters.fix(id);
997  } else if (type == tripod_t) {
998  fits.tripods .fix(id);
999  } else {
1000  THROW(JValueOutOfRange, "Invalid type <" << type << ">");
1001  }
1002  }
1003 
1004  } else if (key == stage_t) { // stage
1005 
1006  string stage;
1007  JParameters_t input;
1008 
1009  if (is >> stage >> input) {
1010 
1011  STATUS("stage " << setw(3) << stage << " {" << input << "}" << endl);
1012 
1013  JTimer timer;
1014 
1015  timer.start();
1016 
1017  ofstream out(MAKE_CSTRING("stage-" << stage << ".log"));
1018 
1019  {
1020  JRedirectStream redirect(cout, out);
1021 
1022  switch (stage[stage.size() - 1]) {
1023 
1024  case '0':
1025  stage_0(input);
1026  break;
1027 
1028  case 'a':
1029  case 'A':
1030  stage_a(input);
1031  break;
1032 
1033  case 'b':
1034  case 'B':
1035  stage_b(input);
1036  break;
1037 
1038  case 'c':
1039  case 'C':
1040  stage_c(input);
1041  break;
1042 
1043  default:
1044  THROW(JValueOutOfRange, "Invalid stage <" << stage << ">");
1045  break;
1046  }
1047  }
1048 
1049  out.close();
1050 
1051  store(stage);
1052  store();
1053 
1054  timer.stop();
1055 
1056  STATUS("Elapsed time " << FIXED(12,3) << timer.usec_wall * 1.0e-6 << " s." << endl);
1057  }
1058 
1059  } else {
1060  THROW(JValueOutOfRange, "Invalid key <" << key << ">");
1061  }
1062  }
1063  }
1064 
1065  in.close();
1066  }
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:774
void stage_a(const JParameters_t &parameters)
Fit procedure to determine the positions of the strings and tripods.
Definition: JSydney.cc:730
$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:1074
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:1162
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_c(const JParameters_t &parameters)
Fit procedure to determine the z-positions of the modules.
Definition: JSydney.cc:840
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
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:46
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:657
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 1074 of file JSydney.cc.

1075  {
1076  using namespace JPP;
1077 
1078  if (getFileStatus(dir.c_str()) || (mkdir(dir.c_str(), S_IRWXU | S_IRWXG) != -1)) {
1079 
1080  // attach PMTs
1081 
1082  for (JDetector::iterator module = detector.begin(); module != detector.end(); ++module) {
1083  module->set(router->getModule(module->getLocation()).getPosition());
1084  }
1085 
1087 
1088  setup.tripods.store(getFilename(dir, filenames.tripod).c_str());
1089 
1090  if (filenames.hydrophone != "") { setup.hydrophones .store(getFilename(dir, filenames.hydrophone) .c_str()); }
1092 
1093  } else {
1094 
1095  THROW(JValueOutOfRange, "Invalid directory <" << dir << ">");
1096  }
1097  }
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:1151
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:1159
ids_t JACOUSTICS::JSydney::getReceivers ( ) const
inline

Get list of identifiers of receivers.

Returns
list of identifiers

Definition at line 1105 of file JSydney.cc.

1106  {
1107  ids_t buffer;
1108 
1109  for (JDetector::const_iterator i = setup.detector.begin(); i != setup.detector.end(); ++i) {
1110  if ((i->getFloor() != 0 && !i->has(PIEZO_DISABLE)) || (setup.hydrophones.hasString(i->getString()) && !i->has(HYDROPHONE_DISABLE))) {
1111  buffer.insert(i->getID());
1112  }
1113  }
1114 
1115  return buffer;
1116  }
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 1124 of file JSydney.cc.

1125  {
1126  using namespace std;
1127 
1128  ids_t buffer;
1129 
1130  for (tripods_container::const_iterator i = setup.tripods.begin(); i != setup.tripods.end(); ++i) {
1131  buffer.insert(i->getID());
1132  }
1133 
1134  for (transmitters_container::const_iterator i = setup.transmitters.begin(); i != setup.transmitters.end(); ++i) {
1135 
1136  try {
1137 
1138  const JModule& module = router->getModule(i->getLocation());
1139 
1140  if (!module.has(TRANSMITTER_DISABLE)) {
1141  buffer.insert(i->getID());
1142  }
1143  }
1144  catch(const exception&) {}
1145  }
1146 
1147  return buffer;
1148  }
Data structure for a composite optical module.
Definition: JModule.hh:68
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:1159

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 1151 of file JSydney.cc.

JSoundVelocity JACOUSTICS::JSydney::V

Definition at line 1152 of file JSydney.cc.

size_t JACOUSTICS::JSydney::threads

Definition at line 1153 of file JSydney.cc.

int JACOUSTICS::JSydney::debug

Definition at line 1154 of file JSydney.cc.

JSetup JACOUSTICS::JSydney::setup

Definition at line 1155 of file JSydney.cc.

fits_t JACOUSTICS::JSydney::fits

Definition at line 1156 of file JSydney.cc.

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

Definition at line 1158 of file JSydney.cc.

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

Definition at line 1159 of file JSydney.cc.

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

Definition at line 1162 of file JSydney.cc.

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

Definition at line 1165 of file JSydney.cc.

JDetector JACOUSTICS::JSydney::detector
private

PMTs.

Definition at line 1167 of file JSydney.cc.

JFitParameters JACOUSTICS::JSydney::parameters
private

Definition at line 1168 of file JSydney.cc.


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