29 LOG(
debug) <<
"Create CalFrame Geometry" << std::endl;
35 const int NUMCROSS = 12;
36 const int NUMSUBSETS = 3;
37 const double TOTALHALFWIDTH = 152.3;
39 const double BEGINPHI = 76.8;
40 const double ENDPHI = 193.03;
41 const double BEGINRADIUS = 490.;
43 const double HALFFRAMETRANS = TOTALHALFWIDTH + 57.2 / 2.;
48 const double FLAGEWIDTH = 15.2;
49 const double RIBWIDTH = 1.5;
50 const double CROSSBOTTOMHEIGHT = 15.2;
51 const double CROSSBOTTOMRADTHICK = 1.5;
52 const double CROSSTOPHEIGHT = 1.5;
53 const double CROSSTOPRADTHICK = 35. / 2.;
56 const double FLAGEHEIGHT = BEGINRADIUS + 3.;
57 const double RIBHEIGHT = FLAGEHEIGHT + 35;
58 const double CROSSBOTTOMWIDTH = 0.5 / (Double_t)NUMSUBSETS * (2. * TOTALHALFWIDTH - 8. * FLAGEWIDTH);
59 const double CROSSTOPWIDTH = CROSSBOTTOMWIDTH;
63 const double CROSSBEAMARCLENGTH = (112.62597) / (NUMCROSS - 1) - .001;
64 const double CROSSBOTTOMSTARTRADIUS = BEGINRADIUS + CROSSBOTTOMRADTHICK;
65 const double CROSSTOPSTART =
66 BEGINRADIUS + 2. * CROSSBOTTOMRADTHICK + CROSSTOPRADTHICK + 0.015;
70 const double ENDRADIUS = RIBHEIGHT + 1.15;
71 const double ENDBEAMRADTHICK = CROSSBOTTOMRADTHICK + CROSSTOPRADTHICK;
72 const double ENDBEAMBEGINRADIUS = BEGINRADIUS + ENDBEAMRADTHICK;
77 TGeoVolume*
top = gGeoManager->GetVolume(
"barrel");
78 TGeoMedium* steel = gGeoManager->GetMedium(
"EMC_S steel$");
79 TGeoMedium* air = gGeoManager->GetMedium(
"EMC_Air$");
82 TGeoVolume* calFrameMO = gGeoManager->MakeTubs(
"CalFrame", air, BEGINRADIUS - 2.1, ENDRADIUS, TOTALHALFWIDTH * 3,
83 BEGINPHI - 3, ENDPHI + 3);
85 calFrameMO->SetVisibility(kFALSE);
88 TGeoVolume* calHalfFrameMO = gGeoManager->MakeTubs(
"HalfFrame", air, BEGINRADIUS - 2, ENDRADIUS, TOTALHALFWIDTH,
89 BEGINPHI - 2.9, ENDPHI + 2.9);
91 calHalfFrameMO->SetVisibility(kFALSE);
93 TGeoVolume* endBeams =
94 gGeoManager->MakeBox(
"End Beams", steel, ENDBEAMRADTHICK, CROSSTOPHEIGHT, TOTALHALFWIDTH);
96 TGeoVolume* skin = gGeoManager->MakeTubs(
"skin", steel, RIBHEIGHT + 0.15, ENDRADIUS, TOTALHALFWIDTH, BEGINPHI,
99 TGeoVolume* flangeVolume = gGeoManager->MakeTubs(
"supportBottom", steel, BEGINRADIUS, FLAGEHEIGHT, FLAGEWIDTH,
102 TGeoVolume* ribVolume =
103 gGeoManager->MakeTubs(
"RibVolume", steel, FLAGEHEIGHT, RIBHEIGHT, RIBWIDTH, BEGINPHI, ENDPHI);
105 TGeoVolume* subSetCross = gGeoManager->MakeTubs(
106 "subSetCross", air, BEGINRADIUS - 1, BEGINRADIUS + 2 * CROSSBOTTOMRADTHICK + 2 * CROSSTOPRADTHICK + 0.15,
107 CROSSBOTTOMWIDTH, BEGINPHI, ENDPHI);
108 subSetCross->SetVisibility(kFALSE);
115 TGeoVolume* crossBottomBeams = gGeoManager->MakeBox(
"crossBottom", steel, CROSSBOTTOMRADTHICK, CROSSBOTTOMHEIGHT,
118 TGeoVolume* crossTopBeams =
119 gGeoManager->MakeBox(
"crossTop", steel, CROSSTOPRADTHICK, CROSSTOPHEIGHT, CROSSTOPWIDTH);
121 TGeoTranslation* trTEST =
new TGeoTranslation();
122 TGeoRotation* rotTEST =
new TGeoRotation();
124 Double_t conv = TMath::Pi() / 180.;
125 Double_t radAngle = 0;
126 Double_t endBeamParam = .4;
129 for (Int_t
i = 0;
i < NUMCROSS;
i++) {
130 Double_t loopPhi = BEGINPHI + 1.8;
134 radAngle = (loopPhi +
i * CROSSBEAMARCLENGTH) * conv;
136 rotTEST->SetAngles(BEGINPHI +
i * CROSSBEAMARCLENGTH, 0,
138 trTEST->SetTranslation(cos(radAngle) * CROSSBOTTOMSTARTRADIUS, sin(radAngle) * CROSSBOTTOMSTARTRADIUS, 0);
140 TGeoCombiTrans* combo =
new TGeoCombiTrans(*trTEST, *rotTEST);
141 combo->RegisterYourself();
142 crossBottomBeams->SetVisibility(1);
143 subSetCross->AddNode(crossBottomBeams,
i + 1, combo);
144 if (
i != 0 &&
i != NUMCROSS - 1) {
146 rotTEST->SetAngles(BEGINPHI +
i * CROSSBEAMARCLENGTH, 0,
148 trTEST->SetTranslation(cos(radAngle) * CROSSTOPSTART, sin(radAngle) * CROSSTOPSTART, 0);
149 crossTopBeams->SetVisibility(1);
150 subSetCross->AddNode(crossTopBeams,
i + 1,
new TGeoCombiTrans(*trTEST, *rotTEST));
154 rotTEST->SetAngles(BEGINPHI +
i * CROSSBEAMARCLENGTH, 0,
156 trTEST->SetTranslation(cos((77 - endBeamParam) * conv) * (ENDBEAMBEGINRADIUS),
157 sin((77 - endBeamParam) * conv) * (ENDBEAMBEGINRADIUS), 0);
158 endBeams->SetVisibility(1);
159 calHalfFrameMO->AddNode(endBeams, 1,
new TGeoCombiTrans(*trTEST, *rotTEST));
161 rotTEST->SetAngles(193.03, 0, 0);
162 trTEST->SetTranslation(cos((193.03 + endBeamParam) * conv) * (ENDBEAMBEGINRADIUS) ,
163 sin((193.03 + endBeamParam) * conv) * (ENDBEAMBEGINRADIUS), 0);
164 endBeams->SetVisibility(1);
165 calHalfFrameMO->AddNode(endBeams, 2,
new TGeoCombiTrans(*trTEST, *rotTEST));
173 TGeoTranslation* origin1 =
new TGeoTranslation(0, 0, 0);
174 TGeoTranslation* origin2 =
new TGeoTranslation(0, 0, 2 * (CROSSBOTTOMWIDTH + FLAGEWIDTH));
175 TGeoTranslation* origin3 =
new TGeoTranslation(0, 0, -2 * (CROSSBOTTOMWIDTH + FLAGEWIDTH));
178 TGeoTranslation* str1 =
new TGeoTranslation(0, 0, -3 * (CROSSBOTTOMWIDTH + FLAGEWIDTH));
179 TGeoTranslation* str2 =
new TGeoTranslation(0, 0, -(CROSSBOTTOMWIDTH + FLAGEWIDTH));
180 TGeoTranslation* str3 =
new TGeoTranslation(0, 0, (CROSSBOTTOMWIDTH + FLAGEWIDTH));
181 TGeoTranslation* str4 =
new TGeoTranslation(0, 0, 3 * (CROSSBOTTOMWIDTH + FLAGEWIDTH));
184 TGeoTranslation* halfTrans1 =
new TGeoTranslation(0, 0, HALFFRAMETRANS);
185 TGeoTranslation* halfTrans2 =
new TGeoTranslation(0, 0, -HALFFRAMETRANS);
188 calHalfFrameMO->AddNode(flangeVolume, 1, str1);
189 calHalfFrameMO->AddNode(flangeVolume, 2, str2);
190 calHalfFrameMO->AddNode(flangeVolume, 3, str3);
191 calHalfFrameMO->AddNode(flangeVolume, 4, str4);
193 calHalfFrameMO->AddNode(ribVolume, 1, str1);
194 calHalfFrameMO->AddNode(ribVolume, 2, str2);
195 calHalfFrameMO->AddNode(ribVolume, 3, str3);
196 calHalfFrameMO->AddNode(ribVolume, 4, str4);
199 calHalfFrameMO->AddNode(subSetCross, 1, origin1);
200 calHalfFrameMO->AddNode(subSetCross, 2, origin2);
201 calHalfFrameMO->AddNode(subSetCross, 3, origin3);
208 calHalfFrameMO->AddNode(skin, 1, gGeoIdentity);
210 calFrameMO->AddNode(calHalfFrameMO, 1, halfTrans1);
211 calFrameMO->AddNode(calHalfFrameMO, 2, halfTrans2);
213 top->AddNode(calFrameMO, 1,
new TGeoTranslation(0., 30., 0.));
214 LOG(
debug) <<
"**********************************\nmEndRadius:\t" << ENDRADIUS << std::endl;