Belle II Software development
svd modules

Namespaces

namespace  Belle2::SVD
 Namespace to encapsulate code needed for simulation and reconstrucion of the SVD.
 

Classes

class  SVDChannelMappingModule
 The Channel Mapping Check Module. More...
 
class  SVDClusterCalibrationsMonitorModule
 Module to produce a list of histogram showing the uploaded calibration constants. More...
 
class  SVDHotStripFinderModule
 A module template. More...
 
class  SVDLatencyCalibrationModule
 this module performs an analysis to find the APV25 latency More...
 
class  SVDLocalCalibrationsCheckModule
 Module to produce a list of histogram showing the uploaded local calibration constants. More...
 
class  SVDLocalCalibrationsMonitorModule
 Module to produce a list of histogram showing the uploaded local calibration constants. More...
 
class  SVDPositionErrorScaleFactorImporterModule
 Module that produces a localdb with position error scale factors for different position algorithms. More...
 
class  SVDTimeCalibrationsMonitorModule
 Module to produce a list of histogram showing the uploaded calibration constants. More...
 
class  SVDChargeSharingAnalysisModule
 Module for monitoring DSSD cluster charge deposition in regard of capacitive charge sharing between adjacent strips in a cluster for data and the simulation. More...
 
class  SVDClusterQualityEstimatorCalibrationModule
 Generate PDFs for assigning probability that cluster generated from signal particle. More...
 
class  SVDClusterQualityEstimatorModule
 Calculates the probability of a cluster originating from signal hit. More...
 
class  SVDCrossTalkCalibrationsCollectorModule
 Collector module used to create the histograms needed for the cross talk calibration. More...
 
class  SVDCrossTalkFinderModule
 Flags potential cross talk strips on Origami sensors. More...
 
class  SVDdEdxCollectorModule
 Collector module used to create the histograms needed for the SVD dE/dx calibration. More...
 
class  SVDdEdxValidationCollectorModule
 Collector module used to create the histograms needed for the SVD dE/dx calibration. More...
 
class  SVDDQMClustersOnTrackModule
 SVD DQM Module for Clusters related to Tracks. More...
 
class  SVDDQMEfficiencyModule
 Creates the basic histograms for SVD Efficiency DQM. More...
 
class  SVDDQMExpressRecoModule
 SVD DQM Module for Express Reco. More...
 
class  SVDDQMHitTimeModule
 This module to design collect the svd hit time for different detectors trigger timing and physics processes. More...
 
class  SVDUnpackerDQMModule
 SVD DQM Module for the Unpacker. More...
 
class  svdDumpModule
 Class definition of svdClsHistoManager module. More...
 
class  SVDTrackingEventLevelMdstInfoFillerModule
 This module adds additional global event level information about SVD track finding to the MDST object 'EventLevelTrackingInfo'. More...
 
class  SVDOccupancyCalibrationsCollectorModule
 This This module collects hits from shaper digits to compute per sensor SVD occupancy using mu+mu- events for calibration of the SVDOccupancyCalibration payload using CAF. More...
 
class  SVDB4CommissioningPlotsModule
 The SVD B4CommissioningPlots Module. More...
 
class  SVDClusterEvaluationModule
 The SVD ClusterEvaluation Module. More...
 
class  SVDClusterEvaluationTrueInfoModule
 Clustering Performance, using true information. More...
 
class  SVDClusterFilterModule
 generates a new StoreArray from the input StoreArray which has all specified Clusters removed More...
 
class  SVDEventT0PerformanceTTreeModule
 The module is used to create a TTree to study SVD EventT0. More...
 
class  SVDMaxStripTTreeModule
 The module is used to create a TTree to study the number of strips fired per event per APV chip. More...
 
class  SVDOccupancyAnalysisModule
 The SVD OccupancyAnalysis Module. More...
 
class  SVDPerformanceModule
 The (TB) SVD Performance Module. More...
 
class  SVDPerformanceTTreeModule
 The module is used to create a TTree to study SVD clusters, genfit unbiased residuals and many other properties related to the track they belong to. More...
 
class  SVDShaperDigitsFromTracksModule
 generates two new StoreArray from the input StoreArray. More...
 
class  SVDCoGTimeEstimatorModule
 This module builds the SVDRecoDigits (calibrated and fitted strips) from the SVDShaperDigits. More...
 
class  SVDDataFormatCheckModule
 This module checks the format of the data that we are going to reconstruct checking the SVDModeByte and the SVDDAQDiagnostic. More...
 
class  SVDStripMaskingModule
 This module removes the strips to be masked read form the SVDHotStripsCalibration. More...
 
class  SVD3SamplesEmulatorModule
 This module takes the SVDShaperDigit as input and select three consecutive samples starting from the one chosen by the user. More...
 
class  SVDEventInfoSetterModule
 Module to set the SVDEventInfo in the simulation. More...
 
class  SVDTriggerQualityGeneratorModule
 This module generates a StoreObjPtr that contains random trigger quality chosen between FINE and COARSE. More...
 
class  SVDZeroSuppressionEmulatorModule
 This module filters out strips that do not pass a ZS cut from the SVDShaperDigit StoreArray. More...
 
class  SVD6SampleEventSkimModule
 SVD 6-sample event skim module. More...
 
struct  ClustersOnSensor
 small struct for storing all clusters of the same sensor in one container. More...
 
class  SVDSpacePointCreatorModule
 Imports Clusters of the SVD detector and converts them to spacePoints. More...
 
class  SVDSpacePointQICalibrationModule
 Imports Clusters of the SVD detector and converts them to spacePoints. More...
 
class  SVDClusterAbsoluteTimeShifterCollectorModule
 This module creates and fills histograms based on cluster-sizes so that the mean of SVD-cluster time distribution could be calculated. More...
 
class  SVDClusterTimeShifterCollectorModule
 This module creates and fills histograms based on cluster-sizes so that the mean of SVD-cluster time distribution could be calculated. More...
 
class  SVDTimeCalibrationCollectorModule
 Collector module used to create the histograms needed for the SVD CoG-Time calibration. More...
 
class  SVDTimeGroupingModule
 Imports Clusters of the SVD detector and converts them to spacePoints. More...
 
class  SVDTimeValidationCollectorModule
 Collector module used to create the histograms needed for the SVD CoG-Time calibration. More...
 

Typedefs

typedef std::tuple< double, double, double > GroupInfo
 typedef to be used to store Gauss parameters (integral, center, sigma)
 

Functions

void clusterPDFName (const VxdID &sensor, int size, int side, int maxClusterSize, std::string &PDFName, std::string &errorPDFName, bool useLegacyNaming)
 Function to set name of PDF for cluster quality estimation.
 
void occupancyPDFName (const VxdID &sensor, int side, std::string &PDFName)
 Function to maintain common naming convention between calibration occupancy file generation and occupancy value extraction in main crossTalkFinder module.
 
template<class SpacePointType>
void provideSVDClusterSingles (const StoreArray< SVDCluster > &svdClusters, StoreArray< SpacePointType > &spacePoints)
 simply store one spacePoint for each existing SVDCluster.
 
void storeInputVectorFromSingleCluster (const SVDCluster *cls, std::vector< float > &inputVector, const SVDNoiseCalibrations &noiseCal)
 Store the input values for SVDSpacePoint selection from the given SVDCluster.
 
void findPossibleCombinations (const Belle2::ClustersOnSensor &aSensor, std::vector< std::vector< const SVDCluster * > > &foundCombinations, std::vector< std::pair< int, int > > &foundCombinationIndices, const SVDHitTimeSelection &hitTimeCut, const bool &useSVDGroupInfo, const int &numberOfSignalGroups, const bool &formSingleSignalGroup, const SVDNoiseCalibrations &noiseCal, const DBObjPtr< SVDSpacePointSNRFractionSelector > &svdSpacePointSelectionFunction, bool useSVDSpacePointSNRFractionSelector)
 stores all possible 2-Cluster-combinations.
 
void spPDFName (const VxdID &sensor, int uSize, int vSize, int maxClusterSize, std::string &PDFName, std::string &errorPDFName, bool useLegacyNaming)
 Function to set name of PDF for spacePoint quality estimation.
 
void calculatePairingProb (TFile *pdfFile, const std::vector< const SVDCluster * > &clusters, double &prob, double &error, bool useLegacyNaming)
 Function to extract probability of correct (pair from signal hit) cluster pairing from preconfigured pdfs Probability defined as Pcharge * Ptime * Pucluster * Pvcluster.
 
template<class SpacePointType>
void provideSVDClusterCombinations (const StoreArray< SVDCluster > &svdClusters, StoreArray< SpacePointType > &spacePoints, SVDHitTimeSelection &hitTimeCut, bool useQualityEstimator, TFile *pdfFile, bool useLegacyNaming, unsigned int numMaxSpacePoints, std::string m_eventLevelTrackingInfoName, const bool &useSVDGroupInfo, const int &numberOfSignalGroups, const bool &formSingleSignalGroup, const SVDNoiseCalibrations &noiseCal, const DBObjPtr< SVDSpacePointSNRFractionSelector > &svdSpacePointSelectionFunction, bool useSVDSpacePointSNRFractionSelector)
 finds all possible combinations of U and V Clusters for SVDClusters.
 
double myGaus (const double *x, const double *par)
 Gauss function to be used in the fit.
 
void addGausToHistogram (TH1D &hist, const double &integral, const double &center, const double &sigma, const double &sigmaN, const bool &isAddition=true)
 Add (or Subtract) a Gaussian to (or from) a histogram.
 
void subtractGausFromHistogram (TH1D &hist, const double &integral, const double &center, const double &sigma, const double &sigmaN)
 Subtract a Gaussian from a histogram.
 
int getSensorType (const VxdID &sensorID)
 Get Sensor Type of SVD sensors.
 

Detailed Description

Typedef Documentation

◆ GroupInfo

typedef std::tuple<double, double, double> GroupInfo

typedef to be used to store Gauss parameters (integral, center, sigma)

Definition at line 39 of file SVDTimeGroupingModule.h.

Function Documentation

◆ addGausToHistogram()

void addGausToHistogram ( TH1D & hist,
const double & integral,
const double & center,
const double & sigma,
const double & sigmaN,
const bool & isAddition = true )
inline

Add (or Subtract) a Gaussian to (or from) a histogram.

The gauss is calculated upto the sigmaN passed to the function.

Definition at line 174 of file SVDTimeGroupingModule.h.

177 {
178 int startBin = hist.FindBin(center - sigmaN * sigma);
179 int endBin = hist.FindBin(center + sigmaN * sigma);
180 if (startBin < 1) startBin = 1;
181 if (endBin > (hist.GetNbinsX())) endBin = hist.GetNbinsX();
182
183 for (int ijx = startBin; ijx <= endBin; ijx++) {
184 double tbinc = hist.GetBinCenter(ijx);
185 double tbincontent = hist.GetBinContent(ijx);
186
187 if (isAddition) tbincontent += integral * TMath::Gaus(tbinc, center, sigma, true);
188 else tbincontent -= integral * TMath::Gaus(tbinc, center, sigma, true);
189
190 hist.SetBinContent(ijx, tbincontent);
191 }
192 }

◆ calculatePairingProb()

void calculatePairingProb ( TFile * pdfFile,
const std::vector< const SVDCluster * > & clusters,
double & prob,
double & error,
bool useLegacyNaming )
inline

Function to extract probability of correct (pair from signal hit) cluster pairing from preconfigured pdfs Probability defined as Pcharge * Ptime * Pucluster * Pvcluster.

Definition at line 281 of file SpacePointHelperFunctions.h.

283 {
284
285 int maxSize;
286 int pdfEntries = pdfFile->GetListOfKeys()->GetSize();
287 if (useLegacyNaming == true) {
288 maxSize = floor(sqrt((pdfEntries - 4) / 6)); //4(time+size)+3(sensors)*2(prob/error)*size^2(u/v combo.)
289 } else {
290 maxSize = floor(sqrt((pdfEntries - 4) / 344)); //4(time+size)+172(sensorType)*2(prob/error)*size^2(u/v combo.)
291 }
292 std::string chargeProbInput;
293 std::string chargeErrorInput;
294
295 spPDFName(clusters[0]->getSensorID(), clusters[0]->getSize(), clusters[1]->getSize(), maxSize,
296 chargeProbInput, chargeErrorInput, useLegacyNaming);
297 std::string timeProbInput = "timeProb";
298 std::string timeErrorInput = "timeError";
299 std::string sizeProbInput = "sizeProb";
300 std::string sizeErrorInput = "sizeError";
301
302
303 TH2F* chargePDF = nullptr;
304 TH2F* chargeError = nullptr;
305 TH2F* timePDF = nullptr;
306 TH2F* timeError = nullptr;
307 TH2F* sizePDF = nullptr;
308 TH2F* sizeError = nullptr;
309
310 pdfFile->GetObject(chargeProbInput.c_str(), chargePDF);
311 pdfFile->GetObject(chargeErrorInput.c_str(), chargeError);
312 pdfFile->GetObject(timeProbInput.c_str(), timePDF);
313 pdfFile->GetObject(timeErrorInput.c_str(), timeError);
314 pdfFile->GetObject(sizeProbInput.c_str(), sizePDF);
315 pdfFile->GetObject(sizeErrorInput.c_str(), sizeError);
316
317 int xChargeBin = chargePDF->GetXaxis()->FindFixBin(clusters[0]->getCharge());
318 int yChargeBin = chargePDF->GetYaxis()->FindFixBin(clusters[1]->getCharge());
319
320 int xTimeBin = timePDF->GetXaxis()->FindFixBin(clusters[0]->getClsTime());
321 int yTimeBin = timePDF->GetYaxis()->FindFixBin(clusters[1]->getClsTime());
322
323
324 int xSizeBin = sizePDF->GetXaxis()->FindFixBin(clusters[0]->getSize());
325 int ySizeBin = sizePDF->GetYaxis()->FindFixBin(clusters[1]->getSize());
326
327 double chargeProb = chargePDF->GetBinContent(xChargeBin, yChargeBin);
328 double timeProb = timePDF->GetBinContent(xTimeBin, yTimeBin);
329 double sizeProb = sizePDF->GetBinContent(xSizeBin, ySizeBin);
330 double chargeProbError = chargePDF->GetBinContent(xChargeBin, yChargeBin);
331 double timeProbError = timePDF->GetBinContent(xTimeBin, yTimeBin);
332 double sizeProbError = sizePDF->GetBinContent(xSizeBin, ySizeBin);
333
334
335 if (chargeProbError == 0) {
336 B2DEBUG(21, "svdClusterProbabilityEstimator has not been run, spacePoint QI will return zero!");
337 }
338
339 prob = chargeProb * timeProb * sizeProb * clusters[0]->getQuality() * clusters[1]->getQuality();
340 error = prob * sqrt(square(timeProb * sizeProb * clusters[0]->getQuality() * clusters[1]->getQuality() * chargeProbError) +
341 square(chargeProb * sizeProb * clusters[0]->getQuality() * clusters[1]->getQuality() * timeProbError) +
342 square(chargeProb * timeProb * clusters[0]->getQuality() * clusters[1]->getQuality() * sizeProbError) +
343 square(chargeProb * timeProb * sizeProb * clusters[1]->getQuality() * clusters[0]->getQualityError()) +
344 square(chargeProb * timeProb * sizeProb * clusters[0]->getQuality() * clusters[1]->getQualityError()));
345 }
constexpr T square(const T &x)
Calculate the square of the input.
Definition MathHelpers.h:21
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28
void spPDFName(const VxdID &sensor, int uSize, int vSize, int maxClusterSize, std::string &PDFName, std::string &errorPDFName, bool useLegacyNaming)
Function to set name of PDF for spacePoint quality estimation.

◆ clusterPDFName()

void clusterPDFName ( const VxdID & sensor,
int size,
int side,
int maxClusterSize,
std::string & PDFName,
std::string & errorPDFName,
bool useLegacyNaming )
inline

Function to set name of PDF for cluster quality estimation.

Legacy naming convention for PDFs distributed by sensor type rather than sensor ID, not used after 2018 MC calibrated PDFs.

Definition at line 24 of file ClusterQualityHelperFunctions.h.

26 {
27 if (useLegacyNaming == true) {
28 std::string sensorSide;
29 if (side == 1) sensorSide = "u";
30 if (side == 0) sensorSide = "v";
31
32 if (size > maxClusterSize) size = maxClusterSize;
33 std::string sensorName;
34 if (sensor.getLayerNumber() == 3) sensorName = "l3";
35 if (sensor.getLayerNumber() > 3 && sensor.getSensorNumber() == 1) sensorName = "trap";
36 if (sensor.getLayerNumber() > 3 && sensor.getSensorNumber() > 1) sensorName = "large";
37
38 PDFName = sensorSide + sensorName + std::to_string(size);
39 errorPDFName = PDFName + "Error";
40 } else {
41
42 std::string sensorSide;
43 if (side == 1) sensorSide = "u";
44 if (side == 0) sensorSide = "v";
45 int layer = sensor.getLayerNumber();
46 int ladder = sensor.getLadderNumber();
47 int sens = sensor.getSensorNumber();
48
49 if (size > maxClusterSize) size = maxClusterSize;
50
51 PDFName = std::to_string(layer) + "." + std::to_string(ladder) + "." + std::to_string(sens) + "." + sensorSide + "." +
52 std::to_string(size);
53 errorPDFName = PDFName + "_Error";
54
55 }
56 }

◆ findPossibleCombinations()

void findPossibleCombinations ( const Belle2::ClustersOnSensor & aSensor,
std::vector< std::vector< const SVDCluster * > > & foundCombinations,
std::vector< std::pair< int, int > > & foundCombinationIndices,
const SVDHitTimeSelection & hitTimeCut,
const bool & useSVDGroupInfo,
const int & numberOfSignalGroups,
const bool & formSingleSignalGroup,
const SVDNoiseCalibrations & noiseCal,
const DBObjPtr< SVDSpacePointSNRFractionSelector > & svdSpacePointSelectionFunction,
bool useSVDSpacePointSNRFractionSelector )
inline

stores all possible 2-Cluster-combinations.

first parameter is a struct containing all clusters on current sensor. second parameter is the container which collects all combinations found.

for each u cluster, a v cluster is combined to a possible combination. Condition which has to be fulfilled: the first entry is always an u cluster, the second always a v-cluster

Definition at line 159 of file SpacePointHelperFunctions.h.

165 {
166
167 for (size_t iU = 0; iU < aSensor.clustersU.size(); ++iU) {
168 const SVDCluster* uCluster = aSensor.clustersU[iU];
169 if (! hitTimeCut.isClusterInTime(uCluster->getSensorID(), 1, uCluster->getClsTime())) {
170 B2DEBUG(29, "Cluster rejected due to timing cut. Cluster time: " << uCluster->getClsTime());
171 continue;
172 }
173 for (size_t iV = 0; iV < aSensor.clustersV.size(); ++iV) {
174 const SVDCluster* vCluster = aSensor.clustersV[iV];
175 if (! hitTimeCut.isClusterInTime(vCluster->getSensorID(), 0, vCluster->getClsTime())) {
176 B2DEBUG(29, "Cluster rejected due to timing cut. Cluster time: " << vCluster->getClsTime());
177 continue;
178 }
179
180 if (! hitTimeCut.areClusterTimesCompatible(vCluster->getSensorID(), uCluster->getClsTime(), vCluster->getClsTime())) {
181 B2DEBUG(29, "Cluster combination rejected due to timing cut. Cluster time U (" << uCluster->getClsTime() <<
182 ") is incompatible with Cluster time V (" << vCluster->getClsTime() << ")");
183 continue;
184 }
185
186 if (useSVDGroupInfo) {
187 const std::vector<int>& uTimeGroupId = uCluster->getTimeGroupId();
188 const std::vector<int>& vTimeGroupId = vCluster->getTimeGroupId();
189
190 if (int(uTimeGroupId.size()) && int(vTimeGroupId.size())) { // indirect check if the clusterizer module is disabled
191 bool isContinue = true;
192 for (const auto& uitem : uTimeGroupId) {
193 if (uitem < 0 || uitem >= numberOfSignalGroups) continue;
194 for (const auto& vitem : vTimeGroupId) {
195 if (vitem < 0 || vitem >= numberOfSignalGroups) continue;
196 if ((uitem == vitem) || formSingleSignalGroup) { isContinue = false; break; }
197 }
198 if (!isContinue) break;
199 }
200
201 if (isContinue) {
202 B2DEBUG(29, "Cluster combination rejected due to different time-group Id.");
203 continue;
204 }
205 }
206 }
207
208 if (useSVDSpacePointSNRFractionSelector) {
209 std::vector<float> inputU;
210 std::vector<float> inputV;
211
212 storeInputVectorFromSingleCluster(uCluster, inputU, noiseCal);
213 storeInputVectorFromSingleCluster(vCluster, inputV, noiseCal);
214
215 bool pass = svdSpacePointSelectionFunction->passSNRFractionSelection(inputU, inputV);
216 if (!pass) {
217 B2DEBUG(29, "Cluster combination rejected due to SVDSpacePointSNRFractionSelector");
218 continue;
219 }
220 }
221
222 foundCombinations.push_back({uCluster, vCluster});
223 foundCombinationIndices.emplace_back(aSensor.indicesU[iU], aSensor.indicesV[iV]);
224
225
226 }
227 }
228
229
230
231
232 }
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition SVDCluster.h:29
float getClsTime() const
Get average of waveform maximum times of cluster strip signals.
Definition SVDCluster.h:134
VxdID getSensorID() const
Get the sensor ID.
Definition SVDCluster.h:102
const std::vector< int > & getTimeGroupId() const
Get ID of the time-group.
Definition SVDCluster.h:184
bool isClusterInTime(const Belle2::VxdID &sensorID, const bool &isU, const double &svdTime, const double &svdTimeError=0, const double &t0=0, const double &t0Error=0) const
Return whether the cluster is estimated to be in time with the event or off-time.
bool areClusterTimesCompatible(const Belle2::VxdID &sensorID, const double &uTime, const double &vTime=0) const
Return whether the cluster is estimated to be in time with the event or off-time.
void storeInputVectorFromSingleCluster(const SVDCluster *cls, std::vector< float > &inputVector, const SVDNoiseCalibrations &noiseCal)
Store the input values for SVDSpacePoint selection from the given SVDCluster.
std::vector< const SVDCluster * > clustersU
stores all SVDclusters of U type.
std::vector< const SVDCluster * > clustersV
stores all SVDclusters of V type.
std::vector< int > indicesV
stores the StoreArray indices of the clusters in clustersV, in the same order
std::vector< int > indicesU
stores the StoreArray indices of the clusters in clustersU, in the same order

◆ getSensorType()

int getSensorType ( const VxdID & sensorID)
inline

Get Sensor Type of SVD sensors.

Definition at line 207 of file SVDTimeGroupingModule.h.

208 {
209 int layer = sensorID.getLayerNumber();
210 int sensor = sensorID.getSensorNumber();
211 if (layer == 3)
212 return 0;
213 else {
214 if (sensor == 1)
215 return 1;
216 else
217 return 2;
218 }
219 }
baseType getSensorNumber() const
Get the sensor id.
Definition VxdID.h:99
baseType getLayerNumber() const
Get the layer id.
Definition VxdID.h:95

◆ myGaus()

double myGaus ( const double * x,
const double * par )
inline

Gauss function to be used in the fit.

Definition at line 164 of file SVDTimeGroupingModule.h.

165 {
166 return par[0] * TMath::Gaus(x[0], par[1], par[2], true);
167 }

◆ occupancyPDFName()

void occupancyPDFName ( const VxdID & sensor,
int side,
std::string & PDFName )
inline

Function to maintain common naming convention between calibration occupancy file generation and occupancy value extraction in main crossTalkFinder module.

Definition at line 27 of file SVDCrossTalkFinderHelperFunctions.h.

28 {
29
30 int layer = sensor.getLayerNumber();
31 int ladder = sensor.getLadderNumber();
32 int sens = sensor.getSensorNumber();
33
34
35 PDFName = std::to_string(layer) + "." + std::to_string(ladder) + "." + std::to_string(sens) + "." + std::to_string(side);
36
37
38 }

◆ provideSVDClusterCombinations()

template<class SpacePointType>
void provideSVDClusterCombinations ( const StoreArray< SVDCluster > & svdClusters,
StoreArray< SpacePointType > & spacePoints,
SVDHitTimeSelection & hitTimeCut,
bool useQualityEstimator,
TFile * pdfFile,
bool useLegacyNaming,
unsigned int numMaxSpacePoints,
std::string m_eventLevelTrackingInfoName,
const bool & useSVDGroupInfo,
const int & numberOfSignalGroups,
const bool & formSingleSignalGroup,
const SVDNoiseCalibrations & noiseCal,
const DBObjPtr< SVDSpacePointSNRFractionSelector > & svdSpacePointSelectionFunction,
bool useSVDSpacePointSNRFractionSelector )

finds all possible combinations of U and V Clusters for SVDClusters.

first parameter is a storeArray containing SVDClusters. second parameter is a storeArra containing SpacePoints (will be filled in the function). third parameter tels the spacePoint where to get the name of the storeArray containing the related clusters relationweights code the type of the cluster. +1 for u and -1 for v

Definition at line 354 of file SpacePointHelperFunctions.h.

360 {
361 std::unordered_map<VxdID::baseType, ClustersOnSensor>
362 activatedSensors; // collects one entry per sensor, each entry will contain all Clusters on it TODO: better to use a sorted vector/list?
363 std::vector<std::vector<const SVDCluster*> >
364 foundCombinations; // collects all combinations of Clusters which were possible (condition: 1u+1v-Cluster on the same sensor)
365 std::vector<std::pair<int, int> >
366 foundCombinationIndices; // StoreArray indices of the (u, v) clusters of each entry of foundCombinations
367
368 // sort Clusters by sensor. After the loop, each entry of activatedSensors contains all U and V-type clusters on that sensor
369 for (unsigned int i = 0; i < uint(svdClusters.getEntries()); ++i) {
370 SVDCluster* currentCluster = svdClusters[i];
371
372 activatedSensors[currentCluster->getSensorID().getID()].addCluster(currentCluster, i);
373 }
374
375
376 for (const auto& aSensor : activatedSensors)
377 findPossibleCombinations(aSensor.second, foundCombinations, foundCombinationIndices, hitTimeCut, useSVDGroupInfo,
378 numberOfSignalGroups, formSingleSignalGroup, noiseCal, svdSpacePointSelectionFunction,
379 useSVDSpacePointSNRFractionSelector);
380
381 // Do not make space-points if their number would be too large to be considered by tracking
382 if (foundCombinations.size() > numMaxSpacePoints) {
383 StoreObjPtr<EventLevelTrackingInfo> m_eventLevelTrackingInfo(m_eventLevelTrackingInfoName);
384 if (m_eventLevelTrackingInfo.isValid()) {
385 m_eventLevelTrackingInfo->setSVDSpacePointCreatorAbortionFlag();
386 }
387 return;
388 }
389
390 // RelationArray is much cheaper than addRelationTo
391 // The relation weight codes the type of the cluster: +1 for u and -1 for v.
392 RelationArray spacePointsToClusters(spacePoints, svdClusters);
393
394 for (size_t iCombi = 0; iCombi < foundCombinations.size(); ++iCombi) {
395 auto& clusterCombi = foundCombinations[iCombi];
396 const int spacePointIndex = spacePoints.getEntries();
397 SpacePointType* newSP = spacePoints.appendNew(clusterCombi);
398 if (useQualityEstimator == true) {
399 double probability;
400 double error;
401 calculatePairingProb(pdfFile, clusterCombi, probability, error, useLegacyNaming);
402 newSP->setQualityEstimation(probability);
403 newSP->setQualityEstimationError(error);
404 }
405 // the first cluster of the combination is always the u one, the second one the v one
406 spacePointsToClusters.add(spacePointIndex, foundCombinationIndices[iCombi].first, 1.);
407 spacePointsToClusters.add(spacePointIndex, foundCombinationIndices[iCombi].second, -1.);
408 }
409 }
Low-level class to create/modify relations between StoreArrays.
T * appendNew()
Construct a new T object at the end of the array.
Definition StoreArray.h:247
int getEntries() const
Get the number of objects in the array.
Definition StoreArray.h:216
baseType getID() const
Get the unique id.
Definition VxdID.h:93
void findPossibleCombinations(const Belle2::ClustersOnSensor &aSensor, std::vector< std::vector< const SVDCluster * > > &foundCombinations, std::vector< std::pair< int, int > > &foundCombinationIndices, const SVDHitTimeSelection &hitTimeCut, const bool &useSVDGroupInfo, const int &numberOfSignalGroups, const bool &formSingleSignalGroup, const SVDNoiseCalibrations &noiseCal, const DBObjPtr< SVDSpacePointSNRFractionSelector > &svdSpacePointSelectionFunction, bool useSVDSpacePointSNRFractionSelector)
stores all possible 2-Cluster-combinations.
void calculatePairingProb(TFile *pdfFile, const std::vector< const SVDCluster * > &clusters, double &prob, double &error, bool useLegacyNaming)
Function to extract probability of correct (pair from signal hit) cluster pairing from preconfigured ...

◆ provideSVDClusterSingles()

template<class SpacePointType>
void provideSVDClusterSingles ( const StoreArray< SVDCluster > & svdClusters,
StoreArray< SpacePointType > & spacePoints )

simply store one spacePoint for each existing SVDCluster.

first parameter is a storeArray containing SVDClusters. second parameter is a storeArra containing SpacePoints (will be filled in the function).

Definition at line 97 of file SpacePointHelperFunctions.h.

99 {
100 // RelationArray is much cheaper than addRelationTo
101 RelationArray spacePointsToClusters(spacePoints, svdClusters);
102 for (unsigned int i = 0; i < uint(svdClusters.getEntries()); ++i) {
103 const SVDCluster* currentCluster = svdClusters[i];
104 std::vector<const SVDCluster*> currentClusterCombi = { currentCluster };
105 const int spacePointIndex = spacePoints.getEntries();
106 spacePoints.appendNew(currentClusterCombi);
107 spacePointsToClusters.add(spacePointIndex, i);
108 }
109 }

◆ spPDFName()

void spPDFName ( const VxdID & sensor,
int uSize,
int vSize,
int maxClusterSize,
std::string & PDFName,
std::string & errorPDFName,
bool useLegacyNaming )
inline

Function to set name of PDF for spacePoint quality estimation.

Legacy naming convention for PDFs distributed by sensor type rather than sensor ID, not used after 2018 MC calibrated PDFs.

Definition at line 239 of file SpacePointHelperFunctions.h.

241 {
242 if (useLegacyNaming == true) {
243
244 if (uSize > maxClusterSize) uSize = maxClusterSize;
245 if (vSize > maxClusterSize) vSize = maxClusterSize;
246
247 std::string sensorName;
248
249 if (sensor.getLayerNumber() == 3) sensorName = "l3";
250 if (sensor.getLayerNumber() > 3 && sensor.getSensorNumber() == 1) sensorName = "trap";
251 if (sensor.getLayerNumber() > 3 && sensor.getSensorNumber() > 1) sensorName = "large";
252
253 PDFName = sensorName + std::to_string(uSize) + std::to_string(vSize);
254 errorPDFName = "error" + PDFName;
255 } else {
256
257 if (uSize > maxClusterSize) uSize = maxClusterSize;
258 if (vSize > maxClusterSize) vSize = maxClusterSize;
259
260 int layer = sensor.getLayerNumber();
261 int ladder = sensor.getLadderNumber();
262 int sens = sensor.getSensorNumber();
263
264 PDFName = std::to_string(layer) + "." + std::to_string(ladder) + "." + std::to_string(sens) + "." + std::to_string(
265 uSize) + "." + std::to_string(vSize);
266 errorPDFName = PDFName + "_Error";
267 }
268
269
270
271 }

◆ storeInputVectorFromSingleCluster()

void storeInputVectorFromSingleCluster ( const SVDCluster * cls,
std::vector< float > & inputVector,
const SVDNoiseCalibrations & noiseCal )
inline

Store the input values for SVDSpacePoint selection from the given SVDCluster.

Definition at line 114 of file SpacePointHelperFunctions.h.

117 {
118 inputVector.clear();
119 inputVector.resize(3, 0.0);
120
121 auto shaperDigits = cls->getRelationsTo<SVDShaperDigit>();
122 float noise = 0;
123 for (auto iSD : shaperDigits) {
124 auto samples = iSD.getSamples();
125 std::vector<float> selectedSamples;
126 if (samples.size() == 6) {
127 Belle2::SVD::SVDMaxSumAlgorithm maxSum(samples);
128 auto maxSamples = maxSum.getSelectedSamples();
129 selectedSamples.assign(maxSamples.begin(), maxSamples.end());
130 } else {
131 selectedSamples.assign(samples.begin(), samples.end());
132 }
133 if (selectedSamples.size() < 3) continue;
134
135 inputVector[0] += selectedSamples[0];
136 inputVector[1] += selectedSamples[1];
137 inputVector[2] += selectedSamples[2];
138
139 VxdID thisSensorID = iSD.getSensorID();
140 bool thisSide = iSD.isUStrip();
141 int thisCellID = iSD.getCellID();
142 float thisNoise = noiseCal.getNoise(thisSensorID, thisSide, thisCellID);
143 noise += thisNoise * thisNoise;
144 }
145 noise = sqrt(noise);
146 inputVector[0] = inputVector[0] / noise;
147 inputVector[1] = inputVector[1] / noise;
148 inputVector[2] = inputVector[2] / noise;
149 }
RelationVector< TO > getRelationsTo(const std::string &name="", const std::string &namedRelation="") const
Get the relations that point from this object to another store array.
float getNoise(const VxdID &sensorID, const bool &isU, const unsigned short &strip) const
This is the method for getting the noise.
The SVD ShaperDigit class.
Class implementing the MaxSum algorithm.
Class to uniquely identify a any structure of the PXD and SVD.
Definition VxdID.h:32

◆ subtractGausFromHistogram()

void subtractGausFromHistogram ( TH1D & hist,
const double & integral,
const double & center,
const double & sigma,
const double & sigmaN )
inline

Subtract a Gaussian from a histogram.

The gauss is calculated upto the sigmaN passed to the function.

Definition at line 199 of file SVDTimeGroupingModule.h.

202 {
203 addGausToHistogram(hist, integral, center, sigma, sigmaN, false);
204 }
void addGausToHistogram(TH1D &hist, const double &integral, const double &center, const double &sigma, const double &sigmaN, const bool &isAddition=true)
Add (or Subtract) a Gaussian to (or from) a histogram.