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);
 
  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) {
 
  160       FATAL(
"Missing module " << moduleID << endl);
 
  173   TApplication* app = 
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");
 
  181   p1->SetBorderSize(0);
 
  182   p1->SetTextSize(0.03);
 
  184   TGeoManager*  gGeoManager = 
new TGeoManager(
"geometry", 
"");
 
  186   TGeoMaterial* mat = 
new TGeoMaterial(
"vacuum", 0, 0, 0);
 
  187   TGeoMedium*   med = 
new TGeoMedium  (
"vacuum", 1, mat);
 
  188   TGeoVolume*   top = gGeoManager->MakeBox(
"top", med, 30.0, 30.0, 30.0);
 
  200   const double dz   =  3.0;  
 
  201   const double R1   =  2.0;  
 
  202   const double R2   =  4.0;  
 
  205   const Int_t color[] = { kRed, kOrange, kYellow, kGreen, kBlue, kMagenta };
 
  207   for (
unsigned int tdc = 0; tdc != module.size(); ++tdc) {
 
  210     const int                    index   = address.
ring     - 
'A';
 
  214     os[0] << 
"PMT " << setw(1) << address.
ring << setw(1) << address.
position;
 
  215     os[1] << 
"TDC " << setw(2) << tdc;
 
  217     TGeoVolumeAssembly* pPMT = 
new TGeoVolumeAssembly(
"PMT");
 
  222     for (
int i = 0; i != 
sizeof(os)/
sizeof(os[0]); ++i) {
 
  227     pTube->SetLineColor(color[index]);
 
  228     pCone->SetLineColor(color[index]);
 
  230     pPMT->AddNode(pTube, 0, 
new TGeoTranslation(0.0, 0.0, -dz));
 
  231     pPMT->AddNode(pCone, 1, 
new TGeoTranslation(0.0, 0.0, 0.0));
 
  233     const JPMT& pmt = module.getPMT(tdc);
 
  235     const Double_t x     = pmt.
getX() * 100;             
 
  236     const Double_t y     = pmt.
getY() * 100;             
 
  237     const Double_t z     = pmt.
getZ() * 100;             
 
  239     const Double_t theta = pmt.
getTheta() * 180.0 / 
PI;  
 
  240     const Double_t phi   = pmt.
getPhi()   * 180.0 / 
PI;  
 
  243           << setw(1) << address.
ring      
  244           << setw(1) << address.
position                  << 
" " 
  246           << setw(2) << tdc                               << 
" " 
  247           << 
FIXED(3,0) << x     << 
" [cm] "  
  248           << 
FIXED(3,0) << y     << 
" [cm] "  
  249           << 
FIXED(3,0) << z     << 
" [cm] "  
  250           << 
FIXED(4,0) << theta << 
" [deg] "  
  251           << 
FIXED(4,0) << phi   << 
" [deg] "  
  254     TGeoRotation* rot = 
new TGeoRotation();
 
  259     top->AddNode(pPMT, tdc, 
new TGeoCombiTrans(x,y,z,rot));
 
  262   gGeoManager->SetTopVolume(top);
 
  263   gGeoManager->CloseGeometry();
 
  267   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 and calibration. 
 
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. 
 
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
 
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. 
 
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Mouse events.