1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#ifndef DQM_SiStripMonitorHardware_SiStripFEDEmulator_H
#define DQM_SiStripMonitorHardware_SiStripFEDEmulator_H
// Created 2010-01-20 by A.-M. Magnan
// Class intended to mimic the data path in the FED firmware in software
// steps: pedestal subtraction, CM subtraction, clustering and zero-suppression.
#include <sstream>
#include <fstream>
#include <iostream>
#include "FWCore/Framework/interface/ESHandle.h"
#include "DataFormats/Common/interface/DetSetVector.h"
#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
#include "DataFormats/FEDRawData/interface/FEDRawData.h"
#include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
#include "DataFormats/SiStripDigi/interface/SiStripProcessedRawDigi.h"
#include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
#include "DataFormats/Common/interface/Wrapper.h"
#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
#include "CondFormats/SiStripObjects/interface/SiStripPedestals.h"
#include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
#include "EventFilter/SiStripRawToDigi/interface/SiStripFEDBuffer.h"
//for the zero suppression algorithm(s)
#include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripRawProcessingFactory.h"
#include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripRawProcessingAlgorithms.h"
namespace sistrip {
class FEDEmulator {
public:
FEDEmulator();
~FEDEmulator();
void initialise(const bool byModule);
void initialiseModule(const uint32_t aDetId, const uint32_t aNPairs, const uint32_t aPair);
void retrievePedestals(const edm::ESHandle<SiStripPedestals>& aHandle);
void retrieveNoises(const edm::ESHandle<SiStripNoises>& aHandle);
void subtractPedestals(const edm::DetSetVector<SiStripRawDigi>::const_iterator& inputChannel,
std::vector<SiStripRawDigi>& pedsDetSetData,
std::vector<SiStripProcessedRawDigi>& noiseDetSetData,
std::vector<SiStripRawDigi>& pedSubtrDetSetData,
std::vector<uint32_t>& medsDetSetData,
const bool fillApvsForCM);
void subtractCM(const std::vector<SiStripRawDigi>& pedSubtrDetSetData,
std::vector<SiStripRawDigi>& cmSubtrDetSetData);
void zeroSuppress(const std::vector<SiStripRawDigi>& cmSubtrDetSetData,
edm::DetSet<SiStripDigi>& zsDetSetData,
const std::unique_ptr<SiStripRawProcessingAlgorithms>& algorithms);
uint32_t fedIndex(const uint16_t aFedChannel);
void fillPeds(const edm::DetSetVector<SiStripRawDigi>::const_iterator& peds);
void fillNoises(const edm::DetSetVector<SiStripProcessedRawDigi>::const_iterator& noise);
void fillMedians(const std::map<uint32_t, std::vector<uint32_t> >::const_iterator& meds);
void print(std::ostream& aOs);
void printPeds(std::ostream& aOs);
void printNoises(std::ostream& aOs);
void printMeds(std::ostream& aOs);
private:
static const char* const messageLabel_;
bool byModule_;
uint32_t detId_;
uint32_t nPairs_;
uint32_t pair_;
uint32_t minStrip_;
uint32_t maxStrip_;
std::vector<int> pedestals_;
std::vector<float> noises_;
std::vector<uint32_t> medians_;
}; //class FEDEmulator
} //namespace sistrip
#endif //DQM_SiStripMonitorHardware_SiStripFEDEmulator_H
|