7 #include "TApplication.h" 
   10 #include "TGeometry.h" 
   11 #include "TGeoManager.h" 
   12 #include "TGeoMatrix.h" 
   13 #include "TGeoMaterial.h" 
   14 #include "TGeoMedium.h" 
   15 #include "TGeoVolume.h" 
   18 #include "TPaveText.h" 
   52              const TGeoShape*  shape,
 
   53              const TGeoMedium* med = 0) :
 
   54     TGeoVolume(name, shape, med)
 
   67     if        (event == kMouseEnter) {
 
   70         p1->AddText(i->c_str());
 
   75     } 
else if (event == kMouseLeave) {
 
   83       TGeoVolume::ExecuteEvent(event, px, py);
 
  118     JParser<> zap(
"Auxiliary program to draw a given module in 3D.");
 
  126   catch(
const exception &error) {
 
  127     FATAL(error.what() << endl);
 
  144     FATAL(
"Empty detector.");
 
  150   if (moduleID == -1) {
 
  159       FATAL(
"Missing module " << moduleID << endl);
 
  172   TApplication* app = 
new TApplication(
"user", NULL, NULL);
 
  174   c1 = 
new TCanvas(
"module", detectorFile.c_str(), 600, 600);
 
  175   p1 = 
new TPaveText(0.7, 0.9, 1.0, 1.0, 
"NB");
 
  180   p1->SetBorderSize(0);
 
  181   p1->SetTextSize(0.03);
 
  183   TGeoManager*  gGeoManager = 
new TGeoManager(
"geometry", 
"");
 
  185   TGeoMaterial* mat = 
new TGeoMaterial(
"vacuum", 0, 0, 0);
 
  186   TGeoMedium*   med = 
new TGeoMedium  (
"vacuum", 1, mat);
 
  187   TGeoVolume*   top = gGeoManager->MakeBox(
"top", med, 30.0, 30.0, 30.0);
 
  199   const double dz   =  3.0;  
 
  200   const double R1   =  2.0;  
 
  201   const double R2   =  4.0;  
 
  204   const Int_t color[] = { kRed, kOrange, kYellow, kGreen, kBlue, kMagenta };
 
  206   for (
unsigned int tdc = 0; tdc != module.size(); ++tdc) {
 
  209     const int                    index   = address.
ring     - 
'A';
 
  213     os[0] << 
"PMT " << setw(1) << address.
ring << setw(1) << address.
position;
 
  214     os[1] << 
"TDC " << setw(2) << tdc;
 
  216     TGeoVolumeAssembly* pPMT = 
new TGeoVolumeAssembly(
"PMT");
 
  221     for (
int i = 0; i != 
sizeof(os)/
sizeof(os[0]); ++i) {
 
  226     pTube->SetLineColor(color[index]);
 
  227     pCone->SetLineColor(color[index]);
 
  229     pPMT->AddNode(pTube, 0, 
new TGeoTranslation(0.0, 0.0, -dz));
 
  230     pPMT->AddNode(pCone, 1, 
new TGeoTranslation(0.0, 0.0, 0.0));
 
  232     const JPMT& pmt = module.getPMT(tdc);
 
  234     const Double_t 
x     = pmt.
getX() * 100;             
 
  235     const Double_t y     = pmt.
getY() * 100;             
 
  236     const Double_t z     = pmt.
getZ() * 100;             
 
  238     const Double_t theta = pmt.
getTheta() * 180.0 / 
PI;  
 
  239     const Double_t phi   = pmt.
getPhi()   * 180.0 / 
PI;  
 
  242           << setw(1) << address.
ring      
  243           << setw(1) << address.
position                  << 
" " 
  245           << setw(2) << tdc                               << 
" " 
  246           << 
FIXED(3,0) << x     << 
" [cm] "  
  247           << 
FIXED(3,0) << y     << 
" [cm] "  
  248           << 
FIXED(3,0) << z     << 
" [cm] "  
  249           << 
FIXED(4,0) << theta << 
" [deg] "  
  250           << 
FIXED(4,0) << phi   << 
" [deg] "  
  253     TGeoRotation* rot = 
new TGeoRotation();
 
  258     top->AddNode(pPMT, tdc, 
new TGeoCombiTrans(x,y,z,rot));
 
  261   gGeoManager->SetTopVolume(top);
 
  262   gGeoManager->CloseGeometry();
 
  266   c1->GetView()->ShowAxis();
 
Utility class to parse command line options. 
 
void AddText(const std::string &text)
Add text to buffer. 
 
int main(int argc, char *argv[])
 
const JModule & getModule(const JObjectID &id) const 
Get module parameters. 
 
Data structure for a composite optical module. 
 
Router for direct addressing of module data in detector data structure. 
 
then echo Enter input within $TIMEOUT_S seconds echo n User name
 
Lookup table for PMT addresses in detector. 
 
Auxiliary data structure for floating point format specification. 
 
double getPhi() const 
Get phi angle. 
 
Data structure for detector geometry and calibration. 
 
std::vector< std::string > buffer
 
Lookup table for PMT addresses in optical module. 
 
I/O formatting auxiliaries. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
double getTheta() const 
Get theta angle. 
 
Data structure for PMT geometry, calibration and status. 
 
static const double PI
Mathematical constants. 
 
Data structure to translate PMT physical to readout address. 
 
double getY() const 
Get y position. 
 
char ring
ring number ['A','F'] 
 
const JPosition3D & getPosition() const 
Get position. 
 
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map. 
 
General purpose messaging. 
 
Direct access to module in detector data structure. 
 
TCanvas * c1
Global variables to handle mouse events. 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
Utility class to parse command line options. 
 
int position
position within ring [1,6] 
 
JGeoVolume(const char *name, const TGeoShape *shape, const TGeoMedium *med=0)
Constructor. 
 
bool hasModule(const JObjectID &id) const 
Has module. 
 
double getX() const 
Get x position. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
double getZ() const 
Get z position. 
 
#define DEBUG(A)
Message macros. 
 
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Mouse events.