10 #include <Math/Point2D.h>
12 #include <TCollection.h>
13 #include <TDirectory.h>
17 #include <TMultiGraph.h>
26 constexpr
auto cRED =
"\033[1;31m";
29 constexpr
auto cGREEN =
"\033[1;32m";
39 TString dir = getenv(
"VMCWORKDIR");
40 TString geodir = dir +
"/geometry/" + geofile;
41 f =
new TFile(geodir.Data());
44 std::cout <<
cRED <<
" AtTPC Proto Map : No geometry file found! Check VMCWORKDIR variable. Exiting... "
49 std::cout <<
cGREEN <<
" AtTPC Proto Map : Prototype geometry found in : " << geodir.Data() <<
cNORMAL << std::endl;
59 <<
" AtTPC Proto Map : No geometry file found! Please set the geometry file first via SetGeoFile method "
64 std::cout <<
"Skipping generation of pad plane, it is already parsed!" << std::endl;
68 std::cout <<
" AtTPC Proto Map : Generating the map geometry of the AtTPC Prototype " << std::endl;
69 TMultiGraph *mg =
nullptr;
71 TIter nextkey(gDirectory->GetListOfKeys());
72 while ((key =
dynamic_cast<TKey *
>(nextkey()))) {
73 auto *obj =
dynamic_cast<TMultiGraph *
>(key->ReadObj());
76 auto padPlane =
dynamic_cast<TH2Poly *
>(key->ReadObj());
77 if (padPlane !=
nullptr) {
80 fPadPlane =
dynamic_cast<TH2Poly *
>(padPlane->Clone());
100 <<
" AtTPC Proto Map : No geometry file found! Please set the geometry file first via SetGeoFile method "
104 fPadPlane =
dynamic_cast<TH2Poly *
>(
f->Get(TH2Poly_name.Data()));
112 std::cout <<
" AtTPC Proto Map : No map file for prototype found! Please set the geometry file first via the "
113 "SetProtoMap method "
115 return {-9999, -9999};
120 <<
" AtTPC Proto Map : No geometry file found! Please set the geometry file first via the SetGeoFile method "
122 return {-9999, -9999};
131 std::cerr <<
" AtTpcProtoMap::CalcPadCenter - Pad not found - CoboID : " << PadRef << std::endl;
132 return {-9999, -9999};
135 auto padCenter = (*its).second;
136 return {padCenter[0], padCenter[1]};
141 std::cout <<
" AtTpcProtoMap::CalcPadCenter Error : Pad not found" << std::endl;
142 return {-9999, -9999};
152 Float_t pad_xcoord = -1;
153 Float_t pad_ycoord = -1;
155 std::vector<Float_t> PadCoord;
157 auto InProtoMap = std::make_unique<std::ifstream>(file.Data());
159 if (InProtoMap->fail()) {
160 std::cout <<
" = AtTpcProtoMap::SetProtoMap : No Prototype Map file found! Please, check the path. Current :"
161 << file.Data() << std::endl;
166 while (!InProtoMap->eof()) {
168 *InProtoMap >> PadNum >> PadName >> pad_xcoord >> pad_ycoord >> bin_num;
169 PadCoord.push_back(pad_xcoord);
170 PadCoord.push_back(pad_ycoord);
172 if (!PadName.IsNull())
173 std::cout <<
" PadNum : " << PadNum <<
" - PadName : " << PadName.Data()
174 <<
" - Pad X coord : " << pad_xcoord <<
" - Pad Y coord : " << pad_ycoord
175 <<
" - Bin number : " << bin_num << std::endl;
176 ProtoGeoMap.insert(std::pair<Int_t, std::vector<Float_t>>(PadNum, PadCoord));
177 ProtoBinMap.insert(std::pair<Int_t, Int_t>(bin_num, PadNum));
188 std::cout <<
" = AtTpcProtoMap::BinToPad : No Prototype Map file found! Please, use the SetProtoMap method first."
194 Int_t padval = (*its).second;
198 std::cerr <<
" = AtTpcProtoMap::BinToPad - Bin not found : " << binval << std::endl;
200 }
else if (binval > 2014 || binval < 0) {
203 <<
" = AtTpcProtoMap::BinToPad - Warning: Bin value out of expected boundaries for prototype bin mapping : "
204 << binval << std::endl;