BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RecEmcHitCnv.cxx
Go to the documentation of this file.
1#ifndef RecEmcHitCnv_CXX
2#define RecEmcHitCnv_CXX 1
3
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
7
8#include "TClonesArray.h"
9
10#include "EventModel/EventModel.h"
11
12#include "EmcRecEventModel/RecEmcHit.h"
13#include "ReconEvent/ReconEvent.h"
14
15#include "RootEventData/TRecEmcHit.h" // standard root object
16#include "RootEventData/TRecTrackEvent.h"
17
18#include "RootCnvSvc/Rec/RecEmcHitCnv.h"
19#include "RootCnvSvc/Rec/RecTrackCnv.h"
20#include "RootCnvSvc/RootAddress.h"
21
22#include <vector>
23
24using namespace std;
25
26// Instantiation of a static factory class used by clients to create
27// instances of this service
28// static CnvFactory<RecEmcHitCnv> s_factory;
29// const ICnvFactory& RecEmcHitCnvFactory = s_factory;
30
31RecEmcHitCnv::RecEmcHitCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
32 // cout<<"in RecEmcHitCnv::constructor: hitid= "<<aHit->clID()<<endl;
33
34 // Here we associate this converter with the /Event path on the TDS.
35 MsgStream log( msgSvc(), "RecEmcHitCnv" );
36 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
37 m_rootTreename = "Rec";
38 m_rootBranchname = "m_recEmcHitCol";
39 // declareObject(EventModel::Recon::RecEmcHitCol, objType(), m_rootTreename,
40 // m_rootBranchname);
41 m_adresses.push_back( &m_recEmcHitCol );
42 m_recEmcHitCol = 0;
43}
44
45StatusCode RecEmcHitCnv::TObjectToDataObject( DataObject*& refpObject ) {
46
47 // creation of TDS object from root object
48 MsgStream log( msgSvc(), "RecEmcHitCnv" );
49 log << MSG::DEBUG << "RecEmcHitCnv::TObjectToDataObject" << endmsg;
50 // cout<<"RecEmcHitCnv::TObjectToDataObject"<<endl;
51 StatusCode sc = StatusCode::SUCCESS;
52
53 // create the TDS location for the RecEmcHit Collection
54 RecEmcHitCol* emcHitTdsCol = new RecEmcHitCol;
55 refpObject = emcHitTdsCol;
56
57 // now convert
58 if ( !m_recEmcHitCol ) return sc;
59 TIter emcHitIter( m_recEmcHitCol );
60 TRecEmcHit* emcHitRoot = 0;
61 while ( ( emcHitRoot = (TRecEmcHit*)emcHitIter.Next() ) )
62 {
63 RecEmcID cellId( emcHitRoot->cellId() );
64 double energy = emcHitRoot->energy();
65 double time = emcHitRoot->time();
66
67 // cout<<"cellId="<<cellId<<"\tenergy="<<energy<<"\ttime="<<time<<endl;
68
69 RecEmcHit* emcHitTds = new RecEmcHit();
70 m_common.m_rootRecEmcHitMap[emcHitRoot] = emcHitTds;
71
72 emcHitTds->Assign( cellId, energy, time );
73
74 emcHitTdsCol->push_back( emcHitTds );
75 }
76
77 delete m_recEmcHitCol;
78 m_recEmcHitCol = 0;
79
80 return StatusCode::SUCCESS;
81}
82
83StatusCode RecEmcHitCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
84
85 MsgStream log( msgSvc(), "RecEmcHitCnv" );
86 log << MSG::DEBUG << "RecEmcHitCnv::DataObjectToTObject" << endmsg;
87 // cout<<"RecEmcHitCnv::DataObjectToTObject"<<endl;
88 StatusCode sc = StatusCode::SUCCESS;
89
90 RecEmcHitCol* emcHitColTds = dynamic_cast<RecEmcHitCol*>( obj );
91 if ( !emcHitColTds )
92 {
93 log << MSG::ERROR << "Could not downcast to RecEmcHitCol" << endmsg;
94 return StatusCode::FAILURE;
95 }
96
97 DataObject* evt;
98 m_eds->findObject( EventModel::Recon::Event, evt );
99 if ( evt == NULL )
100 {
101 log << MSG::ERROR << "Could not get RecEvent in TDS " << endmsg;
102 return StatusCode::FAILURE;
103 }
104 ReconEvent* devtTds = dynamic_cast<ReconEvent*>( evt );
105 if ( !devtTds )
106 { log << MSG::ERROR << "RecEmcHitCnv:Could not downcast to TDS DstEvent" << endmsg; }
107 IOpaqueAddress* addr;
108
109 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
110 TRecTrackEvent* recEvt = m_cnvSvc->getRecTrackCnv()->getWriteObject();
111
112 const TObjArray* m_emcHitCol = recEvt->getEmcHitCol();
113 if ( !m_emcHitCol ) return sc;
114
115 // necessary in case there is I/O at the same time since array is static
116 recEvt->clearEmcHitCol();
117
118 RecEmcHitCol::const_iterator emcHitTds;
119
120 for ( emcHitTds = emcHitColTds->begin(); emcHitTds != emcHitColTds->end(); emcHitTds++ )
121 {
122 Int_t cellId = ( *emcHitTds )->getCellId();
123 Double_t energy = ( *emcHitTds )->getEnergy();
124 Double_t time = ( *emcHitTds )->getTime();
125
126 TRecEmcHit* emcHitRoot = new TRecEmcHit();
127 // m_common.m_recEmcHitMap[(*emcHitTds)] = emcHitRoot;
128 emcHitRoot->setCellId( cellId );
129 emcHitRoot->setEnergy( energy );
130 emcHitRoot->setTime( time );
131
132 recEvt->addEmcHit( emcHitRoot );
133 }
134
135 return StatusCode::SUCCESS;
136}
137#endif
Double_t time
ObjectVector< RecEmcHit > RecEmcHitCol
************Class m_ypar INTEGER m_KeyWgt INTEGER m_KeyIHVP INTEGER m_KeyGPS INTEGER m_IsBeamPolarized INTEGER m_EvtGenInterface DOUBLE PRECISION m_Emin DOUBLE PRECISION m_sphot DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_q2 DOUBLE PRECISION m_PolBeam2 DOUBLE PRECISION m_xErrPb *COMMON c_KK2f $ !CMS energy average $ !Spin Polarization vector first beam $ !Spin Polarization vector second beam $ !Beam energy spread[GeV] $ !minimum hadronization energy[GeV] $ !input READ never touch them !$ !debug facility $ !maximum weight $ !inverse alfaQED $ !minimum real photon energy
Definition KK2f.h:50
IMessageSvc * msgSvc()
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
RecEmcHitCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
void Assign(const RecEmcID &CellId, const RecEmcEnergy &Energy, const RecEmcTime &Time)
Definition RecEmcHit.cxx:86
Definition of a Root address, derived from IOpaqueAddress.
std::string m_rootTreename
each converter knows it's treename
IDataProviderSvc * m_eds
pointer to eventdataservice
std::vector< void * > m_adresses
each converter knows the corresponding adresses
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)
void addEmcHit(TRecEmcHit *Track)
Add a TkrTrack into the Emc data collection *‍/.
void clearEmcHitCol()
clear the whole array (necessary because of the consts-s) *‍/
const TObjArray * getEmcHitCol() const
retrieve the whole TObjArray of EmcHit Data