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.