CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
ShallowGainCalibration Class Reference

#include <ShallowGainCalibration.h>

Inheritance diagram for ShallowGainCalibration:
edm::stream::EDProducer<>

Public Member Functions

 ShallowGainCalibration (const edm::ParameterSet &)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

bool isFarFromBorder (TrajectoryStateOnSurface *trajState, const uint32_t detid, const edm::EventSetup *iSetup)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
double thickness (DetId id)
 

Private Attributes

const edm::EDGetTokenT
< TrajTrackAssociationCollection
association_token_
 
const edm::ESGetToken
< SiStripGain, SiStripGainRcd
gain_token_
 
std::map< DetId, double > m_thicknessMap
 
const TrackerGeometrym_tracker
 
std::string Prefix
 
std::string Suffix
 
const edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
tkGeom_token_
 
const edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
trackerGeometry_token_
 
const edm::EDGetTokenT
< edm::View< reco::Track > > 
tracks_token_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 51 of file ShallowGainCalibration.h.

Constructor & Destructor Documentation

ShallowGainCalibration::ShallowGainCalibration ( const edm::ParameterSet iConfig)
explicit

Definition at line 7 of file ShallowGainCalibration.cc.

References Prefix, and Suffix.

8  : tracks_token_(consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("Tracks"))),
9  association_token_(consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("Tracks"))),
10  trackerGeometry_token_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
11  gain_token_(esConsumes<SiStripGain, SiStripGainRcd>()),
12  tkGeom_token_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
13  Suffix(iConfig.getParameter<std::string>("Suffix")),
14  Prefix(iConfig.getParameter<std::string>("Prefix")) {
15  produces<std::vector<int>>(Prefix + "trackindex" + Suffix);
16  produces<std::vector<unsigned int>>(Prefix + "rawid" + Suffix);
17  produces<std::vector<double>>(Prefix + "localdirx" + Suffix);
18  produces<std::vector<double>>(Prefix + "localdiry" + Suffix);
19  produces<std::vector<double>>(Prefix + "localdirz" + Suffix);
20  produces<std::vector<unsigned short>>(Prefix + "firststrip" + Suffix);
21  produces<std::vector<unsigned short>>(Prefix + "nstrips" + Suffix);
22  produces<std::vector<bool>>(Prefix + "saturation" + Suffix);
23  produces<std::vector<bool>>(Prefix + "overlapping" + Suffix);
24  produces<std::vector<bool>>(Prefix + "farfromedge" + Suffix);
25  produces<std::vector<unsigned int>>(Prefix + "charge" + Suffix);
26  produces<std::vector<double>>(Prefix + "path" + Suffix);
27 #ifdef ExtendedCALIBTree
28  produces<std::vector<double>>(Prefix + "chargeoverpath" + Suffix);
29 #endif
30  produces<std::vector<unsigned char>>(Prefix + "amplitude" + Suffix);
31  produces<std::vector<double>>(Prefix + "gainused" + Suffix);
32  produces<std::vector<double>>(Prefix + "gainusedTick" + Suffix);
33 }
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_token_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometry_token_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeom_token_
const edm::EDGetTokenT< TrajTrackAssociationCollection > association_token_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const edm::ESGetToken< SiStripGain, SiStripGainRcd > gain_token_

Member Function Documentation

bool ShallowGainCalibration::isFarFromBorder ( TrajectoryStateOnSurface trajState,
const uint32_t  detid,
const edm::EventSetup iSetup 
)
private

Definition at line 234 of file ShallowGainCalibration.cc.

References Surface::bounds(), Exception, edm::EventSetup::getHandle(), Bounds::length(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localPosition(), LocalTrajectoryError::positionError(), GeomDet::surface(), tkGeom_token_, PV3DBase< T, PVType, FrameType >::y(), and LocalError::yy().

Referenced by produce().

236  {
238 
239  LocalPoint HitLocalPos = trajState->localPosition();
240  LocalError HitLocalError = trajState->localError().positionError();
241 
242  const GeomDetUnit* it = tkGeom->idToDetUnit(DetId(detid));
243  if (dynamic_cast<const StripGeomDetUnit*>(it) == nullptr && dynamic_cast<const PixelGeomDetUnit*>(it) == nullptr) {
244  throw cms::Exception("Logic Error") << "\t\t this detID doesn't seem to belong to the Tracker";
245  }
246 
247  const BoundPlane plane = it->surface();
248  const TrapezoidalPlaneBounds* trapezoidalBounds(dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
249  const RectangularPlaneBounds* rectangularBounds(dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
250 
251  double DistFromBorder = 1.0;
252  double HalfLength = it->surface().bounds().length() / 2.0;
253 
254  if (trapezoidalBounds) {
255  std::array<const float, 4> const& parameters = (*trapezoidalBounds).parameters();
256  HalfLength = parameters[3];
257  } else if (rectangularBounds) {
258  HalfLength = it->surface().bounds().length() / 2.0;
259  } else {
260  return false;
261  }
262 
263  if (fabs(HitLocalPos.y()) + HitLocalError.yy() >= (HalfLength - DistFromBorder))
264  return false;
265 
266  return true;
267 }
virtual float length() const =0
T y() const
Definition: PV3DBase.h:60
const Bounds & bounds() const
Definition: Surface.h:87
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeom_token_
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
LocalError positionError() const
float yy() const
Definition: LocalError.h:24
const LocalTrajectoryError & localError() const
Definition: DetId.h:17
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
void ShallowGainCalibration::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 35 of file ShallowGainCalibration.cc.

References a, SiStripCluster::amplitudes(), association_token_, RecoTauCleanerPlugins::charge, PixelTestBeamValidation_cfi::Charge, SiStripRecHit1D::cluster(), SiStripRecHit2D::cluster(), SiPixelRecHit::cluster(), edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, shallow::findTrackIndex(), SiStripCluster::firstStrip(), gain_token_, TrackingRecHit::geographicalId(), edm::Event::getByToken(), edm::EventSetup::getData(), edm::EventSetup::getHandle(), h, isFarFromBorder(), edm::ESHandleBase::isValid(), TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localDirection(), m_tracker, PV3DBase< T, PVType, FrameType >::mag(), Trajectory::measurements(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), SiStripMatchedRecHit2D::monoCluster(), SiStripMatchedRecHit2D::monoId(), eostools::move(), Overlapping, fed_dqm_sourceclient-live_cfg::path, SiPixelCluster::pixelADC(), Prefix, edm::Event::put(), DetId::rawId(), SiStripMatchedRecHit2D::stereoCluster(), SiStripMatchedRecHit2D::stereoId(), Suffix, thickness(), HLT_FULL_cff::track, trackerGeometry_token_, tracks, tracks_token_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

35  {
36  auto trackindex = std::make_unique<std::vector<int>>();
37  auto rawid = std::make_unique<std::vector<unsigned int>>();
38  auto localdirx = std::make_unique<std::vector<double>>();
39  auto localdiry = std::make_unique<std::vector<double>>();
40  auto localdirz = std::make_unique<std::vector<double>>();
41  auto firststrip = std::make_unique<std::vector<unsigned short>>();
42  auto nstrips = std::make_unique<std::vector<unsigned short>>();
43  auto saturation = std::make_unique<std::vector<bool>>();
44  auto overlapping = std::make_unique<std::vector<bool>>();
45  auto farfromedge = std::make_unique<std::vector<bool>>();
46  auto charge = std::make_unique<std::vector<unsigned int>>();
47  auto path = std::make_unique<std::vector<double>>();
48 #ifdef ExtendedCALIBTree
49  auto chargeoverpath = std::make_unique<std::vector<double>>();
50 #endif
51  auto amplitude = std::make_unique<std::vector<unsigned char>>();
52  auto gainused = std::make_unique<std::vector<double>>();
53  auto gainusedTick = std::make_unique<std::vector<double>>();
54 
58  iEvent.getByToken(tracks_token_, tracks);
60  iEvent.getByToken(association_token_, associations);
61 
63  association != associations->end();
64  association++) {
65  const Trajectory* traj = association->key.get();
66  const reco::Track* track = association->val.get();
67 
68  vector<TrajectoryMeasurement> measurements = traj->measurements();
69  for (vector<TrajectoryMeasurement>::const_iterator measurement_it = measurements.begin();
70  measurement_it != measurements.end();
71  measurement_it++) {
72  TrajectoryStateOnSurface trajState = measurement_it->updatedState();
73  if (!trajState.isValid())
74  continue;
75 
76  const TrackingRecHit* hit = (*measurement_it->recHit()).hit();
77  const SiStripRecHit1D* sistripsimple1dhit = dynamic_cast<const SiStripRecHit1D*>(hit);
78  const SiStripRecHit2D* sistripsimplehit = dynamic_cast<const SiStripRecHit2D*>(hit);
79  const SiStripMatchedRecHit2D* sistripmatchedhit = dynamic_cast<const SiStripMatchedRecHit2D*>(hit);
80  const SiPixelRecHit* sipixelhit = dynamic_cast<const SiPixelRecHit*>(hit);
81 
82  const SiPixelCluster* PixelCluster = nullptr;
83  const SiStripCluster* StripCluster = nullptr;
84  uint32_t DetId = 0;
85 
86  for (unsigned int h = 0; h < 2; h++) {
87  if (!sistripmatchedhit && h == 1) {
88  continue;
89  } else if (sistripmatchedhit && h == 0) {
90  StripCluster = &sistripmatchedhit->monoCluster();
91  DetId = sistripmatchedhit->monoId();
92  } else if (sistripmatchedhit && h == 1) {
93  StripCluster = &sistripmatchedhit->stereoCluster();
94  ;
95  DetId = sistripmatchedhit->stereoId();
96  } else if (sistripsimplehit) {
97  StripCluster = (sistripsimplehit->cluster()).get();
98  DetId = sistripsimplehit->geographicalId().rawId();
99  } else if (sistripsimple1dhit) {
100  StripCluster = (sistripsimple1dhit->cluster()).get();
101  DetId = sistripsimple1dhit->geographicalId().rawId();
102  } else if (sipixelhit) {
103  PixelCluster = (sipixelhit->cluster()).get();
104  DetId = sipixelhit->geographicalId().rawId();
105  } else {
106  continue;
107  }
108 
109  LocalVector trackDirection = trajState.localDirection();
110  double cosine = trackDirection.z() / trackDirection.mag();
111  bool Saturation = false;
112  bool Overlapping = false;
113  unsigned int Charge = 0;
114  double Path = (10.0 * thickness(DetId)) / fabs(cosine);
115  double PrevGain = -1;
116  double PrevGainTick = -1;
117  int FirstStrip = 0;
118  int NStrips = 0;
119 
120  if (StripCluster) {
121  const auto& Ampls = StripCluster->amplitudes();
122  FirstStrip = StripCluster->firstStrip();
123  NStrips = Ampls.size();
124  int APVId = FirstStrip / 128;
125 
126  if (gainHandle.isValid()) {
127  PrevGain = gainHandle->getApvGain(APVId, gainHandle->getRange(DetId, 1), 1);
128  PrevGainTick = gainHandle->getApvGain(APVId, gainHandle->getRange(DetId, 0), 1);
129  }
130 
131  for (unsigned int a = 0; a < Ampls.size(); a++) {
132  Charge += Ampls[a];
133  if (Ampls[a] >= 254)
134  Saturation = true;
135  amplitude->push_back(Ampls[a]);
136  }
137 
138  if (FirstStrip == 0)
139  Overlapping = true;
140  if (FirstStrip == 128)
141  Overlapping = true;
142  if (FirstStrip == 256)
143  Overlapping = true;
144  if (FirstStrip == 384)
145  Overlapping = true;
146  if (FirstStrip == 512)
147  Overlapping = true;
148  if (FirstStrip == 640)
149  Overlapping = true;
150 
151  if (FirstStrip <= 127 && FirstStrip + Ampls.size() > 127)
152  Overlapping = true;
153  if (FirstStrip <= 255 && FirstStrip + Ampls.size() > 255)
154  Overlapping = true;
155  if (FirstStrip <= 383 && FirstStrip + Ampls.size() > 383)
156  Overlapping = true;
157  if (FirstStrip <= 511 && FirstStrip + Ampls.size() > 511)
158  Overlapping = true;
159  if (FirstStrip <= 639 && FirstStrip + Ampls.size() > 639)
160  Overlapping = true;
161 
162  if (FirstStrip + Ampls.size() == 127)
163  Overlapping = true;
164  if (FirstStrip + Ampls.size() == 255)
165  Overlapping = true;
166  if (FirstStrip + Ampls.size() == 383)
167  Overlapping = true;
168  if (FirstStrip + Ampls.size() == 511)
169  Overlapping = true;
170  if (FirstStrip + Ampls.size() == 639)
171  Overlapping = true;
172  if (FirstStrip + Ampls.size() == 767)
173  Overlapping = true;
174  } else if (PixelCluster) {
175  const auto& Ampls = PixelCluster->pixelADC();
176  int FirstRow = PixelCluster->minPixelRow();
177  int FirstCol = PixelCluster->minPixelCol();
178  FirstStrip = ((FirstRow / 80) << 3 | (FirstCol / 52)) * 128; //Hack to save the APVId
179  NStrips = 0;
180  Saturation = false;
181  Overlapping = false;
182 
183  for (unsigned int a = 0; a < Ampls.size(); a++) {
184  Charge += Ampls[a];
185  if (Ampls[a] >= 254)
186  Saturation = true;
187  }
188  }
189 #ifdef ExtendedCALIBTree
190  double ChargeOverPath = (double)Charge / Path;
191 #endif
192 
193  trackindex->push_back(shallow::findTrackIndex(tracks, track));
194  rawid->push_back(DetId);
195  localdirx->push_back(trackDirection.x());
196  localdiry->push_back(trackDirection.y());
197  localdirz->push_back(trackDirection.z());
198  firststrip->push_back(FirstStrip);
199  nstrips->push_back(NStrips);
200  saturation->push_back(Saturation);
201  overlapping->push_back(Overlapping);
202  farfromedge->push_back(StripCluster ? isFarFromBorder(&trajState, DetId, &iSetup) : true);
203  charge->push_back(Charge);
204  path->push_back(Path);
205 #ifdef ExtendedCALIBTree
206  chargeoverpath->push_back(ChargeOverPath);
207 #endif
208  gainused->push_back(PrevGain);
209  gainusedTick->push_back(PrevGainTick);
210  }
211  }
212  }
213 
214  iEvent.put(std::move(trackindex), Prefix + "trackindex" + Suffix);
215  iEvent.put(std::move(rawid), Prefix + "rawid" + Suffix);
216  iEvent.put(std::move(localdirx), Prefix + "localdirx" + Suffix);
217  iEvent.put(std::move(localdiry), Prefix + "localdiry" + Suffix);
218  iEvent.put(std::move(localdirz), Prefix + "localdirz" + Suffix);
219  iEvent.put(std::move(firststrip), Prefix + "firststrip" + Suffix);
220  iEvent.put(std::move(nstrips), Prefix + "nstrips" + Suffix);
221  iEvent.put(std::move(saturation), Prefix + "saturation" + Suffix);
222  iEvent.put(std::move(overlapping), Prefix + "overlapping" + Suffix);
223  iEvent.put(std::move(farfromedge), Prefix + "farfromedge" + Suffix);
224  iEvent.put(std::move(charge), Prefix + "charge" + Suffix);
225  iEvent.put(std::move(path), Prefix + "path" + Suffix);
226 #ifdef ExtendedCALIBTree
227  iEvent.put(std::move(chargeoverpath), Prefix + "chargeoverpath" + Suffix);
228 #endif
229  iEvent.put(std::move(amplitude), Prefix + "amplitude" + Suffix);
230  iEvent.put(std::move(gainused), Prefix + "gainused" + Suffix);
231  iEvent.put(std::move(gainusedTick), Prefix + "gainusedTick" + Suffix);
232 }
ClusterRef cluster() const
int minPixelCol() const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
unsigned int stereoId() const
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_token_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
int findTrackIndex(const edm::Handle< edm::View< reco::Track > > &h, const reco::Track *t)
Definition: ShallowTools.cc:25
SiStripCluster const & monoCluster() const
LocalVector localDirection() const
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometry_token_
SiStripCluster const & amplitudes() const
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
T y() const
Definition: PV3DBase.h:60
auto const & tracks
cannot be loose
uint16_t firstStrip() const
bool getData(T &iHolder) const
Definition: EventSetup.h:122
DataContainer const & measurements() const
Definition: Trajectory.h:178
T mag() const
Definition: PV3DBase.h:64
int minPixelRow() const
std::tuple< layerClusterToCaloParticle, caloParticleToLayerCluster > association
Definition: Path.h:41
T z() const
Definition: PV3DBase.h:61
def move
Definition: eostools.py:511
ClusterRef cluster() const
const edm::EDGetTokenT< TrajTrackAssociationCollection > association_token_
const std::vector< uint16_t > & pixelADC() const
Definition: DetId.h:17
const TrackerGeometry * m_tracker
ClusterRef cluster() const
Definition: SiPixelRecHit.h:47
bool isFarFromBorder(TrajectoryStateOnSurface *trajState, const uint32_t detid, const edm::EventSetup *iSetup)
SiStripCluster const & stereoCluster() const
Pixel cluster – collection of neighboring pixels above threshold.
double a
Definition: hdecay.h:119
const edm::ESGetToken< SiStripGain, SiStripGainRcd > gain_token_
unsigned int monoId() const
DetId geographicalId() const
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
bool isValid() const
Definition: ESHandle.h:44
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
T x() const
Definition: PV3DBase.h:59
Our base class.
Definition: SiPixelRecHit.h:23
double ShallowGainCalibration::thickness ( DetId  id)
private

Definition at line 269 of file ShallowGainCalibration.cc.

References Exception, gpuClustering::id, TrackerGeometry::idToDetUnit(), fastTrackerRecHitType::isPixel(), m_thicknessMap, and m_tracker.

Referenced by produce().

269  {
270  map<DetId, double>::iterator th = m_thicknessMap.find(id);
271  if (th != m_thicknessMap.end())
272  return (*th).second;
273  else {
274  double detThickness = 1.;
275  //compute thickness normalization
276  const GeomDetUnit* it = m_tracker->idToDetUnit(DetId(id));
277  bool isPixel = dynamic_cast<const PixelGeomDetUnit*>(it) != nullptr;
278  bool isStrip = dynamic_cast<const StripGeomDetUnit*>(it) != nullptr;
279  if (!isPixel && !isStrip) {
280  throw cms::Exception("Logic Error") << "\t\t this detID doesn't seem to belong to the Tracker";
281  } else {
282  detThickness = it->surface().bounds().thickness();
283  }
284 
285  m_thicknessMap[id] = detThickness; //computed value
286  return detThickness;
287  }
288 }
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
uint16_t *__restrict__ id
std::map< DetId, double > m_thicknessMap
Definition: DetId.h:17
const TrackerGeometry * m_tracker
bool isPixel(HitType hitType)

Member Data Documentation

const edm::EDGetTokenT<TrajTrackAssociationCollection> ShallowGainCalibration::association_token_
private

Definition at line 57 of file ShallowGainCalibration.h.

Referenced by produce().

const edm::ESGetToken<SiStripGain, SiStripGainRcd> ShallowGainCalibration::gain_token_
private

Definition at line 60 of file ShallowGainCalibration.h.

Referenced by produce().

std::map<DetId, double> ShallowGainCalibration::m_thicknessMap
private

Definition at line 71 of file ShallowGainCalibration.h.

Referenced by thickness().

const TrackerGeometry* ShallowGainCalibration::m_tracker
private

Definition at line 70 of file ShallowGainCalibration.h.

Referenced by produce(), and thickness().

std::string ShallowGainCalibration::Prefix
private

Definition at line 64 of file ShallowGainCalibration.h.

Referenced by produce(), and ShallowGainCalibration().

std::string ShallowGainCalibration::Suffix
private

Definition at line 63 of file ShallowGainCalibration.h.

Referenced by produce(), and ShallowGainCalibration().

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> ShallowGainCalibration::tkGeom_token_
private

Definition at line 61 of file ShallowGainCalibration.h.

Referenced by isFarFromBorder().

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> ShallowGainCalibration::trackerGeometry_token_
private

Definition at line 59 of file ShallowGainCalibration.h.

Referenced by produce().

const edm::EDGetTokenT<edm::View<reco::Track> > ShallowGainCalibration::tracks_token_
private

Definition at line 56 of file ShallowGainCalibration.h.

Referenced by produce().