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