CMS 3D CMS Logo

SiStripApprox2ApproxClusters.cc
Go to the documentation of this file.
1 
2 
14 
15 #include <vector>
16 #include <memory>
17 
19 public:
20  explicit SiStripApprox2ApproxClusters(const edm::ParameterSet& conf);
21  void produce(edm::Event&, const edm::EventSetup&) override;
22 
23  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
24 
25 private:
27  uint8_t approxVersion;
30 };
31 
33  inputApproxClusters = conf.getParameter<edm::InputTag>("inputApproxClusters");
34  approxVersionS = conf.getParameter<std::string>("approxVersion");
35 
36  approxVersion = -1;
37 
38  if (approxVersionS == "ORIGINAL")
39  approxVersion = 0;
40  else if (approxVersionS == "FULL_WIDTH")
41  approxVersion = 1;
42  else if (approxVersionS == "BARY_RES_0.1")
43  approxVersion = 2;
44  else if (approxVersionS == "BARY_CHARGE_RES_0.1")
45  approxVersion = 3;
46 
47  clusterToken = consumes<edmNew::DetSetVector<SiStripApproximateCluster>>(inputApproxClusters);
48  produces<edmNew::DetSetVector<SiStripApproximateCluster>>();
49 }
50 
52  auto result = std::make_unique<edmNew::DetSetVector<SiStripApproximateCluster>>();
53  const auto& clusterCollection = event.get(clusterToken);
54 
55  for (const auto& detClusters : clusterCollection) {
57 
58  for (const auto& cluster : detClusters) {
59  float barycenter = cluster.barycenter();
60  uint8_t width = cluster.width();
61  float avgCharge = cluster.avgCharge();
62  bool filter = cluster.filter();
63  bool isSaturated = cluster.isSaturated();
64 
65  switch (approxVersion) {
66  case 0: //ORIGINAL
67  barycenter = std::round(barycenter);
68  if (width > 0x3F)
69  width = 0x3F;
70  avgCharge = std::round(avgCharge);
71  break;
72  case 1: //FULL_WIDTH
73  barycenter = std::round(barycenter);
74  avgCharge = std::round(avgCharge);
75  break;
76  case 2: //BARY_RES_0.1
77  barycenter = std::round(barycenter * 10) / 10;
78  if (width > 0x3F)
79  width = 0x3F;
80  avgCharge = std::round(avgCharge);
81  break;
82  case 3: //BARY_CHARGE_RES_0.1
83  barycenter = std::round(barycenter * 10) / 10;
84  if (width > 0x3F)
85  width = 0x3F;
86  avgCharge = std::round(avgCharge * 10) / 10;
87  break;
88  }
89 
90  ff.push_back(SiStripApproximateCluster(barycenter, width, avgCharge, filter, isSaturated));
91  }
92  }
93 
94  event.put(std::move(result));
95 }
96 
99  desc.add<edm::InputTag>("inputApproxClusters", edm::InputTag("siStripClusters"));
100  desc.add<std::string>("approxVersion", std::string("ORIGINAL"));
101 
102  descriptions.add("SiStripApprox2ApproxClusters", desc);
103 }
104 
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< edmNew::DetSetVector< SiStripApproximateCluster > > clusterToken
SiStripApprox2ApproxClusters(const edm::ParameterSet &conf)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool isSaturated(const Digi &digi, const int &maxADCvalue, int ifirst, int n)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void produce(edm::Event &, const edm::EventSetup &) override
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1