Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:28

0001 #ifndef SIMCALORIMETRY_ECALTRIGPRIMALGOS_ECALFENIXSTRIP_H
0002 #define SIMCALORIMETRY_ECALTRIGPRIMALGOS_ECALFENIXSTRIP_H
0003 
0004 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixAmplitudeFilter.h>
0005 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixOddAmplitudeFilter.h>
0006 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixEtStrip.h>
0007 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixLinearizer.h>
0008 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixPeakFinder.h>
0009 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixStripFgvbEE.h>
0010 
0011 #include "DataFormats/EcalDetId/interface/EcalTriggerElectronicsId.h"
0012 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
0013 #include <DataFormats/EcalDigi/interface/EBDataFrame.h>
0014 #include <DataFormats/EcalDigi/interface/EEDataFrame.h>
0015 #include <string>
0016 
0017 class EBDataFrame;
0018 class EcalTriggerPrimitiveSample;
0019 class EcalTPGSlidingWindow;
0020 class EcalTPGFineGrainStripEE;
0021 class EcalFenixStripFgvbEE;
0022 class EcalFenixStripFormatEB;
0023 class EcalFenixStripFormatEE;
0024 class EcalTPGStripStatus;
0025 class EcalTPGTPMode;
0026 
0027 /**
0028     \class EcalFenixStrip
0029     \brief class representing the Fenix chip, format strip
0030 */
0031 class EcalFenixStrip {
0032 public:
0033   // constructor, destructor
0034   EcalFenixStrip(const EcalElectronicsMapping *theMapping,
0035                  bool debug,
0036                  bool famos,
0037                  int maxNrSamples,
0038                  int nbMaxXtals,
0039                  bool TPinfoPrintout);
0040   virtual ~EcalFenixStrip();
0041 
0042 private:
0043   const EcalElectronicsMapping *theMapping_;
0044 
0045   bool debug_;
0046   bool famos_;
0047   int nbMaxXtals_;
0048   bool tpInfoPrintout_;
0049 
0050   std::vector<EcalFenixLinearizer *> linearizer_;
0051 
0052   EcalFenixAmplitudeFilter *amplitude_filter_;
0053   EcalFenixOddAmplitudeFilter *oddAmplitude_filter_;
0054 
0055   EcalFenixPeakFinder *peak_finder_;
0056 
0057   EcalFenixStripFormatEB *fenixFormatterEB_;
0058 
0059   EcalFenixStripFormatEE *fenixFormatterEE_;
0060 
0061   EcalFenixEtStrip *adder_;
0062 
0063   EcalFenixStripFgvbEE *fgvbEE_;
0064 
0065   // data formats for each event
0066   std::vector<std::vector<int>> lin_out_;
0067   std::vector<int> add_out_;
0068 
0069   // Data formats for even filter. Up to the adder only 1 path, then splitted.
0070   std::vector<int> even_filt_out_;
0071   std::vector<int> even_peak_out_;
0072 
0073   // Data formats for odd filter, as data path is duplicated for odd filter
0074   std::vector<int> odd_filt_out_;
0075   std::vector<int> odd_peak_out_;
0076 
0077   std::vector<int> format_out_;
0078   std::vector<int> fgvb_out_;
0079   std::vector<int> fgvb_out_temp_;
0080 
0081   const EcalTPGPedestals *ecaltpPed_;
0082   const EcalTPGLinearizationConst *ecaltpLin_;
0083   const EcalTPGWeightIdMap *ecaltpgWeightMap_;
0084   const EcalTPGWeightGroup *ecaltpgWeightGroup_;
0085   const EcalTPGOddWeightIdMap *ecaltpgOddWeightMap_;
0086   const EcalTPGOddWeightGroup *ecaltpgOddWeightGroup_;
0087   const EcalTPGSlidingWindow *ecaltpgSlidW_;
0088   const EcalTPGFineGrainStripEE *ecaltpgFgStripEE_;
0089   const EcalTPGCrystalStatus *ecaltpgBadX_;
0090   const EcalTPGStripStatus *ecaltpgStripStatus_;
0091   const EcalTPGTPMode *ecaltpgTPMode_;
0092 
0093   bool identif_;
0094 
0095 public:
0096   void setPointers(const EcalTPGPedestals *ecaltpPed,
0097                    const EcalTPGLinearizationConst *ecaltpLin,
0098                    const EcalTPGWeightIdMap *ecaltpgWeightMap,
0099                    const EcalTPGWeightGroup *ecaltpgWeightGroup,
0100                    const EcalTPGOddWeightIdMap *ecaltpgOddWeightMap,
0101                    const EcalTPGOddWeightGroup *ecaltpgOddWeightGroup,
0102                    const EcalTPGSlidingWindow *ecaltpgSlidW,
0103                    const EcalTPGFineGrainStripEE *ecaltpgFgStripEE,
0104                    const EcalTPGCrystalStatus *ecaltpgBadX,
0105                    const EcalTPGStripStatus *ecaltpgStripStatus,
0106                    const EcalTPGTPMode *ecaltpgTPMode) {
0107     ecaltpPed_ = ecaltpPed;
0108     ecaltpLin_ = ecaltpLin;
0109     ecaltpgWeightMap_ = ecaltpgWeightMap;
0110     ecaltpgWeightGroup_ = ecaltpgWeightGroup;
0111     ecaltpgOddWeightMap_ = ecaltpgOddWeightMap;
0112     ecaltpgOddWeightGroup_ = ecaltpgOddWeightGroup;
0113     ecaltpgSlidW_ = ecaltpgSlidW;
0114     ecaltpgFgStripEE_ = ecaltpgFgStripEE;
0115     ecaltpgBadX_ = ecaltpgBadX;
0116     ecaltpgStripStatus_ = ecaltpgStripStatus;
0117     ecaltpgTPMode_ = ecaltpgTPMode;
0118   }
0119 
0120   // main methods
0121   void process(std::vector<EBDataFrame> &samples, int nrXtals, std::vector<int> &out);
0122   void process(std::vector<EEDataFrame> &samples, int nrXtals, std::vector<int> &out);
0123 
0124   template <class T>
0125   void process_part1(int identif,
0126                      std::vector<T> &df,
0127                      int nrXtals,
0128                      uint32_t stripid,
0129                      const EcalTPGPedestals *ecaltpPed,
0130                      const EcalTPGLinearizationConst *ecaltpLin,
0131                      const EcalTPGWeightIdMap *ecaltpgWeightMap,
0132                      const EcalTPGWeightGroup *ecaltpgWeightGroup,
0133                      const EcalTPGOddWeightIdMap *ecaltpgOddWeightMap,
0134                      const EcalTPGOddWeightGroup *ecaltpgOddWeightGroup,
0135                      const EcalTPGCrystalStatus *ecaltpBadX);
0136   // process method is splitted in 2 parts:
0137   //   the first one is overloaded, the same except input
0138   //   the second part is slightly different for barrel/endcap
0139   void process_part2_barrel(uint32_t stripid,
0140                             const EcalTPGSlidingWindow *ecaltpgSlidW,
0141                             const EcalTPGFineGrainStripEE *ecaltpgFgStripEE);
0142 
0143   void process_part2_endcap(uint32_t stripid,
0144                             const EcalTPGSlidingWindow *ecaltpgSlidW,
0145                             const EcalTPGFineGrainStripEE *ecaltpgFgStripEE,
0146                             const EcalTPGStripStatus *ecaltpgStripStatus);
0147 
0148   // getters for the algorithms  ;
0149 
0150   EcalFenixLinearizer *getLinearizer(int i) const { return linearizer_[i]; }
0151   EcalFenixEtStrip *getAdder() const { return adder_; }
0152   EcalFenixAmplitudeFilter *getEvenFilter() const { return amplitude_filter_; }
0153   EcalFenixOddAmplitudeFilter *getOddFilter() const { return oddAmplitude_filter_; }
0154   EcalFenixPeakFinder *getPeakFinder() const { return peak_finder_; }
0155 
0156   EcalFenixStripFormatEB *getFormatterEB() const { return fenixFormatterEB_; }
0157   EcalFenixStripFormatEE *getFormatterEE() const { return fenixFormatterEE_; }
0158 
0159   EcalFenixStripFgvbEE *getFGVB() const { return fgvbEE_; }
0160 
0161   void setbadStripMissing(bool flag) { identif_ = flag; }
0162   bool getbadStripMissing() const { return identif_; }
0163 };
0164 #endif