Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-07-16 08:10:35

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
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 //calo stuff
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 //calo stuff
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; //Need something jsut now to ensure there are 2 candidates per BC
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   //calo stuff
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 // EVENT_DISPLAY_MAKER_H