/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Rec/RecMdcKalTrackCnv.cxx

Go to the documentation of this file.
00001 #ifndef RecMdcKalTrackCnv_CXX
00002 #define RecMdcKalTrackCnv_CXX  1
00003 
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/ObjectVector.h"
00007 #include "TClonesArray.h"
00008 #include "TClonesArray.h"
00009 #include "Identifier/MdcID.h"
00010 #include "Identifier/Identifier.h"
00011 
00012 #include "EventModel/EventModel.h"
00013 #include "MdcRecEvent/RecMdcKalTrack.h"
00014 #include "MdcRecEvent/RecMdcKalHelixSeg.h"
00015 #include "ReconEvent/ReconEvent.h"
00016 //#include "RootEventData/TDstEvent.h"
00017 #include "RootEventData/TRecTrackEvent.h"
00018 #include "RootEventData/TRecMdcKalTrack.h"
00019 
00020 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00021 #include "RootCnvSvc/Rec/RecMdcKalTrackCnv.h"
00022 #include "RootCnvSvc/RootAddress.h"
00023 
00024 #include <vector>
00025 
00026 using namespace std;
00027 
00028 // Instantiation of a static factory class used by clients to create
00029 // instances of this service
00030 //static CnvFactory<RecMdcKalTrackCnv> s_factory;
00031 //const ICnvFactory& RecMdcKalTrackCnvFactory = s_factory;
00032 
00033         RecMdcKalTrackCnv::RecMdcKalTrackCnv(ISvcLocator* svc)
00034 : RootEventBaseCnv(classID(), svc)
00035 {
00036 
00037         // Here we associate this converter with the /Event path on the TDS.
00038         MsgStream log(msgSvc(), "RecMdcKalTrackCnv");
00039         //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00040         //m_rootTreename ="Rec";
00041         m_rootBranchname ="m_recMdcKalTrackCol";
00042         // declareObject(EventModel::Recon::MdcKalTrackCol, objType(), m_rootTreename, m_rootBranchname);
00043         m_adresses.push_back(&m_recMdcKalTrackCol);
00044         m_recMdcKalTrackCol = 0;
00045 }
00046 
00047 StatusCode RecMdcKalTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00048         // creation of TDS object from root object
00049         MsgStream log(msgSvc(), "RecMdcKalTrackCnv");
00050         log << MSG::DEBUG << "RecMdcKalTrackCnv::TObjectToDataObject" << endreq;
00051         StatusCode sc = StatusCode::SUCCESS;
00052 
00053         // create the TDS location for the MdcKalTrack Collection
00054         RecMdcKalTrackCol* recMdcKalTrackCol = new RecMdcKalTrackCol;
00055         refpObject = recMdcKalTrackCol;
00056 
00057         // now convert
00058         if (!m_recMdcKalTrackCol) return sc;
00059         TIter recMdcKalTrackIter(m_recMdcKalTrackCol);
00060 
00061         IDataProviderSvc* dataSvc = 0;
00062         sc = serviceLocator()->getService ("EventDataSvc",  
00063                         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00064         if (!sc.isSuccess()) {
00065                 log << MSG::FATAL << "Could not get EventDataSvc in RecMdcTrackCnv" << endreq;
00066                 return( StatusCode::FAILURE);
00067         }
00068         SmartDataPtr<RecMdcKalHelixSegCol> recMdcKalHelixSegCol(dataSvc,"/Event/Recon/RecMdcKalHelixSegCol");
00069         if (!recMdcKalHelixSegCol) {
00070                 log << MSG::FATAL << "Could not find RecMdcKalHelixSegCol" << endreq;
00071                 return( StatusCode::FAILURE);
00072         }
00073 
00074         TRecMdcKalTrack *recMdcKalTrackRoot = 0;
00075         while ((recMdcKalTrackRoot = (TRecMdcKalTrack*)recMdcKalTrackIter.Next())) {
00076 
00077                 std::vector<HepVector> zhelixs;
00078                 std::vector<HepSymMatrix> zerrors;
00079                 std::vector<HepVector> fhelixs;
00080                 std::vector<HepSymMatrix> ferrors;
00081                 std::vector<HepVector> lhelixs;
00082                 std::vector<HepSymMatrix> lerrors;
00083                 std::vector<HepPoint3D> pocas;
00084                 std::vector<HepPoint3D> lpivots;
00085                 std::vector<HepPoint3D> lpoints;
00086 
00087 
00088                 HepVector zhelix(5); 
00089                 HepSymMatrix zerror(5); 
00090                 HepVector fhelix(5);
00091                 HepSymMatrix ferror(5);
00092                 HepVector lhelix(5);
00093                 HepSymMatrix lerror(5);
00094                 HepVector thelix(5);
00095                 HepSymMatrix terror(5);
00096                 HepPoint3D poca(0,0,0);
00097                 HepPoint3D lpivot(0,0,0); 
00098                 HepPoint3D lpoint(0,0,0); 
00099 
00100 
00101                 HepVector zhelix_e(5); 
00102                 HepSymMatrix zerror_e(5); 
00103                 HepVector fhelix_e(5);
00104                 HepSymMatrix ferror_e(5); 
00105                 HepVector lhelix_e(5);
00106                 HepSymMatrix lerror_e(5);
00107                 HepPoint3D poca_e(0,0,0);
00108                 HepPoint3D lpivot_e(0,0,0); 
00109                 HepPoint3D lpoint_e(0,0,0); 
00110 
00111 
00112                 HepVector zhelix_mu(5); 
00113                 HepSymMatrix zerror_mu(5); 
00114                 HepVector fhelix_mu(5);
00115                 HepSymMatrix ferror_mu(5);
00116                 HepVector lhelix_mu(5);
00117                 HepSymMatrix lerror_mu(5);
00118                 HepPoint3D poca_mu(0,0,0);
00119                 HepPoint3D lpivot_mu(0,0,0); 
00120                 HepPoint3D lpoint_mu(0,0,0); 
00121 
00122 
00123                 HepVector zhelix_k(5); 
00124                 HepSymMatrix zerror_k(5);  
00125                 HepVector fhelix_k(5);
00126                 HepSymMatrix ferror_k(5);
00127                 HepVector lhelix_k(5);
00128                 HepSymMatrix lerror_k(5);
00129                 HepPoint3D poca_k(0,0,0);
00130                 HepPoint3D lpivot_k(0,0,0); 
00131                 HepPoint3D lpoint_k(0,0,0); 
00132 
00133 
00134                 HepVector zhelix_p(5);  
00135                 HepSymMatrix zerror_p(5);
00136                 HepVector fhelix_p(5);
00137                 HepSymMatrix ferror_p(5);
00138                 HepVector lhelix_p(5);
00139                 HepSymMatrix lerror_p(5);
00140                 HepPoint3D poca_p(0,0,0);
00141                 HepPoint3D lpivot_p(0,0,0); 
00142                 HepPoint3D lpoint_p(0,0,0); 
00143 
00144 
00145                 int stat[2][5];
00146                 double chisq[2][5];
00147                 int ndf[2][5];
00148 
00149                 double  mass[5];
00150                 double  length[5];
00151                 double  tof[5]; 
00152                 int     nhits[5];
00153                 int     nlayer[5];
00154                 int     trackId;
00155                 double  pathSM[5];
00156                 double  fiTerm[5]; 
00157                 //std::cout<<" step 0: "<<std::endl;
00158 
00159 
00160                 RecMdcKalTrack *recMdcKalTrackTds = new RecMdcKalTrack();
00161 
00162                 //std::cout<<" step 1: "<<std::endl;
00163 
00164                 trackId = recMdcKalTrackRoot->getTrackId();
00165                 // std::cout<<"track id: "<<trackId<<std::endl;
00166                 recMdcKalTrackTds->setTrackId(trackId);
00167 
00168                 for (int u=0; u<5; u++){                     
00169                         mass[u]   = recMdcKalTrackRoot->getMass(u);          
00170                         length[u] = recMdcKalTrackRoot->getLength(u);      
00171                         tof[u]    = recMdcKalTrackRoot->getTof(u);            
00172                         nhits[u]  = recMdcKalTrackRoot->getNhits(u);          
00173                         fiTerm[u]=recMdcKalTrackRoot->getfiTerm(u);
00174                         pathSM[u]=recMdcKalTrackRoot->getPathSM(u); 
00175                         nlayer[u]=recMdcKalTrackRoot->getNlayer(u); 
00176 
00177                         recMdcKalTrackTds->setMass(mass[u],u);     
00178                         recMdcKalTrackTds->setLength(length[u],u); 
00179                         recMdcKalTrackTds->setTof(tof[u],u);       
00180                         recMdcKalTrackTds->setNhits(nhits[u],u);     
00181                         recMdcKalTrackTds->setFiTerm(fiTerm[u],u);     
00182                         recMdcKalTrackTds->setPathSM(pathSM[u],u);     
00183                         recMdcKalTrackTds->setNlayer(nlayer[u],u);     
00184                 }    
00185 
00186 
00187                 for(int v=0; v<3; v++){
00188                         poca_e[v]  = recMdcKalTrackRoot->getPocaE(v);   
00189                         poca_mu[v] = recMdcKalTrackRoot->getPocaMu(v);
00190                         poca[v]    = recMdcKalTrackRoot->getPoca(v);
00191                         poca_k[v]  = recMdcKalTrackRoot->getPocaK(v);
00192                         poca_p[v]  = recMdcKalTrackRoot->getPocaP(v);
00193                         lpivot_e[v]  = recMdcKalTrackRoot->getLPivotE(v);
00194                         lpivot_mu[v] = recMdcKalTrackRoot->getLPivotMu(v);
00195                         lpivot[v]    = recMdcKalTrackRoot->getLPivot(v);
00196                         lpivot_k[v]  = recMdcKalTrackRoot->getLPivotK(v);
00197                         lpivot_p[v]  = recMdcKalTrackRoot->getLPivotP(v);
00198                         lpoint_e[v]  = recMdcKalTrackRoot->getLPointE(v);
00199                         lpoint_mu[v] = recMdcKalTrackRoot->getLPointMu(v);
00200                         lpoint[v]    = recMdcKalTrackRoot->getLPoint(v);
00201                         lpoint_k[v]  = recMdcKalTrackRoot->getLPointK(v);
00202                         lpoint_p[v]  = recMdcKalTrackRoot->getLPointP(v);
00203                         //std::cout<<"poca_e[v]: "<<setprecision(6)<<poca_e[v]<<std::endl;
00204                         //std::cout<<"lpoint_e[v]: "<<setprecision(6)<<lpoint_e[v]<<std::endl;
00205                         //std::cout<<"lpivot_e[v]: "<<setprecision(6)<<lpivot_e[v]<<std::endl;
00206 
00207                 }
00208 
00209                 for (int i=0, k=0; i<5; i++){
00210                         zhelix[i]    = recMdcKalTrackRoot->getZHelix(i);
00211                         zhelix_e[i]  = recMdcKalTrackRoot->getZHelixE(i);
00212                         zhelix_mu[i] = recMdcKalTrackRoot->getZHelixMu(i);
00213                         zhelix_k[i]  = recMdcKalTrackRoot->getZHelixK(i);
00214                         zhelix_p[i]  = recMdcKalTrackRoot->getZHelixP(i);
00215 
00216 
00217                         fhelix[i]    = recMdcKalTrackRoot->getFHelix(i);
00218                         fhelix_e[i]  = recMdcKalTrackRoot->getFHelixE(i);
00219                         fhelix_mu[i] = recMdcKalTrackRoot->getFHelixMu(i);
00220                         fhelix_k[i]  = recMdcKalTrackRoot->getFHelixK(i);
00221                         fhelix_p[i]  = recMdcKalTrackRoot->getFHelixP(i);
00222 
00223                         lhelix[i]    = recMdcKalTrackRoot->getLHelix(i);
00224                         lhelix_e[i]  = recMdcKalTrackRoot->getLHelixE(i);
00225                         lhelix_mu[i] = recMdcKalTrackRoot->getLHelixMu(i);
00226                         lhelix_k[i]  = recMdcKalTrackRoot->getLHelixK(i);
00227                         lhelix_p[i]  = recMdcKalTrackRoot->getLHelixP(i);
00228 
00229                         thelix[i]    = recMdcKalTrackRoot->getTHelix(i);
00230 
00231                         for (int j=0; j<=i; j++){
00232 
00233                                 zerror[i][j]    = recMdcKalTrackRoot->getZError(i,j);
00234                                 zerror_e[i][j]  = recMdcKalTrackRoot->getZErrorE(i,j);
00235                                 zerror_mu[i][j] = recMdcKalTrackRoot->getZErrorMu(i,j);
00236                                 zerror_k[i][j]  = recMdcKalTrackRoot->getZErrorK(i,j);
00237                                 zerror_p[i][j]  = recMdcKalTrackRoot->getZErrorP(i,j);
00238                                 zerror[j][i]    = zerror[i][j];    
00239                                 zerror_e[j][i]  = zerror_e[i][j];  
00240                                 zerror_mu[j][i] = zerror_mu[i][j]; 
00241                                 zerror_k[j][i]  = zerror_k[i][j];  
00242                                 zerror_p[j][i]  = zerror_p[i][j];  
00243 
00244                                 ferror[i][j]    = recMdcKalTrackRoot->getFError(i,j);
00245                                 ferror_e[i][j]  = recMdcKalTrackRoot->getFErrorE(i,j);
00246                                 ferror_mu[i][j] = recMdcKalTrackRoot->getFErrorMu(i,j);
00247                                 ferror_k[i][j]  = recMdcKalTrackRoot->getFErrorK(i,j);
00248                                 ferror_p[i][j]  = recMdcKalTrackRoot->getFErrorP(i,j);
00249                                 ferror[j][i]    = ferror[i][j];
00250                                 ferror_e[j][i]  = ferror_e[i][j];
00251                                 ferror_mu[j][i] = ferror_mu[i][j];
00252                                 ferror_k[j][i]  = ferror_k[i][j];
00253                                 ferror_p[j][i]  = ferror_p[i][j];
00254 
00255                                 lerror[i][j]    = recMdcKalTrackRoot->getLError(i,j);
00256                                 lerror_e[i][j]  = recMdcKalTrackRoot->getLErrorE(i,j);
00257                                 lerror_mu[i][j] = recMdcKalTrackRoot->getLErrorMu(i,j);
00258                                 lerror_k[i][j]  = recMdcKalTrackRoot->getLErrorK(i,j);
00259                                 lerror_p[i][j]  = recMdcKalTrackRoot->getLErrorP(i,j);
00260                                 lerror[j][i]    = lerror[i][j];
00261                                 lerror_e[j][i]  = lerror_e[i][j];
00262                                 lerror_mu[j][i] = lerror_mu[i][j];
00263                                 lerror_k[j][i]  = lerror_k[i][j];
00264                                 lerror_p[j][i]  = lerror_p[i][j];
00265 
00266                                 terror[i][j] = recMdcKalTrackRoot->getTError(k++);
00267                                 terror[j][i] = terror[i][j];
00268 
00269                         }       
00270                 }
00271 
00272                 //std::cout<<" step 2: "<<std::endl;
00273 
00274                 //std::cout<<"T to rec tds: "<<endl;
00275                 //std::cout<<"lpoint_e: "<<lpoint_e<<std::endl;
00276                 //std::cout<<"lpivot_e: "<<lpivot_e<<std::endl;
00278                 zhelixs.push_back(zhelix_e);
00279                 zhelixs.push_back(zhelix_mu);
00280                 zhelixs.push_back(zhelix);
00281                 zhelixs.push_back(zhelix_k);
00282                 zhelixs.push_back(zhelix_p);    
00283                 zerrors.push_back(zerror_e);
00284                 zerrors.push_back(zerror_mu);
00285                 zerrors.push_back(zerror);
00286                 zerrors.push_back(zerror_k);
00287                 zerrors.push_back(zerror_p);
00289                 fhelixs.push_back(fhelix_e);
00290                 fhelixs.push_back(fhelix_mu);
00291                 fhelixs.push_back(fhelix);
00292                 fhelixs.push_back(fhelix_k);
00293                 fhelixs.push_back(fhelix_p);
00294                 ferrors.push_back(ferror_e);
00295                 ferrors.push_back(ferror_mu);
00296                 ferrors.push_back(ferror);
00297                 ferrors.push_back(ferror_k);
00298                 ferrors.push_back(ferror_p);
00300                 lhelixs.push_back(lhelix_e);
00301                 lhelixs.push_back(lhelix_mu);
00302                 lhelixs.push_back(lhelix);
00303                 lhelixs.push_back(lhelix_k);
00304                 lhelixs.push_back(lhelix_p); 
00305                 lerrors.push_back(lerror_e);
00306                 lerrors.push_back(lerror_mu);
00307                 lerrors.push_back(lerror);
00308                 lerrors.push_back(lerror_k);
00309                 lerrors.push_back(lerror_p);
00311 
00312                 pocas.push_back(poca_e);
00313                 pocas.push_back(poca_mu);
00314                 pocas.push_back(poca);
00315                 pocas.push_back(poca_k);
00316                 pocas.push_back(poca_p);
00317                 lpivots.push_back(lpivot_e);
00318                 lpivots.push_back(lpivot_mu);
00319                 lpivots.push_back(lpivot);
00320                 lpivots.push_back(lpivot_k);
00321                 lpivots.push_back(lpivot_p);
00322                 lpoints.push_back(lpoint_e);
00323                 lpoints.push_back(lpoint_mu);
00324                 lpoints.push_back(lpoint);
00325                 lpoints.push_back(lpoint_k);
00326                 lpoints.push_back(lpoint_p);
00327 
00328                 for(int m=0; m<5; m++){
00329                         int charge;
00330                         double pxy(0.),px(0.),py(0.),pz(0.),ptot(0.),dr(0.),phi0(0.),kappa(0.),dz(0.),tanl(0.),x(0.),y(0.),z(0.),vx0(0.),vy0(0.),vz0(0.);
00331                         dr    = zhelixs[m][0];
00332                         phi0  = zhelixs[m][1];
00333                         kappa = zhelixs[m][2];
00334                         dz    = zhelixs[m][3];
00335                         tanl  = zhelixs[m][4];
00336 
00337                         // x = pocas[m][0];
00338                         // y = pocas[m][1];
00339                         // z = pocas[m][2];
00340                         x = dr * cos(phi0);
00341                         y = dr * sin(phi0);
00342                         z = dz;
00343                         //  std::cout<<"x: "<<x<<"y: "<<y<<"z: "<<z<<std::endl;
00344 
00345                         if (kappa > 0.0000000001)
00346                                 charge = 1;
00347                         else if (kappa < -0.0000000001)
00348                                 charge = -1;
00349                         else
00350                                 charge = 0;
00351 
00352                         if(kappa!=0) pxy = 1.0/fabs(kappa);
00353                         else pxy = 0;
00354 
00355                         px = pxy * (-sin(phi0));
00356                         py = pxy * cos(phi0);
00357                         pz = pxy * tanl;
00358                         ptot = sqrt(px*px+py*py+pz*pz);
00359                         // cout<<"x, y, z, charge, px, py, pz, ptot: "<<x<<" , "<<y<<" , "<<z<<" , "<<charge<<" , "<<px<<" , "<<py<<" , "<<pz<<" , "<<ptot<<endl;
00360                         recMdcKalTrackTds->setCharge(charge,m);
00361                         recMdcKalTrackTds->setPxy(pxy,m);
00362                         recMdcKalTrackTds->setPx(px,m);
00363                         recMdcKalTrackTds->setPy(py,m);
00364                         recMdcKalTrackTds->setPz(pz,m);
00365                         recMdcKalTrackTds->setP(ptot,m);
00366                         recMdcKalTrackTds->setTheta(acos(pz/ptot),m);
00367                         recMdcKalTrackTds->setPhi(atan2(py,px),m);
00368                         recMdcKalTrackTds->setX(x,m);
00369                         recMdcKalTrackTds->setY(y,m);
00370                         recMdcKalTrackTds->setZ(z,m);
00371                         recMdcKalTrackTds->setR(sqrt(x*x+y*y),m);
00373 
00374                         for(int n=0; n<2; n++){
00375                                 int stat  = recMdcKalTrackRoot->getStat(n,m);
00376                                 int chisq = recMdcKalTrackRoot->getChisq(n,m);
00377                                 int ndf   = recMdcKalTrackRoot->getNdf(n,m);
00378                                 recMdcKalTrackTds->setStat(stat,n,m);
00379                                 recMdcKalTrackTds->setChisq(chisq,n,m);
00380                                 recMdcKalTrackTds->setNdf(ndf,n,m);
00381                         }
00382                 }
00383 
00384                 //std::cout<<" step 3: "<<std::endl;
00385 
00386 
00387 
00388                 for(int jj=0; jj<5; jj++){
00389                         //std::cout<<" step 3.0: "<<std::endl;
00390                         //std::cout<<"zhelixs[jj]: "<<zhelixs[jj]<<std::endl;
00391 
00392                         recMdcKalTrackTds->setZHelix(zhelixs[jj],jj);
00393                         //std::cout<<" step 3.1: "<<std::endl;
00394 
00395                         recMdcKalTrackTds->setZError(zerrors[jj],jj);
00396                         recMdcKalTrackTds->setFHelix(fhelixs[jj],jj);
00397                         recMdcKalTrackTds->setFError(ferrors[jj],jj);
00398                         //std::cout<<" step 3.5: "<<std::endl;
00399 
00400                         recMdcKalTrackTds->setLHelix(lhelixs[jj],jj);
00401                         recMdcKalTrackTds->setLError(lerrors[jj],jj);
00402                         recMdcKalTrackTds->setPoca(pocas[jj],jj);
00403 
00404 
00405                         recMdcKalTrackTds->setLPoint(lpoints[jj],jj);
00406                         recMdcKalTrackTds->setLPivot(lpivots[jj],jj);
00407                 }
00408                 recMdcKalTrackTds->setTHelix(thelix);
00409                 recMdcKalTrackTds->setTError(terror);
00410 
00411                 //std::cout<<" step 4: "<<std::endl;
00412 
00413 
00414                 log<<MSG::DEBUG<<"T to REC TDS, zhelix: "<<zhelix<<endreq;
00415                 log<<MSG::DEBUG<<"T to REC TDS, zerror: "<<zerror<<endreq;
00416 
00417                 m_common.m_rootRecMdcKalTrackMap[recMdcKalTrackRoot] = recMdcKalTrackTds;
00418 
00419                 int nSegTot=0;
00420                 for(int i=0; i<5; i++) {
00421                         HelixSegRefVec theKalHelixSegRefVec;
00422 
00423                         int nSeg=recMdcKalTrackRoot->getNseg(i);
00424                         int iSeg=0;
00425                         RecMdcKalHelixSegCol::iterator iter = recMdcKalHelixSegCol->begin();
00426                         for (;iter != recMdcKalHelixSegCol->end(); iter++){
00427 
00428                                 //cout<<" (*iter)->getTrkId(): "<<(*iter)->getTrkId()<<endl;
00429                                 if((*iter)->getTrackId() == trackId){
00430                                         if(iSeg>=nSegTot&&iSeg<nSeg+nSegTot) {
00431                                                 SmartRef<RecMdcKalHelixSeg> refhit(*iter);
00432                                                 theKalHelixSegRefVec.push_back(refhit);
00433                                         }
00434                                         iSeg++;
00435                                 }
00436                         }
00437                         nSegTot+=nSeg;
00438 
00439                         recMdcKalTrackTds->setVecHelixSegs(theKalHelixSegRefVec,i);
00440                 }
00441 
00442                 int nhelixsegs = recMdcKalTrackTds->getVecHelixSegs().size();
00443 
00444                 //std::cout<<" mdc hits: "<<nhelixsegs<< std::endl;
00445 
00446                 for(int ii=0; ii <nhelixsegs ; ii++){
00447 
00448                         //cout<<"ddl: "<<(recMdcTrack->getVecKalHelixSegs()[ii])->getDriftDistLeft()<<endl;
00449                         //cout<<"erddl: "<<(recMdcTrack->getVecKalHelixSegs()[ii])->getErrDriftDistLeft()<<endl;
00450                         Identifier id(recMdcKalTrackTds->getVecHelixSegs()[ii]->getMdcId());
00451                         int layer = MdcID::layer(id);
00452                         int wire = MdcID::wire(id);
00453                         //cout<<"layer: "<<layer<<" wire: "<<wire<<endl;
00454                 } 
00455 
00456                 recMdcKalTrackCol->push_back(recMdcKalTrackTds);
00457 
00458         }
00459 
00460         delete m_recMdcKalTrackCol;
00461 
00462         m_recMdcKalTrackCol = 0;  
00463 
00464         return StatusCode::SUCCESS;
00465 }
00466 
00467 
00468 StatusCode RecMdcKalTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00469 
00470 
00471         MsgStream log(msgSvc(), "RecMdcKalTrackCnv");
00472         log << MSG::DEBUG << "RecMdcKalTrackCnv::DataObjectToTObject" << endreq;
00473         StatusCode sc=StatusCode::SUCCESS;
00474 
00475         RecMdcKalTrackCol * mdcKalTrackColTds=dynamic_cast<RecMdcKalTrackCol *> (obj);
00476         if (!mdcKalTrackColTds) {
00477                 log << MSG::ERROR << "Could not downcast to RecMdcKalTrackCol" << endreq;
00478                 return StatusCode::FAILURE;
00479         }
00480 
00481         DataObject *evt;
00482         m_eds->findObject(EventModel::Recon::Event,evt);
00483         if (evt==NULL) {
00484                 log << MSG::ERROR << "Could not get ReconEvent in TDS "  << endreq;
00485                 return StatusCode::FAILURE;
00486         }
00487 
00488         ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00489         if (!devtTds) {
00490                 log << MSG::ERROR << "MdcKalTrackCnv:Could not downcast to TDS Recon Event" << endreq;
00491         }
00492         IOpaqueAddress *addr;
00493 
00494         m_cnvSvc->getRecTrackCnv()->createRep(evt,addr); 
00495         TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00496 
00497         const TObjArray *m_recMdcKalTrackCol = recEvt->getRecMdcKalTrackCol();
00498 
00499         if (!m_recMdcKalTrackCol) return sc;
00500 
00501         recEvt->clearRecMdcKalTrackCol(); //necessary in case there is I/O at the same time since array is static
00502         RecMdcKalTrackCol::const_iterator mdcKalTrackTds;
00503 
00504         for (mdcKalTrackTds = mdcKalTrackColTds->begin(); mdcKalTrackTds != mdcKalTrackColTds->end(); mdcKalTrackTds++) {
00505 
00506                 // Get Data from TDS
00507                 // root data
00508                 Int_t trackId;
00509                 Double_t mass[5];          
00510                 Double_t length[5];        
00511                 Double_t tof[5];           
00512                 Int_t nhits[5];           
00513                 Int_t nlayer[5];        
00514                 Int_t stat[2][5];            
00515                 Double_t chisq[2][5];      
00516                 Int_t ndf[2][5];        
00517                 Int_t nSeg[5];
00518                 Double_t fiTerm[5];
00519                 Double_t pathSM[5];
00520 
00521                 Double_t poca_e[3];
00522                 Double_t poca_mu[3];
00523                 Double_t poca[3];
00524                 Double_t poca_k[3];
00525                 Double_t poca_p[3];
00526 
00527                 Double_t zhelix[5];        
00528                 Double_t zerror[5][5];     
00529                 Double_t zhelix_e[5];      
00530                 Double_t zerror_e[5][5];   
00531                 Double_t zhelix_mu[5];     
00532                 Double_t zerror_mu[5][5];  
00533                 Double_t zhelix_k[5];      
00534                 Double_t zerror_k[5][5];   
00535                 Double_t zhelix_p[5];      
00536                 Double_t zerror_p[5][5];   
00537 
00538                 Double_t fhelix[5];        
00539                 Double_t ferror[5][5];        
00540                 Double_t fhelix_e[5];         
00541                 Double_t ferror_e[5][5];      
00542                 Double_t fhelix_mu[5];        
00543                 Double_t ferror_mu[5][5];     
00544                 Double_t fhelix_k[5];         
00545                 Double_t ferror_k[5][5];      
00546                 Double_t fhelix_p[5];         
00547                 Double_t ferror_p[5][5];      
00548 
00549                 Double_t lhelix[5];           
00550                 Double_t lerror[5][5];                  
00551                 Double_t lhelix_e[5];            
00552                 Double_t lerror_e[5][5];          
00553                 Double_t lhelix_mu[5];           
00554                 Double_t lerror_mu[5][5];  
00555                 Double_t lhelix_k[5];      
00556                 Double_t lerror_k[5][5];   
00557                 Double_t lhelix_p[5];      
00558                 Double_t lerror_p[5][5];  
00559 
00560                 Double_t thelix[5];        
00561                 Double_t terror[15];        
00562 
00563                 Double_t lpoint_e[3];
00564                 Double_t lpoint_mu[3];
00565                 Double_t lpoint[3];
00566                 Double_t lpoint_k[3];
00567                 Double_t lpoint_p[3];
00568 
00569                 Double_t lpivot_e[3];
00570                 Double_t lpivot_mu[3];
00571                 Double_t lpivot[3];
00572                 Double_t lpivot_k[3];
00573                 Double_t lpivot_p[3];
00574 
00575                 TRecMdcKalTrack *mdcKalTrackRoot = new TRecMdcKalTrack();             
00576 
00577                 trackId = (*mdcKalTrackTds)->getTrackId();
00578                 for (Int_t i = 0 ; i < 5 ; i++){                     
00579                         mass[i] = (*mdcKalTrackTds)->getMass(i);          
00580                         length[i] = (*mdcKalTrackTds)->getLength(i);      
00581                         tof[i] = (*mdcKalTrackTds)->getTof(i);            
00582                         nhits[i] = (*mdcKalTrackTds)->getNhits(i);         
00583                         nlayer[i] = (*mdcKalTrackTds)->getNlayer(i);         
00584                         fiTerm[i]=(*mdcKalTrackTds)->getFiTerm(i); 
00585                         pathSM[i]=(*mdcKalTrackTds)->getPathSM(i); 
00586                         //stat[i] = (*mdcKalTrackTds)->getStat(i);                
00587                         nSeg[i]=((*mdcKalTrackTds)->getVecHelixSegs(i)).size();
00588                         mdcKalTrackRoot->setNseg(nSeg[i],i);
00589                         mdcKalTrackRoot->setNlayer(nlayer[i],i);         
00590                         for (Int_t j = 0 ; j< 2 ; j++){                    
00591                                 stat[j][i] = (*mdcKalTrackTds)->getStat(j,i);
00592                                 chisq[j][i] = (*mdcKalTrackTds)->getChisq(j,i);
00593                                 ndf[j][i] = (*mdcKalTrackTds)->getNdf(j,i);
00594                                 mdcKalTrackRoot->setStat(stat[j][i],j,i);
00595                                 mdcKalTrackRoot->setChisq(chisq[j][i],j,i);     
00596                                 mdcKalTrackRoot->setNdf(ndf[j][i],j,i);         
00597                         }                                                 
00598                 }    
00599                 for(Int_t i=0;i<5;i++){
00600                         log<<MSG::INFO<<" recMdcKalTrack.helix("<<i<<"): "<<(*mdcKalTrackTds)->getTHelix(i)<<endreq;
00601                         thelix[i] = (*mdcKalTrackTds)->getTHelix(i);
00602                 }
00603                 for(Int_t i=0; i<15; i++){
00604                         terror[i] = (*mdcKalTrackTds)->getTError(i);
00605                 }
00606                 HepPoint3D h_poca_e     = (*mdcKalTrackTds)->getPocaE();
00607                 HepPoint3D h_poca_mu    = (*mdcKalTrackTds)->getPocaMu();
00608                 HepPoint3D h_poca       = (*mdcKalTrackTds)->getPoca();
00609                 HepPoint3D h_poca_k     = (*mdcKalTrackTds)->getPocaK();
00610                 HepPoint3D h_poca_p     = (*mdcKalTrackTds)->getPocaP();
00611                 HepPoint3D h_lpoint_e   = (*mdcKalTrackTds)->getLPointE();
00612                 HepPoint3D h_lpoint_mu  = (*mdcKalTrackTds)->getLPointMu();
00613                 HepPoint3D h_lpoint     = (*mdcKalTrackTds)->getLPoint();
00614                 HepPoint3D h_lpoint_k   = (*mdcKalTrackTds)->getLPointK();
00615                 HepPoint3D h_lpoint_p   = (*mdcKalTrackTds)->getLPointP();
00616                 HepPoint3D h_lpivot_e   = (*mdcKalTrackTds)->getLPivotE();
00617                 HepPoint3D h_lpivot_mu  = (*mdcKalTrackTds)->getLPivotMu();
00618                 HepPoint3D h_lpivot     = (*mdcKalTrackTds)->getLPivot();
00619                 HepPoint3D h_lpivot_k   = (*mdcKalTrackTds)->getLPivotK();
00620                 HepPoint3D h_lpivot_p   = (*mdcKalTrackTds)->getLPivotP();
00621 
00622                 //std::cout<<" h_poca_mu: "<<h_poca_mu<<std::endl;
00623                 //std::cout<<" h_poca: "<<h_poca<<std::endl;
00624                 //std::cout<<" h_poca_k: "<<h_poca_k<<std::endl;
00625                 //std::cout<<" h_poca_p: "<<h_poca_p<<std::endl;
00626 
00627 
00628                 HepVector h_zhelix      = (*mdcKalTrackTds)->getZHelix();           
00629                 HepSymMatrix h_zerror   = (*mdcKalTrackTds)->getZError();           
00630                 HepVector h_zhelix_e    = (*mdcKalTrackTds)->getZHelixE();          
00631                 HepSymMatrix h_zerror_e = (*mdcKalTrackTds)->getZErrorE();          
00632                 HepVector h_zhelix_mu   = (*mdcKalTrackTds)->getZHelixMu();         
00633                 HepSymMatrix h_zerror_mu= (*mdcKalTrackTds)->getZErrorMu();         
00634                 HepVector h_zhelix_k    = (*mdcKalTrackTds)->getZHelixK();          
00635                 HepSymMatrix h_zerror_k = (*mdcKalTrackTds)->getZErrorK();          
00636                 HepVector h_zhelix_p    = (*mdcKalTrackTds)->getZHelixP();          
00637                 HepSymMatrix h_zerror_p = (*mdcKalTrackTds)->getZErrorP();          
00638 
00639                 HepVector h_fhelix      = (*mdcKalTrackTds)->getFHelix();    
00640                 HepSymMatrix h_ferror   = (*mdcKalTrackTds)->getFError();    
00641                 HepVector h_fhelix_e    = (*mdcKalTrackTds)->getFHelixE();   
00642                 HepSymMatrix h_ferror_e = (*mdcKalTrackTds)->getFErrorE();   
00643                 HepVector h_fhelix_mu   = (*mdcKalTrackTds)->getFHelixMu();  
00644                 HepSymMatrix h_ferror_mu= (*mdcKalTrackTds)->getFErrorMu();  
00645                 HepVector h_fhelix_k    = (*mdcKalTrackTds)->getFHelixK();   
00646                 HepSymMatrix h_ferror_k = (*mdcKalTrackTds)->getFErrorK();   
00647                 HepVector h_fhelix_p    = (*mdcKalTrackTds)->getFHelixP();   
00648                 HepSymMatrix h_ferror_p = (*mdcKalTrackTds)->getFErrorP();   
00649 
00650                 HepVector h_lhelix      = (*mdcKalTrackTds)->getLHelix();    
00651                 HepSymMatrix h_lerror   = (*mdcKalTrackTds)->getLError();    
00652                 HepVector h_lhelix_e    = (*mdcKalTrackTds)->getLHelixE();   
00653                 HepSymMatrix h_lerror_e = (*mdcKalTrackTds)->getLErrorE();   
00654                 HepVector h_lhelix_mu   = (*mdcKalTrackTds)->getLHelixMu();  
00655                 HepSymMatrix h_lerror_mu= (*mdcKalTrackTds)->getLErrorMu();  
00656                 HepVector h_lhelix_k    = (*mdcKalTrackTds)->getLHelixK();   
00657                 HepSymMatrix h_lerror_k = (*mdcKalTrackTds)->getLErrorK();   
00658                 HepVector h_lhelix_p    = (*mdcKalTrackTds)->getLHelixP();   
00659                 HepSymMatrix h_lerror_p = (*mdcKalTrackTds)->getLErrorP();   
00660 
00661                 mdcKalTrackRoot->setTrackId(trackId);
00662                 mdcKalTrackRoot->setMass(mass);     
00663                 mdcKalTrackRoot->setLength(length); 
00664                 mdcKalTrackRoot->setTof(tof);       
00665                 mdcKalTrackRoot->setNhits(nhits);     
00666                 mdcKalTrackRoot->setFiTerm(fiTerm);     
00667                 mdcKalTrackRoot->setPathSM(pathSM);     
00668                 // mdcKalTrackRoot->setStat(stat);     
00669 
00670                 for(int s=0; s<3; s++){
00671                         poca_e[s]  = h_poca_e[s];
00672                         poca_mu[s] = h_poca_mu[s];
00673                         poca[s]    = h_poca[s];
00674                         poca_k[s]  = h_poca_k[s];
00675                         poca_p[s]  = h_poca_p[s];
00676                         lpoint_e[s]  = h_lpoint_e[s];
00677                         lpoint_mu[s] = h_lpoint_mu[s];
00678                         lpoint[s]    = h_lpoint[s];
00679                         lpoint_k[s]  = h_lpoint_k[s];
00680                         lpoint_p[s]  = h_lpoint_p[s];
00681                         lpivot_e[s]  = h_lpivot_e[s];
00682                         lpivot_mu[s] = h_lpivot_mu[s];
00683                         lpivot[s]    = h_lpivot[s];
00684                         lpivot_k[s]  = h_lpivot_k[s];
00685                         lpivot_p[s]  = h_lpivot_p[s];
00686                 }
00687 
00688                 for (int i=0; i<5; i++){
00689                         zhelix[i]    = h_zhelix[i];
00690                         zhelix_e[i]  = h_zhelix_e[i];
00691                         zhelix_mu[i] = h_zhelix_mu[i];
00692                         zhelix_p[i]  = h_zhelix_p[i];
00693                         zhelix_k[i]  = h_zhelix_k[i];
00694 
00695                         fhelix[i]    = h_fhelix[i];        
00696                         fhelix_e[i]  = h_fhelix_e[i];    
00697                         fhelix_mu[i] = h_fhelix_mu[i];  
00698                         fhelix_p[i]  = h_fhelix_p[i];    
00699                         fhelix_k[i]  = h_fhelix_k[i]; 
00700 
00701                         lhelix[i]    = h_lhelix[i];      
00702                         lhelix_e[i]  = h_lhelix_e[i];  
00703                         lhelix_mu[i] = h_lhelix_mu[i];
00704                         lhelix_p[i]  = h_lhelix_p[i];  
00705                         lhelix_k[i]  = h_lhelix_k[i];  
00706 
00707                         for (int j=0; j<=i; j++){
00708                                 zerror[i][j]    = h_zerror[i][j];       
00709                                 zerror_e[i][j]  = h_zerror_e[i][j];   
00710                                 zerror_mu[i][j] = h_zerror_mu[i][j]; 
00711                                 zerror_p[i][j]  = h_zerror_p[i][j];   
00712                                 zerror_k[i][j]  = h_zerror_k[i][j];   
00713 
00714 
00715                                 ferror[i][j]    = h_ferror[i][j];       
00716                                 ferror_e[i][j]  = h_ferror_e[i][j];   
00717                                 ferror_mu[i][j] = h_ferror_mu[i][j]; 
00718                                 ferror_p[i][j]  = h_ferror_p[i][j];   
00719                                 ferror_k[i][j]  = h_ferror_k[i][j];   
00720 
00721 
00722                                 lerror[i][j]    = h_lerror[i][j];       
00723                                 lerror_e[i][j]  = h_lerror_e[i][j];   
00724                                 lerror_mu[i][j] = h_lerror_mu[i][j]; 
00725                                 lerror_p[i][j]  = h_lerror_p[i][j];   
00726                                 lerror_k[i][j]  = h_lerror_k[i][j]; 
00727 
00728                                 zerror[j][i]    = h_zerror[i][j];        
00729                                 zerror_e[j][i]  = h_zerror_e[i][j];  
00730                                 zerror_mu[j][i] = h_zerror_mu[i][j];
00731                                 zerror_p[j][i]  = h_zerror_p[i][j];  
00732                                 zerror_k[j][i]  = h_zerror_k[i][j];  
00733 
00734 
00735                                 ferror[j][i]    = h_ferror[i][j];      
00736                                 ferror_e[j][i]  = h_ferror_e[i][j];  
00737                                 ferror_mu[j][i] = h_ferror_mu[i][j];
00738                                 ferror_p[j][i]  = h_ferror_p[i][j];  
00739                                 ferror_k[j][i]  = h_ferror_k[i][j];  
00740 
00741 
00742                                 lerror[j][i]    = h_lerror[i][j];      
00743                                 lerror_e[j][i]  = h_lerror_e[i][j];  
00744                                 lerror_mu[j][i] = h_lerror_mu[i][j];
00745                                 lerror_p[j][i]  = h_lerror_p[i][j];  
00746                                 lerror_k[j][i]  = h_lerror_k[i][j];  
00747 
00748                         }      
00749                 }
00750 
00751                 mdcKalTrackRoot->setZHelix(zhelix);     
00752                 mdcKalTrackRoot->setZError(zerror);   
00753                 for(int k=0; k<5; k++){
00754                         log<<MSG::INFO<<" RecMdcKalTrackRoot.ZHelix "<<"["<<k<<"]"
00755                                 <<mdcKalTrackRoot->getZHelix(k)<<endreq;
00756                 }
00757                 mdcKalTrackRoot->setZHelixE(zhelix_e);   
00758                 mdcKalTrackRoot->setZErrorE(zerror_e);   
00759                 mdcKalTrackRoot->setZHelixMu(zhelix_mu);  
00760                 mdcKalTrackRoot->setZErrorMu(zerror_mu);  
00761                 mdcKalTrackRoot->setZHelixK(zhelix_k);                  
00762                 mdcKalTrackRoot->setZErrorK(zerror_k);   
00763                 mdcKalTrackRoot->setZHelixP(zhelix_p);   
00764                 mdcKalTrackRoot->setZErrorP(zerror_p);
00765                 mdcKalTrackRoot->setFHelix(fhelix);          
00766                 mdcKalTrackRoot->setFError(ferror);       
00767                 mdcKalTrackRoot->setFHelixE(fhelix_e);    
00768                 mdcKalTrackRoot->setFErrorE(ferror_e);    
00769                 mdcKalTrackRoot->setFHelixMu(fhelix_mu);  
00770                 mdcKalTrackRoot->setFErrorMu(ferror_mu);  
00771                 mdcKalTrackRoot->setFHelixK(fhelix_k);    
00772                 mdcKalTrackRoot->setFErrorK(ferror_k);    
00773                 mdcKalTrackRoot->setFHelixP(fhelix_p);    
00774                 mdcKalTrackRoot->setFErrorP(ferror_p);   
00775 
00776                 mdcKalTrackRoot->setLHelix(lhelix);         
00777                 mdcKalTrackRoot->setLError(lerror);        
00778                 mdcKalTrackRoot->setLHelixE(lhelix_e);     
00779                 mdcKalTrackRoot->setLErrorE(lerror_e);     
00780                 mdcKalTrackRoot->setLHelixMu(lhelix_mu);   
00781                 mdcKalTrackRoot->setLErrorMu(lerror_mu);   
00782                 mdcKalTrackRoot->setLHelixK(lhelix_k);     
00783                 mdcKalTrackRoot->setLErrorK(lerror_k);     
00784                 mdcKalTrackRoot->setLHelixP(lhelix_p);     
00785                 mdcKalTrackRoot->setLErrorP(lerror_p);    
00786 
00787                 mdcKalTrackRoot->setTHelix(thelix);         
00788                 mdcKalTrackRoot->setTError(terror);        
00789 
00790                 mdcKalTrackRoot->setPocaE(poca_e);
00791                 mdcKalTrackRoot->setPocaMu(poca_mu);
00792                 mdcKalTrackRoot->setPoca(poca);
00793                 mdcKalTrackRoot->setPocaK(poca_k);
00794                 mdcKalTrackRoot->setPocaP(poca_p);
00795 
00796                 mdcKalTrackRoot->setLPointE(lpoint_e);
00797                 mdcKalTrackRoot->setLPointMu(lpoint_mu);
00798                 mdcKalTrackRoot->setLPoint(lpoint);
00799                 mdcKalTrackRoot->setLPointK(lpoint_k);
00800                 mdcKalTrackRoot->setLPointP(lpoint_p);
00801 
00802                 mdcKalTrackRoot->setLPivotE(lpivot_e);
00803                 mdcKalTrackRoot->setLPivotMu(lpivot_mu);
00804                 mdcKalTrackRoot->setLPivot(lpivot);
00805                 mdcKalTrackRoot->setLPivotK(lpivot_k);
00806                 mdcKalTrackRoot->setLPivotP(lpivot_p);
00807                 //std::cout<<" mdcKalTrackRoot->getPivotE(1): "<<mdcKalTrackRoot->getLPivotE(1)<<std::endl;
00808 
00809                 recEvt->addRecMdcKalTrack(mdcKalTrackRoot);
00810         }
00811 
00812 
00813         return StatusCode::SUCCESS;
00814 }
00815 #endif

Generated on Tue Nov 29 22:58:53 2016 for BOSS_7.0.2 by  doxygen 1.4.7