Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:04:05

0001 /* Unit test for CaloCluster
0002    Stefano Argiro', Dec 2010
0003 
0004  */
0005 
0006 #include <cppunit/extensions/HelperMacros.h>
0007 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
0008 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
0009 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0010 
0011 class testEcalRecHit : public CppUnit::TestFixture {
0012   CPPUNIT_TEST_SUITE(testEcalRecHit);
0013   CPPUNIT_TEST(testOne);
0014   CPPUNIT_TEST_SUITE_END();
0015 
0016 public:
0017   void setUp() {}
0018   void tearDown() {}
0019 
0020   void testOne();
0021 };
0022 
0023 ///registration of the test so that the runner can find it
0024 CPPUNIT_TEST_SUITE_REGISTRATION(testEcalRecHit);
0025 
0026 void testEcalRecHit::testOne() {
0027   // test flagbit setter
0028   EcalRecHit rh(EBDetId(1, 1), 0., 0.);
0029   rh.setFlag(EcalRecHit::kTPSaturated);
0030   CPPUNIT_ASSERT(rh.checkFlag(EcalRecHit::kTPSaturated));
0031 
0032   rh.setFlag(EcalRecHit::kHasSwitchToGain6);
0033   CPPUNIT_ASSERT(rh.checkFlag(EcalRecHit::kHasSwitchToGain6));
0034 
0035   rh.setFlag(EcalRecHit::kHasSwitchToGain1);
0036   CPPUNIT_ASSERT(rh.checkFlag(EcalRecHit::kHasSwitchToGain1));
0037   rh.unsetFlag(EcalRecHit::kHasSwitchToGain1);
0038   CPPUNIT_ASSERT(!rh.checkFlag(EcalRecHit::kHasSwitchToGain1));
0039 
0040   CPPUNIT_ASSERT(!rh.checkFlag(EcalRecHit::kSaturated));
0041 
0042   CPPUNIT_ASSERT(!rh.checkFlag(EcalRecHit::kPoorReco));
0043   CPPUNIT_ASSERT(!rh.checkFlag(EcalRecHit::kUnknown));
0044   CPPUNIT_ASSERT(!rh.checkFlag(EcalRecHit::kGood));
0045 
0046   // did we modify some bit by mistake ?
0047   CPPUNIT_ASSERT(rh.checkFlag(EcalRecHit::kTPSaturated));
0048 
0049   // check unsetting of flag
0050   EcalRecHit rh2(EBDetId(1, 1), 0., 0.);
0051   rh2.setFlag(EcalRecHit::kOutOfTime);
0052   CPPUNIT_ASSERT(rh2.checkFlag(EcalRecHit::kOutOfTime));
0053   rh2.unsetFlag(EcalRecHit::kOutOfTime);
0054   CPPUNIT_ASSERT(!rh2.checkFlag(EcalRecHit::kOutOfTime));
0055 
0056   rh2.unsetFlag(EcalRecHit::kGood);
0057   CPPUNIT_ASSERT(!rh2.checkFlag(EcalRecHit::kGood));
0058 
0059   // test packing of values
0060   CPPUNIT_ASSERT_EQUAL((uint32_t)0, EcalRecHit::getMasked(0, 8, 16));
0061   // setting value of 12 at offset of 8; pack width=16
0062   CPPUNIT_ASSERT_EQUAL((uint32_t)3072, EcalRecHit::setMasked(0, 12, 8, 16));
0063   CPPUNIT_ASSERT_EQUAL((uint32_t)12, EcalRecHit::getMasked(3072, 8, 16));
0064   // check if setting clears the old value
0065   CPPUNIT_ASSERT_EQUAL((uint32_t)(3072 + 0xff), EcalRecHit::setMasked(0x00aaffff, 12, 8, 16));
0066   CPPUNIT_ASSERT_EQUAL((uint32_t)12, EcalRecHit::getMasked(3072 + 0xff, 8, 16));
0067 
0068   // test chi2
0069   rh.setChi2(1.8);
0070   CPPUNIT_ASSERT_DOUBLES_EQUAL(1.8, rh.chi2(), 0.5);
0071   rh.setChi2(50.8);
0072   CPPUNIT_ASSERT_DOUBLES_EQUAL(50.8, rh.chi2(), 0.5);
0073 
0074   // test timeError
0075   float timerr = 0.12;
0076   EcalUncalibratedRecHit urh;
0077   urh.setJitterError(timerr);
0078   rh.setTimeError(urh.jitterErrorBits());
0079 
0080   CPPUNIT_ASSERT_DOUBLES_EQUAL(timerr * 25, rh.timeError(), 0.5);
0081   CPPUNIT_ASSERT_DOUBLES_EQUAL(urh.jitterError() * 25, rh.timeError(), 0.00001);
0082 
0083   // test energyError
0084   for (float x = 0.0011; x < 10.e4; x *= 5.) {
0085     rh.setEnergyError(x);
0086     CPPUNIT_ASSERT_DOUBLES_EQUAL(x, rh.energyError(), 0.01 * x);
0087   }
0088 }