FairRoot/PandaRoot
Functions | Variables
old-macros/create_Lmd_HV_MAPS.C File Reference
#include <TROOT.h>
#include <FairGeoLoader.h>
#include <FairGeoInterface.h>
#include <FairGeoBuilder.h>
#include <FairGeoPcon.h>
#include <FairGeoMedia.h>
#include <TGeoCompositeShape.h>
#include <TGeoMatrix.h>
#include <TGeoVolume.h>
#include <TGeoTube.h>
#include <TGeoArb8.h>
#include <TGeoPara.h>
#include <TSystem.h>
#include <TFile.h>
#include <TGeoPcon.h>
#include <TGeoManager.h>
#include <TGeoTorus.h>
#include <TGeoSphere.h>
#include <TMath.h>
#include <TRandom.h>
#include <PndLmdDim.h>
#include <TGeoPhysicalNode.h>
#include <TGeoCone.h>
#include <TApplication.h>
#include <iostream>
#include <cmath>
#include <sstream>
#include <vector>

Go to the source code of this file.

Functions

void Navigate_into (int depth=0)
 
int create_HV_MAPS (bool misalign=true)
 
int main ()
 

Variables

const bool show_beam_pipe_dummy = true
 
const bool include_box = false
 

Function Documentation

int create_HV_MAPS ( bool  misalign = true)

Definition at line 59 of file old-macros/create_Lmd_HV_MAPS.C.

References PndLmdDim::Calc_matrix_offsets(), PndLmdDim::cvd_offset_x, PndLmdDim::cvd_offset_y, PndLmdDim::cvd_offset_z, PndLmdDim::cvd_tilt_phi, PndLmdDim::cvd_tilt_psi, PndLmdDim::cvd_tilt_theta, exit(), fi, PndLmdDim::Generate_rootgeom(), geobuild, geoFace, geoLoad, PndLmdDim::Get_instance(), PndLmdDim::Get_List_of_Sensors(), PndLmdDim::Get_matrix(), gGeoMan, gGeoManager, PndLmdDim::half_offset_x, PndLmdDim::half_offset_y, PndLmdDim::half_offset_z, PndLmdDim::half_tilt_phi, PndLmdDim::half_tilt_psi, PndLmdDim::half_tilt_theta, Media, nmed, offset(), outfile, PndLmdDim::plane_half_offset_x, PndLmdDim::plane_half_offset_y, PndLmdDim::plane_half_offset_z, PndLmdDim::plane_half_tilt_phi, PndLmdDim::plane_half_tilt_psi, PndLmdDim::plane_half_tilt_theta, PndLmdDim::Read_transformation_matrices(), PndLmdDim::Read_transformation_matrices_from_geometry(), PndLmdDim::Set_matrix(), PndLmdDim::side_offset_x, PndLmdDim::side_offset_y, PndLmdDim::side_offset_z, PndLmdDim::side_tilt_phi, PndLmdDim::side_tilt_psi, PndLmdDim::side_tilt_theta, PndLmdDim::Test_List_of_Sensors(), top, TString, PndLmdDim::Write_transformation_matrices(), and PndLmdDim::Write_transformation_matrices_to_geometry().

59  {
60  /*
61  // ****************************** Parameters of Detector ************************
62  //--------------------------------------------------------------------
63  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
64 
65  // Load this libraries
66  gSystem->Load("libGeoBase");
67  gSystem->Load("libParBase");
68  gSystem->Load("libBase");
69  gSystem->Load("libPndData");
70  gSystem->Load("libPassive");
71 
72 
73  TString outfile = "geo/HV_MAPS-Design.root";
74  TFile* fi = new TFile(outfile, "RECREATE");
75 
76  FairGeoLoader* geoLoad = NULL;// FairGeoLoader::Instance();//
77  if (!geoLoad){
78  cout << " creating FairGeoLoader instance " << endl;
79  geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
80  }
81 
82  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
83  geoFace->setMediaFile("../../geometry/media_pnd.geo");
84  geoFace->readMedia();
85  geoFace->print();
86 
87  FairGeoMedia *Media = geoFace->getMedia();
88  FairGeoBuilder *geobuild = geoLoad->getGeoBuilder();
89 
90  // retrieve available media
91  std::string str_ti = "Aluminum"; // "titanium" is in Panda software not yet implemented
92  FairGeoMedium* FairMediumAir = Media->getMedium("air");
93  FairGeoMedium* FairMediumSteel = Media->getMedium("steel");
94  FairGeoMedium* FairMediumTi = Media->getMedium(str_ti.c_str()); //titanium"); not found in media_pnd.geo !
95  FairGeoMedium *FairMediumSilicon = Media->getMedium("silicon");
96  FairGeoMedium *FairMediumDiamond = Media->getMedium("HYPdiamond");
97  FairGeoMedium *FairMediumVacuum = Media->getMedium("vacuum");
98  FairGeoMedium *FairMediumKapton = Media->getMedium("kapton");
99 
100  if (!FairMediumAir || !FairMediumSteel || !FairMediumTi || !FairMediumKapton || !FairMediumSilicon || !FairMediumVacuum) {
101  std::cout << " warning: not all media found " << std::endl;
102  }
103 
104  int nmed;
105  nmed = geobuild->createMedium(FairMediumAir);
106  nmed = geobuild->createMedium(FairMediumSteel);
107  nmed = geobuild->createMedium(FairMediumTi);
108  nmed = geobuild->createMedium(FairMediumKapton);
109  nmed = geobuild->createMedium(FairMediumSilicon);
110  nmed = geobuild->createMedium(FairMediumDiamond);
111  nmed = geobuild->createMedium(FairMediumVacuum);
112 
113  TGeoManager* gGeoMan = (TGeoManager*) gROOT->FindObject("FAIRGeom");
114  if (!gGeoMan) {
115  cout << " no FAIR Geometry manager found! " << endl;
116  return;
117  }
118 
119  TGeoVolume *top = new TGeoVolumeAssembly("lmd_HV_MAPS");
120 
121  gGeoMan->SetTopVolume(top);
122  PndLmdDim& lmddim = PndLmdDim::Get_instance();
123  */
124  //--------------------------------------------------------------------
125  //gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
126 
127  // Load this libraries
128  //gSystem->Load("libGeoBase");
129  //gSystem->Load("libParBase");
130  //gSystem->Load("libBase");
131  //gSystem->Load("libPndData");
132  //gSystem->Load("libPassive");
133  char* dirc = getenv("VMCWORKDIR");
134  string dir;
135  if(dirc == NULL){
136  //env must be set, will crash otherwise
137  cout << "warning! environment variable VMCWORKDIR not found! set this variable and try again!\n";
138  exit(1);
139  }
140  else{
141  dir = dirc;
142  }
143 
144  //string moveto = dir + "/input/" + fileName + ".dat";
145  //system(("mv "+fileName+".dat"+" "+moveto).c_str());
146 
148  if (misalign)
149  outfile = dir+"/geometry/Luminosity-Detector_misaligned-0u.root";
150  else
151  outfile = dir+"/geometry/Luminosity-Detector.root";
152  TFile* fi = new TFile(outfile,"RECREATE");
153 
154  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
155  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
156  geoFace->setMediaFile((dir+"/geometry/media_pnd.geo").c_str());
157  geoFace->readMedia();
158  geoFace->print();
159 
160  FairGeoMedia *Media = geoFace->getMedia();
161  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
162 
163  FairGeoMedium *FairMediumSilicon = Media->getMedium("silicon");
164 
165  Int_t nmed=geobuild->createMedium(FairMediumSilicon);
166 
167  TGeoManager* gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
168 
169  TGeoVolume *top = new TGeoVolumeAssembly("lum");
170 
171  gGeoMan->SetTopVolume(top);
172 
174 
175  // for testing purposes ************************
176  // only misaligned sensors, everything else should be perfectly aligned
177  lmddim.side_offset_x = 0;
178  lmddim.side_offset_y = 0;
179  lmddim.side_offset_z = 0;
180  lmddim.side_tilt_phi = 0;
181  lmddim.side_tilt_theta = 0;
182  lmddim.side_tilt_psi = 0;
183  lmddim.cvd_offset_x = 0;
184  lmddim.cvd_offset_y = 0;
185  lmddim.cvd_offset_z = 0;
186  lmddim.cvd_tilt_phi = 0;
187  lmddim.cvd_tilt_theta = 0;
188  lmddim.cvd_tilt_psi = 0;
189  lmddim.plane_half_offset_x = 0;
190  lmddim.plane_half_offset_y = 0;
191  lmddim.plane_half_offset_z = 0;
192  lmddim.plane_half_tilt_phi = 0;
193  lmddim.plane_half_tilt_theta = 0;
194  lmddim.plane_half_tilt_psi = 0;
195  lmddim.half_offset_x = 0;
196  lmddim.half_offset_y = 0;
197  lmddim.half_offset_z = 0;
198  lmddim.half_tilt_phi = 0;
199  lmddim.half_tilt_theta = 0;
200  lmddim.half_tilt_psi = 0;
201  // **********************************************
202  lmddim.Generate_rootgeom(*top, misalign);
203  //lmddim.Write_transformation_matrices("matrices.txt", false);
204 
205  if (!misalign)
206  lmddim.Write_transformation_matrices("",false); // create default matrices
207  else
208  //lmddim.Write_transformation_matrices(dir+"/geometry/trafo_matrices_lmd_misaligned.dat", false); // create a misaligned version
209  lmddim.Write_transformation_matrices(dir+"/geometry/trafo_matrices_lmd_misaligned-0u.dat", false); // create a misaligned version
210  /*
211  TH2* hist = lmddim.Get_histogram_Plane(0,0,false,true,false);
212  hist->Fill(-5,-5,177);
213  hist->Fill(5,5,2);
214  // hist->SetMinimum(5);
215  hist->Draw("text");
216  gPad->Print("hist.pdf");
217  gPad->Print("hist.C");*/
218 
219  //lmddim.Write_transformation_matrices("", false); // generate standard matrices in VMCWORKDIR/geometry
220 
221  //lmddim.Read_transformation_matrices(dir+"geometry/matrices.txt", true);
222  //lmddim.Write_transformation_matrices(dir+"geometry/matrices_aligned.txt", true);
223 
224  gGeoMan->CloseGeometry();
225 
226  gGeoMan->CheckOverlaps(0.001); // [cm]
227  //gGeoManager->CheckGeometryFull();
228  gGeoMan->PrintOverlaps();
229  top->Write();
230  fi->Close();
231  //gGeoManager->Export(outfile);
232  gGeoMan->SetVisLevel(20);
233  //lmddim.Retrieve_version_number();
234  top->Draw("ogl");
235 
236  cout << " found " << gGeoManager->GetListOfPhysicalNodes()->GetEntries() << " entries " << endl;
237 
238  if (!misalign){
239  cout << " trying to navigate through the geometry " << endl;
240  vector<string> list_of_sensors;
241  cout << lmddim.Get_List_of_Sensors(list_of_sensors) << endl;
242 
243  int offset;
244 
245  if (lmddim.Test_List_of_Sensors(list_of_sensors, offset)) cout << " testing of sensors was fine and gave an offset of " << offset << endl;
246 
247  //cout << " found " << list_of_sensors.size() << " sensors " << endl;
248 
249  //for (int isensor = 0; isensor < list_of_sensors.size() ; isensor++){
250  // cout << list_of_sensors[isensor] << endl;
251  //}
252 
253  if (1){ // consistency checks
254  cout << " reading matrices from file into the aligned map " << endl;
255  lmddim.Read_transformation_matrices(dir+"/geometry/trafo_matrices_lmd_misaligned.dat", true);
256  cout << " loading transformation matrices from geometry into not aligned map " << endl;
258  cout << " writing matrices from aligned map to geometry" << endl;
260  cout << " reading transformation matrices from geometry once again " << endl;
262  //cout << " testing matrices " << endl;
263  //lmddim.Calc_matrix_offsets();
264  }
265 
266  if (0){ // test setting individual matrices
267  TGeoHMatrix* matrix = lmddim.Get_matrix("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/lmd_vol_half_1", false, 1,-1,-1,-1,-1,-1);
268  matrix->Print();
269  matrix->RotateX(90.);
270  matrix->Print();
271  lmddim.Set_matrix("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/lmd_vol_half_1", matrix, 1,-1,-1,-1,-1,-1);
272 
273  cout << " the original matrix is " << endl;
274  matrix = lmddim.Get_matrix("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/lmd_vol_half_1", false, 1,-1,-1,-1,-1,-1);
275  matrix->Print();
276 
277  cout << " the aligned matrix is " << endl;
278  matrix = lmddim.Get_matrix("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/lmd_vol_half_1", true, 1,-1,-1,-1,-1,-1);
279  matrix->Print();
280  }
281  cout << " testing matrices " << endl;
282  lmddim.Calc_matrix_offsets();
283 
284  gGeoMan->RefreshPhysicalNodes(); // should be called but is not a must
285  //gGeoMan->CloseGeometry();
286  top->Draw("ogl"); // an already drawn geometry will be not updated according to changes in the matrices
287 
288  }
289  //gGeoManager->CdTop();
290  //Navigate_into();
291 
292  /*
293  gGeoManager->cd("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/"
294  "lmd_vol_half_1/lmd_vol_plane_3/lmd_vol_module_4/"
295  "lmd_vol_side_1/lmd_vol_die_1/LumActivePixelRect_398");
296  gGeoManager->GetCurrentNode()->GetMatrix();
297 
298 //gGeoManager->cd("/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0");
299  //cout << gGeoManager->GetPath() << " " << gGeoManager->GetCurrentNode()->GetName() << endl;
300  //gGeoManager->GetCurrentNode()->GetMatrix()->Print();
301  //gGeoManager->GetCurrentMatrix()->Print();
302 
303 
304  gGeoManager->cd("/lum_1/lmd_vol_vac_3");
305  TGeoVolume* topvol = gGeoManager->GetCurrentNode()->GetVolume();
306  if (topvol){
307  gGeoManager->SetTopVolume(topvol);
308  gGeoManager->cd("/lmd_vol_ref_sys_0");
309  cout << gGeoManager->GetPath() << " " << gGeoManager->GetCurrentNode()->GetName() << endl;
310  gGeoManager->GetCurrentNode()->GetMatrix()->Print();
311  gGeoManager->GetCurrentMatrix()->Print();
312  */
313 
314  // according to http://personalpages.to.infn.it/~puccio/htmldoc/src/AliTRDalignment.cxx.html
315  /*
316  TGeoPNEntry *pne;
317  TGeoMatrix* ideSm[400];
318  TGeoMatrix* misSm[400];
319  for (int isensor = 0; isensor < 399; isensor++){
320  stringstream path;
321  path << "/lum_1/lmd_vol_vac_3/lmd_vol_ref_sys_0/lmd_vol_half_1/lmd_vol_plane_3/lmd_vol_module_4/lmd_vol_side_1/lmd_vol_die_1/LumActivePixelRect_" << isensor;
322  gGeoManager->cd(path.str().c_str());
323  cout << gGeoManager->GetCurrentNode()->GetName() << endl;
324  pne = gGeoManager->GetAlignableEntry(path.str().c_str());
325  if (pne){
326  TGeoPhysicalNode* node = pne->GetPhysicalNode();
327  if (!node) {
328  cout << "physical node entry has no physical node " << path.str() << endl;
329  continue;
330  }
331  misSm[isensor] = new TGeoHMatrix(*node->GetNode(node->GetLevel())->GetMatrix());
332  ideSm[isensor] = new TGeoHMatrix(*node->GetOriginalMatrix());
333  } else {
334  cout << " sorry could not get alignable entry from sensor " << isensor << endl;
335  }
336  }*/
337 
338  // gGeoManager->Export(outfile);
339  //gGeoMan->SetVisLevel(20);
340  //top->Draw("ogl");
341  //top->RandomPoints(100000);
342  return 0;
343 }
bool Test_List_of_Sensors(vector< string > list_of_sensors, int &offset)
Definition: PndLmdDim.cxx:2108
double half_tilt_phi
Definition: PndLmdDim.h:275
double plane_half_tilt_theta
Definition: PndLmdDim.h:290
double half_offset_z
Definition: PndLmdDim.h:273
double plane_half_offset_y
Definition: PndLmdDim.h:284
FairGeoLoader * geoLoad
FairGeoMedia * Media
TGeoManager * gGeoMan
double cvd_offset_y
Definition: PndLmdDim.h:329
exit(0)
double plane_half_tilt_phi
Definition: PndLmdDim.h:288
string Get_List_of_Sensors(vector< string > &list_of_sensors, bool found_lmd=false, bool first_call=true)
Definition: PndLmdDim.cxx:2074
double cvd_tilt_theta
Definition: PndLmdDim.h:335
TVector3 offset(2, 0, 0)
double plane_half_tilt_psi
Definition: PndLmdDim.h:292
double side_offset_x
Definition: PndLmdDim.h:344
TGeoManager * gGeoManager
bool Read_transformation_matrices_from_geometry(bool aligned=true)
Definition: PndLmdDim.cxx:1714
void Calc_matrix_offsets()
Definition: PndLmdDim.cxx:2814
TGeoVolume * top
double side_tilt_psi
Definition: PndLmdDim.h:354
double side_offset_y
Definition: PndLmdDim.h:346
FairGeoBuilder * geobuild
TFile * fi
void Generate_rootgeom(TGeoVolume &mothervol, bool misaligned=false)
Definition: PndLmdDim.cxx:331
TGeoMatrix * Get_matrix(int ihalf, int iplane, int imodule, int iside, int idie, int isensor, bool aligned=true)
Definition: PndLmdDim.cxx:2741
double half_tilt_theta
Definition: PndLmdDim.h:277
double cvd_offset_x
Definition: PndLmdDim.h:327
double cvd_tilt_phi
Definition: PndLmdDim.h:333
void Write_transformation_matrices(string filename, bool aligned=true, int version_number=geometry_version)
Definition: PndLmdDim.cxx:2179
void Read_transformation_matrices(string filename="", bool aligned=true, int version_number=geometry_version)
Definition: PndLmdDim.cxx:1515
double side_tilt_theta
Definition: PndLmdDim.h:352
double cvd_offset_z
Definition: PndLmdDim.h:331
bool Set_matrix(string path, TGeoHMatrix *matrix, int ihalf=-1, int iplane=-1, int imodule=-1, int iside=-1, int idie=-1, int isensor=-1)
Definition: PndLmdDim.cxx:1670
double plane_half_offset_x
Definition: PndLmdDim.h:282
static PndLmdDim & Get_instance()
Definition: PndLmdDim.cxx:242
FairGeoInterface * geoFace
double half_offset_x
Definition: PndLmdDim.h:269
double plane_half_offset_z
Definition: PndLmdDim.h:286
double half_tilt_psi
Definition: PndLmdDim.h:279
double half_offset_y
Definition: PndLmdDim.h:271
bool Write_transformation_matrices_to_geometry(bool aligned=true)
Definition: PndLmdDim.cxx:1879
double cvd_tilt_psi
Definition: PndLmdDim.h:337
double side_tilt_phi
Definition: PndLmdDim.h:350
TString outfile
double side_offset_z
Definition: PndLmdDim.h:348
int main ( void  )

Definition at line 345 of file old-macros/create_Lmd_HV_MAPS.C.

References create_HV_MAPS().

345  {
346  TApplication myapp("myapp", 0, 0);
347  cout << "before\n";
348  create_HV_MAPS();
349  cout << "after\n";
350  myapp.Run();
351  return 0;
352 }
int create_HV_MAPS()
void Navigate_into ( int  depth = 0)

Definition at line 43 of file old-macros/create_Lmd_HV_MAPS.C.

References gGeoManager, and i.

43  {
44  //for (int idepth = 0; idepth < depth; idepth++){
45  // cout << " ";
46  //}
47  cout << gGeoManager->GetPath() << " ";
48  cout << "current node is " << gGeoManager->GetCurrentNavigator()->GetCurrentNode()->GetName() << endl;
49  int nnodes = gGeoManager->GetCurrentNode()->GetNdaughters();
50  for (int i = 0; i < nnodes; i++){
51  cout << " navigating into node " << i << endl;
52  gGeoManager->CdDown(i);
53  Navigate_into(depth+1);
54  gGeoManager->CdUp();
55  }
56 }
Int_t i
Definition: run_full.C:25
TGeoManager * gGeoManager
void Navigate_into(int depth=0)

Variable Documentation

const bool include_box = false

Definition at line 41 of file old-macros/create_Lmd_HV_MAPS.C.

const bool show_beam_pipe_dummy = true

Definition at line 39 of file old-macros/create_Lmd_HV_MAPS.C.