1 #ifndef __JACOUSTICS__JGEOMETRY__
2 #define __JACOUSTICS__JGEOMETRY__
37 namespace JACOUSTICS {}
38 namespace JPP {
using namespace JACOUSTICS; }
40 namespace JACOUSTICS {
146 const double x = 1.0 - mechanics.
a*height;
148 return sqrt(1.0 + T2) * height + T2*mechanics.
b *
log(x) + 0.5*T2*mechanics.
a*mechanics.
b*mechanics.
b * (1.0/x - 1.0);
166 const size_t MAXIMUM_NUMBER_OF_ITERATIONS = 10;
172 for (
size_t i = 0;
i != MAXIMUM_NUMBER_OF_ITERATIONS; ++
i) {
174 const double ls =
getLength(parameters, mechanics, z) - length;
176 if (fabs(ls) <= precision) {
180 const double vs = 1.0 - mechanics.
a*mechanics.
b / (1.0 - mechanics.
a*z);
182 z -= ls / (1.0 + 0.5*T2 * vs*
vs);
201 const double h1 = height * (1.0 + parameters.
vs);
202 const double z1 = mechanics.
getHeight(h1);
205 parameters.
ty * z1 + parameters.
ty2 * h1*h1,
265 for (
T i = __begin;
i != __end; ++
i) {
290 if (floor >= this->size()) {
291 this->resize(floor + 1);
309 return (floor < this->size());
328 return (*
this)[floor].getHeight();
340 const size_t floor)
const
382 const size_t floor)
const
398 const size_t floor)
const
404 }
else if (floor < this->size()) {
407 const double height = (*this)[floor].getHeight();
408 const double h1 = height * (1.0 + parameters.
vs);
411 const double tx = parameters.
tx;
412 const double ty = parameters.
ty;
413 const double tz = sqrt(1.0 - tx*tx - ty*ty);
415 const double dx = pos.
getX() - position.
getX();
416 const double dy = pos.
getY() - position.
getY();
417 const double dz = pos.
getZ() - position.
getZ();
419 const double D = sqrt(dx*dx + dy*dy + dz*dz);
424 z1 * dy / D - height * (ty / tz) * dz / D,
427 height * vw * (tx * dx + ty * dy) / D + h1 * (dz / vs) / D);
447 for (
size_t i = 0;
i !=
string.size(); ++
i) {
449 out << setw(2) <<
i <<
' '
450 <<
FIXED(7,3) <<
string[
i] <<
" | "
451 <<
string.getPosition(
i) <<
' '
452 <<
string.mechanics << endl;
512 for (JDETECTOR::JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
513 buffer[module->getString()].push_back(
module_type(module->getLocation(), module->getPosition()));
518 sort(
i->second.begin(),
i->second.end(),
make_comparator(&module_type::getFloor));
520 if (
i->second[0].getFloor() == 0) {
534 (*this)[
i->first].has_hydrophone =
true;
536 catch(
const exception&) {
537 (*this)[
i->first].has_hydrophone =
false;
542 THROW(
JNoValue,
"No floor 0 in string " <<
i->first <<
"; use e.g. JDetectorDB -W.");
556 return this->has(
string);
584 out << setw(4) <<
i->first << endl <<
i->second;
static double getHeight(const JMODEL::JString ¶meters, const JMechanics &mechanics, const double length, const double precision=PRECISION_M)
Get approximate height of string.
Mechanical modelling of string.
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
const JMechanics & getMechanics() const
Get mechanical model parameters.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
int getFloor() const
Get floor number.
static JPosition3D getPosition(const JMODEL::JString ¶meters, const JMechanics &mechanics, const double height)
Get position at given height according to given string model parameters and mechanics.
friend std::ostream & operator<<(std::ostream &out, const JFloor &floor)
Write floor parameters to output stream.
General purpose class for hash map of unique elements.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
double getHeight(const size_t floor) const
Get height of receiver at given floor with respect to reference position.
*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
JString()
Default constructor.
Auxiliary data structure for floating point format specification.
double getDistance(const JVector3D &pos) const
Get distance to point.
JFloor()
Default constructor.
Data structure for detector geometry and calibration.
JPosition3D getPosition(const size_t floor) const
Get position of receiver at given floor.
Auxiliary data structure for module location and position.
Type definition of hydrophone.
static constexpr double PRECISION_M
precision of height evaluation [m]
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
Data structure for hydrophone.
JFloor(const double height)
Constructor.
friend std::ostream & operator<<(std::ostream &out, const JString &string)
Write string parameters to output stream.
bool hasString(int string) const
Check if this detector has given string.
JGEOMETRY::JDetector JGeometry
Type definition of detector geometry.
Exception for missing value.
module_type(const JLocation &location, const JPosition3D &position)
Constructor.
JString(const JVector3D &position, const JMechanics &mechanics)
Constructor.
Data structure for vector in three dimensions.
Logical location of module.
double getDistance(const JMODEL::JString ¶meters, const JVector3D &position, const size_t floor) const
Get distance between given position and floor according to given string model parameters.
JPosition3D getPosition(const JMODEL::JString ¶meters, const size_t floor) const
Get position of receiver at given floor according to given string model parameters.
JMODEL::JString getGradient(const JMODEL::JString ¶meters, const JVector3D &position, const size_t floor) const
Get model gradient of distance between given position and floor according to given string model param...
do set_variable OUTPUT_DIRECTORY $WORKDIR T
static double getLength(const JMODEL::JString ¶meters, const JMechanics &mechanics, const double height)
Get approximate length of string.
double a
0 <= a < (maximal height)⁻1; [m^-1]
double getHeight(const double height) const
Get effective height for given actual height.
double getLengthSquared() const
Get length squared.
double getY() const
Get y position.
const JPosition3D & getPosition() const
Get position.
JDetector(const JDETECTOR::JDetector &detector, const std::vector< JHydrophone > &hydrophones=std::vector< JHydrophone >())
Constructor.
double getLength() const
Get length.
Logical location of module.
JString(const JVector3D &position, const JMechanics &mechanics, T __begin, T __end)
Constructor.
JFloor & operator[](size_t floor)
Get floor data.
then set_variable DIR else fatal Wrong number of arguments fi for INPUT_FILE in ls rt $DIR stage * log
bool hasFloor(size_t floor) const
Check if this string has receiver at given floor.
int getString() const
Get string number.
friend std::ostream & operator<<(std::ostream &out, const JDetector &detector)
Write detector parameters to output stream.
JPosition3D hydrophone
Hydrophone.
JMechanics mechanics
Mechanical data.
JPosition3D getPiezoPosition()
Get relative position of piezo in optical module.
JPosition3D()
Default constructor.
friend bool operator<(const module_type &first, const module_type &second)
Less-than operator.
JDetector()
Default constructor.
double getX() const
Get x position.
bool hasLocation(const JLocation &location) const
Check if this detector has given location.
Auxiliary data structure to list files in directory.
Data structure for position in three dimensions.
double getHeight() const
Get height of this floor.
Exception for accessing a value in a collection that is outside of its range.
Model for fit to acoutsics data.
do echo Generating $dir eval D
double getZ() const
Get z position.
Auxiliary data structure for parameters of mechanical model.