8 #include "EVENT/LCIO.h"
23 using namespace lcio ;
29 static string FILEN =
"tracks.slcio" ;
43 MYTEST.
LOG(
" writing Tracks " );
46 LCWriter* lcWrt = LCFactory::getInstance()->createLCWriter() ;
48 lcWrt->open(
FILEN , LCIO::WRITE_NEW ) ;
52 for(
int i=0 ; i<
NEVENT ; i++ ){
55 LCEventImpl* evt =
new LCEventImpl() ;
58 evt->setRunNumber( 4711 ) ;
59 evt->setEventNumber( i ) ;
61 LCCollectionVec* tracks =
new LCCollectionVec( LCIO::TRACK ) ;
62 LCCollectionVec* tracksCopies =
new LCCollectionVec( LCIO::TRACK ) ;
63 LCCollectionVec* tracksWithMultipleStates =
new LCCollectionVec( LCIO::TRACK ) ;
64 LCCollectionVec* tracksWithMultipleStatesCopies =
new LCCollectionVec( LCIO::TRACK ) ;
66 for(
int j=0 ; j<
NTRACKS ; j++ ){
68 TrackImpl* trk =
new TrackImpl ;
70 trk->setTypeBit( 7 ) ;
71 trk->setOmega( (i+j) * .1 ) ;
72 trk->setTanLambda( (i+j) * .2 ) ;
73 trk->setPhi( (i+j) * .3 ) ;
74 trk->setD0( i * .1 ) ;
75 trk->setZ0( j * .1 ) ;
76 trk->setChi2( 1.01 ) ;
78 trk->setRadiusOfInnermostHit( 3.14159265 ) ;
79 trk->setdEdx( 3.14159265 ) ;
80 trk->setdEdxError( 42. ) ;
82 float cov[15] = { 1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15. } ;
83 trk->setCovMatrix( cov ) ;
85 float ref[3] = { 1. , 2. , 3. } ;
86 trk->setReferencePoint( ref ) ;
89 if( tracks->size() > 1 ){
90 trk->addTrack( dynamic_cast<TrackImpl*> ( (*tracks)[ tracks->size() - 1 ] ) ) ;
91 trk->addTrack( dynamic_cast<TrackImpl*> ( (*tracks)[ tracks->size() - 2 ] ) ) ;
94 TrackImpl* trkc =
new TrackImpl(*trk) ;
96 tracks->addElement( trk ) ;
97 tracksCopies->addElement( trkc ) ;
100 for(
int j=0 ; j<
NTRACKS ; j++ ){
101 TrackImpl* trk =
new TrackImpl ;
103 trk->setTypeBit( 7 ) ;
105 trk->setOmega( (i+j) * .1 ) ;
106 trk->setTanLambda( (i+j) * .2 ) ;
107 trk->setPhi( (i+j) * .3 ) ;
108 trk->setD0( i * .1 ) ;
109 trk->setZ0( j * .1 ) ;
110 trk->setChi2( 1.01 ) ;
112 trk->setRadiusOfInnermostHit( 3.14159265 ) ;
113 trk->setdEdx( 3.14159265 ) ;
114 trk->setdEdxError( 42. ) ;
116 float cov[15] = { 1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15. } ;
117 trk->setCovMatrix( cov ) ;
119 float ref[3] = { 1. , 2. , 3. } ;
120 trk->setReferencePoint( ref ) ;
123 for(
int ki=1 ; ki < 4 ; ki++ ){
127 float covL[15] = { k+1,k+2,k+3,k+4,k+5,k+6,k+7,k+8,k+9,k+10,k+11,k+12,k+13,k+14,k+15 } ;
128 float refL[3] = { k*1 , k*2 , k*3 } ;
130 TrackStateImpl* trkstate =
new TrackStateImpl(
140 trk->addTrackState( trkstate ) ;
143 TrackImpl* trkc =
new TrackImpl(*trk) ;
145 tracksWithMultipleStates->addElement( trk ) ;
146 tracksWithMultipleStatesCopies->addElement( trkc ) ;
149 evt->addCollection( tracks ,
"Tracks") ;
150 evt->addCollection( tracksCopies ,
"TracksCopies") ;
151 evt->addCollection( tracksWithMultipleStates ,
"TracksWithMultipleStates") ;
152 evt->addCollection( tracksWithMultipleStatesCopies ,
"TracksWithMultipleStatesCopies") ;
154 lcWrt->writeEvent(evt) ;
163 MYTEST.
LOG(
" reading back Tracks from file " ) ;
166 LCReader* lcRdr = LCFactory::getInstance()->createLCReader() ;
168 lcRdr->open(
FILEN ) ;
170 for(
int i=0 ; i<
NEVENT ; i++ ){
174 LCEvent* evt = lcRdr->readNextEvent() ;
176 MYTEST( evt->getRunNumber() , 4711 ,
" run number " ) ;
178 MYTEST( evt->getEventNumber() , i ,
" event number " ) ;
192 LCIterator<Track> it( evt,
"Tracks" ) ;
193 while( Track* trk = it.next() ) {
195 MYTEST( trk->getOmega(), float( (i+j) * .1 ),
"getOmega" ) ;
196 MYTEST( trk->getTanLambda(), float( (i+j) * .2 ),
"getTanLambda" ) ;
197 MYTEST( trk->getPhi(), float( (i+j) * .3 ),
"getPhi" ) ;
198 MYTEST( trk->getD0(), float( i * .1 ),
"getD0" ) ;
199 MYTEST( trk->getZ0(), float( j * .1 ),
"getZ0" ) ;
201 MYTEST( trk->getChi2(), float(1.01) ,
"getChi2" ) ;
202 MYTEST( trk->getNdf(), 42 ,
"getNdf" ) ;
203 MYTEST( trk->getdEdx(), float(3.14159265) ,
"getdEdx" ) ;
204 MYTEST( trk->getdEdxError(), float(42.) ,
"getdEdxError" ) ;
205 MYTEST( trk->getRadiusOfInnermostHit(), float(3.14159265) ,
"getRadiusOfInnermostHit" ) ;
207 const FloatVec& cov = trk->getCovMatrix() ;
209 for(
unsigned int k=0 ; k<cov.size() ; k++ ){
211 ss <<
" cov[" << k <<
"] " ;
212 MYTEST( cov[k] ,
float(k+1) , ss.
str() ) ;
214 const float*
ref = trk->getReferencePoint() ;
216 for(
unsigned int k=0 ; k<3 ; k++ ){
218 ss <<
" ref[" << k <<
"] " ;
219 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
226 ssG <<
" read back " << it->getNumberOfElements() <<
" tracks from collection " <<
"Tracks using the LCIterator<Track>.\n" ;
232 LCIterator<Track> itc( evt,
"TracksCopies" ) ;
233 while( Track* trk = itc.next() ) {
235 MYTEST( trk->getOmega(), float( (i+j) * .1 ),
"getOmega" ) ;
236 MYTEST( trk->getTanLambda(), float( (i+j) * .2 ),
"getTanLambda" ) ;
237 MYTEST( trk->getPhi(), float( (i+j) * .3 ),
"getPhi" ) ;
238 MYTEST( trk->getD0(), float( i * .1 ),
"getD0" ) ;
239 MYTEST( trk->getZ0(), float( j * .1 ),
"getZ0" ) ;
241 MYTEST( trk->getChi2(), float(1.01) ,
"getChi2" ) ;
242 MYTEST( trk->getNdf(), 42 ,
"getNdf" ) ;
243 MYTEST( trk->getdEdx(), float(3.14159265) ,
"getdEdx" ) ;
244 MYTEST( trk->getdEdxError(), float(42.) ,
"getdEdxError" ) ;
245 MYTEST( trk->getRadiusOfInnermostHit(), float(3.14159265) ,
"getRadiusOfInnermostHit" ) ;
247 const FloatVec& cov = trk->getCovMatrix() ;
249 for(
unsigned int k=0 ; k<cov.size() ; k++ ){
251 ss <<
" cov[" << k <<
"] " ;
252 MYTEST( cov[k] ,
float(k+1) , ss.
str() ) ;
254 const float*
ref = trk->getReferencePoint() ;
256 for(
unsigned int k=0 ; k<3 ; k++ ){
258 ss <<
" ref[" << k <<
"] " ;
259 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
266 ssG <<
" read back " << it->getNumberOfElements() <<
" tracks from collection " <<
"TracksCopies using the LCIterator<Track>.\n" ;
272 LCCollection* tracksWithMultipleStates = evt->getCollection(
"TracksWithMultipleStates") ;
273 LCCollection* tracksWithMultipleStatesCopies = evt->getCollection(
"TracksWithMultipleStatesCopies") ;
275 MYTEST.
LOG(
" reading back TracksWithMultipleStates " ) ;
281 Track* trk =
dynamic_cast<Track*
>(tracksWithMultipleStates->getElementAt(j)) ;
283 MYTEST( trk->getOmega(), float( (i+j) * .1 ),
"getOmega" ) ;
284 MYTEST( trk->getTanLambda(), float( (i+j) * .2 ),
"getTanLambda" ) ;
285 MYTEST( trk->getPhi(), float( (i+j) * .3 ),
"getPhi" ) ;
286 MYTEST( trk->getD0(), float( i * .1 ),
"getD0" ) ;
287 MYTEST( trk->getZ0(), float( j * .1 ),
"getZ0" ) ;
289 MYTEST( trk->getChi2(), float(1.01) ,
"getChi2" ) ;
290 MYTEST( trk->getNdf(), 42 ,
"getNdf" ) ;
291 MYTEST( trk->getdEdx(), float(3.14159265) ,
"getdEdx" ) ;
292 MYTEST( trk->getdEdxError(), float(42.) ,
"getdEdxError" ) ;
293 MYTEST( trk->getRadiusOfInnermostHit(), float(3.14159265) ,
"getRadiusOfInnermostHit" ) ;
295 const FloatVec& cov = trk->getCovMatrix() ;
297 for(
unsigned int k=0 ; k<cov.size() ; k++ ){
299 ss <<
" cov[" << k <<
"] " ;
300 MYTEST( cov[k] ,
float(k+1) , ss.
str() ) ;
303 const float*
ref = trk->getReferencePoint() ;
305 for(
unsigned int k=0 ; k<3 ; k++ ){
307 ss <<
" ref[" << k <<
"] " ;
308 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
314 for(
unsigned int k=1 ; k<trackstates.size() ; k++ ){
319 MYTEST( trackstates[k]->getOmega(),
float( (i+j+k) * .1 ),
"getOmega" ) ;
320 MYTEST( trackstates[k]->getTanLambda(),
float( (i+j+k) * .2 ),
"getTanLambda" ) ;
321 MYTEST( trackstates[k]->getPhi(),
float( (i+j+k) * .3 ),
"getPhi" ) ;
322 MYTEST( trackstates[k]->getD0(),
float( i*j*k * .1 ),
"getD0" ) ;
323 MYTEST( trackstates[k]->getZ0(),
float( i*j*k * .1 ),
"getZ0" ) ;
325 const FloatVec& covM = trackstates[k]->getCovMatrix() ;
327 for(
unsigned int l=0 ; l<covM.size() ; l++ ){
329 ss <<
" cov[" << l <<
"] " ;
330 MYTEST( covM[l] ,
float(k+(l+1)) , ss.
str() ) ;
333 const float* refL = trackstates[k]->getReferencePoint() ;
335 for(
unsigned int l=0 ; l<3 ; l++ ){
337 ss <<
" ref[" << l <<
"] " ;
338 MYTEST( refL[l] ,
float(k*(l+1)) , ss.
str() ) ;
345 Track* trkc =
dynamic_cast<Track*
>(tracksWithMultipleStatesCopies->getElementAt(j)) ;
346 MYTEST( trkc->getOmega(), float( (i+j) * .1 ),
"getOmega" ) ;
347 MYTEST( trkc->getTanLambda(), float( (i+j) * .2 ),
"getTanLambda" ) ;
348 MYTEST( trkc->getPhi(), float( (i+j) * .3 ),
"getPhi" ) ;
349 MYTEST( trkc->getD0(), float( i * .1 ),
"getD0" ) ;
350 MYTEST( trkc->getZ0(), float( j * .1 ),
"getZ0" ) ;
352 MYTEST( trkc->getChi2(), float(1.01) ,
"getChi2" ) ;
353 MYTEST( trkc->getNdf(), 42 ,
"getNdf" ) ;
354 MYTEST( trkc->getdEdx(), float(3.14159265) ,
"getdEdx" ) ;
355 MYTEST( trkc->getdEdxError(), float(42.) ,
"getdEdxError" ) ;
356 MYTEST( trkc->getRadiusOfInnermostHit(), float(3.14159265) ,
"getRadiusOfInnermostHit" ) ;
358 const FloatVec& covc = trkc->getCovMatrix() ;
360 for(
unsigned int k=0 ; k<covc.size() ; k++ ){
362 ss <<
" cov[" << k <<
"] " ;
363 MYTEST( covc[k] ,
float(k+1) , ss.
str() ) ;
366 ref = trkc->getReferencePoint() ;
368 for(
unsigned int k=0 ; k<3 ; k++ ){
370 ss <<
" ref[" << k <<
"] " ;
371 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
377 for(
unsigned int k=1 ; k<trackstatesc.size() ; k++ ){
379 MYTEST( trackstatesc[k]->getOmega(),
float( (i+j+k) * .1 ),
"getOmega" ) ;
380 MYTEST( trackstatesc[k]->getTanLambda(),
float( (i+j+k) * .2 ),
"getTanLambda" ) ;
381 MYTEST( trackstatesc[k]->getPhi(),
float( (i+j+k) * .3 ),
"getPhi" ) ;
382 MYTEST( trackstatesc[k]->getD0(),
float( i*j*k * .1 ),
"getD0" ) ;
383 MYTEST( trackstatesc[k]->getZ0(),
float( i*j*k * .1 ),
"getZ0" ) ;
385 const FloatVec& covM = trackstatesc[k]->getCovMatrix() ;
387 for(
unsigned int l=0 ; l<covM.size() ; l++ ){
389 ss <<
" cov[" << l <<
"] " ;
390 MYTEST( covM[l] ,
float(k+(l+1)) , ss.
str() ) ;
393 const float* refL = trackstatesc[k]->getReferencePoint() ;
395 for(
unsigned int l=0 ; l<3 ; l++ ){
397 ss <<
" ref[" << l <<
"] " ;
398 MYTEST( refL[l] ,
float(k*(l+1)) , ss.
str() ) ;
407 const TrackState* trackstate = trk->getClosestTrackState( 0, 0, 0 ) ;
408 assert( trackstate != NULL );
409 ref = trackstate->getReferencePoint() ;
413 for(
unsigned int k=0 ; k<3 ; k++ ){
415 ss <<
" closest trackstate ref[" << k <<
"] " ;
416 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
420 trackstate = trk->getTrackState( TrackState::AtIP ) ;
421 assert( trackstate != NULL );
422 ref = trackstate->getReferencePoint() ;
426 for(
unsigned int k=0 ; k<3 ; k++ ){
428 ss <<
" trackstate AtIP ref[" << k <<
"] " ;
429 MYTEST( ref[k] ,
float(k+1) , ss.
str() ) ;
438 }
catch( Exception &e ){
439 MYTEST.
FAILED( e.what() );
std::vector< float > FloatVec
Vector of floats.
static const string testname
std::vector< TrackState * > TrackStateVec
Vector of (pointers to) TrackStates.
void FAILED(const std::string &msg)
int main(int argc, char **argv)
Simple program that opens existing LCIO files and appends the records needed for direct access - if t...
void LOG(const std::string &msg)