56 Double_t
x, Double_t
y, Double_t
z,
const char* matrixname,
58 TNode(name, title, shapename, x, y, z, matrixname, option)
67 Double_t
x, Double_t
y, Double_t
z, TRotMatrix* matrix,
69 TNode(name, title, shape, x, y, z, matrix, option)
93 TShape* parent = fParent->GetShape();
96 strcpy(tmp, parent->GetTitle());
101 if (strcmp(tmp,
"TUBE")==0) {
102 TTUBE * shape = (TTUBE*) parent;
104 Float_t dZ = shape->GetDz();
105 Float_t rMin = shape->GetRmin();
106 Float_t rMax = shape->GetRmax();
112 for (i=0; i<ndiv; i++) {
113 r1 = rMin+Float_t(i)*dr;
115 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
116 sprintf(nName,
"%sD%d", GetName(), i);
117 newsh =
new TTUBE(vName,
"TUBE",
"void", r1, r2, dZ);
119 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
124 }
else if (
fAxis == 2) {
128 for (i=0; i<ndiv; i++) {
129 phi1 = Float_t(i)*dPhi;
131 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
132 sprintf(nName,
"%sD%d", GetName(), i);
133 newsh =
new TTUBS(vName,
"TUBS",
"void", rMin, rMax, dZ, phi1, phi2);
135 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
142 for (i=0; i<ndiv; i++) {
143 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
144 sprintf(nName,
"%sD%d", GetName(), i);
145 newsh =
new TTUBE(vName,
"TUBE",
"void", rMin, rMax, delZ);
147 Float_t zpos = -dZ+delZ*(2.*Float_t(i)+1.);
148 node =
new G3Node(nName,
"",newsh, 0., 0., zpos);
156 }
else if (strcmp(tmp,
"TUBS")==0) {
157 TTUBS * shape = (TTUBS*) parent;
158 Float_t dZ = shape->GetDz();
159 Float_t rMin = shape->GetRmin();
160 Float_t rMax = shape->GetRmax();
161 Float_t phi1 = shape->GetPhi1();
162 Float_t phi2 = shape->GetPhi2();
169 for (i=0; i<ndiv; i++) {
170 r1 = rMin+Float_t(i)*dr;
172 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
173 sprintf(nName,
"%sD%d", GetName(), i);
174 newsh =
new TTUBS(vName,
"TUBS",
"void", r1, r2, dZ, phi1, phi2);
176 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
181 }
else if (
fAxis == 2) {
183 Float_t dPhi = (phi2-phi1)/Float_t(
fNDivision);
184 Float_t nphi1, nphi2;
187 nphi1 = phi1+Float_t(i)*dPhi;
189 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
190 sprintf(nName,
"%sD%d", GetName(), i);
192 newsh =
new TTUBS(vName,
"TUBS",
"void", rMin, rMax, dZ, nphi1, nphi2);
194 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
201 for (i=0; i<ndiv; i++) {
202 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
203 sprintf(nName,
"%sD%d", GetName(), i);
204 newsh =
new TTUBS(vName,
"TUBS",
"void", rMin, rMax, delZ, phi1, phi2);
206 Float_t zpos = -dZ+delZ*(2.*Float_t(i)+1.);
207 node =
new G3Node(nName,
"",newsh, 0., 0., zpos);
213 }
else if (strcmp(tmp,
"CONE")==0) {
214 TCONE * shape = (TCONE*) parent;
216 Float_t dZ = shape->GetDz();
217 Float_t rMin1 = shape->GetRmin();
218 Float_t rMax1 = shape->GetRmax();
219 Float_t rMin2 = shape->GetRmin2();
220 Float_t rMax2 = shape->GetRmax2();
224 Float_t dr1 = (rMax1-rMin1)/Float_t(
fNDivision);
225 Float_t dr2 = (rMax2-rMin2)/Float_t(
fNDivision);
226 Float_t r11, r12, r21, r22;
227 for (i=0; i<ndiv; i++) {
228 r11 = rMin1+Float_t(i)*dr1;
230 r21 = rMin2+Float_t(i)*dr2;
233 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
234 sprintf(nName,
"%sD%d", GetName(), i);
235 newsh =
new TCONE(vName,
"CONE",
"void", dZ, r11, r12, r21, r22);
237 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
241 }
else if (
fAxis == 2) {
245 for (i=0; i<ndiv; i++) {
246 phi1 = Float_t(i)*dPhi;
248 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
249 sprintf(nName,
"%sD%d", GetName(), i);
250 newsh =
new TCONS(vName,
"CONS",
"void", dZ, rMin1, rMax1,
251 rMin2, rMax2, phi1, phi2);
253 node =
new G3Node(nName,
"",newsh, 0., 0., 0.);
260 for (i=0; i<ndiv; i++) {
261 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
262 sprintf(nName,
"%sD%d", GetName(), i);
263 newsh =
new TCONE(vName,
"CONE",
"void", delZ, rMin1, rMax1, rMin2, rMax2);
265 Float_t zpos = -dZ+delZ*(2.*Float_t(i)+1.);
266 node =
new G3Node(nName,
"",newsh, 0., 0., zpos);
272 }
else if (strcmp(tmp,
"CONS")==0) {
273 TCONS * shape = (TCONS*) parent;
274 Float_t dZ = shape->GetDz();
275 Float_t rMin1 = shape->GetRmin();
276 Float_t rMax1 = shape->GetRmax();
277 Float_t rMin2 = shape->GetRmin2();
278 Float_t rMax2 = shape->GetRmax2();
279 Float_t phi1 = shape->GetPhi1();
280 Float_t phi2 = shape->GetPhi2();
283 Float_t dr1 = (rMax1-rMin1)/Float_t(
fNDivision);
284 Float_t dr2 = (rMax2-rMin2)/Float_t(
fNDivision);
285 Float_t r11, r12, r21, r22;
286 for (i=0; i<ndiv; i++) {
287 r11 = rMin1+Float_t(i)*dr1;
289 r21 = rMin2+Float_t(i)*dr2;
292 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
293 sprintf(nName,
"%sD%d", GetName(), i);
294 newsh =
new TCONS(vName,
"CONS",
"void", dZ, r11, r12, r21, r22, phi1, phi2);
296 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
301 }
else if (
fAxis == 2) {
303 Float_t dPhi = (phi2-phi1)/Float_t(
fNDivision);
304 Float_t nphi1, nphi2;
307 nphi1 = phi1+Float_t(i)*dPhi;
309 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
310 sprintf(nName,
"%sD%d", GetName(), i);
312 newsh =
new TCONS(vName,
"CONS",
"void", dZ, rMin1, rMax1, rMin2, rMax2, nphi1, nphi2);
314 node =
new G3Node(nName,
"", newsh, 0., 0., 0.);
321 for (i=0; i<ndiv; i++) {
322 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
323 sprintf(nName,
"%sD%d", GetName(), i);
324 newsh =
new TCONS(vName,
"CONS",
"void", delZ, rMin1, rMax1, rMin2, rMax2, phi1, phi2);
326 Float_t zpos = -dZ+delZ*(2.*Float_t(i)+1.);
327 node =
new G3Node(nName,
"",newsh, 0., 0., zpos);
332 }
else if (strcmp(tmp,
"BRIK")==0) {
336 TBRIK * shape = (TBRIK*) parent;
337 Float_t dX = shape->GetDx();
338 Float_t dY = shape->GetDy();
339 Float_t dZ = shape->GetDz();
344 for (i=0; i<ndiv; i++) {
345 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
346 sprintf(nName,
"%sD%d", GetName(), i);
347 newsh =
new TBRIK(vName,
"BRIK",
"void", delX, dY, dZ);
349 Float_t xpos = -dX+delX*(2.*Float_t(i)+1.);
350 node =
new G3Node(nName,
"",newsh, xpos, 0., 0.);
354 }
else if (
fAxis == 2) {
357 for (i=0; i<ndiv; i++) {
358 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
359 sprintf(nName,
"%sD%d", GetName(), i);
360 newsh =
new TBRIK(vName,
"BRIK",
"void", dX, delY, dZ);
362 Float_t ypos = -dY+delY*(2.*Float_t(i)+1.);
363 node =
new G3Node(nName,
"",newsh, 0., ypos, 0.);
370 for (i=0; i<ndiv; i++) {
371 sprintf(vName,
"%sD%d", fShape->GetName(),
i);
372 sprintf(nName,
"%sD%d", GetName(), i);
373 newsh =
new TBRIK(vName,
"BRIK",
"void", dX, dY, delZ);
375 Float_t zpos = -dZ+delZ*(2.*Float_t(i)+1.);
376 node =
new G3Node(nName,
"",newsh, 0., 0., zpos);
387 if (!fNodes) fNodes =
new TList();
392 while((node = (
G3Node*)next())) {
394 fNodes->Add(newNode);
395 newNode->SetParent(
this);
396 newNode->
AddSons(node->GetListOfNodes());
407 fName = node.GetName();
408 fTitle = node.GetTitle();
412 fMatrix = node.GetMatrix();
418 fShape =
new TShape(*node.GetShape());
420 fShape = (TShape*) node.GetShape()->Clone();
virtual void AddSon(G3Node *node)
virtual Int_t Ndiv() const
virtual Float_t StartC() const
virtual Float_t Step() const
virtual void ExpandDivisions()
virtual void SetDivision(Int_t ndiv, Int_t axis, Float_t start, Float_t step)
virtual void AddSons(TList *list)
virtual Int_t Axis() const