3 #include <FairLogger.h>
5 #include <Math/Point2D.h>
8 #include <TDOMParser.h>
12 #include <TXMLDocument.h>
15 #include <boost/multi_array/base.hpp>
16 #include <boost/multi_array/extent_gen.hpp>
25 constexpr
auto cRED =
"\033[1;31m";
28 constexpr
auto cGREEN =
"\033[1;32m";
43 AtMap::AtMap() : AtPadCoord(boost::extents[10240][3][2]), fPadPlane(nullptr) {}
67 return ref.
ch == 11 || ref.
ch == 22 || ref.
ch == 45 || ref.
ch == 56;
75 return dynamic_cast<TH2Poly *
>(
fPadPlane->Clone());
82 auto binNum =
fPadPlane->FindBin(point.X(), point.Y());
97 auto its =
fPadMap.find(PadRef);
102 std::cerr <<
" AtTpcMap::GetPadNum - Pad key not found - CoboID : " << PadRef.
cobo
103 <<
" AsadID : " << PadRef.
asad <<
" AgetID : " << PadRef.
aget <<
" ChannelID : " << PadRef.
ch
108 return (*its).second;
113 std::ifstream fIni(inimap.Data());
117 LOG(info) <<
cYELLOW << __func__ <<
" - Parsing map for inhibited pads of type " << type <<
cNORMAL;
119 LOG(error) <<
cRED <<
" = Warning : No Inhibit Pad Map found! Please, check the path. Current :" << inimap.Data()
125 LOG(info) <<
"Will overriding any existing inhibited pads with new type";
127 while (!fIni.eof()) {
139 if (pad ==
fIniPads.end() || pad->second < type)
161 Int_t fCoboID = -1000;
162 Int_t fAsadID = -1000;
163 Int_t fAgetID = -1000;
164 Int_t fChannelID = -1000;
165 Int_t fPadID = -1000;
166 Int_t fSizeID = -1000;
169 if (
node->GetNodeType() == TXMLNode::kXMLElementNode) {
170 if (strcmp(
node->GetNodeName(),
"CoboID") == 0)
171 fCoboID = atoi(
node->GetText());
172 if (strcmp(
node->GetNodeName(),
"AsadID") == 0)
173 fAsadID = atoi(
node->GetText());
174 if (strcmp(
node->GetNodeName(),
"AgetID") == 0)
175 fAgetID = atoi(
node->GetText());
176 if (strcmp(
node->GetNodeName(),
"ChannelID") == 0)
177 fChannelID = atoi(
node->GetText());
178 if (strcmp(
node->GetNodeName(),
"PadID") == 0)
179 fPadID = atoi(
node->GetText());
180 if (strcmp(
node->GetNodeName(),
"SizeID") == 0)
181 fSizeID = atoi(
node->GetText());
186 fPadMap.insert(std::pair<AtPadReference, int>(ref, fPadID));
187 fPadMapInverse.insert(std::pair<int, AtPadReference>(fPadID, ref));
188 fPadSizeMap.insert(std::pair<int, int>(fPadID, fSizeID));
195 if (
node->GetNodeType() == TXMLNode::kXMLElementNode) {
196 if (strcmp(
node->GetNodeName(),
"e17504_fission") == 0 || strcmp(
node->GetNodeName(),
"Lookup20150611") == 0 ||
197 strcmp(
node->GetNodeName(),
"e18505") == 0 || strcmp(
node->GetNodeName(),
"LookupProto20150331") == 0 ||
198 strcmp(
node->GetNodeName(),
"LookupProto10Be") == 0 ||
"ANL2023.xml" ||
199 strcmp(
node->GetNodeName(),
"LookupProto20181201v2") == 0 ||
200 strcmp(
node->GetNodeName(),
"LookupProtoX17") == 0 ||
201 strcmp(
node->GetNodeName(),
"e12014_pad_mapping") == 0 ||
202 strcmp(
node->GetNodeName(),
"e12014_pad_map_size") == 0 ||
203 strcmp(
node->GetNodeName(),
"LookupGADGET08232021") == 0 ||
204 strcmp(
node->GetNodeName(),
"Lookup20141208") == 0 ||
205 strcmp(
node->GetNodeName(),
"LookupSpecMATnoScint") == 0 ||
206 strcmp(
node->GetNodeName(),
"LookupSpecMATnoScintHisto") == 0 ||
207 strcmp(
node->GetNodeName(),
"LookupSpecMATnoScint3seg") == 0 ||
208 strcmp(
node->GetNodeName(),
"LookupProtoND") == 0) {
212 std::cout <<
" AtTpcMap::ParseMapList - Node not found! Check node name" << std::endl;
222 auto domParser = std::make_unique<TDOMParser>();
223 domParser->SetValidate(
false);
224 Int_t parsecode = domParser->ParseFile(xmlfile);
226 std::cerr << domParser->GetParseCodeMessage(parsecode) << std::endl;
229 TXMLNode *
node = domParser->GetXMLDocument()->GetRootNode();
233 LOG(INFO) <<
"Pad map has an average load of " <<
fPadMap.load_factor() <<
" and a max load of "
234 <<
fPadMap.max_load_factor() <<
" with buckets " <<
fPadMap.bucket_count() <<
" for " <<
fPadMap.size()
244 std::cout <<
" AtTpcMap::DumpAtTPCMap Error : Pad plane has not been generated or parsed - Exiting... "
250 std::ostream_iterator<int> ii(std::cout,
", ");
252 for (
auto &it : this->
fPadMap) {
253 std::cout <<
" [ " << it.second <<
", ";
254 std::cout << it.first.cobo <<
"," << it.first.asad <<
"," << it.first.aget <<
"," << it.first.ch;
255 std::cout <<
"]" << std::endl;
264 auto emplacePair =
fAuxPadMap.emplace(ref, auxName);
265 std::cout <<
cGREEN <<
" Auxiliary channel added " <<
fAuxPadMap[ref] <<
" - Hash "
268 return emplacePair.second;
291 fPadPlaneCanvas =
new TCanvas(
"padPlaneCanvas",
"Pad Plane", 1000, 1000);
292 gStyle->SetPalette(1);