本文整理汇总了C++中TGeoVolume::SetVisibility方法的典型用法代码示例。如果您正苦于以下问题:C++ TGeoVolume::SetVisibility方法的具体用法?C++ TGeoVolume::SetVisibility怎么用?C++ TGeoVolume::SetVisibility使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TGeoVolume
的用法示例。
在下文中一共展示了TGeoVolume::SetVisibility方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: visibility_all_volumes
void visibility_all_volumes(Bool_t vis_state)
{
TGeoVolume *v;
TIter it(gGeoManager->GetListOfVolumes());
while ((v = (TGeoVolume*) it()) != 0)
{
v->SetVisibility(vis_state);
}
full_update();
}
示例2: MakeCopyVolume
virtual TGeoVolume* MakeCopyVolume(TGeoShape *newshape) {
// make a copy of this volume. build a volume with same name, shape and medium
TGeoVolume *vol = _copyVol(newshape);
vol->SetVisibility(IsVisible());
vol->SetLineColor(GetLineColor());
vol->SetLineStyle(GetLineStyle());
vol->SetLineWidth(GetLineWidth());
vol->SetFillColor(GetFillColor());
vol->SetFillStyle(GetFillStyle());
vol->SetField(fField);
if (fFinder)
vol->SetFinder(fFinder);
CloneNodesAndConnect(vol);
((TObject*) vol)->SetBit(kVolumeClone);
return vol;
}
示例3: visibility_volume_by_material
void visibility_volume_by_material(const char* material_re, Bool_t vis_state)
{
TPMERegexp re(material_re, "o");
TGeoMaterial *m;
TIter it(gGeoManager->GetListOfMaterials());
while ((m = (TGeoMaterial*) it()) != 0)
{
if (re.Match(m->GetName()))
{
TGeoVolume *v;
TIter it2(gGeoManager->GetListOfVolumes());
while ((v = (TGeoVolume*) it2()) != 0)
{
if (v->GetMaterial() == m)
{
v->SetVisibility(vis_state);
}
}
}
}
full_update();
}
示例4: rootgeom
void rootgeom()
{
//Definition of a simple geometry (the 4 ROOT characters)
//Author: Andrei Gheata
// gStyle->SetCanvasPreferGL(true);
gSystem->Load("libGeom");
TGeoManager *geom = new TGeoManager("simple1", "Simple geometry");
//--- define some materials
TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0);
TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
// //--- define some media
TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum);
TGeoMedium *Al = new TGeoMedium("Root Material",2, matAl);
//--- define the transformations
TGeoTranslation *tr1 = new TGeoTranslation(20., 0, 0.);
TGeoTranslation *tr2 = new TGeoTranslation(10., 0., 0.);
TGeoTranslation *tr3 = new TGeoTranslation(10., 20., 0.);
TGeoTranslation *tr4 = new TGeoTranslation(5., 10., 0.);
TGeoTranslation *tr5 = new TGeoTranslation(20., 0., 0.);
TGeoTranslation *tr6 = new TGeoTranslation(-5., 0., 0.);
TGeoTranslation *tr7 = new TGeoTranslation(7.5, 7.5, 0.);
TGeoRotation *rot1 = new TGeoRotation("rot1", 90., 0., 90., 270., 0., 0.);
TGeoCombiTrans *combi1 = new TGeoCombiTrans(7.5, -7.5, 0., rot1);
TGeoTranslation *tr8 = new TGeoTranslation(7.5, -5., 0.);
TGeoTranslation *tr9 = new TGeoTranslation(7.5, 20., 0.);
TGeoTranslation *tr10 = new TGeoTranslation(85., 0., 0.);
TGeoTranslation *tr11 = new TGeoTranslation(35., 0., 0.);
TGeoTranslation *tr12 = new TGeoTranslation(-15., 0., 0.);
TGeoTranslation *tr13 = new TGeoTranslation(-65., 0., 0.);
TGeoTranslation *tr14 = new TGeoTranslation(0,0,-100);
TGeoCombiTrans *combi2 = new TGeoCombiTrans(0,0,100,
new TGeoRotation("rot2",90,180,90,90,180,0));
TGeoCombiTrans *combi3 = new TGeoCombiTrans(100,0,0,
new TGeoRotation("rot3",90,270,0,0,90,180));
TGeoCombiTrans *combi4 = new TGeoCombiTrans(-100,0,0,
new TGeoRotation("rot4",90,90,0,0,90,0));
TGeoCombiTrans *combi5 = new TGeoCombiTrans(0,100,0,
new TGeoRotation("rot5",0,0,90,180,90,270));
TGeoCombiTrans *combi6 = new TGeoCombiTrans(0,-100,0,
new TGeoRotation("rot6",180,0,90,180,90,90));
//--- make the top container volume
Double_t worldx = 110.;
Double_t worldy = 50.;
Double_t worldz = 5.;
TGeoVolume *top = geom->MakeBox("TOP", Vacuum, 270., 270., 120.);
geom->SetTopVolume(top);
TGeoVolume *replica = geom->MakeBox("REPLICA", Vacuum,120,120,120);
replica->SetVisibility(kFALSE);
TGeoVolume *rootbox = geom->MakeBox("ROOT", Vacuum, 110., 50., 5.);
rootbox->SetVisibility(kFALSE);
//--- make letter 'R'
TGeoVolume *R = geom->MakeBox("R", Vacuum, 25., 25., 5.);
R->SetVisibility(kFALSE);
TGeoVolume *bar1 = geom->MakeBox("bar1", Al, 5., 25, 5.);
bar1->SetLineColor(kRed);
R->AddNode(bar1, 1, tr1);
TGeoVolume *bar2 = geom->MakeBox("bar2", Al, 5., 5., 5.);
bar2->SetLineColor(kRed);
R->AddNode(bar2, 1, tr2);
R->AddNode(bar2, 2, tr3);
TGeoVolume *tub1 = geom->MakeTubs("tub1", Al, 5., 15., 5., 90., 270.);
tub1->SetLineColor(kRed);
R->AddNode(tub1, 1, tr4);
TGeoVolume *bar3 = geom->MakeArb8("bar3", Al, 5.);
bar3->SetLineColor(kRed);
TGeoArb8 *arb = (TGeoArb8*)bar3->GetShape();
arb->SetVertex(0, 15., -5.);
arb->SetVertex(1, 0., -25.);
arb->SetVertex(2, -10., -25.);
arb->SetVertex(3, 5., -5.);
arb->SetVertex(4, 15., -5.);
arb->SetVertex(5, 0., -25.);
arb->SetVertex(6, -10., -25.);
arb->SetVertex(7, 5., -5.);
R->AddNode(bar3, 1, gGeoIdentity);
//--- make letter 'O'
TGeoVolume *O = geom->MakeBox("O", Vacuum, 25., 25., 5.);
O->SetVisibility(kFALSE);
TGeoVolume *bar4 = geom->MakeBox("bar4", Al, 5., 7.5, 5.);
bar4->SetLineColor(kYellow);
O->AddNode(bar4, 1, tr5);
O->AddNode(bar4, 2, tr6);
TGeoVolume *tub2 = geom->MakeTubs("tub1", Al, 7.5, 17.5, 5., 0., 180.);
tub2->SetLineColor(kYellow);
O->AddNode(tub2, 1, tr7);
O->AddNode(tub2, 2, combi1);
//--- make letter 'T'
TGeoVolume *T = geom->MakeBox("T", Vacuum, 25., 25., 5.);
T->SetVisibility(kFALSE);
TGeoVolume *bar5 = geom->MakeBox("bar5", Al, 5., 20., 5.);
bar5->SetLineColor(kBlue);
T->AddNode(bar5, 1, tr8);
//.........这里部分代码省略.........
示例5: robot
//.........这里部分代码省略.........
Bbul->SetLineColor(17);
Bbul->SetFillColor(17);
// drawing arms
top->AddNodeOverlap(S, 1, new TGeoCombiTrans(3, 73, 30, new TGeoRotation("R2", 0, -30, 0)));
top->AddNodeOverlap(S, 1, new TGeoCombiTrans(3, -73, 30, new TGeoRotation("R2", 0, 210, 0)));
top->AddNodeOverlap(S_1, 1, new TGeoCombiTrans(3, -73, 27, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(S_1, 1, new TGeoCombiTrans(3, 73, 27, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Pal, 1, new TGeoCombiTrans(3, -73, -5, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Pal, 1, new TGeoCombiTrans(3, 73, -5, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Fal, 1, new TGeoCombiTrans(3, -73, -60, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Fal, 1, new TGeoCombiTrans(3, 73, -60, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Bbul, 1, new TGeoCombiTrans(3, -97, -72, new TGeoRotation("R2", 0, -90, 0)));
top->AddNodeOverlap(Bbul, 1, new TGeoCombiTrans(3, -97, -48, new TGeoRotation("R2", 0, -90, 0)));
top->AddNodeOverlap(Bbul, 1, new TGeoCombiTrans(3, 97, -72, new TGeoRotation("R2", 0, 90, 0)));
top->AddNodeOverlap(Bbul, 1, new TGeoCombiTrans(3, 97, -48, new TGeoRotation("R2", 0, 90, 0)));
// hands
TGeoVolume *Son_d = Robot->MakeBox("Son_d", Iron, 15, 15, 7);
Son_d->SetLineColor(4);
Son_d->SetFillColor(4);
TGeoVolume *Son_g = Robot->MakeBox("Son_g", Iron, 4, 10, 4);
Son_g->SetLineColor(4);
Son_g->SetFillColor(4);
TGeoVolume *Son_g1 = Robot->MakeBox("Son_g1", Iron, 6, 6, 6);
Son_g1->SetLineColor(4);
Son_g1->SetFillColor(4);
TGeoVolume *Son_g2 = Robot->MakeBox("Son_g2", Iron, 8, 3, 3);
Son_g2->SetLineColor(4);
Son_g2->SetFillColor(4);
TGeoVolume *Last_b = Robot->MakeCone("Last_b", Iron, 10, 0, 0, 0, 4);
Last_b->SetLineColor(17);
Last_b->SetFillColor(17);
TGeoVolume *Last = Robot->MakeSphere("Last", Iron, 0, 3, 0, 180, 0, 360);
Last->SetLineColor(2);
Last->SetFillColor(2);
// drawing hands
top->AddNodeOverlap(Son_d, 1, new TGeoCombiTrans(3, -80, -105, new TGeoRotation("R2", 0, 90, 0)));
for (int i = 0; i < 4; i++) {
top->AddNodeOverlap(Son_g, 1, new TGeoCombiTrans(-6 + 6 * i, -72, -118, new TGeoRotation("R2", 0, -10, 0)));
}
for (int i = 0; i < 4; i++) {
top->AddNodeOverlap(Son_g, 1, new TGeoCombiTrans(-6 + 6 * i, -67, -113, new TGeoRotation("R2", 0, 110, 0)));
}
top->AddNodeOverlap(Son_g1, 1, new TGeoCombiTrans(-5, -70, -98, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Son_g2, 1, new TGeoCombiTrans(-5, -65, -102, new TGeoRotation("R2", 0, 60, 0)));
top->AddNodeOverlap(Son_d, 1, new TGeoCombiTrans(3, 80, -105, new TGeoRotation("R2", 0, 90, 0)));
for (int i = 0; i < 4; i++) {
top->AddNodeOverlap(Son_g, 1, new TGeoCombiTrans(-6 + 6 * i, 72, -118, new TGeoRotation("R2", 0, 10, 0)));
}
for (int i = 0; i < 4; i++) {
top->AddNodeOverlap(Son_g, 1, new TGeoCombiTrans(-6 + 6 * i, 67, -113, new TGeoRotation("R2", 0, 70, 0)));
}
top->AddNodeOverlap(Son_g1, 1, new TGeoCombiTrans(-5, 70, -98, new TGeoRotation("R2", 0, 0, 0)));
top->AddNodeOverlap(Son_g2, 1, new TGeoCombiTrans(-5, 65, -102, new TGeoRotation("R2", 0, 60, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(3, -88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(12, -88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(-7, -88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(3, 88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(12, 88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last_b, 1, new TGeoCombiTrans(-7, 88, -103, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(3, -88, -112, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(12, -88, -112, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(-7, -88, -112, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(3, 88, -112, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(12, 88, -112, new TGeoRotation("R2", 0, 180, 0)));
top->AddNodeOverlap(Last, 1, new TGeoCombiTrans(-7, 88, -112, new TGeoRotation("R2", 0, 180, 0)));
for (int i = 1; i < 20; i += 1) {
if (i < 7) {
TGeoVolume *Effect =
Robot->MakeCons("Effect", Iron, 3, 20 / sin(i), 21 / sin(i), 20 / sin(i), 21 / sin(i), 0, 70);
Effect->SetLineColor(9);
Effect->SetFillColor(9);
top->AddNodeOverlap(Effect, 1, new TGeoTranslation(3, 0, -280));
}
if (6 < i && i < 10) {
TGeoVolume *Effect =
Robot->MakeCons("Effect", Iron, 5, 20 / sin(i), 21 / sin(i), 20 / sin(i), 21 / sin(i), 50, 120);
Effect->SetLineColor(38);
Effect->SetFillColor(38);
top->AddNodeOverlap(Effect, 1, new TGeoTranslation(3, 0, -280));
}
if (9 < i && i < 20) {
TGeoVolume *Effect =
Robot->MakeCons("Effect", Iron, 4, 20 / sin(i), 21 / sin(i), 20 / sin(i), 21 / sin(i), 200, 330);
Effect->SetLineColor(33);
Effect->SetFillColor(33);
top->AddNodeOverlap(Effect, 1, new TGeoTranslation(3, 0, -280));
}
}
// close geometry
top->SetVisibility(0);
Robot->CloseGeometry();
// in GL viewer
top->Draw("ogl");
}
示例6: m
drawFGT(TString volName="")
{
gSystem->Load("libGeom");
gSystem->Load("libGdml");
TGeoManager::Import("fgt.gdml");
gGeoManager->DefaultColors();
bool allSolid=true;
char topVol[] ="volWorld";
//char topVol[] ="volDetEnclosure";
//char topVol[] ="volDetector";
//char topVol[] ="volMuIDDownstream";
//char topVol[] ="volMuIDBarrel";
//char topVol[] ="volRPCMod";
//char topVol[] ="volRPCTray_End";
//char topVol[] ="volECALDownstream";
//char topVol[] ="volECALUpstream";
//char topVol[] ="volBarrelECAL";
//char topVol[] ="volSBPlane";
//char topVol[] ="volSTT";
//char topVol[] ="volSTPlaneTarget";
//char topVol[] ="volSTPlaneRadiator";
//char topVol[] ="volTargetPlaneArgon";
gGeoManager->GetVolume("volDetEnclosure")->SetLineColor(kGray);
gGeoManager->GetVolume("volDetEnclosure")->SetVisibility(1);
gGeoManager->GetVolume("volDetEnclosure")->SetTransparency(20);
gGeoManager->GetVolume("volDirtLayer")->SetTransparency(20);
gGeoManager->GetVolume("volServiceBuilding")->SetLineColor(kGray);
gGeoManager->GetVolume("volServiceBuilding")->SetVisibility(1);
gGeoManager->GetVolume("volServiceBuilding")->SetTransparency(20);
gGeoManager->GetVolume("volSky")->SetLineColor(kWhite);
gGeoManager->GetVolume("volSky")->SetVisibility(1);
gGeoManager->GetVolume("volSky")->SetTransparency(20);
gGeoManager->GetVolume("volMagnet")->SetLineColor(kGreen-1);
gGeoManager->GetVolume("volMagnet")->SetVisibility(1);
if(!allSolid) gGeoManager->GetVolume("volMagnet")->SetTransparency(10);
gGeoManager->GetVolume("volECALBarrelMod")->SetLineColor(kRed);
gGeoManager->GetVolume("volECALBarrelMod")->SetVisibility(1);
if(!allSolid) gGeoManager->GetVolume("volECALBarrelMod")->SetTransparency(75);
gGeoManager->GetVolume("volSBPlane")->SetLineColor(kRed-3);
gGeoManager->GetVolume("volSBPlane")->SetVisibility(1);
if(!allSolid) gGeoManager->GetVolume("volSBPlane")->SetTransparency(80);
/*
gGeoManager->GetVolume("volECALUpstream")->SetLineColor(kYellow-3);
gGeoManager->GetVolume("volECALUpstream")->SetVisibility(1);
gGeoManager->GetVolume("volECALUpstream")->SetTransparency(20);
gGeoManager->GetVolume("volECALDownstream")->SetLineColor(kYellow-3);
gGeoManager->GetVolume("volECALDownstream")->SetVisibility(1);
gGeoManager->GetVolume("volECALDownstream")->SetTransparency(20);
*/
TObjArray* va = gGeoManager->GetListOfVolumes();
int nv = va->GetEntries();
for (int i=0; i<nv; ++i) {
TGeoVolume* v = (TGeoVolume*)va->At(i);
std::string m(v->GetMaterial()->GetName());
//cout << v->GetMaterial()->GetName() << endl;
int lc, vi, tr, vd;
if (m == "Scintillator") {
lc = kGreen-7 ; vi = 1; tr = 0; vd = 1;
v->SetLineColor(lc);
v->SetVisibility(vi);
v->VisibleDaughters(vd);
v->SetTransparency(tr);
}
//else {
// continue;
//std::cout << "'" << m << "' has no defaults" << std::endl;
//lc = kOrange; vi = 0; tr = 50; vd = 1;
//}
}
//gGeoManager->GetTopNode();
gGeoManager->CheckOverlaps(1e-5,"d");
gGeoManager->PrintOverlaps();
//gGeoManager->FindVolumeFast(topVol)->CheckOverlaps(1e-5,"d");
//gGeoManager->FindVolumeFast(topVol)->GetNode(0)->PrintOverlaps();
gGeoManager->SetMaxVisNodes(70000);
gGeoManager->FindVolumeFast(topVol)->Draw("ogl");
//.........这里部分代码省略.........
示例7: south_gate
//.........这里部分代码省略.........
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(0,110,550, new TGeoRotation("r1",0,45,0)));
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 110,10,2);
mBlock->SetLineColor(42);
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(335,0,550, new TGeoRotation("r1",90,-45,0)));
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 110,10,2);
mBlock->SetLineColor(42);
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(-335,0,550, new TGeoRotation("r1",90,45,0)));
////////////////////////////////add box
k=0; i=0;
while (i<5){
while(k<6){
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks,Iron,18,10,2);
mBlock->SetLineColor(8);
{
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(-270+(k*100),-111,550, new TGeoRotation("r1",0,-45,0)));
}
k++;
}
i++; k=0;
}
k=0; i=0;
while (i<5){
while(k<6){
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks,Iron,18,10,2);
mBlock->SetLineColor(8);
{
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(-270+(k*100),111,550, new TGeoRotation("r1",0,45,0)));
}
k++;
}
i++; k=0;
}
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 18,10,2);
mBlock->SetLineColor(8);
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(336,0,550, new TGeoRotation("r1",90,-45,0)));
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 18,10,2);
mBlock->SetLineColor(8);
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(-336,0,550, new TGeoRotation("r1",90,45,0)));
// | | | | |
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 300,75,40);
mBlock->SetLineColor(45);
top->AddNodeOverlap(mBlock,1,new TGeoCombiTrans(0,0,450, new TGeoRotation("r1",0,0,0)));
//kiwa
sprintf(nBlocks,"ab%d",N++);
mBlock = geom->MakeBox(nBlocks, Iron, 305,80,2.5);
mBlock->SetLineColor(10);
top->AddNodeOverlap(mBlock,1,new TGeoTranslation(0,0,430));
top->SetVisibility(0);
geom->CloseGeometry();
top->Draw("ogl");
}
示例8: main
//.........这里部分代码省略.........
const double niMean = hIons->GetMean();
std::cout << "Mean number of ions: " << niMean << "\n";
std::cout << "Mean number of electrons on plastic: "
<< sumElectronsPlastic / nEvents << "\n";
std::cout << "Mean number of ions on plastic: "
<< sumIonsPlastic / nEvents << "\n";
std::cout << "Electron endpoints:\n";
const double fUpperMetal = sumElectronsUpperMetal / sumElectronsTotal;
const double fPlastic = sumElectronsPlastic / sumElectronsTotal;
const double fLowerMetal = sumElectronsLowerMetal / sumElectronsTotal;
const double fTransfer = sumElectronsTransfer / sumElectronsTotal;
const double fOther = sumElectronsOther / sumElectronsTotal;
std::cout << " upper metal: " << fUpperMetal * 100. << "%\n";
std::cout << " plastic: " << fPlastic * 100. << "%\n";
std::cout << " lower metal: " << fLowerMetal * 100. << "%\n";
std::cout << " transfer: " << fTransfer * 100. << "%\n";
std::cout << " other: " << fOther * 100. << "%\n";
TCanvas* cD = new TCanvas();
const bool plotGeo = true;
if (plotGeo && plotDrift) {
// Build the geometry in Root.
TGeoManager* geoman = new TGeoManager("world", "geometry");
TGeoMaterial* matVacuum = new TGeoMaterial("Vacuum", 0, 0, 0);
TGeoMedium* medVacuum = new TGeoMedium("Vacuum", 1, matVacuum);
TGeoMaterial* matKapton = new TGeoMaterial("Kapton", 12, 6, 1.42);
TGeoMedium* medKapton = new TGeoMedium("Kapton", 2, matKapton);
TGeoMaterial* matCopper = new TGeoMaterial("Copper", 63, 29, 8.94);
TGeoMedium* medCopper = new TGeoMedium("Copper", 3, matCopper);
TGeoVolume* volTop = geoman->MakeBox("TOP",
medVacuum, pitch, pitch, 0.02);
volTop->SetVisibility(0);
TGeoBBox* shpKapton = new TGeoBBox("K", pitch / 2.,
pitch / 2.,
kapton / 2.);
TGeoPcon* shpHole = new TGeoPcon("H", 0., 360., 3);
shpHole->DefineSection(0, -kapton / 2., 0., outdia / 2.);
shpHole->DefineSection(1, 0., 0., middia / 2.);
shpHole->DefineSection(2, kapton / 2., 0., outdia / 2.);
TGeoCompositeShape* shpGem = new TGeoCompositeShape("G", "K - H");
TGeoVolume* volKapton = new TGeoVolume("Kapton", shpGem, medKapton);
volKapton->SetLineColor(kGreen);
volKapton->SetTransparency(50);
TGeoBBox* shpMetal = new TGeoBBox("M", pitch / 2.,
pitch / 2.,
metal / 2.);
TGeoTube* shpTube = new TGeoTube("T", 0., outdia / 2., metal / 2.);
TGeoCompositeShape* shpElectrode = new TGeoCompositeShape("E", "M - T");
TGeoVolume* volElectrode = new TGeoVolume("Electrode",
shpElectrode, medCopper);
volElectrode->SetLineColor(kBlue);
volElectrode->SetTransparency(50);
TGeoVolumeAssembly* volGem = new TGeoVolumeAssembly("Gem");
const double shift = 0.5 * (metal + kapton);
volGem->AddNode(volKapton, 1);
volGem->AddNode(volElectrode, 2, new TGeoTranslation(0., 0., shift));
volGem->AddNode(volElectrode, 3, new TGeoTranslation(0., 0., -shift));
volTop->AddNode(volGem, 1);
volTop->AddNode(volGem, 2, new TGeoTranslation(-pitch, 0., 0.));
volTop->AddNode(volGem, 3, new TGeoTranslation(+pitch, 0., 0.));