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) {
159 if (!router.hasModule(moduleID)) {
160 FATAL(
"Missing module " << moduleID << endl);
162 module = router.getModule(moduleID);
166 module -= module.getPosition();
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.
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.
Lookup table for PMT addresses in optical module.
#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']
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
TCanvas * c1
Global variables to handle mouse events.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
int position
position within ring [1,6]
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
double getX() const
Get x position.
double getZ() const
Get z position.