//------------------------------------------------------------------------
#include <TGeoBBox.h>
+#include <TGeoXtru.h>
#include <TGeoCompositeShape.h>
#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <TGeoPgon.h>
+#include <TGeoTrd1.h>
+#include <TGeoBBox.h>
+#include <TGeoMedium.h>
+#include <TGeoBoolNode.h>
+#include <TGeoCompositeShape.h>
#include <TString.h>
#include <TSystem.h>
#include <TVirtualMC.h>
#include "AliTrackReference.h"
-#include <TGeoTrd1.h>
+
ClassImp(AliFRAMEv3)
//
AliMatrix(idrotm[2087], -100.0, 0.0, 90.0, 270., -10.0, 0.0);
AliMatrix(idrotm[2097], -80.0, 0.0, 90.0, 270., 10.0, 0.0);
+
//
- AliMatrix(idrotm[2088], 90.0, 90.0, 90.0, 180., 0.0, 0.0);
- AliMatrix(idrotm[2089], 90.0, 90.0, 90.0, 0., 0.0, 0.0);
+ AliMatrix(idrotm[2088], 90.0, 180.0, 90.0, 270., 0.0, 0.0);
+ AliMatrix(idrotm[2089], 90.0, -90.0, 90.0, 0., 0.0, 0.0);
//
AliMatrix(idrotm[2090], 90.0, 0.0, 0.0, 0., 90.0, 90.0);
AliMatrix(idrotm[2091], 0.0, 0.0, 90.0, 90., 90.0, 0.0);
Int_t *idtmed = fIdtmed->GetArray()-1999;
//
-// The Space frame
-//
+// The Main Space Frame
+// ALIP2A__0007
+// ALIP2A__0008
//
Float_t pbox[3], ptrap[11], ptrd1[4], ppgon[10];
-
Float_t dx, dy, dz;
- Int_t i, j, jmod;
- jmod = 0;
+ Int_t i, j;
+ Int_t jmod = 0;
//
// Constants
- const Float_t kEps = 0.01;
+//
+ // Materials
+ const TGeoMedium* kMedAir = gGeoManager->GetMedium("FRAME_Air");
const Int_t kAir = idtmed[2004];
const Int_t kSteel = idtmed[2064];
-
+ const Int_t kAlu = idtmed[2008];
+ const Int_t kG10 = idtmed[2021];
+ // Angles
+ const Float_t kEps = 0.01;
const Float_t krad2deg = 180. / TMath::Pi();
const Float_t kdeg2rad = 1. / krad2deg;
const Float_t sin10 = TMath::Sin(10. * kdeg2rad);
+ const Float_t sin20 = TMath::Sin(20. * kdeg2rad);
const Float_t tan10 = TMath::Tan(10. * kdeg2rad);
const Float_t cos10 = TMath::Cos(10. * kdeg2rad);
-
- const Float_t hR = 286; // distance of frame wrt vertex (tangential)
- const Float_t iFrH = 119.00; // Height of inner frame
- const Float_t ringH = 6.00; // Height of the ring bars
- const Float_t ringW = 10.00; // Width of the ring bars in z
- // Positions of ring bars
+ // Dimensions
+ // vertical distance of frame wrt to origin (center of inner rings)
+ const Float_t hR = 286.00;
+ // Height of inner frame from lower edge to outer ring (sectors for detectors)
+ const Float_t iFrH = 119.00;
+ //
+ // radial length of web frame elements
+ const Float_t dHz = 113./cos10 - 0.3; // 114.74 (114.5 on drawing)
+ // Positions of ring bars (ALIP2A_0008)
// outer
const Float_t dymodU[3] = {71.5, 228.5, 339.5};
// inner
const Float_t dymodL[3] = {50.0, 175.0, 297.5};
+ //
// orientation of web frame elements
const Float_t dymodO[5] = {10., -40., 20., -27.1, 18.4};
// Position of web frame elements
for (Int_t ii = 0; ii < 5; ii++) {
dymodW[ii] = dymodW[ii]-3.*TMath::Tan(dymodO[ii]*kdeg2rad);
}
- // radial length of web frame elements
- const Float_t dHz = 114.50;
+ // Inner ring bars (Pos 6)
+ const Float_t ringH = 6.00; // Hight
+ const Float_t ringW = 10.00; // Width of the ring bars in z
+ const Float_t ringT = 1.00; // Thickness of bars
// inner longitudinal bars 4 x 6
- const Float_t longH = 6.00;
- const Float_t longW = 4.00;
+ const Float_t longH = 6.00; // Height
+ const Float_t longW = 4.00; // Width
// outer longitudianl bars 8 x 8
const Float_t longOD = 8.0;
+ // some extra space for mother volume
+ const Float_t dext = sin10 * longW/2.+0.01;
+ // sector hight with extra space
+ const Float_t iFrH0 = iFrH + dext;
// length of inner longitudinal bars
+ // inner
const Float_t longLI = 615.;
+ const Float_t zE = 376.5;
//
// Frame mother volume
//
TGeoPgon* shB77A = new TGeoPgon(0., 360., 18, 2);
shB77A->SetName("shB77A");
- shB77A->DefineSection( 0, -376.5, 280., 415.7);
- shB77A->DefineSection( 1, 376.5, 280., 415.7);
+ shB77A->DefineSection( 0, -zE, 280., 423.7);
+ shB77A->DefineSection( 1, zE, 280., 423.7);
TGeoBBox* shB77B = new TGeoBBox(3.42, 2., 375.5);
shB77B->SetName("shB77B");
TGeoTranslation* trB77A = new TGeoTranslation("trB77A", +283.32, 0., 0.);
ppgon[3] = 2.;
- ppgon[4] = -350.;
- ppgon[5] = 401.35;
- ppgon[6] = 415.6;
+ ppgon[4] = -376.5;
+ ppgon[5] = 402.0;
+ ppgon[6] = 423.6;
ppgon[7] = -ppgon[4];
ppgon[8] = ppgon[5];
ppgon[9] = ppgon[6];
- TVirtualMC::GetMC()->Gsvolu("B076", "PGON", kAir, ppgon, 10);
- TVirtualMC::GetMC()->Gspos("B076", 1, "B077", 0., 0., 0., 0, "ONLY");
+// TVirtualMC::GetMC()->Gsvolu("B076", "PGON", kAir, ppgon, 10);
+//TVirtualMC::GetMC()->Gspos("B076", 1, "B077", 0., 0., 0., 0, "ONLY");
//
// Rings
//
- dz = 2. * 410.2 * TMath::Sin(10.*kdeg2rad) - 2. *dol * TMath::Cos(10.*kdeg2rad)- 2. * doh * TMath::Tan(10.*kdeg2rad);
- Float_t l1 = dz/2.;
- Float_t l2 = dz/2.+2.*doh*TMath::Tan(10.*kdeg2rad);
+ dz = 2. * 410.2 * sin10 - 2. * dol * cos10 - 2. * doh * tan10;
+ Float_t l1 = dz / 2.;
+ Float_t l2 = dz / 2. + 2. * doh * tan10;
TGeoVolumeAssembly* asBI42 = new TGeoVolumeAssembly("BI42");
// Horizontal
- ptrd1[0] = l2 - 0.6 * TMath::Tan(10.*kdeg2rad);
+ ptrd1[0] = l2 - 0.6 * tan10;
ptrd1[1] = l2;
ptrd1[2] = 8.0 / 2.;
ptrd1[3] = 0.6 / 2.;
TVirtualMC::GetMC()->Gsvolu("BIH142", "TRD1", kSteel, ptrd1, 4);
ptrd1[0] = l1;
- ptrd1[1] = l1 + 0.6 * TMath::Tan(10.*kdeg2rad);
+ ptrd1[1] = l1 + 0.6 * tan10;
ptrd1[2] = 8.0 / 2.;
ptrd1[3] = 0.6 / 2.;
TVirtualMC::GetMC()->Gsvolu("BIH242", "TRD1", kSteel, ptrd1, 4);
// Vertical
- ptrd1[0] = l1 + 0.6 * TMath::Tan(10.*kdeg2rad);
- ptrd1[1] = l2 - 0.6 * TMath::Tan(10.*kdeg2rad);
+ ptrd1[0] = l1 + 0.6 * tan10;
+ ptrd1[1] = l2 - 0.6 * tan10;
ptrd1[2] = 0.8 / 2.;
ptrd1[3] = 6.8 / 2.;
TVirtualMC::GetMC()->Gsvolu("BIV42", "TRD1", kSteel, ptrd1, 4);
// Place
- asBI42->AddNode(gGeoManager->GetVolume("BIV42"), 1, new TGeoTranslation(0., 0., 0.));
+ asBI42->AddNode(gGeoManager->GetVolume("BIV42"), 1, new TGeoTranslation(0., 0., 0.0));
asBI42->AddNode(gGeoManager->GetVolume("BIH142"), 1, new TGeoTranslation(0., 0., 3.7));
asBI42->AddNode(gGeoManager->GetVolume("BIH242"), 1, new TGeoTranslation(0., 0., -3.7));
//
//
pbox[0] = 3.37;
pbox[1] = 2.0;
- pbox[2] = 307.5;
+ pbox[2] = longLI / 2.;
TVirtualMC::GetMC()->Gsvolu("B080", "BOX", kSteel, pbox, 3);
pbox[0] = 2.78;
- pbox[1] = 1.4;
- pbox[2] = 307.5;
+ pbox[1] = 1.40;
+ pbox[2] = longLI / 2.;
TVirtualMC::GetMC()->Gsvolu("B081", "BOX", kAir, pbox, 3);
TVirtualMC::GetMC()->Gspos("B081", 1, "B080", 0., 0., 0., 0, "ONLY");
// Small 2nd reference plane elemenet
pbox[0] = 0.05;
pbox[1] = 2.0;
- pbox[2] = 307.5;
+ pbox[2] = longLI / 2.;
TVirtualMC::GetMC()->Gsvolu("BREF2", "BOX", kAir, pbox, 3);
TVirtualMC::GetMC()->Gspos("BREF2", 1, "B080", 3.37 - 0.05, 0., 0., 0, "ONLY");
- TVirtualMC::GetMC()->Gspos("B080", 1, "B077", 283.3, 0., 0., 0, "ONLY");
- TVirtualMC::GetMC()->Gspos("B080", 2, "B077", -283.3, 0., 0., idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B080", 1, "B077", 283.25, 0., 0., 0, "ONLY");
+ TVirtualMC::GetMC()->Gspos("B080", 2, "B077", -283.25, 0., 0., idrotm[2088], "ONLY");
//
//
// Positioning of diagonal bars
- Float_t rd = 405.5;
+ Float_t rd = 405.5 + 0.51;
dz = (dymodU[1]+dymodU[0])/2.;
Float_t dz2 = (dymodU[1]+dymodU[2])/2.;
dy = rd * TMath::Cos(phi*kdeg2rad);
- TVirtualMC::GetMC()->Gspos("B045", 1, "B076", -dx, dy, dz2, idrotm[2019], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 2, "B076", -dx, dy, -dz2, idrotm[2003], "ONLY"); // ?
- TVirtualMC::GetMC()->Gspos("B045", 3, "B076", dx, dy, dz2, idrotm[2020], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 4, "B076", dx, dy, -dz2, idrotm[2027], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 1, "B077", -dx, dy, dz2, idrotm[2019], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 2, "B077", -dx, dy, -dz2, idrotm[2003], "ONLY"); // ?
+ TVirtualMC::GetMC()->Gspos("B045", 3, "B077", dx, dy, dz2, idrotm[2020], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 4, "B077", dx, dy, -dz2, idrotm[2027], "ONLY");
//
dx = rd * TMath::Sin(phi*kdeg2rad);
dy = rd * TMath::Cos(phi*kdeg2rad);
- TVirtualMC::GetMC()->Gspos("B045", 5, "B076", -dx, dy, dz2, idrotm[2021], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 6, "B076", -dx, dy, -dz2, idrotm[2028], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 7, "B076", dx, dy, dz2, idrotm[2022], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 8, "B076", dx, dy, -dz2, idrotm[2029], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 5, "B077", -dx, dy, dz2, idrotm[2021], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 6, "B077", -dx, dy, -dz2, idrotm[2028], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 7, "B077", dx, dy, dz2, idrotm[2022], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 8, "B077", dx, dy, -dz2, idrotm[2029], "ONLY");
//
// phi = 80
dx = rd * TMath::Sin(phi*kdeg2rad);
dy = rd * TMath::Cos(phi*kdeg2rad);
- TVirtualMC::GetMC()->Gspos("B047", 13, "B076", -dx, -dy, dz, idrotm[2008], "ONLY");
- TVirtualMC::GetMC()->Gspos("B047", 14, "B076", -dx, -dy, -dz, idrotm[2010], "ONLY");
- TVirtualMC::GetMC()->Gspos("B047", 15, "B076", dx, -dy, dz, idrotm[2012], "ONLY");
- TVirtualMC::GetMC()->Gspos("B047", 16, "B076", dx, -dy, -dz, idrotm[2011], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B047", 13, "B077", -dx, -dy, dz, idrotm[2008], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B047", 14, "B077", -dx, -dy, -dz, idrotm[2010], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B047", 15, "B077", dx, -dy, dz, idrotm[2012], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B047", 16, "B077", dx, -dy, -dz, idrotm[2011], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 9, "B076", -dx, dy, dz2, idrotm[2023], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 10, "B076", -dx, dy, -dz2, idrotm[2031], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 11, "B076", dx, dy, dz2, idrotm[2026], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 12, "B076", dx, dy, -dz2, idrotm[2030], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 9, "B077", -dx, dy, dz2, idrotm[2023], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 10, "B077", -dx, dy, -dz2, idrotm[2031], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 11, "B077", dx, dy, dz2, idrotm[2026], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 12, "B077", dx, dy, -dz2, idrotm[2030], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 13, "B076", -dx, -dy, dz2, idrotm[2024], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 14, "B076", -dx, -dy, -dz2, idrotm[2032], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 15, "B076", dx, -dy, dz2, idrotm[2025], "ONLY");
- TVirtualMC::GetMC()->Gspos("B045", 16, "B076", dx, -dy, -dz2, idrotm[2033], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 13, "B077", -dx, -dy, dz2, idrotm[2024], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 14, "B077", -dx, -dy, -dz2, idrotm[2032], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 15, "B077", dx, -dy, dz2, idrotm[2025], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B045", 16, "B077", dx, -dy, -dz2, idrotm[2033], "ONLY");
- TVirtualMC::GetMC()->Gspos("BM49", 7, "B076", dx, -dy, 0., idrotm[2025], "ONLY");
- TVirtualMC::GetMC()->Gspos("BM49", 8, "B076", -dx, -dy, 0., idrotm[2024], "ONLY");
+ TVirtualMC::GetMC()->Gspos("BM49", 7, "B077", dx, -dy, 0., idrotm[2025], "ONLY");
+ TVirtualMC::GetMC()->Gspos("BM49", 8, "B077", -dx, -dy, 0., idrotm[2024], "ONLY");
//
-// The internal frame
-//
+// The inner frame
//
//
// Mother Volumes
//
- ptrd1[0] = (hR - longH/2.) * TMath::Tan(10. * kdeg2rad);
- ptrd1[1] = (hR - longH/2. + iFrH ) * TMath::Tan(10. * kdeg2rad);;
- ptrd1[2] = 376.5;
- ptrd1[3] = iFrH / 2.;
-
- Float_t r = 342.0;
- Float_t rout1 = 405.5;
- Float_t rout2 = 411.55;
+ ptrd1[0] = (hR - longH/2. - dext) * tan10;
+ ptrd1[1] = (hR - longH/2. + iFrH0) * tan10;
+ ptrd1[2] = zE;
+ ptrd1[3] = iFrH0 / 2.;
+ Float_t dd = longW / 2. * cos10 + 0.1;
+ TGeoTrd1* shTRD1 = new TGeoTrd1("shTRD1", ptrd1[0], ptrd1[1], ptrd1[2], ptrd1[3]);
+ TGeoBBox* shBox = new TGeoBBox("shBox", 50., zE+10., 1.);
+ TGeoRotation* rot1 = new TGeoRotation("urot1", 100., 0., 90., 90., 10., 0.);
+ TGeoRotation* rot2 = new TGeoRotation("urot2", 80., 0., 90., 90., -10., 0.);
+ Float_t trotDz = iFrH0 / 2. + 1.;
+ Float_t trotDx = 402. * tan10;
+ TGeoCombiTrans* trot1 = new TGeoCombiTrans(-trotDx, 0., trotDz, rot2);
+ TGeoCombiTrans* trot2 = new TGeoCombiTrans(+trotDx, 0., trotDz, rot1);
+ TGeoUnion* uni = new TGeoUnion(shBox, shBox,trot1, trot2);
+ TGeoCompositeShape* shU = new TGeoCompositeShape("shU", uni);
+ TGeoSubtraction* sub = new TGeoSubtraction(shTRD1, shU, 0, 0);
+ TGeoCompositeShape* shCS = new TGeoCompositeShape("shCS", sub);
+ // center of segments
+ Float_t r = (hR - longH/2. + iFrH0 / 2. ) - dext;
+ // center of outer frame
+ //vertical
+ Float_t rout1 = 406.0;
+ // radial
+ Float_t rout2 = 412.3 - 2. * sin10 + 0.25;
+ //
TString module[18];
-
+ TGeoVolume* voIF[18];
+
for (i = 0; i < 18; i++) {
// Create volume i
char name[16];
+ // official module numbering
Int_t mod = i + 13;
if (mod > 17) mod -= 18;
snprintf(name, 16, "BSEGMO%d", mod);
- TVirtualMC::GetMC()->Gsvolu(name, "TRD1", kAir, ptrd1, 4);
- gGeoManager->GetVolume(name)->SetVisibility(kFALSE);
-
+ //
+ TGeoVolume* voTRD1 = new TGeoVolume(name, shCS, kMedAir);
module[i] = name;
// Place volume i
- Float_t phi1 = i * 20.;
- Float_t phi2 = 270 + phi1;
+ Float_t phi1 = i * 20.;
+ Float_t phi2 = 270. + phi1;
if (phi2 >= 360.) phi2 -= 360.;
-
- dx = TMath::Sin(phi1*kdeg2rad)*r;
- dy = -TMath::Cos(phi1*kdeg2rad)*r;
+ dx = TMath::Sin(phi1 * kdeg2rad) * r;
+ dy = -TMath::Cos(phi1 * kdeg2rad) * r;
char nameR[16];
snprintf(nameR, 16, "B43_Rot_%d", i);
TGeoRotation* rot = new TGeoRotation(nameR, 90.0, phi1, 0., 0., 90., phi2);
AliMatrix(idrotm[2034+i], 90.0, phi1, 0., 0., 90., phi2);
TGeoVolume* vol77 = gGeoManager->GetVolume("B077");
- TGeoVolume* volS = gGeoManager->GetVolume(name);
- vol77->AddNode(volS, 1, new TGeoCombiTrans(dx, dy, 0., rot));
+ vol77->AddNode(voTRD1, 1, new TGeoCombiTrans(dx, dy, 0., rot));
//
// Position elements of outer Frame
for (j = 0; j < 3; j++)
{
dz = dymodU[j];
- TGeoVolume* vol = gGeoManager->GetVolume("B076");
+ TGeoVolume* vol = gGeoManager->GetVolume("B077");
vol->AddNode(asBI42, 6*i+2*j+1, new TGeoCombiTrans(dx, dy, dz, rot));
vol->AddNode(asBI42, 6*i+2*j+2, new TGeoCombiTrans(dx, dy, -dz, rot));
}
dx = TMath::Sin(phi1*kdeg2rad)*rout2;
dy = -TMath::Cos(phi1*kdeg2rad)*rout2;
- TVirtualMC::GetMC()->Gspos("B033", i+1, "B076", dx, dy, 0., idrotm[2052+i], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B033", i+1, "B077", dx, dy, 0., idrotm[2052+i], "ONLY");
//
}
// Internal Frame rings
//
//
-// 60x60x5x6 for inner rings (I-beam)
-// 100x60x5 for front and rear rings
+// Pos 7 60x60x5x6 for inner rings (I-beam)
+// Pos 6 100x60x5 for front and rear rings
//
// Front and rear
- ptrd1[0] = (hR - longH / 2.) * tan10 - longW / 2. / cos10;
- ptrd1[1] = (hR + longH / 2.) * tan10 - longW / 2. / cos10;
+//
+
+ ptrd1[0] = (hR - longH / 2.) * tan10 - dd;
+ ptrd1[1] = (hR + longH / 2.) * tan10 - dd;
ptrd1[2] = ringW / 2.;
ptrd1[3] = ringH / 2.;
TVirtualMC::GetMC()->Gsvolu("B072", "TRD1", kSteel, ptrd1, 4);
- ptrd1[0] = (hR - longH / 2. + 0.5) * tan10 - longW / 2. / cos10;
- ptrd1[1] = (hR + longH / 2. - 0.5) * tan10 - longW / 2. / cos10;
+ ptrd1[0] = (hR - longH / 2. + 0.5) * tan10 - dd;
+ ptrd1[1] = (hR + longH / 2. - 0.5) * tan10 - dd;
ptrd1[2] = ringW / 2. - 0.5;
ptrd1[3] = ringH / 2. - 0.5;
// Mother volume
TGeoVolumeAssembly* asBI72 = new TGeoVolumeAssembly("BI72");
// Horizontal
- ptrd1[0] = 288.5* TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[1] = 289.0 * TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[2] = 6./2.;
- ptrd1[3] = 0.5/2.;
+ Float_t rIB1 = hR + ringH/2.;
+ Float_t rIB2 = hR - ringH/2.;
+ ptrd1[0] = (rIB1 - ringT/2.) * tan10 - dd;
+ ptrd1[1] = (rIB1 ) * tan10 - dd;
+ ptrd1[2] = ringH / 2.;
+ ptrd1[3] = ringT / 4.;
TVirtualMC::GetMC()->Gsvolu("BIH172", "TRD1", kSteel, ptrd1, 4);
- ptrd1[0] = 283.0 * TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[1] = 283.5 * TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[2] = 6./2.;
- ptrd1[3] = 0.5/2.;
+ ptrd1[0] = (rIB2 ) * tan10 - dd;
+ ptrd1[1] = (rIB2 + ringT/2.) * tan10 - dd;
+ ptrd1[2] = ringH/2.;
+ ptrd1[3] = ringT/4.;
TVirtualMC::GetMC()->Gsvolu("BIH272", "TRD1", kSteel, ptrd1, 4);
// Vertical
- ptrd1[0] = 283.5 * TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[1] = 288.5 * TMath::Sin(10.* kdeg2rad) - 2.1;
- ptrd1[2] = 0.6/2.;
- ptrd1[3] = 5./2.;
+ ptrd1[0] = (rIB2 + ringT/2.) * tan10 - dd;
+ ptrd1[1] = (rIB1 - ringT/2.) * tan10 - dd;
+ ptrd1[2] = 0.6 / 2.;
+ ptrd1[3] = (ringH - ringT) / 2.;
TVirtualMC::GetMC()->Gsvolu("BIV72", "TRD1", kSteel, ptrd1, 4);
// Place
asBI72->AddNode(gGeoManager->GetVolume("BIV72"), 1, new TGeoTranslation(0., 0., 0.));
- asBI72->AddNode(gGeoManager->GetVolume("BIH172"), 1, new TGeoTranslation(0., 0., 2.75));
- asBI72->AddNode(gGeoManager->GetVolume("BIH272"), 1, new TGeoTranslation(0., 0., -2.75));
+ asBI72->AddNode(gGeoManager->GetVolume("BIH172"), 1, new TGeoTranslation(0., 0., (ringH/2. - ringT/4.)));
+ asBI72->AddNode(gGeoManager->GetVolume("BIH272"), 1, new TGeoTranslation(0., 0., -(ringH/2. - ringT/4.)));
// Web frame
//
WebFrame("B363", dHz, dymodO[3], 10.);
WebFrame("B463", dHz, dymodO[4], 10.);
- dz = -iFrH / 2. + ringH / 2.+ kEps;
+ dz = -iFrH0 / 2. + ringH / 2. + dext;
- Float_t dz0 = longH / 2.;
- Float_t dx0 = (hR + dz0 + 113/2.) * tan10 - longW / 4. / cos10;
- for (jmod = 0; jmod< 18; jmod++)
+ Float_t dz0 = -iFrH0 / 2. + longH + 113. / 2. + dext - 0.1;
+ Float_t dx0 = (hR + iFrH/2.) * tan10 - longW / 4. * cos10 - 0.065;
+ for (jmod = 0; jmod < 18; jmod++)
{
+//
// ring bars
for (i = 0; i < 3; i++) {
- // if ((i == 2) || (jmod ==0) || (jmod == 8)) {
if (i == 2) {
TVirtualMC::GetMC()->Gspos("B072", 6*jmod+i+1, module[jmod], 0, dymodL[i], dz, 0, "ONLY");
TVirtualMC::GetMC()->Gspos("B072", 6*jmod+i+4, module[jmod], 0, -dymodL[i], dz, idrotm[2070], "ONLY");
}
}
}
-
+//
// outer diagonal web
dy = dymodW[0] - (dHz/2.) * TMath::Tan(dymodO[0] * kdeg2rad);
for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("B063", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
- TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
- TVirtualMC::GetMC()->Gspos("B063", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B063", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B063", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
}
dy = dymodW[1] - (dHz/2.) * TMath::Tan(dymodO[1] * kdeg2rad);
for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("B163", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
- TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
- TVirtualMC::GetMC()->Gspos("B163", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B163", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B163", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
}
dy = dymodW[2] - (dHz/2) * TMath::Tan(dymodO[2] * kdeg2rad);
-
- for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("B263", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
- TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
- TVirtualMC::GetMC()->Gspos("B263", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
+
+ for (jmod = 0; jmod < 18; jmod++) {
+ TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B263", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B263", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
}
dy = dymodW[3] - (dHz/2.) * TMath::Tan(dymodO[3] * kdeg2rad);
for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("B363", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
- TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
- TVirtualMC::GetMC()->Gspos("B363", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B363", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B363", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
}
dy = dymodW[4] - (dHz/2.) * TMath::Tan(dymodO[4] * kdeg2rad);
-
- for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("B463", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
- TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
- TVirtualMC::GetMC()->Gspos("B463", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
+
+ for (jmod = 0; jmod < 18; jmod++) {
+ TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B463", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
+ TVirtualMC::GetMC()->Gspos("B463", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
}
// longitudinal bars (TPC rails attached)
// new specs:
// h x w x s = 100 x 75 x 6
-// current:
-// ??
-// ??
// Attention: 2 "U" shaped half rods per cell
// longitudinal bars (no TPC rails attached)
// new specs: h x w x s = 40 x 60 x 5
//
//
//
- Float_t lbox[3];
+ Double_t lbox[3];
lbox[0] = longW / 4.;
lbox[2] = longH / 2.;
lbox[1] = longLI / 2.;
- TVirtualMC::GetMC()->Gsvolu("BA59", "BOX", kSteel, lbox, 3);
+ TVirtualMC::GetMC()->Gsvolu("BA59", "BOX", kSteel, lbox, 3);
+ gGeoManager->GetVolume("BA59")->SetVisContainers();
lbox[0] = longW / 4. - 0.25;
lbox[2] = longH / 2. - 0.50;
TVirtualMC::GetMC()->Gsvolu("BA62", "BOX", kAir, lbox, 3);
TVirtualMC::GetMC()->Gspos("BA62", 1, "BA59", 0.25, 0.0, 0.0, 0, "ONLY");
- dz = -iFrH / 2. + longH / 2. - 0.17;
- dx = hR * tan10 - longW / 4. / cos(10);
- for (jmod = 0; jmod < 18; jmod++) {
- TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+1, module[jmod], 49.31, 0.0, dz, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+2, module[jmod], -49.31, 0.0, dz, idrotm[2087], "ONLY");
- }
+ dz = -iFrH0 / 2. + longH / 2. - 1. * sin10 + dext;
+ dx = hR * tan10 - longW / 4. * cos10 - 0.065;
+ for (jmod = 0; jmod < 18; jmod++) {
+ TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+1, module[jmod], dx, 0.0, dz, idrotm[2096], "ONLY");
+ TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+2, module[jmod], -dx, 0.0, dz, idrotm[2087], "ONLY");
+ }
//
// Rails for TRD
//
// Pos 1
//
+ // angular 80 deg profile
lbox[2] = 4.0;
lbox[0] = 0.2;
lbox[1] = longLI / 2.;
TVirtualMC::GetMC()->Gsvolu("BTRDR_10", "BOX", kSteel, lbox, 3);
+
ptrd1[0] = 3.;
ptrd1[1] = 3. + 0.4 * tan10;
- ptrd1[2] = 307.5;
+ ptrd1[2] = longLI / 2.;
ptrd1[3] = 0.2;
TVirtualMC::GetMC()->Gsvolu("BTRDR_11", "TRD1", kSteel, ptrd1, 4);
+
+ lbox[2] = 2.0;
+ lbox[0] = 0.3;
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_12", "BOX", kAlu, lbox, 3);
+ gGeoManager->GetVolume("BTRDR_12")->SetVisContainers();
+
+ lbox[2] = 2.0;
+ lbox[0] = 0.1;
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_13", "BOX", kG10, lbox, 3);
+ TVirtualMC::GetMC()->Gspos("BTRDR_13", 1, "BTRDR_12", -0.2, 0.0, 0.0, 0, "ONLY");
+
+ lbox[2] = 0.1;
+ lbox[0] = 2.0;
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_14", "BOX", kG10, lbox, 3);
+ dz = -iFrH0 / 2. + longH / 2. + dext;
+ Float_t zpos = 80.;
+ Int_t isec_1[11] = {0, 1, 2, 3, 4, 5, 13, 14, 15, 16, 17};
+
+ for (Int_t index = 0; index < 11; index++) {
+ jmod = isec_1[index];
+ Float_t dz1 = dz + 3. + (zpos - 4.);
+ dx0 = (hR + dz0 + zpos - 4.) * tan10 - (longW / 2. + 0.2) / cos10 - 0.05;
+ if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+1, module[jmod], dx0, 0.0, dz1, idrotm[2096], "ONLY");
+ if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, idrotm[2086], "ONLY");
+ dx0 -= 0.5;
+ if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_12", 2*jmod+1, module[jmod], dx0, 0.0, dz1, idrotm[2096], "ONLY");
+ if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_12", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, idrotm[2087], "ONLY");
+ dz1 += (4 - 0.2);
+ dz1 += dext;
+ dx0 = (hR + dz0 + zpos - 0.2) * tan10 - (longW / 2. + 3. + 0.4) / cos10;
+ if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+1, module[jmod], dx0, 0.0, dz1, 0, "ONLY");
+ if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, 0, "ONLY");
+ dz1 -= 0.3;
+ dx0 -= 0.5;
+ if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_14", 2*jmod+1, module[jmod], dx0, 0.0, dz1, 0, "ONLY");
+ if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_14", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, 0, "ONLY");
+ }
+
// Pos 2
// 40 x 10
lbox[2] = 2.0;
lbox[0] = 0.5;
lbox[1] = longLI / 2.;
- TVirtualMC::GetMC()->Gsvolu("BTRDR_2", "BOX", kAir, lbox, 3);
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_2", "BOX", kAlu, lbox, 3);
+ lbox[2] = 2.0;
+ lbox[0] = 0.1;
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_21", "BOX", kG10, lbox, 3);
+ TVirtualMC::GetMC()->Gspos("BTRDR_21", 1, "BTRDR_2", -0.4, 0.0, 0.0, 0, "ONLY");
+
+ Int_t isec_2a[16] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
+ for (Int_t index = 0; index < 16; index++) {
+ jmod = isec_2a[index];
+ dx0 = (hR + dz0 ) * tan10 + 10. * sin10 - (longW / 4. + 0.5) / cos10;
+ if (jmod >8) {
+ TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+1, module[jmod], dx0-1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2096], "ONLY");
+ } else {
+ TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+2, module[jmod], -dx0+1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2087], "ONLY");
+ }
+ }
+
+ Int_t isec_2b[6] = {6, 7, 8, 10, 11, 12};
+ for (Int_t index = 0; index < 6; index++) {
+ jmod = isec_2b[index];
+ dx0 = (hR + dz0 + zpos - 3.) * tan10 - (longW / 4. + 0.5) / cos10;
+ if (index < 3) {
+ TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+2, module[jmod], -dx0+1.5, 0.0, dz + 3. + zpos - 3., idrotm[2087], "ONLY");
+ } else {
+ TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+1, module[jmod], dx0-1.5, 0.0, dz + 3. + zpos -3. , idrotm[2096], "ONLY");
+ }
+ }
+
// Pos 3
// 40 x 14
lbox[0] = 2.0;
lbox[2] = 0.7;
- lbox[1] = 307.5;
- TVirtualMC::GetMC()->Gsvolu("BTRDR_3", "BOX", kAir, lbox, 3);
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_3", "BOX", kAlu, lbox, 3);
+
+ lbox[0] = 2.0;
+ lbox[2] = 0.1;
+ lbox[1] = longLI / 2.;
+ TVirtualMC::GetMC()->Gsvolu("BTRDR_31", "BOX", kG10, lbox, 3);
+ TVirtualMC::GetMC()->Gspos("BTRDR_31", 1, "BTRDR_3", 0, 0.0, 0.6, 0, "ONLY");
- dz = -iFrH / 2. + longH / 2.;
+ Int_t isec_3[9] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
+
+
+
+ for (Int_t index = 0; index < 9; index++) {
+ jmod = isec_3[index];
+ if (index > 1) TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+1, module[jmod], 50.96-5-2., 0.0, dz+3.7, 0, "ONLY");
+ if (index < 7) TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+2, module[jmod], -50.96+5+2., 0.0, dz+3.7, 0, "ONLY");
+ }
+
+
+//
+// TOF Support Structures
+
+//
+// Frame extension rectangular beams
+ lbox[0] = 6;
+ lbox[1] = 3.;
+ lbox[2] = 36.0;
+ TGeoVolume* voBTOFS1 = new TGeoVolume("BTOFS1", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Steel"));
+ lbox[0] = 5.5;
+ lbox[1] = 2.5;
+ lbox[2] = 36.0;
+ TGeoVolume* voBTOFS11 = new TGeoVolume("BTOFS11", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Air"));
+ voBTOFS1->AddNode(voBTOFS11, 1, gGeoIdentity);
+
+//
+// Frame extension rectangular beams
+// upper clamps
+ TGeoXtru* shBTOFS2 = new TGeoXtru(2);
+ TGeoXtru* shBTOFS3 = new TGeoXtru(2);
+ TGeoXtru* shBTOFS4 = new TGeoXtru(2);
+ TGeoXtru* shBTOFS5 = new TGeoXtru(2);
- for (jmod = 0; jmod < 18; jmod++) {
- dx0 = (hR + dz0 + 80.5 - 4.) * tan10 - (longW / 2. + 0.2) / cos10;
- TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+1, module[jmod], dx0, 0.0, dz + 3. + (80. - 4.), idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+2, module[jmod], -dx0, 0.0, dz + 3. + (80. - 4.), idrotm[2086], "ONLY");
-
- dx0 = (hR + dz0 + 80.5 - 0.2) * tan10 - (longW / 2. + 3. + 0.4) / cos10;
- TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+1, module[jmod], dx0, 0.0, dz + 3. + 80.5 - 0.2, 0, "ONLY");
- TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+2, module[jmod], -dx0, 0.0, dz + 3. + 80.5 - 0.2, 0, "ONLY");
-
- dx0 = (hR + dz0 ) * tan10 + 10. * sin10 - (longW / 4. + 0.5) / cos10;
- TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+1, module[jmod], dx0-1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2096], "ONLY");
- TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+2, module[jmod], -dx0+1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2086], "ONLY");
-
- TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+1, module[jmod], 50.96-5-2., 0.0, dz+3.7, 0, "ONLY");
- TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+2, module[jmod], -50.96+5+2., 0.0, dz+3.7, 0, "ONLY");
+ Double_t xxtru1[7];
+ Double_t yxtru1[7];
+ // 1
+ xxtru1[0] = 8.5;
+ yxtru1[0] = 4.5;
+ // 2
+ xxtru1[1] = -6.0;
+ yxtru1[1] = 4.5;
+ // 3
+ xxtru1[2] = -8.5;
+ yxtru1[2] = 4.5 - 2.5 * sin10;
+ // 4
+ xxtru1[3] = 8.5 - 14.5 / cos10;
+ yxtru1[3] = -6. - 14.5 * sin10;
+ // 5
+ xxtru1[4] = 8.5 - 10.5 / cos10;
+ yxtru1[4] = -6. - 10.5 * sin10;
+ // 6
+ xxtru1[5] = xxtru1[4] + 8. * sin10;
+ yxtru1[5] = yxtru1[4] - 8./cos10;
+ // 7
+ xxtru1[6] = 8.5;
+ yxtru1[6] = -6.0;
+
+ Double_t xxtru2[7];
+ for (Int_t i = 0; i < 7; i++) xxtru2[i] = -xxtru1[i];
+
+ Double_t xxtru3[5];
+ Double_t yxtru3[5];
+ Double_t xxtru4[5];
+ for (Int_t i = 0; i < 4; i++) {
+ xxtru3[i] = xxtru1[i];
+ yxtru3[i] = yxtru1[i];
+ }
+ xxtru3[4] = xxtru1[6];
+ yxtru3[4] = yxtru1[6];
+ for (Int_t i = 0; i < 5; i++) xxtru4[i] = -xxtru3[i];
+
+ shBTOFS2->DefinePolygon(7, xxtru1, yxtru1);
+ shBTOFS2->DefineSection(0, -4.);
+ shBTOFS2->DefineSection(1, +4.);
+
+ shBTOFS3->DefinePolygon(7, xxtru2, yxtru1);
+ shBTOFS3->DefineSection(0, -4.);
+ shBTOFS3->DefineSection(1, +4.);
+ TGeoVolume* voBTOFS2 = new TGeoVolume("BTOFS2", shBTOFS2, gGeoManager->GetMedium("FRAME_Steel"));
+ TGeoVolume* voBTOFS3 = new TGeoVolume("BTOFS3", shBTOFS3, gGeoManager->GetMedium("FRAME_Steel"));
+
+ // different fixation for clamps close to web frame
+ shBTOFS4->DefinePolygon(5, xxtru3, yxtru3);
+ shBTOFS4->DefineSection(0, -4.);
+ shBTOFS4->DefineSection(1, +4.);
+
+ shBTOFS5->DefinePolygon(5, xxtru4, yxtru3);
+ shBTOFS5->DefineSection(0, -4.);
+ shBTOFS5->DefineSection(1, +4.);
+ TGeoVolume* voBTOFS4 = new TGeoVolume("BTOFS4", shBTOFS4, gGeoManager->GetMedium("FRAME_Steel"));
+ TGeoVolume* voBTOFS5 = new TGeoVolume("BTOFS5", shBTOFS5, gGeoManager->GetMedium("FRAME_Steel"));
+
+
+ lbox[0] = 5.5;
+ lbox[1] = 2.5;
+ lbox[2] = 4.0;
+ TGeoVolume* voBTOFS21 = new TGeoVolume("BTOFS21", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Air"));
+ voBTOFS2->AddNode(voBTOFS21, 1, gGeoIdentity);
+ voBTOFS3->AddNode(voBTOFS21, 2, gGeoIdentity);
+ voBTOFS4->AddNode(voBTOFS21, 3, gGeoIdentity);
+ voBTOFS5->AddNode(voBTOFS21, 4, gGeoIdentity);
+
+ TGeoVolumeAssembly* asTOFS00 = new TGeoVolumeAssembly("BTOFS00");
+ asTOFS00->AddNode(voBTOFS1, 1, gGeoIdentity);
+ asTOFS00->AddNode(voBTOFS2, 1, new TGeoTranslation(0., 0., 40.));
+ asTOFS00->AddNode(voBTOFS2, 2, new TGeoTranslation(0., 0., -40.));
+
+ TGeoVolumeAssembly* asTOFS01 = new TGeoVolumeAssembly("BTOFS01");
+ asTOFS01->AddNode(voBTOFS1, 2, gGeoIdentity);
+ asTOFS01->AddNode(voBTOFS3, 1, new TGeoTranslation(0., 0., 40.));
+ asTOFS01->AddNode(voBTOFS3, 2, new TGeoTranslation(0., 0., -40.));
+
+ TGeoVolumeAssembly* asTOFS02 = new TGeoVolumeAssembly("BTOFS02");
+ asTOFS02->AddNode(voBTOFS1, 3, gGeoIdentity);
+ asTOFS02->AddNode(voBTOFS2, 3, new TGeoTranslation(0., 0., -40.));
+ asTOFS02->AddNode(voBTOFS4, 2, new TGeoTranslation(0., 0., 40.));
+
+ TGeoVolumeAssembly* asTOFS03 = new TGeoVolumeAssembly("BTOFS03");
+ asTOFS03->AddNode(voBTOFS1, 4, gGeoIdentity);
+ asTOFS03->AddNode(voBTOFS3, 3, new TGeoTranslation(0., 0., -40.));
+ asTOFS03->AddNode(voBTOFS5, 2, new TGeoTranslation(0., 0., 40.));
+
+
+ asTOFS00->SetVisibility(1);
+ asTOFS01->SetVisibility(1);
+
+ for (i = 0; i < 18; i++) {
+ Float_t dx, dy;
+ Float_t phi1 = i * 20.;
+ Float_t phi2 = 270. + phi1;
+ TGeoRotation* rot1 = new TGeoRotation(Form("TOFS_R1_%d", i), 90.0, phi1, 90., phi2, 0., 0.);
+ dx = TMath::Sin((phi1+8.95) * kdeg2rad) * (rout2 + 12.);
+ dy = -TMath::Cos((phi1+8.95) * kdeg2rad) * (rout2 + 12.);
+ if ((i >3 && i < 8) || (i > 10 && i < 15)) {
+ (gGeoManager->GetVolume("B077"))->AddNode(asTOFS03, i, new TGeoCombiTrans(dx, dy, 345.-53.-0.5, rot1));
+ } else {
+ (gGeoManager->GetVolume("B077"))->AddNode(asTOFS01, i, new TGeoCombiTrans(dx, dy, 345.-53.-0.5, rot1));
+ }
+ dx = TMath::Sin((phi1-8.95) * kdeg2rad) * (rout2 + 12.);
+ dy = -TMath::Cos((phi1-8.95) * kdeg2rad) * (rout2 + 12.);
+ if ((i >3 && i < 8) || (i > 10 && i < 15)) {
+ (gGeoManager->GetVolume("B077"))->AddNode(asTOFS02, i, new TGeoCombiTrans(dx, dy, 345.-53-0.5, rot1));
+ } else {
+ (gGeoManager->GetVolume("B077"))->AddNode(asTOFS00, i, new TGeoCombiTrans(dx, dy, 345.-53-0.5, rot1));
+ }
}
+
//
// Thermal shield
//
snprintf(nameMo, 16, "BSEGMO%d",i);
TVirtualMC::GetMC()->Gsvolu(nameCh, "TRD1", kAir, ptrd1, 4);
gGeoManager->GetVolume(nameCh)->SetVisibility(kFALSE);
- TVirtualMC::GetMC()->Gspos(nameCh, 1, nameMo, 0., 0., -13.12, 0, "ONLY"); // CBL 28/6/2006
+ TVirtualMC::GetMC()->Gspos(nameCh, 1, nameMo, 0., 0., -13.12 + dext, 0, "ONLY"); // CBL 28/6/2006
}
//
TVirtualMC::GetMC()->Gspos("BRS4", 1, "ALIC", 430.+3., -190.+55./2.+rbox[1], 224., 0, "ONLY");
TVirtualMC::GetMC()->Gspos("BRS4", 2, "ALIC", 430.+3., -190.+55./2.+rbox[1], -224., 0, "ONLY");
-// TVirtualMC::GetMC()->Gspos("BRS4", 3, "ALIC", -430.+3, -180.+55./2.+rbox[1], 224., 0, "ONLY");
-// TVirtualMC::GetMC()->Gspos("BRS4", 4, "ALIC", -430.+3, -180.+55./2.+rbox[1], -224., 0, "ONLY");
-
-
//
// The Backframe
Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
Float_t dAir = 1.20479E-3;
- AliMixture(65, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
- AliMixture(5, "AIR$ ", aAir, zAir, dAir,4, wAir);
+ // G10
+ // G10 60% SiO2 40% epoxy
+ Float_t ag10[4]= {12.01, 1., 15.994, 28.086};
+ Float_t zg10[4] = { 6., 1., 8., 14.};
+ Float_t wg10[4] = {0.194, 0.023, 0.443, 0.340};
+
+
+ AliMixture(22, "G10", ag10, zg10, 1.7 , 4, wg10);
+
+ AliMixture(65, "STEEL$", asteel, zsteel, 7.88, 4, wsteel);
+ AliMixture(5, "AIR$ ", aAir, zAir, dAir,4, wAir);
AliMaterial(9, "ALU ", 26.98, 13., 2.7, 8.9, 37.2);
- AliMedium(65, "Stainless Steel", 65, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(65, "Steel", 65, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
AliMedium( 5, "Air", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
AliMedium( 9, "Aluminum", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+ AliMedium(22, "G10", 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
}
TVirtualMC::GetMC()->Gsvolu(nameA, "TRAP", kAir, ptrap, 11);
TVirtualMC::GetMC()->Gspos(nameA, 1, name, -0.25, 0.0, 0., 0, "ONLY");
TVirtualMC::GetMC()->Gspos(nameA, 2, nameI, +0.25, 0.0, 0., 0, "ONLY");
- gGeoManager->GetVolume(name)->SetVisibility(1);
+ gGeoManager->GetVolume(name)->SetVisContainers();;
+ gGeoManager->GetVolume(nameI)->SetVisContainers();;
}