Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-07-16 08:13:22

0001 #include "MbdTrackVertex.h"
0002 
0003 #include <fun4all/Fun4AllReturnCodes.h>
0004 
0005 #include <phool/PHCompositeNode.h>
0006 #include <phool/getClass.h>
0007 #include <phool/phool.h>
0008 
0009 #include <ffarawobjects/Gl1Packet.h>
0010 
0011 #include <ffaobjects/EventHeader.h>
0012 
0013 #include <globalvertex/GlobalVertex.h>
0014 #include <globalvertex/GlobalVertexMap.h>
0015 #include <globalvertex/MbdVertex.h>
0016 #include <globalvertex/MbdVertexMap.h>
0017 #include <globalvertex/SvtxVertex.h>
0018 #include <globalvertex/SvtxVertexMap.h>
0019 
0020 constexpr GlobalVertex::VTXTYPE trkType = GlobalVertex::SVTX;
0021 constexpr GlobalVertex::VTXTYPE mbdType = GlobalVertex::MBD;
0022 //____________________________________________________________________________..
0023 MbdTrackVertex::MbdTrackVertex(const std::string &name):
0024  SubsysReco(name)
0025 {
0026   std::cout << "MbdTrackVertex::MbdTrackVertex(const std::string &name) Calling ctor" << std::endl;
0027 }
0028 
0029 //____________________________________________________________________________..
0030 MbdTrackVertex::~MbdTrackVertex()
0031 {
0032   std::cout << "MbdTrackVertex::~MbdTrackVertex() Calling dtor" << std::endl;
0033 }
0034 
0035 //____________________________________________________________________________..
0036 int MbdTrackVertex::Init(PHCompositeNode * /*topNode*/)
0037 {
0038   outFile = new TFile(outFileName.c_str(), "RECREATE");
0039   if (_treeflag)
0040   {
0041     outTree = new TTree("mz", "MBD-TRK ZVTX");
0042     outTree->OptimizeBaskets();
0043     outTree->SetAutoSave(-5e6);
0044 
0045     outTree->Branch("evt", &_evt, "evt/I");
0046     outTree->Branch("mbdz", &_mbdVertex, "mbdz/F");
0047     outTree->Branch("trkz", &_trackerVertex, "trkz/F");
0048     outTree->Branch("ntrks", &_nTracks, "ntrks/i");
0049     outTree->Branch("nbz", &_nMBDVertex, "nbz/i");
0050     outTree->Branch("ntz", &_nTRKVertex, "ntz/i");
0051   }
0052 
0053   // h_mbdtrkz: dz = _mbdVertex - trackerVertex, range (-15,15) cm, 0.25 cm bins → 120 bins
0054   h_mbdtrkz = new TH1F("h_mbdtrkz", "MBD - Tracker z-vertex;dz (cm);Counts", 120, -15., 15.);
0055   h_bz   = new TH1F("h_bz",   "MBD z-vertex;z (cm);Counts", 400, -20., 20.);
0056   h_trkz = new TH1F("h_trkz", "Tracker z-vertex;z (cm);Counts", 400, -20., 20.);
0057 
0058   // h2_mbdtrkz: THnSparseF, x = _trackerVertex, y = _mbdVertex, (-20,20) cm, 0.1 cm bins → 400 bins each
0059   const int    nbins2[2] = {400, 400};
0060   const double xmin2[2]  = {-20., -20.};
0061   const double xmax2[2]  = { 20.,  20.};
0062   h2_mbdtrkz = new THnSparseF("h2_mbdtrkz", "MBD vs Tracker z-vertex", 2, nbins2, xmin2, xmax2);
0063   h2_mbdtrkz->GetAxis(0)->SetTitle("Tracker z (cm)");
0064   h2_mbdtrkz->GetAxis(1)->SetTitle("MBD z (cm)");
0065 
0066   return Fun4AllReturnCodes::EVENT_OK;
0067 }
0068 
0069 //____________________________________________________________________________..
0070 int MbdTrackVertex::process_event(PHCompositeNode *topNode)
0071 {
0072   EventHeader *eventheader = findNode::getClass<EventHeader>(topNode, "EventHeader");
0073   _evt = eventheader ? eventheader->get_EvtSequence() : -1;
0074 
0075   if (_gl1_trigmask != 0)
0076   {
0077     Gl1Packet *gl1 = findNode::getClass<Gl1Packet>(topNode, "GL1Packet");
0078     if (gl1)
0079     {
0080       if ((gl1->getScaledVector() & _gl1_trigmask) == 0)
0081       {
0082         return Fun4AllReturnCodes::DISCARDEVENT;
0083       }
0084     }
0085     else
0086     {
0087       std::cout << PHWHERE << " GL1Packet node not found; discarding event because trigger masking was requested" << std::endl;
0088       return Fun4AllReturnCodes::DISCARDEVENT;
0089     }
0090   }
0091 
0092   MbdVertexMap *m_dst_mbdvertexmap = findNode::getClass<MbdVertexMap>(topNode, "MbdVertexMap");
0093   SvtxVertexMap *m_dst_vertexmap = findNode::getClass<SvtxVertexMap>(topNode, "SvtxVertexMap");
0094 
0095   GlobalVertexMap *globalvertexmap = findNode::getClass<GlobalVertexMap>(topNode, "GlobalVertexMap");
0096   if (!m_dst_mbdvertexmap || !m_dst_vertexmap || !globalvertexmap)
0097   {
0098     std::cout << PHWHERE << " missing required vertex node(s)" << std::endl;
0099     return Fun4AllReturnCodes::DISCARDEVENT;
0100   }
0101 
0102   _mbdVertex = _trackerVertex = std::numeric_limits<float>::quiet_NaN();
0103   _nTracks = _nMBDVertex = _nTRKVertex = std::numeric_limits<unsigned int>::quiet_NaN();
0104 
0105   _hasMBD = false;
0106   _hasTRK = false;
0107 
0108   for (GlobalVertexMap::ConstIter iter = globalvertexmap->begin(); iter != globalvertexmap->end(); ++iter)
0109   {
0110     GlobalVertex *gvertex = iter->second;
0111 
0112     if (gvertex->count_vtxs(mbdType) != 0)
0113     {
0114       _hasMBD = true;
0115 
0116       auto mbditer = gvertex->find_vertexes(mbdType);
0117       auto mbdvertexvector = mbditer->second;
0118 
0119       _nMBDVertex = mbdvertexvector.size();
0120       for (auto &vertex : mbdvertexvector)
0121       {
0122         MbdVertex *m_dst_vertex = m_dst_mbdvertexmap->find(vertex->get_id())->second;
0123         _mbdVertex = m_dst_vertex->get_z();
0124       }
0125     }
0126 
0127     if (gvertex->count_vtxs(trkType) != 0)
0128     { 
0129       _hasTRK = true; 
0130 
0131       auto trkiter = gvertex->find_vertexes(trkType);
0132       auto trkvertexvector = trkiter->second;
0133 
0134       _nTRKVertex = trkvertexvector.size();
0135       for (auto &vertex : trkvertexvector)
0136       {
0137         SvtxVertex *m_dst_vertex = m_dst_vertexmap->find(vertex->get_id())->second;
0138         if ( m_dst_vertex->get_beam_crossing() != 0 ) 
0139         {
0140           continue;
0141         }
0142         if ( m_dst_vertex->size_tracks() > _nTracks)
0143         {
0144           _trackerVertex = m_dst_vertex->get_z();
0145           _nTracks = m_dst_vertex->size_tracks();
0146         }
0147         if (_nTracks == 0)
0148         {
0149           _hasTRK = false; 
0150         }
0151       }
0152     }
0153   }
0154 
0155   if (_hasMBD)
0156   {
0157     h_bz->Fill(_mbdVertex);
0158   }
0159   if (_hasTRK)
0160   {
0161     h_trkz->Fill(_trackerVertex);
0162   }
0163 
0164   if (_hasMBD && _hasTRK)
0165   {
0166     h_mbdtrkz->Fill(_mbdVertex - _trackerVertex);
0167     const double coords[2] = {_trackerVertex, _mbdVertex};
0168     h2_mbdtrkz->Fill(coords);
0169   }
0170 
0171   if (_treeflag)
0172   {
0173     outTree->Fill();
0174   }
0175 
0176   ++_counter;
0177 
0178   return Fun4AllReturnCodes::EVENT_OK;
0179 }
0180 
0181 //____________________________________________________________________________..
0182 int MbdTrackVertex::End(PHCompositeNode * /*topNode*/)
0183 {
0184   outFile->Write();
0185   outFile->Close();
0186   delete outFile;
0187 
0188   return Fun4AllReturnCodes::EVENT_OK;
0189 }
0190