Created
February 12, 2021 01:03
-
-
Save jdbrice/d425410556e9f1ac22d7567872598e90 to your computer and use it in GitHub Desktop.
Rough STAR sTGC geometry using ROOT TGeo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Globals | |
TGeoManager *geom; | |
TGeoElementTable *table; | |
// Materials | |
TGeoMedium *mediumAir; | |
TGeoMedium *mediumG10; | |
TGeoMedium *mediumNPC02; | |
TGeoMedium *mediumAl; | |
// DIMENSIONS | |
const double PLS = 60.2361; // long side cm | |
const double PSS = 0.308571429 * PLS; // 18.587139429; // short side cm | |
const double PDZ = 0.5; | |
const double FEEL = PSS * 0.70;//8.198156465/12.907735714*1.2; | |
const double FEES = .635135135 * FEEL; //8.198156465; | |
// <Mixture name="G10" dens="1.7" > | |
// <Component name="Si" a="28.08" z="14" w="0.6*1*28./60." /> | |
// <Component name="O" a="16" z="8" w="0.6*2*16./60. + 0.4*4*16./174." /> | |
// <Component name="C" a="12" z="6" w="0.4*8*12./174." /> | |
// <Component name="H" a="1" z="1" w="0.4*14*1./174." /> | |
// </Mixture> | |
// <Mixture name="NPCO2" dens="0.2529E-02" > <!--g/cm3--> | |
// <Component name="C" a="12" z="6" w="28" /> | |
// <Component name="H" a="1" z="1" w="54" /> | |
// <Component name="O" a="16" z="8" w="11" /> | |
// </Mixture> | |
void makeMaterials(){ | |
TGeoMixture *air = new TGeoMixture("air",4, 0.00120479); | |
air->AddElement(table->GetElement(6),0.000124); | |
air->AddElement(table->GetElement(7),0.755268); | |
air->AddElement(table->GetElement(8),0.231781); | |
air->AddElement(table->GetElement(18),0.012827); | |
mediumAir = new TGeoMedium("Air",0,air); | |
TGeoMixture *g10 = new TGeoMixture("g10",4, 1.7); | |
g10->AddElement(table->GetElement(14),0.6*1*28./60.); | |
g10->AddElement(table->GetElement(8),0.6*2*16./60. + 0.4*4*16./174.); | |
g10->AddElement(table->GetElement(6),0.4*8*12./174.); | |
g10->AddElement(table->GetElement(1),0.4*14*1./174.); | |
mediumG10 = new TGeoMedium("G10",0,g10); | |
TGeoMixture *npc02 = new TGeoMixture("npc02",3, 0.2529E-02); | |
npc02->AddElement(table->GetElement(6),11); | |
npc02->AddElement(table->GetElement(1),54); | |
npc02->AddElement(table->GetElement(8),11); | |
mediumNPC02 = new TGeoMedium("NPC02",0,npc02); | |
TGeoMixture *al = new TGeoMixture("al",1, 1.0); | |
al->AddElement(table->GetElement(13),1); | |
mediumAl = new TGeoMedium("Al",0,al); | |
} | |
void makeBrackets( TGeoVolume * top ) { | |
const double braDZ = 1.0; | |
const double braW = 9.6/2.0; | |
const double braH = 3.2/2.0; | |
TGeoVolume *bra = geom->MakeBox("BR0",mediumAl, braW/2.0, braH/2.0, braDZ/2); | |
bra->SetLineColor(TColor::GetColor("#9e9e9e")); | |
bra->SetVisibility(1); | |
top->AddNode( bra, 1, new TGeoTranslation( braW/2.0,braH/2.0, (PDZ*3) +braDZ/2.0 ) ); | |
TGeoVolume *brb = geom->MakeBox("BR1",mediumAl, braH/2.0, (braW - braH)/2.0, braDZ/2); | |
brb->SetLineColor(TColor::GetColor("#9e9e9e")); | |
brb->SetVisibility(1); | |
top->AddNode( brb, 1, new TGeoTranslation( braH/2.0,(braW - braH), (PDZ*3) + braDZ/2.0) ); | |
const double breDZ = 0.5; | |
const double breW = 9.6; | |
const double breH = 3.2; | |
TGeoVolume *bre0 = geom->MakeBox("BRE0",mediumAl, breW/2.0, breH/2.0, breDZ/2); | |
bre0->SetLineColor(TColor::GetColor("#9e9e9e")); | |
bre0->SetVisibility(1); | |
top->AddNode( bre0, 1, new TGeoTranslation( PLS - breW/2.0 + (breW/3.0),breH/2.0, (PDZ*3) + breDZ/2.) ); | |
top->AddNode( bre0, 2, new TGeoTranslation( PLS - breW/2.0 + (breW/3.0),breH/2.0, -(breDZ/2.0)) ); | |
TGeoVolume *bre1 = geom->MakeBox("BRE1",mediumAl, breDZ/2.0, breH/2.0, (PDZ*3)/2.); | |
bre1->SetLineColor(TColor::GetColor("#9e9e9e")); | |
bre1->SetVisibility(1); | |
top->AddNode( bre1, 1, new TGeoTranslation( PLS + breDZ*2,breH/2.0, +(PDZ*3)/2. ) ); | |
// one is 90 off | |
auto bretr0 = new TGeoTranslation( breH/2.0, PLS - breW/2.0 + (breW/3.0), (PDZ*3) + breDZ/2.); | |
auto brer0 = new TGeoRotation( "brer0", -90, 0, 0 ); | |
top->AddNode( bre0, 3, new TGeoCombiTrans( *bretr0, *brer0 ) ); | |
auto bretr1 = new TGeoTranslation( breH/2.0, PLS - breW/2.0 + (breW/3.0), -(breDZ/2.0)); | |
top->AddNode( bre0, 4, new TGeoCombiTrans( *bretr1, *brer0 ) ); | |
auto bretr2 = new TGeoTranslation(breH/2.0, PLS + breDZ*2, +(PDZ*3)/2. ); | |
top->AddNode( bre1, 2, new TGeoCombiTrans( *bretr2, *brer0 ) ); | |
TGeoVolume *bre2 = geom->MakeBox("BRE2",mediumAl, breW/2, breH, breDZ); | |
bre2->SetLineColor(TColor::GetColor("#9e9e9e")); | |
bre2->SetVisibility(1); | |
auto tr1 = new TGeoTranslation( PLS/2.0 + 2*breW/2. + breH/4, PLS/2.0 + 2.*breH/2. + breH, -(breDZ)/2. ); | |
auto r1 = new TGeoRotation( "brer1", -45, 0, 0 ); | |
top->AddNode( bre2, 1, new TGeoCombiTrans( *tr1, *r1 ) ); | |
} | |
void makeFEES( TGeoVolume * top ){ | |
const double feeSO = 3.2 * (2./3.); | |
// make the FEES | |
TGeoVolume *feeVol = geom->MakeBox("FEEV",mediumG10, 0.2, FEEL/2.0, FEES/2.0); | |
feeVol->SetLineColor(TColor::GetColor("#1a237e")); | |
feeVol->SetVisibility(1); | |
TGeoTranslation *feetr0 = new TGeoTranslation(PLS - feeSO, (PSS - FEEL)/2.0 + FEEL/2.0 + (PSS - FEEL)/3.0, FEES/2.0 + (PDZ*3)); | |
top->AddNode( feeVol, 1, feetr0 ); | |
// TGeoTranslation *feetr0 = new TGeoTranslation(PLS, (PSS - FEEL)/2.0 + FEEL/2.0 , FEES/2.0); | |
TGeoTranslation *feetr1 = new TGeoTranslation( (PSS - FEEL)/2.0 + FEEL/2.0 + (PSS - FEEL)/3.0, PLS - feeSO, FEES/2.0 + (PDZ*3)); | |
TGeoRotation * feer0 = new TGeoRotation( "feer0", 90, 0, 0 ); | |
top->AddNode( feeVol, 2, new TGeoCombiTrans( *feetr1, *feer0 ) ); | |
// first diagonal FEE | |
double bump = sqrt( pow(FEEL,2)/2.0 ); | |
double fudge = FEEL / 36.0; | |
size_t iD = 1; | |
TGeoTranslation *feetr2 = new TGeoTranslation( PSS + iD*(bump/2.0) + (iD*fudge), PLS - iD*(bump/2.0) - (iD*fudge) - feeSO, FEES/2.0 + (PDZ*3)); | |
TGeoRotation * feer1 = new TGeoRotation( "feer0", 45, 0, 0 ); | |
top->AddNode( feeVol, 3, new TGeoCombiTrans( *feetr2, *feer1 ) ); | |
iD = 3; | |
TGeoTranslation *feetr3 = new TGeoTranslation( PSS + iD*(bump/2.0) + (iD*fudge), PLS - iD*(bump/2.0) - (iD*fudge) - feeSO, FEES/2.0 + (PDZ*3)); | |
top->AddNode( feeVol, 4, new TGeoCombiTrans( *feetr3, *feer1 ) ); | |
iD = 5; | |
TGeoTranslation *feetr4 = new TGeoTranslation( PSS + iD*(bump/2.0) + (iD*fudge), PLS - iD*(bump/2.0) - (iD*fudge) - feeSO, FEES/2.0 + (PDZ*3)); | |
top->AddNode( feeVol, 5, new TGeoCombiTrans( *feetr4, *feer1 ) ); | |
iD = 7; | |
TGeoTranslation *feetr5 = new TGeoTranslation( PSS + iD*(bump/2.0) + (iD*fudge), PLS - iD*(bump/2.0) - (iD*fudge) - feeSO, FEES/2.0 + (PDZ*3)); | |
top->AddNode( feeVol, 6, new TGeoCombiTrans( *feetr5, *feer1 ) ); | |
} | |
void makePlastic( TGeoVolume * top ){ | |
TGeoVolume * plaVol = geom->MakeXtru( "PLAB", mediumG10, 2 ); | |
const double ds = 0.1; | |
const double th = 2.2; | |
const double x0 = PLS + ds; | |
double px[] = {x0, x0 + th*4, x0 + th*4, x0 + th*2, PSS + th*2, PSS + th*2, PSS + th, 0, 0, PSS }; | |
double py[] = {0, 0 , PSS + ds , PSS + ds, PLS, x0, x0 + th, x0 + th, x0 + ds, x0 + ds }; | |
((TGeoXtru*)plaVol->GetShape())->DefinePolygon( 9, px, py ); | |
((TGeoXtru*)plaVol->GetShape())->DefineSection( 0, 0, 0, 0, 1.0 ); | |
((TGeoXtru*)plaVol->GetShape())->DefineSection( 1, PDZ, 0, 0, 1.0 ); | |
plaVol->SetLineColor(TColor::GetColor( "#29b6f6" )); | |
plaVol->SetVisibility(1); | |
auto tr = new TGeoTranslation(0.,0., PDZ); | |
top->AddNode( plaVol, 1, tr ); | |
} | |
void makeTubes( TGeoVolume * top ){ | |
const double rmin = 1.4; | |
const double rmax = 1.5; | |
const double dz = 50.628845533 + 10.0; | |
TGeoVolume * plaVol = geom->MakeTube( "TUBE0", mediumG10, rmin, rmax, dz/2. ); | |
plaVol->SetLineColor(TColor::GetColor( "#26a69a" )); | |
plaVol->SetVisibility(1); | |
auto tr1 = new TGeoTranslation(PLS/2.0 + PSS/1.8 + 2*rmin,PLS/1.8 + PSS/2 - 2*rmin, +3*PDZ + rmin*2); | |
TGeoRotation * r1 = new TGeoRotation( "tuber1", 45, 90, 0 ); | |
top->AddNode( plaVol, 1, new TGeoCombiTrans( *tr1, *r1 ) ); | |
TGeoVolume * plaVol2 = geom->MakeTube( "TUBE1", mediumG10, rmin, rmax, PSS/2. ); | |
plaVol2->SetLineColor(TColor::GetColor( "#26a69a" )); | |
plaVol2->SetVisibility(1); | |
auto tr2 = new TGeoTranslation(PSS/2,PLS + 2*rmin, +3*PDZ + rmin*2); | |
TGeoRotation * r2 = new TGeoRotation( "tuber2", 90, 90, 0 ); | |
top->AddNode( plaVol2, 2, new TGeoCombiTrans( *tr2, *r2 ) ); | |
} | |
void rootSTGM(){ | |
geom = new TGeoManager("geom","My first 3D geometry"); | |
table = geom->GetElementTable(); | |
makeMaterials(); | |
TCanvas *c = new TCanvas("c", "c",0,0,600,600); | |
TGeoVolume *top = geom->MakeBox("TOP",mediumAir,200,200,200); | |
geom->SetTopVolume(top); | |
geom->SetTopVisible(0); | |
top->SetVisibility(0); | |
TGeoVolume * pentVol = geom->MakeXtru( "PCBP", mediumG10, 2 ); | |
double px[] = {0, PLS, PLS, PSS, 0 }; | |
double py[] = {0, 0 , PSS, PLS, PLS }; | |
((TGeoXtru*)pentVol->GetShape())->DefinePolygon( 5, px, py ); | |
((TGeoXtru*)pentVol->GetShape())->DefineSection( 0, 0, 0, 0, 1.0 ); | |
((TGeoXtru*)pentVol->GetShape())->DefineSection( 1, PDZ, 0, 0, 1.0 ); | |
pentVol->SetLineColor(TColor::GetColor( "#ffee58" )); | |
pentVol->SetVisibility(1); | |
TGeoTranslation *tr0 = new TGeoTranslation(0.,0., 0.); | |
top->AddNode( pentVol, 1, tr0 ); | |
TGeoTranslation *tr1 = new TGeoTranslation(0.,0., 2. * PDZ); | |
top->AddNode( pentVol, 2, tr1 ); | |
TGeoVolume * pentVolGas = geom->MakeXtru( "GASP", mediumG10, 2 ); | |
((TGeoXtru*)pentVolGas->GetShape())->DefinePolygon( 5, px, py ); | |
((TGeoXtru*)pentVolGas->GetShape())->DefineSection( 0, 0, 0, 0, 1.0 ); | |
((TGeoXtru*)pentVolGas->GetShape())->DefineSection( 1, PDZ, 0, 0, 1.0 ); | |
pentVolGas->SetLineColor(kRed); | |
pentVolGas->SetVisibility(1); | |
TGeoTranslation *tr3 = new TGeoTranslation(0.,0., PDZ); | |
top->AddNode( pentVolGas, 1, tr3 ); | |
makeFEES( top ); | |
makeBrackets( top ); | |
makePlastic( top ); | |
makeTubes( top ); | |
// tunnel->SetLineColor(kBlue); | |
// tunnel->SetVisibility(1); | |
geom->CloseGeometry(); | |
top->Draw("ogl"); | |
TView *view = gPad->GetView(); | |
view->ShowAxis(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment