47   JDetectorParameters  parameters;
 
   54   parameters.detectorType    =   1;    
 
   55   parameters.floorDistance_m =  36.0;  
 
   56   parameters.numberOfFloors  =  18;    
 
   57   parameters.lineDistance_m  =  90.0;  
 
   58   parameters.numberOfLines   = 115;    
 
   62     JParser<> zap(
"Auxiliary program to generate detector files.");
 
   64     JDetectorParametersHelper helper(parameters);
 
   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);
 
   82   JDetectorHeader header;
 
   86   else if (option == 
"ORCA") 
 
   88   else if (option == 
"Antares") 
 
   91     FATAL(
"Invalid option " << option << endl);
 
   94   JDetector detector(detectorID, variant, header);
 
   97     FATAL(
"No detector address map for detector identifier " << detector.getID() << endl);
 
  100   detector.comment.add(JMeta(argc,argv));
 
  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());
 
  298     if (parameters.detectorType == 2) {  
 
  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) {
 
  311       static_cast<JObjectID&>(*i) = JObjectID(
distance(footprint.begin(),i) + 1);
 
  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) {
 
  329     for (
unsigned int floor = 1; floor <= parameters.numberOfFloors; ++floor) {
 
  331       const JVector3D position(anchor->getX(), 
 
  333                                Zmin_m + (floor - 1) * parameters.floorDistance_m);
 
  335       const JModuleLocation location(anchor->getID(), floor);
 
  337       const int id = demo.getModuleID(location);
 
  341       if      (option == 
"ARCA" || option == 
"ORCA") 
 
  342         module = 
getModule(demo.get(
id), id, location);
 
  343       else if (option == 
"Antares") 
 
  346         FATAL(
"Invalid option " << option << endl);
 
  348       module.add(position);
 
  350       for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt, ++
PMT) {
 
  355       detector.push_back(module);
 
  365   catch(
const JException& error) {