1 #ifndef __JDETECTOR__JMODULE__
2 #define __JDETECTOR__JMODULE__
32 namespace JDETECTOR {}
33 namespace JPP {
using namespace JDETECTOR; }
148 const double precision = 1.0e-3)
150 if (first.size() == second.size()) {
152 for (
size_t i = 0;
i != first.size(); ++
i) {
198 if (index >= (
int) size()) {
202 (*this)[index] = pmt;
218 if (this->size() > 1
u) {
226 for (const_iterator pmt = this->begin(); pmt != this->end(); ++pmt) {
228 const double xx = 1.0 - pmt->getDX() * pmt->getDX();
229 const double yy = 1.0 - pmt->getDY() * pmt->getDY();
230 const double zz = 1.0 - pmt->getDZ() * pmt->getDZ();
232 const double xy = -pmt->getDX() * pmt->getDY();
233 const double xz = -pmt->getDX() * pmt->getDZ();
234 const double yz = -pmt->getDY() * pmt->getDZ();
245 x += xx * pmt->getX() + xy * pmt->getY() + xz * pmt->getZ();
246 y += xy * pmt->getX() + yy * pmt->getY() + yz * pmt->getZ();
247 z += xz * pmt->getX() + yz * pmt->getY() + zz * pmt->getZ();
256 return JVector3D(V.a00 * x + V.a01 * y + V.a02 * z,
257 V.a10 * x + V.a11 * y + V.a12 * z,
258 V.a20 * x + V.a21 * y + V.a22 * z);
286 if (!this->empty()) {
293 catch(
const exception&) {
297 for (
iterator i = this->begin();
i != this->end(); ++
i) {
298 pos.
add(
i->getPosition());
318 for (
iterator i = this->begin();
i != this->end(); ++
i) {
333 for (
iterator i = this->begin();
i != this->end(); ++
i) {
350 for (
iterator i = this->begin();
i != this->end(); ++
i) {
351 i->transform(R, pos);
365 for (
iterator i = this->begin();
i != this->end(); ++
i) {
380 for (
iterator i = this->begin();
i != this->end(); ++
i) {
395 for (
iterator i = this->begin();
i != this->end(); ++
i) {
505 return this->
add(pos);
517 return this->
sub(pos);
542 in >>
static_cast<JStatus&
> (module);
549 for (
JPMT pmt; n != 0 && in >> pmt; --
n) {
550 module.push_back(pmt);
573 out << static_cast<const JModuleIdentifier&>(module);
575 out << static_cast<const JLocation&> (module);
579 out << static_cast<const JPosition3D&> (module);
581 out << static_cast<const JQuaternion3D&>(module);
583 out << static_cast<const JCalibration&> (module);
588 out << static_cast<const JStatus&> (module);
591 out <<
' ' << module.size() << endl;
593 for (const_iterator
i = module.begin();
i != module.end(); ++
i) {
594 out <<
' ' << *
i << endl;;
622 in >>
static_cast<JStatus&
> (module);
631 for (JModule::iterator out = module.begin(); n != 0; --
n, ++out) {
652 out << static_cast<const JModuleIdentifier&>(module);
653 out << static_cast<const JLocation&> (module);
656 out << static_cast<const JPosition3D&> (module);
657 out << static_cast<const JQuaternion3D&>(module);
658 out << static_cast<const JCalibration&> (module);
662 out << static_cast<const JStatus&> (module);
665 int n = module.size();
669 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.
Data structure for a composite optical module.
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 reset(const int bit)
Reset PMT status.
Data structure for time calibration.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
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.
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.
bool has(const int bit) const
Test PMT status.
void set(const int bit)
Set PMT status.
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
Auxiliary class for handling status.
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.
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.
then JCookie sh JDataQuality D $DETECTOR_ID R
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.
Data structure for PMT geometry and calibration.
then fatal The output file must have the wildcard in the e g root fi 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
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&)).
JModule & set(const double t0)
Set time offset.
JPMT & getPMT(const int index)
Get PMT.
Base class for data structures with artithmetic capabilities.
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.
Version with module status field.
Auxiliary class for version identifier.
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.