10 #include <tracking/trackFindingCDC/display/HitColorMapping.h>
11 #include <tracking/trackFindingCDC/display/Colors.h>
13 #include <tracking/trackFindingCDC/mclookup/CDCMCHitLookUp.h>
14 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
15 #include <tracking/trackFindingCDC/utilities/VectorRange.h>
17 #include <cdc/dataobjects/CDCHit.h>
18 #include <cdc/dataobjects/CDCSimHit.h>
19 #include <mdst/dataobjects/MCParticle.h>
25 using namespace TrackFindingCDC;
28 const std::string c_bkgHitColor =
"orange";
31 const std::string c_missingPDGColor =
"lime";
34 const std::map<int, std::string> c_colorByPDGCode = {
74 B2WARNING(
"CDCWireHitVector could not be found on the DataStore. Cannot plot the taken flags.");
84 if (not wireHitRange.empty()) {
85 const CDCWireHit& wireHit = wireHitRange.front();
97 short int rlInfo = mcHitLookUp.
getRLInfo(&hit);
100 }
else if (rlInfo == -1) {
103 return (c_bkgHitColor);
109 return "Local right left passage variable: green <-> right, red <-> left, orange <-> not determinable.\n";
118 }
else if (posFlag == 1) {
121 return (c_bkgHitColor);
127 return "PosFlag variable of the related CDCSimHit: green <-> 0 (Right), red <-> 1 (Left), orange <-> determinable.\n";
134 switch (backgroundtag) {
135 case BackgroundMetaData::BG_TAG::bg_none:
return "orange";
136 case BackgroundMetaData::BG_TAG::bg_Coulomb_LER:
return "red";
137 case BackgroundMetaData::BG_TAG::bg_Coulomb_HER:
return "darkred";
138 case BackgroundMetaData::BG_TAG::bg_RBB_LER:
return "blue";
139 case BackgroundMetaData::BG_TAG::bg_RBB_HER:
return "darkblue";
140 case BackgroundMetaData::BG_TAG::bg_Touschek_LER:
return "green";
141 case BackgroundMetaData::BG_TAG::bg_Touschek_HER:
return "darkgreen";
142 case BackgroundMetaData::BG_TAG::bg_twoPhoton:
return "violet";
143 case BackgroundMetaData::BG_TAG::bg_RBB_gamma:
return "skyblue";
144 case BackgroundMetaData::BG_TAG::bg_RBB_LER_far:
return "turquoise";
145 case BackgroundMetaData::BG_TAG::bg_RBB_HER_far:
return "darkturquoise";
146 case BackgroundMetaData::BG_TAG::bg_Touschek_LER_far:
return "olivergreen";
147 case BackgroundMetaData::BG_TAG::bg_Touschek_HER_far:
return "darkolivegreen";
148 case BackgroundMetaData::BG_TAG::bg_SynchRad_LER:
return "goldenrod";
149 case BackgroundMetaData::BG_TAG::bg_SynchRad_HER:
return "darkgoldenrod";
150 case BackgroundMetaData::BG_TAG::bg_BHWide_LER:
return "cyan";
151 case BackgroundMetaData::BG_TAG::bg_BHWide_HER:
return "darkcyan";
152 case BackgroundMetaData::BG_TAG::bg_other:
return "orange";
154 B2INFO(
"Background tag " << backgroundtag <<
" not associated with a color.\n");
161 return (
"Background tag color coding is:\n"
162 "bg_Coulomb_HER: darkred\n"
163 "bg_Coulomb_LER: red\n"
164 "bg_RBB_HER: darkblue\n"
165 "bg_RBB_HER_far: darkturquoise\n"
167 "bg_RBB_LER_far: turquoise\n"
168 "bg_SynchRad_HER: darkgoldenrod\n"
169 "bg_SynchRad_LER: goldenrod\n"
170 "bg_Touschek_HER: darkgreen\n"
171 "bg_Touschek_HER_far: darkolivegreen\n"
172 "bg_Touschek_LER: green\n"
173 "bg_Touschek_LER_far: olivergreen\n"
174 "bg_RBB_gamma: skyblue\n"
177 "bg_twoPhoton: violet\n"
187 if (inTrackiSegment < 0) {
188 return (c_bkgHitColor);
191 double hue = 50 * inTrackiSegment % 360 / 360.0;
192 double saturation = 0.75, lightness = 0.5;
194 std::ostringstream oss;
196 oss <<
"rgb(" << rgb[0] * 100 <<
"%, " << rgb[1] * 100 <<
"%, " << rgb[2] * 100 <<
"%)";
214 double hue = fmod(360 / 3.0 * timeOfFlight, 360) / 360;
215 double saturation = 0.75, lightness = 0.5;
217 std::ostringstream oss;
219 oss <<
"rgb(" << rgb[0] * 100 <<
"%, " << rgb[1] * 100 <<
"%, " << rgb[2] * 100 <<
"%)";
227 hit.getRelationsWith<
MCParticle>(
"MCParticles");
228 if (relatedMCParticles.
size() == 0) {
229 return c_bkgHitColor;
231 double mcRelationWeight = relatedMCParticles.
weight(0);
232 if (mcRelationWeight > 0) {
241 : m_colors(
Colors::getList())
249 std::ostringstream oss;
250 for (
const std::pair<int, std::string>& colorForMCParticleID :
m_usedColors) {
251 oss <<
"MCParticle " << colorForMCParticleID.first <<
" -> " << colorForMCParticleID.second <<
"\n";
259 if (mcParticle !=
nullptr) {
270 return c_bkgHitColor;
277 int pdgCode = mcParticle !=
nullptr ? mcParticle->
getPDG() : -999;
279 auto itFound = c_colorByPDGCode.find(pdgCode);
280 if (itFound != c_colorByPDGCode.end()) {
281 return itFound->second;
283 B2WARNING(
"Unknown PDG code " << pdgCode);
284 return c_missingPDGColor;
290 std::ostringstream oss;
293 std::map<std::string, std::set<int>> pdgCodeByColor;
295 for (
auto item : c_colorByPDGCode) {
296 pdgCodeByColor[item.second].insert(item.first);
299 for (
auto item : pdgCodeByColor) {
300 oss <<
'\n' << item.first <<
"->[";
301 oss << join(
", ", item.second);
311 if (mcParticle !=
nullptr) {
312 unsigned short int primaryFlag = 1;
313 bool isPrimary = mcParticle->
hasStatus(primaryFlag);
318 }
else if (secondaryProcess > 200) {
324 return c_bkgHitColor;
332 "green->secondary decay in flight\n"
333 "orange->beam background\n";
339 int pdgCode = simHit !=
nullptr ? simHit->
getPDGCode() : -999;
340 auto itFound = c_colorByPDGCode.find(pdgCode);
341 if (itFound != c_colorByPDGCode.end()) {
342 return itFound->second;
344 B2WARNING(
"Unknown PDG code " << pdgCode);
345 return c_missingPDGColor;
351 std::ostringstream oss;
354 std::map<std::string, std::set<int>> pdgCodeByColor;
356 for (
auto item : c_colorByPDGCode) {
357 pdgCodeByColor[item.second].insert(item.first);
360 for (
auto item : pdgCodeByColor) {
361 oss <<
'\n' << item.first <<
"->[";
362 oss << join(
", ", item.second);
384 int nLoops = mcHitLookUp.
getNLoops(&hit);
387 return c_bkgHitColor;