Belle II Software  release-08-01-10
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 
16 using namespace Belle2;
17 using ConversionState = std::bitset<2>;
18 
19 REG_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 
105  if (m_MCParticles.isOptional()) {
106  m_mcParticlesPresent = true;
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 informations 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;
186  if (m_mcParticlesPresent) {
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 
225 std::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 
309 std::pair<std::vector<const SpacePoint*>, ConversionState>
310 RT2SPTCConverterModule::getSpacePointsFromRecoHitInformations(std::vector<RecoHitInformation*> hitInfos)
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 fot 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 cuttet 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).
RelationVector< FROM > getRelationsFrom(const std::string &name="", const std::string &namedRelation="") const
Get the relations that point from another store array to this object.
FROM * getRelatedFrom(const std::string &name="", const std::string &namedRelation="") const
Get the object from which this object has a relation.
T * getRelated(const std::string &name="", const std::string &namedRelation="") const
Get the object to or from which this object has a relation.
TO * getRelatedTo(const std::string &name="", const std::string &namedRelation="") const
Get the object to 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
REG_MODULE(arichBtest)
Register the Module.
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
Abstract base class for different kinds of events.