28 int main(
int argc,
char **argv)
40 JParser<> zap(
"Auxiliary program to compose detector from separate calibrations.");
42 zap[
'a'] =
make_field(detectorFile,
"detector file");
43 zap[
'f'] =
make_field(inputFile,
"detector calibration files in JSON format "\
44 "(wild card \'" <<
FILENAME_WILD_CARD <<
"\' will be replaced by corresponding calibration set)");
50 catch(
const exception &error) {
51 FATAL(error.what() << endl);
65 FATAL(
"No detector address map for detector identier " <<
detector.getID() << endl);
73 json::const_iterator data;
82 for (
size_t i = 0; i != data->size(); ++i) {
84 if (data->at(i).contains(
DetID_t)) {
88 if (data->at(i).contains(
PMTT0s_t)) {
92 if (pmtRouter.
hasPMT(element.getID())) {
110 for (
size_t i = 0; i != data->size(); ++i) {
112 if (data->at(i).contains(
DetID_t)) {
120 if (moduleRouter.hasModule(element.getID())) {
122 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
124 module.
add(element.getPosition());
133 if (moduleRouter.hasModule(element.getID())) {
135 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
137 module.
add(element.getPosition());
151 for (
size_t i = 0; i != data->size(); ++i) {
153 if (data->at(i).contains(
DetID_t)) {
161 if (moduleRouter.hasModule(element.getID())) {
163 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
167 if (module.size() != buffer.size()) {
168 FATAL(
"Module size " << module.size() <<
" != " << buffer.size() << endl);
173 for (
size_t i = 0; i != module.size(); ++i) {
177 module.
rotate(element.getQuaternion());
199 for (
size_t i = 0; i != data->size(); ++i) {
201 if (data->at(i).contains(
DetID_t)) {
209 if (moduleRouter.hasModule(element.getID())) {
211 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
227 for (
size_t i = 0; i != data->size(); ++i) {
229 if (data->at(i).contains(
DetID_t)) {
237 if (moduleRouter.hasModule(element.getID())) {
239 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
255 for (
size_t i = 0; i != data->size(); ++i) {
257 if (data->at(i).contains(
DetID_t)) {
265 if (pmtRouter.
hasPMT(element.getID())) {
278 if (moduleRouter.hasModule(element.getID())) {
280 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
291 if (moduleRouter.hasModule(element.getID())) {
293 JModule& module =
detector.getModule(moduleRouter.getAddress(element.getID()));
Router for direct addressing of PMT data in detector data structure.
static const std::string PMTStatusInfo_t
Utility class to parse command line options.
static const std::string DetID_t
static const std::string RCAL
(optical|base) module orientations
int main(int argc, char *argv[])
Data structure for a composite optical module.
static const std::string DOMPositions_t
Router for direct addressing of module data in detector data structure.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
void setAxis(const JAxis3D &axis)
Set axis.
static const std::string TCAL
PMT time offsets.
bool hasPMT(const JObjectID &id) const
Has PMT.
Lookup table for PMT addresses in detector.
static const std::string CCAL
compass alignment (a.k.a. quaternion calibration)
Data structure for detector geometry and calibration.
#define MAKE_STRING(A)
Make string.
#define ASSERT(A,...)
Assert macro.
I/O formatting auxiliaries.
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion.
static const std::string SCAL
PMT status.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
static const std::string DOMRotations_t
int getID() const
Get identifier.
static const std::string PCAL
(optical|base) module positions
bool is_valid(const json &js)
Check validity of JSon data.
Data structure for PMT geometry, calibration and status.
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.
JVector3D getCenter() const
Get center of module based on crossing point of PMT axes.
static const std::string DOMAcousticT0_t
Direct access to PMT in detector data structure.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
const JPMT & getPMT(const int index) const
Get PMT.
void rotate(const JRotation3D &R)
Rotate module.
General purpose messaging.
void setStatus(const JStatus &status)
Set status.
static const std::string BaseRotations_t
static const std::string Comment_t
Direct access to module in detector data structure.
std::string setWildCard(const std::string &file_name, const std::string &value)
Get file name by setting wild card to given value.
static const std::string DOMCompassRotations_t
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Utility class to parse command line options.
void setCalibration(const JCalibration &cal)
Set calibration.
const JAxis3D & getAxis() const
Get axis.
static const char FILENAME_WILD_CARD
wild card character for file name substitution
static const std::string DOMStatusInfo_t
Data structure for position in three dimensions.
static const std::string PMTT0s_t
Auxiliary class to load json data from file.
do set_variable DETECTOR_TXT $WORKDIR detector
static const std::string Data_t
JModule & set(const JVector3D &pos)
Set position.
const JPMTAddress & getAddress(const JObjectID &id) const
Get address of PMT.
static const std::string BaseStatusInfo_t
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number
static const std::string BasePositions_t
JModule & add(const JVector3D &pos)
Add position.
void setPosition(const JVector3D &pos)
Set position.
bool hasWildCard(const std::string &file_name)
Check presence of wild card.