54 if (
debug_ > 0) std::cout <<
"VertexProcessor: Clear output vector" << std::endl;
56 if (
hits_.size() > 0) {
57 for (std::vector<TrackerHit *>::iterator it =
hits_.begin(); it !=
hits_.end(); ++it) {
64 for (std::vector<RawSvtHit *>::iterator it =
rawhits_.begin(); it !=
rawhits_.end(); ++it) {
70 for(
int i = 0; i <
vtxs_.size(); i++)
delete vtxs_.at(i);
72 for(
int i = 0; i <
parts_.size(); i++)
delete parts_.at(i);
76 UTIL::LCRelationNavigator* mcPartRel_nav;
80 if (
debug_ > 0) std::cout <<
"VertexProcessor: Get LCIO Collection " <<
vtxCollLcio_ << std::endl;
81 EVENT::LCCollection* lc_vtxs =
nullptr;
86 catch (EVENT::DataNotAvailableException e)
88 std::cout << e.what() << std::endl;
93 EVENT::LCCollection* gbl_kink_data{
nullptr};
94 EVENT::LCCollection* track_data{
nullptr};
99 gbl_kink_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
kinkRelCollLcio_.c_str()));
101 track_data =
static_cast<EVENT::LCCollection*
>(event->getLCCollection(
trkRelCollLcio_.c_str()));
103 catch (EVENT::DataNotAvailableException e)
105 std::cout << e.what() << std::endl;
113 bool rotateHits =
true;
115 EVENT::LCCollection* raw_svt_hit_fits =
nullptr;
117 auto evColls =
event->getLCEvent()->getCollectionNames();
118 auto it = std::find (evColls->begin(), evColls->end(),
hitFitsCollLcio_.c_str());
120 if(it == evColls->end()) hasFits =
false;
126 it = std::find (evColls->begin(), evColls->end(),
mcPartRelLcio_.c_str());
127 bool hasMCParts =
true;
128 EVENT::LCCollection* mcPartRel;
129 if(it == evColls->end()) hasMCParts =
false;
134 mcPartRel_nav =
new UTIL::LCRelationNavigator(mcPartRel);
138 if (
debug_ > 0) std::cout <<
"VertexProcessor: Converting Verteces" << std::endl;
139 for (
int ivtx = 0 ; ivtx < lc_vtxs->getNumberOfElements(); ++ivtx)
141 if (
debug_ > 0) std::cout <<
"VertexProcessor: Converting Vertex " << ivtx << std::endl;
142 EVENT::Vertex * lc_vtx{
nullptr};
143 lc_vtx =
static_cast<EVENT::Vertex*
>(lc_vtxs->getElementAt(ivtx));
145 if (
debug_ > 0) std::cout <<
"VertexProcessor: Build Vertex" << std::endl;
148 if (
debug_ > 0) std::cout <<
"VertexProcessor: Get Particles" << std::endl;
149 std::vector<EVENT::ReconstructedParticle*> lc_parts = lc_vtx->getAssociatedParticle()->getParticles();
150 for(
auto lc_part : lc_parts)
152 if (
debug_ > 0) std::cout <<
"VertexProcessor: Build particle" << std::endl;
154 if (lc_part->getTracks().size()>0){
155 EVENT::Track* lc_track =
static_cast<EVENT::Track*
>(lc_part->getTracks()[0]);
159 if (track->isKalmanTrack()) hitType = 1;
162 auto hitPattern = lc_track->getSubdetectorHitNumbers();
163 for(
int h=0; h<hitPattern.size(); h++){
164 if( hitPattern[h]>0 ){
165 track->addHitLayer(h);
170 std::cout <<
"[VertexProcessor::process] WARNING Track with no hits -- likely getSubdetectorHitNumbers isn't filled!" << std::endl;
171 std::cout <<
"[VertexProcessor::process] WARNING If hit collections are saved, you may want to turn on useTrackerHits" << std::endl;
173 track->setTrackerHitCount(nHits);
176 EVENT::TrackerHitVec lc_tracker_hits = lc_track->getTrackerHits();
177 for (
auto lc_tracker_hit : lc_tracker_hits) {
179 std::vector<RawSvtHit*> rawSvthitsOn3d;
181 raw_svt_hit_fits,&rawSvthitsOn3d,hitType);
183 int hitLayer = tracker_hit->
getLayer();
185 EVENT::LCObjectVec rawHits = lc_tracker_hit->getRawHits();
186 for(
int irawhit = 0; irawhit < rawHits.size(); ++irawhit){
187 IMPL::TrackerHitImpl* rawhit =
static_cast<IMPL::TrackerHitImpl*
>(rawHits.at(irawhit));
189 std::cout <<
"rawhit on track has lcio id: " << rawhit->id() << std::endl;
194 EVENT::LCObjectVec lc_simtrackerhits = mcPartRel_nav->getRelatedToObjects(rawhit);
197 for(
int isimhit = 0; isimhit < lc_simtrackerhits.size(); isimhit++){
198 IMPL::SimTrackerHitImpl* lc_simhit =
static_cast<IMPL::SimTrackerHitImpl*
>(lc_simtrackerhits.at(isimhit));
199 IMPL::MCParticleImpl* lc_mcp =
static_cast<IMPL::MCParticleImpl*
>(lc_simhit->getMCParticle());
200 if(lc_mcp ==
nullptr)
201 std::cout <<
"mcp is null" << std::endl;
202 track->addMcpHit(hitLayer, lc_mcp->id());
204 std::cout <<
"simtrackerhit lcio id: " << lc_simhit->id() << std::endl;
205 std::cout <<
"mcp lcio id: " << lc_mcp->id() << std::endl;
211 track->addHitLayer(hitLayer);
212 hits_.push_back(tracker_hit);
213 for (std::vector<RawSvtHit *>::iterator it = rawSvthitsOn3d.begin(); it != rawSvthitsOn3d.end(); ++it) {
216 rawSvthitsOn3d.clear();
220 track->setTrackerHitCount(nHits);
229 if (
debug_ > 0) std::cout <<
"VertexProcessor: Add particle" << std::endl;
231 vtx->addParticle(part);
234 if (
debug_ > 0) std::cout <<
"VertexProcessor: Add Vertex" << std::endl;
235 vtxs_.push_back(vtx);
238 if(hasMCParts)
delete mcPartRel_nav;
239 if (
debug_ > 0) std::cout <<
"VertexProcessor: End process" << std::endl;
void setTrack(Track *track)