Belle II Software development
RT2SPTCConverterModuleDev.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <tracking/modules/spacePointCreator/RT2SPTCConverterModuleDev.h>
10
11#include <framework/dataobjects/EventMetaData.h>
12#include <framework/datastore/StoreObjPtr.h>
13
14#include <algorithm> // find
15
16using namespace Belle2;
17using ConversionState = std::bitset<2>;
18
19REG_MODULE(RT2SPTCConverter);
20
22 Module(),
23 m_trackSel(nullptr)
24
25{
26 setDescription("Module for converting RecoTracks (e.g. from TrackFinderMCTruth) to SpacePointTrackCands.");
28
29 // input
30 addParam("RecoTracksName", m_RecoTracksName, "Name of container of RecoTracks", std::string(""));
31
32 // required for conversion
33 addParam("SVDClusters", m_SVDClusterName, "SVDCluster collection name", std::string(""));
34
35 addParam("SVDSpacePointStoreArrayName", m_svdSpacePointsStoreArrayName, "Name of the collection for SVD.",
36 std::make_optional<std::string>("SVDSpacePoints"));
37 addParam("PXDSpacePointStoreArrayName", m_pxdSpacePointsStoreArrayName, "Name of the collection for PXD.",
38 std::make_optional<std::string>("PXDSpacePoints"));
39
40 // optional input
41 addParam("SVDSingleClusterSP", m_SVDSingleClusterSPName, "SVD single Cluster SpacePoints collection name.", std::string(""));
42
43 // output
44 addParam("SpacePointTCName", m_SPTCName,
45 "Name of the container under which SpacePointTrackCands will be stored in the DataStore (NOTE: These SpaceTrackCands are not checked for curling behaviour, but are simply converted and stored!)",
46 std::string(""));
47
48 // parameters
49 addParam("minSP", m_minSP,
50 "Minimum number of SpacePoints a SpacePointTrackCand has to contain in order to get registered in the DataStore. If set to 0, any number is accepted",
51 0);
52
53 addParam("useTrueHits", m_useTrueHits, "Converts clusters via their relations to TrueHits.", false);
54
55 addParam("skipProblematicCluster", m_skipProblematicCluster,
56 "If set to true clusters that could not be converted are skipped instead of throwing away the complete SPTC",
57 false);
58
59 addParam("useSingleClusterSP", m_useSingleClusterSP, "Set to true if these SpacePoints should be used as fallback.", false);
60
61 addParam("markRecoTracks", m_markRecoTracks, "If True RecoTracks where conversion problems occurred are marked dirty.", false);
62
63 addParam("noKickCutsFile", m_noKickCutsFile,
64 "TFile that contains the list of cuts to select trainins sample. If parameter left empty NoKickCuts are not applied",
65 std::string(""));
66
67 addParam("noKickOutput", m_noKickOutput,
68 "If true produce a TFile with some histograms useful to understand behaviour of training sample selection", false);
69
70 addParam("ignorePXDHits", m_ignorePXDHits, "If true no PXD hits will be used when creating the SpacePointTrackCand", bool(false));
71
72 addParam("convertFittedOnly", m_convertFittedOnly, "If true only RecoTracks with successful fit will be converted to "
73 "SpacePointTrackCands", m_convertFittedOnly);
74
76}
77
80{
81 if (m_trackSel) delete m_trackSel;
82}
83
84// ------------------------------ INITIALIZE ---------------------------------------
86{
87 B2INFO("RT2SPTCConverter -------------- initialize() ---------------------");
88 // initialize Counters
90
91 // check if all required StoreArrays are here
95 }
98 }
99
101
102 // registering StoreArray for SpacePointTrackCand
104
107 }
108
109 if (m_useTrueHits) {
110 m_SVDTrueHit.isRequired();
111 }
112
113 // register Relation to RecoTrack
115
117
118}
119
120// ------------------------------------- EVENT -------------------------------------------------------
122{
123 StoreObjPtr<EventMetaData> eventMetaDataPtr("EventMetaData", DataStore::c_Event);
124 const int eventCounter = eventMetaDataPtr->getEvent();
125 B2DEBUG(20, "RT2SPTCConverter::event(). Processing event " << eventCounter << " --------");
126
127 for (auto& recoTrack : m_RecoTracks) {
128
129 // if corresponding flag is set only use fitted tracks
130 if (m_convertFittedOnly and not recoTrack.wasFitSuccessful()) continue;
131
132 if (m_noKickCutsFile.size() != 0) {
133 bool passCut = m_trackSel->trackSelector(recoTrack);
134 if (!passCut) {
135 m_ncut++;
136 continue; //exclude tracks with catastrophic multiple scattering interactions
137 } else {
138 m_npass++;
139 }
140 }
141 std::pair<std::vector<const SpacePoint*>, ConversionState> spacePointStatePair;
142
143 // the hit information from the recotrack, the option "true" will result in a sorted vector
144 std::vector<RecoHitInformation*> hitInfos = recoTrack.getRecoHitInformations(true);
145
146 // if requested remove the PXD hits
147 // NOTE: in RecoTracks there is also a function to get sorted SVD hits only but this uses not the same code as getRecoHitInformations!
148 if (m_ignorePXDHits) {
149 std::vector<RecoHitInformation*> hitInfos_buff;
150 for (std::vector<RecoHitInformation*>::iterator it = hitInfos.begin(); it < hitInfos.end(); ++it) {
151 if ((*it)->getTrackingDetector() != RecoHitInformation::c_PXD) hitInfos_buff.push_back(*it);
152 }
153 hitInfos = hitInfos_buff;
154 }
155
156 B2DEBUG(20, "New call getSpacePointsFromRecoHitInformationViaTrueHits. Number of hitInfos: " << hitInfos.size());
157 B2DEBUG(20, "number of SVD hits in RecoTrack : " << recoTrack.getNumberOfSVDHits());
158 B2DEBUG(20, "number of PXD hits in RecoTrack : " << recoTrack.getNumberOfPXDHits());
159 B2DEBUG(20, "number of CDC hits in RecoTrack : " << recoTrack.getNumberOfCDCHits());
160
161 if (m_useTrueHits) {
162 spacePointStatePair = getSpacePointsFromRecoHitInformationViaTrueHits(hitInfos);
163 } else {
164 spacePointStatePair = getSpacePointsFromRecoHitInformations(hitInfos);
165 }
166 B2DEBUG(20, "RT2SPTCConverter::event: Number of SpacePoints: " << spacePointStatePair.first.size() << "State: " <<
167 spacePointStatePair.second);
168
169 if (int(spacePointStatePair.first.size()) < m_minSP) {
170 B2DEBUG(20, "RT2SPTCConverter::event: Not enough number of SpacePoints: " << spacePointStatePair.first.size() <<
171 " Required Number: "
172 << m_minSP);
173 m_minSPCtr++;
174 continue;
175 }
176
177 if (spacePointStatePair.second.test(c_undefinedError)) {
180 continue;
181 }
182 if (m_markRecoTracks) recoTrack.setDirtyFlag();
183 }
184
185 SpacePointTrackCand spacePointTC;
187 MCParticle* mcParticle = recoTrack.getRelatedTo<MCParticle>();
188 spacePointTC = SpacePointTrackCand(spacePointStatePair.first, mcParticle->getPDG(), mcParticle->getCharge(),
189 recoTrack.getArrayIndex());
190 } else {
191 spacePointTC = SpacePointTrackCand(spacePointStatePair.first, 0, 0, recoTrack.getArrayIndex());
192 }
193
195
196 if (spacePointStatePair.second.test(c_singleCluster)) {
199 if (m_markRecoTracks) recoTrack.setDirtyFlag();
200 }
201
202 // convert momentum and position seed into a single 6D seed
203 const ROOT::Math::XYZVector& momentumSeed = recoTrack.getMomentumSeed();
204 const ROOT::Math::XYZVector& positionSeed = recoTrack.getPositionSeed();
205
206 TVectorD seed6D(6);
207 seed6D[0] = positionSeed.X();
208 seed6D[1] = positionSeed.Y();
209 seed6D[2] = positionSeed.Z();
210 seed6D[3] = momentumSeed.X();
211 seed6D[4] = momentumSeed.Y();
212 seed6D[5] = momentumSeed.Z();
213 spacePointTC.set6DSeed(seed6D);
214 spacePointTC.setCovSeed(recoTrack.getSeedCovariance());
215
216 if (spacePointStatePair.second == ConversionState(0)) {
217 m_noFailCtr++;
218 if (m_markRecoTracks) recoTrack.setDirtyFlag(false);
219 }
220
221 m_SpacePointTrackCands.appendNew(spacePointTC)->addRelationTo(&recoTrack);
222 } // end RecoTrack loop
223}
224
225std::pair<std::vector<const SpacePoint*>, ConversionState>
227{
228 std::vector<const SpacePoint*> finalSpacePoints;
229 ConversionState state;
230
231
232 // loop over all cluster to determine the SpacePoints that define the given RecoTrack.
233 for (const RecoHitInformation* hitInfo : hitInfos) {
234
235 // ignore all hits that are not SVD or PXD
236 if (hitInfo->getTrackingDetector() != RecoHitInformation::c_SVD && hitInfo->getTrackingDetector() != RecoHitInformation::c_PXD)
237 continue;
238
239
240 const VXDTrueHit* relatedTrueHit = nullptr;
241 RelationsObject* cluster = nullptr;
242
243 // SVD case
244 if (hitInfo->getTrackingDetector() == RecoHitInformation::c_SVD) {
245 cluster = hitInfo->getRelatedTo<SVDCluster>();
246 if (cluster) {
247 relatedTrueHit = cluster->getRelatedTo<SVDTrueHit>();
248 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClustersViaTrueHits: Number of related SVDTrueHits: " <<
249 cluster->getRelationsTo<SVDTrueHit>().size());
250 }
251 }
252
253 // PXD case
254 if (hitInfo->getTrackingDetector() == RecoHitInformation::c_PXD) {
255 cluster = hitInfo->getRelatedTo<PXDCluster>();
256 if (cluster) {
257 relatedTrueHit = cluster->getRelatedTo<PXDTrueHit>();
258 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClustersViaTrueHits: Number of related PXDTrueHits: "
259 << cluster->getRelationsTo<PXDTrueHit>().size());
260 }
261 }
262
263 if (!relatedTrueHit) {
264 state.set(c_undefinedError);
265 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClustersViaTrueHits: TrueHit missing.");
266 if (m_skipProblematicCluster) continue;
267 else break;
268 }
269
270 // NOTE: double cluster SVD SP and PXD SP should be stored in the same StoreArray!
271 const SpacePoint* relatedSpacePoint = [this, hitInfo, relatedTrueHit]() -> const SpacePoint* {
272 if (m_svdSpacePointsStoreArrayName and hitInfo->getTrackingDetector() == RecoHitInformation::c_SVD)
273 {
274 return relatedTrueHit->getRelatedFrom<SpacePoint>(*m_svdSpacePointsStoreArrayName);
275 }
276 if (m_pxdSpacePointsStoreArrayName and hitInfo->getTrackingDetector() == RecoHitInformation::c_PXD)
277 {
278 return relatedTrueHit->getRelatedFrom<SpacePoint>(*m_pxdSpacePointsStoreArrayName);
279 }
280 return nullptr;
281 }();
282
283 // special case for the SVD cluster as there is the option for single cluster SP
284 if (hitInfo->getTrackingDetector() == RecoHitInformation::c_SVD) {
285 if (!relatedSpacePoint && m_useSingleClusterSP) {
286 relatedSpacePoint = cluster->getRelatedFrom<SpacePoint>(m_SVDSingleClusterSPName);
287 if (!relatedSpacePoint->getRelatedTo<SVDTrueHit>()) relatedSpacePoint = nullptr;
288 }
289 } // end SVD
290
291 if (!relatedSpacePoint) {
292 state.set(c_undefinedError);
293 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClustersViaTrueHits: SpacePoint missing.");
294 if (m_skipProblematicCluster) continue;
295 else break;
296 }
297
298
299 // Prevent adding the same SpacePoint twice as there are 2 clusters per SP for SVD
300 if (std::find(finalSpacePoints.begin(), finalSpacePoints.end(), relatedSpacePoint) == finalSpacePoints.end()) {
301 finalSpacePoints.push_back(relatedSpacePoint);
302 }
303 }
304 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClustersViaTrueHits: Number of SpacePoints: " << finalSpacePoints.size());
305 return std::make_pair(finalSpacePoints, state);
306}
307
308
309std::pair<std::vector<const SpacePoint*>, ConversionState>
311{
312 std::vector<const SpacePoint*> finalSpacePoints;
313 ConversionState state;
314
315 // loop over all cluster to determine the SpacePoints that define the given RecoTrack.
316 for (size_t iHit = 0; iHit < hitInfos.size(); ++iHit) {
317
318 // ignore all hits that are not SVD or PXD
319 if (hitInfos[iHit]->getTrackingDetector() != RecoHitInformation::c_SVD &&
320 hitInfos[iHit]->getTrackingDetector() != RecoHitInformation::c_PXD) continue;
321
322
323 std::vector<const SpacePoint*> spacePointCandidates;
326 // simple case PXD : there is a one to one relation between cluster and SpacePoint
327 if (hitInfos[iHit]->getTrackingDetector() == RecoHitInformation::c_PXD) {
328 PXDCluster* pxdCluster = hitInfos.at(iHit)->getRelated<PXDCluster>();
329 SpacePoint* relatedPXDSP = nullptr;
330 if (pxdCluster) relatedPXDSP = pxdCluster->getRelated<SpacePoint>(*m_pxdSpacePointsStoreArrayName);
331 // if found a spacepoint one is already done!
332 if (relatedPXDSP) {
333 finalSpacePoints.push_back(relatedPXDSP);
334 continue;
335 }
336 } // end PXD case
337 }
338
339 // At this point it has to be a SVD cluster, for SVD one has to combine u and v clusters
340 SVDCluster* clusterA = hitInfos.at(iHit)->getRelated<SVDCluster>();
341
342 // if it is not PXD it has to be a SVD hit so the cluster has to exist!!
343 if (!clusterA) {
344 B2WARNING("SVDCluster to hit not found! This should not happen!");
345 state.set(c_undefinedError);
346 if (m_skipProblematicCluster) continue;
347 else break;
348 }
349
351 RelationVector<SpacePoint> relatedSpacePointsA = clusterA->getRelationsFrom<SpacePoint>(
353
354 SVDCluster* clusterB = nullptr;
355 if (iHit + 1 < hitInfos.size()) clusterB = hitInfos.at(iHit + 1)->getRelated<SVDCluster>();
356
357 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClusters: Number of SpacePoints related to first cluster: " <<
358 relatedSpacePointsA.size());
359
360 // Try to verify SpacePoint by using next cluster to build a U/V pair.
361 // cppcheck-suppress knownConditionTrueFalse
362 if (clusterA && clusterB && (clusterA->isUCluster() != clusterB->isUCluster())) {
363 auto relatedSpacePointsB = clusterB->getRelationsFrom<SpacePoint>(*m_svdSpacePointsStoreArrayName);
364
365 // determine intersecting SpacePoints.
366 for (const auto& spacePoint : relatedSpacePointsA) {
367 for (const auto& spacePointCompare : relatedSpacePointsB) {
368 if (spacePoint == spacePointCompare) {
369 spacePointCandidates.push_back(&spacePoint);
370 break;
371 }
372 }
373 }
374 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClusters: Number of intersections with next cluster: " <<
375 spacePointCandidates.size());
376 // Intersection should resolve to the single SpacePoint that was used to create the recoTrack.
377 if (spacePointCandidates.size() == 1) ++iHit;
378 } // end first case
379 }
380
381 // Look up if it is part of single cluster SP collection. If no dedicated collection is given the default collection will be tried again!
382 // cppcheck-suppress knownConditionTrueFalse
383 if (clusterA && spacePointCandidates.size() != 1 && m_useSingleClusterSP) {
384
385 // look if it as single cluster!
386 auto relatedSpacePoints = clusterA->getRelationsFrom<SpacePoint>(m_SVDSingleClusterSPName);
387 if (relatedSpacePoints.size() == 1) {
388 state.set(c_singleCluster);
389 spacePointCandidates.push_back(relatedSpacePoints[0]);
390 }
391 } // second case
392
393 B2DEBUG(20, "RT2SPTCConverter::getSpacePointsFromClusters: Conversion state is: " << state);
394
395 if (spacePointCandidates.size() != 1) {
396 state.set(c_undefinedError);
397 if (m_skipProblematicCluster) continue;
398 else break;
399 }
400 finalSpacePoints.push_back(spacePointCandidates.at(0));
401 } // end loop hits
402
403 return std::make_pair(finalSpacePoints, state);
404}
405
407{
408 B2RESULT("Number of Selected Tracks (NoKickRTSel): " << m_npass);
409 B2RESULT("Number of Rejected Tracks (NoKickRTSel): " << m_ncut);
410
412}
413
414// -------------------------------- TERMINATE --------------------------------------------------------
416{
417 B2RESULT("RT2SPTCConverter::terminate: Converted " << m_noFailCtr << "Reco Tracks without errors and "
418 << m_singleClusterUseCtr << " Tracks were converted with a single Cluster SpacePoint. "
419 << m_missingTrueHitCtr << " Tracks were skipped because they contained SpacePoints that had no relations to TrueHits, "
420 << m_minSPCtr << " Tracks were skipped because they didn't contain enough SpacePoints and for "
421 << m_undefinedErrorCtr << " Tracks occurred an undefined error.");
422}
@ c_ErrorIfAlreadyRegistered
If the object/array was already registered, produce an error (aborting initialisation).
Definition: DataStore.h:72
@ c_Event
Different object in each event, all objects/arrays are invalidated after event() function has been ca...
Definition: DataStore.h:59
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:32
float getCharge() const
Return the particle charge defined in TDatabasePDG.
Definition: MCParticle.cc:36
int getPDG() const
Return PDG code of particle.
Definition: MCParticle.h:112
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
This class implement some methods useful for the application of cuts evaluated in NoKickCutsEval modu...
Definition: NoKickRTSel.h:33
bool trackSelector(const RecoTrack &track)
This method return true if every segment (see segmentSelector) of the input track respects the cuts c...
Definition: NoKickRTSel.cc:194
void produceHistoNoKick()
This method produce the validation histograms (to be used the endrun combined with the filling in tra...
Definition: NoKickRTSel.cc:277
The PXD Cluster class This class stores all information about reconstructed PXD clusters The position...
Definition: PXDCluster.h:30
Class PXDTrueHit - Records of tracks that either enter or leave the sensitive volume.
Definition: PXDTrueHit.h:31
unsigned int m_singleClusterUseCtr
Counts how many tracks contained a single cluster.
bool m_ignorePXDHits
PXD hits will be ignored when creating the SP track candidate.
bool m_noKickOutput
true=produce TFile with effects of NoKickCuts on tracks
StoreArray< SVDCluster > m_SVDClusters
SVDClusters StoreArray.
unsigned int m_minSPCtr
Counts how many tracks didn't contain enough SpacePoints after conversion.
void initialize() override
Initialize module (e.g. check if all required StoreArrays are present or registering new StoreArrays)
int m_npass
counter of the selected tracks
StoreArray< SpacePointTrackCand > m_SpacePointTrackCands
SpacePointTrackCands StoreArray.
void event() override
Event: convert RecoTracks to SpacePointTrackCands.
int m_minSP
parameter for specifying a minimal number of SpacePoints a SpacePointTrackCand has to have in order t...
void endRun() override
End Run function.
bool m_mcParticlesPresent
If MCParticles are available.
void terminate() override
Terminate: print some summary information on the processed events.
bool m_skipProblematicCluster
If true problematic clusters are ignored.
std::string m_SVDSingleClusterSPName
Single Cluster SVD SpacePoints collection name.
bool m_useTrueHits
If true the method getSpacePointsFromSVDClustersViaTrueHits is utilized.
std::pair< std::vector< const SpacePoint * >, ConversionState > getSpacePointsFromRecoHitInformations(std::vector< RecoHitInformation * > hitInfos)
Convert Clusters to SpacePoints using the Relation: Cluster->SpacePoint.
StoreArray< SpacePoint > m_SVDSpacePoints
SVDSpacePoints StoreArray.
std::string m_noKickCutsFile
name of TFile of the cuts
std::optional< std::string > m_pxdSpacePointsStoreArrayName
PXD SpacePoints collection names.
StoreArray< SVDTrueHit > m_SVDTrueHit
SVDTrueHits StoreArray.
std::string m_SPTCName
Name of collection under which SpacePointTrackCands will be stored in the StoreArray.
std::string m_RecoTracksName
Name of collection of RecoTrack StoreArray.
unsigned int m_missingTrueHitCtr
Counts how many times a SpacePoint had no relation to a SVDTrueHit.
bool m_convertFittedOnly
if true only RecoTracks with successful fit will be converted
std::string m_SVDClusterName
SVDCluster collection name.
std::bitset< 2 > ConversionState
Used to store conversionFlags and pass them between methods.
NoKickRTSel * m_trackSel
data members used for the NoKickCuts method
std::optional< std::string > m_svdSpacePointsStoreArrayName
Non SingleCluster SVD SpacePoints collection names.
StoreArray< RecoTrack > m_RecoTracks
RecoTracks StoreArray.
void initializeCounters()
reset counters to 0 to avoid indeterministic behaviour
unsigned int m_undefinedErrorCtr
Counts how many tracks failed to be converted.
bool m_useSingleClusterSP
If true use single cluster SpacePoint collection as fallback.
unsigned int m_noFailCtr
Counts how many tracks could be converted without any problems.
StoreArray< SpacePoint > m_PXDSpacePoints
PXDSpacePoints StoreArray.
int m_ncut
counter of the cut tracks
StoreArray< MCParticle > m_MCParticles
MCParticles StoreArray.
bool m_markRecoTracks
If True RecoTracks where conversion problems occurred are marked dirty.
std::pair< std::vector< const SpacePoint * >, ConversionState > getSpacePointsFromRecoHitInformationViaTrueHits(std::vector< RecoHitInformation * > hitInfos)
Convert Clusters to SpacePoints using the Relation: Cluster->TrueHit->SpacePoint.
This class stores additional information to every CDC/SVD/PXD hit stored in a RecoTrack.
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
Defines interface for accessing relations of objects in StoreArray.
void addRelationTo(const RelationsInterface< BASE > *object, float weight=1.0, const std::string &namedRelation="") const
Add a relation from this object to another object (with caching).
TO * getRelatedTo(const std::string &name="", const std::string &namedRelation="") const
Get the object to which this object has a relation.
RelationVector< FROM > getRelationsFrom(const std::string &name="", const std::string &namedRelation="") const
Get the relations that point from another store array to this object.
T * getRelated(const std::string &name="", const std::string &namedRelation="") const
Get the object to or from which this object has a relation.
FROM * getRelatedFrom(const std::string &name="", const std::string &namedRelation="") const
Get the object from which this object has a relation.
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition: SVDCluster.h:29
bool isUCluster() const
Get the direction of strips.
Definition: SVDCluster.h:110
Class SVDTrueHit - Records of tracks that either enter or leave the sensitive volume.
Definition: SVDTrueHit.h:33
Storage for (VXD) SpacePoint-based track candidates.
void set6DSeed(const TVectorD &state6D)
set the 6D state seed
void setCovSeed(const TMatrixDSym &cov)
set the covariance matrix seed
@ c_checkedTrueHits
bit 5: All SpacePoints of the SPTC have a relation to at least one TrueHit.
@ c_singleClustersSPs
bit 10: SPTC contains single Cluster SpacePoints.
void addRefereeStatus(unsigned short int bitmask)
add a referee status
SpacePoint typically is build from 1 PXDCluster or 1-2 SVDClusters.
Definition: SpacePoint.h:42
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
T * appendNew()
Construct a new T object at the end of the array.
Definition: StoreArray.h:246
bool registerRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut, const std::string &namedRelation="") const
Register a relation to the given StoreArray.
Definition: StoreArray.h:140
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
Class VXDTrueHit - Records of tracks that either enter or leave the sensitive volume.
Definition: VXDTrueHit.h:36
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.