File indexing completed on 2024-04-06 12:11:24
0001 #ifndef FastSimulation_TrackingRecHitProducer_PixelTemplateSmearerBase_h
0002 #define FastSimulation_TrackingRecHitProducer_PixelTemplateSmearerBase_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "FastSimulation/TrackingRecHitProducer/interface/TrackingRecHitAlgorithm.h"
0013
0014
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016
0017
0018 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0019
0020
0021 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
0022 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0023
0024 #include "CondFormats/SiPixelTransient/interface/SiPixelTemplate.h"
0025
0026
0027 #include "DataFormats/GeometryVector/interface/Point3DBase.h"
0028 #include "DataFormats/GeometrySurface/interface/LocalError.h"
0029
0030
0031 #include <vector>
0032 #include <string>
0033 #include <memory>
0034
0035 class TFile;
0036 class RandomEngineAndDistribution;
0037 class SimpleHistogramGenerator;
0038 class PixelResolutionHistograms;
0039
0040 class PixelTemplateSmearerBase : public TrackingRecHitAlgorithm {
0041 public:
0042
0043 struct MergeGroup {
0044 std::vector<TrackingRecHitProduct::SimHitIdPair> group;
0045 bool smearIt;
0046 };
0047
0048 protected:
0049 bool mergeHitsOn = false;
0050
0051
0052 const SiPixelTemplateDBObject* pixelTemplateDBObject_ = nullptr;
0053 std::vector<SiPixelTemplateStore> thePixelTemp_;
0054 const std::vector<SiPixelTemplateStore>* thePixelTempRef = &thePixelTemp_;
0055 int templateId = -1;
0056
0057
0058
0059
0060
0061
0062 bool isBarrel;
0063
0064
0065 std::shared_ptr<PixelResolutionHistograms> theEdgePixelResolutions;
0066 std::string theEdgePixelResolutionFileName;
0067
0068 std::shared_ptr<PixelResolutionHistograms> theBigPixelResolutions;
0069 std::string theBigPixelResolutionFileName;
0070
0071 std::shared_ptr<PixelResolutionHistograms> theRegularPixelResolutions;
0072 std::string theRegularPixelResolutionFileName;
0073
0074
0075 std::unique_ptr<TFile> theMergingProbabilityFile;
0076 std::string theMergingProbabilityFileName;
0077
0078 std::unique_ptr<TFile> theMergedPixelResolutionXFile;
0079 std::string theMergedPixelResolutionXFileName;
0080
0081 std::unique_ptr<TFile> theMergedPixelResolutionYFile;
0082 std::string theMergedPixelResolutionYFileName;
0083
0084 public:
0085 explicit PixelTemplateSmearerBase(const std::string& name,
0086 const edm::ParameterSet& config,
0087 edm::ConsumesCollector& consumesCollector);
0088
0089 ~PixelTemplateSmearerBase() override;
0090 TrackingRecHitProductPtr process(TrackingRecHitProductPtr product) const override;
0091
0092 void beginRun(edm::Run const& run,
0093 const edm::EventSetup& eventSetup,
0094 const SiPixelTemplateDBObject* pixelTemplateDBObjectPtr,
0095 const std::vector<SiPixelTemplateStore>& tempStoreRef) override;
0096
0097
0098
0099 TrackingRecHitProductPtr processUnmergedHits(std::vector<TrackingRecHitProduct::SimHitIdPair>& unmergedHits,
0100 TrackingRecHitProductPtr product,
0101 const PixelGeomDetUnit* detUnit,
0102 const double boundX,
0103 const double boundY,
0104 RandomEngineAndDistribution const* random) const;
0105
0106 TrackingRecHitProductPtr processMergeGroups(std::vector<MergeGroup*>& mergeGroups,
0107 TrackingRecHitProductPtr product,
0108 const PixelGeomDetUnit* detUnit,
0109 const double boundX,
0110 const double boundY,
0111 RandomEngineAndDistribution const* random) const;
0112
0113
0114 FastSingleTrackerRecHit smearHit(const PSimHit& simHit,
0115 const PixelGeomDetUnit* detUnit,
0116 const double boundX,
0117 const double boundY,
0118 RandomEngineAndDistribution const*) const;
0119
0120
0121 FastSingleTrackerRecHit smearMergeGroup(MergeGroup* mg,
0122 const PixelGeomDetUnit* detUnit,
0123 const double boundX,
0124 const double boundY,
0125 const RandomEngineAndDistribution* random) const;
0126
0127
0128 bool hitsMerge(const PSimHit& simHit1, const PSimHit& simHit2) const;
0129 };
0130 #endif