File indexing completed on 2024-09-07 04:34:29
0001 #include "Alignment/CommonAlignmentProducer/interface/AlignmentTracksFromVertexCompositeCandidateSelector.h"
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "DataFormats/TrackReco/interface/Track.h"
0008
0009
0010 AlignmentTrackFromVertexCompositeCandidateSelector::AlignmentTrackFromVertexCompositeCandidateSelector(
0011 const edm::ParameterSet& cfg, edm::ConsumesCollector& iC)
0012 : vccToken_(iC.consumes<reco::VertexCompositeCandidateCollection>(
0013 cfg.getParameter<edm::InputTag>("vertexCompositeCandidates"))) {}
0014
0015
0016 AlignmentTrackFromVertexCompositeCandidateSelector::~AlignmentTrackFromVertexCompositeCandidateSelector() {}
0017
0018
0019 AlignmentTrackFromVertexCompositeCandidateSelector::Tracks AlignmentTrackFromVertexCompositeCandidateSelector::select(
0020 const edm::Handle<reco::TrackCollection>& tc, const edm::Event& evt, const edm::EventSetup& setup) const {
0021 Tracks result;
0022
0023 std::vector<unsigned int> theV0keys;
0024
0025 edm::Handle<reco::VertexCompositeCandidateCollection> vccHandle;
0026 evt.getByToken(vccToken_, vccHandle);
0027
0028 if (vccHandle.isValid()) {
0029
0030 for (const auto& vcc : *vccHandle) {
0031 for (size_t i = 0; i < vcc.numberOfDaughters(); ++i) {
0032 LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector") << "daughter: " << i << std::endl;
0033 const reco::Candidate* daughter = vcc.daughter(i);
0034 const reco::RecoChargedCandidate* chargedDaughter = dynamic_cast<const reco::RecoChargedCandidate*>(daughter);
0035 if (chargedDaughter) {
0036 LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector") << "charged daughter: " << i << std::endl;
0037 const reco::TrackRef trackRef = chargedDaughter->track();
0038 if (trackRef.isNonnull()) {
0039 LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector")
0040 << "charged daughter has non-null trackref: " << i << std::endl;
0041 theV0keys.push_back(trackRef.key());
0042 }
0043 }
0044 }
0045 }
0046 } else {
0047 edm::LogError("AlignmentTrackFromVertexCompositeCandidateSelector")
0048 << "Error >> Failed to get VertexCompositeCandidateCollection";
0049 }
0050
0051 LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector")
0052 << "collection will have size: " << theV0keys.size() << std::endl;
0053
0054 if (tc.isValid()) {
0055 int indx(0);
0056
0057 for (reco::TrackCollection::const_iterator tk = tc->begin(); tk != tc->end(); ++tk, ++indx) {
0058 reco::TrackRef trackRef = reco::TrackRef(tc, indx);
0059 if (std::find(theV0keys.begin(), theV0keys.end(), trackRef.key()) != theV0keys.end()) {
0060 LogDebug("AlignmentTrackFromVertexSelector") << "track index: " << indx << "filling result vector" << std::endl;
0061 result.push_back(&(*tk));
0062 }
0063 }
0064 }
0065
0066 LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector")
0067 << "collection will have size: " << result.size() << std::endl;
0068
0069 return result;
0070 }