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();
89 const char* module_name =
"module";
91 TVector3 frontFaceGlobal;
92 Int_t nSpecDetModules = 0;
93 TString specDetNameTag =
"";
95 TGeoIterator geoIterator(gGeoManager->GetTopNode()->GetVolume());
98 while ((curNode = geoIterator())) {
100 geoIterator.GetPath(nodePath);
101 if (!(nodePath.Contains(specDet_names[0], TString::kIgnoreCase)
102 || nodePath.Contains(specDet_names[1], TString::kIgnoreCase))) {
107 TString nodeName(curNode->GetName());
110 if (nodeName.Contains(specDet_names[0], TString::kIgnoreCase)
111 || nodeName.Contains(specDet_names[1], TString::kIgnoreCase)) {
112 specDetNameTag = nodeName;
114 auto specDetGeoMatrix = curNode->GetMatrix();
115 auto specDetBox = (TGeoBBox*) curNode->GetVolume()->GetShape();
116 TVector3 frontFaceLocal(0, 0, -specDetBox->GetDZ());
117 specDetGeoMatrix->LocalToMaster(&frontFaceLocal[0], &frontFaceGlobal[0]);
121 if (nodeName.Contains(module_name)) {
124 auto geoMatrix = curNode->GetMatrix();
125 TVector3 translation(geoMatrix->GetTranslation());
126 double x = translation.X();
127 double y = translation.Y();
129 auto*
module = specDet_mod_pos.AddChannel();
130 module->SetPosition(x, y, frontFaceGlobal[2]);
131 LOG(info) <<
"Module " << nSpecDetModules <<
" : " << Form(
"(%.3f, %.3f)",
x,
y) <<
" id "
132 << curNode->GetNumber();
136 LOG(info) <<
"Detector " << specDetNameTag <<
" with " << nSpecDetModules <<
" modules";