CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
TTStubBuilder< T > Class Template Reference

Plugin to load the Stub finding algorithm and produce the collection of Stubs that goes in the event content. More...

#include <TTStubBuilder.h>

Inheritance diagram for TTStubBuilder< T >:
edm::one::EDProducer< edm::one::WatchRuns > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

enum  FEreject { CBCFailOffset = 500, CICFailOffset = 1000 }
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 TTStubBuilder (const edm::ParameterSet &iConfig)
 Constructor. More...
 
 ~TTStubBuilder () override
 Destructor;. More...
 
- Public Member Functions inherited from edm::one::EDProducer< edm::one::WatchRuns >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void beginRun (const edm::Run &run, const edm::EventSetup &iSetup) override
 Mandatory methods. More...
 
void endRun (const edm::Run &run, const edm::EventSetup &iSetup) override
 End run. More...
 
template<typename TT >
void fill (edmNew::DetSetVector< TT > &outputEP, const DetId &detId, const std::vector< TT > &inputVec) const
 Fill output cluster & stub collections. More...
 
template<>
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)
 Implement the producer. More...
 
template<>
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)
 Implement the producer. More...
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
template<>
void updateStubs (const edm::OrphanHandle< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ >>> &clusterHandle, const edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &inputEDstubs, edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &outputEDstubs) const
 Implementation of methods of TTClusterBuilder.h. More...
 
void updateStubs (const edm::OrphanHandle< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ >>> &clusterHandle, const edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &inputEDstubs, edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &outputEDstubs) const
 Update output stubs with Refs to cluster collection that is associated to stubs. More...
 

Static Private Member Functions

static bool SortStubBendPairs (const std::pair< unsigned int, double > &left, const std::pair< unsigned int, double > &right)
 Sort routine for stub ordering. More...
 
static bool SortStubsBend (const TTStub< T > &left, const TTStub< T > &right)
 Analogous sorting routine directly from stubs. More...
 

Private Attributes

bool applyFE
 FE truncation. More...
 
edm::EDGetTokenT< edmNew::DetSetVector< TTCluster< T > > > clustersToken
 
bool ForbidMultipleStubs
 
unsigned int high_rate_max_layer
 
unsigned int high_rate_max_ring [5]
 
int ievt
 Temporary storage for stubs over several events for truncation use. More...
 
unsigned int maxStubs_2S
 
unsigned int maxStubs_2S_CIC_5
 
unsigned int maxStubs_PS
 
unsigned int maxStubs_PS_CIC_10
 
unsigned int maxStubs_PS_CIC_5
 
std::unordered_map< int, int > moduleStubs_CBC
 
std::unordered_map< int, std::vector< TTStub< Ref_Phase2TrackerDigi_ > > > moduleStubs_CIC
 
std::unordered_map< int, int > moduleStubs_MPA
 
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtGeomToken
 
edm::ESHandle< TTStubAlgorithm< T > > theStubFindingAlgoHandle
 Data members. More...
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtTopoToken
 
edm::ESGetToken< TTStubAlgorithm< T >, TTStubAlgorithmRecordttStubToken
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

template<typename T>
class TTStubBuilder< T >

Plugin to load the Stub finding algorithm and produce the collection of Stubs that goes in the event content.

After moving from SimDataFormats to DataFormats, the template structure of the class was maintained in order to accomodate any types other than PixelDigis in case there is such a need in the future.

Author
Andrew W. Rose
Nicola Pozzobon
Ivan Reid
Ian Tomalin
Date
2013 - 2020

Definition at line 45 of file TTStubBuilder.h.

Member Enumeration Documentation

◆ FEreject

template<typename T >
enum TTStubBuilder::FEreject
Enumerator
CBCFailOffset 
CICFailOffset 

Definition at line 54 of file TTStubBuilder.h.

54 { CBCFailOffset = 500, CICFailOffset = 1000 };

Constructor & Destructor Documentation

◆ TTStubBuilder()

template<typename T >
TTStubBuilder< T >::TTStubBuilder ( const edm::ParameterSet iConfig)
explicit

Constructor.

Close class.

Implementation of methods

Here, in the header file, the methods which do not depend on the specific type <T> that can fit the template. Other methods, with type-specific features, are implemented in the source file. Constructors

Definition at line 125 of file TTStubBuilder.h.

125  {
126  clustersToken = consumes<edmNew::DetSetVector<TTCluster<T>>>(iConfig.getParameter<edm::InputTag>("TTClusters"));
127  tTopoToken = esConsumes<TrackerTopology, TrackerTopologyRcd>();
128  tGeomToken = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>();
129  ttStubToken = esConsumes<TTStubAlgorithm<T>, TTStubAlgorithmRecord, edm::Transition::BeginRun>();
130  ForbidMultipleStubs = iConfig.getParameter<bool>("OnlyOnePerInputCluster");
131  applyFE = iConfig.getParameter<bool>("FEineffs");
132  maxStubs_2S = iConfig.getParameter<uint32_t>("CBClimit");
133  maxStubs_PS = iConfig.getParameter<uint32_t>("MPAlimit");
134  maxStubs_2S_CIC_5 = iConfig.getParameter<uint32_t>("SS5GCIClimit");
135  maxStubs_PS_CIC_5 = iConfig.getParameter<uint32_t>("PS5GCIClimit");
136  maxStubs_PS_CIC_10 = iConfig.getParameter<uint32_t>("PS10GCIClimit");
137  unsigned int tedd1_max10Gring = iConfig.getParameter<uint32_t>("TEDD1Max10GRing");
138  unsigned int tedd2_max10Gring = iConfig.getParameter<uint32_t>("TEDD2Max10GRing");
139  high_rate_max_layer = iConfig.getParameter<uint32_t>("BarrelMax10GLay");
140  // Stubs passing & failing FE chip cuts, plus associated clusters.
141  produces<edmNew::DetSetVector<TTCluster<T>>>("ClusterAccepted");
142  produces<edmNew::DetSetVector<TTCluster<T>>>("ClusterRejected");
143  produces<edmNew::DetSetVector<TTStub<T>>>("StubAccepted");
144  produces<edmNew::DetSetVector<TTStub<T>>>("StubRejected");
145 
146  high_rate_max_ring[0] = tedd1_max10Gring;
147  high_rate_max_ring[1] = tedd1_max10Gring;
148  high_rate_max_ring[2] = tedd2_max10Gring;
149  high_rate_max_ring[3] = tedd2_max10Gring;
150  high_rate_max_ring[4] = tedd2_max10Gring;
151 }

References edm::BeginRun, and edm::ParameterSet::getParameter().

◆ ~TTStubBuilder()

template<typename T >
TTStubBuilder< T >::~TTStubBuilder ( )
override

Destructor;.

Destructor.

Definition at line 155 of file TTStubBuilder.h.

155 {}

Member Function Documentation

◆ beginRun()

template<typename T >
void TTStubBuilder< T >::beginRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

Mandatory methods.

Begin run.

Get the stub finding algorithm

Definition at line 159 of file TTStubBuilder.h.

159  {
162  ievt = 0;
163  moduleStubs_CIC.clear();
164  moduleStubs_MPA.clear();
165  moduleStubs_CBC.clear();
166 }

References edm::EventSetup::getHandle().

◆ endRun()

template<typename T >
void TTStubBuilder< T >::endRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

End run.

Definition at line 170 of file TTStubBuilder.h.

170 {}

◆ fill()

template<typename T >
template<typename TT >
void TTStubBuilder< T >::fill ( edmNew::DetSetVector< TT > &  outputEP,
const DetId detId,
const std::vector< TT > &  inputVec 
) const
inlineprivate

Fill output cluster & stub collections.

Create the FastFiller

Definition at line 78 of file TTStubBuilder.h.

78  {
80  typename edmNew::DetSetVector<TT>::FastFiller outputFiller(outputEP, detId);
81  outputFiller.resize(inputVec.size());
82  std::copy(inputVec.begin(), inputVec.end(), outputFiller.begin());
83  }

References edmNew::DetSetVector< T >::FastFiller::begin(), filterCSVwithJSON::copy, and edmNew::DetSetVector< T >::FastFiller::resize().

◆ produce() [1/3]

template<>
void TTStubBuilder< Ref_Phase2TrackerDigi_ >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implement the producer.

– Prepare output TTClusters associated to TTStubs

TTStubs with Refs to clusters pointing to collection of clusters in entire tracker.

TTStubs with Refs to clusters pointing to collection of clusters associated to stubs.

Read the Clusters from the entire tracker.

Go on only if both detectors have Clusters

Get the DetSets of the Clusters

If there are Clusters in both sensors, you can try and make a Stub This is ~redundant

Create the vectors of objects to be passed to the FastFillers

Get chip size information FIX ME: Should take this from TrackerTopology, but it was buggy in 2017 (SV)

Loop over pairs of Clusters

Temporary storage to allow only one stub per inner cluster, if requested in cfi

Build a temporary Stub

Check for compatibility of cluster pair

If the Stub is above threshold

Stub accepted

End of loop over upper clusters

Here tempOutput stores all the stubs from this lower cluster Check if there is need to store only one (if only one already, skip this step)

If so, sort the stubs by bend and keep only the first one (smallest bend)

Get to the second element (the switch above ensures there are min 2)

tempIter points now to the second element

Delete all-but-the first one from tempOutput

Here, tempOutput is either of size 1 (if ForbidMultupleStubs = true), or of size N with all the valid combinations ...

Now loop over the accepted stubs (1 or N) for this lower cluster

Put in the output

This means that ALL stubs go into the output

This means that only some stubs go to the output

Find out which MPA/CBC ASIC

Find out which CIC ASIC

TO FIX: The maxStub stubs with lowest |bend| are retained. This algo considers all stubs since the last multiple of 8 events, (i.e. in 1-8 events), whereas true CIC chip considers all stubs in current block of 8 events (i.e. always in 8 events). So may be optimistic.

Sort stubs by |bend|.

End of check on max number of stubs per module

End of nested loop

End of loop over pairs of Clusters

Fill output collections

End of loop over detector elements

The TTStubs created above contain Refs to the ClusterInclusive collection (all clusters in Tracker). Replace them with new TTStubs with Refs to ClusterAccepted collection (only clusters in Stubs), so big ClusterInclusive collection can be dropped.

Put output in the event (2)

Implements edm::one::EDProducerBase.

Definition at line 90 of file TTStubBuilder.cc.

90  {
91  //Retrieve tracker topology from geometry
93  const TrackerTopology* const tTopo = tTopoHandle.product();
95  const TrackerGeometry* const theTrackerGeom = tGeomHandle.product();
96 
99  auto ttClusterDSVForOutputAcc = std::make_unique<edmNew::DetSetVector<TTCluster<Ref_Phase2TrackerDigi_>>>();
100  auto ttClusterDSVForOutputRej = std::make_unique<edmNew::DetSetVector<TTCluster<Ref_Phase2TrackerDigi_>>>();
102  auto ttStubDSVForOutputAccTemp = std::make_unique<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>>();
103  auto ttStubDSVForOutputRejTemp = std::make_unique<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>>();
105  auto ttStubDSVForOutputAcc = std::make_unique<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>>();
106  auto ttStubDSVForOutputRej = std::make_unique<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>>();
107 
110  iEvent.getByToken(clustersToken, clusterHandle);
111 
112  int nmod = -1;
113 
114  // Loop over all the tracker elements
115 
116  for (const auto& gd : theTrackerGeom->dets()) {
117  DetId detid = (*gd).geographicalId();
118  if (detid.subdetId() != StripSubdetector::TOB && detid.subdetId() != StripSubdetector::TID)
119  continue; // only run on OT
120  if (!tTopo->isLower(detid))
121  continue; // loop on the stacks: choose the lower sensor
122  DetId lowerDetid = detid;
123  DetId upperDetid = tTopo->partnerDetId(detid);
124  DetId stackDetid = tTopo->stack(detid);
125  bool isPS = (theTrackerGeom->getDetectorType(stackDetid) == TrackerGeometry::ModuleType::Ph2PSP);
126 
127  bool is10G_PS = false;
128 
129  // Determine if this module is a 10G transmission scheme module
130  //
131  // TO FIX: take this info from Tracker -> DTC cabling map.
132 
133  if (detid.subdetId() == StripSubdetector::TOB) {
134  if (tTopo->layer(detid) <= high_rate_max_layer)
135  is10G_PS = true;
136  } else if (detid.subdetId() == StripSubdetector::TID) {
137  if (tTopo->tidRing(detid) <= high_rate_max_ring[tTopo->tidWheel(detid) - 1])
138  is10G_PS = true;
139  }
140 
141  ++nmod;
142 
143  unsigned int maxStubs;
144  std::vector<std::pair<unsigned int, double>> bendMap;
145 
147  if (clusterHandle->find(lowerDetid) == clusterHandle->end() ||
148  clusterHandle->find(upperDetid) == clusterHandle->end())
149  continue;
150 
152  edmNew::DetSet<TTCluster<Ref_Phase2TrackerDigi_>> lowerClusters = (*clusterHandle)[lowerDetid];
153  edmNew::DetSet<TTCluster<Ref_Phase2TrackerDigi_>> upperClusters = (*clusterHandle)[upperDetid];
154 
157  if (lowerClusters.empty() || upperClusters.empty())
158  continue;
159 
161  std::vector<TTCluster<Ref_Phase2TrackerDigi_>> tempClusLowerAcc;
162  std::vector<TTCluster<Ref_Phase2TrackerDigi_>> tempClusLowerRej;
163  std::vector<TTCluster<Ref_Phase2TrackerDigi_>> tempClusUpperAcc;
164  std::vector<TTCluster<Ref_Phase2TrackerDigi_>> tempClusUpperRej;
165  std::vector<TTStub<Ref_Phase2TrackerDigi_>> tempStubAcc;
166  std::vector<TTStub<Ref_Phase2TrackerDigi_>> tempStubRej;
167  tempClusLowerAcc.clear();
168  tempClusLowerRej.clear();
169  tempClusUpperAcc.clear();
170  tempClusUpperRej.clear();
171  tempStubAcc.clear();
172  tempStubRej.clear();
173 
176  const int chipSize = isPS ? 120 : 127;
177  // No. of macro pixels along local y in each half of 2S module.
178  constexpr int numMacroPixels = 16;
179 
181  for (auto lowerClusterIter = lowerClusters.begin(); lowerClusterIter != lowerClusters.end(); ++lowerClusterIter) {
183  std::vector<TTStub<Ref_Phase2TrackerDigi_>> tempOutput;
184 
185  for (auto upperClusterIter = upperClusters.begin(); upperClusterIter != upperClusters.end(); ++upperClusterIter) {
187  TTStub<Ref_Phase2TrackerDigi_> tempTTStub(stackDetid);
188  tempTTStub.addClusterRef(edmNew::makeRefTo(clusterHandle, lowerClusterIter));
189  tempTTStub.addClusterRef(edmNew::makeRefTo(clusterHandle, upperClusterIter));
190  tempTTStub.setModuleTypePS(isPS);
191 
193  bool thisConfirmation = false;
194  int thisDisplacement = 999999;
195  int thisOffset = 0;
196  float thisHardBend = 0;
197 
198  theStubFindingAlgoHandle->PatternHitCorrelation(
199  thisConfirmation, thisDisplacement, thisOffset, thisHardBend, tempTTStub);
200  // Removed real offset. Ivan Reid 10/2019
201 
203  if (thisConfirmation) {
204  tempTTStub.setRawBend(thisDisplacement);
205  tempTTStub.setBendOffset(thisOffset);
206  tempTTStub.setBendBE(thisHardBend);
207  tempOutput.push_back(tempTTStub);
208  }
209  }
210 
213  if (ForbidMultipleStubs && tempOutput.size() > 1) {
215  std::sort(tempOutput.begin(), tempOutput.end(), TTStubBuilder<Ref_Phase2TrackerDigi_>::SortStubsBend);
216 
218  typename std::vector<TTStub<Ref_Phase2TrackerDigi_>>::iterator tempIter = tempOutput.begin();
219  ++tempIter;
220 
222 
224  tempOutput.erase(tempIter, tempOutput.end());
225  }
226 
229 
231 
232  for (auto& tempTTStub : tempOutput) {
234  if (not applyFE) // No dynamic inefficiencies
235  {
237  tempClusLowerAcc.push_back(*(tempTTStub.clusterRef(0)));
238  tempClusUpperAcc.push_back(*(tempTTStub.clusterRef(1)));
239  tempStubAcc.push_back(tempTTStub);
240  } else {
241  bool FEreject = false;
242 
244  MeasurementPoint mp0 = tempTTStub.clusterRef(0)->findAverageLocalCoordinates();
245  int seg = static_cast<int>(mp0.y()); // Identifies which half of module
246  if (isPS)
247  seg = seg / numMacroPixels;
249  int chip = 1000 * nmod + 10 * int(tempTTStub.innerClusterPosition() / chipSize) + seg;
251  int CIC_chip = 10 * nmod + seg;
252 
253  // First look is the stub is passing trough the very front end (CBC/MPA)
254  maxStubs = isPS ? maxStubs_PS : maxStubs_2S;
255 
256  if (isPS) // MPA
257  {
258  if (moduleStubs_MPA[chip] < int(maxStubs)) {
259  moduleStubs_MPA[chip]++;
260  } else {
261  FEreject = true;
262  }
263  } else // CBC
264  {
265  if (moduleStubs_CBC[chip] < int(maxStubs)) {
266  moduleStubs_CBC[chip]++;
267  } else {
268  FEreject = true;
269  }
270  }
271 
272  // End of the MPA/CBC loop
273 
274  // If the stub has been already thrown out, there is no reason to include it into the CIC stream
275  // We put it in the rejected container, flagged with offset to indicate reason.
276 
277  if (FEreject) {
278  tempTTStub.setRawBend(CBCFailOffset + 2. * tempTTStub.rawBend());
279  tempTTStub.setBendOffset(CBCFailOffset + 2. * tempTTStub.bendOffset());
280  tempClusLowerRej.push_back(*(tempTTStub.clusterRef(0)));
281  tempClusUpperRej.push_back(*(tempTTStub.clusterRef(1)));
282  tempStubRej.push_back(tempTTStub);
283  continue;
284  }
285 
287 
288  if (is10G_PS)
290 
291  bool CIC_reject = true;
292 
293  moduleStubs_CIC[CIC_chip].push_back(tempTTStub); //We temporarily add the new stub
294 
295  if (moduleStubs_CIC[CIC_chip].size() <= maxStubs) {
296  tempClusLowerAcc.push_back(*(tempTTStub.clusterRef(0)));
297  tempClusUpperAcc.push_back(*(tempTTStub.clusterRef(1)));
298  tempStubAcc.push_back(tempTTStub); // The stub is kept
299 
300  } else {
304 
306  bendMap.clear();
307  bendMap.reserve(moduleStubs_CIC[CIC_chip].size());
308 
309  for (unsigned int i = 0; i < moduleStubs_CIC[CIC_chip].size(); ++i) {
310  bendMap.emplace_back(i, moduleStubs_CIC[CIC_chip].at(i).bendFE());
311  }
312 
313  std::sort(bendMap.begin(), bendMap.end(), TTStubBuilder<Ref_Phase2TrackerDigi_>::SortStubBendPairs);
314 
315  // bendMap contains link over all the stubs included in moduleStubs_CIC[CIC_chip]
316 
317  for (unsigned int i = 0; i < maxStubs; ++i) {
318  // The stub we have just added is amongst those with smallest |bend| so keep it.
319  if (bendMap[i].first == moduleStubs_CIC[CIC_chip].size() - 1) {
320  CIC_reject = false;
321  }
322  }
323 
324  if (CIC_reject) // The stub added does not pass the cut
325  {
326  tempTTStub.setRawBend(CICFailOffset + 2. * tempTTStub.rawBend());
327  tempTTStub.setBendOffset(CICFailOffset + 2. * tempTTStub.bendOffset());
328  tempClusLowerRej.push_back(*(tempTTStub.clusterRef(0)));
329  tempClusUpperRej.push_back(*(tempTTStub.clusterRef(1)));
330  tempStubRej.push_back(tempTTStub);
331  } else {
332  tempClusLowerAcc.push_back(*(tempTTStub.clusterRef(0)));
333  tempClusUpperAcc.push_back(*(tempTTStub.clusterRef(1)));
334  tempStubAcc.push_back(tempTTStub); // The stub is added
335  }
336  }
337  }
338  }
339  }
340 
342  if (not tempClusLowerAcc.empty())
343  this->fill(*ttClusterDSVForOutputAcc, lowerDetid, tempClusLowerAcc);
344  if (not tempClusLowerRej.empty())
345  this->fill(*ttClusterDSVForOutputRej, lowerDetid, tempClusLowerRej);
346  if (not tempClusUpperAcc.empty())
347  this->fill(*ttClusterDSVForOutputAcc, upperDetid, tempClusUpperAcc);
348  if (not tempClusUpperRej.empty())
349  this->fill(*ttClusterDSVForOutputRej, upperDetid, tempClusUpperRej);
350  if (not tempStubAcc.empty())
351  this->fill(*ttStubDSVForOutputAccTemp, stackDetid, tempStubAcc);
352  if (not tempStubRej.empty())
353  this->fill(*ttStubDSVForOutputRejTemp, stackDetid, tempStubRej);
354 
355  }
356 
357  // Store the subset of clusters associated to stubs.
358 
360  iEvent.put(std::move(ttClusterDSVForOutputAcc), "ClusterAccepted");
362  iEvent.put(std::move(ttClusterDSVForOutputRej), "ClusterRejected");
363 
367 
368  this->updateStubs(ttClusterAccHandle, *ttStubDSVForOutputAccTemp, *ttStubDSVForOutputAcc);
369  this->updateStubs(ttClusterRejHandle, *ttStubDSVForOutputRejTemp, *ttStubDSVForOutputRej);
370 
372  iEvent.put(std::move(ttStubDSVForOutputAcc), "StubAccepted");
373  iEvent.put(std::move(ttStubDSVForOutputRej), "StubRejected");
374 
375  ++ievt;
376  if (ievt % 8 == 0)
377  moduleStubs_CIC.clear(); // Everything is cleared up after 8BX
378  if (ievt % 2 == 0)
379  moduleStubs_MPA.clear(); // Everything is cleared up after 2BX
380  moduleStubs_CBC.clear(); // Everything is cleared up after everyBX
381 }

References TTStub< T >::addClusterRef(), edmNew::DetSet< T >::begin(), TrackerGeometry::dets(), edmNew::DetSet< T >::empty(), edmNew::DetSet< T >::end(), ntuplemaker::fill, dqmdumpme::first, TrackerGeometry::getDetectorType(), edm::EventSetup::getHandle(), mps_fire::i, iEvent, createfilelist::int, TrackerTopology::isLower(), TrackerTopology::layer(), edmNew::makeRefTo(), auxiliaryParams::maxStubs, eostools::move(), TrackerTopology::partnerDetId(), TrackerGeometry::Ph2PSP, edm::ESHandle< T >::product(), TTStub< T >::setBendBE(), TTStub< T >::setBendOffset(), TTStub< T >::setModuleTypePS(), TTStub< T >::setRawBend(), findQualityFiles::size, TrackerTopology::stack(), DetId::subdetId(), StripSubdetector::TID, TrackerTopology::tidRing(), TrackerTopology::tidWheel(), StripSubdetector::TOB, and PV2DBase< T, PVType, FrameType >::y().

◆ produce() [2/3]

template<>
void TTStubBuilder< Ref_Phase2TrackerDigi_ >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implement the producer.

Implements edm::one::EDProducerBase.

◆ produce() [3/3]

template<typename T >
void TTStubBuilder< T >::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivatevirtual

◆ SortStubBendPairs()

template<typename T >
bool TTStubBuilder< T >::SortStubBendPairs ( const std::pair< unsigned int, double > &  left,
const std::pair< unsigned int, double > &  right 
)
staticprivate

Sort routine for stub ordering.

Sorting method for stubs NOTE: this must be static!

Definition at line 174 of file TTStubBuilder.h.

175  {
176  return std::abs(left.second) < std::abs(right.second);
177 }

References funct::abs().

◆ SortStubsBend()

template<typename T >
bool TTStubBuilder< T >::SortStubsBend ( const TTStub< T > &  left,
const TTStub< T > &  right 
)
staticprivate

Analogous sorting routine directly from stubs.

Definition at line 181 of file TTStubBuilder.h.

181  {
182  return std::abs(left.bendFE()) < std::abs(right.bendFE());
183 }

References funct::abs(), and TTStub< T >::bendFE().

◆ updateStubs() [1/2]

template<>
void TTStubBuilder< Ref_Phase2TrackerDigi_ >::updateStubs ( const edm::OrphanHandle< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ >>> &  clusterHandle,
const edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &  inputEDstubs,
edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &  outputEDstubs 
) const
private

Implementation of methods of TTClusterBuilder.h.

Here, in the source file, the methods which do depend on the specific type <T> that can fit the template.

Author
Andrew W. Rose
Nicola Pozzobon
Ivan Reid
Ian Tomalin
Date
2013 - 2020 Update output stubs with Refs to cluster collection that is associated to stubs.

Loop over tracker modules

Get the DetId and prepare the FastFiller

detid of the two components. This should be done via a TrackerTopology method that is not yet available.

Get the DetSets of the clusters

Get the DetSet of the stubs

Prepare the new DetSet to replace the current one Loop over the stubs in this module

Create a temporary stub

Compare the clusters stored in the stub with the ones of this module

If no compatible clusters were found, skip to the next one

getters for RawBend & BendOffset are in FULL-strip units, setters are in HALF-strip units

End of loop over stubs of this module

End of loop over stub DetSetVector

Definition at line 18 of file TTStubBuilder.cc.

21  {
23  for (const auto& module : inputEDstubs) {
25  DetId thisStackedDetId = module.id();
26  typename edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_>>::FastFiller outputFiller(outputEDstubs,
27  thisStackedDetId);
28 
31  DetId lowerDetid = thisStackedDetId + 1;
32  DetId upperDetid = thisStackedDetId + 2;
33 
35  edmNew::DetSet<TTCluster<Ref_Phase2TrackerDigi_>> lowerClusters = (*clusterHandle)[lowerDetid];
36  edmNew::DetSet<TTCluster<Ref_Phase2TrackerDigi_>> upperClusters = (*clusterHandle)[upperDetid];
37 
39  edmNew::DetSet<TTStub<Ref_Phase2TrackerDigi_>> theseStubs = inputEDstubs[thisStackedDetId];
40 
43  typename edmNew::DetSet<TTCluster<Ref_Phase2TrackerDigi_>>::const_iterator clusterIter;
44  for (const auto& stub : theseStubs) {
46  TTStub<Ref_Phase2TrackerDigi_> tempTTStub(stub.getDetId());
47 
50  lowerClusterToBeReplaced = stub.clusterRef(0);
52  upperClusterToBeReplaced = stub.clusterRef(1);
53 
54  bool lowerOK = false;
55  bool upperOK = false;
56 
57  for (clusterIter = lowerClusters.begin(); clusterIter != lowerClusters.end() && !lowerOK; ++clusterIter) {
58  if (clusterIter->getHits() == lowerClusterToBeReplaced->getHits()) {
59  tempTTStub.addClusterRef(edmNew::makeRefTo(clusterHandle, clusterIter));
60  lowerOK = true;
61  }
62  }
63 
64  for (clusterIter = upperClusters.begin(); clusterIter != upperClusters.end() && !upperOK; ++clusterIter) {
65  if (clusterIter->getHits() == upperClusterToBeReplaced->getHits()) {
66  tempTTStub.addClusterRef(edmNew::makeRefTo(clusterHandle, clusterIter));
67  upperOK = true;
68  }
69  }
70 
72  if (!lowerOK || !upperOK)
73  continue;
74 
76  tempTTStub.setRawBend(2. * stub.rawBend());
77  tempTTStub.setBendOffset(2. * stub.bendOffset());
78  tempTTStub.setBendBE(stub.bendBE());
79  tempTTStub.setModuleTypePS(stub.moduleTypePS());
80 
81  outputFiller.push_back(tempTTStub);
82 
83  }
84  }
85 }

References edmNew::DetSet< T >::begin(), edmNew::DetSet< T >::end(), edmNew::makeRefTo(), and edmNew::DetSetVector< T >::push_back().

◆ updateStubs() [2/2]

template<typename T >
void TTStubBuilder< T >::updateStubs ( const edm::OrphanHandle< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ >>> &  clusterHandle,
const edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &  inputEDstubs,
edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &  outputEDstubs 
) const
private

Update output stubs with Refs to cluster collection that is associated to stubs.

Member Data Documentation

◆ applyFE

template<typename T >
bool TTStubBuilder< T >::applyFE
private

FE truncation.

Definition at line 92 of file TTStubBuilder.h.

◆ clustersToken

template<typename T >
edm::EDGetTokenT<edmNew::DetSetVector<TTCluster<T> > > TTStubBuilder< T >::clustersToken
private

Definition at line 59 of file TTStubBuilder.h.

◆ ForbidMultipleStubs

template<typename T >
bool TTStubBuilder< T >::ForbidMultipleStubs
private

Definition at line 63 of file TTStubBuilder.h.

◆ high_rate_max_layer

template<typename T >
unsigned int TTStubBuilder< T >::high_rate_max_layer
private

Definition at line 106 of file TTStubBuilder.h.

◆ high_rate_max_ring

template<typename T >
unsigned int TTStubBuilder< T >::high_rate_max_ring[5]
private

Definition at line 105 of file TTStubBuilder.h.

◆ ievt

template<typename T >
int TTStubBuilder< T >::ievt
private

Temporary storage for stubs over several events for truncation use.

Definition at line 109 of file TTStubBuilder.h.

◆ maxStubs_2S

template<typename T >
unsigned int TTStubBuilder< T >::maxStubs_2S
private

Definition at line 95 of file TTStubBuilder.h.

◆ maxStubs_2S_CIC_5

template<typename T >
unsigned int TTStubBuilder< T >::maxStubs_2S_CIC_5
private

Definition at line 97 of file TTStubBuilder.h.

◆ maxStubs_PS

template<typename T >
unsigned int TTStubBuilder< T >::maxStubs_PS
private

Definition at line 96 of file TTStubBuilder.h.

◆ maxStubs_PS_CIC_10

template<typename T >
unsigned int TTStubBuilder< T >::maxStubs_PS_CIC_10
private

Definition at line 99 of file TTStubBuilder.h.

◆ maxStubs_PS_CIC_5

template<typename T >
unsigned int TTStubBuilder< T >::maxStubs_PS_CIC_5
private

Definition at line 98 of file TTStubBuilder.h.

◆ moduleStubs_CBC

template<typename T >
std::unordered_map<int, int> TTStubBuilder< T >::moduleStubs_CBC
private

Definition at line 112 of file TTStubBuilder.h.

◆ moduleStubs_CIC

template<typename T >
std::unordered_map<int, std::vector<TTStub<Ref_Phase2TrackerDigi_> > > TTStubBuilder< T >::moduleStubs_CIC
private

Definition at line 110 of file TTStubBuilder.h.

◆ moduleStubs_MPA

template<typename T >
std::unordered_map<int, int> TTStubBuilder< T >::moduleStubs_MPA
private

Definition at line 111 of file TTStubBuilder.h.

◆ tGeomToken

template<typename T >
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> TTStubBuilder< T >::tGeomToken
private

Definition at line 61 of file TTStubBuilder.h.

◆ theStubFindingAlgoHandle

template<typename T >
edm::ESHandle<TTStubAlgorithm<T> > TTStubBuilder< T >::theStubFindingAlgoHandle
private

Data members.

Definition at line 58 of file TTStubBuilder.h.

◆ tTopoToken

template<typename T >
edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> TTStubBuilder< T >::tTopoToken
private

Definition at line 60 of file TTStubBuilder.h.

◆ ttStubToken

template<typename T >
edm::ESGetToken<TTStubAlgorithm<T>, TTStubAlgorithmRecord> TTStubBuilder< T >::ttStubToken
private

Definition at line 62 of file TTStubBuilder.h.

TTStubBuilder::ievt
int ievt
Temporary storage for stubs over several events for truncation use.
Definition: TTStubBuilder.h:109
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
Point2DBase
Definition: Point2DBase.h:9
mps_fire.i
i
Definition: mps_fire.py:428
TTStubBuilder::tGeomToken
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tGeomToken
Definition: TTStubBuilder.h:61
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
TrackerTopology::isLower
bool isLower(const DetId &id) const
Definition: TrackerTopology.cc:195
TTStubBuilder::tTopoToken
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken
Definition: TTStubBuilder.h:60
TrackerTopology
Definition: TrackerTopology.h:16
edmNew::makeRefTo
edm::Ref< typename HandleT::element_type, typename HandleT::element_type::value_type::value_type > makeRefTo(const HandleT &iHandle, typename HandleT::element_type::value_type::const_iterator itIter)
Definition: DetSetVectorNew.h:689
TTStubBuilder::updateStubs
void updateStubs(const edm::OrphanHandle< edmNew::DetSetVector< TTCluster< Ref_Phase2TrackerDigi_ >>> &clusterHandle, const edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &inputEDstubs, edmNew::DetSetVector< TTStub< Ref_Phase2TrackerDigi_ >> &outputEDstubs) const
Update output stubs with Refs to cluster collection that is associated to stubs.
TTStubBuilder::maxStubs_2S
unsigned int maxStubs_2S
Definition: TTStubBuilder.h:95
TrackerTopology::layer
unsigned int layer(const DetId &id) const
Definition: TrackerTopology.cc:47
TrackerTopology::stack
uint32_t stack(const DetId &id) const
Definition: TrackerTopology.cc:104
auxiliaryParams.maxStubs
maxStubs
Definition: auxiliaryParams.py:44
TTStubBuilder::ttStubToken
edm::ESGetToken< TTStubAlgorithm< T >, TTStubAlgorithmRecord > ttStubToken
Definition: TTStubBuilder.h:62
TTStubBuilder::moduleStubs_MPA
std::unordered_map< int, int > moduleStubs_MPA
Definition: TTStubBuilder.h:111
TTStubBuilder::CBCFailOffset
Definition: TTStubBuilder.h:54
TrackerGeometry::getDetectorType
ModuleType getDetectorType(DetId) const
Definition: TrackerGeometry.cc:247
edm::Handle
Definition: AssociativeIterator.h:50
dqmdumpme.first
first
Definition: dqmdumpme.py:55
TrackerTopology::tidRing
unsigned int tidRing(const DetId &id) const
Definition: TrackerTopology.h:218
TTStubBuilder
Plugin to load the Stub finding algorithm and produce the collection of Stubs that goes in the event ...
Definition: TTStubBuilder.h:45
edm::Ref
Definition: AssociativeIterator.h:58
TrackerTopology::tidWheel
unsigned int tidWheel(const DetId &id) const
Definition: TrackerTopology.h:201
DetId
Definition: DetId.h:17
edmNew::DetSet::end
iterator end()
Definition: DetSetNew.h:56
TTStubBuilder::maxStubs_PS_CIC_10
unsigned int maxStubs_PS_CIC_10
Definition: TTStubBuilder.h:99
TTStubBuilder::clustersToken
edm::EDGetTokenT< edmNew::DetSetVector< TTCluster< T > > > clustersToken
Definition: TTStubBuilder.h:59
TTStub
Class to store the L1 Track Trigger stubs.
Definition: TTStub.h:22
edm::ESHandle< TrackerTopology >
edmNew::DetSet
Definition: DetSetNew.h:22
TrackerTopology::partnerDetId
DetId partnerDetId(const DetId &id) const
Definition: TrackerTopology.cc:233
TTStub::bendFE
double bendFE() const
BendFE(): In FULL-STRIP units from FE! Rename of getTriggerBend()
Definition: TTStub.h:203
TTStubBuilder::fill
void fill(edmNew::DetSetVector< TT > &outputEP, const DetId &detId, const std::vector< TT > &inputVec) const
Fill output cluster & stub collections.
Definition: TTStubBuilder.h:78
TTStubBuilder::high_rate_max_layer
unsigned int high_rate_max_layer
Definition: TTStubBuilder.h:106
TTStubBuilder::maxStubs_PS_CIC_5
unsigned int maxStubs_PS_CIC_5
Definition: TTStubBuilder.h:98
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
TTStubBuilder::moduleStubs_CBC
std::unordered_map< int, int > moduleStubs_CBC
Definition: TTStubBuilder.h:112
TTStubBuilder::moduleStubs_CIC
std::unordered_map< int, std::vector< TTStub< Ref_Phase2TrackerDigi_ > > > moduleStubs_CIC
Definition: TTStubBuilder.h:110
TTStubBuilder::FEreject
FEreject
Definition: TTStubBuilder.h:54
PV2DBase::y
T y() const
Definition: PV2DBase.h:44
TTStubBuilder::applyFE
bool applyFE
FE truncation.
Definition: TTStubBuilder.h:92
TTStubBuilder::ForbidMultipleStubs
bool ForbidMultipleStubs
Definition: TTStubBuilder.h:63
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
edmNew::DetSet::begin
iterator begin()
Definition: DetSetNew.h:54
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
TTStubBuilder::maxStubs_2S_CIC_5
unsigned int maxStubs_2S_CIC_5
Definition: TTStubBuilder.h:97
TTStubAlgorithmRecord
Class to store the TTStubAlgorithm used in TTStubBuilder.
Definition: TTStubAlgorithmRecord.h:23
edmNew::DetSetVector
Definition: DetSetNew.h:13
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::OrphanHandle
Definition: EDProductfwd.h:39
edm::Transition::BeginRun
TTStubBuilder::theStubFindingAlgoHandle
edm::ESHandle< TTStubAlgorithm< T > > theStubFindingAlgoHandle
Data members.
Definition: TTStubBuilder.h:58
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
TTCluster
NOTE: this is needed even if it seems not.
Definition: TTCluster.h:27
edmNew::DetSetVector::FastFiller
Definition: DetSetVectorNew.h:202
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TTStubBuilder::high_rate_max_ring
unsigned int high_rate_max_ring[5]
Definition: TTStubBuilder.h:105
TTStubBuilder::maxStubs_PS
unsigned int maxStubs_PS
Definition: TTStubBuilder.h:96
edmNew::DetSet::empty
bool empty() const
Definition: DetSetNew.h:70
edm::InputTag
Definition: InputTag.h:15
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
TTStubBuilder::CICFailOffset
Definition: TTStubBuilder.h:54
TrackerGeometry::ModuleType::Ph2PSP
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
TrackerGeometry
Definition: TrackerGeometry.h:14