Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // constructor ----------------------------------------------------------------
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 // destructor -----------------------------------------------------------------
0016 AlignmentTrackFromVertexCompositeCandidateSelector::~AlignmentTrackFromVertexCompositeCandidateSelector() {}
0017 
0018 // do selection ---------------------------------------------------------------
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     // Loop over VertexCompositeCandidates and associate tracks
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     // put the track in the collection is it was used for the vertex
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       }  // if a valid key is found
0063     }  // end loop over tracks
0064   }  // if the handle is valid
0065 
0066   LogDebug("AlignmentTrackFromVertexCompositeCandidateSelector")
0067       << "collection will have size: " << result.size() << std::endl;
0068 
0069   return result;
0070 }