204 properties[
"focus"] = focus;
206 JParser<> zap(
"Auxiliary program to draw the footprint of detector(s).");
208 zap[
'w'] =
make_field(canvas,
"size of canvas <nx>x<ny> [pixels]") =
JCanvas(500, 500);
214 zap[
'L'] =
make_field(legend,
"position legend e.g. TR") =
"",
"TL",
"TR",
"BR",
"BL";
215 zap[
'S'] =
make_field(markerSize,
"marker size") = 1.0;
216 zap[
's'] =
make_field(textSize,
"text size") = 0.02;
217 zap[
'C'] =
make_field(drawCircle,
"draw smallest enclosing cicrle");
218 zap[
'A'] =
make_field(all,
"draw all modules");
219 zap[
'B'] =
make_field(batch,
"batch processing");
224 catch(
const exception &error) {
225 FATAL(error.what() << endl);
229 if (detectorFile.empty() && tripodsFile.empty()) {
230 FATAL(
"No detector elements." << endl);
234 gROOT->SetBatch(batch);
236 gErrorIgnoreLevel = kWarning;
238 TApplication* tp =
new TApplication(
"user", NULL, NULL);
239 TCanvas* cv =
new TCanvas(
"detector",
"", canvas.
x, canvas.
y);
243 gROOT->SetStyle(
"gplot");
246 cv->SetFillStyle(4000);
247 cv->SetFillColor(kWhite);
251 JMarkerAttributes::getInstance().setMarkerSize(markerSize);
254 TAttText(kHAlignLeft + kVAlignBottom, 0.25*PI, kBlack, 62, textSize),
255 TAttText(kHAlignRight + kVAlignBottom, 0.75*PI, kBlack, 62, textSize),
256 TAttText(kHAlignRight + kVAlignTop, 1.25*PI, kBlack, 62, textSize),
257 TAttText(kHAlignLeft + kVAlignTop, 1.75*PI, kBlack, 62, textSize)
264 for (
size_t i = 0; i != detectorFile.size(); ++i) {
275 position =
detector.getUTMPosition();
277 const TAttMarker& marker = *JMarkerAttributes::getInstance().next();
278 const TAttText&
text = text_attributes[(0+i)%text_attributes.size()];
287 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
289 if (module->getFloor() == 0) {
291 buffer.push_back(JPoint_t(
MAKE_STRING(module->getString()),
297 counter.insert(module->getString());
301 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
303 const bool status = (counter.count(module->getString()) == 0);
307 buffer.push_back(JPoint_t((status ?
MAKE_STRING(module->getString()) :
""),
313 counter.insert(module->getString());
318 for (
size_t i = 0; i != tripodsFile.size(); ++i) {
322 tripods.
load(tripodsFile[i].c_str());
324 const TAttMarker& marker = *JMarkerAttributes::getInstance().next();
325 const TAttText&
text = text_attributes[(0+i)%text_attributes.size()];
332 for (tripods_container::iterator i = tripods.begin(); i != tripods.end(); ++i) {
342 if (!transmittersFile.empty()) {
344 if (transmittersFile.size() == detectorFile.size()) {
346 for (
size_t i = 0; i != transmittersFile.size(); ++i) {
350 transmitters.
load(transmittersFile[i].c_str());
356 const TAttMarker& marker = *JMarkerAttributes::getInstance().next();
357 const TAttText&
text = text_attributes[(2+i)%text_attributes.size()];
361 offset = 3.0 * textSize *
JCircle2D(transmitters.begin(), transmitters.end()).
getRadius();
364 for (transmitters_container::iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
378 FATAL(
"Tranmitter files and detector files should match one-to-one." << endl);
385 copy(i->second.begin(), i->second.end(), back_inserter(buffer));
388 JCircle2D circle(buffer.begin(), buffer.end());
399 i->second.sub(circle.
getX(), circle.
getY());
409 const Double_t xmin = circle.
getX() - 1.15 * circle.
getRadius();
410 const Double_t xmax = circle.
getX() + 1.15 * circle.
getRadius();
411 const Double_t ymin = circle.
getY() - 1.15 * circle.
getRadius();
412 const Double_t ymax = circle.
getY() + 1.15 * circle.
getRadius();
414 TH2D h2(
"h2",
"", 200, xmin, xmax, 200, ymin, ymax);
416 h2.GetXaxis()->SetTitle(
"x [m]");
417 h2.GetYaxis()->SetTitle(
"y [m]");
419 h2.GetXaxis()->CenterTitle(
true);
420 h2.GetYaxis()->CenterTitle(
true);
438 Ssiz_t height = data.size();
442 width = max(width, (Ssiz_t) i->first.size());
445 TLegend* lg = getLegend(width, height, legend);
447 lg->SetTextSize(textSize);
450 if (!i->second.empty()) {
451 lg->AddEntry(&i->second[0].marker, i->first.c_str(),
"P");