#include "TGeoNode.h" #include "TGeoVolume.h" #include /***************************************/ TGeoNode **getGeo(bool writeGdml=false,bool drw=true) { //bool writeGdml=true; //string fnmIn="/home/irenakittelmann/work/g4sim/geo-lali/SClinac-rootGeo/Nov10/MyGeom.root"; string fnmIn="/Users/irenakittelmann/work/g4sim/ess-geo-lali/SClinac-rootGeo/Nov10/MyGeom.root"; TFile *ffIn=new TFile(fnmIn.c_str(),"open"); TGeoManager *gMan1=ffIn->Get("Geometry"); //new world TGeoVolume *vol0=gMan1->GetVolume("TUNair"); TGeoMedium *med0=vol0->GetMedium();//node1->GetVolume()->GetMaterial() //geo to be add to new world //spoke: sec800-sec949 //el: 944- int sec0=940;//930;//944;//800; int sec1=950;//961;//949;////111; double *dx=0; double diffZ; TGeoMatrix **mtrx1; TGeoNode **nodes=getNodes(sec0,sec1,vol0,&dx,&mtrx1,diffZ); //---- new geo gGeoManager=0; TGeoManager *gMan2=new TGeoManager("idk_SCgeoM","SCgeo"); //world TGeoVolume *world=gMan2->MakeBox("idk_World",med0,dx[0]*1.01,dx[1]*1.01,dx[2]*1.01); world->SetLineColor(kWhite); world->SetTransparency(90); gMan2->SetTopVolume(world); world->RegisterYourself(); //IMPORTANT: add material AIR for world in gdml by hand... int nn=sec1-sec0+1; TGeoVolume **vol1C=new TGeoVolume*[nn]; for(int ii=0;iiGetVolume()->Clone(snm.str().c_str()); mtrx1[ii]->RegisterYourself(); vol1C[ii]->SetLineColor(kWhite); world->AddNode(vol1C[ii],1,mtrx1[ii]); vol1C[ii]->RegisterYourself(); // mtrx1[ii]->Print(); //vol1C[ii]->InspectShape(); //mtrx1[ii]->Print(); } // gMan2->SetTopVisible(0); // gMan2->SetVisOption(0); // gMan2->SetVisLevel(0); gMan2->CloseGeometry(); //--- eve if(drw){ TEveManager::Create(); //add geometry TEveGeoTopNode *top_eve = new TEveGeoTopNode(gMan2,gMan2->GetTopNode()); top_eve->SetVisOption(0); gEve->AddGlobalElement(top_eve); gEve->Redraw3D(kTRUE); gEve->GetDefaultGLViewer()->SetClearColor(0); gEve->FullRedraw3D();} if(writeGdml==true){ gGeoManager->Export("idk_geo.gdml","vg"); //gGeoManager->Export("idk_geo.gdml"); ofstream fhnd; fhnd.open("idk_geo.gdml",ifstream::app); fhnd<<""<>>>>> idkGEO info: <<<<<<<<<<<<<<<<<<<<"<GetNode(sst.str().c_str()); //bounding box double dx=node[ii]->GetVolume()->GetShape()->TGeoBBox::GetDX(); if(dx>(*dxMax)[0]) (*dxMax)[0]=dx; dx=node[ii]->GetVolume()->GetShape()->TGeoBBox::GetDY(); if(dx>(*dxMax)[1]) (*dxMax)[1]=dx; dx=node[ii]->GetVolume()->GetShape()->TGeoBBox::GetDZ(); (*dxMax)[2]=(*dxMax)[2]+dx; //transformation matrix copy sst<<"_mtrx"; mm[ii]=node[ii]->GetMatrix()->Clone(sst.str().c_str()); //indx of element with lowest z pos (in mother volume of old world) double *pos0=mm[ii]->GetTranslation(); if(pos0[2]GetVolume()->GetShape()->TGeoBBox::GetDZ(); double *posOld=mm[ii]->GetTranslation(); posNew=-(*dxMax)[2]+dz; diffZ=posOld[2]-posNew;} else{ double *posOld=mm[ii]->GetTranslation(); posNew=posOld[2]-diffZ;} mm[ii]->SetDz(posNew); } (*mtrx)=mm; return node; } /******************************************/ // void extract_geo() // { // //TBrowser *br=new TBrowser(); // string fnmIn="/home/irenakittelmann/work/g4sim/geo-lali/SClinac-rootGeo/Nov10/MyGeom.root"; // TFile *ffIn=new TFile(fnmIn.c_str(),"open"); // TGeoManager *gMan1=ffIn->Get("Geometry"); // // //TGeoMatrix *m11=vv11->GetNode("Sec111_111")->GetMatrix() // // //TGeoMatrix *m11C=m11->Clone("m11Copy") // TGeoVolume *vol0=gMan1->GetVolume("TUNair"); // // TGeoNode *node1=vol0->GetNode("Sec111_111"); // // //Bounding box // // double *dX=new double[3]; // // dX[0]=node1->GetVolume()->GetShape()->TGeoBBox::GetDX(); // // dX[1]=node1->GetVolume()->GetShape()->TGeoBBox::GetDY(); // // dX[2]=node1->GetVolume()->GetShape()->TGeoBBox::GetDZ(); // //world medium // TGeoMedium *med0=vol0->GetMedium();//node1->GetVolume()->GetMaterial() // // string snm=node1->GetName(); // // cout<GetVolume()->InspectShape(); // //---- new geo // gGeoManager=0; // TGeoManager *gMan2=new TGeoManager("idk_SCgeoM","SCgeo"); // //world // TGeoVolume *world=gMan2->MakeBox("World",med0,dX[0]*1.1,dX[1]*1.1,dX[2]*10); // world->SetLineColor(kWhite); // world->SetTransparency(90); // gMan2->SetTopVolume(world); // TGeoVolume *vol1C=node1->GetVolume()->Clone("idk_Sec111"); // world->AddNode(vol1C,1); // // gMan2->SetTopVisible(0); // // gMan2->SetVisLevel(4); // // gMan2->SetVisOption(0); // gMan2->CloseGeometry(); // //--- eve // TEveManager::Create(); // //add geometry // TEveGeoTopNode *top_eve = new TEveGeoTopNode(gMan2,gMan2->GetTopNode()); // top_eve->SetVisOption(0); // gEve->AddGlobalElement(top_eve); // gEve->Redraw3D(kTRUE); // gEve->GetDefaultGLViewer()->SetClearColor(0); // //gEve->FullRedraw3D(); // } /**********************************************/ // void extract_geo() // { // //TBrowser *br=new TBrowser(); // string fnmIn="/home/irenakittelmann/work/g4sim/geo-lali/SClinac-rootGeo/Nov10/MyGeom.root"; // TFile *ffIn=new TFile(fnmIn.c_str(),"open"); // TGeoManager *gMan1=ffIn->Get("Geometry"); // // //TGeoMatrix *m11=vv11->GetNode("Sec111_111")->GetMatrix() // // //TGeoMatrix *m11C=m11->Clone("m11Copy") // TGeoVolume *vol0=gMan1->GetVolume("TUNair"); // // TGeoNode *node1=vol0->GetNode("Sec111_111"); // // //Bounding box // // double *dX=new double[3]; // // dX[0]=node1->GetVolume()->GetShape()->TGeoBBox::GetDX(); // // dX[1]=node1->GetVolume()->GetShape()->TGeoBBox::GetDY(); // // dX[2]=node1->GetVolume()->GetShape()->TGeoBBox::GetDZ(); // //world medium // TGeoMedium *med0=vol0->GetMedium();//node1->GetVolume()->GetMaterial() // // string snm=node1->GetName(); // // cout<GetVolume()->InspectShape(); // //---- new geo // gGeoManager=0; // TGeoManager *gMan2=new TGeoManager("idk_SCgeoM","SCgeo"); // //world // TGeoVolume *world=gMan2->MakeBox("World",med0,dX[0]*1.1,dX[1]*1.1,dX[2]*10); // world->SetLineColor(kWhite); // world->SetTransparency(90); // gMan2->SetTopVolume(world); // TGeoVolume *vol1C=node1->GetVolume()->Clone("idk_Sec111"); // world->AddNode(vol1C,1); // // gMan2->SetTopVisible(0); // // gMan2->SetVisLevel(4); // // gMan2->SetVisOption(0); // gMan2->CloseGeometry(); // //--- eve // TEveManager::Create(); // //add geometry // TEveGeoTopNode *top_eve = new TEveGeoTopNode(gMan2,gMan2->GetTopNode()); // top_eve->SetVisOption(0); // gEve->AddGlobalElement(top_eve); // gEve->Redraw3D(kTRUE); // gEve->GetDefaultGLViewer()->SetClearColor(0); // //gEve->FullRedraw3D(); // } // /****************************************************/