Back to home page

sPhenix code displayed by LXR

 
 

    


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 }