1 #ifndef __JDETECTOR__JMODULE__
2 #define __JDETECTOR__JMODULE__
32 namespace JDETECTOR {}
33 namespace JPP {
using namespace JDETECTOR; }
139 const double precision = 1.0e-3)
141 if (first.size() == second.size()) {
143 for (
size_t i = 0; i != first.size(); ++i) {
189 if (index >= (
int) size()) {
193 (*this)[index] = pmt;
209 if (this->size() > 1
u) {
217 for (const_iterator pmt = this->begin(); pmt != this->end(); ++pmt) {
219 const double xx = 1.0 - pmt->getDX() * pmt->getDX();
220 const double yy = 1.0 - pmt->getDY() * pmt->getDY();
221 const double zz = 1.0 - pmt->getDZ() * pmt->getDZ();
223 const double xy = -pmt->getDX() * pmt->getDY();
224 const double xz = -pmt->getDX() * pmt->getDZ();
225 const double yz = -pmt->getDY() * pmt->getDZ();
236 x += xx * pmt->
getX() + xy * pmt->getY() + xz * pmt->getZ();
237 y += xy * pmt->getX() + yy * pmt->getY() + yz * pmt->getZ();
238 z += xz * pmt->getX() + yz * pmt->getY() + zz * pmt->getZ();
247 return JVector3D(V.a00 * x + V.a01 * y + V.a02 * z,
248 V.a10 * x + V.a11 * y + V.a12 * z,
249 V.a20 * x + V.a21 * y + V.a22 * z);
276 if (!this->empty()) {
283 catch(
const exception&) {
287 for (
iterator i = this->begin(); i != this->end(); ++i) {
288 pos.
add(i->getPosition());
313 for (
iterator i = this->begin(); i != this->end(); ++i) {
328 for (
iterator i = this->begin(); i != this->end(); ++i) {
345 for (
iterator i = this->begin(); i != this->end(); ++i) {
346 i->transform(R, pos);
360 for (
iterator i = this->begin(); i != this->end(); ++i) {
375 for (
iterator i = this->begin(); i != this->end(); ++i) {
390 for (
iterator i = this->begin(); i != this->end(); ++i) {
416 for (
iterator i = begin(); i != end(); ++i) {
434 for (
iterator i = begin(); i != end(); ++i) {
452 for (
iterator i = begin(); i != end(); ++i) {
468 for (
iterator i = begin(); i != end(); ++i) {
484 for (
iterator i = begin(); i != end(); ++i) {
500 return this->
add(pos);
512 return this->
sub(pos);
540 for (
JPMT pmt; n != 0 && in >> pmt; --
n) {
541 module.push_back(pmt);
564 out << static_cast<const JModuleIdentifier&>(module);
566 out << static_cast<const JLocation&> (module);
570 out << static_cast<const JPosition3D&> (module);
572 out << static_cast<const JQuaternion3D&>(module);
574 out << static_cast<const JCalibration&> (module);
577 out <<
' ' << module.size() << endl;
579 for (const_iterator i = module.begin(); i != module.end(); ++i) {
580 out <<
' ' << *i << endl;;
611 for (
JPMT pmt; n != 0; --
n) {
615 module.push_back(pmt);
635 out << static_cast<const JModuleIdentifier&>(module);
636 out << static_cast<const JLocation&> (module);
639 out << static_cast<const JPosition3D&> (module);
640 out << static_cast<const JQuaternion3D&>(module);
641 out << static_cast<const JCalibration&> (module);
644 int n = module.size();
648 for (const_iterator i = module.begin(); i != module.end(); ++i) {
friend JReader & operator>>(JReader &in, JModule &module)
Read module from input.
Interface for binary output.
Q(UTCMax_s-UTCMin_s)-livetime_s
static void setVersion(const JVersion &version)
Set detector version.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
static const double HYDROPHONE_DELAYTIME_US
Hydrophone delay time [us].
JPosition3D & rotate_back(const JRotation3D &R)
Rotate back.
JModule & operator-=(const JVector3D &pos)
Subtract position.
JModule & add(const double t0)
Add time offset.
std::iterator_traits< T >::value_type getAverage(T __begin, T __end)
Get average.
void subT0(const double t0)
Subtract time offset.
Data structure for time calibration.
double getDot(const JAngle3D &angle) const
Get dot product.
void transform(const JRotation3D &R, const JVector3D &pos)
Transform position.
friend JWriter & operator<<(JWriter &out, const JModule &module)
Write module to output.
void rotate(const JQuaternion3D &Q)
Rotate module.
JModule()
Default constructor.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
JModule & sub(const JVector3D &pos)
Subtract position.
JVector3D & sub(const JVector3D &vector)
Subtract vector.
void transform(const JTransformation3D &T)
Transformation of geometry.
JDirection3D getDirection(const Vec &dir)
Get direction.
static const double PIEZO_DELAYTIME_US
Piezo delay time [us].
Data structure for vector in three dimensions.
Version with quaternion and time offset per module.
JModule & sub(const double t0)
Subtract time offset.
Logical location of module.
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
Data structure for PMT geometry, calibration and status.
void compile()
Compile module data.
Data structure for detector version.
void rotate_back(const JQuaternion3D &Q)
Rotate back module.
JModule(const int id, const JLocation &location)
Constructor.
void setPMT(const int index, const JPMT &pmt)
Set PMT.
void rotate_back(const JRotation3D &R)
Rotate back module.
JVector3D getCenter() const
Get center of module based on crossing point of PMT axes.
Interface for binary input.
const JPosition3D & getPosition() const
Get position.
const JPMT & getPMT(const int index) const
Get PMT.
void rotate(const JRotation3D &R)
Rotate module.
then usage $script[distance] fi case set_variable R
JModule & operator+=(const JVector3D &pos)
Add position.
Logical location of module.
static const JGetDetectorVersion getDetectorVersion
Function object to map detector version to numerical value.
const JRotation3D & getRotation() const
Get rotation.
Data structure for unit quaternion in three dimensions.
static JDetectorVersion & getVersion()
Get detector version.
friend std::ostream & operator<<(std::ostream &out, const JModule &module)
Write module to output.
friend std::istream & operator>>(std::istream &in, JModule &module)
Read module from input.
void setT0(const double t0)
Set time offset.
Data structure for PMT geometry and calibration.
Auxiliary class for object identification.
JPosition3D()
Default constructor.
void setCalibration(const JCalibration &cal)
Set calibration.
void transform(const JRotation3D &R, const JVector3D &pos)
Transformation of geometry (see method JGEOMETRY3D::JPosition3D::transform(const JRotation3D&, const JVector3D&)).
alias put_queue eval echo n
JModule & set(const double t0)
Set time offset.
JPMT & getPMT(const int index)
Get PMT.
double getX() const
Get x position.
Base class for data structures with artithmetic capabilities.
void addT0(const double t0)
Add time offset.
Data structure for position in three dimensions.
Exception for accessing a value in a collection that is outside of its range.
JVector3D & div(const double factor)
Scale vector.
Data structure for normalised vector in three dimensions.
Auxiliary class for version identifier.
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 source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
JPosition3D & rotate(const JRotation3D &R)
Rotate.
JModule & set(const JVector3D &pos)
Set position.
static bool compare(const JModule &first, const JModule &second, const double precision=1.0e-3)
Compare modules.
JVector3D & add(const JVector3D &vector)
Add vector.
JModule & add(const JVector3D &pos)
Add position.
JVector3D()
Default constructor.
double getT0() const
Get time offset.