12#include "TGeoManager.h"
16#include "TGeoSphere.h"
23#include <TSQLStatement.h>
28#define Create_New_Component 1
31UniGeoConverter::UniGeoConverter() {}
35int UniGeoConverter::RecursiveNodeChanging(TSQLServer* db_server, TGeoNode* node,
int parent_node_id)
37 for (
int i = 0;
i < node->GetNdaughters();
i++) {
38 TGeoNode* child = node->GetDaughter(
i);
39 TGeoVolume* curVolume = child->GetVolume();
40 if (parent_node_id == -1)
41 cout <<
"Geometry for detector " << curVolume->GetName() <<
" is writing..." << endl;
46 TGeoMedium* pMedium = child->GetMedium();
47 TString medium_name = pMedium->GetName();
48 medium_name.ToLower();
51 TString strStatement = TString::Format(
"SELECT media_name "
52 "FROM geometry_media "
53 "WHERE lower(media_name) = \"%s\"",
55 TSQLStatement* stmt_select = uni_db->Statement(strStatement);
58 TSQLStatement* stmt_insert;
59 if (stmt_select->Process()) {
61 stmt_select->StoreResult();
64 if (!stmt_select->NextResultRow()) {
65 TGeoMaterial* pMaterial = pMedium->GetMaterial();
67 strStatement = TString::Format(
68 "INSERT INTO geometry_media(media_name, density, radiation_length, interaction_length, "
70 "field_flag, field_max, ang_deviation_max, step_max, energy_loss_max, b_crossing_precision, "
71 "step_min, media_desc) "
72 "VALUES (\"%s\", %f, %f, %f, %d, %d, %f, %f, %f ,%f, %f, %f, null)",
73 pMedium->GetName(), pMaterial->GetDensity(), pMaterial->GetRadLen(), pMaterial->GetIntLen(),
74 (
int)pMedium->GetParam(0), (
int)pMedium->GetParam(1), pMedium->GetParam(2), pMedium->GetParam(3),
75 pMedium->GetParam(4), pMedium->GetParam(5), pMedium->GetParam(6), pMedium->GetParam(7));
76 stmt_insert = uni_db->Statement(strStatement);
79 if (!stmt_insert->Process()) {
80 cout <<
"Error: insertion of new medium has been failed!" << endl;
89 if (pMaterial->IsMixture()) {
90 stmt_insert = uni_db->Statement(
91 "INSERT INTO media_element(media_name, atomic_weight, atomic_number, relative_weight, Natoms) "
92 "VALUES (?, ?, ?, ?, ?)");
94 TGeoMixture* pMixture = (TGeoMixture*)pMaterial;
95 for (
int j = 0; j < pMaterial->GetNelements(); j++) {
97 if (stmt_insert->NextIteration()) {
98 stmt_insert->SetString(0, pMedium->GetName());
99 stmt_insert->SetDouble(1, (pMixture->GetAmixt())[j]);
100 stmt_insert->SetDouble(2, (pMixture->GetZmixt())[j]);
101 stmt_insert->SetDouble(3, (pMixture->GetWmixt())[j]);
106 if (!stmt_insert->Process()) {
107 cout <<
"Error: insertion of medium components (for mixture) has been failed!" << endl;
115 strStatement = TString::Format(
116 "INSERT INTO media_element(media_name, atomic_weight, atomic_number, relative_weight, Natoms) "
117 "VALUES (\"%s\", %f, %f, null, null)",
118 pMedium->GetName(), pMaterial->GetA(), pMaterial->GetZ());
119 stmt_insert = uni_db->Statement(strStatement);
122 if (!stmt_insert->Process()) {
123 cout <<
"ERROR: inserting medium component has been failed" << endl;
134 if (pMedium->GetName() != stmt_select->GetString(0))
135 pMedium->SetName(stmt_select->GetString(0));
142 cout <<
"ERROR: selecting geometry_media has been failed" << endl;
150 TGeoShape* pShape = curVolume->GetShape();
151 TString strShapeClass = pShape->ClassName();
153 if (pShape->TestShapeBit(TGeoShape::kGeoPgon))
155 else if (pShape->TestShapeBit(TGeoShape::kGeoPcon))
157 else if (pShape->TestShapeBit(TGeoShape::kGeoTubeSeg))
159 else if (pShape->TestShapeBit(TGeoShape::kGeoTube))
161 else if (pShape->TestShapeBit(TGeoShape::kGeoConeSeg))
163 else if (pShape->TestShapeBit(TGeoShape::kGeoCone))
165 else if (pShape->TestShapeBit(TGeoShape::kGeoSph))
167 else if (pShape->TestShapeBit(TGeoShape::kGeoTorus))
169 else if (pShape->TestShapeBit(TGeoShape::kGeoTrd1))
171 else if (pShape->TestShapeBit(TGeoShape::kGeoTrd2))
173 else if (pShape->TestShapeBit(TGeoShape::kGeoTrap))
175 else if (pShape->TestShapeBit(TGeoShape::kGeoPara))
177 else if (pShape->TestShapeBit(TGeoShape::kGeoComb))
179 else if (pShape->TestShapeBit(TGeoShape::kGeoArb8))
181 else if (pShape->TestShapeBit(TGeoShape::kGeoEltu))
183 else if (pShape->TestShapeBit(TGeoShape::kGeoXtru))
185 else if (pShape->TestShapeBit(TGeoShape::kGeoBox)) {
186 if (strShapeClass ==
"TGeoShapeAssembly")
191 cout <<
"Error: geometric shape has not been defined: " << strShapeClass << endl;
230 if (parent_node_id == -1) {
232 TString component_name = curVolume->GetName();
233 component_name.ToLower();
234 strStatement = TString::Format(
"SELECT component_name "
236 "WHERE lower(component_name) = \"%s\"",
237 component_name.Data());
238 stmt_select = uni_db->Statement(strStatement);
241 if (stmt_select->Process()) {
243 stmt_select->StoreResult();
246 if (!stmt_select->NextResultRow()) {
250 cout <<
"ERROR: there is no such component in the database: " << curVolume->GetName()
264 strStatement = TString::Format(
"INSERT INTO component(component_name, manufacturer_name, "
265 "responsible_person, description) "
266 "VALUES (\"%s\", null, null, null)",
267 curVolume->GetName());
268 stmt_insert = uni_db->Statement(strStatement);
271 if (!stmt_insert->Process()) {
272 cout <<
"Error: insertion of new component in DB has been failed!" << endl;
285 if (curVolume->GetName() != stmt_select->GetString(0))
286 curVolume->SetName(stmt_select->GetString(0));
291 cout <<
"ERROR: selecting of the component has been failed" << endl;
298 TString::Format(
"INSERT INTO geometry_node(node_name, parent_node_id, media_name, shape_index) "
299 "VALUES (\"%s\", null, \"%s\", %d)",
300 child->GetName(), pMedium->GetName(), (
int)curShape);
301 stmt_insert = uni_db->Statement(strStatement);
304 if (!stmt_insert->Process()) {
305 cout <<
"ERROR: inserting main geometry node has been failed" << endl;
314 TString::Format(
"INSERT INTO geometry_node(node_name, parent_node_id, media_name, shape_index) "
315 "VALUES (\"%s\", %d, \"%s\", %d)",
316 child->GetName(), parent_node_id, pMedium->GetName(), (
int)curShape);
317 stmt_insert = uni_db->Statement(strStatement);
320 if (!stmt_insert->Process()) {
321 cout <<
"ERROR: inserting child geometry node has been failed" << endl;
331 int last_id = parent_node_id;
332 TSQLStatement* stmt_last = db_server->Statement(
"SELECT LAST_INSERT_ID()");
334 if (stmt_last->Process()) {
336 stmt_last->StoreResult();
339 if (!stmt_last->NextResultRow()) {
340 cout <<
"ERROR: there is no last ID in the database" << endl;
345 last_id = stmt_last->GetInt(0);
350 cout <<
"ERROR: getting the last ID has been failed!" << endl;
357 stmt_insert = uni_db->Statement(
"INSERT INTO geometry_parameter(node_id, parameter_type, parameter_value) "
362 TGeoBBox* pBox = (TGeoBBox*)pShape;
363 if (stmt_insert->NextIteration()) {
364 stmt_insert->SetInt(0, last_id);
366 stmt_insert->SetDouble(2, pBox->GetOrigin()[0]);
368 if (stmt_insert->NextIteration()) {
369 stmt_insert->SetInt(0, last_id);
371 stmt_insert->SetDouble(2, pBox->GetOrigin()[1]);
373 if (stmt_insert->NextIteration()) {
374 stmt_insert->SetInt(0, last_id);
376 stmt_insert->SetDouble(2, pBox->GetOrigin()[2]);
378 if (stmt_insert->NextIteration()) {
379 stmt_insert->SetInt(0, last_id);
381 stmt_insert->SetDouble(2, pBox->GetDX());
383 if (stmt_insert->NextIteration()) {
384 stmt_insert->SetInt(0, last_id);
386 stmt_insert->SetDouble(2, pBox->GetDY());
388 if (stmt_insert->NextIteration()) {
389 stmt_insert->SetInt(0, last_id);
391 stmt_insert->SetDouble(2, pBox->GetDZ());
397 TGeoTube* pTube = (TGeoTube*)pShape;
398 if (stmt_insert->NextIteration()) {
399 stmt_insert->SetInt(0, last_id);
401 stmt_insert->SetDouble(2, pTube->GetRmin());
403 if (stmt_insert->NextIteration()) {
404 stmt_insert->SetInt(0, last_id);
406 stmt_insert->SetDouble(2, pTube->GetRmax());
408 if (stmt_insert->NextIteration()) {
409 stmt_insert->SetInt(0, last_id);
411 stmt_insert->SetDouble(2, pTube->GetDz());
417 TGeoTubeSeg* pTubeSeg = (TGeoTubeSeg*)pShape;
418 if (stmt_insert->NextIteration()) {
419 stmt_insert->SetInt(0, last_id);
421 stmt_insert->SetDouble(2, pTubeSeg->GetRmin());
423 if (stmt_insert->NextIteration()) {
424 stmt_insert->SetInt(0, last_id);
426 stmt_insert->SetDouble(2, pTubeSeg->GetRmax());
428 if (stmt_insert->NextIteration()) {
429 stmt_insert->SetInt(0, last_id);
431 stmt_insert->SetDouble(2, pTubeSeg->GetDz());
433 if (stmt_insert->NextIteration()) {
434 stmt_insert->SetInt(0, last_id);
436 stmt_insert->SetDouble(2, pTubeSeg->GetPhi1());
438 if (stmt_insert->NextIteration()) {
439 stmt_insert->SetInt(0, last_id);
441 stmt_insert->SetDouble(2, pTubeSeg->GetPhi2());
447 TGeoPgon* pPgon = (TGeoPgon*)pShape;
448 if (stmt_insert->NextIteration()) {
449 stmt_insert->SetInt(0, last_id);
451 stmt_insert->SetDouble(2, pPgon->GetPhi1());
453 if (stmt_insert->NextIteration()) {
454 stmt_insert->SetInt(0, last_id);
456 stmt_insert->SetDouble(2, pPgon->GetDphi());
458 if (stmt_insert->NextIteration()) {
459 stmt_insert->SetInt(0, last_id);
461 stmt_insert->SetDouble(2, pPgon->GetNedges());
463 if (stmt_insert->NextIteration()) {
464 stmt_insert->SetInt(0, last_id);
466 stmt_insert->SetDouble(2, pPgon->GetNz());
468 for (
int j = 0; j < pPgon->GetNz(); j++) {
469 if (stmt_insert->NextIteration()) {
470 stmt_insert->SetInt(0, last_id);
471 stmt_insert->SetInt(1, 100 + 3 * j);
472 stmt_insert->SetDouble(2, pPgon->GetZ()[j]);
474 if (stmt_insert->NextIteration()) {
475 stmt_insert->SetInt(0, last_id);
476 stmt_insert->SetInt(1, 101 + 3 * j);
477 stmt_insert->SetDouble(2, pPgon->GetRmin()[j]);
479 if (stmt_insert->NextIteration()) {
480 stmt_insert->SetInt(0, last_id);
481 stmt_insert->SetInt(1, 102 + 3 * j);
482 stmt_insert->SetDouble(2, pPgon->GetRmax()[j]);
489 TGeoPcon* pPcon = (TGeoPcon*)pShape;
490 if (stmt_insert->NextIteration()) {
491 stmt_insert->SetInt(0, last_id);
493 stmt_insert->SetDouble(2, pPcon->GetPhi1());
495 if (stmt_insert->NextIteration()) {
496 stmt_insert->SetInt(0, last_id);
498 stmt_insert->SetDouble(2, pPcon->GetDphi());
500 if (stmt_insert->NextIteration()) {
501 stmt_insert->SetInt(0, last_id);
503 stmt_insert->SetDouble(2, pPcon->GetNz());
505 for (
int j = 0; j < pPcon->GetNz(); j++) {
506 if (stmt_insert->NextIteration()) {
507 stmt_insert->SetInt(0, last_id);
508 stmt_insert->SetInt(1, 100 + 3 * j);
509 stmt_insert->SetDouble(2, pPcon->GetZ()[j]);
511 if (stmt_insert->NextIteration()) {
512 stmt_insert->SetInt(0, last_id);
513 stmt_insert->SetInt(1, 101 + 3 * j);
514 stmt_insert->SetDouble(2, pPcon->GetRmin()[j]);
516 if (stmt_insert->NextIteration()) {
517 stmt_insert->SetInt(0, last_id);
518 stmt_insert->SetInt(1, 102 + 3 * j);
519 stmt_insert->SetDouble(2, pPcon->GetRmax()[j]);
526 TGeoSphere* pSphere = (TGeoSphere*)pShape;
527 if (stmt_insert->NextIteration()) {
528 stmt_insert->SetInt(0, last_id);
530 stmt_insert->SetDouble(2, pSphere->GetRmin());
532 if (stmt_insert->NextIteration()) {
533 stmt_insert->SetInt(0, last_id);
535 stmt_insert->SetDouble(2, pSphere->GetRmax());
537 if (stmt_insert->NextIteration()) {
538 stmt_insert->SetInt(0, last_id);
540 stmt_insert->SetDouble(2, pSphere->GetTheta1());
542 if (stmt_insert->NextIteration()) {
543 stmt_insert->SetInt(0, last_id);
545 stmt_insert->SetDouble(2, pSphere->GetTheta2());
547 if (stmt_insert->NextIteration()) {
548 stmt_insert->SetInt(0, last_id);
550 stmt_insert->SetDouble(2, pSphere->GetPhi1());
552 if (stmt_insert->NextIteration()) {
553 stmt_insert->SetInt(0, last_id);
555 stmt_insert->SetDouble(2, pSphere->GetPhi2());
561 TGeoCone* pCone = (TGeoCone*)pShape;
562 if (stmt_insert->NextIteration()) {
563 stmt_insert->SetInt(0, last_id);
565 stmt_insert->SetDouble(2, pCone->GetRmin1());
567 if (stmt_insert->NextIteration()) {
568 stmt_insert->SetInt(0, last_id);
570 stmt_insert->SetDouble(2, pCone->GetRmax1());
572 if (stmt_insert->NextIteration()) {
573 stmt_insert->SetInt(0, last_id);
575 stmt_insert->SetDouble(2, pCone->GetRmin2());
577 if (stmt_insert->NextIteration()) {
578 stmt_insert->SetInt(0, last_id);
580 stmt_insert->SetDouble(2, pCone->GetRmax2());
582 if (stmt_insert->NextIteration()) {
583 stmt_insert->SetInt(0, last_id);
585 stmt_insert->SetDouble(2, pCone->GetDz());
591 TGeoConeSeg* pConeSeg = (TGeoConeSeg*)pShape;
592 if (stmt_insert->NextIteration()) {
593 stmt_insert->SetInt(0, last_id);
595 stmt_insert->SetDouble(2, pConeSeg->GetRmin1());
597 if (stmt_insert->NextIteration()) {
598 stmt_insert->SetInt(0, last_id);
600 stmt_insert->SetDouble(2, pConeSeg->GetRmax1());
602 if (stmt_insert->NextIteration()) {
603 stmt_insert->SetInt(0, last_id);
605 stmt_insert->SetDouble(2, pConeSeg->GetRmin2());
607 if (stmt_insert->NextIteration()) {
608 stmt_insert->SetInt(0, last_id);
610 stmt_insert->SetDouble(2, pConeSeg->GetRmax2());
612 if (stmt_insert->NextIteration()) {
613 stmt_insert->SetInt(0, last_id);
615 stmt_insert->SetDouble(2, pConeSeg->GetDz());
617 if (stmt_insert->NextIteration()) {
618 stmt_insert->SetInt(0, last_id);
620 stmt_insert->SetDouble(2, pConeSeg->GetPhi1());
622 if (stmt_insert->NextIteration()) {
623 stmt_insert->SetInt(0, last_id);
625 stmt_insert->SetDouble(2, pConeSeg->GetPhi2());
631 TGeoTrd1* pTrd1 = (TGeoTrd1*)pShape;
632 if (stmt_insert->NextIteration()) {
633 stmt_insert->SetInt(0, last_id);
635 stmt_insert->SetDouble(2, pTrd1->GetDx1());
637 if (stmt_insert->NextIteration()) {
638 stmt_insert->SetInt(0, last_id);
640 stmt_insert->SetDouble(2, pTrd1->GetDx2());
642 if (stmt_insert->NextIteration()) {
643 stmt_insert->SetInt(0, last_id);
645 stmt_insert->SetDouble(2, pTrd1->GetDy());
647 if (stmt_insert->NextIteration()) {
648 stmt_insert->SetInt(0, last_id);
650 stmt_insert->SetDouble(2, pTrd1->GetDz());
656 TGeoTrd2* pTrd2 = (TGeoTrd2*)pShape;
657 if (stmt_insert->NextIteration()) {
658 stmt_insert->SetInt(0, last_id);
660 stmt_insert->SetDouble(2, pTrd2->GetDx1());
662 if (stmt_insert->NextIteration()) {
663 stmt_insert->SetInt(0, last_id);
665 stmt_insert->SetDouble(2, pTrd2->GetDx2());
667 if (stmt_insert->NextIteration()) {
668 stmt_insert->SetInt(0, last_id);
670 stmt_insert->SetDouble(2, pTrd2->GetDy1());
672 if (stmt_insert->NextIteration()) {
673 stmt_insert->SetInt(0, last_id);
675 stmt_insert->SetDouble(2, pTrd2->GetDy2());
677 if (stmt_insert->NextIteration()) {
678 stmt_insert->SetInt(0, last_id);
680 stmt_insert->SetDouble(2, pTrd2->GetDz());
686 TGeoArb8* pArb8 = (TGeoArb8*)pShape;
687 if (stmt_insert->NextIteration()) {
688 stmt_insert->SetInt(0, last_id);
690 stmt_insert->SetDouble(2, pArb8->GetDz());
692 Double_t* vert = pArb8->GetVertices();
693 for (
int j = 0; j < 8; j++) {
694 stmt_insert->SetInt(0, last_id);
695 stmt_insert->SetInt(1, 100 + 3 * j);
696 stmt_insert->SetDouble(2, vert[3 * j]);
702 TGeoEltu* pEltu = (TGeoEltu*)pShape;
703 if (stmt_insert->NextIteration()) {
704 stmt_insert->SetInt(0, last_id);
706 stmt_insert->SetDouble(2, pEltu->GetA());
708 if (stmt_insert->NextIteration()) {
709 stmt_insert->SetInt(0, last_id);
711 stmt_insert->SetDouble(2, pEltu->GetB());
713 if (stmt_insert->NextIteration()) {
714 stmt_insert->SetInt(0, last_id);
716 stmt_insert->SetDouble(2, pEltu->GetDz());
722 TGeoPara* pPara = (TGeoPara*)pShape;
723 if (stmt_insert->NextIteration()) {
724 stmt_insert->SetInt(0, last_id);
726 stmt_insert->SetDouble(2, pPara->GetX());
728 if (stmt_insert->NextIteration()) {
729 stmt_insert->SetInt(0, last_id);
731 stmt_insert->SetDouble(2, pPara->GetY());
733 if (stmt_insert->NextIteration()) {
734 stmt_insert->SetInt(0, last_id);
736 stmt_insert->SetDouble(2, pPara->GetZ());
738 if (stmt_insert->NextIteration()) {
739 stmt_insert->SetInt(0, last_id);
741 stmt_insert->SetDouble(2, pPara->GetAlpha());
743 if (stmt_insert->NextIteration()) {
744 stmt_insert->SetInt(0, last_id);
746 stmt_insert->SetDouble(2, pPara->GetTheta());
748 if (stmt_insert->NextIteration()) {
749 stmt_insert->SetInt(0, last_id);
751 stmt_insert->SetDouble(2, pPara->GetPhi());
757 TGeoTorus* pTorus = (TGeoTorus*)pShape;
758 if (stmt_insert->NextIteration()) {
759 stmt_insert->SetInt(0, last_id);
761 stmt_insert->SetDouble(2, pTorus->GetR());
763 if (stmt_insert->NextIteration()) {
764 stmt_insert->SetInt(0, last_id);
766 stmt_insert->SetDouble(2, pTorus->GetRmin());
768 if (stmt_insert->NextIteration()) {
769 stmt_insert->SetInt(0, last_id);
771 stmt_insert->SetDouble(2, pTorus->GetRmax());
773 if (stmt_insert->NextIteration()) {
774 stmt_insert->SetInt(0, last_id);
776 stmt_insert->SetDouble(2, pTorus->GetPhi1());
778 if (stmt_insert->NextIteration()) {
779 stmt_insert->SetInt(0, last_id);
781 stmt_insert->SetDouble(2, pTorus->GetDphi());
787 TGeoTrap* pTrap = (TGeoTrap*)pShape;
788 if (stmt_insert->NextIteration()) {
789 stmt_insert->SetInt(0, last_id);
791 stmt_insert->SetDouble(2, pTrap->GetDz());
793 if (stmt_insert->NextIteration()) {
794 stmt_insert->SetInt(0, last_id);
796 stmt_insert->SetDouble(2, pTrap->GetTheta());
798 if (stmt_insert->NextIteration()) {
799 stmt_insert->SetInt(0, last_id);
801 stmt_insert->SetDouble(2, pTrap->GetPhi());
803 if (stmt_insert->NextIteration()) {
804 stmt_insert->SetInt(0, last_id);
806 stmt_insert->SetDouble(2, pTrap->GetH1());
808 if (stmt_insert->NextIteration()) {
809 stmt_insert->SetInt(0, last_id);
811 stmt_insert->SetDouble(2, pTrap->GetBl1());
813 if (stmt_insert->NextIteration()) {
814 stmt_insert->SetInt(0, last_id);
816 stmt_insert->SetDouble(2, pTrap->GetTl1());
818 if (stmt_insert->NextIteration()) {
819 stmt_insert->SetInt(0, last_id);
821 stmt_insert->SetDouble(2, pTrap->GetAlpha1());
823 if (stmt_insert->NextIteration()) {
824 stmt_insert->SetInt(0, last_id);
826 stmt_insert->SetDouble(2, pTrap->GetH2());
828 if (stmt_insert->NextIteration()) {
829 stmt_insert->SetInt(0, last_id);
831 stmt_insert->SetDouble(2, pTrap->GetBl2());
833 if (stmt_insert->NextIteration()) {
834 stmt_insert->SetInt(0, last_id);
836 stmt_insert->SetDouble(2, pTrap->GetTl2());
838 if (stmt_insert->NextIteration()) {
839 stmt_insert->SetInt(0, last_id);
841 stmt_insert->SetDouble(2, pTrap->GetAlpha2());
849 if (!stmt_insert->Process()) {
850 cout <<
"ERROR: inserting geometry parameters has been failed!" << endl;
859 if (child->GetNdaughters() != 0)
860 RecursiveNodeChanging(uni_db, child, last_id);
869 if (geo_file_path ==
"") {
870 cout <<
"ERROR: geometry file path cannot be empty!" << endl;
875 if (connectionUniDb ==
nullptr) {
876 cout <<
"ERROR: connection to the database cannot be established" << endl;
883 TFile* geoFile =
new TFile(geo_file_path,
"READ");
884 if (!geoFile->IsOpen()) {
885 cout <<
"ERROR: geometry file has not be opened" << endl;
890 TList* keyList = geoFile->GetListOfKeys();
892 TKey* key = (TKey*)next();
893 TString className(key->GetClassName());
894 if (className.BeginsWith(
"TGeoManager")) {
898 cout <<
"ERROR: TGeoManager is not top element in the given file: " << geo_file_path << endl;
902 TGeoNode* N = gGeoManager->GetTopNode();
903 int db_res = RecursiveNodeChanging(uni_db, N, -1);
905 delete connectionUniDb;
#define Create_New_Component
static UniConnection * Open()
TSQLServer * GetSQLServer()
static int WriteRootGeoToDB(TString geo_file_path)
virtual ~UniGeoConverter()