00001 #include "CPPFORT/lctrk.h"
00002
00003 #include "lcio.h"
00004 #include "IMPL/TrackImpl.h"
00005 #include "LCIOSTLTypes.h"
00006
00007 using namespace lcio ;
00008
00009 #include <iostream>
00010
00011 #define NCOVARIANCE 15
00012
00013
00014
00015 PTRTYPE lctrkcreate(){
00016 TrackImpl* trk = new TrackImpl ;
00017 return C2F_POINTER( LCObject*, trk ) ;
00018 }
00019 int lctrkdelete( PTRTYPE track ){
00020 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00021 delete trk ;
00022 return LCIO::SUCCESS ;
00023 }
00024
00025
00026
00027
00028 int lctrkid( PTRTYPE track ) {
00029 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00030 return trk->id() ;
00031 }
00032
00033 int lctrkgettype( PTRTYPE track ) {
00034 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00035 return trk->getType() ;
00036 }
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 float lctrkgetomega( PTRTYPE track ) {
00049 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00050 return trk->getOmega() ;
00051 }
00052
00053
00054
00055
00056
00057
00058 float lctrkgettanlambda( PTRTYPE track ) {
00059 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00060 return trk->getTanLambda() ;
00061 }
00062
00063 float lctrkgetphi( PTRTYPE track ) {
00064 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00065 return trk->getPhi() ;
00066 }
00067
00068 float lctrkgetd0( PTRTYPE track ) {
00069 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00070 return trk->getD0() ;
00071 }
00072
00073 float lctrkgetz0( PTRTYPE track ) {
00074 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00075 return trk->getZ0() ;
00076 }
00077
00078 int lctrkgetcovmatrix( PTRTYPE track, float cvmtx[NCOVARIANCE] ) {
00079 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00080 for( int i=0 ; i<NCOVARIANCE ; *cvmtx++ = trk->getCovMatrix()[i++] ) ;
00081 return LCIO::SUCCESS ;
00082 }
00083
00084 int lctrkgetreferencepoint( PTRTYPE track, float* refpoint ) {
00085 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00086 for( int i=0 ; i<3 ; *refpoint++ = trk->getReferencePoint()[i++] ) ;
00087 return LCIO::SUCCESS ;
00088 }
00089
00090 int lctrkisreferencepointpca( PTRTYPE track ) {
00091 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00092 return trk->isReferencePointPCA() ;
00093 }
00094
00095 float lctrkgetchi2( PTRTYPE track ) {
00096 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00097 return trk->getChi2() ;
00098 }
00099
00100 int lctrkgetndf( PTRTYPE track ) {
00101 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00102 return trk->getNdf() ;
00103 }
00104
00105 float lctrkgetdedx( PTRTYPE track ) {
00106 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00107 return trk->getdEdx() ;
00108 }
00109
00110 float lctrkgetdedxerror( PTRTYPE track ) {
00111 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00112 return trk->getdEdxError() ;
00113 }
00114
00115 float lctrkgetradiusofinnermosthit( PTRTYPE track ) {
00116 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00117 return trk->getRadiusOfInnermostHit() ;
00118 }
00119
00120 int lctrkgetsubdetectorhitnumbers( PTRTYPE track, int* intv, int* nintv ) {
00121 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00122 IntVec& intVec = trk->subdetectorHitNumbers() ;
00123 int n = intVec.size() ;
00124 if (n > *nintv) {
00125 std::cerr << "Warning in lctrkgetsubdetectorhitnumbers: vector size " << n
00126 << " larger then target array size " << *nintv << std::endl ;
00127 n = *nintv ;
00128 }
00129 for(int j=0;j<n;j++) {
00130 intv[j] = intVec[j] ;
00131 }
00132 *nintv = n ;
00133 return LCIO::SUCCESS ;
00134 }
00135
00136 PTRTYPE lctrkgettracks( PTRTYPE track ) {
00137 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00138 const TrackVec& idvect = trk->getTracks();
00139 return reinterpret_cast<PTRTYPE>( &idvect );
00140 }
00141
00142 PTRTYPE lctrkgettrackerhits( PTRTYPE track ) {
00143 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00144 const TrackerHitVec& idvect = trk->getTrackerHits();
00145 return reinterpret_cast<PTRTYPE>( &idvect );
00146 }
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 int lctrksettypebit( PTRTYPE track, int index , int val) {
00158 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00159 trk->setTypeBit( index , val ) ;
00160 return LCIO::SUCCESS ;
00161 }
00162
00163 int lctrksetomega( PTRTYPE track, float omega ) {
00164 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00165 trk->setOmega( omega ) ;
00166 return LCIO::SUCCESS ;
00167 }
00168
00169 int lctrksettanlambda( PTRTYPE track, float tanLambda ) {
00170 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00171 trk->setTanLambda( tanLambda ) ;
00172 return LCIO::SUCCESS ;
00173 }
00174
00175 int lctrksetphi( PTRTYPE track, float phi ) {
00176 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00177 trk->setPhi( phi ) ;
00178 return LCIO::SUCCESS ;
00179 }
00180
00181 int lctrksetd0( PTRTYPE track, float d0 ) {
00182 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00183 trk->setD0( d0 ) ;
00184 return LCIO::SUCCESS ;
00185 }
00186
00187 int lctrksetz0( PTRTYPE track, float z0 ) {
00188 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00189 trk->setZ0( z0 ) ;
00190 return LCIO::SUCCESS ;
00191 }
00192
00193 int lctrksetcovmatrix( PTRTYPE track, float cvmtx[NCOVARIANCE] ) {
00194 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00195 trk->setCovMatrix( cvmtx ) ;
00196 return LCIO::SUCCESS ;
00197 }
00198
00199 int lctrksetreferencepoint( PTRTYPE track, float refpoint[3] ) {
00200 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00201 trk->setReferencePoint( refpoint ) ;
00202 return LCIO::SUCCESS ;
00203 }
00204
00205 int lctrksetisreferencepointpca( PTRTYPE track , int val) {
00206 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00207 trk->setIsReferencePointPCA( val ) ;
00208 return LCIO::SUCCESS ;
00209 }
00210
00211 int lctrksetchi2( PTRTYPE track, float chi2) {
00212 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00213 trk->setChi2( chi2 ) ;
00214 return LCIO::SUCCESS ;
00215 }
00216
00217 int lctrksetndf( PTRTYPE track, int ndf) {
00218 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00219 trk->setNdf( ndf ) ;
00220 return LCIO::SUCCESS ;
00221 }
00222
00223 int lctrksetdedx( PTRTYPE track, float dedx) {
00224 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00225 trk->setdEdx( dedx ) ;
00226 return LCIO::SUCCESS ;
00227 }
00228
00229 int lctrksetdedxerror( PTRTYPE track, float dedxerr) {
00230 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00231 trk->setdEdxError( dedxerr ) ;
00232 return LCIO::SUCCESS ;
00233 }
00234
00235 int lctrksetradiusofinnermosthit( PTRTYPE track, float r) {
00236 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00237 trk->setRadiusOfInnermostHit( r ) ;
00238 return LCIO::SUCCESS ;
00239 }
00240
00241 int lctrkaddtrack( PTRTYPE track, PTRTYPE addtrack ) {
00242 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00243 Track* addtrk = f2c_pointer<Track,LCObject>( addtrack ) ;
00244 trk->addTrack( addtrk ) ;
00245 return LCIO::SUCCESS ;
00246 }
00247
00248 int lctrkaddhit( PTRTYPE track, PTRTYPE hit ) {
00249 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00250 TrackerHit* addhit = f2c_pointer<TrackerHit,LCObject>( hit ) ;
00251 trk->addHit( addhit ) ;
00252 return LCIO::SUCCESS ;
00253 }
00254
00255
00256 int lctrksetsubdetectorhitnumbers( PTRTYPE track, int* intv, const int nintv ) {
00257 TrackImpl* trk = f2c_pointer<TrackImpl,LCObject>( track ) ;
00258 IntVec& intVec = trk->subdetectorHitNumbers() ;
00259 intVec.resize( nintv ) ;
00260 for(int j=0;j<nintv;j++) {
00261 intVec[j] = intv[j] ;
00262 }
00263 return LCIO::SUCCESS ;
00264 }
00265