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;
136 std::map <int, std::vector<int> > SharedHits;
138 std::map <int, bool> SharedHitsLy0;
139 std::map <int, bool> SharedHitsLy1;
141 for (
int itrack = 0; itrack < tracks->getNumberOfElements();++itrack) {
142 SharedHits[itrack] = {};
143 SharedHitsLy0[itrack] =
false;
144 SharedHitsLy1[itrack] =
false;
148 for (
int itrack = 0; itrack < tracks->getNumberOfElements(); ++itrack) {
151 EVENT::Track* lc_track =
static_cast<EVENT::Track*
>(tracks->getElementAt(itrack));
155 EVENT::LCCollection* gbl_kink_data{
nullptr};
156 EVENT::LCCollection* track_data{
nullptr};
160 gbl_kink_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
kinkRelCollLcio_.c_str()));
162 track_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
trkRelCollLcio_.c_str()));
164 catch (EVENT::DataNotAvailableException e)
166 std::cout << e.what() << std::endl;
168 std::cout<<
"TrackingProcessor::Failed retrieving " <<
kinkRelCollLcio_ <<std::endl;
170 std::cout<<
"TrackingProcessor::Failed retrieving " <<
trkRelCollLcio_ <<std::endl;
185 auto hitPattern = lc_track->getSubdetectorHitNumbers();
186 for(
int h=0; h<hitPattern.size(); h++){
187 if( hitPattern[h]>0 ){
188 track->addHitLayer(h);
193 std::cout <<
"[TrackingProcessor::process] WARNING Track with no hits -- likely getSubdetectorHitNumbers isn't filled!" << std::endl;
194 std::cout <<
"[TrackingProcessor::process] WARNING If hit collections are saved, you may want to turn on useTrackerHits" << std::endl;
196 track->setTrackerHitCount(nHits);
201 EVENT::TrackerHitVec lc_tracker_hits = lc_track->getTrackerHits();
206 bool rotateHits =
true;
208 if (track->isKalmanTrack())
211 for (
auto lc_tracker_hit : lc_tracker_hits) {
215 std::vector<RawSvtHit*> rawSvthitsOn3d;
217 raw_svt_hit_fits,&rawSvthitsOn3d,hitType);
219 for (
auto rhit : rawSvthitsOn3d)
222 rawSvthitsOn3d.clear();
225 std::cout<<tracker_hit->
getRawHits().GetEntries()<<std::endl;
227 track->addHit(tracker_hit);
228 track->addHitLayer(tracker_hit->
getLayer());
229 hits_.push_back(tracker_hit);
232 for (
int jtrack = itrack+1; jtrack < tracks->getNumberOfElements(); ++jtrack) {
234 EVENT::Track* j_lc_track =
static_cast<EVENT::Track*
>(tracks->getElementAt(jtrack));
237 if (std::find(SharedHits[itrack].begin(), SharedHits[itrack].end(),tracker_hit->
getID()) == SharedHits[itrack].end()) {
238 SharedHits[itrack].push_back(tracker_hit->
getID());
240 SharedHitsLy0[itrack] =
true;
242 SharedHitsLy1[itrack] =
true;
244 if (std::find(SharedHits[jtrack].begin(), SharedHits[jtrack].end(),tracker_hit->
getID()) == SharedHits[jtrack].end()) {
245 SharedHits[jtrack].push_back(tracker_hit->
getID());
247 SharedHitsLy0[jtrack] =
true;
249 SharedHitsLy1[jtrack] =
true;
255 track->setNShared(SharedHits[itrack].size());
256 track->setSharedLy0(SharedHitsLy0[itrack]);
257 track->setSharedLy1(SharedHitsLy1[itrack]);
264 EVENT::LCCollection* truth_tracks_rel{
nullptr};
269 truth_tracks_rel =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
truthTracksCollLcio_.c_str()));
271 catch (EVENT::DataNotAvailableException e)
273 std::cout << e.what() << std::endl;
274 if (!truth_tracks_rel)
279 if (truth_tracks_rel) {
281 std::shared_ptr<UTIL::LCRelationNavigator> truth_tracks_nav = std::make_shared<UTIL::LCRelationNavigator>(truth_tracks_rel);
283 EVENT::LCObjectVec lc_truth_tracks = truth_tracks_nav->getRelatedToObjects(lc_track);
284 if (lc_truth_tracks.size() < 1) {
285 std::cout<<
"Track with id "<<lc_track->id()<<
" doesn't have a truth matched track "<<std::endl;
288 EVENT::Track* lc_truth_track =
static_cast<EVENT::Track*
> (lc_truth_tracks.at(0));
290 track->setTruthLink(truth_track);
294 if (truth_track->
getPhi() > TMath::Pi())
295 truth_track->
setPhi(truth_track->
getPhi() - (TMath::Pi()) * 2.);
307 EVENT::LCCollection* trackRes_data_rel{
nullptr};
310 trackRes_data_rel =
static_cast<EVENT::LCCollection*
>(
event->getLCCollection(
trackResDataLcio_.c_str()));
312 catch (EVENT::DataNotAvailableException e)
314 std::cout<<e.what()<<std::endl;
317 if (trackRes_data_rel) {
318 std::shared_ptr<UTIL::LCRelationNavigator> trackRes_data_nav = std::make_shared<UTIL::LCRelationNavigator>(trackRes_data_rel);
319 EVENT::LCObjectVec trackRes_data_vec = trackRes_data_nav->getRelatedFromObjects(lc_track);
320 IMPL::LCGenericObjectImpl* trackRes_data =
static_cast<IMPL::LCGenericObjectImpl*
>(trackRes_data_vec.at(0));
331 for (
int i_res = 0; i_res < trackRes_data->getNInt()-1;i_res++) {
333 int ly = trackRes_data->getIntVal(i_res);
334 double res = trackRes_data->getDoubleVal(i_res);
335 double sigma = trackRes_data->getFloatVal(i_res);
345 if (rawTracker_hit_fits_nav) {
346 delete rawTracker_hit_fits_nav; rawTracker_hit_fits_nav =
nullptr;}