From 52ac3921df0f46f12eb36f5063d50b612fa4fc5a Mon Sep 17 00:00:00 2001 From: Chengdong Fu <fucd@ihep.ac.cn> Date: Fri, 24 Jul 2020 19:07:24 +0800 Subject: [PATCH] add FTD/SIT support --- .../src/SiliconTrackingAlg.cpp | 145 ++++++++---------- .../SiliconTracking/src/SiliconTrackingAlg.h | 15 +- Service/TrackSystemSvc/CMakeLists.txt | 5 +- Service/TrackSystemSvc/src/HelixTrack.cc | 15 +- Service/TrackSystemSvc/src/MarlinKalTest.cc | 18 +-- .../TrackSystemSvc/src/MarlinKalTestTrack.cc | 43 ++---- Service/TrackSystemSvc/src/MarlinTrkUtils.cc | 122 ++++++--------- 7 files changed, 144 insertions(+), 219 deletions(-) diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp index 156d9afd..74ed5f22 100644 --- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp +++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp @@ -2,6 +2,7 @@ #include "GearSvc/IGearSvc.h" #include "EventSeeder/IEventSeeder.h" #include "TrackSystemSvc/ITrackSystemSvc.h" +#include "DataHelper/Navagation.h" #include "edm4hep/MCParticle.h" #include "edm4hep/TrackerHit.h" //#include "edm4hep/TrackerHitPlane.h" @@ -83,7 +84,8 @@ SiliconTrackingAlg::SiliconTrackingAlg(const std::string& name, ISvcLocator* svc declareProperty("FTDPixelHitCollection", _inFTDPixelColHdl, "Handle of the Input FTD TrackerHits collection"); declareProperty("FTDSpacePointCollection", _inFTDSpacePointColHdl, "Handle of the Input FTD SpacePoints collection"); declareProperty("SITHitCollection", _inSITColHdl, "Handle of the Input SIT TrackerHits collection"); - + declareProperty("SITRawHitCollection", _inSITRawColHdl, "Handle of the SIT SpacePoints raw hit collection collection"); + declareProperty("FTDRawHitCollection", _inFTDRawColHdl, "Handle of the FTD SpacePoints raw hit collection collection"); // Output Collections // ^^^^^^^^^^^^^^^^^^ declareProperty("SiTrackCollection", _outColHdl, "Handle of the SiTrack output collection"); @@ -92,7 +94,6 @@ SiliconTrackingAlg::SiliconTrackingAlg(const std::string& name, ISvcLocator* svc // ^^^^^^^^^^^^^^^^^^^ _output_track_col_quality = _output_track_col_quality_GOOD; - } @@ -120,8 +121,8 @@ StatusCode SiliconTrackingAlg::initialize() { _trksystem->setOption( IMarlinTrkSystem::CFG::useQMS, _MSOn ) ; _trksystem->setOption( IMarlinTrkSystem::CFG::usedEdx, _ElossOn) ; _trksystem->setOption( IMarlinTrkSystem::CFG::useSmoothing, _SmoothOn) ; - _trksystem->init() ; - std::cout << "fucd ==============" << _trksystem << std::endl; + _trksystem->init() ; + debug() << "TrackSystem builded at address=" << _trksystem << endmsg; #ifdef MARLINTRK_DIAGNOSTICS_ON void * dcv = _trksystem->getDiagnositicsPointer(); @@ -155,7 +156,7 @@ StatusCode SiliconTrackingAlg::initialize() { } StatusCode SiliconTrackingAlg::execute(){ - + Navagation::Instance()->Initialize(); //_current_event = evt; //_allHits.reserve(1000); @@ -177,7 +178,6 @@ StatusCode SiliconTrackingAlg::execute(){ //debug() << "Processing Run[" << runNo << "]::Event[" << evtNo << "]" << endmsg; _trackImplVec.reserve(100); - _allHits.reserve(1000); int successVTX = InitialiseVTX(); int successFTD = 0; @@ -240,7 +240,6 @@ StatusCode SiliconTrackingAlg::execute(){ //edm4hep::LCRelationCollection* relCol = nullptr; auto trkCol = _outColHdl.createAndPut(); //auto relCol = _outRelColHdl.createAndPut(); - //std::cout << "fucd------------------" << std::endl; /* LCCollectionVec * trkCol = new LCCollectionVec(LCIO::TRACK); // if we want to point back to the hits we need to set the flag @@ -252,7 +251,7 @@ StatusCode SiliconTrackingAlg::execute(){ */ //FinalRefit(trkCol, relCol); FinalRefit(trkCol); - //std::cout << "fucd------------------" << std::endl; + debug() << "FinalRefit finish" << endmsg; // set the quality of the output collection switch (_output_track_col_quality) { @@ -402,7 +401,6 @@ void SiliconTrackingAlg::CleanUp() { } } _trackImplVec.clear(); - _allHits.clear(); } int SiliconTrackingAlg::InitialiseFTD() { @@ -451,7 +449,7 @@ int SiliconTrackingAlg::InitialiseFTD() { // V must be the global z axis if( fabs(V.dot(Z)) > eps ) { error() << "SiliconTrackingAlg: VXD Hit measurment vectors V is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; - exit(1); + exit(1); } if( fabs(U.dot(Z)) > eps ) { @@ -499,7 +497,7 @@ int SiliconTrackingAlg::InitialiseFTD() { } if (layer >= _nlayersFTD) { - error() << "SiliconTrackingAlg => fatal error in FTD : layer is outside allowed range : " << layer << " number of layers = " << _nlayersFTD << endmsg; + fatal() << "SiliconTrackingAlg => fatal error in FTD : layer is outside allowed range : " << layer << " number of layers = " << _nlayersFTD << endmsg; exit(1); } @@ -528,7 +526,19 @@ int SiliconTrackingAlg::InitialiseFTD() { success = 0; } + const edm4hep::TrackerHitCollection* rawHitCol = nullptr; if(hitFTDSpacePointCol){ + try{ + rawHitCol = _inFTDRawColHdl.get(); + } + catch ( GaudiException &e ) { + fatal() << "Collection " << _inFTDRawColHdl.fullKey() << " is unavailable in event " << _nEvt << endmsg; + success = 0; + } + } + + if(hitFTDSpacePointCol&&rawHitCol){ + Navagation::Instance()->AddTrackerHitCollection(rawHitCol); //LCCollection * hitCollection = evt->getCollection(_FTDSpacePointCollection.c_str()); //_colNamesTrackerHits[hitCollection] = _FTDSpacePointCollection; @@ -625,12 +635,10 @@ int SiliconTrackingAlg::InitialiseFTD() { } int SiliconTrackingAlg::InitialiseVTX() { - //std::cout << "fucd================" << std::endl; _nTotalVTXHits = 0; _nTotalSITHits = 0; _sectors.clear(); _sectors.resize(_nLayers*_nDivisionsInPhi*_nDivisionsInTheta); - //std::cout << "fucd================" << std::endl; int success = 1; // Reading out VTX Hits Collection //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -647,16 +655,13 @@ int SiliconTrackingAlg::InitialiseVTX() { //_colNamesTrackerHits[hitCollection] = _VTXHitCollection; //_colTrackerHits.push_back(hitCollection); - //std::cout << "fucd================1" << std::endl; int nelem = hitVTXCol->size(); - //std::cout << "fucd================2" << std::endl; debug() << "Number of VTX hits = " << nelem << endmsg; _nTotalVTXHits = nelem; for (int ielem=0; ielem<nelem; ++ielem) { //for(auto hit : *hitVTXCol){ edm4hep::TrackerHit hit = hitVTXCol->at(ielem); - //_allHits.push_back(hit); //gear::Vector3D U(1.0,hit->getU()[1],hit->getU()[0],gear::Vector3D::spherical); //gear::Vector3D V(1.0,hit->getV()[1],hit->getV()[0],gear::Vector3D::spherical); gear::Vector3D U(1.0,hit.getCovMatrix()[1],hit.getCovMatrix()[0],gear::Vector3D::spherical); @@ -674,11 +679,8 @@ int SiliconTrackingAlg::InitialiseVTX() { error() << "SiliconTrackingAlg: VXD Hit measurment vectors U is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; exit(1); } - //std::cout << "fucd: " << &hit << " " << &_allHits.back() << std::endl; - //TrackerHitExtended * hitExt = new TrackerHitExtended( &_allHits.back() ); TrackerHitExtended * hitExt = new TrackerHitExtended(hit); - std::cout << "Saved TrackerHit pointer in TrackerHitExtended " << ielem << ": " << hitExt->getTrackerHit() << std::endl; - //std::cout << (&_allHits.back())->getPosition()[0] << " " << hit.getCovMatrix()[2] << " " << hit.getCovMatrix()[5] << std::endl; + debug() << "Saved TrackerHit pointer in TrackerHitExtended " << ielem << ": " << hitExt->getTrackerHit() << std::endl; // SJA:FIXME: just use planar res for now hitExt->setResolutionRPhi(hit.getCovMatrix()[2]); @@ -731,12 +733,21 @@ int SiliconTrackingAlg::InitialiseVTX() { debug() << "Collection " << _inSITColHdl.fullKey() << " is unavailable in event " << _nEvt << endmsg; success = 0; } + + const edm4hep::TrackerHitCollection* rawHitCol = nullptr; + if(hitSITCol){ + try{ + rawHitCol = _inSITRawColHdl.get(); + } + catch ( GaudiException &e ) { + warning() << "Collection " << _inSITRawColHdl.fullKey() << " is unavailable in event " << _nEvt << ", if SIT is Space Point, it needed " << endmsg; + //success = 0; + } + } + if(hitSITCol){ - //LCCollection *hitCollection = evt->getCollection(_SITHitCollection.c_str()); - - //_colNamesTrackerHits[hitCollection] = _SITHitCollection; - //_colTrackerHits.push_back(hitCollection); - + if(rawHitCol) Navagation::Instance()->AddTrackerHitCollection(rawHitCol); + //debug() << "SITHitCollection pointer = " << hitSITCol << endmsg; int nelem = hitSITCol->size(); debug() << "Number of SIT hits = " << nelem << endmsg; @@ -774,13 +785,11 @@ int SiliconTrackingAlg::InitialiseVTX() { error() << "SiliconTrackingAlg => fatal error in SIT : layer is outside allowed range : " << layer << endmsg; exit(1); } - + // first check that we have not been given 1D hits by mistake, as they won't work here if ( UTIL::BitSet32( trkhit.getType() )[ UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL ] ) { - - error() << "SiliconTrackingAlg: SIT Hit cannot be of type UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL COMPOSITE SPACEPOINTS must be use instead. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; - exit(1); - + fatal() << "SiliconTrackingAlg: SIT Hit cannot be of type UTIL::ILDTrkHitTypeBit::ONE_DIMENSIONAL COMPOSITE SPACEPOINTS must be use instead. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; + exit(1); } // most likely case: COMPOSITE_SPACEPOINT hits formed from stereo strip hits else if ( UTIL::BitSet32( trkhit.getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ) { @@ -1042,11 +1051,9 @@ void SiliconTrackingAlg::ProcessOneSector(int iPhi, int iTheta) { for (int iInner=0;iInner<nHitsInner;iInner++) { // loop over hits in the inner sector TrackerHitExtended * innerHit = hitVecInner[iInner]; HelixClass helix; - //std::cout <<"fucd++++++++++++++++++++++1" << std::endl; - // test fit to triplet + // test fit to triplet TrackExtended * trackAR = TestTriplet(outerHit,middleHit,innerHit,helix); - //std::cout <<"fucd++++++++++++++++++++++2" << std::endl; - if ( trackAR != NULL ) { + if ( trackAR != NULL ) { int nHits = BuildTrack(outerHit,middleHit,innerHit,helix,nLR[2], iPhiLowInner,iPhiUpInner, iThetaLowInner,iThetaUpInner,trackAR); @@ -1055,7 +1062,6 @@ void SiliconTrackingAlg::ProcessOneSector(int iPhi, int iTheta) { counter ++ ; } - //std::cout <<"fucd++++++++++++++++++++++3" << std::endl; } // endloop over hits in the inner sector } // endloop over hits in the middle sector } // endloop over hits in the outer sector @@ -1078,13 +1084,11 @@ TrackExtended * SiliconTrackingAlg::TestTriplet(TrackerHitExtended * outerHit, /* Methods checks if the triplet of hits satisfies helix hypothesis */ - //std::cout << "fucd================1" << std::endl; // get the tracks already associated with the triplet TrackExtendedVec& trackOuterVec = outerHit->getTrackExtendedVec(); TrackExtendedVec& trackMiddleVec = middleHit->getTrackExtendedVec(); TrackExtendedVec& trackInnerVec = innerHit->getTrackExtendedVec(); - //std::cout << "fucd================2" << std::endl; // check if all the hits are already assigned to a track if ( (!trackOuterVec.empty()) && (!trackMiddleVec.empty()) && (!trackInnerVec.empty())) { @@ -1124,13 +1128,10 @@ TrackExtended * SiliconTrackingAlg::TestTriplet(TrackerHitExtended * outerHit, }// for outer }// for middle }// if all vectors are not empty - //std::cout << "fucd================3" << std::endl; - // float dZ = FastTripletCheck(innerHit, middleHit, outerHit); // if (fabs(dZ) > _minDistCutAttach) // return trackAR; - // increase triplet count ++_ntriplets; @@ -1146,11 +1147,7 @@ TrackExtended * SiliconTrackingAlg::TestTriplet(TrackerHitExtended * outerHit, float par[5]; float epar[15]; - /*fucd - for(int i=0;i<_allHits.size();i++){ - std::cout << &_allHits.at(i) << std::endl; - } - */ + // first hit xh[0] = outerHit->getTrackerHit()->getPosition()[0]; yh[0] = outerHit->getTrackerHit()->getPosition()[1]; @@ -1455,13 +1452,10 @@ int SiliconTrackingAlg::BuildTrack(TrackerHitExtended * outerHit, for (int layer = innerLayer-1; layer>=0; layer--) { // loop over remaining layers float distMin = 1.0e+20; TrackerHitExtended * assignedhit = NULL; - //std::cout << "fucd---------------------1" << std::endl; // loop over phi in the Inner region for (int ipInner=iPhiLow; ipInner<iPhiUp+1;ipInner++) { - // loop over theta in the Inner region for (int itInner=iThetaLow; itInner<iThetaUp+1;itInner++) { - int iPhiInner = ipInner; // catch wrap-around @@ -1506,12 +1500,9 @@ int SiliconTrackingAlg::BuildTrack(TrackerHitExtended * outerHit, } // endloop over hits in the Inner sector } // endloop over theta in the Inner region } // endloop over phi in the Inner region - //std::cout << "fucd---------------------2" << std::endl; // check if closest hit fulfills the min distance cut if (distMin < _minDistCutAttach) { - // if yes try to include it in the fit - TrackerHitExtendedVec& hvec = trackAR->getTrackerHitExtendedVec(); int nHits = int(hvec.size()); double * xh = new double[nHits+1]; @@ -1552,7 +1543,7 @@ int SiliconTrackingAlg::BuildTrack(TrackerHitExtended * outerHit, float chi2RPhi; float chi2Z; -// std::cout << "######## number of hits to fit with _fastfitter = " << NPT << endmsg; + //debug() << "######## number of hits to fit with _fastfitter = " << NPT << endmsg; _fastfitter->fastHelixFit(NPT, xh, yh, rh, ph, wrh, zh, wzh,iopt, par, epar, chi2RPhi, chi2Z); par[3] = par[3]*par[0]/fabs(par[0]); @@ -1602,14 +1593,10 @@ int SiliconTrackingAlg::BuildTrack(TrackerHitExtended * outerHit, } } // endloop over remaining layers - //std::cout << "fucd---------------------3" << std::endl; TrackerHitExtendedVec& hvec = trackAR->getTrackerHitExtendedVec(); int nTotalHits = int(hvec.size()); - -// std::cout << "######## number of hits to return = " << nTotalHits << endmsg; - + debug() << "######## number of hits to return = " << nTotalHits << endmsg; return nTotalHits; - } @@ -1822,7 +1809,7 @@ void SiliconTrackingAlg::CreateTrack(TrackExtended * trackAR ) { trackOld->setD0(d0); trackOld->setZ0(z0); - // std::cout << "Split track found " << d0 << " " << z0 << endmsg; + //debug() << "Split track found " << d0 << " " << z0 << endmsg; // killeb: In the original SiliconTrackingAlg this was in the NOT simple helix branch. // The rest of the code uses the simple helix branch, where ndf_D is never set. @@ -2559,14 +2546,14 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { float pxTot = 0.; float pyTot = 0.; float pzTot = 0.; - std::cout << "fucd============" << nTracks << std::endl; + debug() << "Total " << nTracks << " candidate tracks will be dealed" << endmsg; for (int iTrk=0;iTrk<nTracks;++iTrk) { TrackExtended * trackAR = _trackImplVec[iTrk]; TrackerHitExtendedVec& hitVec = trackAR->getTrackerHitExtendedVec(); int nHits = int(hitVec.size()); - std::cout << "fucd-------------" << iTrk << ": " << nHits << std::endl; + //debug() << " Track " << iTrk << " has hits: " << nHits << endmsg; if( nHits >= _minimalHits) { // int * lh = new int[nHits]; std::vector<int> lh; @@ -2586,7 +2573,6 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { helix->Initialize_Canonical(phi0, d0, z0, omega, tanlambda, _bField); - // get the point of closest approach to the reference point // here it is implicitly assumed that the reference point is the origin float Pos[3]; @@ -2594,7 +2580,6 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { Pos[1] = d0*cos(phi0); Pos[2] = z0; - std::cout << "fucd------------------1" << std::endl; // at this point is is possible to have hits from the same layer ... // so a check is made to ensure that the hit with the smallest distance to the // current helix hypothosis is used, the other hit has lh set to 0 @@ -2689,6 +2674,7 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { // check if the hit has been rejected as being on the same layer and further from the helix lh==0 if (lh[i] == 1) { edm4hep::TrackerHit * trkHit = hitVec[i]->getTrackerHit(); + debug() << "TrackerHit " << i << " address = " << trkHit << endmsg; nFit++; if(trkHit) { trkHits.push_back(trkHit); @@ -2707,12 +2693,10 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { debug() << "SiliconTrackingAlg::FinalRefit: Cannot fit less than 3 hits. Number of hits = " << trkHits.size() << endmsg; continue ; } - std::cout << "fucd------------------2" << std::endl; //TrackImpl* Track = new TrackImpl ; auto track = trk_col->create(); //fucd //edm4hep::Track track;// = new edm4hep::Track; - std::cout << "fucd------------------3" << std::endl; // setup initial dummy covariance matrix //std::vector<float> covMatrix; //covMatrix.resize(15); @@ -2739,7 +2723,7 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { } sort(r2_values.begin(),r2_values.end()); - //std::cout << "fucd------------------3" << std::endl; + trkHits.clear(); trkHits.reserve(r2_values.size()); @@ -2782,18 +2766,16 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { } int status = 0; - std::cout << "fucd------------------3" << std::endl; + debug() << "call createFinalisedLCIOTrack now" << endmsg; try { status = MarlinTrk::createFinalisedLCIOTrack(marlinTrk, trkHits, &track, fit_backwards, covMatrix, _bField, _maxChi2PerHit); } catch (...) { - - // delete Track; + // delete Track; // delete marlinTrk; - error() << "MarlinTrk::createFinalisedLCIOTrack " << endmsg; - throw ; - + error() << "MarlinTrk::createFinalisedLCIOTrack fail" << endmsg; + //throw ; } - std::cout << "fucd------------------4" << std::endl; + debug() << "createFinalisedLCIOTrack finish" << endmsg; /* #ifdef MARLINTRK_DIAGNOSTICS_ON if ( status != IMarlinTrack::success && _runMarlinTrkDiagnostics ) { @@ -2812,10 +2794,12 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { marlinTrk->getHitsInFit(hits_in_fit); for ( unsigned ihit = 0; ihit < hits_in_fit.size(); ++ihit) { - all_hits.push_back(hits_in_fit[ihit].first); + debug() << "Hit address=" << hits_in_fit[ihit].first << endmsg; + edm4hep::TrackerHit* trk = hits_in_fit[ihit].first; + all_hits.push_back(trk);//hits_in_fit[ihit].first); } - UTIL::BitField64 cellID_encoder( lcio::ILDCellID0::encoder_string ) ; + UTIL::BitField64 cellID_encoder( UTIL::ILDCellID0::encoder_string ) ; MarlinTrk::addHitNumbersToTrack(&track, all_hits, true, cellID_encoder); @@ -2844,18 +2828,15 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { //if (nhits_in_ftd > 0) Track->setTypeBit( lcio::ILDDetID::FTD ) ; //if (nhits_in_sit > 0) Track->setTypeBit( lcio::ILDDetID::SIT ) ; - - if( status != IMarlinTrack::success ) { - //delete track; - debug() << "SiliconTrackingAlg::FinalRefit: Track fit failed with error code " << status << " track dropped. Number of hits = "<< trkHits.size() << endmsg; + debug() << "FinalRefit: Track fit failed with error code " << status << " track dropped. Number of hits = "<< trkHits.size() << endmsg; continue ; } if( track.getNdf() < 0) { //delete track; - debug() << "SiliconTrackingAlg::FinalRefit: Track fit returns " << track.getNdf() << " degress of freedom track dropped. Number of hits = "<< trkHits.size() << endmsg; + debug() << "FinalRefit: Track fit returns " << track.getNdf() << " degress of freedom track dropped. Number of hits = "<< trkHits.size() << endmsg; //delete track; continue ; } @@ -2908,18 +2889,14 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { } } - debug() << "SiliconTrackingAlg -> run " << _nRun - << " event " << _nEvt << endmsg; + debug() << " -> run " << _nRun << " event " << _nEvt << endmsg; debug() << "Number of Si tracks = " << nSiSegments << endmsg; debug() << "Total 4-momentum of Si Tracks : E = " << std::setprecision(7) << eTot << " Px = " << pxTot << " Py = " << pyTot << " Pz = " << pzTot << endmsg; - - } - StatusCode SiliconTrackingAlg::setupGearGeom(){ auto _gear = service<IGearSvc>("GearSvc"); if ( !_gear ) { diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.h b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.h index e5cfca0c..adb20296 100644 --- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.h +++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.h @@ -10,7 +10,7 @@ #include "edm4hep/SimTrackerHitCollection.h" #include "edm4hep/TrackerHitCollection.h" #include "edm4hep/TrackCollection.h" -//#include "edm4hep/LCRelationCollection.h" +#include "edm4hep/MCRecoTrackerAssociationCollection.h" //#include "lcio.h" #include <string> @@ -195,7 +195,7 @@ class SiliconTrackingAlg : public GaudiAlgorithm { virtual StatusCode finalize() ; -protected: + protected: int _nRun ; int _nEvt ; @@ -214,7 +214,8 @@ protected: //std::string _MarlinTrkDiagnosticsName; typedef std::vector<int> IntVec; - Gaudi::Property<IntVec> _Combinations{this, "LayerCombinations", {8,6,5, 8,6,4, 8,6,3, 8,6,2, 8,5,3, 8,5,2, 8,4,3, 8,4,2, 6,5,3, 6,5,2, 6,4,3, 6,4,2, 6,3,1, 6,3,0, 6,2,1, 6,2,0, + Gaudi::Property<IntVec> _Combinations{this, "LayerCombinations", + {8,6,5, 8,6,4, 8,6,3, 8,6,2, 8,5,3, 8,5,2, 8,4,3, 8,4,2, 6,5,3, 6,5,2, 6,4,3, 6,4,2, 6,3,1, 6,3,0, 6,2,1, 6,2,0, 5,3,1, 5,3,0, 5,2,1, 5,2,0, 4,3,1, 4,3,0, 4,2,1, 4,2,0}}; Gaudi::Property<IntVec> _CombinationsFTD{this, "LayerCombinationsFTD", {4,3,2, 4,3,1, 4,3,0, 4,2,1, 4,2,0, 4,1,0, 3,2,1, 3,2,0, 3,1,0, 2,1,0, 9,8,7, 9,8,6, 9,8,5, 9,7,6, 9,7,5, 9,6,5, 8,7,6, 8,7,5, 8,6,5, 7,6,5}}; @@ -287,12 +288,12 @@ protected: // Input collections DataHandle<edm4hep::EventHeaderCollection> _headerColHdl{"EventHeaderCol", Gaudi::DataHandle::Reader, this}; DataHandle<edm4hep::MCParticleCollection> _inMCColHdl{"MCParticle", Gaudi::DataHandle::Reader, this}; - //DataHandle<edm4hep::TrackerHitPlaneCollection> _inVTXColHdl{"VXDCollection", Gaudi::DataHandle::Reader, this}; - //DataHandle<edm4hep::TrackerHitPlaneCollection> _inFTDPixelColHdl{"FTDPixelCollection", Gaudi::DataHandle::Reader, this}; DataHandle<edm4hep::TrackerHitCollection> _inVTXColHdl{"VXDTrackerHits", Gaudi::DataHandle::Reader, this}; DataHandle<edm4hep::TrackerHitCollection> _inFTDPixelColHdl{"FTDPixelTrackerHits", Gaudi::DataHandle::Reader, this}; DataHandle<edm4hep::TrackerHitCollection> _inFTDSpacePointColHdl{"FTDSpacePoints", Gaudi::DataHandle::Reader, this}; - DataHandle<edm4hep::TrackerHitCollection> _inSITColHdl{"SITTrackerHits", Gaudi::DataHandle::Reader, this}; + DataHandle<edm4hep::TrackerHitCollection> _inSITColHdl{"SITSpacePoints", Gaudi::DataHandle::Reader, this}; + DataHandle<edm4hep::TrackerHitCollection> _inSITRawColHdl{"SITTrackerHits", Gaudi::DataHandle::Reader, this}; + DataHandle<edm4hep::TrackerHitCollection> _inFTDRawColHdl{"FTDStripTrackerHits", Gaudi::DataHandle::Reader, this}; // Output collections DataHandle<edm4hep::TrackCollection> _outColHdl{"SiTracks", Gaudi::DataHandle::Writer, this}; //DataHandle<edm4hep::LCRelationCollection> _outRelColHdl{"TrackerHitRelations", Gaudi::DataHandle::Reader, this}; @@ -419,8 +420,6 @@ protected: static const int _output_track_col_quality_GOOD; static const int _output_track_col_quality_FAIR; static const int _output_track_col_quality_POOR; - - std::vector<edm4hep::TrackerHit> _allHits; } ; #endif diff --git a/Service/TrackSystemSvc/CMakeLists.txt b/Service/TrackSystemSvc/CMakeLists.txt index f441f576..b44c4a82 100644 --- a/Service/TrackSystemSvc/CMakeLists.txt +++ b/Service/TrackSystemSvc/CMakeLists.txt @@ -9,12 +9,11 @@ find_package(KalTest REQUIRED) find_package(KalDet REQUIRED) #find_package(streamlog REQUIRED) -gaudi_depends_on_subdirs(Service/GearSvc Detector/DetInterface) +gaudi_depends_on_subdirs(Service/GearSvc Detector/DetInterface Utilities/DataHelper) set(TrackSystemSvc_srcs src/*.cpp) set(TrackSystemSvcLib_srcs src/*.cc) - gaudi_install_headers(TrackSystemSvc) message( "${KalDet_INCLUDE_DIRS}" ) @@ -23,7 +22,7 @@ message( "${KalDet_LIBRARIES}" ) gaudi_add_library(TrackSystemSvcLib ${TrackSystemSvcLib_srcs} PUBLIC_HEADERS TrackSystemSvc INCLUDE_DIRS GaudiKernel ROOT CLHEP gear ${LCIO_INCLUDE_DIRS} ${KalDet_INCLUDE_DIRS} ${KalTest_INCLUDE_DIRS} ${EDM4HEP_INCLUDE_DIRS} - LINK_LIBRARIES GaudiKernel ROOT CLHEP $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearsurf.so ${LCIO_LIBRARIES} ${KalDet_LIBRARIES} ${KalTest_LIBRARIES} -Wl,--no-as-needed + LINK_LIBRARIES DataHelperLib GaudiKernel ROOT CLHEP $ENV{GEAR}/lib/libgear.so $ENV{GEAR}/lib/libgearsurf.so ${LCIO_LIBRARIES} ${KalDet_LIBRARIES} ${KalTest_LIBRARIES} -Wl,--no-as-needed EDM4HEP::edm4hep EDM4HEP::edm4hepDict -Wl,--as-needed ) diff --git a/Service/TrackSystemSvc/src/HelixTrack.cc b/Service/TrackSystemSvc/src/HelixTrack.cc index 5934082d..8901f503 100644 --- a/Service/TrackSystemSvc/src/HelixTrack.cc +++ b/Service/TrackSystemSvc/src/HelixTrack.cc @@ -17,16 +17,13 @@ HelixTrack::HelixTrack( const edm4hep::Vector3d& x1, const edm4hep::Vector3d& x2 TVector3 p2( x2[0], x2[1], x2[2] ); TVector3 p3( x3[0], x3[1], x3[2] ); /* - streamlog_out(DEBUG2) << "HelixTrack::HelixTrack Create from hits: \n " - << "P1 x = " << p1.x() << " y = " << p1.y() << " z = " << p1.z() << " r = " << p1.Perp() << "\n " - << "P2 x = " << p2.x() << " y = " << p2.y() << " z = " << p2.z() << " r = " << p2.Perp() << "\n " - << "P3 x = " << p3.x() << " y = " << p3.y() << " z = " << p3.z() << " r = " << p3.Perp() << "\n " - << "Bz = " << Bz << " direction = " << direction - << std::endl; + std::cout << "debug: " << "HelixTrack::HelixTrack Create from hits: \n " + << "P1 x = " << p1.x() << " y = " << p1.y() << " z = " << p1.z() << " r = " << p1.Perp() << "\n " + << "P2 x = " << p2.x() << " y = " << p2.y() << " z = " << p2.z() << " r = " << p2.Perp() << "\n " + << "P3 x = " << p3.x() << " y = " << p3.y() << " z = " << p3.z() << " r = " << p3.Perp() << "\n " + << "Bz = " << Bz << " direction = " << direction + << std::endl; */ - - - THelicalTrack* helicalTrack; helicalTrack = new THelicalTrack( p1, p2, p3, Bz, direction ); diff --git a/Service/TrackSystemSvc/src/MarlinKalTest.cc b/Service/TrackSystemSvc/src/MarlinKalTest.cc index ee0cd734..b6e32021 100644 --- a/Service/TrackSystemSvc/src/MarlinKalTest.cc +++ b/Service/TrackSystemSvc/src/MarlinKalTest.cc @@ -111,10 +111,8 @@ namespace MarlinTrk{ _det->Install( *supportdet ) ; } catch( gear::UnknownParameterException& e){ - - //streamlog_out( ERROR ) << "MarlinKalTest - Support Material missing in gear file: Cannot proceed as propagations and extrapolations for cannonical track states are impossible: exit(1) called" << std::endl ; + std::cout << "Error: " << "MarlinKalTest - Support Material missing in gear file: Cannot proceed as propagations and extrapolations for cannonical track states are impossible: exit(1) called" << std::endl ; exit(1); - } try{ @@ -124,7 +122,7 @@ namespace MarlinTrk{ _det->Install( *vxddet ) ; } catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - VXD missing in gear file: VXD Material Not Built " << std::endl ; + std::cout << "Warning: " << " MarlinKalTest - VXD missing in gear file: VXD Material Not Built " << std::endl ; } @@ -148,7 +146,7 @@ namespace MarlinTrk{ _det->Install( *sitdet ) ; } catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - Simple Cylinder Based SIT missing in gear file: Simple Cylinder Based SIT Not Built " << std::endl ; + std::cout << "Warning: " << " MarlinKalTest - Simple Cylinder Based SIT missing in gear file: Simple Cylinder Based SIT Not Built " << std::endl ; } } @@ -158,8 +156,8 @@ namespace MarlinTrk{ this->storeActiveMeasurementModuleIDs(setdet); _det->Install( *setdet ) ; } - catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - SET missing in gear file: SET Not Built " << std::endl ; + catch( gear::UnknownParameterException& e){ + std::cout << "Warning: " << " MarlinKalTest - SET missing in gear file: SET Not Built " << std::endl ; } @@ -172,7 +170,7 @@ namespace MarlinTrk{ FTD_found = true ; } catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - Petal Based FTD missing in gear file: Petal Based FTD Not Built " << std::endl ; + std::cout << "Warning: " << " MarlinKalTest - Petal Based FTD missing in gear file: Petal Based FTD Not Built " << std::endl ; } if( ! FTD_found ){ @@ -183,7 +181,7 @@ namespace MarlinTrk{ _det->Install( *ftddet ) ; } catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - Simple Disc Based FTD missing in gear file: Simple Disc Based FTD Not Built " << std::endl ; + std::cout << "Warning: " << " MarlinKalTest - Simple Disc Based FTD missing in gear file: Simple Disc Based FTD Not Built " << std::endl ; } } @@ -194,7 +192,7 @@ namespace MarlinTrk{ _det->Install( *tpcdet ) ; } catch( gear::UnknownParameterException& e){ - //streamlog_out( MESSAGE ) << " MarlinKalTest - TPC missing in gear file: TPC Not Built " << std::endl ; + std::cout << "Warning: " << " MarlinKalTest - TPC missing in gear file: TPC Not Built " << std::endl ; } } diff --git a/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc b/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc index 473f5ac6..a98029db 100644 --- a/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc +++ b/Service/TrackSystemSvc/src/MarlinKalTestTrack.cc @@ -116,22 +116,21 @@ namespace MarlinTrk { } int MarlinKalTestTrack::addHit( edm4hep::TrackerHit* trkhit, const ILDVMeasLayer* ml) { - - std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " addr: " << trkhit << " ml = " << ml << std::endl ; - + //std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " addr: " << trkhit << " ml = " << ml << std::endl ; if( trkhit && ml ) { //if(ml){ return this->addHit( trkhit, ml->ConvertLCIOTrkHit(trkhit), ml) ; } else { + std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " addr: " << trkhit << " ml = " << ml << std::endl ; //streamlog_out( ERROR ) << " MarlinKalTestTrack::addHit - bad inputs " << trkhit << " ml : " << ml << std::endl ; - return bad_intputs ; + return bad_intputs ; } return bad_intputs ; } int MarlinKalTestTrack::addHit( edm4hep::TrackerHit* trkhit, ILDVTrackHit* kalhit, const ILDVMeasLayer* ml) { - std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " ILDVTrackHit: " << kalhit << " ml = " << ml << std::endl ; + //std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " ILDVTrackHit: " << kalhit << " ml = " << ml << std::endl ; if( kalhit && ml ) { //if(ml){ _kalhits->Add(kalhit ) ; // Add hit and set surface found @@ -139,36 +138,26 @@ namespace MarlinTrk { // _kaltest_hits_to_lcio_hits[kalhit] = trkhit ; // add hit to map relating kaltest and lcio hits } else { - delete kalhit; + //std::cout << "MarlinKalTestTrack::addHit: trkhit = " << trkhit->id() << " ILDVTrackHit: " << kalhit << " ml = " << ml << std::endl ; + if(kalhit) delete kalhit; return bad_intputs ; } - /* - streamlog_out(DEBUG1) << "MarlinKalTestTrack::addHit: hit added " - << "number of hits for track = " << _kalhits->GetEntries() - << std::endl ; - */ + //std::cout << "debug: " << "MarlinKalTestTrack::addHit: hit added number of hits for track = " << _kalhits->GetEntries() << std::endl ; return success ; - } int MarlinKalTestTrack::initialise( bool fitDirection ) {; - - //SJA:FIXME: check here if the track is already initialised, and for now don't allow it to be re-initialised // if the track is going to be re-initialised then we would need to do it directly on the first site if ( _initialised ) { - throw MarlinTrk::Exception("Track fit already initialised"); - } if (_kalhits->GetEntries() < 3) { - - //streamlog_out( ERROR) << "<<<<<< MarlinKalTestTrack::initialise: Shortage of Hits! nhits = " - //<< _kalhits->GetEntries() << " >>>>>>>" << std::endl; + std::cout << "Error: <<<<<< MarlinKalTestTrack::initialise: Shortage of Hits! nhits = " + << _kalhits->GetEntries() << " >>>>>>>" << std::endl; return error ; - } _fitDirection = fitDirection ; @@ -206,7 +195,7 @@ namespace MarlinTrk { pDummyHit = (new ILDPlanarStripHit(*static_cast<ILDPlanarStripHit*>( startingHit ))); } else { - //streamlog_out( ERROR) << "<<<<<<<<< MarlinKalTestTrack::initialise: dynamic_cast failed for hit type >>>>>>>" << std::endl; + std::cout << "Error: <<<<<<<<< MarlinKalTestTrack::initialise: dynamic_cast failed for hit type >>>>>>>" << std::endl; return error ; } @@ -972,8 +961,10 @@ namespace MarlinTrk { int MarlinKalTestTrack::getHitsInFit( std::vector<std::pair<edm4hep::TrackerHit*, double> >& hits ) { - + //std::cout << "debug: _hit_chi2_values address= " << &_hit_chi2_values << " " << &(*(_hit_chi2_values.begin())) << " want to copy to hits address=" << &hits << std::endl; std::copy( _hit_chi2_values.begin() , _hit_chi2_values.end() , std::back_inserter( hits ) ) ; + //hits.resize(_hit_chi2_values.size()); + //std::copy( _hit_chi2_values.begin() , _hit_chi2_values.end() , hits.begin()); // this needs more thought. What about when the hits are added using addAndFit? @@ -994,8 +985,7 @@ namespace MarlinTrk { int MarlinKalTestTrack::getOutliers( std::vector<std::pair<edm4hep::TrackerHit*, double> >& hits ) { std::copy( _outlier_chi2_values.begin() , _outlier_chi2_values.end() , std::back_inserter( hits ) ) ; - - + // this needs more thought. What about when the hits are added using addAndFit? // // need to check the order so that we can return the list ordered in time // // as they will be added to _hit_chi2_values in the order of fitting @@ -1006,13 +996,10 @@ namespace MarlinTrk { // } else { // std::copy( _outlier_chi2_values.begin() , _outlier_chi2_values.end() , std::back_inserter( hits ) ) ; // } - - + return success ; - } - int MarlinKalTestTrack::getNDF( int& ndf ){ if( _initialised == false ) { diff --git a/Service/TrackSystemSvc/src/MarlinTrkUtils.cc b/Service/TrackSystemSvc/src/MarlinTrkUtils.cc index f77df79e..cf8ae82b 100644 --- a/Service/TrackSystemSvc/src/MarlinTrkUtils.cc +++ b/Service/TrackSystemSvc/src/MarlinTrkUtils.cc @@ -1,4 +1,3 @@ - #include "TrackSystemSvc/MarlinTrkUtils.h" #include <vector> @@ -7,7 +6,8 @@ #include "TrackSystemSvc/IMarlinTrack.h" #include "TrackSystemSvc/HelixTrack.h" -#include "lcio.h" +#include "DataHelper/Navagation.h" +//#include "lcio.h" //#include <IMPL/TrackImpl.h> //#include <IMPL/TrackStateImpl.h> //#include <EVENT/TrackerHit.h> @@ -101,21 +101,19 @@ namespace MarlinTrk { if ( hit_list.empty() ) return IMarlinTrack::bad_intputs ; if( track == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::finaliseLCIOTrack: TrackImpl == NULL ") ) ; + throw std::runtime_error( "MarlinTrk::finaliseLCIOTrack: TrackImpl == NULL " ) ; } int return_error = 0; - - /////////////////////////////////////////////////////// // produce prefit parameters /////////////////////////////////////////////////////// edm4hep::TrackState pre_fit ; - std::cout << "fucd:=====================" << std::endl; + //std::cout << "debug:=====================before createPrefit" << std::endl; return_error = createPrefit(hit_list, &pre_fit, bfield_z, fit_backwards); - std::cout << "fucd:=====================" << return_error << std::endl; + //std::cout << "debug:=====================after createPrefit return code=" << return_error << std::endl; pre_fit.covMatrix = initial_cov_for_prefit; /////////////////////////////////////////////////////// @@ -127,12 +125,9 @@ namespace MarlinTrk { return_error = createFinalisedLCIOTrack( marlinTrk, hit_list, track, fit_backwards, &pre_fit, bfield_z, maxChi2Increment); } else { - std::cout << "MarlinTrk::createFinalisedLCIOTrack : Prefit failed error = " << return_error << std::endl; + //std::cout << "MarlinTrk::createFinalisedLCIOTrack : Prefit failed error = " << return_error << std::endl; } - - return return_error; - } int createFinalisedLCIOTrack( IMarlinTrack* marlinTrk, std::vector<edm4hep::TrackerHit*>& hit_list, edm4hep::Track* track, bool fit_backwards, edm4hep::TrackState* pre_fit, float bfield_z, double maxChi2Increment){ @@ -144,11 +139,11 @@ namespace MarlinTrk { if ( hit_list.empty() ) return IMarlinTrack::bad_intputs ; if( track == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::finaliseLCIOTrack: TrackImpl == NULL ") ) ; + throw std::runtime_error("MarlinTrk::finaliseLCIOTrack: TrackImpl == NULL "); } if( pre_fit == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::finaliseLCIOTrack: TrackStateImpl == NULL ") ) ; + throw std::runtime_error("MarlinTrk::finaliseLCIOTrack: TrackStateImpl == NULL "); } @@ -156,10 +151,9 @@ namespace MarlinTrk { if( fit_status != IMarlinTrack::success ){ - std::cout << "MarlinTrk::createFinalisedLCIOTrack fit failed: fit_status = " << fit_status << std::endl; + //std::cout << "MarlinTrk::createFinalisedLCIOTrack fit failed: fit_status = " << fit_status << std::endl; return fit_status; - } int error = finaliseLCIOTrack(marlinTrk, track, hit_list); @@ -179,11 +173,11 @@ namespace MarlinTrk { if ( hit_list.empty() ) return IMarlinTrack::bad_intputs; if( marlinTrk == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::createFit: IMarlinTrack == NULL ") ) ; + throw std::runtime_error("MarlinTrk::createFit: IMarlinTrack == NULL "); } if( pre_fit == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::createFit: TrackStateImpl == NULL ") ) ; + throw std::runtime_error("MarlinTrk::createFit: TrackStateImpl == NULL "); } int return_error = 0; @@ -212,7 +206,7 @@ namespace MarlinTrk { std::vector<edm4hep::TrackerHit*>::iterator it = hit_list.begin(); // start by trying to add the hits to the track we want to finally use. - std::cout << "MarlinTrk::createFit Start Fit: AddHits: number of hits to fit " << hit_list.size() << std::endl; + //std::cout << "MarlinTrk::createFit Start Fit: AddHits: number of hits to fit " << hit_list.size() << std::endl; std::vector<edm4hep::TrackerHit*> added_hits; unsigned int ndof_added = 0; @@ -221,31 +215,23 @@ namespace MarlinTrk { edm4hep::TrackerHit* trkHit = *it; bool isSuccessful = false; - std::cout << "debug TrackerHit pointer " << trkHit << std::endl; - if( UTIL::BitSet32( trkHit->getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint - + //std::cout << "debug: TrackerHit pointer " << trkHit << std::endl; + if( UTIL::BitSet32( trkHit->getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint //Split it up and add both hits to the MarlinTrk //const EVENT::LCObjectVec rawObjects = trkHit->getRawHits(); - std::cout << "space point is not still valid! pelease wait updating..." <<std::endl; - exit(1); - /* + //std::cout << "space point is not still valid! pelease wait updating..." <<std::endl; + //exit(1); int nRawHit = trkHit->rawHits_size(); - for( unsigned k=0; k< nRawHit; k++ ){ - - edm4hep::TrackerHit* rawHit = dynamic_cast< edm4hep::TrackerHit* >(trkHit->getRawHits(k)); - - if( marlinTrk->addHit( rawHit ) == IMarlinTrack::success ){ - - isSuccessful = true; //if at least one hit from the spacepoint gets added + edm4hep::TrackerHit* rawHit = Navagation::Instance()->GetTrackerHit(trkHit->getRawHits(k)); + if( marlinTrk->addHit( rawHit ) == IMarlinTrack::success ){ + isSuccessful = true; //if at least one hit from the spacepoint gets added ++ndof_added; // streamlog_out(DEBUG4) << "MarlinTrk::createFit ndof_added = " << ndof_added << std::endl; } } - */ } else { // normal non composite hit - if (marlinTrk->addHit( trkHit ) == IMarlinTrack::success ) { isSuccessful = true; ndof_added += 2; @@ -257,7 +243,7 @@ namespace MarlinTrk { added_hits.push_back(trkHit); } else{ - std::cout << "Hit " << it - hit_list.begin() << " Dropped " << std::endl; + //std::cout << "MarlinTrkUtils::createFit Hit " << it - hit_list.begin() << " Dropped " << std::endl; } } @@ -286,7 +272,7 @@ namespace MarlinTrk { // try fit and return error /////////////////////////////////////////////////////// int status = marlinTrk->fit(maxChi2Increment); - std::cout << "fucd===================" << status << std::endl; + //std::cout << "debug:===================createFit " << status << std::endl; return status; @@ -440,47 +426,35 @@ namespace MarlinTrk { edm4hep::TrackerHit* trkHit = hit_list[ihit]; if( UTIL::BitSet32( trkHit->getType() )[ UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ] ){ //it is a composite spacepoint - std::cout << "Error: space point is not still valid! pelease wait updating..." <<std::endl; - exit(1); - /* - // get strip hits + //std::cout << "Error: space point is not still valid! pelease wait updating..." <<std::endl; + //exit(1); + // get strip hits int nRawHit = trkHit->rawHits_size(); - for( unsigned k=0; k< nRawHit; k++ ){ - - edm4hep::TrackerHit* rawHit = dynamic_cast< edm4hep::TrackerHit* >(trkHit->getRawHits(k)); - - bool is_outlier = false; - - // here we loop over outliers as this will be faster than looping over the used hits + edm4hep::TrackerHit* rawHit = Navagation::Instance()->GetTrackerHit(trkHit->getRawHits(k)); + bool is_outlier = false; + // here we loop over outliers as this will be faster than looping over the used hits for ( unsigned ohit = 0; ohit < outliers.size(); ++ohit) { - - if ( rawHit == outliers[ohit].first ) { + if ( rawHit->id() == outliers[ohit].first->id() ) { is_outlier = true; break; // break out of loop over outliers } } - if (is_outlier == false) { used_hits.push_back(hit_list[ihit]); - track->addTrackerHit(*used_hits.back()); + track->addToTrackerHits(*used_hits.back()); break; // break out of loop over rawObjects } } - */ } else { - bool is_outlier = false; - // here we loop over outliers as this will be faster than looping over the used hits for ( unsigned ohit = 0; ohit < outliers.size(); ++ohit) { - if ( trkHit == outliers[ohit].first ) { is_outlier = true; break; // break out of loop over outliers } } - if (is_outlier == false) { used_hits.push_back(hit_list[ihit]); track->addToTrackerHits(*used_hits.back()); @@ -693,36 +667,34 @@ namespace MarlinTrk { // check inputs /////////////////////////////////////////////////////// if( track == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::addHitsToTrack: TrackImpl == NULL ") ) ; + throw std::runtime_error( std::string("MarlinTrk::addHitsToTrack: TrackImpl == NULL ") ) ; } - std::map<int, int> hitNumbers; - hitNumbers[lcio::ILDDetID::VXD] = 0; - hitNumbers[lcio::ILDDetID::SIT] = 0; - hitNumbers[lcio::ILDDetID::FTD] = 0; - hitNumbers[lcio::ILDDetID::TPC] = 0; - hitNumbers[lcio::ILDDetID::SET] = 0; - hitNumbers[lcio::ILDDetID::ETD] = 0; + hitNumbers[UTIL::ILDDetID::VXD] = 0; + hitNumbers[UTIL::ILDDetID::SIT] = 0; + hitNumbers[UTIL::ILDDetID::FTD] = 0; + hitNumbers[UTIL::ILDDetID::TPC] = 0; + hitNumbers[UTIL::ILDDetID::SET] = 0; + hitNumbers[UTIL::ILDDetID::ETD] = 0; for(unsigned int j=0; j<hit_list.size(); ++j) { - cellID_encoder.setValue(hit_list.at(j)->getCellID()) ; int detID = cellID_encoder[UTIL::ILDCellID0::subdet]; ++hitNumbers[detID]; - // streamlog_out( DEBUG1 ) << "Hit from Detector " << detID << std::endl; + //std::cout << "debug: " << "Hit from Detector " << detID << std::endl; } int offset = 2 ; if ( hits_in_fit == false ) { // all hit atributed by patrec offset = 1 ; } - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::VXD]); - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::FTD]); - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::SIT]); - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::TPC]); - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::SET]); - track->addToSubDetectorHitNumbers(hitNumbers[lcio::ILDDetID::ETD]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::VXD]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::FTD]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::SIT]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::TPC]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::SET]); + track->addToSubDetectorHitNumbers(hitNumbers[UTIL::ILDDetID::ETD]); //track->subdetectorHitNumbers().resize(2 * lcio::ILDDetID::ETD); //track->subdetectorHitNumbers()[ 2 * lcio::ILDDetID::VXD - offset ] = hitNumbers[lcio::ILDDetID::VXD]; //track->subdetectorHitNumbers()[ 2 * lcio::ILDDetID::FTD - offset ] = hitNumbers[lcio::ILDDetID::FTD]; @@ -730,9 +702,6 @@ namespace MarlinTrk { //track->subdetectorHitNumbers()[ 2 * lcio::ILDDetID::TPC - offset ] = hitNumbers[lcio::ILDDetID::TPC]; //track->subdetectorHitNumbers()[ 2 * lcio::ILDDetID::SET - offset ] = hitNumbers[lcio::ILDDetID::SET]; //track->subdetectorHitNumbers()[ 2 * lcio::ILDDetID::ETD - offset ] = hitNumbers[lcio::ILDDetID::ETD]; - - - } void addHitNumbersToTrack(edm4hep::Track* track, std::vector<std::pair<edm4hep::TrackerHit* , double> >& hit_list, bool hits_in_fit, UTIL::BitField64& cellID_encoder){ @@ -741,7 +710,7 @@ namespace MarlinTrk { // check inputs /////////////////////////////////////////////////////// if( track == 0 ){ - throw EVENT::Exception( std::string("MarlinTrk::addHitsToTrack: TrackImpl == NULL ") ) ; + throw std::runtime_error( std::string("MarlinTrk::addHitsToTrack: TrackImpl == NULL ") ) ; } std::map<int, int> hitNumbers; @@ -754,11 +723,10 @@ namespace MarlinTrk { hitNumbers[lcio::ILDDetID::ETD] = 0; for(unsigned int j=0; j<hit_list.size(); ++j) { - cellID_encoder.setValue(hit_list.at(j).first->getCellID()) ; int detID = cellID_encoder[UTIL::ILDCellID0::subdet]; ++hitNumbers[detID]; - // streamlog_out( DEBUG1 ) << "Hit from Detector " << detID << std::endl; + //std::cout << "debug: Hit from Detector " << detID << std::endl; } int offset = 2 ; -- GitLab