|
12 | 12 | #include "FWCore/ParameterSet/interface/ParameterSet.h" |
13 | 13 | #include "CommonTools/Utils/interface/StringCutObjectSelector.h" |
14 | 14 |
|
| 15 | +#include "TLorentzVector.h" |
| 16 | + |
15 | 17 | namespace { |
16 | 18 | bool passesQuality(const reco::Track& trk, const std::vector<reco::TrackBase::TrackQuality>& allowedQuals) { |
17 | 19 | for (const auto& qual : allowedQuals) { |
@@ -68,6 +70,8 @@ namespace pat { |
68 | 70 | const double maxDxyForNotReconstructedPrimary_; |
69 | 71 | const double maxDxySigForNotReconstructedPrimary_; |
70 | 72 | const bool useLegacySetup_; |
| 73 | + const bool xiSelection_; |
| 74 | + const double xiMassCut_; |
71 | 75 | }; |
72 | 76 | } // namespace pat |
73 | 77 |
|
@@ -100,7 +104,9 @@ pat::PATLostTracks::PATLostTracks(const edm::ParameterSet& iConfig) |
100 | 104 | .getParameter<double>("maxDxyForNotReconstructedPrimary")), |
101 | 105 | maxDxySigForNotReconstructedPrimary_(iConfig.getParameter<edm::ParameterSet>("pvAssignment") |
102 | 106 | .getParameter<double>("maxDxySigForNotReconstructedPrimary")), |
103 | | - useLegacySetup_(iConfig.getParameter<bool>("useLegacySetup")) { |
| 107 | + useLegacySetup_(iConfig.getParameter<bool>("useLegacySetup")), |
| 108 | + xiSelection_(iConfig.getParameter<double>("xiSelection")), |
| 109 | + xiMassCut_(iConfig.getParameter<double>("xiMassCut")) { |
104 | 110 | std::vector<std::string> trkQuals(iConfig.getParameter<std::vector<std::string>>("qualsToAutoAccept")); |
105 | 111 | std::transform( |
106 | 112 | trkQuals.begin(), trkQuals.end(), std::back_inserter(qualsToAutoAccept_), reco::TrackBase::qualityByName); |
@@ -189,11 +195,27 @@ void pat::PATLostTracks::produce(edm::StreamID, edm::Event& iEvent, const edm::E |
189 | 195 | trkStatus[key] = TrkStatus::VTX; |
190 | 196 | } |
191 | 197 | } |
192 | | - for (const auto& v0 : *lambdas) { |
193 | | - for (size_t dIdx = 0; dIdx < v0.numberOfDaughters(); dIdx++) { |
194 | | - size_t key = (dynamic_cast<const reco::RecoChargedCandidate*>(v0.daughter(dIdx)))->track().key(); |
195 | | - if (trkStatus[key] == TrkStatus::NOTUSED) |
196 | | - trkStatus[key] = TrkStatus::VTX; |
| 198 | + for (const auto& v0 : *lambdas){ |
| 199 | + double protonCharge = 0; |
| 200 | + for(size_t dIdx=0;dIdx<v0.numberOfDaughters(); dIdx++){ |
| 201 | + size_t key= (dynamic_cast<const reco::RecoChargedCandidate*>(v0.daughter(dIdx)))->track().key(); |
| 202 | + if(trkStatus[key]==TrkStatus::NOTUSED) trkStatus[key]=TrkStatus::VTX; |
| 203 | + protonCharge += v0.daughter(dIdx)->charge() * v0.daughter(dIdx)->momentum().mag2(); |
| 204 | + } |
| 205 | + if (xiSelection_) |
| 206 | + { |
| 207 | + // selecting potential Xi- -> Lambda pi candidates |
| 208 | + TLorentzVector p4Lambda; |
| 209 | + p4Lambda.SetPtEtaPhiM(v0.pt(),v0.eta(),v0.phi(), v0.mass()); |
| 210 | + for(unsigned int trkIndx=0; trkIndx < tracks->size(); trkIndx++){ |
| 211 | + reco::TrackRef trk(tracks,trkIndx); |
| 212 | + if ((*trk).charge() * protonCharge < 0) continue; |
| 213 | + TLorentzVector p4pi; |
| 214 | + p4pi.SetPtEtaPhiM((*trk).pt(),(*trk).eta(),(*trk).phi(), 0.13957061); |
| 215 | + if ((p4Lambda+p4pi).M() < xiMassCut_){ // selecting potential Xi- candidates |
| 216 | + if(trkStatus[trkIndx]==TrkStatus::NOTUSED) trkStatus[trkIndx]=TrkStatus::VTX; |
| 217 | + } |
| 218 | + } |
197 | 219 | } |
198 | 220 | } |
199 | 221 | std::vector<int> mapping(tracks->size(), -1); |
|
0 commit comments