Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:59:38

0001 #ifndef Tracker_APVAnalysis_h
0002 #define Tracker_APVAnalysis_h
0003 
0004 #include <vector>
0005 #include <iostream>
0006 // user include files
0007 #include "FWCore/Framework/interface/Frameworkfwd.h"
0008 #include "DataFormats/Common/interface/DetSetVector.h"
0009 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
0010 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
0011 
0012 #include "FWCore/Framework/interface/Event.h"
0013 
0014 //#define DEBUG_INSTANCE_COUNTING
0015 
0016 #ifdef DEBUG_INSTANCE_COUNTING
0017 #include "CommonDet/DetUtilities/interface/InstanceCounting.h"
0018 #endif
0019 
0020 class TkApvMask;
0021 class TkCommonModeCalculator;
0022 class TkPedestalCalculator;
0023 class TkNoiseCalculator;
0024 
0025 #include <vector>
0026 #include <utility>
0027 
0028 /**
0029  * ApvAnalysis is the base class for the simulation of APV/FED.
0030  * Each instance has
0031  * - a TkPedestalCalculator
0032  * - a TkCommonModeCalculator
0033  * - a TkApvMask
0034  * - a TkNoiseCalculator
0035  */
0036 
0037 class ApvAnalysis
0038 #ifdef DEBUG_INSTANCE_COUNTING
0039     : public InstanceCounting<ApvAnalysis>
0040 #endif
0041 {
0042 public:
0043   typedef edm::DetSet<SiStripRawDigi> RawSignalType;
0044   typedef std::vector<float> PedestalType;
0045 
0046   ApvAnalysis(int nev);
0047   ~ApvAnalysis() { ; }
0048 
0049   //
0050   // Tell ApvAnalysis which algorithms to use.
0051   //
0052 
0053   void setCommonModeCalculator(TkCommonModeCalculator& in) { theTkCommonModeCalculator = &in; }
0054   void setPedestalCalculator(TkPedestalCalculator& in) { theTkPedestalCalculator = &in; }
0055   void setNoiseCalculator(TkNoiseCalculator& in) { theTkNoiseCalculator = &in; }
0056   void setMask(TkApvMask& in) { theTkApvMask = &in; }
0057 
0058   TkCommonModeCalculator& commonModeCalculator() { return *theTkCommonModeCalculator; }
0059   TkPedestalCalculator& pedestalCalculator() { return *theTkPedestalCalculator; }
0060   TkNoiseCalculator& noiseCalculator() { return *theTkNoiseCalculator; }
0061   TkApvMask& mask() { return *theTkApvMask; }
0062 
0063   //
0064   // Give store/load commands to the TkPedestalCalculator and to
0065   // TkNoiseCalculator, will use ApvEventReader.
0066   // Has to be done here because they have no access to the reader.
0067   //
0068   /** Update pedestals & noise with current event */
0069   void updateCalibration(edm::DetSet<SiStripRawDigi>& in);
0070   void newEvent() const;
0071 
0072 private:
0073   TkCommonModeCalculator* theTkCommonModeCalculator;
0074   TkPedestalCalculator* theTkPedestalCalculator;
0075   TkNoiseCalculator* theTkNoiseCalculator;
0076   TkApvMask* theTkApvMask;
0077   int nEventsForNoiseCalibration_;
0078   int eventsRequiredToUpdate_;
0079 };
0080 #endif