File indexing completed on 2025-08-06 08:17:31
0001 #include "HepMCCollisionVertex.h"
0002
0003 #include <phhepmc/PHHepMCDefs.h>
0004 #include <phhepmc/PHHepMCGenEvent.h>
0005 #include <phhepmc/PHHepMCGenEventMap.h>
0006
0007 #include <globalvertex/GlobalVertex.h>
0008 #include <globalvertex/GlobalVertexMap.h>
0009
0010 #include <fun4all/Fun4AllReturnCodes.h>
0011 #include <fun4all/Fun4AllServer.h>
0012
0013 #include <phool/PHCompositeNode.h>
0014 #include <phool/getClass.h>
0015
0016 #include <HepMC/SimpleVector.h>
0017
0018
0019 HepMCCollisionVertex::HepMCCollisionVertex(const std::string &name)
0020 : SubsysReco(name)
0021 {
0022 }
0023
0024
0025 int HepMCCollisionVertex::InitRun(PHCompositeNode *topNode)
0026 {
0027 PHNodeIterator iter(topNode);
0028 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0029 PHHepMCGenEventMap *geneventmap = findNode::getClass<PHHepMCGenEventMap>(topNode, "PHHepMCGenEventMap");
0030 if (!geneventmap)
0031 {
0032 geneventmap = new PHHepMCGenEventMap();
0033 PHIODataNode<PHObject> *newmapnode = new PHIODataNode<PHObject>(geneventmap, "PHHepMCGenEventMap", "PHObject");
0034 dstNode->addNode(newmapnode);
0035 }
0036
0037 return Fun4AllReturnCodes::EVENT_OK;
0038 }
0039
0040
0041 int HepMCCollisionVertex::process_event(PHCompositeNode *topNode)
0042 {
0043 PHHepMCGenEventMap *genevtmap = findNode::getClass<PHHepMCGenEventMap>(topNode, "PHHepMCGenEventMap");
0044 if (!genevtmap)
0045 {
0046 std::cout << PHWHERE << "no PHHepMCGenEventMap node" << std::endl;
0047 return Fun4AllReturnCodes::ABORTRUN;
0048 }
0049
0050
0051 Fun4AllServer *se = Fun4AllServer::instance();
0052 PHCompositeNode *dataTopNode = se->topNode("TOPData");
0053 if (!dataTopNode)
0054 {
0055 std::cout << PHWHERE << "no TOPData node" << std::endl;
0056 return Fun4AllReturnCodes::ABORTRUN;
0057 }
0058
0059 GlobalVertexMap *vertexmap = findNode::getClass<GlobalVertexMap>(dataTopNode, "GlobalVertexMap");
0060 if (!vertexmap)
0061 {
0062 std::cout << PHWHERE << " Fatal Error - GlobalVertexMap node is missing" << std::endl;
0063 return Fun4AllReturnCodes::ABORTRUN;
0064 }
0065 if (vertexmap->empty())
0066 {
0067 if (Verbosity() > 1)
0068 {
0069 std::cout << PHWHERE << "no event vertex, aborting event" << std::endl;
0070 }
0071 return Fun4AllReturnCodes::ABORTEVENT;
0072 }
0073 GlobalVertex *vtx = vertexmap->begin()->second;
0074 if (vtx)
0075 {
0076 PHHepMCGenEvent *genevt = new PHHepMCGenEvent();
0077 HepMC::FourVector collvtx(vtx->get_x(), vtx->get_y(), vtx->get_z(), 0);
0078 genevt->set_collision_vertex(collvtx);
0079 if (Verbosity() > 1)
0080 {
0081 std::cout << PHWHERE << "collisionvertex: x: " << collvtx.x()
0082 << ", y: " << collvtx.y()
0083 << ", z: " << collvtx.z()
0084 << std::endl;
0085 }
0086 genevtmap->insert_event(PHHepMCDefs::DataVertexIndex, genevt);
0087 }
0088 else
0089 {
0090 std::cout << PHWHERE << "no vertex in map" << std::endl;
0091 return Fun4AllReturnCodes::ABORTEVENT;
0092 }
0093 return Fun4AllReturnCodes::EVENT_OK;
0094 }