7#include "TApplication.h" 
    9#include "TRootCanvas.h" 
   12#include "TGeoManager.h" 
   13#include "TGeoMatrix.h" 
   14#include "TGeoMaterial.h" 
   15#include "TGeoMedium.h" 
   16#include "TGeoVolume.h" 
   53             const TGeoShape*  shape,
 
   54             const TGeoMedium* med = 0) :
 
   55    TGeoVolume(name, shape, med)
 
 
   68    if        (event == kMouseEnter) {
 
   70      for (std::vector<std::string>::const_iterator i = 
buffer.begin(); i != 
buffer.end(); ++i)
 
   71        p1->AddText(i->c_str());
 
   76    } 
else if (event == kMouseLeave) {
 
   84      TGeoVolume::ExecuteEvent(event, px, py);
 
 
 
  119    JParser<> zap(
"Auxiliary program to draw a given module in 3D.");
 
  127  catch(
const exception &error) {
 
  128    FATAL(error.what() << endl);
 
  145    FATAL(
"Empty detector.");
 
  151  if (moduleID == -1) {
 
  153    module = detector.front();
 
  160      FATAL(
"Missing module " << moduleID << endl);
 
  162      module = router.getModule(moduleID);
 
  166  module -= module.getPosition();        
 
  173  TApplication* tp = 
new TApplication(
"user", NULL, NULL);
 
  175  c1 = 
new TCanvas(
"module", detectorFile.c_str(), 600, 600);
 
  176  p1 = 
new TPaveText(0.7, 0.9, 1.0, 1.0, 
"NB");
 
  178  ((TRootCanvas *) 
c1->GetCanvasImp())->Connect(
"CloseWindow()", 
"TApplication", tp, 
"Terminate()");
 
  183  p1->SetBorderSize(0);
 
  184  p1->SetTextSize(0.03);
 
  186  TGeoManager*  gGeoManager = 
new TGeoManager(
"geometry", 
"");
 
  188  TGeoMaterial* mat = 
new TGeoMaterial(
"vacuum", 0, 0, 0);
 
  189  TGeoMedium*   med = 
new TGeoMedium  (
"vacuum", 1, mat);
 
  190  TGeoVolume*   top = gGeoManager->MakeBox(
"top", med, 30.0, 30.0, 30.0);
 
  202  const double dz   =  3.0;  
 
  203  const double R1   =  2.0;  
 
  204  const double R2   =  4.0;  
 
  207  const Int_t color[] = { kRed, kOrange, kYellow, kGreen, kBlue, kMagenta };
 
  209  for (
unsigned int tdc = 0; tdc != 
module.size(); ++tdc) {
 
  212    const int                    index   = address.
ring     - 
'A';
 
  216    os[0] << 
"PMT " << setw(1) << address.
ring << setw(1) << address.
position;
 
  217    os[1] << 
"TDC " << setw(2) << tdc;
 
  219    TGeoVolumeAssembly* pPMT = 
new TGeoVolumeAssembly(
"PMT");
 
  224    for (
int i = 0; i != 
sizeof(os)/
sizeof(os[0]); ++i) {
 
  229    pTube->SetLineColor(color[index]);
 
  230    pCone->SetLineColor(color[index]);
 
  232    pPMT->AddNode(pTube, 0, 
new TGeoTranslation(0.0, 0.0, -dz));
 
  233    pPMT->AddNode(pCone, 1, 
new TGeoTranslation(0.0, 0.0, 0.0));
 
  235    const JPMT& pmt = 
module.getPMT(tdc);
 
  237    const Double_t x     = pmt.
getX() * 100;             
 
  238    const Double_t y     = pmt.
getY() * 100;             
 
  239    const Double_t z     = pmt.
getZ() * 100;             
 
  241    const Double_t theta = pmt.
getTheta() * 180.0 / PI;  
 
  242    const Double_t phi   = pmt.
getPhi()   * 180.0 / PI;  
 
  245          << setw(1) << address.
ring      
  246          << setw(1) << address.
position                  << 
" " 
  247          << setw(8) << pmt.
getID()                       << 
" " 
  249          << setw(2) << tdc                               << 
" " 
  250          << 
FIXED(3,0) << x     << 
" [cm] "  
  251          << 
FIXED(3,0) << y     << 
" [cm] "  
  252          << 
FIXED(3,0) << z     << 
" [cm] "  
  253          << 
FIXED(4,0) << theta << 
" [deg] "  
  254          << 
FIXED(4,0) << phi   << 
" [deg] "  
  257    TGeoRotation* rot = 
new TGeoRotation();
 
  262    top->AddNode(pPMT, tdc, 
new TGeoCombiTrans(x,y,z,rot));
 
  265  gGeoManager->SetTopVolume(top);
 
  266  gGeoManager->CloseGeometry();
 
  270  c1->GetView()->ShowAxis();
 
 
Data structure for detector geometry and calibration.
 
int main(int argc, char **argv)
 
TCanvas * c1
Global variables to handle mouse events.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Direct access to module in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
I/O formatting auxiliaries.
 
Lookup table for PMT addresses in detector.
 
const JModuleAddressMap & get(const int id) const
Get module address map.
 
Lookup table for PMT addresses in optical module.
 
const JPMTAddressTranslator & getAddressTranslator(const int tdc) const
Get PMT address translator.
 
Router for direct addressing of module data in detector data structure.
 
bool hasModule(const JObjectID &id) const
Has module.
 
Data structure for a composite optical module.
 
char ring
ring number ['A','F']
 
int position
position within ring [1,6]
 
Data structure for PMT geometry, calibration and status.
 
double getY() const
Get y position.
 
double getZ() const
Get z position.
 
double getX() const
Get x position.
 
double getTheta() const
Get theta angle.
 
double getPhi() const
Get phi angle.
 
void AddText(const std::string &text)
Add text to buffer.
 
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Mouse events.
 
JGeoVolume(const char *name, const TGeoShape *shape, const TGeoMedium *med=0)
Constructor.
 
std::vector< std::string > buffer
 
int getID() const
Get identifier.
 
Utility class to parse command line options.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
Data structure to translate PMT physical to readout address.