本文整理汇总了C++中TGeoVolume类的典型用法代码示例。如果您正苦于以下问题:C++ TGeoVolume类的具体用法?C++ TGeoVolume怎么用?C++ TGeoVolume使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TGeoVolume类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetGeoMedium
TGeoVolume* KVSpectroDetector::GetGeoVolume(const Char_t* name, const Char_t* material, const Char_t* shape_name, const Char_t* params){
// Construct a TGeoVolume shape which can be used to represent
// a detector in the current geometry managed by gGeoManager.
// If the argument material is empty, the name of the detector is used.
// Input: name - name given to the volume.
// material - material of the volume. The list of available
// materials can be found with
// det->GetRangeTable()->GetListOfMaterials()->ls()
// where det is a KVSpectroDetector or another
// object inheriting from KVMaterial.
// shape_name - name of the shape associated to the volum
// (Box, Arb8, Cone, Sphere, ...), given
// by the short name of the shape used in
// the methods XXX:
// TGeoManger::MakeXXX(...)
TGeoMedium *med = GetGeoMedium(material);
if(!med) return NULL;
TString method = Form("Make%s",shape_name);
TString parameters = Form("%p,%p,%s",name,med,params);
Info("GetGeoVolume","Trying to run the command gGeoManager->%s(%s)",method.Data(),parameters.Data());
gGeoManager->Execute(method.Data(),parameters.Data());
TGeoVolume* vol = (TGeoVolume*)gGeoManager->GetListOfVolumes()->Last();
if(vol) vol->SetLineColor(med->GetMaterial()->GetDefaultColor());
return vol;
}
示例2: GetAbsGeoVolume
void KVSpectroDetector::UpdateVolumeAndNodeNames(){
// Update the names of Volumes and the names of the Nodes of this
// detector.
// The name of the volume representing the detector (returned
// by GetAbsGeoVolume()) is DET_<detector name>.
// The name of the active volumes is ACTIVE_<detector name>_<material name>.
// The name of the other volumes is <detector name>_<material name>.
GetAbsGeoVolume()->SetName( Form("DET_%s", GetName() ) );
TObjArray *nodes = GetAbsGeoVolume()->GetNodes();
TGeoNode *node = NULL;
TGeoVolume *vol = NULL;
TIter next( nodes );
while( (node = (TGeoNode *)next()) ){
TString name, nname;
vol = node->GetVolume();
name.Form("%s_%s", GetName(), vol->GetMaterial()->GetName());
if( GetActiveVolumes()->Contains( vol ) )
name.Prepend("ACTIVE_");
vol->SetName( name.Data() );
nname = name;
Int_t i=0;
while( nodes->FindObject( nname.Data() ) )
nname.Form("%s_%d",name.Data(), ++i);
node->SetName( nname.Data() );
node->SetNumber( i );
}
}
示例3: GetActiveVolume
UChar_t KVSpectroDetector::GetPosition( Double_t *XYZf, Int_t idx ){
// Returns in the array 'XYZf', the coordinates (in cm) of a point randomly drawn in the
// active volume with index 'idx'. We assume that the shape of this
// volume is a TGeoBBox. These coordinates are given in the focal-plane
// of reference.
// The function returns a binary code where:
// - bit 0 = 1 if X is OK (001);
// - bit 1 = 1 if Y is OK (010);
// - bit 2 = 1 if Z is OK (100);
//
// If no coordinates are OK, the returned value is null (000) and if
// X, Y and Z are OK then the returned value is equal 7 (111).
TGeoVolume *vol = GetActiveVolume(idx);
if( !vol || !PositionIsOK() ) return 0;
const TGeoBBox *box = (TGeoBBox *)vol->GetShape();
Double_t dx = box->GetDX();
Double_t dy = box->GetDY();
Double_t dz = box->GetDZ();
Double_t ox = (box->GetOrigin())[0];
Double_t oy = (box->GetOrigin())[1];
Double_t oz = (box->GetOrigin())[2];
Double_t xyz[3];
xyz[0] = ox+( TestBit(kRdmPos) ? dx*(2*gRandom->Rndm()-1) : 0.);
xyz[1] = oy+( TestBit(kRdmPos) ? dy*(2*gRandom->Rndm()-1) : 0.);
xyz[2] = oz+( TestBit(kRdmPos) ? dz*(2*gRandom->Rndm()-1) : 0.);
if( ActiveVolumeToFocal( xyz , XYZf, idx ) ) return 7;
return 0;
}
示例4: main
int main() {
TGeoNode *node = NULL;
TGeoVolume *vol = NULL;
LMCgeomN *g = new LMCgeomN("Telescope");
TObjArray *oa = g->GetGeoManager()->GetListOfNodes();
for (int i=0; i<oa->GetEntries(); i++) {
node = (TGeoNode*)oa->At(i);
vol = node->GetVolume();
cout << "= " << node->GetName() << " " << vol->GetName() <<endl;
TObjArray *vnodes = vol->GetNodes();
cout << vnodes->GetEntries() << endl;
for (int j=0; j<vnodes->GetEntries(); j++) {
node = (TGeoNode*)vnodes->At(j);
cout << "== " << node->GetName() << endl;
vol = node->GetVolume();
TObjArray *vnodes1 = vol->GetNodes();
for (int k=0; k<vnodes1->GetEntries(); k++) {
node = (TGeoNode*)vnodes1->At(k);
cout << "=== " << node->GetName() << endl;
vol = node->GetVolume();
TObjArray *vnodes2 = vol->GetNodes();
if(!vnodes2) continue;
for (int q=0; q<vnodes2->GetEntries(); q++) {
node = (TGeoNode*)vnodes2->At(q);
cout << "==== " << node->GetName() << endl;
}
}
}
}
return 0;
}
示例5: fw_simGeo_set_volume_color_by_material
void fw_simGeo_set_volume_color_by_material(const char* material_re, Bool_t use_names, Color_t color, Char_t transparency=-1)
{
// Note: material_re is a perl regexp!
// If you want exact match, enclose in begin / end meta characters (^ / $):
// set_volume_color_by_material("^materials:Silicon$", kRed);
TPMERegexp re(material_re, "o");
TGeoMaterial *m;
TIter it(FWGeometryTableViewManager_GetGeoManager()->GetListOfMaterials());
while ((m = (TGeoMaterial*) it()) != 0)
{
if (re.Match(use_names ? m->GetName() : m->GetTitle()))
{
if (transparency != -1)
{
m->SetTransparency(transparency);
}
TGeoVolume *v;
TIter it2(FWGeometryTableViewManager_GetGeoManager()->GetListOfVolumes());
while ((v = (TGeoVolume*) it2()) != 0)
{
if (v->GetMaterial() == m)
{
v->SetLineColor(color);
}
}
}
}
}
示例6: SHOW
void Visualizer::Show(){
std::cout<<"=============================================="<<std::endl;
std::cout<<"========= Inside Expected SHOW() ============="<<std::endl;
std::cout<<"=============================================="<<std::endl;
TGeoVolume *top = gGeoManager->MakeBox("Top", NULL, kInfinity, kInfinity, kInfinity);
gGeoManager->SetTopVolume(top);
for(int i = 0 ; i < fVolumes.size() ; i++){
top->AddNode(std::get<0>(fVolumes[i]), 1 , std::get<1>(fVolumes[i]));
}
top->SetLineColor(kGreen);
gGeoManager->CloseGeometry();
#ifndef USE_OGL
top->Draw();
#else
top->Draw("ogl"); //to display the geometry using openGL
#endif
//
//TPad::x3d("OPENGL");
gGeoManager->Export("plane.root");
//top->Export("planeTop.root");
//fApp->Run();
}
示例7: create_tof_pole
TGeoVolume* create_tof_pole()
{
// needed materials
TGeoMedium* boxVolMed = gGeoMan->GetMedium(BoxVolumeMedium);
TGeoMedium* airVolMed = gGeoMan->GetMedium(KeepingVolumeMedium);
Float_t dx=Pole_Size_X;
Float_t dy=Pole_Size_Y;
Float_t dz=Pole_Size_Z;
Float_t width_alux=Pole_Thick_X;
Float_t width_aluy=Pole_Thick_Y;
Float_t width_aluz=Pole_Thick_Z;
TGeoVolume* pole = new TGeoVolumeAssembly("Pole");
TGeoBBox* pole_alu_box = new TGeoBBox("", dx/2., dy/2., dz/2.);
TGeoVolume* pole_alu_vol =
new TGeoVolume("pole_alu", pole_alu_box, boxVolMed);
pole_alu_vol->SetLineColor(kGreen); // set line color for the alu box
pole_alu_vol->SetTransparency(20); // set transparency for the TOF
TGeoTranslation* pole_alu_trans
= new TGeoTranslation("", 0., 0., 0.);
pole->AddNode(pole_alu_vol, 0, pole_alu_trans);
TGeoBBox* pole_air_box = new TGeoBBox("", dx/2.-width_alux, dy/2.-width_aluy, dz/2.-width_aluz);
TGeoVolume* pole_air_vol =
new TGeoVolume("pole_air", pole_air_box, airVolMed);
pole_air_vol->SetLineColor(kYellow); // set line color for the alu box
pole_air_vol->SetTransparency(70); // set transparency for the TOF
TGeoTranslation* pole_air_trans
= new TGeoTranslation("", 0., 0., 0.);
pole_alu_vol->AddNode(pole_air_vol, 0, pole_air_trans);
return pole;
}
示例8: create_tof_bar
TGeoVolume* create_tof_bar(Float_t dx, Float_t dy, Float_t dz)
{
// needed materials
TGeoMedium* boxVolMed = gGeoMan->GetMedium(BoxVolumeMedium);
TGeoMedium* airVolMed = gGeoMan->GetMedium(KeepingVolumeMedium);
Float_t width_alux=Pole_Thick_X;
Float_t width_aluy=Pole_Thick_Y;
Float_t width_aluz=Pole_Thick_Z;
TGeoVolume* bar = new TGeoVolumeAssembly("Bar");
TGeoBBox* bar_alu_box = new TGeoBBox("", dx/2., dy/2., dz/2.);
TGeoVolume* bar_alu_vol =
new TGeoVolume("bar_alu", bar_alu_box, boxVolMed);
bar_alu_vol->SetLineColor(kGreen); // set line color for the alu box
bar_alu_vol->SetTransparency(20); // set transparency for the TOF
TGeoTranslation* bar_alu_trans
= new TGeoTranslation("", 0., 0., 0.);
bar->AddNode(bar_alu_vol, 0, bar_alu_trans);
TGeoBBox* bar_air_box = new TGeoBBox("", dx/2.-width_alux, dy/2.-width_aluy, dz/2.-width_aluz);
TGeoVolume* bar_air_vol =
new TGeoVolume("bar_air", bar_air_box, airVolMed);
bar_air_vol->SetLineColor(kYellow); // set line color for the alu box
bar_air_vol->SetTransparency(70); // set transparency for the TOF
TGeoTranslation* bar_air_trans
= new TGeoTranslation("", 0., 0., 0.);
bar_alu_vol->AddNode(bar_air_vol, 0, bar_air_trans);
return bar;
}
示例9: create_tof_module
TGeoVolume* create_tof_module(Int_t modType)
{
Int_t cType = CounterTypeInModule[modType];
Float_t dx=Module_Size_X[modType];
Float_t dy=Module_Size_Y[modType];
Float_t dz=Module_Size_Z[modType];
Float_t width_aluxl=Module_Thick_Alu_X_left;
Float_t width_aluxr=Module_Thick_Alu_X_right;
Float_t width_aluy=Module_Thick_Alu_Y;
Float_t width_aluz=Module_Thick_Alu_Z;
Float_t shift_gas_box = (Module_Thick_Alu_X_right - Module_Thick_Alu_X_left)/2;
Float_t dxpos=CounterXDistance[modType];
Float_t startxpos=CounterXStartPosition[modType];
Float_t dzoff=CounterZDistance[modType];
Float_t rotangle=CounterRotationAngle[modType];
TGeoMedium* boxVolMed = gGeoMan->GetMedium(BoxVolumeMedium);
TGeoMedium* noActiveGasVolMed = gGeoMan->GetMedium(NoActivGasMedium);
TString moduleName = Form("module_%d", modType);
TGeoVolume* module = new TGeoVolumeAssembly(moduleName);
TGeoBBox* alu_box = new TGeoBBox("", dx/2., dy/2., dz/2.);
TGeoVolume* alu_box_vol =
new TGeoVolume("alu_box", alu_box, boxVolMed);
alu_box_vol->SetLineColor(kGreen); // set line color for the alu box
alu_box_vol->SetTransparency(20); // set transparency for the TOF
TGeoTranslation* alu_box_trans
= new TGeoTranslation("", 0., 0., 0.);
module->AddNode(alu_box_vol, 0, alu_box_trans);
TGeoBBox* gas_box = new TGeoBBox("", (dx-(width_aluxl+width_aluxr))/2., (dy-2*width_aluy)/2., (dz-2*width_aluz)/2.);
TGeoVolume* gas_box_vol =
new TGeoVolume("gas_box", gas_box, noActiveGasVolMed);
gas_box_vol->SetLineColor(kYellow); // set line color for the gas box
gas_box_vol->SetTransparency(70); // set transparency for the TOF
TGeoTranslation* gas_box_trans
= new TGeoTranslation("", shift_gas_box, 0., 0.);
alu_box_vol->AddNode(gas_box_vol, 0, gas_box_trans);
for (Int_t j=0; j<5; j++){ //loop over counters (modules)
Float_t zpos;
if (0 == modType) {
zpos = dzoff *=-1;
} else {
zpos = 0.;
}
TGeoTranslation* counter_trans
= new TGeoTranslation("", startxpos+ j*dxpos , 0.0 , zpos);
TGeoRotation* counter_rot = new TGeoRotation();
counter_rot->RotateY(rotangle);
TGeoCombiTrans* counter_combi_trans = new TGeoCombiTrans(*counter_trans, *counter_rot);
gas_box_vol->AddNode(gCounter[cType], j, counter_combi_trans);
}
return module;
}
示例10: set_volume_color_by_material
void set_volume_color_by_material(const char* material_re, Color_t color, Char_t transparency=-1)
{
// Note: material_re is a perl regexp!
// If you want exact match, enclose in begin / end meta characters (^ / $):
// set_volume_color_by_material("^materials:Silicon$", kRed);
TPMERegexp re(material_re, "o");
TGeoMaterial *m;
TIter it(gGeoManager->GetListOfMaterials());
while ((m = (TGeoMaterial*) it()) != 0)
{
if (re.Match(m->GetName()))
{
if (transparency != -1)
{
m->SetTransparency(transparency);
}
TGeoVolume *v;
TIter it2(gGeoManager->GetListOfVolumes());
while ((v = (TGeoVolume*) it2()) != 0)
{
if (v->GetMaterial() == m)
{
v->SetLineColor(color);
}
}
}
}
full_update();
}
示例11: geom_cms
void geom_cms()
{
TEveManager::Create();
TFile::SetCacheFileDir(".");
gGeoManager = gEve->GetGeometry("http://root.cern.ch/files/cms.root");
gGeoManager->DefaultColors();
TGeoVolume* top = gGeoManager->GetTopVolume()->FindNode("CMSE_1")->GetVolume();
TEveGeoTopNode* trk = new TEveGeoTopNode(gGeoManager, top->FindNode("TRAK_1"));
trk->SetVisLevel(6);
gEve->AddGlobalElement(trk);
TEveGeoTopNode* calo = new TEveGeoTopNode(gGeoManager, top->FindNode("CALO_1"));
calo->SetVisLevel(3);
gEve->AddGlobalElement(calo);
TEveGeoTopNode* muon = new TEveGeoTopNode(gGeoManager, top->FindNode("MUON_1"));
muon->SetVisLevel(4);
gEve->AddGlobalElement(muon);
gEve->FullRedraw3D(kTRUE);
// EClipType not exported to CINT (see TGLUtil.h):
// 0 - no clip, 1 - clip plane, 2 - clip box
TGLViewer *v = gEve->GetDefaultGLViewer();
v->GetClipSet()->SetClipType(TGLClip::EType(1));
v->ColorSet().Background().SetColor(kMagenta+4);
v->SetGuideState(TGLUtil::kAxesEdge, kTRUE, kFALSE, 0);
v->RefreshPadEditor(v);
v->CurrentCamera().RotateRad(-1.2, 0.5);
v->DoDraw();
}
示例12: Form
TGeoHMatrix &KVSpectroDetector::GetActiveVolToFocalMatrix(Int_t i ) const{
// Returns the matrix which transforms coordinates form the reference
// frame of the active volume 'i' to the reference frame of the focal
// plan.
static TGeoHMatrix mm;
mm.Clear();
TGeoVolume *vol = (TGeoVolume *)fActiveVolumes->At(i);
if( vol ){
Int_t prev_id = gGeoManager->GetCurrentNodeId();
// To be sure that the matrices will be calculated again
gGeoManager->CdTop();
gGeoManager->CdNode( vol->GetUniqueID() );
// matrix 'volume to target'
TGeoMatrix *vol_to_tgt = gGeoManager->GetCurrentMatrix();
if( fFocalToTarget ) mm = fFocalToTarget->Inverse()*(*vol_to_tgt);
else mm = *vol_to_tgt;
mm.SetName( Form("%s_to_focal",vol->GetName()) );
// just to not create problems if this method is called during a tracking
gGeoManager->CdNode( prev_id );
}
else mm.SetName("Identity_matrix");
return mm;
}
示例13: vol
GeoHandler& GeoHandler::i_collect(const TGeoNode* current, int level, Region rg, LimitSet ls) {
TGeoVolume* volume = current->GetVolume();
TObjArray* nodes = volume->GetNodes();
int num_children = nodes ? nodes->GetEntriesFast() : 0;
Volume vol(volume);
Region region = vol.region();
LimitSet limits = vol.limitSet();
if ( m_propagateRegions ) {
if ( !region.isValid() && rg.isValid() ) {
region = rg;
vol.setRegion(region);
}
if ( !limits.isValid() && ls.isValid() ) {
limits = ls;
vol.setLimitSet(limits);
}
}
(*m_data)[level].insert(current);
//printf("GeoHandler: collect level:%d %s\n",level,current->GetName());
if (num_children > 0) {
for (int i = 0; i < num_children; ++i) {
TGeoNode* node = (TGeoNode*) nodes->At(i);
i_collect(node, level + 1, region, limits);
}
}
return *this;
}
示例14: Show
void Visualizer::Show(TGeoVolume *vol){
TGeoVolume *top = gGeoManager->MakeBox("Top", NULL, kInfinity, kInfinity, kInfinity);
gGeoManager->SetTopVolume(top);
//TGeoVolume *vol = fGeoManager->MakeSphere("SPHERE", NULL, 30, 40, 0, 180, 0, 360);
top->AddNode(vol, 1);
gGeoManager->CloseGeometry();
top->Draw();
//fApp->Run();
}
示例15: s_intersection
void s_intersection()
{
gROOT->GetListOfCanvases()->Delete();
TCanvas *c = new TCanvas("composite shape", "Intersection boolean operation", 700, 1000);
c->Divide(1,2,0,0);
c->cd(2);
gPad->SetPad(0,0,1,0.4);
c->cd(1);
gPad->SetPad(0,0.4,1,1);
if (gGeoManager) delete gGeoManager;
new TGeoManager("xtru", "poza12");
TGeoMaterial *mat = new TGeoMaterial("Al", 26.98,13,2.7);
TGeoMedium *med = new TGeoMedium("MED",1,mat);
TGeoVolume *top = gGeoManager->MakeBox("TOP",med,100,100,100);
gGeoManager->SetTopVolume(top);
// define shape components with names
TGeoBBox *box = new TGeoBBox("bx", 40., 40., 40.);
TGeoSphere *sph = new TGeoSphere("sph", 40., 45.);
// define named geometrical transformations with names
TGeoTranslation *tr = new TGeoTranslation(0., 0., 45.);
tr->SetName("tr");
// register all used transformations
tr->RegisterYourself();
// create the composite shape based on a Boolean expression
TGeoCompositeShape *cs = new TGeoCompositeShape("mir", "sph:tr * bx");
TGeoVolume *vol = new TGeoVolume("COMP2",cs);
top->AddNode(vol,1);
gGeoManager->CloseGeometry();
gGeoManager->SetNsegments(100);
top->Draw();
MakePicture();
c->cd(2);
TPaveText *pt = new TPaveText(0.01,0.01,0.99,0.99);
pt->SetLineColor(1);
TText *text = pt->AddText("TGeoCompositeShape - composite shape class");
text->SetTextColor(2);
pt->AddText("----- Here is an example of boolean intersection operation : A * B");
pt->AddText("----- A == sphere (with inner radius non-zero), B == box");
pt->AddText(" ");
pt->SetAllWith("-----","color",4);
pt->SetAllWith("-----","font",72);
pt->SetAllWith("-----","size",0.04);
pt->SetTextAlign(12);
pt->SetTextSize(0.044);
pt->Draw();
c->cd(1);
}