74 for (std::vector<Track *>::iterator it =
tracks_.begin(); it !=
tracks_.end(); ++it) {
80 if (
hits_.size() > 0) {
81 for (std::vector<TrackerHit *>::iterator it =
hits_.begin(); it !=
hits_.end(); ++it) {
88 for (std::vector<RawSvtHit *>::iterator it =
rawhits_.begin(); it !=
rawhits_.end(); ++it) {
106 UTIL::BitField64 decoder(
"system:6,barrel:3,layer:4,module:12,sensor:1,side:32:-2,strip:12");
108 UTIL::LCRelationNavigator* rawTracker_hit_fits_nav =
nullptr;
109 EVENT::LCCollection* raw_svt_hit_fits =
nullptr;
111 auto evColls =
event->getLCEvent()->getCollectionNames();
112 auto it = std::find (evColls->begin(), evColls->end(),
hitFitsCollLcio_.c_str());
114 if(it == evColls->end()) hasFits =
false;
119 rawTracker_hit_fits_nav =
new UTIL::LCRelationNavigator(raw_svt_hit_fits);
122 EVENT::LCCollection* tracks{
nullptr};
128 catch (EVENT::DataNotAvailableException e)
130 std::cout << e.what() << std::endl;
135 std::map <int, std::vector<int> > SharedHits;
137 std::map <int, bool> SharedHitsLy0;
138 std::map <int, bool> SharedHitsLy1;
140 for (
int itrack = 0; itrack < tracks->getNumberOfElements();++itrack) {
141 SharedHits[itrack] = {};
142 SharedHitsLy0[itrack] =
false;
143 SharedHitsLy1[itrack] =
false;
147 for (
int itrack = 0; itrack < tracks->getNumberOfElements(); ++itrack) {
150 EVENT::Track* lc_track =
static_cast<EVENT::Track*
>(tracks->getElementAt(itrack));
154 EVENT::LCCollection* gbl_kink_data{
nullptr};
155 EVENT::LCCollection* track_data{
nullptr};
159 gbl_kink_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
kinkRelCollLcio_.c_str()));
161 track_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
trkRelCollLcio_.c_str()));
163 catch (EVENT::DataNotAvailableException e)
165 std::cout << e.what() << std::endl;
167 std::cout<<
"TrackingProcessor::Failed retrieving " <<
kinkRelCollLcio_ <<std::endl;
169 std::cout<<
"TrackingProcessor::Failed retrieving " <<
trkRelCollLcio_ <<std::endl;
184 auto hitPattern = lc_track->getSubdetectorHitNumbers();
185 for(
int h=0; h<hitPattern.size(); h++){
186 if( hitPattern[h]>0 ){
187 track->addHitLayer(h);
192 std::cout <<
"[TrackingProcessor::process] WARNING Track with no hits -- likely getSubdetectorHitNumbers isn't filled!" << std::endl;
193 std::cout <<
"[TrackingProcessor::process] WARNING If hit collections are saved, you may want to turn on useTrackerHits" << std::endl;
195 track->setTrackerHitCount(nHits);
200 EVENT::TrackerHitVec lc_tracker_hits = lc_track->getTrackerHits();
205 bool rotateHits =
true;
207 if (track->isKalmanTrack())
210 for (
auto lc_tracker_hit : lc_tracker_hits) {
214 std::vector<RawSvtHit*> rawSvthitsOn3d;
216 raw_svt_hit_fits,&rawSvthitsOn3d,hitType);
218 for (
auto rhit : rawSvthitsOn3d)
221 rawSvthitsOn3d.clear();
224 std::cout<<tracker_hit->
getRawHits().GetEntries()<<std::endl;
226 track->addHit(tracker_hit);
227 track->addHitLayer(tracker_hit->
getLayer());
228 hits_.push_back(tracker_hit);
231 for (
int jtrack = itrack+1; jtrack < tracks->getNumberOfElements(); ++jtrack) {
233 EVENT::Track* j_lc_track =
static_cast<EVENT::Track*
>(tracks->getElementAt(jtrack));
236 if (std::find(SharedHits[itrack].begin(), SharedHits[itrack].end(),tracker_hit->
getID()) == SharedHits[itrack].end()) {
237 SharedHits[itrack].push_back(tracker_hit->
getID());
239 SharedHitsLy0[itrack] =
true;
241 SharedHitsLy1[itrack] =
true;
243 if (std::find(SharedHits[jtrack].begin(), SharedHits[jtrack].end(),tracker_hit->
getID()) == SharedHits[jtrack].end()) {
244 SharedHits[jtrack].push_back(tracker_hit->
getID());
246 SharedHitsLy0[jtrack] =
true;
248 SharedHitsLy1[jtrack] =
true;
254 track->setNShared(SharedHits[itrack].size());
255 track->setSharedLy0(SharedHitsLy0[itrack]);
256 track->setSharedLy1(SharedHitsLy1[itrack]);
263 EVENT::LCCollection* truth_tracks_rel{
nullptr};
268 truth_tracks_rel =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
truthTracksCollLcio_.c_str()));
270 catch (EVENT::DataNotAvailableException e)
272 std::cout << e.what() << std::endl;
273 if (!truth_tracks_rel)
278 if (truth_tracks_rel) {
280 std::shared_ptr<UTIL::LCRelationNavigator> truth_tracks_nav = std::make_shared<UTIL::LCRelationNavigator>(truth_tracks_rel);
282 EVENT::LCObjectVec lc_truth_tracks = truth_tracks_nav->getRelatedToObjects(lc_track);
283 if (lc_truth_tracks.size() < 1) {
284 std::cout<<
"Track with id "<<lc_track->id()<<
" doesn't have a truth matched track "<<std::endl;
287 EVENT::Track* lc_truth_track =
static_cast<EVENT::Track*
> (lc_truth_tracks.at(0));
289 track->setTruthLink(truth_track);
293 if (truth_track->
getPhi() > TMath::Pi())
294 truth_track->
setPhi(truth_track->
getPhi() - (TMath::Pi()) * 2.);
306 EVENT::LCCollection* trackRes_data_rel{
nullptr};
309 trackRes_data_rel =
static_cast<EVENT::LCCollection*
>(
event->getLCCollection(
trackResDataLcio_.c_str()));
311 catch (EVENT::DataNotAvailableException e)
313 std::cout<<e.what()<<std::endl;
316 if (trackRes_data_rel) {
317 std::shared_ptr<UTIL::LCRelationNavigator> trackRes_data_nav = std::make_shared<UTIL::LCRelationNavigator>(trackRes_data_rel);
318 EVENT::LCObjectVec trackRes_data_vec = trackRes_data_nav->getRelatedFromObjects(lc_track);
319 IMPL::LCGenericObjectImpl* trackRes_data =
static_cast<IMPL::LCGenericObjectImpl*
>(trackRes_data_vec.at(0));
330 for (
int i_res = 0; i_res < trackRes_data->getNInt()-1;i_res++) {
332 int ly = trackRes_data->getIntVal(i_res);
333 double res = trackRes_data->getDoubleVal(i_res);
334 double sigma = trackRes_data->getFloatVal(i_res);
344 if (rawTracker_hit_fits_nav) {
345 delete rawTracker_hit_fits_nav; rawTracker_hit_fits_nav =
nullptr;}