36 int main(
int argc,
char **argv)
48 JParser<> zap(
"Auxiliary program to merge detector files.");
52 zap[
'@'] =
make_field(calset,
"import calibration sets \"<key> = <file name>[; <key> = <file name>]\"" << endl
58 catch(
const exception &error) {
59 FATAL(error.what() << endl);
67 if (keys.count(i->getKey()) == 0)
68 FATAL(
"Invalid calibration set \"" << i->getKey() <<
"\"" << endl);
70 calibration[i->getKey()] =
trim(i->getValue());
90 copy(buffer.begin(), buffer.end(), back_inserter(
detector));
94 if (calibration.count(
TCAL)) {
107 for (
const auto& module : buffer) {
108 for (
const auto& pmt : module) {
109 if (router.
hasPMT(pmt.getID()))
112 FATAL(
"Missing PMT " << pmt.getID() << endl);
118 if (calibration.count(
PCAL)) {
131 for (
const auto& module : buffer) {
134 if (module.getFloor() != 0)
140 FATAL(
"Missing module " << module.getID() << endl);
145 if (calibration.count(
RCAL)) {
158 for (
const auto& module : buffer) {
161 if (module.getFloor() != 0) {
174 FATAL(
"Missing module " << module.getID() << endl);
179 if (calibration.count(
ACAL)) {
192 for (
const auto& module : buffer) {
198 FATAL(
"Missing module " << module.getID() << endl);
203 if (calibration.count(
CCAL)) {
216 for (
const auto& module : buffer) {
219 detector.getModule(router.
getAddress(module.getID())).setQuaternion(module.getQuaternion());
222 FATAL(
"Missing module " << module.getID() << endl);
227 if (calibration.count(
SCAL)) {
240 for (
const auto& module : buffer) {
241 for (
const auto& pmt : module) {
242 if (router.
hasPMT(pmt.getID()))
245 FATAL(
"Missing PMT " << pmt.getID() << endl);
Router for direct addressing of PMT data in detector data structure.
Utility class to parse command line options.
static const std::string RCAL
(optical|base) module orientations
int main(int argc, char *argv[])
Data structure for a composite optical module.
Router for direct addressing of module data in detector data structure.
static const std::string TCAL
PMT time offsets.
static JRotation getRotation
Function object to get rotation matrix to go from first to second module.
bool hasPMT(const JObjectID &id) const
Has PMT.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
static const std::string CCAL
compass alignment (a.k.a. quaternion calibration)
Data structure for detector geometry and calibration.
std::string trim(const std::string &buffer)
Trim string.
JVector3D & sub(const JVector3D &vector)
Subtract vector.
static const std::string SCAL
PMT status.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
static const std::string PCAL
(optical|base) module positions
static const std::string ACAL
acoustic time offsets (piezo sensor or hydrophone)
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
Direct access to PMT in detector data structure.
Auxiliary data structure for streaming of STL containers.
then usage $script[distance] fi case set_variable R
General purpose messaging.
Direct access to module in detector data structure.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Utility class to parse command line options.
const JModuleAddress & getAddress(const JObjectID &id) const
Get address of module.
bool hasModule(const JObjectID &id) const
Has module.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Data structure for position in three dimensions.
do set_variable DETECTOR_TXT $WORKDIR detector
const JPMTAddress & getAddress(const JObjectID &id) const
Get address of PMT.
JVector3D & add(const JVector3D &vector)
Add vector.