File indexing completed on 2026-07-16 08:10:35
0001
0002
0003 #ifndef EVENT_DISPLAY_MAKER_H
0004 #define EVENT_DISPLAY_MAKER_H
0005
0006 #include <fun4all/SubsysReco.h>
0007
0008 #include <KFParticle.h>
0009
0010 #include <trackbase/ActsGeometry.h>
0011 #include <calotrigger/TriggerAnalyzer.h>
0012 #include <calotrigger/TriggerRunInfo.h>
0013 #include <ffarawobjects/Gl1Packet.h>
0014 #include <globalvertex/SvtxVertex.h>
0015 #include <globalvertex/SvtxVertexMap.h>
0016 #include <kfparticle_sphenix/KFParticle_Container.h>
0017 #include <trackbase/TrkrCluster.h> // for TrkrCluster
0018 #include <trackbase/TrkrClusterContainer.h>
0019 #include <trackbase_historic/SvtxTrack.h>
0020 #include <trackbase_historic/SvtxTrackMap.h>
0021
0022
0023 #include <calobase/RawClusterDefs.h>
0024 #include <calobase/RawCluster.h>
0025 #include <calobase/RawClusterContainer.h>
0026 #include <calobase/RawClusterUtility.h>
0027 #include <calobase/RawTowerContainer.h>
0028 #include <calobase/RawTowerGeom.h>
0029 #include <calobase/RawTowerGeomContainer.h>
0030 #include <calobase/TowerInfo.h>
0031 #include <calobase/TowerInfoContainer.h>
0032 #include <calobase/TowerInfoDefs.h>
0033
0034 #include <nlohmann/json.hpp>
0035
0036 #include <string>
0037 #include <fstream>
0038
0039 using json = nlohmann::json;
0040
0041 class KFParticle_Container;
0042 class PHCompositeNode;
0043 class SvtxTrackMap;
0044 class SvtxTrack;
0045 class SvtxVertexMap;
0046 class SvtxVertex;
0047 class TriggerAnalyzer;
0048
0049
0050 class RawCluster;
0051 class RawClusterContainer;
0052 class RawTower;
0053 class RawTowerContainer;
0054 class RawTowerGeomContainer;
0055
0056 class event_display_maker : public SubsysReco
0057 {
0058 public:
0059
0060 event_display_maker(const std::string &name = "event_display_maker");
0061
0062 ~event_display_maker() override;
0063
0064 int Init(PHCompositeNode *topNode) override;
0065
0066 int process_event(PHCompositeNode *topNode) override;
0067
0068 int End(PHCompositeNode *topNode) override;
0069
0070 void setKFParticleContainerName(const std::string &name) { m_kfparticleContainerName = name; }
0071
0072 void setNumberDaughters(const unsigned int nDaught = 2) { m_number_of_daughters = nDaught; }
0073
0074 void setEventDisplayPath(std::string path) { m_evt_display_path = path; }
0075
0076 void setMassRange(float min = 0.48, float max = 0.51) { m_min_mass = min; m_max_mass = max; }
0077
0078 void setMaxEvtDisplays(int max = 10) { m_max_displays = max; }
0079
0080 void setMotherName(std::string name = "K_S0") { m_mother_name = name; }
0081
0082 void setIntermediateNames(std::vector<std::string> name = {"Lambda0"}) { m_intermerdiate_names = name; }
0083
0084 void setDecayTag(std::string tag) { m_decay_tag = tag; }
0085
0086 void useTheseBCOs(std::vector<uint64_t> bcoList) { m_bco_list = bcoList; }
0087
0088 void plotsApproved(bool approved = true) { m_approved = approved; }
0089
0090 void addCaloInfo(bool add = true) { loadCalos = add; }
0091
0092 private:
0093 int counter = 0;
0094 int m_runNumber = 0;
0095 std::string m_evt_display_path = "./";
0096 std::string m_run_date = "2024-04-14";
0097 std::string m_mother_name = "K_S0";
0098 std::string m_decay_tag = "200 GeV p+p";
0099 std::vector<uint64_t> m_bco_list;
0100 std::vector<std::string> m_intermerdiate_names;
0101 float m_min_mass = 0.4;
0102 float m_max_mass = 0.6;
0103 int m_max_displays = 100;
0104 bool m_approved = false;
0105 bool loadCalos = false;
0106
0107 int load_nodes(PHCompositeNode *topNode);
0108 std::string getParticleName(int ID);
0109 SvtxTrack *getTrack(unsigned int track_id, SvtxTrackMap *trackmap);
0110 void getJSONdata(std::vector<SvtxTrack*> tracks, std::vector<KFParticle*> particles, json &data, std::string jsonEntryName);
0111 std::string getDate();
0112 bool isInRange(float min, float value, float max);
0113
0114 std::string m_kfparticleContainerName;
0115 std::string m_kfparticleContainerName_trackMap;
0116 std::string m_kfparticleContainerName_container;
0117
0118 ActsGeometry *geometry {nullptr};
0119 SvtxTrack *m_track {nullptr};
0120 SvtxTrackMap *m_trackMap {nullptr};
0121 SvtxTrackMap *m_kfp_trackMap {nullptr};
0122 SvtxVertexMap *m_vertexMap {nullptr};
0123 SvtxVertex *m_vertex {nullptr};
0124 KFParticle_Container *m_kfp_container {nullptr};
0125 Gl1Packet *gl1packet {nullptr};
0126 TriggerAnalyzer *triggeranalyzer {nullptr};
0127 TriggerRunInfo *triggerruninfo {nullptr};
0128 TrkrClusterContainer *dst_clustermap {nullptr};
0129
0130 KFParticle *mother {nullptr};
0131 std::vector<KFParticle*> intermediates;
0132 std::vector<KFParticle*> kfp_daughters;
0133 std::vector<SvtxTrack*> trigger_tracks;
0134 std::vector<SvtxTrack*> all_tracks;
0135
0136 unsigned int m_number_of_daughters = 2;
0137
0138 std::ofstream json_output;
0139
0140 std::string eventName = "EVENT";
0141 std::string metadataName = "META";
0142 std::string triggerTrackName = "TRIGGER";
0143 std::string allTrackName = "ALL";
0144 std::string trackName = "TRACKS";
0145 std::string hitsName = "HITS";
0146 std::string electronTriggerHitsName = "eHITS";
0147 std::string muonTriggerHitsName = "muHITS";
0148 std::string pionTriggerHitsName = "piHITS";
0149 std::string kaonTriggerHitsName = "kHITS";
0150 std::string protonTriggerHitsName = "pHITS";
0151 std::vector<std::string> hitsNameVector = {electronTriggerHitsName, muonTriggerHitsName, pionTriggerHitsName, kaonTriggerHitsName, protonTriggerHitsName, allTrackName, triggerTrackName};
0152
0153 int yellow = 16252672;
0154 int orange = 16743424;
0155 int green = 1834752;
0156 int turquoise = 4251856;
0157 int blue = 12031;
0158 int red = 16711680;
0159 int pink = 16070058;
0160 int white = 16446450;
0161
0162 long emcalColor = 16766464;
0163 long ihcalColor = 4290445312;
0164 long ohcalColor = 24773;
0165
0166 int electronColour = yellow;
0167 int muonColour = pink;
0168 int pionColour = green;
0169 int kaonColour = turquoise;
0170 int protonColour = orange;
0171 int motherColour = red;
0172 int intermediateColour = blue;
0173 int triggerColour = red;
0174 int allColour = white;
0175
0176 std::map<int, int> pidMap{
0177 { 11, electronColour},
0178 {-11, electronColour},
0179 { 13, muonColour},
0180 {-13, muonColour},
0181 { 211, pionColour},
0182 {-211, pionColour},
0183 { 321, kaonColour},
0184 {-321, kaonColour},
0185 { 2212, protonColour},
0186 {-2212, protonColour}};
0187
0188 std::map<int, std::string> pidToHitMap{
0189 { 11, electronTriggerHitsName},
0190 {-11, electronTriggerHitsName},
0191 { 13, muonTriggerHitsName},
0192 {-13, muonTriggerHitsName},
0193 { 211, pionTriggerHitsName},
0194 {-211, pionTriggerHitsName},
0195 { 321, kaonTriggerHitsName},
0196 {-321, kaonTriggerHitsName},
0197 { 2212, protonTriggerHitsName},
0198 {-2212, protonTriggerHitsName}};
0199
0200 std::map< std::string, int> pidToColourMap{
0201 {electronTriggerHitsName, electronColour},
0202 {muonTriggerHitsName, muonColour},
0203 {pionTriggerHitsName, pionColour},
0204 {kaonTriggerHitsName, kaonColour},
0205 {protonTriggerHitsName, protonColour},
0206 {allTrackName, allColour},
0207 {triggerTrackName, triggerColour}};
0208
0209
0210 void getJSONcalo(json &jsonData, std::string calo, TowerInfoContainer *towerCont, RawTowerGeomContainer *geom);
0211 json caloMetadata(std::string type);
0212 TowerInfoContainer *towersEM{nullptr};
0213 RawTowerGeomContainer *geomEMCal{nullptr};
0214 TowerInfoContainer *towersIH{nullptr};
0215 RawTowerGeomContainer *geoIHCal{nullptr};
0216 TowerInfoContainer *towersOH{nullptr};
0217 RawTowerGeomContainer *geoOHCal{nullptr};
0218 float m_e_low_cut{0.005};
0219
0220 bool hasEMCal = true;
0221 bool hasIHCal = true;
0222 bool hasOHCal = true;
0223
0224 std::string emcalName = "EMCal";
0225 std::string ihcalName = "IHCal";
0226 std::string ohcalName = "OHCal";
0227 };
0228
0229 #endif