38 int main(
int argc, 
char **argv)
 
   62     JParser<> zap(
"Auxiliary program to generate detector files.");
 
   69     zap[
'V'] = 
make_field(variant)             = getDetectorVersions<string>();
 
   72     zap[
'O'] = 
make_field(option)              = 
"ARCA", 
"ORCA", 
"Antares";
 
   77   catch(
const exception &error) {
 
   78     FATAL(error.what() << endl);
 
   86   else if (option == 
"ORCA") 
 
   88   else if (option == 
"Antares") 
 
   91     FATAL(
"Invalid option " << option << endl);
 
   97     FATAL(
"No detector address map for detector identifier " << detector.
getID() << endl);
 
  105   deque<JAnchor> footprint;
 
  107   if (inputFile != 
"") {
 
  113       for (
JAnchor anchor; in >> anchor && footprint.size() < 
parameters.numberOfLines; ) {
 
  114         footprint.push_back(anchor);
 
  121       FATAL(
"Error opening file " << inputFile);
 
  128     footprint.push_back(
JAnchor(  1,     6,    -7));
 
  129     footprint.push_back(
JAnchor(  2,   188,     9));
 
  130     footprint.push_back(
JAnchor(  3,   131,   153));
 
  131     footprint.push_back(
JAnchor(  4,   -85,   120));
 
  132     footprint.push_back(
JAnchor(  5,  -175,    39));
 
  133     footprint.push_back(
JAnchor(  6,   -64,  -181));
 
  134     footprint.push_back(
JAnchor(  7,    90,  -178));
 
  135     footprint.push_back(
JAnchor(  8,   368,    20));
 
  136     footprint.push_back(
JAnchor(  9,   251,   159));
 
  137     footprint.push_back(
JAnchor( 10,   264,  -146));
 
  138     footprint.push_back(
JAnchor( 11,   189,   293));
 
  139     footprint.push_back(
JAnchor( 12,    12,   309));
 
  140     footprint.push_back(
JAnchor( 13,  -176,   338));
 
  141     footprint.push_back(
JAnchor( 14,  -266,   149));
 
  142     footprint.push_back(
JAnchor( 15,  -336,    -1));
 
  143     footprint.push_back(
JAnchor( 16,  -248,  -174));
 
  144     footprint.push_back(
JAnchor( 17,  -196,  -348));
 
  145     footprint.push_back(
JAnchor( 18,   -18,  -350));
 
  146     footprint.push_back(
JAnchor( 19,   211,  -339));
 
  147     footprint.push_back(
JAnchor( 20,   541,   -12));
 
  148     footprint.push_back(
JAnchor( 21,   442,   183));
 
  149     footprint.push_back(
JAnchor( 22,   422,  -125));
 
  150     footprint.push_back(
JAnchor( 23,   364,   287));
 
  151     footprint.push_back(
JAnchor( 24,   342,  -323));
 
  152     footprint.push_back(
JAnchor( 25,   297,   499));
 
  153     footprint.push_back(
JAnchor( 26,    51,   452));
 
  154     footprint.push_back(
JAnchor( 27,   -78,   488));
 
  155     footprint.push_back(
JAnchor( 28,  -281,   508));
 
  156     footprint.push_back(
JAnchor( 29,  -325,   304));
 
  157     footprint.push_back(
JAnchor( 30,  -455,   128));
 
  158     footprint.push_back(
JAnchor( 31,  -541,    15));
 
  159     footprint.push_back(
JAnchor( 32,  -429,  -142));
 
  160     footprint.push_back(
JAnchor( 33,  -327,  -316));
 
  161     footprint.push_back(
JAnchor( 34,  -255,  -488));
 
  162     footprint.push_back(
JAnchor( 35,  -103,  -508));
 
  163     footprint.push_back(
JAnchor( 36,    74,  -469));
 
  164     footprint.push_back(
JAnchor( 37,   289,  -452));
 
  165     footprint.push_back(
JAnchor( 38,   715,     0));
 
  166     footprint.push_back(
JAnchor( 39,   653,   154));
 
  167     footprint.push_back(
JAnchor( 40,   614,  -141));
 
  168     footprint.push_back(
JAnchor( 41,   530,   269));
 
  169     footprint.push_back(
JAnchor( 42,   512,  -323));
 
  170     footprint.push_back(
JAnchor( 43,   473,   472));
 
  171     footprint.push_back(
JAnchor( 44,   458,  -473));
 
  172     footprint.push_back(
JAnchor( 45,   395,   632));
 
  173     footprint.push_back(
JAnchor( 46,   205,   630));
 
  174     footprint.push_back(
JAnchor( 47,     1,   667));
 
  175     footprint.push_back(
JAnchor( 48,  -160,   644));
 
  176     footprint.push_back(
JAnchor( 49,  -352,   639));
 
  177     footprint.push_back(
JAnchor( 50,  -413,   460));
 
  178     footprint.push_back(
JAnchor( 51,  -564,   286));
 
  179     footprint.push_back(
JAnchor( 52,  -636,   125));
 
  180     footprint.push_back(
JAnchor( 53,  -717,    23));
 
  181     footprint.push_back(
JAnchor( 54,  -605,  -139));
 
  182     footprint.push_back(
JAnchor( 55,  -518,  -279));
 
  183     footprint.push_back(
JAnchor( 56,  -482,  -448));
 
  184     footprint.push_back(
JAnchor( 57,  -379,  -595));
 
  185     footprint.push_back(
JAnchor( 58,  -211,  -619));
 
  186     footprint.push_back(
JAnchor( 59,     8,  -652));
 
  187     footprint.push_back(
JAnchor( 60,   214,  -619));
 
  188     footprint.push_back(
JAnchor( 61,   395,  -617));
 
  189     footprint.push_back(
JAnchor( 62,   886,   -12));
 
  190     footprint.push_back(
JAnchor( 63,   802,   155));
 
  191     footprint.push_back(
JAnchor( 64,   844,  -128));
 
  192     footprint.push_back(
JAnchor( 65,   697,   285));
 
  193     footprint.push_back(
JAnchor( 66,   731,  -275));
 
  194     footprint.push_back(
JAnchor( 67,   621,   450));
 
  195     footprint.push_back(
JAnchor( 68,   600,  -497));
 
  196     footprint.push_back(
JAnchor( 69,   568,   593));
 
  197     footprint.push_back(
JAnchor( 70,   517,  -586));
 
  198     footprint.push_back(
JAnchor( 71,   430,   776));
 
  199     footprint.push_back(
JAnchor( 72,   240,   758));
 
  200     footprint.push_back(
JAnchor( 73,    70,   783));
 
  201     footprint.push_back(
JAnchor( 74,   -75,   803));
 
  202     footprint.push_back(
JAnchor( 75,  -252,   809));
 
  203     footprint.push_back(
JAnchor( 76,  -478,   771));
 
  204     footprint.push_back(
JAnchor( 77,  -510,   590));
 
  205     footprint.push_back(
JAnchor( 78,  -643,   468));
 
  206     footprint.push_back(
JAnchor( 79,  -741,   284));
 
  207     footprint.push_back(
JAnchor( 80,  -845,   175));
 
  208     footprint.push_back(
JAnchor( 81,  -907,    -6));
 
  209     footprint.push_back(
JAnchor( 82,  -792,  -142));
 
  210     footprint.push_back(
JAnchor( 83,  -737,  -340));
 
  211     footprint.push_back(
JAnchor( 84,  -639,  -492));
 
  212     footprint.push_back(
JAnchor( 85,  -518,  -596));
 
  213     footprint.push_back(
JAnchor( 86,  -455,  -751));
 
  214     footprint.push_back(
JAnchor( 87,  -260,  -814));
 
  215     footprint.push_back(
JAnchor( 88,  -103,  -819));
 
  216     footprint.push_back(
JAnchor( 89,   106,  -764));
 
  217     footprint.push_back(
JAnchor( 90,   274,  -754));
 
  218     footprint.push_back(
JAnchor( 91,   417,  -762));
 
  219     footprint.push_back(
JAnchor( 92,  1094,    -4));
 
  220     footprint.push_back(
JAnchor( 93,  1010,   120));
 
  221     footprint.push_back(
JAnchor( 94,   992,  -171));
 
  222     footprint.push_back(
JAnchor( 95,   898,   324));
 
  223     footprint.push_back(
JAnchor( 96,   901,  -298));
 
  224     footprint.push_back(
JAnchor( 97,   768,   471));
 
  225     footprint.push_back(
JAnchor( 98,   818,  -477));
 
  226     footprint.push_back(
JAnchor( 99,   731,   632));
 
  227     footprint.push_back(
JAnchor(100,   713,  -633));
 
  228     footprint.push_back(
JAnchor(101,   625,   772));
 
  229     footprint.push_back(
JAnchor(102,   661,  -759));
 
  230     footprint.push_back(
JAnchor(103,   530,   949));
 
  231     footprint.push_back(
JAnchor(104,   345,   960));
 
  232     footprint.push_back(
JAnchor(105,   221,   931));
 
  233     footprint.push_back(
JAnchor(106,   -29,   962));
 
  234     footprint.push_back(
JAnchor(107,  -155,   967));
 
  235     footprint.push_back(
JAnchor(108,  -382,   917));
 
  236     footprint.push_back(
JAnchor(109,  -545,   965));
 
  237     footprint.push_back(
JAnchor(110,  -634,   779));
 
  238     footprint.push_back(
JAnchor(111,  -731,   600));
 
  239     footprint.push_back(
JAnchor(112,  -852,   471));
 
  240     footprint.push_back(
JAnchor(113,  -903,   322));
 
  241     footprint.push_back(
JAnchor(114,  -976,   166));
 
  242     footprint.push_back(
JAnchor(115, -1100,    11));
 
  243     footprint.push_back(
JAnchor(116, -1006,  -131));
 
  244     footprint.push_back(
JAnchor(117,  -867,  -332));
 
  245     footprint.push_back(
JAnchor(118,  -800,  -504));
 
  246     footprint.push_back(
JAnchor(119,  -706,  -593));
 
  247     footprint.push_back(
JAnchor(120,  -604,  -800));
 
  248     footprint.push_back(
JAnchor(121,  -503,  -933));
 
  249     footprint.push_back(
JAnchor(122,  -318,  -927));
 
  250     footprint.push_back(
JAnchor(123,  -177,  -926));
 
  251     footprint.push_back(
JAnchor(124,   -10,  -894));
 
  252     footprint.push_back(
JAnchor(125,   155,  -919));
 
  253     footprint.push_back(
JAnchor(126,   381,  -967));
 
  254     footprint.push_back(
JAnchor(127,   531,  -900));
 
  255     footprint.push_back(
JAnchor(128,  1091,   311));
 
  256     footprint.push_back(
JAnchor(129,  1061,  -285));
 
  257     footprint.push_back(
JAnchor(130,   966,   481));
 
  258     footprint.push_back(
JAnchor(131,   958,  -457));
 
  259     footprint.push_back(
JAnchor(132,   905,   658));
 
  260     footprint.push_back(
JAnchor(133,   863,  -630));
 
  261     footprint.push_back(
JAnchor(134,   788,   742));
 
  262     footprint.push_back(
JAnchor(135,   686,   911));
 
  263     footprint.push_back(
JAnchor(136,   277,  1113));
 
  264     footprint.push_back(
JAnchor(137,    92,  1094));
 
  265     footprint.push_back(
JAnchor(138,   -84,  1127));
 
  266     footprint.push_back(
JAnchor(139,  -302,  1062));
 
  267     footprint.push_back(
JAnchor(140,  -732,   892));
 
  268     footprint.push_back(
JAnchor(141,  -793,   761));
 
  269     footprint.push_back(
JAnchor(142,  -901,   661));
 
  270     footprint.push_back(
JAnchor(143, -1012,   456));
 
  271     footprint.push_back(
JAnchor(144, -1101,   280));
 
  272     footprint.push_back(
JAnchor(145, -1077,  -326));
 
  273     footprint.push_back(
JAnchor(146,  -973,  -457));
 
  274     footprint.push_back(
JAnchor(147,  -883,  -602));
 
  275     footprint.push_back(
JAnchor(148,  -822,  -771));
 
  276     footprint.push_back(
JAnchor(149,  -689,  -910));
 
  277     footprint.push_back(
JAnchor(150,  -457, -1066));
 
  278     footprint.push_back(
JAnchor(151,  -268, -1067));
 
  279     footprint.push_back(
JAnchor(152,   -58, -1080));
 
  280     footprint.push_back(
JAnchor(153,    72, -1100));
 
  281     footprint.push_back(
JAnchor(154,   280, -1081));
 
  285     for (deque<JAnchor>::iterator i = footprint.begin(); i != footprint.end(); ++i) {
 
  286       i->mul(
parameters.lineDistance_m * 0.5 / 90.0);
 
  289     if (
parameters.numberOfLines > footprint.size()) {
 
  290       FATAL(
"Available footprint inconsistent with specified number of lines " 
  291             << 
parameters.numberOfLines << 
" > " << footprint.size() << endl); 
 
  296     sort(footprint.begin(), footprint.end());
 
  299       while (
parameters.numberOfLines < footprint.size()) {
 
  300         footprint.pop_front();
 
  303       while (
parameters.numberOfLines < footprint.size()) {
 
  304         footprint.pop_back();
 
  310     for (deque<JAnchor>::iterator i = footprint.begin(); i != footprint.end(); ++i) {
 
  316   for (deque<JAnchor>::iterator i = footprint.begin(); i != footprint.end(); ++i) {
 
  317     DEBUG(i->getID() << 
' ' << i->getX() << 
' ' << i->getY() << endl);
 
  325   for (deque<JAnchor>::const_iterator anchor = footprint.begin(); anchor != footprint.end(); ++anchor) {
 
  332       const JLocation location(anchor->getID(), 0);
 
  334       const int id = demo.getModuleID(location);
 
  338       module.
set(position);
 
  340       detector.push_back(module);
 
  343     for (
unsigned int floor = 1; floor <= 
parameters.numberOfFloors; ++floor) {
 
  347                                Zmin_m + (floor - 1) * 
parameters.floorDistance_m);
 
  349       const JLocation location(anchor->getID(), floor);
 
  351       const int id = demo.getModuleID(location);
 
  355       if      (option == 
"ARCA" || option == 
"ORCA") 
 
  356         module = 
getModule(demo.get(
id), id, location);
 
  357       else if (option == 
"Antares") 
 
  360         FATAL(
"Invalid option " << option << endl);
 
  362       module.
add(position);
 
  364       for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt, ++
PMT) {
 
  369       detector.push_back(module);
 
JDetectorHeader getORCADetectorHeader()
Get detector header for ORCA. 
 
Utility class to parse command line options. 
 
Auxiliary class for I/O of JDetectorParameters data structure. 
 
int main(int argc, char *argv[])
 
Data structure for a composite optical module. 
 
static const double TBARZ_M
T-bar position relative to seabed [m]. 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance. 
 
static const char *const LD_LIBRARY_PATH
Nick names of environment variables. 
 
static const JPBS_t PMT(3, 4, 2, 3)
PBS of photo-multiplier tube (PMT) 
 
bool hasDetectorAddressMap(const int id)
Check if detector address map is available. 
 
*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
 
Lookup table for PMT addresses in detector. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Data structure for parameters for detector geometry. 
 
Data structure for detector geometry and calibration. 
 
Data structure for vector in three dimensions. 
 
Logical location of module. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
int getID() const 
Get identifier. 
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file. 
 
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map. 
 
General purpose messaging. 
 
Utility class to parse command line options. 
 
Auxiliary class for object identification. 
 
void setID(const int id)
Set identifier. 
 
JDetectorHeader getARCADetectorHeader()
Get detector header for ARCA. 
 
Data structure for anchor position on sea bed. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
std::string getFullFilename(const std::string &variable, const std::string &file_name)
Get full file name (see JEEP::getPath). 
 
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
 
JModule & set(const JVector3D &pos)
Set position. 
 
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number 
 
JModule & add(const JVector3D &pos)
Add position. 
 
#define DEBUG(A)
Message macros.