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);
 
  241   JSinglePointer<TStyle> gStyle(
new JStyle(
"gplot", cv->GetWw(), cv->GetWh()));
 
  243   gROOT->SetStyle(
"gplot");
 
  246   cv->SetFillStyle(4000);
 
  247   cv->SetFillColor(kWhite);
 
  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)
 
  261   JUTMPosition          position;            
 
  264   for (
size_t i = 0; 
i != detectorFile.size(); ++
i) {
 
  269       load(detectorFile[
i], detector);
 
  271     catch(
const JException& error) {
 
  275     position = detector.getUTMPosition();
 
  278     const TAttText&   
text   =  text_attributes[(0+
i)%text_attributes.size()];
 
  282       offset =  3.0 * textSize * JCircle2D(detector.begin(), detector.end()).getRadius();
 
  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()),
 
  292                                   JPosition2D(module->getX(), module->getY()),
 
  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()) : 
""),
 
  308                                   JPosition2D(module->getX(), module->getY()),
 
  313         counter.insert(module->getString());
 
  318   for (
size_t i = 0; 
i != tripodsFile.size(); ++
i) {
 
  322     tripods.load(tripodsFile[
i].c_str());
 
  325     const TAttText&   text   =  text_attributes[(0+
i)%text_attributes.size()];
 
  329       offset =  3.0 * textSize * JCircle2D(tripods.begin(), tripods.end()).getRadius();
 
  332     for (tripods_container::iterator 
i = tripods.begin(); 
i != tripods.end(); ++
i) {
 
  335                                 JPosition2D(
i->getUTMEast() - position.getUTMEast(), 
i->getUTMNorth() - position.getUTMNorth()),
 
  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());
 
  354         load(detectorFile[
i], detector);
 
  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) {
 
  366           const JPosition3D pos = detector.getModule(
i->getLocation()).
getPosition();
 
  369                                     JPosition2D(pos.getX() + 
i->getX(), pos.getY() + 
i->getY()),
 
  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());              
 
  390   if (focus.getRadius() > 0.0) {
 
  394   NOTICE(
"focus = " << 
FIXED(12,3) << circle.getX() << 
' ' << 
FIXED(12,3) << circle.getY() << 
' ' << 
FIXED(9,3) << circle.getRadius() << endl);
 
  399     i->second.sub(circle.getX(), circle.getY());
 
  402   circle.sub(circle.getPosition());
 
  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);
 
  426   TEllipse ellipse(circle.getX(), circle.getY(), circle.getRadius());
 
  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"); 
 
Utility class to parse command line options. 
 
JContainer< std::vector< JTransmitter > > transmitters_container
 
Utility class to parse parameter values. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary data structure for floating point format specification. 
 
#define MAKE_STRING(A)
Make string. 
 
T & getInstance(const T &object)
Get static instance from temporary object. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
TLegend * getLegend(const Int_t width, const Int_t height, const std::string option, const Double_t factor=1.0)
Get legend. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
static const double PI
Mathematical constants. 
 
JContainer< std::vector< JTripod > > tripods_container
 
void load(const char *file_name)
Load from input file. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
void copy(const Head &from, JHead &to)
Copy header from from to to. 
 
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any. 
 
do set_variable DETECTOR_TXT $WORKDIR detector