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));
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 <<
" "
244 << setw(8) << pmt.
getID() <<
" "
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();
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.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
bool hasModule(const JObjectID &id) const
Has module.
Data structure for a composite optical module.
const JPMT & getPMT(const int index) const
Get PMT.
char ring
ring number ['A','F']
int position
position within ring [1,6]
Data structure for PMT geometry, calibration and status.
const JPosition3D & getPosition() const
Get position.
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.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
static const double PI
Mathematical constants.
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.