File indexing completed on 2025-08-06 08:17:30
0001 #include "CopyIODataNodes.h"
0002
0003 #include <globalvertex/GlobalVertexMapv1.h>
0004 #include <globalvertex/GlobalVertexMap.h>
0005
0006 #include <calotrigger/MinimumBiasInfo.h>
0007
0008 #include <centrality/CentralityInfo.h>
0009
0010 #include <mbd/MbdOut.h>
0011
0012 #include <ffaobjects/EventHeader.h>
0013 #include <ffaobjects/RunHeader.h>
0014 #include <ffaobjects/SyncObject.h>
0015
0016 #include <fun4all/Fun4AllReturnCodes.h>
0017 #include <fun4all/Fun4AllServer.h>
0018
0019 #include <phool/PHCompositeNode.h>
0020 #include <phool/getClass.h>
0021
0022
0023 CopyIODataNodes::CopyIODataNodes(const std::string &name)
0024 : SubsysReco(name)
0025 {
0026 }
0027
0028
0029 int CopyIODataNodes::InitRun(PHCompositeNode *topNode)
0030 {
0031 Fun4AllServer *se = Fun4AllServer::instance();
0032 if (m_CopyRunHeaderFlag)
0033 {
0034 CopyRunHeader(topNode, se->topNode());
0035 }
0036 if (m_CopyEventHeaderFlag)
0037 {
0038 CreateEventHeader(topNode, se->topNode());
0039 }
0040 if (m_CopyCentralityInfoFlag)
0041 {
0042 CreateCentralityInfo(topNode, se->topNode());
0043 }
0044 if (m_CopyGlobalVertexMapFlag)
0045 {
0046 CreateGlobalVertexMap(topNode, se->topNode());
0047 }
0048 if (m_CopyMinimumBiasInfoFlag)
0049 {
0050 CreateMinimumBiasInfo(topNode, se->topNode());
0051 }
0052 if (m_CopyMbdOutFlag)
0053 {
0054 CreateMbdOut(topNode, se->topNode());
0055 }
0056 if (m_CopySyncObjectFlag)
0057 {
0058 CreateSyncObject(topNode, se->topNode());
0059 }
0060
0061 return Fun4AllReturnCodes::EVENT_OK;
0062 }
0063
0064
0065 int CopyIODataNodes::process_event(PHCompositeNode *topNode)
0066 {
0067 Fun4AllServer *se = Fun4AllServer::instance();
0068 if (m_CopyEventHeaderFlag)
0069 {
0070 CopyEventHeader(topNode, se->topNode());
0071 }
0072 if (m_CopyCentralityInfoFlag)
0073 {
0074 CopyCentralityInfo(topNode, se->topNode());
0075 }
0076 if (m_CopyGlobalVertexMapFlag)
0077 {
0078 CopyGlobalVertexMap(topNode, se->topNode());
0079 }
0080 if (m_CopyMinimumBiasInfoFlag)
0081 {
0082 CopyMinimumBiasInfo(topNode, se->topNode());
0083 }
0084 if (m_CopyMbdOutFlag)
0085 {
0086 CopyMbdOut(topNode, se->topNode());
0087 }
0088 if (m_CopySyncObjectFlag)
0089 {
0090 CopySyncObject(topNode, se->topNode());
0091 }
0092 return Fun4AllReturnCodes::EVENT_OK;
0093 }
0094
0095 void CopyIODataNodes::CopyRunHeader(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0096 {
0097 RunHeader *from_runheader = findNode::getClass<RunHeader>(from_topNode, "RunHeader");
0098 if (!from_runheader)
0099 {
0100 std::cout << "Could not locate RunHeader on " << from_topNode->getName() << std::endl;
0101 m_CopyRunHeaderFlag = false;
0102 return;
0103 }
0104 RunHeader *to_runheader = findNode::getClass<RunHeader>(to_topNode, "RunHeader");
0105 if (!to_runheader)
0106 {
0107 PHNodeIterator iter(to_topNode);
0108 PHCompositeNode *runNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "RUN"));
0109 if (!runNode)
0110 {
0111 runNode = new PHCompositeNode("RUN");
0112 to_topNode->addNode(runNode);
0113 }
0114 to_runheader = dynamic_cast<RunHeader *>(from_runheader->CloneMe());
0115 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_runheader, "RunHeader", "PHObject");
0116 runNode->addNode(newNode);
0117 if (Verbosity() > 0)
0118 {
0119 std::cout << "From RunHeader identify()" << std::endl;
0120 from_runheader->identify();
0121 std::cout << "To RunHeader identify()" << std::endl;
0122 to_runheader->identify();
0123 }
0124 }
0125 return;
0126 }
0127
0128 void CopyIODataNodes::CreateCentralityInfo(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0129 {
0130 CentralityInfo *from_centralityinfo = findNode::getClass<CentralityInfo>(from_topNode, "CentralityInfo");
0131 if (!from_centralityinfo)
0132 {
0133 std::cout << "Could not locate CentralityInfo on " << from_topNode->getName() << std::endl;
0134 m_CopyCentralityInfoFlag = false;
0135 return;
0136 }
0137 CentralityInfo *to_centralityinfo = findNode::getClass<CentralityInfo>(to_topNode, "CentralityInfo");
0138 if (!to_centralityinfo)
0139 {
0140 PHNodeIterator iter(to_topNode);
0141 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0142 if (!dstNode)
0143 {
0144 dstNode = new PHCompositeNode("DST");
0145 to_topNode->addNode(dstNode);
0146 }
0147 to_centralityinfo = dynamic_cast<CentralityInfo *>(from_centralityinfo->CloneMe());
0148 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_centralityinfo, "CentralityInfo", "PHObject");
0149 dstNode->addNode(newNode);
0150 }
0151 return;
0152 }
0153
0154 void CopyIODataNodes::CopyCentralityInfo(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0155 {
0156 CentralityInfo *from_centralityinfo = findNode::getClass<CentralityInfo>(from_topNode, "CentralityInfo");
0157 CentralityInfo *to_centralityinfo = findNode::getClass<CentralityInfo>(to_topNode, "CentralityInfo");
0158 from_centralityinfo->CopyTo(to_centralityinfo);
0159 if (Verbosity() > 0)
0160 {
0161 std::cout << "From CentralityInfo identify()" << std::endl;
0162 from_centralityinfo->identify();
0163 std::cout << "To CentralityInfo identify()" << std::endl;
0164 to_centralityinfo->identify();
0165 }
0166
0167 return;
0168 }
0169
0170 void CopyIODataNodes::CreateEventHeader(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0171 {
0172 EventHeader *from_eventheader = findNode::getClass<EventHeader>(from_topNode, "EventHeader");
0173 if (!from_eventheader)
0174 {
0175 std::cout << "Could not locate EventHeader on " << from_topNode->getName() << std::endl;
0176 m_CopyEventHeaderFlag = false;
0177 return;
0178 }
0179 EventHeader *to_eventheader = findNode::getClass<EventHeader>(to_topNode, "EventHeader");
0180 if (!to_eventheader)
0181 {
0182 PHNodeIterator iter(to_topNode);
0183 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0184 if (!dstNode)
0185 {
0186 dstNode = new PHCompositeNode("DST");
0187 to_topNode->addNode(dstNode);
0188 }
0189 to_eventheader = dynamic_cast<EventHeader *>(from_eventheader->CloneMe());
0190 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_eventheader, "EventHeader", "PHObject");
0191 dstNode->addNode(newNode);
0192 }
0193 return;
0194 }
0195
0196 void CopyIODataNodes::CopyEventHeader(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0197 {
0198 EventHeader *from_eventheader = findNode::getClass<EventHeader>(from_topNode, "EventHeader");
0199 EventHeader *to_eventheader = findNode::getClass<EventHeader>(to_topNode, "EventHeader");
0200 from_eventheader->CopyTo(to_eventheader);
0201 if (Verbosity() > 0)
0202 {
0203 std::cout << "From EventHeader identify()" << std::endl;
0204 from_eventheader->identify();
0205 std::cout << "To EventHeader identify()" << std::endl;
0206 to_eventheader->identify();
0207 }
0208
0209 return;
0210 }
0211
0212 void CopyIODataNodes::CreateGlobalVertexMap(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0213 {
0214 GlobalVertexMap *from_globalvertexmap = findNode::getClass<GlobalVertexMap>(from_topNode, "GlobalVertexMap");
0215 if (!from_globalvertexmap)
0216 {
0217 std::cout << "Could not locate GlobalVertexMap on " << from_topNode->getName() << std::endl;
0218 m_CopyGlobalVertexMapFlag = false;
0219 return;
0220 }
0221 GlobalVertexMap *to_globalvertexmap = findNode::getClass<GlobalVertexMap>(to_topNode, "GlobalVertexMap");
0222 if (!to_globalvertexmap)
0223 {
0224 PHNodeIterator iter(to_topNode);
0225 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0226 if (!dstNode)
0227 {
0228 dstNode = new PHCompositeNode("DST");
0229 to_topNode->addNode(dstNode);
0230 }
0231 to_globalvertexmap = new GlobalVertexMapv1();
0232 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_globalvertexmap, "GlobalVertexMap", "PHObject");
0233 dstNode->addNode(newNode);
0234 }
0235 return;
0236 }
0237
0238 void CopyIODataNodes::CopyGlobalVertexMap(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0239 {
0240 GlobalVertexMap *from_globalvertexmap = findNode::getClass<GlobalVertexMap>(from_topNode, "GlobalVertexMap");
0241 GlobalVertexMap *to_globalvertexmap = findNode::getClass<GlobalVertexMap>(to_topNode, "GlobalVertexMap");
0242 from_globalvertexmap->CopyTo(to_globalvertexmap);
0243 if (Verbosity() > 0)
0244 {
0245 std::cout << "From GlobalVertexMap identify()" << std::endl;
0246 from_globalvertexmap->identify();
0247 std::cout << "To GlobalVertexMap identify()" << std::endl;
0248 to_globalvertexmap->identify();
0249 }
0250
0251 return;
0252 }
0253
0254 void CopyIODataNodes::CreateMinimumBiasInfo(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0255 {
0256 MinimumBiasInfo *from_minimumbiasinfo = findNode::getClass<MinimumBiasInfo>(from_topNode, "MinimumBiasInfo");
0257 if (!from_minimumbiasinfo)
0258 {
0259 std::cout << "Could not locate MinimumBiasInfo on " << from_topNode->getName() << std::endl;
0260 m_CopyMinimumBiasInfoFlag = false;
0261 return;
0262 }
0263 MinimumBiasInfo *to_minimumbiasinfo = findNode::getClass<MinimumBiasInfo>(to_topNode, "MinimumBiasInfo");
0264 if (!to_minimumbiasinfo)
0265 {
0266 PHNodeIterator iter(to_topNode);
0267 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0268 if (!dstNode)
0269 {
0270 dstNode = new PHCompositeNode("DST");
0271 to_topNode->addNode(dstNode);
0272 }
0273 to_minimumbiasinfo = dynamic_cast<MinimumBiasInfo *>(from_minimumbiasinfo->CloneMe());
0274 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_minimumbiasinfo, "MinimumBiasInfo", "PHObject");
0275 dstNode->addNode(newNode);
0276 }
0277 return;
0278 }
0279
0280 void CopyIODataNodes::CopyMinimumBiasInfo(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0281 {
0282 MinimumBiasInfo *from_minimumbiasinfo = findNode::getClass<MinimumBiasInfo>(from_topNode, "MinimumBiasInfo");
0283 MinimumBiasInfo *to_minimumbiasinfo = findNode::getClass<MinimumBiasInfo>(to_topNode, "MinimumBiasInfo");
0284 from_minimumbiasinfo->CopyTo(to_minimumbiasinfo);
0285 if (Verbosity() > 0)
0286 {
0287 std::cout << "From MinimumBiasInfo identify()" << std::endl;
0288 from_minimumbiasinfo->identify();
0289 std::cout << "To MinimumBiasInfo identify()" << std::endl;
0290 to_minimumbiasinfo->identify();
0291 }
0292
0293 return;
0294 }
0295
0296 void CopyIODataNodes::CreateMbdOut(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0297 {
0298
0299 MbdOut *from_mbdout = findNode::getClass<MbdOut>(from_topNode, "MbdOut");
0300 if (!from_mbdout)
0301 {
0302 std::cout << "Could not locate MbdOut no " << from_topNode->getName() << std::endl;
0303 m_CopyMbdOutFlag = false;
0304 return;
0305 }
0306 MbdOut *to_mbdout = findNode::getClass<MbdOut>(to_topNode, "MbdOut");
0307 if (!to_mbdout)
0308 {
0309 PHNodeIterator iter(to_topNode);
0310 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0311 if (!dstNode)
0312 {
0313 dstNode = new PHCompositeNode("DST");
0314 to_topNode->addNode(dstNode);
0315 }
0316
0317 PHNodeIterator dstiter(dstNode);
0318 PHCompositeNode *mbdNode = dynamic_cast<PHCompositeNode *>(dstiter.findFirst("PHCompositeNode", "MBD"));
0319 if (!mbdNode)
0320 {
0321 mbdNode = new PHCompositeNode("MBD");
0322 dstNode->addNode(mbdNode);
0323 }
0324
0325 to_mbdout = dynamic_cast<MbdOut *>(from_mbdout->CloneMe());
0326 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_mbdout, "MbdOut", "PHObject");
0327 mbdNode->addNode(newNode);
0328 }
0329 return;
0330
0331 }
0332
0333 void CopyIODataNodes::CopyMbdOut(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0334 {
0335 MbdOut *from_mbdout = findNode::getClass<MbdOut>(from_topNode, "MbdOut");
0336 MbdOut *to_mbdout = findNode::getClass<MbdOut>(to_topNode, "MbdOut");
0337 from_mbdout->CopyTo(to_mbdout);
0338 if (Verbosity() > 0)
0339 {
0340 std::cout << "From MbdOut identify()" << std::endl;
0341 from_mbdout->identify();
0342 std::cout << "To MbdOut identify()" << std::endl;
0343 to_mbdout->identify();
0344 }
0345
0346 return;
0347 }
0348
0349 void CopyIODataNodes::CreateSyncObject(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0350 {
0351 SyncObject *from_syncobject = findNode::getClass<SyncObject>(from_topNode, "Sync");
0352 if (!from_syncobject)
0353 {
0354 std::cout << "Could not locate SyncObject on " << from_topNode->getName() << std::endl;
0355 m_CopySyncObjectFlag = false;
0356 return;
0357 }
0358 SyncObject *to_syncobject = findNode::getClass<SyncObject>(to_topNode, "Sync");
0359 if (!to_syncobject)
0360 {
0361 PHNodeIterator iter(to_topNode);
0362 PHCompositeNode *dstNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "DST"));
0363 if (!dstNode)
0364 {
0365 dstNode = new PHCompositeNode("DST");
0366 to_topNode->addNode(dstNode);
0367 }
0368 to_syncobject = dynamic_cast<SyncObject *>(from_syncobject->CloneMe());
0369 PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(to_syncobject, "SyncObject", "PHObject");
0370 dstNode->addNode(newNode);
0371 }
0372 return;
0373 }
0374
0375 void CopyIODataNodes::CopySyncObject(PHCompositeNode *from_topNode, PHCompositeNode *to_topNode)
0376 {
0377 SyncObject *from_syncobject = findNode::getClass<SyncObject>(from_topNode, "Sync");
0378 SyncObject *to_syncobject = findNode::getClass<SyncObject>(to_topNode, "Sync");
0379 to_syncobject = from_syncobject;
0380 if (Verbosity() > 0)
0381 {
0382 std::cout << "From Syncobject identify()" << std::endl;
0383 from_syncobject->identify();
0384 std::cout << "To Syncobject identify()" << std::endl;
0385 to_syncobject->identify();
0386 }
0387 return;
0388 }