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");