ATLAS Offline Software
Loading...
Searching...
No Matches
TrigSerializeConverter< DATA > Class Template Reference

#include <TrigSerializeConverter.h>

Inheritance diagram for TrigSerializeConverter< DATA >:
Collaboration diagram for TrigSerializeConverter< DATA >:

Public Member Functions

StatusCode createObj (IOpaqueAddress *iAddr, DataObject *&pO)
StatusCode createRep (DataObject *pObj, IOpaqueAddress *&pAddr)
StatusCode initialize ()
virtual long int repSvcType () const
 TrigSerializeConverter (ISvcLocator *svcloc)
 ~TrigSerializeConverter ()
void addTrack (TIDA::Track *t)
const std::vector< TIDA::Track * > & tracks () const
void clear ()
void selectTracks (const TrigInDetTrackCollection *trigtracks)
void selectTracks (const Rec::TrackParticleContainer *trigtracks)
void selectTracks (const Analysis::MuonContainer *muontracks)

Static Public Member Functions

static const CLIDclassID ()
static long int storageType ()

Static Public Attributes

static const bool typeIsxAOD = isxAOD<DATA>::value

Protected Member Functions

double phiCorr (double phi)
void ipCorr (double d0, double z0, double &d0c, double &z0c, double phi0, double eta, double pt)

Protected Attributes

double m_beamX
double m_beamY
double m_beamZ
std::vector< TIDA::Track * > m_tracks

Private Attributes

ToolHandle< ITrigSerializeConvHelperm_convHelper
ServiceHandle< StoreGateSvcm_sgHandle
MsgStream * m_log
StoreGateSvcm_sgsvc

Detailed Description

template<typename DATA>
class TrigSerializeConverter< DATA >

Definition at line 139 of file TrigSerializeConverter.h.

Constructor & Destructor Documentation

◆ TrigSerializeConverter()

template<typename DATA>
TrigSerializeConverter< DATA >::TrigSerializeConverter ( ISvcLocator * svcloc)
inline

Definition at line 280 of file TrigSerializeConverter.h.

282 m_convHelper( "TrigSerializeConvHelper/TrigSerializeConvHelper" ),
283 m_sgHandle( "StoreGateSvc", "TrigSerializeConverter" ),
284 m_log( 0 ), m_sgsvc( 0 ) {
285
286 m_log = new MsgStream( msgSvc(), "TrigSerializeConverter" );
287 }
ServiceHandle< StoreGateSvc > m_sgHandle
static const CLID & classID()
ToolHandle< ITrigSerializeConvHelper > m_convHelper

◆ ~TrigSerializeConverter()

template<typename DATA>
TrigSerializeConverter< DATA >::~TrigSerializeConverter ( )
inline

Definition at line 289 of file TrigSerializeConverter.h.

289 {
290 delete m_log;
291 }

Member Function Documentation

◆ addTrack()

void Converter::addTrack ( TIDA::Track * t)
inlineinherited

Definition at line 45 of file Converter.h.

45 {
46 m_tracks.push_back(t);
47 }
std::vector< TIDA::Track * > m_tracks
Definition Converter.h:321

◆ classID()

template<typename DATA>
const CLID & TrigSerializeConverter< DATA >::classID ( )
inlinestatic

◆ clear()

void Converter::clear ( )
inlineinherited

Definition at line 53 of file Converter.h.

53{m_tracks.clear();}

◆ createObj()

template<typename DATA>
StatusCode TrigSerializeConverter< DATA >::createObj ( IOpaqueAddress * iAddr,
DataObject *& pO )
inline

Definition at line 145 of file TrigSerializeConverter.h.

145 {
146
148
149 std::string normalized = SG::normalizedTypeinfoName( typeid(DATA) ); // normalized string representation (matching the names used in the root dictionary)
150
151
152 void *ptr( 0 );
153 if( m_log->level() <= MSG::DEBUG ) {
154 *m_log << MSG::DEBUG << "In createObj for : " << clname << " normalized to " << normalized << endmsg;
155 }
156
158 if( sc.isFailure() ){
159 *m_log << MSG::WARNING << "m_convHelper->createObj failed for "
160 << clname << endmsg;
161 }
162
163 DATA *nObj = ( DATA* ) ptr;
165 if (!nObj){
166 *m_log << MSG::ERROR << "TrigSerializeConverter::createObj: nObj is null."<< endmsg;
167 return StatusCode::FAILURE;
168 }
170 if( m_log->level() <= MSG::DEBUG ) {
171 *m_log << MSG::DEBUG << "IOpaq: " << iAddr
172 << " created nObj: " << nObj << endmsg;
173 }
174
175
176
177
178 if( m_sgsvc){
179 TrigStreamAddress *addr = dynamic_cast< TrigStreamAddress* >( iAddr );
180 if( addr ) {
181 if( m_sgsvc->contains< DATA >( addr->sgkey() ) ) {
182 *m_log << MSG::WARNING << "TrigSerializeConverter::createObj object "
183 << clname << " / " << addr->sgkey()
184 << " is already in the store; not overwriting"
185 << endmsg;
186 } else {
187 sc = m_sgsvc->record( nObj, addr->sgkey() );
188 }
189 if( sc.isFailure() ) {
190 *m_log << MSG::ERROR << "SG::record failed for " << addr->sgkey()
191 << endmsg;
192 } else if( m_log->level() <= MSG::DEBUG ) {
193 *m_log << MSG::DEBUG << "SG::record key: "
194 << addr->sgkey() << " class: " << clname << endmsg;
195 }
196 } else {
197 *m_log << MSG::WARNING << "createObj cast failed" << endmsg;
198 }
199 } else if( m_log->level() <= MSG::DEBUG ) {
200 *m_log << MSG::DEBUG << "did not put an object into SG" << endmsg;
201 }
202
203 return sc;
204 }
std::string normalizedTypeinfoName(const std::type_info &info)
Convert a type_info to a normalized string representation (matching the names used in the root dictio...
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
DATA * finishRead(DATA *d)
Called after an object has been read from BS.

◆ createRep()

template<typename DATA>
StatusCode TrigSerializeConverter< DATA >::createRep ( DataObject * pObj,
IOpaqueAddress *& pAddr )
inline

Definition at line 207 of file TrigSerializeConverter.h.

207 {
208
209 // const std::string clname = ClassID_traits<DATA>::typeName(); // old style, does not contain the _vX of the actual class type
210
211 // const std::type_info& typeId = ClassID_traits<DATA>::typeId(); // damn, this line just does not compile
212
213 std::string classname = SG::normalizedTypeinfoName( typeid(DATA) ); // normalized string representation (matching the names used in the root dictionary)
214
215 DATA *d( 0 );
217 if( m_log->level() <= MSG::DEBUG ) {
218 *m_log << MSG::DEBUG << "My createRep for " << classID() << " "
219 << classname << endmsg;
220 }
221
224 //
226
228 if( m_log->level() <= MSG::DEBUG ) {
229 *m_log << MSG::DEBUG << "convHelper " << ser.size() << endmsg;
230 }
231
233 addr->add( ser );
234
235 pAddr = addr;
236
237 return sc;
238 }
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
DATA * prepareForWrite(DATA *d, std::unique_ptr< DATA > &)
Called before serializing an object to BS.

◆ initialize()

template<typename DATA>
StatusCode TrigSerializeConverter< DATA >::initialize ( )
inline

Definition at line 240 of file TrigSerializeConverter.h.

240 {
241
242 if( m_log ) {
243 m_log->setLevel( msgSvc()->outputLevel( "TrigSerializeConverter" ) );
244 } else {
245 return StatusCode::FAILURE;
246 }
247
248 StatusCode sc = m_convHelper.retrieve();
249 if( ! sc.isSuccess() ) {
250 if( m_log->level() <= MSG::DEBUG ) {
251 *m_log << MSG::DEBUG << m_convHelper << "not retrieved" << endmsg;
252 }
253 } else {
254 if( m_log->level() <= MSG::DEBUG ) {
255 *m_log << MSG::DEBUG << m_convHelper << "m_serializer retrieved"
256 << endmsg;
257 }
258 if( ! m_convHelper->initialize().isSuccess() ) {
259 if( m_log->level() <= MSG::DEBUG ) {
260 *m_log << MSG::DEBUG << m_convHelper << " not initialized"
261 << endmsg;
262 }
263 }
264 }
265
266 StatusCode scsg = m_sgHandle.retrieve();
267 if (scsg.isFailure())
268 *m_log << MSG::ERROR << "cannot access SG" << endmsg;
269 else {
270 m_sgsvc = m_sgHandle.operator->();
271 }
272 return sc;
273 }

◆ ipCorr()

void Converter::ipCorr ( double d0,
double z0,
double & d0c,
double & z0c,
double phi0,
double eta,
double pt )
inlineprotectedinherited

Definition at line 257 of file Converter.h.

257 {
258
259 double sn = sin(phi0);
260 double cs = cos(phi0);
261 double sd0 = (d0 != 0 ? d0/fabs(d0) : 1);
262 double spt = (pt != 0 ? pt/fabs(pt) : 1);
263
264 if (fabs(pt) >= 1*CLHEP::TeV) {
265
266 d0c = d0 + m_beamX*sn - m_beamY*cs;
267
268 } else {
269
270 double rc = fabs(pt)*15.0/(9.0*1.042);
271
272 double xc = (fabs(d0)-spt*sd0*rc)*cos(phi0+M_PI/2*sd0) - m_beamX;
273 double yc = (fabs(d0)-spt*sd0*rc)*sin(phi0+M_PI/2*sd0) - m_beamY;
274
275 double newphi;
276 double xd01,yd01,xd02,yd02;
277
278 if (xc == 0) {
279 xd01 = 0; yd01 = rc+yc;
280 xd02 = 0; yd02 = -rc+yc;
281 } else {
282 xd01 = xc+yc/xc*yc+sqrt(pow((xc+yc/xc*yc),2)-xc*xc-yc*yc+rc*rc); yd01 = yc/xc*xd01;
283 xd02 = xc+yc/xc*yc-sqrt(pow((xc+yc/xc*yc),2)-xc*xc-yc*yc+rc*rc); yd02 = yc/xc*xd02;
284 }
285
286 double r1 = sqrt(xd01*xd01+yd01*yd01);
287 double r2 = sqrt(xd02*xd02+yd02*yd02);
288
289 double phiV;
290
291 if (r1 < r2)
292 phiV = atan2(yd01,xd01);
293 else
294 phiV = atan2(yd02,xd02);
295
296 double phi1 = phiCorr(phiV+M_PI/2);
297 double phi2 = phiCorr(phiV-M_PI/2);
298
299 if (fabs(phiCorr(phi1-phi0))<=fabs(phiCorr(phi2-phi0)))
300 newphi = phi1;
301 else
302 newphi = phi2;
303
304 d0c = fabs(sqrt(xc*xc+yc*yc)-rc)*sin(phiV-newphi);
305
306 double theta=2*atan2(exp(-eta),1);
307 double theta_save=theta;
308 theta = theta - (1+spt)/2*M_PI;
309 if (theta>0) theta = theta_save;
310
311 double deltaz0= -spt*rc/tan(theta)*phiCorr(phiCorr(newphi)-phiCorr(phi0));
312 z0c = z0 + deltaz0;
313
314 }
315 }
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar theta() const
theta method
static Double_t rc
double m_beamX
Definition Converter.h:320
double phiCorr(double phi)
Definition Converter.h:248
double m_beamY
Definition Converter.h:320
constexpr int pow(int x)
Definition conifer.h:27

◆ phiCorr()

double Converter::phiCorr ( double phi)
inlineprotectedinherited

Definition at line 248 of file Converter.h.

248 {
249
250 if (phi < -TMath::Pi()) phi += 2*TMath::Pi();
251 if (phi > TMath::Pi()) phi -= 2*TMath::Pi();
252
253 return phi;
254 }
Scalar phi() const
phi method

◆ repSvcType()

template<typename DATA>
long int TrigSerializeConverter< DATA >::repSvcType ( ) const
virtual

Definition at line 306 of file TrigSerializeConverter.h.

306 {
307 return storageType();
308}

◆ selectTracks() [1/3]

void Converter::selectTracks ( const Analysis::MuonContainer * muontracks)
inlineinherited

Definition at line 177 of file Converter.h.

177 {
178
179 static int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
180
181 Analysis::MuonContainer::const_iterator muonitr = muontracks->begin();
182 Analysis::MuonContainer::const_iterator muonend = muontracks->end();
183
184 while(muonitr!=muonend) {
185
186 bool hasInDet = (*muonitr)->hasInDetTrackParticle();
187 const Rec::TrackParticle *trackitr=NULL;
188 if(hasInDet) trackitr=(*muonitr)->inDetTrackParticle();
189 muonitr++;
190 if(!hasInDet) continue;
191
192 const Trk::MeasuredPerigee* measPer = trackitr->measuredPerigee();
193
194 CLHEP::HepVector perigeeParams = measPer->parameters();
195 double pT = measPer->pT();
196 double eta = measPer->eta();
197 double phi = perigeeParams[Trk::phi0];
198 double z0 = perigeeParams[Trk::z0];
199 double d0 = perigeeParams[Trk::d0];
200 //double theta = perigeeParams[Trk::theta];
201
202 double deta = 1;
203 double dphi = 1;
204 double dz0 = 1;
205 double dd0 = 1;
206 double dpT = 1;
207
208 // Check number of hits
209 // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really
210 // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersetcting
211 // stereo clusters making a spacepoint are two "hits"
212 const Trk::TrackSummary *summary = trackitr->trackSummary();
213 int nBlayerHits = 2*summary->get(Trk::numberOfBLayerHits);
215 int nSctHits = summary->get(Trk::numberOfSCTHits);
216 int nStrawHits = summary->get(Trk::numberOfTRTHits);
217 int nTrHits = summary->get(Trk::numberOfTRTHighThresholdHits);
218
219 int nSiHits = nPixelHits + nSctHits;
220
221 const Trk::FitQuality *quality = trackitr->fitQuality();
222 double chi2 = quality->chiSquared();
223 double dof = quality->quality->numberDoF();
224
225 unsigned bitmap = 0;
226
227 for ( int ih=0 ; ih<20 ; ih++ ) {
228 if ( summary->isHit(Trk::DetectorType(ih)) ) bitmap |= ( 1<<hpmap[ih] );
229 }
230
231 // Shift d0 and z0 according to beam position
232 ipCorr(d0, z0, d0, z0, phi, eta, pT);
233
234 // Create and save Track
235 TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, chi2, dof,
236 deta, dphi, dz0, dd0, dpT,
237 nBlayerHits, nPixelHits, nSctHits, nSiHits,
238 nStrawHits, nTrHits, bitmap, 0,
239 -1) ;
240
241 addTrack(t);
242 }
243
244 }
void addTrack(TIDA::Track *t)
Definition Converter.h:45
void ipCorr(double d0, double z0, double &d0c, double &z0c, double phi0, double eta, double pt)
Definition Converter.h:257
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const Trk::Perigee * measuredPerigee() const
Accessor method for Perigee.
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition FitQuality.h:60
double chiSquared() const
returns the of the overall track fit
Definition FitQuality.h:56
double eta() const
Access method for pseudorapidity - from momentum.
double pT() const
Access method for transverse momentum.
const FitQuality * fitQuality() const
accessor function for FitQuality.
const TrackSummary * trackSummary() const
accessor function for TrackSummary.
double chi2(TH1 *h0, TH1 *h1)
float nSiHits(const U &p)
float nPixelHits(const U &p)
@ phi0
Definition ParamDefs.h:65
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
DetectorType
enumerates the various detector types currently accessible from the isHit() method.
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfBLayerHits
these are the hits in the 0th pixel layer?
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
Perigee MeasuredPerigee

◆ selectTracks() [2/3]

void Converter::selectTracks ( const Rec::TrackParticleContainer * trigtracks)
inlineinherited

Definition at line 111 of file Converter.h.

111 {
112
113 Rec::TrackParticleContainer::const_iterator trackitr = trigtracks->begin();
114 Rec::TrackParticleContainer::const_iterator trackend = trigtracks->end();
115
116 static int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
117
118 while ( trackitr!=trackend ) {
119
120 const Trk::MeasuredPerigee* measPer = (*trackitr)->measuredPerigee();
121
122 CLHEP::HepVector perigeeParams = measPer->parameters();
123 double pT = measPer->pT();
124 double eta = measPer->eta();
125 double phi = perigeeParams[Trk::phi0];
126 double z0 = perigeeParams[Trk::z0];
127 double d0 = perigeeParams[Trk::d0];
128 //double theta = perigeeParams[Trk::theta];
129
130 double deta = 1;
131 double dphi = 1;
132 double dz0 = 1;
133 double dd0 = 1;
134 double dpT = 1;
135
136 // Check number of hits
137 // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really
138 // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersetcting
139 // stereo clusters making a spacepoint are two "hits"
140 const Trk::TrackSummary *summary = (*trackitr)->trackSummary();
141 int nBlayerHits = 2*summary->get(Trk::numberOfBLayerHits);
143 int nSctHits = summary->get(Trk::numberOfSCTHits);
144 int nStrawHits = summary->get(Trk::numberOfTRTHits);
145 int nTrHits = summary->get(Trk::numberOfTRTHighThresholdHits);
146 int nSiHits = nPixelHits + nSctHits;
147 bool expectBL = false; // Not stored for Rec::TrackParticle
148
149 const Trk::FitQuality *quality = (*trackitr)->fitQuality();
150 double chi2 = quality->chiSquared();
151 double dof = quality->numberDoF();
152
153 unsigned bitmap = 0;
154
155 for ( int ih=0 ; ih<20 ; ih++ ) {
156 if ( summary->isHit(Trk::DetectorType(ih)) ) bitmap |= ( 1<<hpmap[ih] );
157 }
158
159 // Shift d0 and z0 according to beam position
160 ipCorr(d0, z0, d0, z0, phi, eta, pT);
161
162 // Create and save Track
163 TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, chi2, dof,
164 deta, dphi, dz0, dd0, dpT,
165 nBlayerHits, nPixelHits, nSctHits, nSiHits,
166 nStrawHits, nTrHits, bitmap, 0,
167 -1,
168 expectBL) ;
169
170 addTrack(t);
171 trackitr++;
172 }
173
174 }

◆ selectTracks() [3/3]

void Converter::selectTracks ( const TrigInDetTrackCollection * trigtracks)
inlineinherited

Definition at line 56 of file Converter.h.

56 {
57
58 TrigInDetTrackCollection::const_iterator trackitr = trigtracks->begin();
59 TrigInDetTrackCollection::const_iterator trackend = trigtracks->end();
60
61 while ( trackitr!=trackend ) {
62
63 double eta = (*trackitr)->param()->eta();
64 double phi = (*trackitr)->param()->phi0();
65 double z0 = (*trackitr)->param()->z0();
66 double pT = (*trackitr)->param()->pT();
67 double d0 = (*trackitr)->param()->a0();
68 //double theta = 2*atan2(exp(-(*trackitr)->param()->eta()),1);
69
70 double deta = (*trackitr)->param()->eeta();
71 double dphi = (*trackitr)->param()->ephi0();
72 double dz0 = (*trackitr)->param()->ez0();
73 double dpT = (*trackitr)->param()->epT();
74 double dd0 = (*trackitr)->param()->ea0();
75
76 int algoid = (*trackitr)->algorithmId();
77
78 int nBlayerHits = ((*trackitr)->HitPattern() & 0x1);
79 int nPixelHits = 2*(*trackitr)->NPixelSpacePoints(); // NB: for comparison with offline
80 int nSctHits = 2*(*trackitr)->NSCT_SpacePoints(); // a spacepoint is 2 "hits"
81 int nStrawHits = (*trackitr)->NStrawHits();
82 int nTrHits = (*trackitr)->NTRHits();
83
84 int nSiHits = nPixelHits + nSctHits;
85 bool expectBL = false; //not available with TrigInDetTrack
86
87 unsigned hitPattern = (*trackitr)->HitPattern();
88 unsigned multiPattern = 0;
89
90 double chi2 = (*trackitr)->chi2();
91 double dof = 0;
92
93 // Shift d0 and z0 according to beam position
94 ipCorr(d0, z0, d0, z0, phi, eta, pT);
95
96 // Create and save Track
97 TIDA::Track* t = new TIDA::Track(eta, phi, z0, d0, pT, chi2, dof,
98 deta, dphi, dz0, dd0, dpT,
99 nBlayerHits, nPixelHits, nSctHits, nSiHits,
100 nStrawHits, nTrHits, hitPattern, multiPattern,
101 algoid,
102 expectBL ) ;
103
104 addTrack(t);
105 trackitr++;
106 }
107 }

◆ storageType()

template<typename DATA>
long int TrigSerializeConverter< DATA >::storageType ( )
static

Definition at line 302 of file TrigSerializeConverter.h.

302 {
304}
static long int storageType()

◆ tracks()

const std::vector< TIDA::Track * > & Converter::tracks ( ) const
inlineinherited

Definition at line 50 of file Converter.h.

50{return m_tracks;}

Member Data Documentation

◆ m_beamX

double Converter::m_beamX
protectedinherited

Definition at line 320 of file Converter.h.

◆ m_beamY

double Converter::m_beamY
protectedinherited

Definition at line 320 of file Converter.h.

◆ m_beamZ

double Converter::m_beamZ
protectedinherited

Definition at line 320 of file Converter.h.

◆ m_convHelper

template<typename DATA>
ToolHandle< ITrigSerializeConvHelper > TrigSerializeConverter< DATA >::m_convHelper
private

Definition at line 294 of file TrigSerializeConverter.h.

◆ m_log

template<typename DATA>
MsgStream* TrigSerializeConverter< DATA >::m_log
private

Definition at line 296 of file TrigSerializeConverter.h.

◆ m_sgHandle

template<typename DATA>
ServiceHandle< StoreGateSvc > TrigSerializeConverter< DATA >::m_sgHandle
private

Definition at line 295 of file TrigSerializeConverter.h.

◆ m_sgsvc

template<typename DATA>
StoreGateSvc* TrigSerializeConverter< DATA >::m_sgsvc
private

Definition at line 297 of file TrigSerializeConverter.h.

◆ m_tracks

std::vector<TIDA::Track*> Converter::m_tracks
protectedinherited

Definition at line 321 of file Converter.h.

◆ typeIsxAOD

template<typename DATA>
const bool TrigSerializeConverter< DATA >::typeIsxAOD = isxAOD<DATA>::value
static

Definition at line 142 of file TrigSerializeConverter.h.


The documentation for this class was generated from the following file: