File indexing completed on 2024-04-06 12:29:32
0001 #include "CalibFormats/CaloObjects/interface/CaloSamples.h"
0002 #include "SimCalorimetry/CaloSimAlgos/interface/CaloCachedShapeIntegrator.h"
0003 #include "SimCalorimetry/HcalSimAlgos/interface/HcalShape.h"
0004 #include <cmath>
0005 #include <iostream>
0006
0007 bool compare(CaloSamples& s1, CaloSamples& s2) {
0008 bool result = true;
0009 for (int i = 0; i < 10; ++i) {
0010 double v1 = s1[i];
0011 double v2 = s2[i];
0012 if (fabs(v1) < 0.00001) {
0013 if (fabs(v2) > 0.0001) {
0014 std::cout << "BAD VALUE " << v1 << " " << v2 << std::endl;
0015 result = false;
0016 }
0017 } else {
0018 if (fabs(v1 - v2) / v1 > 0.001) {
0019 std::cout << "BAD VALUE " << v1 << " " << v2 << std::endl;
0020 result = false;
0021 }
0022 }
0023 }
0024 return result;
0025 }
0026
0027 double integrate(CaloSamples& s) {
0028 double result = 0.;
0029 for (int i = 0; i < 10; ++i) {
0030 result += s[i];
0031 }
0032 return result;
0033 }
0034
0035 double centroid(CaloSamples& s) {
0036 double weightedSum = 0.;
0037 double sum = 0.;
0038 for (int i = 0; i < 10; ++i) {
0039 weightedSum += s[i] * i;
0040 sum += s[i];
0041 }
0042 return weightedSum / sum;
0043 }
0044
0045 int main() {
0046 DetId detId;
0047 CaloSamples samples(detId, 10.);
0048 CaloSamples samples2(detId, 10.);
0049 CaloSamples expected(detId, 10.);
0050 CaloSamples expected2(detId, 10.);
0051
0052 double values[10] = {2., 4., 8., 20., 32., 28., 24., 12., 8., 4.};
0053 double offset = 5.;
0054 double offset2 = 30.;
0055 double expect[10] = {1.6, 3.6, 7.2, 17.6, 29.6, 28.8, 24.8, 14.4, 8.8, 4.8};
0056 double expect2[10] = {0., 1.6, 3.6, 7.2, 17.6, 29.6, 28.8, 24.8, 14.4, 8.8};
0057
0058 for (int i = 0; i < 10; ++i) {
0059 samples[i] = values[i];
0060 samples2[i] = values[i];
0061 expected[i] = expect[i];
0062 expected2[i] = expect2[i];
0063 }
0064 samples.offsetTime(offset);
0065 samples2.offsetTime(offset2);
0066
0067 compare(samples, expected);
0068 compare(samples2, expected2);
0069
0070
0071 HcalShape hcalShape;
0072 hcalShape.setShape(101);
0073 CaloCachedShapeIntegrator intShape(&hcalShape);
0074 CaloSamples signalStep(detId, 10), signalJump(detId, 10), signalOrig(detId, 10);
0075 for (int i = 0; i < 10; ++i) {
0076 double value = intShape(i * 25);
0077 signalStep[i] = value;
0078 signalOrig[i] = value;
0079 signalJump[i] = value;
0080 }
0081
0082 for (int i = 0; i < 15; ++i) {
0083 signalStep.offsetTime(1);
0084 }
0085
0086 signalJump.offsetTime(15);
0087
0088 for (int i = 0; i < 15; ++i) {
0089 signalStep.offsetTime(-1);
0090 }
0091
0092
0093
0094 std::cout << "Integrate " << integrate(signalStep) << " " << integrate(signalJump) << " " << integrate(signalOrig)
0095 << std::endl;
0096 std::cout << "Centroid " << centroid(signalOrig) * 25 << " " << centroid(signalJump) * 25. << std::endl;
0097 }