StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
FtpcDisplay.C
1 #include "TCanvas.h"
2 #include "TNode.h"
3 #include "TTUBE.h"
4 #include "TTUBS.h"
5 #include "TBRIK.h"
6 #include "TFile.h"
7 #include "TPolyMarker3D.h"
8 #include "TPolyLine3D.h"
9 #include "TControlBar.h"
10 #include <iostream.h>
11 
12 Int_t openFile(Char_t *name);
13 void drawControlPanel(Int_t tracks, Int_t found, Int_t unused);
14 void showNode();
15 void deleteNode();
16 void deleteAxis();
17 void showFoundCluster(Bool_t clusters);
18 void showUnusedCluster(Bool_t clusters);
19 void showTracks(Bool_t tracks);
20 void createDependencies();
21 void toggleFoundClusterVisibility();
22 void toggleUnusedClusterVisibility();
23 void toggleTrackVisibility();
24 void toggleAxisVisibility();
25 void toggleFrameVisibility();
26 void toggleDeadAreaVisibility();
27 void togglePadVisibility();
28 void detectorOn();
29 void detectorOff();
30 void measurementsOn();
31 void measurementsOff();
32 void setFrameVisibility();
33 void setPadVisibility();
34 void setDeadAreaVisibility();
35 void setDefaults();
36 void defineDefaults();
37 void toggleFrameDensity();
38 void setFrameDensity();
39 void clear();
40 void show(Int_t s, Bool_t erase = kTRUE);
41 void showAll();
42 void showEast();
43 void showWest();
44 void showBoth();
45 void showAxis();
46 void generateAxis(Float_t arrowSize);
47 void closeX3d();
48 void quit();
49 
50 TBRIK *origin;
51 TTUBE *ftpc1_out, *ftpc2_out, *ftpc1_in, *ftpc2_in;
52 TTUBS *dead_seg1, *dead_seg2, *dead_seg3, *dead_seg4, *dead_seg5, *dead_seg6;
53 TTUBS *padrow1, *padrow2, *padrow3, *padrow4, *padrow5, *padrow6;
54 TNode *node0, *node1, *node2, *node01_out, *node01_in, *node02_out, *node02_in, *node1_out, *node1_in, *node2_out, *node2_in;
55 TNode *node01_seg1, *node01_seg2, *node01_seg3, *node01_seg4, *node01_seg5, *node01_seg6;
56 TNode *node02_seg1, *node02_seg2, *node02_seg3, *node02_seg4, *node02_seg5, *node02_seg6;
57 TNode *node1_seg1, *node1_seg2, *node1_seg3, *node1_seg4, *node1_seg5, *node1_seg6;
58 TNode *node2_seg1, *node2_seg2, *node2_seg3, *node2_seg4, *node2_seg5, *node2_seg6;
59 TNode *node01_pad01, *node01_pad11, *node01_pad21, *node01_pad31, *node01_pad41, *node01_pad51, *node01_pad61, *node01_pad71, *node01_pad81, *node01_pad91;
60 TNode *node01_pad02, *node01_pad12, *node01_pad22, *node01_pad32, *node01_pad42, *node01_pad52, *node01_pad62, *node01_pad72, *node01_pad82, *node01_pad92;
61 TNode *node01_pad03, *node01_pad13, *node01_pad23, *node01_pad33, *node01_pad43, *node01_pad53, *node01_pad63, *node01_pad73, *node01_pad83, *node01_pad93;
62 TNode *node01_pad04, *node01_pad14, *node01_pad24, *node01_pad34, *node01_pad44, *node01_pad54, *node01_pad64, *node01_pad74, *node01_pad84, *node01_pad94;
63 TNode *node01_pad05, *node01_pad15, *node01_pad25, *node01_pad35, *node01_pad45, *node01_pad55, *node01_pad65, *node01_pad75, *node01_pad85, *node01_pad95;
64 TNode *node01_pad06, *node01_pad16, *node01_pad26, *node01_pad36, *node01_pad46, *node01_pad56, *node01_pad66, *node01_pad76, *node01_pad86, *node01_pad96;
65 TNode *node02_pad01, *node02_pad11, *node02_pad21, *node02_pad31, *node02_pad41, *node02_pad51, *node02_pad61, *node02_pad71, *node02_pad81, *node02_pad91;
66 TNode *node02_pad02, *node02_pad12, *node02_pad22, *node02_pad32, *node02_pad42, *node02_pad52, *node02_pad62, *node02_pad72, *node02_pad82, *node02_pad92;
67 TNode *node02_pad03, *node02_pad13, *node02_pad23, *node02_pad33, *node02_pad43, *node02_pad53, *node02_pad63, *node02_pad73, *node02_pad83, *node02_pad93;
68 TNode *node02_pad04, *node02_pad14, *node02_pad24, *node02_pad34, *node02_pad44, *node02_pad54, *node02_pad64, *node02_pad74, *node02_pad84, *node02_pad94;
69 TNode *node02_pad05, *node02_pad15, *node02_pad25, *node02_pad35, *node02_pad45, *node02_pad55, *node02_pad65, *node02_pad75, *node02_pad85, *node02_pad95;
70 TNode *node02_pad06, *node02_pad16, *node02_pad26, *node02_pad36, *node02_pad46, *node02_pad56, *node02_pad66, *node02_pad76, *node02_pad86, *node02_pad96;
71 TNode *node1_pad01, *node1_pad11, *node1_pad21, *node1_pad31, *node1_pad41, *node1_pad51, *node1_pad61, *node1_pad71, *node1_pad81, *node1_pad91;
72 TNode *node1_pad02, *node1_pad12, *node1_pad22, *node1_pad32, *node1_pad42, *node1_pad52, *node1_pad62, *node1_pad72, *node1_pad82, *node1_pad92;
73 TNode *node1_pad03, *node1_pad13, *node1_pad23, *node1_pad33, *node1_pad43, *node1_pad53, *node1_pad63, *node1_pad73, *node1_pad83, *node1_pad93;
74 TNode *node1_pad04, *node1_pad14, *node1_pad24, *node1_pad34, *node1_pad44, *node1_pad54, *node1_pad64, *node1_pad74, *node1_pad84, *node1_pad94;
75 TNode *node1_pad05, *node1_pad15, *node1_pad25, *node1_pad35, *node1_pad45, *node1_pad55, *node1_pad65, *node1_pad75, *node1_pad85, *node1_pad95;
76 TNode *node1_pad06, *node1_pad16, *node1_pad26, *node1_pad36, *node1_pad46, *node1_pad56, *node1_pad66, *node1_pad76, *node1_pad86, *node1_pad96;
77 TNode *node2_pad01, *node2_pad11, *node2_pad21, *node2_pad31, *node2_pad41, *node2_pad51, *node2_pad61, *node2_pad71, *node2_pad81, *node2_pad91;
78 TNode *node2_pad02, *node2_pad12, *node2_pad22, *node2_pad32, *node2_pad42, *node2_pad52, *node2_pad62, *node2_pad72, *node2_pad82, *node2_pad92;
79 TNode *node2_pad03, *node2_pad13, *node2_pad23, *node2_pad33, *node2_pad43, *node2_pad53, *node2_pad63, *node2_pad73, *node2_pad83, *node2_pad93;
80 TNode *node2_pad04, *node2_pad14, *node2_pad24, *node2_pad34, *node2_pad44, *node2_pad54, *node2_pad64, *node2_pad74, *node2_pad84, *node2_pad94;
81 TNode *node2_pad05, *node2_pad15, *node2_pad25, *node2_pad35, *node2_pad45, *node2_pad55, *node2_pad65, *node2_pad75, *node2_pad85, *node2_pad95;
82 TNode *node2_pad06, *node2_pad16, *node2_pad26, *node2_pad36, *node2_pad46, *node2_pad56, *node2_pad66, *node2_pad76, *node2_pad86, *node2_pad96;
83 
84 Int_t side, def_side = 1;
85 Bool_t axis, def_axis = kTRUE;
86 Bool_t pads, def_pads = kFALSE;
87 Bool_t frame_on, def_frame_on = kTRUE;
88 Bool_t dead_area, def_dead_area = kFALSE;
89 Bool_t divisions, def_divisions = kFALSE;
90 Int_t divi = 50;
91 Int_t divipad = 16;
92 Bool_t foundclusters, def_foundclusters = kTRUE;
93 Bool_t unusedclusters, def_unusedclusters = kTRUE;
94 Bool_t tracks, def_tracks = kTRUE;
95 
96 TControlBar *bar;
97 TCanvas *canvas;
98 TFile *file;
99 Int_t tr, fo, un;
100 TPolyLine3D *lx[3], *ly[3], *lz[3];
101 
102 
103 Int_t FtpcDisplay(Char_t *filename = 0)
104 {
105  // Display for ftpc track reconstruction. It needs an input file generated by StFtpcDisplay.
106  // This you get by uncommenting the 'Track Display' block in StFtpcTrackmaker.cxx.
107 
108  if (openFile(filename) == 0) {
109 
110  // create 3 canvases (for +, -, and both Ftpcs)
111  canvas = new TCanvas("canvas", "3D views of FTPC", 300, 100);
112  canvas->Divide(3,1);
113 
114  // create point of origin (our vertex has the shape of a cube, of course)
115  origin = new TBRIK("origin", "origin", "void", 0.1, 0.1, 0.1);
116 
117  // create 3 nodes (+, -, both) to generate the dependencies of the different geometric shapes
118  node0 = new TNode("node0", "node0", "origin");
119  node1 = new TNode("node1", "node1", "origin");
120  node2 = new TNode("node2", "node2", "origin");
121 
122  generateAxis(70.);
123 
124  setDefaults();
125  showAll();
126  drawControlPanel(tr, fo, un);
127 
128  return 0;
129  }
130 
131  else {
132  return -1;
133  }
134 
135  return 0;
136 }
137 
138 void setDefaults() {
139  // Set default settings.
140 
141  axis = def_axis;
142 
143  frame_on = def_frame_on;
144  dead_area = def_dead_area;
145  pads = def_pads;
146  divisions = def_divisions;
147 
148  tracks = def_tracks;
149  unusedclusters = def_unusedclusters;
150  foundclusters = def_foundclusters;
151 
152  side = def_side;
153 }
154 
155 void defineDefaults() {
156  // Define default settings.
157 
158  def_axis = axis;
159 
160  def_frame_on = frame_on;
161  def_dead_area = dead_area;
162  def_pads = pads;
163  def_divisions = divisions;
164 
165  def_tracks = tracks;
166  def_unusedclusters = unusedclusters;
167  def_foundclusters = foundclusters;
168 
169  def_side = side;
170 }
171 
172 Int_t openFile(Char_t *name) {
173  // Opens the file with the given name or "ftpc_display.root" by default.
174 
175  if (!name) {
176  file = new TFile("ftpc_display.root", "READ");
177 
178  if (!file->IsOpen()) {
179  cout << "Sorry, file (ftpc_display.root) not found!" << endl;
180  return -1;
181  }
182  }
183 
184  else {
185  file = new TFile(name, "READ");
186 
187  if (!file->IsOpen()) {
188  cout << "Sorry, file (" << name << ") not found!" << endl;
189  return -1;
190  }
191  }
192 
193  return 0;
194 }
195 
196 void showNode() {
197  // Draws nodes in correct pads.
198 
199  canvas->cd(1);
200  node0->cd();
201  node0->Draw("same");
202  canvas->cd(2);
203  node2->cd();
204  node2->Draw("same");
205  canvas->cd(3);
206  node1->cd();
207  node1->Draw("same");
208 }
209 
210 void showAxis() {
211  // Draws axis.
212 
213  Int_t s;
214 
215  if (axis) {
216 
217  for (s = 0; s < 3; s++) {
218  canvas->cd(s+1);
219  lx[s]->Draw("same");
220  ly[s]->Draw("same");
221  lz[s]->Draw("same");
222  }
223  }
224 }
225 
226 void showTracks(Bool_t tracks) {
227  // Shows tracks if 'tracks' is true.
228 
229  if (tracks) {
230  TPolyLine3D *l;
231  Int_t l_count = 1;
232  Char_t name[20];
233  sprintf(name, "TPolyLine3D;%d", l_count);
234 
235  while ((l = (TPolyLine3D *)file->Get(name))) {
236  Float_t *coord = l->GetP();
237 
238  if (coord[2] > 0.) {
239  canvas->cd(3);
240  }
241 
242  else {
243  canvas->cd(2);
244  }
245 
246  l->Draw("same");
247  canvas->cd(1);
248  l->Draw("same");
249 
250  sprintf(name, "TPolyLine3D;%d", ++l_count);
251  }
252 
253  tr = l_count - 1;
254  }
255 }
256 
257 void showFoundCluster(Bool_t clusters) {
258  // Shows found clusters if 'clusters' is true.
259 
260  if (clusters) {
261  TPolyMarker3D *p;
262 
263  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;2");
264 
265  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
266  canvas->cd(3);
267  p->Draw("same");
268  }
269 
270  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;3");
271 
272  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
273  canvas->cd(2);
274  p->Draw("same");
275  }
276 
277  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;1");
278 
279  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
280  canvas->cd(1);
281  p->Draw("same");
282  }
283 
284  fo = p->Size();
285  }
286 }
287 
288 void showUnusedCluster(Bool_t clusters) {
289  // Shows unused clusters if 'clusters' is true.
290 
291  if (clusters) {
292  TPolyMarker3D *p;
293 
294  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;5");
295 
296  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
297  canvas->cd(3);
298  p->Draw("same");
299  }
300 
301  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;6");
302 
303  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
304  canvas->cd(2);
305  p->Draw("same");
306  }
307 
308  p = (TPolyMarker3D *)file->Get("TPolyMarker3D;4");
309 
310  if (p->Size() > 1) { // to avoid crashes due to ROOT problem
311  canvas->cd(1);
312  p->Draw("same");
313  }
314 
315  un = p->Size();
316  }
317 }
318 
319 void deleteAxis() {
320  // Deletes axis.
321 
322  for (Int_t i = 0; i < 3; i++) {
323  delete lx[i];
324  delete ly[i];
325  delete lz[i];
326  }
327 }
328 
329 void toggleAxisVisibility() {
330  // Switchs axis visibility.
331 
332  axis = !axis;
333  clear();
334  showAll();
335 }
336 
337 void toggleFoundClusterVisibility() {
338  // Switchs found cluster visibility.
339 
340  foundclusters = !foundclusters;
341  clear();
342  showAll();
343 }
344 
345 void toggleUnusedClusterVisibility() {
346  // Switchs unused cluster visibility.
347 
348  unusedclusters = !unusedclusters;
349  clear();
350  showAll();
351 }
352 
353 void toggleTrackVisibility() {
354  // Switchs track visibility.
355 
356  tracks = !tracks;
357  clear();
358  showAll();
359 }
360 
361 void detectorOn() {
362  // Switchs complete detector to visibile.
363 
364  if (!frame_on) {
365  frame_on = kTRUE;
366  //setFrameVisibility();
367  }
368 
369  if (!pads) {
370  pads = kTRUE;
371  //setPadVisibility();
372  }
373 
374  if (!dead_area) {
375  dead_area = kTRUE;
376  //setDeadAreaVisibility();
377  }
378 
379  clear();
380  showAll();
381 }
382 
383 void detectorOff() {
384  // Switchs complete detector to visibile.
385 
386  if (frame_on) {
387  frame_on = kFALSE;
388  //setFrameVisibility();
389  }
390 
391  if (pads) {
392  pads = kFALSE;
393  //setPadVisibility();
394  }
395 
396  if (dead_area) {
397  dead_area = kFALSE;
398  //setDeadAreaVisibility();
399  }
400 
401  clear();
402  showAll();
403 }
404 
405 void measurementsOn() {
406  // Switchs all clusters and tracks on.
407 
408  if (!tracks) tracks = kTRUE;
409  if (!unusedclusters) unusedclusters = kTRUE;
410  if (!foundclusters) foundclusters = kTRUE;
411 
412  clear();
413  showAll();
414 }
415 
416 void measurementsOff() {
417  // Switchs all clusters and tracks off.
418 
419  if (tracks) tracks = kFALSE;
420  if (unusedclusters) unusedclusters = kFALSE;
421  if (foundclusters) foundclusters = kFALSE;
422 
423  clear();
424  showAll();
425 }
426 
427 void showAll() {
428  // Shows all stuff in correct pads.
429 
430  createDependencies();
431  setFrameDensity();
432  setFrameVisibility();
433  setDeadAreaVisibility();
434  setPadVisibility();
435  showNode();
436  showTracks(tracks);
437  showFoundCluster(foundclusters);
438  showUnusedCluster(unusedclusters);
439  showAxis();
440  canvas->Update();
441  show(side, kFALSE);
442 }
443 
444 void clear() {
445  // Closes x3d view and clears canvas.
446 
447  closeX3d();
448  canvas->Clear();
449  deleteNode();
450  canvas->Divide(3,1);
451 }
452 
453 void toggleFrameVisibility() {
454  // Switchs FTPC frame visibility.
455 
456  frame_on = !frame_on;
457  setFrameVisibility();
458  show(side);
459 }
460 
461 void toggleDeadAreaVisibility() {
462  // Switchs FTPC dead area visibility.
463 
464  dead_area = !dead_area;
465  setDeadAreaVisibility();
466  show(side);
467 }
468 
469 void togglePadVisibility() {
470  // Switchs FTPC pad visibility.
471 
472  pads = !pads;
473  setPadVisibility();
474  show(side);
475 }
476 
477 void setFrameVisibility() {
478  // Sets frame visibility.
479 
480  ftpc1_out->SetVisibility(frame_on);
481  ftpc2_out->SetVisibility(frame_on);
482  ftpc1_in->SetVisibility(frame_on);
483  ftpc2_in->SetVisibility(frame_on);
484 }
485 
486 void setDeadAreaVisibility() {
487  // Sets dead area visibility.
488 
489  dead_seg1->SetVisibility(dead_area);
490  dead_seg2->SetVisibility(dead_area);
491  dead_seg3->SetVisibility(dead_area);
492  dead_seg4->SetVisibility(dead_area);
493  dead_seg5->SetVisibility(dead_area);
494  dead_seg6->SetVisibility(dead_area);
495 }
496 
497 void setPadVisibility() {
498  // Sets pad visibility.
499 
500  padrow1->SetVisibility(pads);
501  padrow2->SetVisibility(pads);
502  padrow3->SetVisibility(pads);
503  padrow4->SetVisibility(pads);
504  padrow5->SetVisibility(pads);
505  padrow6->SetVisibility(pads);
506 }
507 
508 void toggleFrameDensity() {
509  // Switchs number of divisions of FTPC frames.
510 
511  if (divisions) {
512  divisions = !divisions;
513  divi = 50;
514  divipad = 16;
515  }
516 
517  else {
518  divisions = !divisions;
519  divi = 250;
520  divipad = 160;
521  }
522 
523  setFrameDensity();
524  show(side);
525 }
526 
527 void setFrameDensity() {
528  // Sets number of divisions of FTPC frames.
529 
530  ftpc1_out->SetNumberOfDivisions(divi);
531  ftpc2_out->SetNumberOfDivisions(divi);
532  ftpc1_in->SetNumberOfDivisions(divi);
533  ftpc2_in->SetNumberOfDivisions(divi);
534 
535  dead_seg1->SetNumberOfDivisions(1);
536  dead_seg2->SetNumberOfDivisions(1);
537  dead_seg3->SetNumberOfDivisions(1);
538  dead_seg4->SetNumberOfDivisions(1);
539  dead_seg5->SetNumberOfDivisions(1);
540  dead_seg6->SetNumberOfDivisions(1);
541 
542  padrow1->SetNumberOfDivisions(divipad);
543  padrow2->SetNumberOfDivisions(divipad);
544  padrow3->SetNumberOfDivisions(divipad);
545  padrow4->SetNumberOfDivisions(divipad);
546  padrow5->SetNumberOfDivisions(divipad);
547  padrow6->SetNumberOfDivisions(divipad);
548 }
549 
550 void show(Int_t s, Bool_t erase) {
551  // Actual display routine.
552 
553  if (erase) {
554  closeX3d();
555  }
556 
557  canvas->cd(s);
558  gPad->x3d();
559  side = s;
560 }
561 
562 void showEast() {
563  // Shows east FTPC.
564 
565  if (side != 2) {
566  show(2);
567  }
568 }
569 
570 void showWest() {
571  // Shows west FTPC.
572 
573  if (side != 3) {
574  show(3);
575  }
576 }
577 
578 void showBoth() {
579  // Shows both FTPCs.
580 
581  if (side != 1) {
582  show(1);
583  }
584 }
585 
586 void closeX3d() {
587  // Closes x3d view.
588 
589  gROOT->ProcessLine("R__x3d->CloseWindow()");
590 }
591 
592 void quit() {
593  // Quits ROOT.
594 
595  gROOT->ProcessLine(".q");
596 }
597 
598 void close() {
599  // Closes everything.
600 
601  closeX3d();
602  canvas->Clear();
603  deleteNode();
604  deleteAxis();
605 
606  file->Close();
607  delete file;
608  delete bar;
609  delete canvas;
610 }
611 
612 void drawControlPanel(Int_t tracks, Int_t found, Int_t unused) {
613  // Control panel generation.
614 
615  Char_t n1[40];
616  Char_t n2[40];
617  Char_t n3[40];
618 
619  sprintf(n1, "tracks (%d) [green]", tr);
620  sprintf(n2, "clusters on tracks (%d) [red]", fo);
621  sprintf(n3, "unused clusters (%d) [yellow]", un);
622 
623  bar = new TControlBar("vertical", "3D view control bar");
624 
625  bar->AddButton("show both FTPCs", "showBoth();", "3D view of both FTPCs");
626  bar->AddButton("show FTPC east", "showEast();", "3D view of FTPC east");
627  bar->AddButton("show FTPC west", "showWest();", "3D view FTPC of west");
628  bar->AddButton("ALL MEASUREMENTS ON", "measurementsOn();", "switchs all clusters and tracks on");
629  bar->AddButton("ALL MEASUREMENTS OFF", "measurementsOff();", "switchs all clusters and tracks off");
630  bar->AddButton(n1, "toggleTrackVisibility();", "switchs tracks on/off");
631  bar->AddButton(n2, "toggleFoundClusterVisibility();", "switchs found clusters on/off");
632  bar->AddButton(n3, "toggleUnusedClusterVisibility();", "switchs unused clusters on/off");
633  bar->AddButton("DETECTOR ON", "detectorOn();", "switchs complete detector on");
634  bar->AddButton("DETECTOR OFF", "detectorOff();", "switchs complete detector off");
635  bar->AddButton("frame [blue] visibility", "toggleFrameVisibility();", "switchs frames on/off");
636  bar->AddButton("pad [yellow] visibility", "togglePadVisibility();", "switchs pads on/off");
637  bar->AddButton("dead segments [red] visibility", "toggleDeadAreaVisibility();", "switchs dead segments on/off");
638  bar->AddButton("line density","toggleFrameDensity();", "switchs frame grid density");
639  bar->AddButton("axis (x,y,z) = (yellow, green, red)", "toggleAxisVisibility();", "switchs axis visibility");
640  bar->AddButton("BACK TO DEFAULT SETTINGS", "setDefaults(); clear(); showAll();", "resets all changes");
641  bar->AddButton("set default settings", "defineDefaults();", "defines current settings as default");
642  bar->AddButton("close x3d display", "close();", "closes x3d window and control panel");
643  bar->AddButton("quit ROOT", "quit();", "quits ROOT");
644 
645  bar->Show();
646 }
647 
648 void generateAxis(Float_t arrowSize) {
650  // //
651  // generateAxis() draws three axice Ox, Oy, Oz with three different colors: //
652  // red gree blue //
653  // TVirtualPad - the point to TPad objest these axice will be drawn into //
654  // = 0 (= gPad, by default) //
655  // //
657 
658 
659  // 3 options for the origin positions
660  // - at (0,0,0}
661  // - left front angle of the view port
662  // - the center of the view port
663  // Axis / Cube
664 
665  // const Float_t arrowLegthFactor = 0.25;
666  const Float_t arrowWidthFactor = 0.25;
667 
668  Float_t origin[3] = {0,0,0};
669  Float_t x = 0;
670  Float_t y = 0;
671  Float_t z = 0;
672  Int_t indx = 0;
673 
674  // caclulate an arrow size
675  const Float_t arrowHeadLegth = 0.2*arrowSize;
676  const Float_t arrWidth = arrowWidthFactor*arrowHeadLegth;
677  //___________ X axis ____________
678 
679  for (Int_t ii = 0; ii < 3; ii++) {
680  indx = 0;
681 
682  lx[ii] = new TPolyLine3D(5,"L");
683  x = origin[0];
684  y = origin[1];
685  z = origin[2];
686  lx[ii]->SetNextPoint(x,y,z); // initial point
687  x += arrowSize;
688  lx[ii]->SetNextPoint(x,y,z); // --------
689  //____________ x_head ____________
690  x -= arrowHeadLegth;
691  y += arrWidth; //
692  lx[ii]->SetNextPoint(x,y,z); // --------
693  x = origin[indx] + arrowSize;
694  y = origin[1];
695  lx[ii]->SetNextPoint(x,y,z); // go back
696  x -= arrowHeadLegth;
697  y -= arrWidth; //
698  lx[ii]->SetNextPoint(x,y,z); // --------> finish it
699  //
700  lx[ii]->SetLineColor(kYellow);
701 
702  //___________ Y axis ____________
703  indx++;
704  ly[ii] = new TPolyLine3D(5,"L");
705  x = origin[0];
706  y = origin[1];
707  z = origin[2];
708  ly[ii]->SetNextPoint(x,y,z); // initial point
709  y = origin[indx] + arrowSize;
710  ly[ii]->SetNextPoint(x,y,z); // --------
711  //____________ y_head ____________
712  y -= arrowHeadLegth;
713  x += arrWidth; //
714  ly[ii]->SetNextPoint(x,y,z); // --------
715  x = origin[0];
716  y = origin[indx] + arrowSize;
717  ly[ii]->SetNextPoint(x,y,z); // go back
718  y -= arrowHeadLegth;
719  x -= arrWidth; //
720  ly[ii]->SetNextPoint(x,y,z); // --------> finish it
721  //
722  ly[ii]->SetLineColor(kGreen);
723 
724  //___________ Z axis ____________
725  indx++;
726  lz[ii] = new TPolyLine3D(5,"L");
727  x = origin[0];
728  y = origin[1];
729  z = origin[2];
730  lz[ii]->SetNextPoint(x,y,z); // initial point
731  z += arrowSize;
732  lz[ii]->SetNextPoint(x,y,z); // --------
733  //____________ z_head ____________
734  z -= arrowHeadLegth;
735  x += arrWidth; //
736  lz[ii]->SetNextPoint(x,y,z); // --------
737  x = origin[0];
738  z = origin[indx] + arrowSize;
739  lz[ii]->SetNextPoint(x,y,z); // go back
740  z -= arrowHeadLegth;
741  x -= arrWidth; //
742  lz[ii]->SetNextPoint(x,y,z); // --------> finish it
743  lz[ii]->SetLineColor(kRed);
744  }
745 }
746 
747 void createDependencies() {
748  // Creates deoencies of different shapes for the specific nodes.
749 
750  Float_t inner_radius = 7.73;
751  Float_t outer_radius = 30.05;
752  Float_t padlength = 2.;
753  Float_t z_first = 162.75 - 7.5;
754  Float_t z_last = 256.45 + 7.5;
755  Float_t z[10] = {162.75, 171.25, 184.05, 192.55, 205.35, 213.85, 226.65, 235.15, 247.95, 256.45};
756 
757  // dead segments and padrows
758 
759  Float_t dead_angle = outer_radius/8./TMath::Pi()*1.6;
760  Float_t used_angle = 30.-dead_angle;
761  Float_t angle = 30.;
762 
763  dead_seg1 = new TTUBS("dead_seg1", "dead_seg1", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
764  padrow1 = new TTUBS("padrow1", "padrow1", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
765  angle += 60.;
766  dead_seg2 = new TTUBS("dead_seg2", "dead_seg2", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
767  padrow2 = new TTUBS("padrow2", "padrow2", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
768  angle += 60.;
769  dead_seg3 = new TTUBS("dead_seg3", "dead_seg3", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
770  padrow3 = new TTUBS("padrow3", "padrow3", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
771  angle += 60.;
772  dead_seg4 = new TTUBS("dead_seg4", "dead_seg4", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
773  padrow4 = new TTUBS("padrow4", "padrow4", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
774  angle += 60.;
775  dead_seg5 = new TTUBS("dead_seg5", "dead_seg5", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
776  padrow5 = new TTUBS("padrow5", "padrow5", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
777  angle += 60.;
778  dead_seg6 = new TTUBS("dead_seg6", "dead_seg6", "void", inner_radius, outer_radius, (z[9]-z[0]+padlength)/2., -dead_angle+angle, dead_angle+angle);
779  padrow6 = new TTUBS("padrow6", "padrow6", "void", outer_radius, outer_radius, padlength, -used_angle+angle - 30., used_angle+angle - 30.);
780  angle += 60.;
781 
782  // create 4 tubes (cylinders) - two big ones (out) and two small ones (in) - to draw the Ftpcs
783  ftpc1_out = new TTUBE("ftpc1_out", "Ftpc + (out)", "void", outer_radius, outer_radius, (z_last-z_first)/2., 1);
784  ftpc1_in = new TTUBE("ftpc1_in", "Ftpc + (in)", "void", inner_radius, inner_radius, (z_last-z_first)/2., 1);
785  ftpc2_out = new TTUBE("ftpc2_out", "Ftpc - (out)", "void", outer_radius, outer_radius, (z_last-z_first)/2., 1);
786  ftpc2_in = new TTUBE("ftpc2_in", "Ftpc - (in)", "void", inner_radius, inner_radius, (z_last-z_first)/2., 1);
787 
788  // set colors
789  origin->SetLineColor(1);
790  ftpc1_out->SetLineColor(4);
791  ftpc1_in->SetLineColor(4);
792  ftpc2_out->SetLineColor(4);
793  ftpc2_in->SetLineColor(4);
794 
795  dead_seg1->SetLineColor(kRed);
796  dead_seg2->SetLineColor(kRed);
797  dead_seg3->SetLineColor(kRed);
798  dead_seg4->SetLineColor(kRed);
799  dead_seg5->SetLineColor(kRed);
800  dead_seg6->SetLineColor(kRed);
801 
802  padrow1->SetLineColor(kYellow);
803  padrow2->SetLineColor(kYellow);
804  padrow3->SetLineColor(kYellow);
805  padrow4->SetLineColor(kYellow);
806  padrow5->SetLineColor(kYellow);
807  padrow6->SetLineColor(kYellow);
808 
809  // create dependencies for 'both' Ftpcs
810  canvas->cd(1);
811  node0->cd();
812  node01_out = new TNode("node01_out", "node01_out", "ftpc1_out", 0, 0, z_first+(z_last-z_first)/2.);
813  node01_in = new TNode("node01_in", "node01_in", "ftpc1_in", 0, 0, z_first+(z_last-z_first)/2.);
814  node02_out = new TNode("node02_out", "node02_out", "ftpc2_out", 0, 0, -z_first-(z_last-z_first)/2.);
815  node02_in = new TNode("node02_in", "node02_in", "ftpc2_in", 0, 0, -z_first-(z_last-z_first)/2.);
816 
817  node01_seg1 = new TNode("node01_seg1", "node01_seg1", "dead_seg1", 0., 0., z_first+(z_last-z_first)/2.);
818  node01_seg2 = new TNode("node01_seg2", "node01_seg2", "dead_seg2", 0., 0., z_first+(z_last-z_first)/2.);
819  node01_seg3 = new TNode("node01_seg3", "node01_seg3", "dead_seg3", 0., 0., z_first+(z_last-z_first)/2.);
820  node01_seg4 = new TNode("node01_seg4", "node01_seg4", "dead_seg4", 0., 0., z_first+(z_last-z_first)/2.);
821  node01_seg5 = new TNode("node01_seg5", "node01_seg5", "dead_seg5", 0., 0., z_first+(z_last-z_first)/2.);
822  node01_seg6 = new TNode("node01_seg6", "node01_seg6", "dead_seg6", 0., 0., z_first+(z_last-z_first)/2.);
823  node02_seg1 = new TNode("node02_seg1", "node02_seg1", "dead_seg1", 0., 0., -z_first-(z_last-z_first)/2.);
824  node02_seg2 = new TNode("node02_seg2", "node02_seg2", "dead_seg2", 0., 0., -z_first-(z_last-z_first)/2.);
825  node02_seg3 = new TNode("node02_seg3", "node02_seg3", "dead_seg3", 0., 0., -z_first-(z_last-z_first)/2.);
826  node02_seg4 = new TNode("node02_seg4", "node02_seg4", "dead_seg4", 0., 0., -z_first-(z_last-z_first)/2.);
827  node02_seg5 = new TNode("node02_seg5", "node02_seg5", "dead_seg5", 0., 0., -z_first-(z_last-z_first)/2.);
828  node02_seg6 = new TNode("node02_seg6", "node02_seg6", "dead_seg6", 0., 0., -z_first-(z_last-z_first)/2.);
829 
830  node01_pad01 = new TNode("node01_pad01", "node01_pad01", "padrow1", 0., 0., z[0]);
831  node01_pad02 = new TNode("node01_pad02", "node01_pad02", "padrow2", 0., 0., z[0]);
832  node01_pad03 = new TNode("node01_pad03", "node01_pad03", "padrow3", 0., 0., z[0]);
833  node01_pad04 = new TNode("node01_pad04", "node01_pad04", "padrow4", 0., 0., z[0]);
834  node01_pad05 = new TNode("node01_pad05", "node01_pad05", "padrow5", 0., 0., z[0]);
835  node01_pad06 = new TNode("node01_pad06", "node01_pad06", "padrow6", 0., 0., z[0]);
836  node02_pad01 = new TNode("node02_pad01", "node02_pad01", "padrow1", 0., 0., -z[0]);
837  node02_pad02 = new TNode("node02_pad02", "node02_pad02", "padrow2", 0., 0., -z[0]);
838  node02_pad03 = new TNode("node02_pad03", "node02_pad03", "padrow3", 0., 0., -z[0]);
839  node02_pad04 = new TNode("node02_pad04", "node02_pad04", "padrow4", 0., 0., -z[0]);
840  node02_pad05 = new TNode("node02_pad05", "node02_pad05", "padrow5", 0., 0., -z[0]);
841  node02_pad06 = new TNode("node02_pad06", "node02_pad06", "padrow6", 0., 0., -z[0]);
842 
843  node01_pad11 = new TNode("node01_pad11", "node01_pad11", "padrow1", 0., 0., z[1]);
844  node01_pad12 = new TNode("node01_pad12", "node01_pad12", "padrow2", 0., 0., z[1]);
845  node01_pad13 = new TNode("node01_pad13", "node01_pad13", "padrow3", 0., 0., z[1]);
846  node01_pad14 = new TNode("node01_pad14", "node01_pad14", "padrow4", 0., 0., z[1]);
847  node01_pad15 = new TNode("node01_pad15", "node01_pad15", "padrow5", 0., 0., z[1]);
848  node01_pad16 = new TNode("node01_pad16", "node01_pad16", "padrow6", 0., 0., z[1]);
849  node02_pad11 = new TNode("node02_pad11", "node02_pad11", "padrow1", 0., 0., -z[1]);
850  node02_pad12 = new TNode("node02_pad12", "node02_pad12", "padrow2", 0., 0., -z[1]);
851  node02_pad13 = new TNode("node02_pad13", "node02_pad13", "padrow3", 0., 0., -z[1]);
852  node02_pad14 = new TNode("node02_pad14", "node02_pad14", "padrow4", 0., 0., -z[1]);
853  node02_pad15 = new TNode("node02_pad15", "node02_pad15", "padrow5", 0., 0., -z[1]);
854  node02_pad16 = new TNode("node02_pad16", "node02_pad16", "padrow6", 0., 0., -z[1]);
855 
856  node01_pad21 = new TNode("node01_pad21", "node01_pad21", "padrow1", 0., 0., z[2]);
857  node01_pad22 = new TNode("node01_pad22", "node01_pad22", "padrow2", 0., 0., z[2]);
858  node01_pad23 = new TNode("node01_pad23", "node01_pad23", "padrow3", 0., 0., z[2]);
859  node01_pad24 = new TNode("node01_pad24", "node01_pad24", "padrow4", 0., 0., z[2]);
860  node01_pad25 = new TNode("node01_pad25", "node01_pad25", "padrow5", 0., 0., z[2]);
861  node01_pad26 = new TNode("node01_pad26", "node01_pad26", "padrow6", 0., 0., z[2]);
862  node02_pad21 = new TNode("node02_pad21", "node02_pad21", "padrow1", 0., 0., -z[2]);
863  node02_pad22 = new TNode("node02_pad22", "node02_pad22", "padrow2", 0., 0., -z[2]);
864  node02_pad23 = new TNode("node02_pad23", "node02_pad23", "padrow3", 0., 0., -z[2]);
865  node02_pad24 = new TNode("node02_pad24", "node02_pad24", "padrow4", 0., 0., -z[2]);
866  node02_pad25 = new TNode("node02_pad25", "node02_pad25", "padrow5", 0., 0., -z[2]);
867  node02_pad26 = new TNode("node02_pad26", "node02_pad26", "padrow6", 0., 0., -z[2]);
868 
869  node01_pad31 = new TNode("node01_pad31", "node01_pad31", "padrow1", 0., 0., z[3]);
870  node01_pad32 = new TNode("node01_pad32", "node01_pad32", "padrow2", 0., 0., z[3]);
871  node01_pad33 = new TNode("node01_pad33", "node01_pad33", "padrow3", 0., 0., z[3]);
872  node01_pad34 = new TNode("node01_pad34", "node01_pad34", "padrow4", 0., 0., z[3]);
873  node01_pad35 = new TNode("node01_pad35", "node01_pad35", "padrow5", 0., 0., z[3]);
874  node01_pad36 = new TNode("node01_pad36", "node01_pad36", "padrow6", 0., 0., z[3]);
875  node02_pad31 = new TNode("node02_pad31", "node02_pad31", "padrow1", 0., 0., -z[3]);
876  node02_pad32 = new TNode("node02_pad32", "node02_pad32", "padrow2", 0., 0., -z[3]);
877  node02_pad33 = new TNode("node02_pad33", "node02_pad33", "padrow3", 0., 0., -z[3]);
878  node02_pad34 = new TNode("node02_pad34", "node02_pad34", "padrow4", 0., 0., -z[3]);
879  node02_pad35 = new TNode("node02_pad35", "node02_pad35", "padrow5", 0., 0., -z[3]);
880  node02_pad36 = new TNode("node02_pad36", "node02_pad36", "padrow6", 0., 0., -z[3]);
881 
882  node01_pad41 = new TNode("node01_pad41", "node01_pad41", "padrow1", 0., 0., z[4]);
883  node01_pad42 = new TNode("node01_pad42", "node01_pad42", "padrow2", 0., 0., z[4]);
884  node01_pad43 = new TNode("node01_pad43", "node01_pad43", "padrow3", 0., 0., z[4]);
885  node01_pad44 = new TNode("node01_pad44", "node01_pad44", "padrow4", 0., 0., z[4]);
886  node01_pad45 = new TNode("node01_pad45", "node01_pad45", "padrow5", 0., 0., z[4]);
887  node01_pad46 = new TNode("node01_pad46", "node01_pad46", "padrow6", 0., 0., z[4]);
888  node02_pad41 = new TNode("node02_pad41", "node02_pad41", "padrow1", 0., 0., -z[4]);
889  node02_pad42 = new TNode("node02_pad42", "node02_pad42", "padrow2", 0., 0., -z[4]);
890  node02_pad43 = new TNode("node02_pad43", "node02_pad43", "padrow3", 0., 0., -z[4]);
891  node02_pad44 = new TNode("node02_pad44", "node02_pad44", "padrow4", 0., 0., -z[4]);
892  node02_pad45 = new TNode("node02_pad45", "node02_pad45", "padrow5", 0., 0., -z[4]);
893  node02_pad46 = new TNode("node02_pad46", "node02_pad46", "padrow6", 0., 0., -z[4]);
894 
895  node01_pad51 = new TNode("node01_pad51", "node01_pad51", "padrow1", 0., 0., z[5]);
896  node01_pad52 = new TNode("node01_pad52", "node01_pad52", "padrow2", 0., 0., z[5]);
897  node01_pad53 = new TNode("node01_pad53", "node01_pad53", "padrow3", 0., 0., z[5]);
898  node01_pad54 = new TNode("node01_pad54", "node01_pad54", "padrow4", 0., 0., z[5]);
899  node01_pad55 = new TNode("node01_pad55", "node01_pad55", "padrow5", 0., 0., z[5]);
900  node01_pad56 = new TNode("node01_pad56", "node01_pad56", "padrow6", 0., 0., z[5]);
901  node02_pad51 = new TNode("node02_pad51", "node02_pad51", "padrow1", 0., 0., -z[5]);
902  node02_pad52 = new TNode("node02_pad52", "node02_pad52", "padrow2", 0., 0., -z[5]);
903  node02_pad53 = new TNode("node02_pad53", "node02_pad53", "padrow3", 0., 0., -z[5]);
904  node02_pad54 = new TNode("node02_pad54", "node02_pad54", "padrow4", 0., 0., -z[5]);
905  node02_pad55 = new TNode("node02_pad55", "node02_pad55", "padrow5", 0., 0., -z[5]);
906  node02_pad56 = new TNode("node02_pad56", "node02_pad56", "padrow6", 0., 0., -z[5]);
907 
908  node01_pad61 = new TNode("node01_pad61", "node01_pad61", "padrow1", 0., 0., z[6]);
909  node01_pad62 = new TNode("node01_pad62", "node01_pad62", "padrow2", 0., 0., z[6]);
910  node01_pad63 = new TNode("node01_pad63", "node01_pad63", "padrow3", 0., 0., z[6]);
911  node01_pad64 = new TNode("node01_pad64", "node01_pad64", "padrow4", 0., 0., z[6]);
912  node01_pad65 = new TNode("node01_pad65", "node01_pad65", "padrow5", 0., 0., z[6]);
913  node01_pad66 = new TNode("node01_pad66", "node01_pad66", "padrow6", 0., 0., z[6]);
914  node02_pad61 = new TNode("node02_pad61", "node02_pad61", "padrow1", 0., 0., -z[6]);
915  node02_pad62 = new TNode("node02_pad62", "node02_pad62", "padrow2", 0., 0., -z[6]);
916  node02_pad63 = new TNode("node02_pad63", "node02_pad63", "padrow3", 0., 0., -z[6]);
917  node02_pad64 = new TNode("node02_pad64", "node02_pad64", "padrow4", 0., 0., -z[6]);
918  node02_pad65 = new TNode("node02_pad65", "node02_pad65", "padrow5", 0., 0., -z[6]);
919  node02_pad66 = new TNode("node02_pad66", "node02_pad66", "padrow6", 0., 0., -z[6]);
920 
921  node01_pad71 = new TNode("node01_pad71", "node01_pad71", "padrow1", 0., 0., z[7]);
922  node01_pad72 = new TNode("node01_pad72", "node01_pad72", "padrow2", 0., 0., z[7]);
923  node01_pad73 = new TNode("node01_pad73", "node01_pad73", "padrow3", 0., 0., z[7]);
924  node01_pad74 = new TNode("node01_pad74", "node01_pad74", "padrow4", 0., 0., z[7]);
925  node01_pad75 = new TNode("node01_pad75", "node01_pad75", "padrow5", 0., 0., z[7]);
926  node01_pad76 = new TNode("node01_pad76", "node01_pad76", "padrow6", 0., 0., z[7]);
927  node02_pad71 = new TNode("node02_pad71", "node02_pad71", "padrow1", 0., 0., -z[7]);
928  node02_pad72 = new TNode("node02_pad72", "node02_pad72", "padrow2", 0., 0., -z[7]);
929  node02_pad73 = new TNode("node02_pad73", "node02_pad73", "padrow3", 0., 0., -z[7]);
930  node02_pad74 = new TNode("node02_pad74", "node02_pad74", "padrow4", 0., 0., -z[7]);
931  node02_pad75 = new TNode("node02_pad75", "node02_pad75", "padrow5", 0., 0., -z[7]);
932  node02_pad76 = new TNode("node02_pad76", "node02_pad76", "padrow6", 0., 0., -z[7]);
933 
934  node01_pad81 = new TNode("node01_pad81", "node01_pad81", "padrow1", 0., 0., z[8]);
935  node01_pad82 = new TNode("node01_pad82", "node01_pad82", "padrow2", 0., 0., z[8]);
936  node01_pad83 = new TNode("node01_pad83", "node01_pad83", "padrow3", 0., 0., z[8]);
937  node01_pad84 = new TNode("node01_pad84", "node01_pad84", "padrow4", 0., 0., z[8]);
938  node01_pad85 = new TNode("node01_pad85", "node01_pad85", "padrow5", 0., 0., z[8]);
939  node01_pad86 = new TNode("node01_pad86", "node01_pad86", "padrow6", 0., 0., z[8]);
940  node02_pad81 = new TNode("node02_pad81", "node02_pad81", "padrow1", 0., 0., -z[8]);
941  node02_pad82 = new TNode("node02_pad82", "node02_pad82", "padrow2", 0., 0., -z[8]);
942  node02_pad83 = new TNode("node02_pad83", "node02_pad83", "padrow3", 0., 0., -z[8]);
943  node02_pad84 = new TNode("node02_pad84", "node02_pad84", "padrow4", 0., 0., -z[8]);
944  node02_pad85 = new TNode("node02_pad85", "node02_pad85", "padrow5", 0., 0., -z[8]);
945  node02_pad86 = new TNode("node02_pad86", "node02_pad86", "padrow6", 0., 0., -z[8]);
946 
947  node01_pad91 = new TNode("node01_pad91", "node01_pad91", "padrow1", 0., 0., z[9]);
948  node01_pad92 = new TNode("node01_pad92", "node01_pad92", "padrow2", 0., 0., z[9]);
949  node01_pad93 = new TNode("node01_pad93", "node01_pad93", "padrow3", 0., 0., z[9]);
950  node01_pad94 = new TNode("node01_pad94", "node01_pad94", "padrow4", 0., 0., z[9]);
951  node01_pad95 = new TNode("node01_pad95", "node01_pad95", "padrow5", 0., 0., z[9]);
952  node01_pad96 = new TNode("node01_pad96", "node01_pad96", "padrow6", 0., 0., z[9]);
953  node02_pad91 = new TNode("node02_pad91", "node02_pad91", "padrow1", 0., 0., -z[9]);
954  node02_pad92 = new TNode("node02_pad92", "node02_pad92", "padrow2", 0., 0., -z[9]);
955  node02_pad93 = new TNode("node02_pad93", "node02_pad93", "padrow3", 0., 0., -z[9]);
956  node02_pad94 = new TNode("node02_pad94", "node02_pad94", "padrow4", 0., 0., -z[9]);
957  node02_pad95 = new TNode("node02_pad95", "node02_pad95", "padrow5", 0., 0., -z[9]);
958  node02_pad96 = new TNode("node02_pad96", "node02_pad96", "padrow6", 0., 0., -z[9]);
959 
960 
961  // create dependencies for '-' Ftpc
962  canvas->cd(2);
963  node2->cd();
964  node2_out = new TNode("node2_out", "node2_out", "ftpc2_out", 0, 0, -z_first-(z_last-z_first)/2.);
965  node2_in = new TNode("node2_in", "node2_in", "ftpc2_in", 0, 0, -z_first-(z_last-z_first)/2.);
966 
967  node2_seg1 = new TNode("node2_seg1", "node2_seg1", "dead_seg1", 0., 0., -z_first-(z_last-z_first)/2.);
968  node2_seg2 = new TNode("node2_seg2", "node2_seg2", "dead_seg2", 0., 0., -z_first-(z_last-z_first)/2.);
969  node2_seg3 = new TNode("node2_seg3", "node2_seg3", "dead_seg3", 0., 0., -z_first-(z_last-z_first)/2.);
970  node2_seg4 = new TNode("node2_seg4", "node2_seg4", "dead_seg4", 0., 0., -z_first-(z_last-z_first)/2.);
971  node2_seg5 = new TNode("node2_seg5", "node2_seg5", "dead_seg5", 0., 0., -z_first-(z_last-z_first)/2.);
972  node2_seg6 = new TNode("node2_seg6", "node2_seg6", "dead_seg6", 0., 0., -z_first-(z_last-z_first)/2.);
973 
974  node2_pad01 = new TNode("node2_pad01", "node2_pad01", "padrow1", 0., 0., -z[0]);
975  node2_pad02 = new TNode("node2_pad02", "node2_pad02", "padrow2", 0., 0., -z[0]);
976  node2_pad03 = new TNode("node2_pad03", "node2_pad03", "padrow3", 0., 0., -z[0]);
977  node2_pad04 = new TNode("node2_pad04", "node2_pad04", "padrow4", 0., 0., -z[0]);
978  node2_pad05 = new TNode("node2_pad05", "node2_pad05", "padrow5", 0., 0., -z[0]);
979  node2_pad06 = new TNode("node2_pad06", "node2_pad06", "padrow6", 0., 0., -z[0]);
980 
981  node2_pad11 = new TNode("node2_pad11", "node2_pad11", "padrow1", 0., 0., -z[1]);
982  node2_pad12 = new TNode("node2_pad12", "node2_pad12", "padrow2", 0., 0., -z[1]);
983  node2_pad13 = new TNode("node2_pad13", "node2_pad13", "padrow3", 0., 0., -z[1]);
984  node2_pad14 = new TNode("node2_pad14", "node2_pad14", "padrow4", 0., 0., -z[1]);
985  node2_pad15 = new TNode("node2_pad15", "node2_pad15", "padrow5", 0., 0., -z[1]);
986  node2_pad16 = new TNode("node2_pad16", "node2_pad16", "padrow6", 0., 0., -z[1]);
987 
988  node2_pad21 = new TNode("node2_pad21", "node2_pad21", "padrow1", 0., 0., -z[2]);
989  node2_pad22 = new TNode("node2_pad22", "node2_pad22", "padrow2", 0., 0., -z[2]);
990  node2_pad23 = new TNode("node2_pad23", "node2_pad23", "padrow3", 0., 0., -z[2]);
991  node2_pad24 = new TNode("node2_pad24", "node2_pad24", "padrow4", 0., 0., -z[2]);
992  node2_pad25 = new TNode("node2_pad25", "node2_pad25", "padrow5", 0., 0., -z[2]);
993  node2_pad26 = new TNode("node2_pad26", "node2_pad26", "padrow6", 0., 0., -z[2]);
994 
995  node2_pad31 = new TNode("node2_pad31", "node2_pad31", "padrow1", 0., 0., -z[3]);
996  node2_pad32 = new TNode("node2_pad32", "node2_pad32", "padrow2", 0., 0., -z[3]);
997  node2_pad33 = new TNode("node2_pad33", "node2_pad33", "padrow3", 0., 0., -z[3]);
998  node2_pad34 = new TNode("node2_pad34", "node2_pad34", "padrow4", 0., 0., -z[3]);
999  node2_pad35 = new TNode("node2_pad35", "node2_pad35", "padrow5", 0., 0., -z[3]);
1000  node2_pad36 = new TNode("node2_pad36", "node2_pad36", "padrow6", 0., 0., -z[3]);
1001 
1002  node2_pad41 = new TNode("node2_pad41", "node2_pad41", "padrow1", 0., 0., -z[4]);
1003  node2_pad42 = new TNode("node2_pad42", "node2_pad42", "padrow2", 0., 0., -z[4]);
1004  node2_pad43 = new TNode("node2_pad43", "node2_pad43", "padrow3", 0., 0., -z[4]);
1005  node2_pad44 = new TNode("node2_pad44", "node2_pad44", "padrow4", 0., 0., -z[4]);
1006  node2_pad45 = new TNode("node2_pad45", "node2_pad45", "padrow5", 0., 0., -z[4]);
1007  node2_pad46 = new TNode("node2_pad46", "node2_pad46", "padrow6", 0., 0., -z[4]);
1008 
1009  node2_pad51 = new TNode("node2_pad51", "node2_pad51", "padrow1", 0., 0., -z[5]);
1010  node2_pad52 = new TNode("node2_pad52", "node2_pad52", "padrow2", 0., 0., -z[5]);
1011  node2_pad53 = new TNode("node2_pad53", "node2_pad53", "padrow3", 0., 0., -z[5]);
1012  node2_pad54 = new TNode("node2_pad54", "node2_pad54", "padrow4", 0., 0., -z[5]);
1013  node2_pad55 = new TNode("node2_pad55", "node2_pad55", "padrow5", 0., 0., -z[5]);
1014  node2_pad56 = new TNode("node2_pad56", "node2_pad56", "padrow6", 0., 0., -z[5]);
1015 
1016  node2_pad61 = new TNode("node2_pad61", "node2_pad61", "padrow1", 0., 0., -z[6]);
1017  node2_pad62 = new TNode("node2_pad62", "node2_pad62", "padrow2", 0., 0., -z[6]);
1018  node2_pad63 = new TNode("node2_pad63", "node2_pad63", "padrow3", 0., 0., -z[6]);
1019  node2_pad64 = new TNode("node2_pad64", "node2_pad64", "padrow4", 0., 0., -z[6]);
1020  node2_pad65 = new TNode("node2_pad65", "node2_pad65", "padrow5", 0., 0., -z[6]);
1021  node2_pad66 = new TNode("node2_pad66", "node2_pad66", "padrow6", 0., 0., -z[6]);
1022 
1023  node2_pad71 = new TNode("node2_pad71", "node2_pad71", "padrow1", 0., 0., -z[7]);
1024  node2_pad72 = new TNode("node2_pad72", "node2_pad72", "padrow2", 0., 0., -z[7]);
1025  node2_pad73 = new TNode("node2_pad73", "node2_pad73", "padrow3", 0., 0., -z[7]);
1026  node2_pad74 = new TNode("node2_pad74", "node2_pad74", "padrow4", 0., 0., -z[7]);
1027  node2_pad75 = new TNode("node2_pad75", "node2_pad75", "padrow5", 0., 0., -z[7]);
1028  node2_pad76 = new TNode("node2_pad76", "node2_pad76", "padrow6", 0., 0., -z[7]);
1029 
1030  node2_pad81 = new TNode("node2_pad81", "node2_pad81", "padrow1", 0., 0., -z[8]);
1031  node2_pad82 = new TNode("node2_pad82", "node2_pad82", "padrow2", 0., 0., -z[8]);
1032  node2_pad83 = new TNode("node2_pad83", "node2_pad83", "padrow3", 0., 0., -z[8]);
1033  node2_pad84 = new TNode("node2_pad84", "node2_pad84", "padrow4", 0., 0., -z[8]);
1034  node2_pad85 = new TNode("node2_pad85", "node2_pad85", "padrow5", 0., 0., -z[8]);
1035  node2_pad86 = new TNode("node2_pad86", "node2_pad86", "padrow6", 0., 0., -z[8]);
1036 
1037  node2_pad91 = new TNode("node2_pad91", "node2_pad91", "padrow1", 0., 0., -z[9]);
1038  node2_pad92 = new TNode("node2_pad92", "node2_pad92", "padrow2", 0., 0., -z[9]);
1039  node2_pad93 = new TNode("node2_pad93", "node2_pad93", "padrow3", 0., 0., -z[9]);
1040  node2_pad94 = new TNode("node2_pad94", "node2_pad94", "padrow4", 0., 0., -z[9]);
1041  node2_pad95 = new TNode("node2_pad95", "node2_pad95", "padrow5", 0., 0., -z[9]);
1042  node2_pad96 = new TNode("node2_pad96", "node2_pad96", "padrow6", 0., 0., -z[9]);
1043 
1044 
1045  // create dependencies for '+' Ftpc
1046  canvas->cd(3);
1047  node1->cd();
1048  node1_out = new TNode("node1_out", "node1_out", "ftpc1_out", 0, 0, z_first+(z_last-z_first)/2.);
1049  node1_in = new TNode("node1_in", "node1_in", "ftpc1_in", 0, 0, z_first+(z_last-z_first)/2.);
1050 
1051  node1_seg1 = new TNode("node1_seg1", "node1_seg1", "dead_seg1", 0., 0., z_first+(z_last-z_first)/2.);
1052  node1_seg2 = new TNode("node1_seg2", "node1_seg2", "dead_seg2", 0., 0., z_first+(z_last-z_first)/2.);
1053  node1_seg3 = new TNode("node1_seg3", "node1_seg3", "dead_seg3", 0., 0., z_first+(z_last-z_first)/2.);
1054  node1_seg4 = new TNode("node1_seg4", "node1_seg4", "dead_seg4", 0., 0., z_first+(z_last-z_first)/2.);
1055  node1_seg5 = new TNode("node1_seg5", "node1_seg5", "dead_seg5", 0., 0., z_first+(z_last-z_first)/2.);
1056  node1_seg6 = new TNode("node1_seg6", "node1_seg6", "dead_seg6", 0., 0., z_first+(z_last-z_first)/2.);
1057 
1058  node1_pad01 = new TNode("node1_pad01", "node1_pad01", "padrow1", 0., 0., z[0]);
1059  node1_pad02 = new TNode("node1_pad02", "node1_pad02", "padrow2", 0., 0., z[0]);
1060  node1_pad03 = new TNode("node1_pad03", "node1_pad03", "padrow3", 0., 0., z[0]);
1061  node1_pad04 = new TNode("node1_pad04", "node1_pad04", "padrow4", 0., 0., z[0]);
1062  node1_pad05 = new TNode("node1_pad05", "node1_pad05", "padrow5", 0., 0., z[0]);
1063  node1_pad06 = new TNode("node1_pad06", "node1_pad06", "padrow6", 0., 0., z[0]);
1064 
1065  node1_pad11 = new TNode("node1_pad11", "node1_pad11", "padrow1", 0., 0., z[1]);
1066  node1_pad12 = new TNode("node1_pad12", "node1_pad12", "padrow2", 0., 0., z[1]);
1067  node1_pad13 = new TNode("node1_pad13", "node1_pad13", "padrow3", 0., 0., z[1]);
1068  node1_pad14 = new TNode("node1_pad14", "node1_pad14", "padrow4", 0., 0., z[1]);
1069  node1_pad15 = new TNode("node1_pad15", "node1_pad15", "padrow5", 0., 0., z[1]);
1070  node1_pad16 = new TNode("node1_pad16", "node1_pad16", "padrow6", 0., 0., z[1]);
1071 
1072  node1_pad21 = new TNode("node1_pad21", "node1_pad21", "padrow1", 0., 0., z[2]);
1073  node1_pad22 = new TNode("node1_pad22", "node1_pad22", "padrow2", 0., 0., z[2]);
1074  node1_pad23 = new TNode("node1_pad23", "node1_pad23", "padrow3", 0., 0., z[2]);
1075  node1_pad24 = new TNode("node1_pad24", "node1_pad24", "padrow4", 0., 0., z[2]);
1076  node1_pad25 = new TNode("node1_pad25", "node1_pad25", "padrow5", 0., 0., z[2]);
1077  node1_pad26 = new TNode("node1_pad26", "node1_pad26", "padrow6", 0., 0., z[2]);
1078 
1079  node1_pad31 = new TNode("node1_pad31", "node1_pad31", "padrow1", 0., 0., z[3]);
1080  node1_pad32 = new TNode("node1_pad32", "node1_pad32", "padrow2", 0., 0., z[3]);
1081  node1_pad33 = new TNode("node1_pad33", "node1_pad33", "padrow3", 0., 0., z[3]);
1082  node1_pad34 = new TNode("node1_pad34", "node1_pad34", "padrow4", 0., 0., z[3]);
1083  node1_pad35 = new TNode("node1_pad35", "node1_pad35", "padrow5", 0., 0., z[3]);
1084  node1_pad36 = new TNode("node1_pad36", "node1_pad36", "padrow6", 0., 0., z[3]);
1085 
1086  node1_pad41 = new TNode("node1_pad41", "node1_pad41", "padrow1", 0., 0., z[4]);
1087  node1_pad42 = new TNode("node1_pad42", "node1_pad42", "padrow2", 0., 0., z[4]);
1088  node1_pad43 = new TNode("node1_pad43", "node1_pad43", "padrow3", 0., 0., z[4]);
1089  node1_pad44 = new TNode("node1_pad44", "node1_pad44", "padrow4", 0., 0., z[4]);
1090  node1_pad45 = new TNode("node1_pad45", "node1_pad45", "padrow5", 0., 0., z[4]);
1091  node1_pad46 = new TNode("node1_pad46", "node1_pad46", "padrow6", 0., 0., z[4]);
1092 
1093  node1_pad51 = new TNode("node1_pad51", "node1_pad51", "padrow1", 0., 0., z[5]);
1094  node1_pad52 = new TNode("node1_pad52", "node1_pad52", "padrow2", 0., 0., z[5]);
1095  node1_pad53 = new TNode("node1_pad53", "node1_pad53", "padrow3", 0., 0., z[5]);
1096  node1_pad54 = new TNode("node1_pad54", "node1_pad54", "padrow4", 0., 0., z[5]);
1097  node1_pad55 = new TNode("node1_pad55", "node1_pad55", "padrow5", 0., 0., z[5]);
1098  node1_pad56 = new TNode("node1_pad56", "node1_pad56", "padrow6", 0., 0., z[5]);
1099 
1100  node1_pad61 = new TNode("node1_pad61", "node1_pad61", "padrow1", 0., 0., z[6]);
1101  node1_pad62 = new TNode("node1_pad62", "node1_pad62", "padrow2", 0., 0., z[6]);
1102  node1_pad63 = new TNode("node1_pad63", "node1_pad63", "padrow3", 0., 0., z[6]);
1103  node1_pad64 = new TNode("node1_pad64", "node1_pad64", "padrow4", 0., 0., z[6]);
1104  node1_pad65 = new TNode("node1_pad65", "node1_pad65", "padrow5", 0., 0., z[6]);
1105  node1_pad66 = new TNode("node1_pad66", "node1_pad66", "padrow6", 0., 0., z[6]);
1106 
1107  node1_pad71 = new TNode("node1_pad71", "node1_pad71", "padrow1", 0., 0., z[7]);
1108  node1_pad72 = new TNode("node1_pad72", "node1_pad72", "padrow2", 0., 0., z[7]);
1109  node1_pad73 = new TNode("node1_pad73", "node1_pad73", "padrow3", 0., 0., z[7]);
1110  node1_pad74 = new TNode("node1_pad74", "node1_pad74", "padrow4", 0., 0., z[7]);
1111  node1_pad75 = new TNode("node1_pad75", "node1_pad75", "padrow5", 0., 0., z[7]);
1112  node1_pad76 = new TNode("node1_pad76", "node1_pad76", "padrow6", 0., 0., z[7]);
1113 
1114  node1_pad81 = new TNode("node1_pad81", "node1_pad81", "padrow1", 0., 0., z[8]);
1115  node1_pad82 = new TNode("node1_pad82", "node1_pad82", "padrow2", 0., 0., z[8]);
1116  node1_pad83 = new TNode("node1_pad83", "node1_pad83", "padrow3", 0., 0., z[8]);
1117  node1_pad84 = new TNode("node1_pad84", "node1_pad84", "padrow4", 0., 0., z[8]);
1118  node1_pad85 = new TNode("node1_pad85", "node1_pad85", "padrow5", 0., 0., z[8]);
1119  node1_pad86 = new TNode("node1_pad86", "node1_pad86", "padrow6", 0., 0., z[8]);
1120 
1121  node1_pad91 = new TNode("node1_pad91", "node1_pad91", "padrow1", 0., 0., z[9]);
1122  node1_pad92 = new TNode("node1_pad92", "node1_pad92", "padrow2", 0., 0., z[9]);
1123  node1_pad93 = new TNode("node1_pad93", "node1_pad93", "padrow3", 0., 0., z[9]);
1124  node1_pad94 = new TNode("node1_pad94", "node1_pad94", "padrow4", 0., 0., z[9]);
1125  node1_pad95 = new TNode("node1_pad95", "node1_pad95", "padrow5", 0., 0., z[9]);
1126  node1_pad96 = new TNode("node1_pad96", "node1_pad96", "padrow6", 0., 0., z[9]);
1127 
1128  // The following lines are unnecessary. They avoid compiler warnings. They can be simply deleted.
1129  /*
1130  node0->cd();
1131  node1->cd();
1132  node2->cd();
1133  node1_in->cd();
1134  node2_in->cd();
1135  node1_out->cd();
1136  node2_out->cd();
1137  node01_in->cd();
1138  node02_in->cd();
1139  node01_out->cd();
1140  node02_out->cd();
1141  node01_seg1->cd();
1142  node01_seg2->cd();
1143  node01_seg3->cd();
1144  node01_seg4->cd();
1145  node01_seg5->cd();
1146  node01_seg6->cd();
1147  node02_seg1->cd();
1148  node02_seg2->cd();
1149  node02_seg3->cd();
1150  node02_seg4->cd();
1151  node02_seg5->cd();
1152  node02_seg6->cd();
1153  node1_seg1->cd();
1154  node1_seg2->cd();
1155  node1_seg3->cd();
1156  node1_seg4->cd();
1157  node1_seg5->cd();
1158  node1_seg6->cd();
1159  node2_seg1->cd();
1160  node2_seg2->cd();
1161  node2_seg3->cd();
1162  node2_seg4->cd();
1163  node2_seg5->cd();
1164  node2_seg6->cd();
1165 
1166  node01_pad01->cd();
1167  node01_pad02->cd();
1168  node01_pad03->cd();
1169  node01_pad04->cd();
1170  node01_pad05->cd();
1171  node01_pad06->cd();
1172  node02_pad01->cd();
1173  node02_pad02->cd();
1174  node02_pad03->cd();
1175  node02_pad04->cd();
1176  node02_pad05->cd();
1177  node02_pad06->cd();
1178 */
1179 }
1180 
1181 void deleteNode() {
1182  // Deletes nodes.
1183 
1184  delete ftpc1_in;
1185  delete ftpc2_in;
1186  delete ftpc1_out;
1187  delete ftpc2_out;
1188  delete padrow1;
1189  delete padrow2;
1190  delete padrow3;
1191  delete padrow4;
1192  delete padrow5;
1193  delete padrow6;
1194  delete dead_seg1;
1195  delete dead_seg2;
1196  delete dead_seg3;
1197  delete dead_seg4;
1198  delete dead_seg5;
1199  delete dead_seg6;
1200  delete node01_in;
1201  delete node01_out;
1202  delete node02_in;
1203  delete node02_out;
1204  delete node1_in;
1205  delete node1_out;
1206  delete node2_in;
1207  delete node2_out;
1208  delete node01_seg1;
1209  delete node01_seg2;
1210  delete node01_seg3;
1211  delete node01_seg4;
1212  delete node01_seg5;
1213  delete node01_seg6;
1214  delete node02_seg1;
1215  delete node02_seg2;
1216  delete node02_seg3;
1217  delete node02_seg4;
1218  delete node02_seg5;
1219  delete node02_seg6;
1220  delete node1_seg1;
1221  delete node1_seg2;
1222  delete node1_seg3;
1223  delete node1_seg4;
1224  delete node1_seg5;
1225  delete node1_seg6;
1226  delete node2_seg1;
1227  delete node2_seg2;
1228  delete node2_seg3;
1229  delete node2_seg4;
1230  delete node2_seg5;
1231  delete node2_seg6;
1232  delete node01_pad01;
1233  delete node01_pad02;
1234  delete node01_pad03;
1235  delete node01_pad04;
1236  delete node01_pad05;
1237  delete node01_pad06;
1238  delete node02_pad01;
1239  delete node02_pad02;
1240  delete node02_pad03;
1241  delete node02_pad04;
1242  delete node02_pad05;
1243  delete node02_pad06;
1244  delete node1_pad01;
1245  delete node1_pad02;
1246  delete node1_pad03;
1247  delete node1_pad04;
1248  delete node1_pad05;
1249  delete node1_pad06;
1250  delete node2_pad01;
1251  delete node2_pad02;
1252  delete node2_pad03;
1253  delete node2_pad04;
1254  delete node2_pad05;
1255  delete node2_pad06;
1256  delete node1_pad11;
1257  delete node1_pad12;
1258  delete node1_pad13;
1259  delete node1_pad14;
1260  delete node1_pad15;
1261  delete node1_pad16;
1262  delete node2_pad11;
1263  delete node2_pad12;
1264  delete node2_pad13;
1265  delete node2_pad14;
1266  delete node2_pad15;
1267  delete node2_pad16;
1268  delete node01_pad11;
1269  delete node01_pad12;
1270  delete node01_pad13;
1271  delete node01_pad14;
1272  delete node01_pad15;
1273  delete node01_pad16;
1274  delete node02_pad11;
1275  delete node02_pad12;
1276  delete node02_pad13;
1277  delete node02_pad14;
1278  delete node02_pad15;
1279  delete node02_pad16;
1280  delete node1_pad21;
1281  delete node1_pad22;
1282  delete node1_pad23;
1283  delete node1_pad24;
1284  delete node1_pad25;
1285  delete node1_pad26;
1286  delete node2_pad21;
1287  delete node2_pad22;
1288  delete node2_pad23;
1289  delete node2_pad24;
1290  delete node2_pad25;
1291  delete node2_pad26;
1292  delete node01_pad21;
1293  delete node01_pad22;
1294  delete node01_pad23;
1295  delete node01_pad24;
1296  delete node01_pad25;
1297  delete node01_pad26;
1298  delete node02_pad21;
1299  delete node02_pad22;
1300  delete node02_pad23;
1301  delete node02_pad24;
1302  delete node02_pad25;
1303  delete node02_pad26;
1304  delete node1_pad31;
1305  delete node1_pad32;
1306  delete node1_pad33;
1307  delete node1_pad34;
1308  delete node1_pad35;
1309  delete node1_pad36;
1310  delete node2_pad31;
1311  delete node2_pad32;
1312  delete node2_pad33;
1313  delete node2_pad34;
1314  delete node2_pad35;
1315  delete node2_pad36;
1316  delete node01_pad31;
1317  delete node01_pad32;
1318  delete node01_pad33;
1319  delete node01_pad34;
1320  delete node01_pad35;
1321  delete node01_pad36;
1322  delete node02_pad31;
1323  delete node02_pad32;
1324  delete node02_pad33;
1325  delete node02_pad34;
1326  delete node02_pad35;
1327  delete node02_pad36;
1328  delete node1_pad41;
1329  delete node1_pad42;
1330  delete node1_pad43;
1331  delete node1_pad44;
1332  delete node1_pad45;
1333  delete node1_pad46;
1334  delete node2_pad41;
1335  delete node2_pad42;
1336  delete node2_pad43;
1337  delete node2_pad44;
1338  delete node2_pad45;
1339  delete node2_pad46;
1340  delete node01_pad41;
1341  delete node01_pad42;
1342  delete node01_pad43;
1343  delete node01_pad44;
1344  delete node01_pad45;
1345  delete node01_pad46;
1346  delete node02_pad41;
1347  delete node02_pad42;
1348  delete node02_pad43;
1349  delete node02_pad44;
1350  delete node02_pad45;
1351  delete node02_pad46;
1352  delete node1_pad51;
1353  delete node1_pad52;
1354  delete node1_pad53;
1355  delete node1_pad54;
1356  delete node1_pad55;
1357  delete node1_pad56;
1358  delete node2_pad51;
1359  delete node2_pad52;
1360  delete node2_pad53;
1361  delete node2_pad54;
1362  delete node2_pad55;
1363  delete node2_pad56;
1364  delete node01_pad51;
1365  delete node01_pad52;
1366  delete node01_pad53;
1367  delete node01_pad54;
1368  delete node01_pad55;
1369  delete node01_pad56;
1370  delete node02_pad51;
1371  delete node02_pad52;
1372  delete node02_pad53;
1373  delete node02_pad54;
1374  delete node02_pad55;
1375  delete node02_pad56;
1376  delete node1_pad61;
1377  delete node1_pad62;
1378  delete node1_pad63;
1379  delete node1_pad64;
1380  delete node1_pad65;
1381  delete node1_pad66;
1382  delete node2_pad61;
1383  delete node2_pad62;
1384  delete node2_pad63;
1385  delete node2_pad64;
1386  delete node2_pad65;
1387  delete node2_pad66;
1388  delete node01_pad61;
1389  delete node01_pad62;
1390  delete node01_pad63;
1391  delete node01_pad64;
1392  delete node01_pad65;
1393  delete node01_pad66;
1394  delete node02_pad61;
1395  delete node02_pad62;
1396  delete node02_pad63;
1397  delete node02_pad64;
1398  delete node02_pad65;
1399  delete node02_pad66;
1400  delete node1_pad71;
1401  delete node1_pad72;
1402  delete node1_pad73;
1403  delete node1_pad74;
1404  delete node1_pad75;
1405  delete node1_pad76;
1406  delete node2_pad71;
1407  delete node2_pad72;
1408  delete node2_pad73;
1409  delete node2_pad74;
1410  delete node2_pad75;
1411  delete node2_pad76;
1412  delete node01_pad71;
1413  delete node01_pad72;
1414  delete node01_pad73;
1415  delete node01_pad74;
1416  delete node01_pad75;
1417  delete node01_pad76;
1418  delete node02_pad71;
1419  delete node02_pad72;
1420  delete node02_pad73;
1421  delete node02_pad74;
1422  delete node02_pad75;
1423  delete node02_pad76;
1424  delete node1_pad81;
1425  delete node1_pad82;
1426  delete node1_pad83;
1427  delete node1_pad84;
1428  delete node1_pad85;
1429  delete node1_pad86;
1430  delete node2_pad81;
1431  delete node2_pad82;
1432  delete node2_pad83;
1433  delete node2_pad84;
1434  delete node2_pad85;
1435  delete node2_pad86;
1436  delete node01_pad81;
1437  delete node01_pad82;
1438  delete node01_pad83;
1439  delete node01_pad84;
1440  delete node01_pad85;
1441  delete node01_pad86;
1442  delete node02_pad81;
1443  delete node02_pad82;
1444  delete node02_pad83;
1445  delete node02_pad84;
1446  delete node02_pad85;
1447  delete node02_pad86;
1448  delete node1_pad91;
1449  delete node1_pad92;
1450  delete node1_pad93;
1451  delete node1_pad94;
1452  delete node1_pad95;
1453  delete node1_pad96;
1454  delete node2_pad91;
1455  delete node2_pad92;
1456  delete node2_pad93;
1457  delete node2_pad94;
1458  delete node2_pad95;
1459  delete node2_pad96;
1460  delete node01_pad91;
1461  delete node01_pad92;
1462  delete node01_pad93;
1463  delete node01_pad94;
1464  delete node01_pad95;
1465  delete node01_pad96;
1466  delete node02_pad91;
1467  delete node02_pad92;
1468  delete node02_pad93;
1469  delete node02_pad94;
1470  delete node02_pad95;
1471  delete node02_pad96;
1472 }
1473