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.
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.
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.
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.
int main(int argc, char *argv[])