CommitLineData
d389af40 1//
2// Small script that I used to make some intial testing of the wafer
3// layout and geometry.
4//
5// Christian
6//
7TObjArray*
8WaferParameters(const char c)
9{
10 double dl;
11 double dh;
12 double r = 134 / 2;
13 double theta;
14 switch (c) {
15 case 'i':
16 dl = 43;
17 dh = 172;
18 theta = 18;
19 break;
20 case 'o':
21 dl = 156;
22 dh = 280;
23 theta = 9;
24 break;
25 default:
26 cerr << "Unknown wafer type: " << c << endl;
27 return;
28 }
29
30
31 double tan_theta = tan(theta * TMath::Pi() / 180.);
32 double tan_theta2 = pow(tan_theta,2);
33 double r2 = pow(r,2);
34 double y_A = tan_theta * dl;
35 double x_D = dl + sqrt(r2 - tan_theta2 * pow(dl,2));
36 double x_D_2 = dl - sqrt(r2 - tan_theta2 * pow(dl,2));
37
38 double y_B = sqrt(r2 - pow(dh,2) + 2 * dh * x_D - pow(x_D,2));
39 double x_C = (x_D + sqrt(-tan_theta2 * pow(x_D,2) + r2
40 + r2 * tan_theta2)) / (1 + tan_theta2);
41 double y_C = tan_theta * x_C;
42
43 cout << "A: (" << dl << "," << y_A << ")" << endl;
44 cout << "B: (" << dh << "," << y_B << ")" << endl;
45 cout << "C: (" << x_C << "," << y_C << ")" << endl;
46 cout << "D: (" << x_D << ",0)" << endl;
47
48 cout << "Recentred at D:" << endl;
49 cout << "A: (" << dl - x_D << "," << y_A << ")" << endl;
50 cout << "B: (" << dh - x_D << "," << y_B << ")" << endl;
51 cout << "C: (" << x_C - x_D << "," << y_C << ")" << endl;
52
53 TObjArray* verticies = new TObjArray(6);
60
61 return verticies;
62}
63
64void
65Wafer()
66{
67 TCanvas* can = new TCanvas("can", "c", 400, 600);
68 can->SetBorderMode(0);
69 can->SetFillColor(0);
70
71 TGeometry* g = new TGeometry("g", "G");
72 TShape* topShape = new TBRIK("top", "top", "", 100, 100, 100);
73 TNode* topNode = new TNode("top", "top", "top", 0, 0, 0);
74 topNode->SetLineWidth(0);
75 topNode->SetVisibility(0);
76
77 TShape* virtualShape = new TTUBS("virtual", "Virtual", "",
78 43, 172, 1, -18, 18);
79
80 TObjArray* v = WaferParameters('i');
81 TXTRU* moduleShape = new TXTRU("module", "module", "", 6, 2);
82 for (Int_t i = 0; i < 6; i++) {
83 TVector2* vv = static_cast<TVector2*>(v->At(i));
84 moduleShape->DefineVertex(i, vv->X(), vv->Y());
85 }
86 moduleShape->DefineSection(0, -1, 1, 0, 0);
87 moduleShape->DefineSection(1, 1, 1, 0, 0);
88
89 for (Int_t i = 0; i < 10; i++) {
90 topNode->cd();
91 Double_t theta = 36 * i;
92 Double_t z = (i % 2 ? +5 : -5);
93 TRotMatrix* rot = new TRotMatrix(Form("rotation%02d", i), "Rotation",
94 90, theta, 90,
95 fmod(90 + theta, 360), 0, 0);
96 TNode* moduleNode = new TNode(Form("module%02d", i),
97 "Module", moduleShape, 0, 0, z,
98 rot);
99 if (i == 0) {
100 moduleNode->SetFillColor(2);
101 moduleNode->SetLineColor(2);
102 moduleNode->SetLineWidth(2);
103 }
104 }
105 g->Draw();
106 TView* view = can->GetView();
107 view->SetPerspective();
108 Int_t a;
109 view->SetView(1.81208, 66.6725, 90, a);
110 view->Zoom();
111 view->Zoom();
112 view->Zoom();
113 can->Modified();
114 can->cd();
115
116 can->Print("fmd_module1.gif");
117 // std::cout << "Waiting ..." << std::flush;
118 // Char_t c = std::cin.get();
119
120 topNode->cd();
121 TNode* virtualNode = new TNode("virtual", "Virtual",
122 virtualShape, 0, 0, -5);
123 virtualNode->SetLineColor(3);
124 virtualNode->SetLineWidth(2);
125 virtualNode->SetLineStyle(2);
126 g->Draw();
127 view->SetPerspective();
128 view->SetView(1.81208, 66.6725, 90, a);
129 view->Zoom();
130 view->Zoom();
131 view->Zoom();
132 can->Modified();
133 can->cd();
134 can->Print("fmd_module2.gif");
135
136}
137
138
139
140
141
142