File indexing completed on 2025-09-12 10:14:55
0001
0002
0003
0004 #include <vector>
0005 #include "DataFormats/Math/interface/deltaR.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "FWCore/Utilities/interface/Exception.h"
0009 #include "PatternRecognitionbyRecovery.h"
0010 #include "DataFormats/HGCalReco/interface/Trackster.h"
0011 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0012 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0013 #include "FWCore/Framework/interface/EventSetup.h"
0014 #include "TrackstersPCA.h"
0015
0016 using namespace ticl;
0017
0018 template <typename TILES>
0019 PatternRecognitionbyRecovery<TILES>::PatternRecognitionbyRecovery(const edm::ParameterSet &conf,
0020 edm::ConsumesCollector iC)
0021 : PatternRecognitionAlgoBaseT<TILES>(conf, iC), caloGeomToken_(iC.esConsumes<CaloGeometry, CaloGeometryRecord>()) {}
0022
0023 template <typename TILES>
0024 void PatternRecognitionbyRecovery<TILES>::makeTracksters(
0025 const typename PatternRecognitionAlgoBaseT<TILES>::Inputs &input,
0026 std::vector<Trackster> &result,
0027 std::unordered_map<int, std::vector<int>> &seedToTracksterAssociation) {
0028
0029 edm::EventSetup const &es = input.es;
0030 const CaloGeometry &geom = es.getData(caloGeomToken_);
0031 rhtools_.setGeometry(geom);
0032 const auto z_limit_em = rhtools_.getPositionLayer(rhtools_.lastLayerEE(false), false).z();
0033
0034 result.clear();
0035
0036
0037 for (size_t i = 0; i < input.layerClusters.size(); ++i) {
0038 if (input.mask[i] == 0.f) {
0039 continue;
0040 }
0041
0042
0043 Trackster trackster;
0044 trackster.vertices().push_back(i);
0045 trackster.vertex_multiplicity().push_back(1);
0046 const auto &lc = input.layerClusters[i];
0047 trackster.setTimeAndError(input.layerClustersTime.get(i).first, input.layerClustersTime.get(i).second);
0048 trackster.setRawEnergy(lc.energy());
0049 trackster.setBarycenter({float(lc.x()), float(lc.y()), float(lc.z())});
0050 trackster.calculateRawPt();
0051
0052 if (std::abs(lc.z()) <= z_limit_em) {
0053 trackster.setRawEmEnergy(lc.energy());
0054 trackster.calculateRawEmPt();
0055 }
0056
0057
0058 result.push_back(trackster);
0059 }
0060
0061
0062 if (PatternRecognitionAlgoBaseT<TILES>::algo_verbosity_ > VerbosityLevel::Advanced) {
0063 edm::LogVerbatim("PatternRecognitionbyRecovery") << "Created " << result.size() << " tracksters";
0064 }
0065 }
0066
0067 template <typename TILES>
0068 void PatternRecognitionbyRecovery<TILES>::filter(std::vector<Trackster> &output,
0069 const std::vector<Trackster> &inTracksters,
0070 const typename PatternRecognitionAlgoBaseT<TILES>::Inputs &input,
0071 std::unordered_map<int, std::vector<int>> &seedToTracksterAssociation) {
0072 output = inTracksters;
0073 }
0074
0075 template <typename TILES>
0076 void PatternRecognitionbyRecovery<TILES>::fillPSetDescription(edm::ParameterSetDescription &iDesc) {
0077 iDesc.add<int>("algo_verbosity", 0);
0078 }
0079
0080
0081 template class ticl::PatternRecognitionbyRecovery<TICLLayerTiles>;
0082 template class ticl::PatternRecognitionbyRecovery<TICLLayerTilesHFNose>;