BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
TofTrackCnv.cxx
Go to the documentation of this file.
1#ifndef TofTrackCnv_CXX
2#define TofTrackCnv_CXX 1
3
4#include "GaudiKernel/MsgStream.h"
5#include "GaudiKernel/DataObject.h"
6#include "GaudiKernel/ObjectVector.h"
7
8#include "TClonesArray.h"
9
10#include "EventModel/EventModel.h"
11
12#include "DstEvent/DstEvent.h" //TDS object
13#include "DstEvent/DstTofTrack.h" //TDS object
14#include "RootEventData/TTofTrack.h" // standard root object
15#include "RootEventData/TDstEvent.h"
16
17#include "RootCnvSvc/Dst/DstCnv.h"
18#include "RootCnvSvc/Dst/TofTrackCnv.h"
19#include "RootCnvSvc/RootAddress.h"
20
21#include <vector>
22
23using namespace std;
24
25// Instantiation of a static factory class used by clients to create
26// instances of this service
27//static CnvFactory<TofTrackCnv> s_factory;
28//const ICnvFactory& TofTrackCnvFactory = s_factory;
29
30TofTrackCnv::TofTrackCnv(ISvcLocator* svc)
31: RootEventBaseCnv(classID(), svc)
32{
33 // Here we associate this converter with the /Event path on the TDS.
34 MsgStream log(msgSvc(), "TofTrackCnv");
35 //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
36 m_rootBranchname ="m_tofTrackCol";
37 //declareObject(EventModel::Dst::DstTofTrackCol, objType(), m_rootTreename, m_rootBranchname);
38 m_adresses.push_back(&m_tofTrackCol);
39 m_tofTrackCol=0;
40}
41
42StatusCode TofTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
43 // creation of TDS object from root object
44
45 MsgStream log(msgSvc(), "TofTrackCnv");
46 log << MSG::DEBUG << "TofTrackCnv::TObjectToDataObject" << endreq;
47 StatusCode sc=StatusCode::SUCCESS;
48 // create the TDS location for the TofTrack Collection
49 DstTofTrackCol* tofTrackTdsCol = new DstTofTrackCol;
50 refpObject=tofTrackTdsCol;
51
52
53 // now convert
54 if (!m_tofTrackCol) return sc;
55 TIter tofTrackIter(m_tofTrackCol);
56 TTofTrack *tofTrackRoot = 0;
57 while ((tofTrackRoot = (TTofTrack*)tofTrackIter.Next())) {
58
59 int tofTrackID = tofTrackRoot->tofTrackID();
60 int trackID = tofTrackRoot->trackID();
61 int tofID = tofTrackRoot->tofID();
62 unsigned int status = tofTrackRoot->status();
63 double path = tofTrackRoot->path();
64 double zrhit = tofTrackRoot->zrhit();
65 double ph = tofTrackRoot->ph();
66 double tof = tofTrackRoot->tof();
67 double errtof = tofTrackRoot->errtof();
68 double beta = tofTrackRoot->beta();
69 double texpElectron = tofTrackRoot->texpElectron();
70 double texpMuon = tofTrackRoot->texpMuon();
71 double texpPion = tofTrackRoot->texpPion();
72 double texpKaon = tofTrackRoot->texpKaon();
73 double texpProton = tofTrackRoot->texpProton();
74 double toffsetElectron = tofTrackRoot->toffsetElectron();
75 double toffsetMuon = tofTrackRoot->toffsetMuon();
76 double toffsetPion = tofTrackRoot->toffsetPion();
77 double toffsetKaon = tofTrackRoot->toffsetKaon();
78 double toffsetProton = tofTrackRoot->toffsetProton();
79 double toffsetAntiProton = tofTrackRoot->toffsetAntiProton();
80 double sigmaElectron = tofTrackRoot->sigmaElectron();
81 double sigmaMuon = tofTrackRoot->sigmaMuon();
82 double sigmaPion = tofTrackRoot->sigmaPion();
83 double sigmaKaon = tofTrackRoot->sigmaKaon();
84 double sigmaProton = tofTrackRoot->sigmaProton();
85 double sigmaAntiProton = tofTrackRoot->sigmaAntiProton();
86 int quality = tofTrackRoot->quality();
87 double t0 = tofTrackRoot->t0();
88 double errt0 = tofTrackRoot->errt0();
89 double errz = tofTrackRoot->errz();
90 double phi = tofTrackRoot->phi();
91 double errphi = tofTrackRoot->errphi();
92 double energy = tofTrackRoot->energy();
93 double errenergy = tofTrackRoot->errenergy();
94
95 DstTofTrack *tofTrackTds = new DstTofTrack();
96 m_common.m_rootTofTrackMap[tofTrackRoot] = tofTrackTds;
97
98 tofTrackTds->setTofTrackID(tofTrackID);
99 tofTrackTds->setTrackID(trackID);
100 tofTrackTds->setTofID(tofID);
101 tofTrackTds->setStatus(status);
102 tofTrackTds->setPath(path);
103 tofTrackTds->setZrHit(zrhit);
104 tofTrackTds->setPh(ph);
105 tofTrackTds->setTof(tof);
106 tofTrackTds->setErrTof(errtof);
107 tofTrackTds->setBeta(beta);
108 tofTrackTds->setTexpElectron(texpElectron);
109 tofTrackTds->setTexpMuon(texpMuon);
110 tofTrackTds->setTexpPion(texpPion);
111 tofTrackTds->setTexpKaon(texpKaon);
112 tofTrackTds->setTexpProton(texpProton);
113 tofTrackTds->setToffsetElectron(toffsetElectron);
114 tofTrackTds->setToffsetMuon(toffsetMuon);
115 tofTrackTds->setToffsetPion(toffsetPion);
116 tofTrackTds->setToffsetKaon(toffsetKaon);
117 tofTrackTds->setToffsetProton(toffsetProton);
118 tofTrackTds->setToffsetAntiProton(toffsetAntiProton);
119 tofTrackTds->setSigmaElectron(sigmaElectron);
120 tofTrackTds->setSigmaMuon(sigmaMuon);
121 tofTrackTds->setSigmaPion(sigmaPion);
122 tofTrackTds->setSigmaKaon(sigmaKaon);
123 tofTrackTds->setSigmaProton(sigmaProton);
124 tofTrackTds->setSigmaAntiProton(sigmaAntiProton);
125 tofTrackTds->setQuality(quality);
126 tofTrackTds->setT0(t0);
127 tofTrackTds->setErrT0(errt0);
128 tofTrackTds->setErrZ(errz);
129 tofTrackTds->setPhi(phi);
130 tofTrackTds->setErrPhi(errphi);
131 tofTrackTds->setEnergy(energy);
132 tofTrackTds->setErrEnergy(errenergy);
133
134 tofTrackTdsCol->push_back(tofTrackTds);
135
136 // delete tofTrackTds; // wensp add 2005/12/31
137 // tofTrackTds = NULL;
138 }
139
140 //m_tofTrackCol->Delete(); // wensp add 2005/12/30
141 delete m_tofTrackCol;
142 m_tofTrackCol = 0;
143 return StatusCode::SUCCESS;
144}
145
146StatusCode TofTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
147
148 MsgStream log(msgSvc(), "TofTrackCnv");
149 log << MSG::DEBUG << "TofTrackCnv::DataObjectToTObject" << endreq;
150 StatusCode sc=StatusCode::SUCCESS;
151
152 DstTofTrackCol * tofTrackColTds=dynamic_cast<DstTofTrackCol *> (obj);
153 if (!tofTrackColTds) {
154 log << MSG::ERROR << "Could not downcast to DstTofTrackCol" << endreq;
155 return StatusCode::FAILURE;
156 }
157
158 DataObject *evt;
159 m_eds->findObject(EventModel::Dst::Event,evt);
160 if (evt==NULL) {
161 log << MSG::ERROR << "Could not get DstEvent in TDS " << endreq;
162 return StatusCode::FAILURE;
163 }
164
165 DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
166 if (!devtTds) {
167 log << MSG::ERROR << "TofTrackCnv:Could not downcast to TDS ReconEvent" << endreq;
168 }
169 IOpaqueAddress *addr;
170
171 m_cnvSvc->getDstCnv()->createRep(evt,addr);
173
174 const TObjArray *m_tofTrackCol = recEvt->getTofTrackCol();
175 if (!m_tofTrackCol) return sc;
176 recEvt->clearTofTrackCol(); //necessary in case there is I/O at the same time since array is static
177 DstTofTrackCol::const_iterator tofTrackTds;
178
179 for (tofTrackTds = tofTrackColTds->begin(); tofTrackTds != tofTrackColTds->end(); tofTrackTds++) {
180
181 Int_t tofTrackID = (*tofTrackTds)->tofTrackID();
182 Int_t trackID = (*tofTrackTds)->trackID();
183 Int_t tofID = (*tofTrackTds)->tofID();
184 UInt_t status = (*tofTrackTds)->status();
185 Double_t path = (*tofTrackTds)->path();
186 Double_t zrhit = (*tofTrackTds)->zrhit();
187 Double_t ph = (*tofTrackTds)->ph();
188 Double_t tof = (*tofTrackTds)->tof();
189 Double_t errtof = (*tofTrackTds)->errtof();
190 Double_t beta = (*tofTrackTds)->beta();
191 Double_t texpElectron = (*tofTrackTds)->texpElectron();
192 Double_t texpMuon = (*tofTrackTds)->texpMuon();
193 Double_t texpPion = (*tofTrackTds)->texpPion();
194 Double_t texpKaon = (*tofTrackTds)->texpKaon();
195 Double_t texpProton = (*tofTrackTds)->texpProton();
196 Double_t toffsetElectron = (*tofTrackTds)->toffsetElectron();
197 Double_t toffsetMuon = (*tofTrackTds)->toffsetMuon();
198 Double_t toffsetPion = (*tofTrackTds)->toffsetPion();
199 Double_t toffsetKaon = (*tofTrackTds)->toffsetKaon();
200 Double_t toffsetProton = (*tofTrackTds)->toffsetProton();
201 Double_t toffsetAntiProton = (*tofTrackTds)->toffsetAntiProton();
202 Double_t sigmaElectron = (*tofTrackTds)->sigmaElectron();
203 Double_t sigmaMuon = (*tofTrackTds)->sigmaMuon();
204 Double_t sigmaPion = (*tofTrackTds)->sigmaPion();
205 Double_t sigmaKaon = (*tofTrackTds)->sigmaKaon();
206 Double_t sigmaProton = (*tofTrackTds)->sigmaProton();
207 Double_t sigmaAntiProton = (*tofTrackTds)->sigmaAntiProton();
208 Int_t quality = (*tofTrackTds)->quality();
209 Double_t t0 = (*tofTrackTds)->t0();
210 Double_t errt0 = (*tofTrackTds)->errt0();
211 Double_t errz = (*tofTrackTds)->errz();
212 Double_t phi = (*tofTrackTds)->phi();
213 Double_t errphi = (*tofTrackTds)->errphi();
214 Double_t energy = (*tofTrackTds)->energy();
215 Double_t errenergy = (*tofTrackTds)->errenergy();
216
217 TTofTrack *tofTrackRoot = new TTofTrack();
218
219 //m_common.m_tofTrackMap[(*tofTrackTds)] = tofTrackRoot;
220
221 tofTrackRoot->setTofTrackID(tofTrackID);
222 tofTrackRoot->setTrackID(trackID);
223 tofTrackRoot->setTofID(tofID);
224 tofTrackRoot->setStatus(status);
225 tofTrackRoot->setPath(path);
226 tofTrackRoot->setZrHit(zrhit);
227 tofTrackRoot->setPh(ph);
228 tofTrackRoot->setTof(tof);
229 tofTrackRoot->setErrTof(errtof);
230 tofTrackRoot->setBeta(beta);
231 tofTrackRoot->setTexpElectron(texpElectron);
232 tofTrackRoot->setTexpMuon(texpMuon);
233 tofTrackRoot->setTexpPion(texpPion);
234 tofTrackRoot->setTexpKaon(texpKaon);
235 tofTrackRoot->setTexpProton(texpProton);
236 tofTrackRoot->setToffsetElectron(toffsetElectron);
237 tofTrackRoot->setToffsetMuon(toffsetMuon);
238 tofTrackRoot->setToffsetPion(toffsetPion);
239 tofTrackRoot->setToffsetKaon(toffsetKaon);
240 tofTrackRoot->setToffsetProton(toffsetProton);
241 tofTrackRoot->setToffsetAntiProton(toffsetAntiProton);
242 tofTrackRoot->setSigmaElectron(sigmaElectron);
243 tofTrackRoot->setSigmaMuon(sigmaMuon);
244 tofTrackRoot->setSigmaPion(sigmaPion);
245 tofTrackRoot->setSigmaKaon(sigmaKaon);
246 tofTrackRoot->setSigmaProton(sigmaProton);
247 tofTrackRoot->setSigmaAntiProton(sigmaAntiProton);
248 tofTrackRoot->setQuality(quality);
249 tofTrackRoot->setT0(t0);
250 tofTrackRoot->setErrT0(errt0);
251 tofTrackRoot->setErrZ(errz);
252 tofTrackRoot->setPhi(phi);
253 tofTrackRoot->setErrPhi(errphi);
254 tofTrackRoot->setEnergy(energy);
255 tofTrackRoot->setErrEnergy(errenergy);
256
257 recEvt->addTofTrack(tofTrackRoot);
258 }
259
260 return StatusCode::SUCCESS;
261}
262#endif
ObjectVector< DstTofTrack > DstTofTrackCol
************Class m_ypar INTEGER m_KeyWgt INTEGER m_nphot 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
static TDstEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition of a Root address, derived from IOpaqueAddress.
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)
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)
Convert the transient object to the requested representation.
const TObjArray * getTofTrackCol() const
retrieve the whole TObjArray of TofTrack Data
void addTofTrack(TTofTrack *Track)
Add a TofTrack into the TOF Data collection.
Definition: TDstEvent.cxx:141
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
Definition: TofTrackCnv.cxx:42
TofTrackCnv(ISvcLocator *svc)
Definition: TofTrackCnv.cxx:30
static std::map< const TObject *, const DstTofTrack * > m_rootTofTrackMap