CGEM BOSS 6.6.5.f
BESIII Offline Software System
Loading...
Searching...
No Matches
bak_RootCnvSvc-04-01-14/src/Hlt/DstHltInfCnv.cxx
Go to the documentation of this file.
1#ifndef DstHltInfCnv_CXX
2#define DstHltInfCnv_CXX 1
3
4#include "GaudiKernel/MsgStream.h"
5#include "GaudiKernel/DataObject.h"
6
7#include "TClonesArray.h"
8
9#include "EventModel/EventModel.h"
10#include "Identifier/HltID.h"
11#include "HltEvent/HltEvent.h" //TDS object
12#include "HltEvent/DstHltInf.h" //TDS object
13#include "RootEventData/THltEvent.h" // standard root object
14#include "RootEventData/TDstHltInf.h" // standard root object
15#include "RootCnvSvc/Hlt/HltCnv.h"
16#include "RootCnvSvc/Hlt/DstHltInfCnv.h"
17#include "RootCnvSvc/RootAddress.h"
18
19
20// Instantiation of a static factory class used by clients to create
21// instances of this service
22
24 : RootEventBaseCnv(classID(), svc),
25 m_old(false)
26{
27 // Here we associate this converter with the /Event path on the TDS.
28 MsgStream log(msgSvc(), "DstHltInfCnv");
29 //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
30 m_rootBranchname ="m_dstHltInf";
31 //declareObject(EventModel::MC::DstHltInf, objType(), m_rootTreename, m_rootBranchname);
32 m_adresses.push_back(&m_dstHltInf);
33 m_dstHltInf=0;
34}
35
36StatusCode DstHltInfCnv::TObjectToDataObject(DataObject*& refpObject) {
37 // creation of TDS object from root object
38
39 MsgStream log(msgSvc(), "DstHltInfCnv");
40 log << MSG::DEBUG << "DstHltInfCnv::TObjectToDataObject" << endreq;
41 StatusCode sc=StatusCode::SUCCESS;
42
43 // create the TDS location for the trigger data
44 DstHltInf* dstHltInfTds = new DstHltInf;
45 refpObject=dstHltInfTds;
46
47 // now convert
48 if(!m_dstHltInf) return sc;
49
50 int evt = m_dstHltInf->getEventType();
51 int alg = m_dstHltInf->getAlgProcess();
52 int cri = m_dstHltInf->getCriteriaTable();
53 int ver = m_dstHltInf->getVersion();
54 float etot = m_dstHltInf->getTotalEnergy();
55
56 dstHltInfTds->setEventType(evt);
57 dstHltInfTds->setAlgProcess(alg);
58 dstHltInfTds->setCriteriaTable(cri);
59 dstHltInfTds->setVersion(ver);
60 dstHltInfTds->setTotalEnergy(etot);
61
62 try{
63 uint32_t nsub= m_dstHltInf->getNumber();
64 uint32_t ncon= m_dstHltInf->getNCON();
65 uint32_t nmdc= nsub &0XFF;
66 uint32_t ntof=(nsub>>8 )&0XFF;
67 uint32_t nemc=(nsub>>16)&0XFF;
68 uint32_t nmuc=(nsub>>24)&0XFF;
69 uint32_t ncgem= nsub>>32;
70 if(nmuc>HltID::getID_MUC_MAX()+1 || nemc>HltID::getID_EMC_MAX()+1
71 ||ntof>HltID::getID_TOF_MAX()+1 || nmdc>HltID::getID_MDC_MAX()+1
72 || ncgem>HltID::getID_CGEM_MAX()+1){
73 throw exception();
74 }
75 dstHltInfTds->setNumber(nsub);
76 dstHltInfTds->setNCON(ncon);
77 }
78 catch(...){
79 //log << MSG::ERROR << "***********************************************************" << endreq;
80 //log << MSG::ERROR << "Input ROOT object is older version, please reconstrut again" << endreq;
81 //log << MSG::ERROR << " or check out old RootCnvSvc! (mailto: [email protected])" << endreq;
82 //log << MSG::WARNING << "***** Continuing run may cause a little memory leakage ****" << endreq;
83 //m_old=true;
84 }
85
86 delete m_dstHltInf;
87 m_dstHltInf = 0;
88
89 return StatusCode::SUCCESS;
90}
91
92StatusCode DstHltInfCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
93
94 MsgStream log(msgSvc(), "DstHltInfCnv");
95 log << MSG::DEBUG << "DstHltInfCnv::DataObjectToTObject" << endreq;
96 StatusCode sc=StatusCode::SUCCESS;
97
98 DstHltInf * dstHltInfCnvTds=dynamic_cast<DstHltInf*> (obj);
99 if (!dstHltInfCnvTds) {
100 log << MSG::ERROR << "Could not downcast to DstHltInf" << endreq;
101 return StatusCode::FAILURE;
102 }
103
104 DataObject *evt;
105 m_eds->findObject(EventModel::Hlt::Event,evt);
106 if (evt==NULL) {
107 log << MSG::ERROR << "Could not get DstHltInf in TDS " << endreq;
108 return StatusCode::FAILURE;
109 }
110
111 HltEvent* devtTds=dynamic_cast<HltEvent *> (evt);
112 if (!devtTds) {
113 log << MSG::ERROR << "DstHltInfCnv:Could not downcast to TDS DstHltInf" << endreq;
114 }
115
116 IOpaqueAddress *addr;
117 m_cnvSvc->getHltCnv()->createRep(evt,addr);
118
120
121 const TObject *tHltInf = hltInf->getDstHltInf();
122 if (!tHltInf) return sc;
123 hltInf->clearDstHltInf();
124
125 Int_t typ = dstHltInfCnvTds->getEventType();
126 Int_t alg = dstHltInfCnvTds->getAlgProcess();
127 Int_t cri = dstHltInfCnvTds->getCriteriaTable();
128 Int_t ver = dstHltInfCnvTds->getVersion();
129 Double_t etot = dstHltInfCnvTds->getTotalEnergy();
130 Int_t nsub = dstHltInfCnvTds->getNumber();
131 Int_t ncon = dstHltInfCnvTds->getNCON();
132
133 TDstHltInf *dstHltInfRoot = new TDstHltInf();
134
135 dstHltInfRoot->setEventType(typ);
136 dstHltInfRoot->setAlgProcess(alg);
137 dstHltInfRoot->setCriteriaTable(cri);
138 dstHltInfRoot->setVersion(ver);
139 dstHltInfRoot->setTotalEnergy(etot);
140 dstHltInfRoot->setNumber(nsub);
141 dstHltInfRoot->setNCON(ncon);
142
143 hltInf->addDstHltInf(dstHltInfRoot);
144
145 return StatusCode::SUCCESS;
146}
147#endif
Double_t etot
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
static THltEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition of a Root address, derived from IOpaqueAddress.
std::vector< void * > m_adresses
each converter knows the corresponding adresses
std::string m_rootBranchname
root branchname (may be concatenated of severals)
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)
Convert the transient object to the requested representation.
void addDstHltInf(TDstHltInf *dstHltInf)
const TDstHltInf * getDstHltInf() const