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