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
|
#ifndef Tracker_APVAnalysis_h
#define Tracker_APVAnalysis_h
#include <vector>
#include <iostream>
// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "DataFormats/Common/interface/DetSetVector.h"
#include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
#include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
#include "FWCore/Framework/interface/Event.h"
//#define DEBUG_INSTANCE_COUNTING
#ifdef DEBUG_INSTANCE_COUNTING
#include "CommonDet/DetUtilities/interface/InstanceCounting.h"
#endif
class TkApvMask;
class TkCommonModeCalculator;
class TkPedestalCalculator;
class TkNoiseCalculator;
#include <vector>
#include <utility>
/**
* ApvAnalysis is the base class for the simulation of APV/FED.
* Each instance has
* - a TkPedestalCalculator
* - a TkCommonModeCalculator
* - a TkApvMask
* - a TkNoiseCalculator
*/
class ApvAnalysis
#ifdef DEBUG_INSTANCE_COUNTING
: public InstanceCounting<ApvAnalysis>
#endif
{
public:
typedef edm::DetSet<SiStripRawDigi> RawSignalType;
typedef std::vector<float> PedestalType;
ApvAnalysis(int nev);
~ApvAnalysis() { ; }
//
// Tell ApvAnalysis which algorithms to use.
//
void setCommonModeCalculator(TkCommonModeCalculator& in) { theTkCommonModeCalculator = ∈ }
void setPedestalCalculator(TkPedestalCalculator& in) { theTkPedestalCalculator = ∈ }
void setNoiseCalculator(TkNoiseCalculator& in) { theTkNoiseCalculator = ∈ }
void setMask(TkApvMask& in) { theTkApvMask = ∈ }
TkCommonModeCalculator& commonModeCalculator() { return *theTkCommonModeCalculator; }
TkPedestalCalculator& pedestalCalculator() { return *theTkPedestalCalculator; }
TkNoiseCalculator& noiseCalculator() { return *theTkNoiseCalculator; }
TkApvMask& mask() { return *theTkApvMask; }
//
// Give store/load commands to the TkPedestalCalculator and to
// TkNoiseCalculator, will use ApvEventReader.
// Has to be done here because they have no access to the reader.
//
/** Update pedestals & noise with current event */
void updateCalibration(edm::DetSet<SiStripRawDigi>& in);
void newEvent() const;
private:
TkCommonModeCalculator* theTkCommonModeCalculator;
TkPedestalCalculator* theTkPedestalCalculator;
TkNoiseCalculator* theTkNoiseCalculator;
TkApvMask* theTkApvMask;
int nEventsForNoiseCalibration_;
int eventsRequiredToUpdate_;
};
#endif
|