1 #ifndef __JACOUSTICS__JGEOMETRY__
2 #define __JACOUSTICS__JGEOMETRY__
37 namespace JACOUSTICS {}
38 namespace JPP {
using namespace JACOUSTICS; }
40 namespace JACOUSTICS {
142 return ts*mechanics.
b * log(1.0 - mechanics.
a*height) + (1.0 + ts) * height;
158 const double precision = 1.0e-3)
160 const size_t MAXIMUM_NUMBER_OF_ITERATIONS = 10;
166 for (
size_t i = 0; i != MAXIMUM_NUMBER_OF_ITERATIONS; ++i) {
168 const double us =
getDS(parameters, mechanics, z);
170 if (fabs(us - length) <= precision) {
174 z -= (us - length) / (1.0 + ts * (1.0 - mechanics.
a*mechanics.
b / (1.0 - mechanics.
a*z)));
193 const double z1 = mechanics.
getHeight(height);
197 getDZ(parameters, mechanics, height));
253 for (
T i = __begin; i != __end; ++i) {
270 return this->
has(floor);
288 }
else if (this->
has(floor)) {
305 const double height)
const
319 const int floor)
const
327 }
else if (this->
has(floor)) {
370 const int floor)
const
386 const int floor)
const
392 }
else if (this->
has(floor)) {
394 const double height = this->
get(floor).
getHeight();
398 const double tx = parameters.
tx;
399 const double ty = parameters.
ty;
400 const double tz = sqrt(1.0 - tx*tx - ty*ty);
402 const double dx = pos.
getX() - position.
getX();
403 const double dy = pos.
getY() - position.
getY();
404 const double dz = pos.
getZ() - position.
getZ();
406 const double D = sqrt(dx*dx + dy*dy + dz*dz);
409 hiswa * dy / D - height * (ty / tz) * dz / D);
430 out << setw(2) << i->first <<
' '
431 <<
FIXED(7,3) << i->second <<
" | "
432 <<
string.getPosition(i->first) <<
' '
433 <<
string.mechanics << endl;
491 for (JDETECTOR::JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
492 buffer[module->getString()].push_back(
module_type(module->getLocation(), module->getPosition()));
497 sort(i->second.begin(), i->second.end(),
make_comparator(&module_type::getFloor));
499 if (i->second[0].getFloor() == 0) {
513 (*this)[i->first].has_hydrophone =
true;
515 catch(
const exception&) {
516 (*this)[i->first].has_hydrophone =
false;
521 THROW(
JNoValue,
"No floor 0 in string " << i->first <<
"; use e.g. JDetectorDB -W.");
535 return this->
has(
string);
563 out << setw(4) << i->first << endl << i->second;
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.
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.
static JDetectorMechanics getMechanics
Function object to get string mechanics.
friend std::ostream & operator<<(std::ostream &out, const JFloor &floor)
Write floor parameters to output stream.
static double getDZ(const JMODEL::JString ¶meters, const JMechanics &mechanics, const double length, const double precision=1.0e-3)
Get approximate height of string.
General purpose class for hash map of unique elements.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
JString(const JVector3D &position, T __begin, T __end, const JMechanics &mechanics)
Constructor.
*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.
double getHeight(const int floor) const
Get height of given floor.
JFloor()
Default constructor.
JString(const JVector3D &position)
Constructor.
Data structure for detector geometry and calibration.
Auxiliary data structure for module location and position.
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.
JPosition3D getPosition(const JMODEL::JString ¶meters, const double height) const
Get position at given height according to given string model parameters.
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.
JMODEL::JString getGradient(const JMODEL::JString ¶meters, const JVector3D &position, const int floor) const
Get model gradient of distance between given position and floor according to given string model param...
Exception for missing value.
module_type(const JLocation &location, const JPosition3D &position)
Constructor.
Data structure for vector in three dimensions.
Logical location of module.
double getDistance(const JMODEL::JString ¶meters, const JVector3D &position, const int floor) const
Get distance between given position and floor according to given string model parameters.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
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.
Logical location of module.
JDetector(const JDETECTOR::JDetector &detector, const std::vector< JDETECTOR::JHydrophone > &hydrophones=std::vector< JDETECTOR::JHydrophone >())
Constructor.
JPosition3D getPosition(const double height) const
Get position at given height according to default string model parameters.
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.
JPosition3D getPosition(const int floor) const
Get position of given floor according to default string model parameters.
bool hasLocation(const JLocation &location) const
Check if this detector has given location.
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.
static double getDS(const JMODEL::JString ¶meters, const JMechanics &mechanics, const double height)
Get approximate length of string.
bool hasFloor(int floor) const
Check if this string has given floor.
JPosition3D getPosition(const JMODEL::JString ¶meters, const int floor) const
Get position of given floor according to given string model parameters.
Auxiliary data structure for parameters of mechanical model.