79 auto* data_header =
new AnalysisTree::DataHeader();
81 std::cout <<
"ReadDataHeader" << std::endl;
82 data_header->SetSystem(
system_);
86 auto& specDet_mod_pos = data_header->AddDetector();
88 const char* module_name =
"module";
90 TVector3 frontFaceGlobal;
91 Int_t nSpecDetModules = 0;
92 TString specDetNameTag =
"";
94 TGeoIterator geoIterator(gGeoManager->GetTopNode()->GetVolume());
97 while ((curNode = geoIterator())) {
99 geoIterator.GetPath(nodePath);
100 if (!(nodePath.Contains(specDet_names[0], TString::kIgnoreCase)
101 || nodePath.Contains(specDet_names[1], TString::kIgnoreCase))) {
106 TString nodeName(curNode->GetName());
109 if (nodeName.Contains(specDet_names[0], TString::kIgnoreCase)
110 || nodeName.Contains(specDet_names[1], TString::kIgnoreCase)) {
111 specDetNameTag = nodeName;
113 auto specDetGeoMatrix = curNode->GetMatrix();
114 auto specDetBox = (TGeoBBox*) curNode->GetVolume()->GetShape();
115 TVector3 frontFaceLocal(0, 0, -specDetBox->GetDZ());
116 specDetGeoMatrix->LocalToMaster(&frontFaceLocal[0], &frontFaceGlobal[0]);
120 if (nodeName.Contains(module_name)) {
123 auto geoMatrix = curNode->GetMatrix();
124 TVector3 translation(geoMatrix->GetTranslation());
125 double x = translation.X();
126 double y = translation.Y();
128 auto*
module = specDet_mod_pos.AddChannel();
129 module->SetPosition(x, y, frontFaceGlobal[2]);
130 LOG(info) <<
"Module " << nSpecDetModules <<
" : " << Form(
"(%.3f, %.3f)",
x,
y) <<
" id "
131 << curNode->GetNumber();
135 LOG(info) <<
"Detector " << specDetNameTag <<
" with " << nSpecDetModules <<
" modules";