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