 |
Belle II Software
release-05-02-19
|
13 #include <tracking/trackFindingVXD/filterMap/map/FiltersContainer.h>
14 #include "tracking/trackFindingVXD/environment/VXDTFFilters.h"
15 #include "tracking/modules/vxdtfRedesign/SectorMapBootstrapModule.h"
17 #include "tracking/dataobjects/SectorMapConfig.h"
18 #include <tracking/spacePointCreation/SpacePoint.h>
21 #include <framework/core/ModuleParam.templateDetails.h>
23 #include <vxd/geometry/GeoCache.h>
24 #include <vxd/geometry/SensorInfoBase.h>
44 setDescription(
"Create the VXDTF SectorMap for the following modules."
48 "File from which the SectorMaps will be retrieved if\
52 "File into which the SectorMaps will be written if\
56 retrieve the SectorMaps from SectorMapsInputFile during initialize.",
m_readSectorMap);
62 " from the from the root file. All other will be ignored. If empty \"\" (default) all setups are read. Will "
63 "only used if sectormap is retrieved from root file. Case will be ignored!",
66 addParam(
"ReadSecMapFromDB",
m_readSecMapFromDB,
"If set to true the sector map will be read from the Data Base. NOTE: this will "
67 "override the parameter ReadSectorMap (reading sector map from file)!!!",
m_readSecMapFromDB);
71 std::vector< std::pair<char, void*> > dummyVector = {};
75 std::string structure2HitFilter = empty2HitFilter.getNameAndReference(&dummyVector);
78 "Vector of vectors containing expressions used to "
79 "alter the 2-hit filters. The inner vector should contain exactly two strings. The first entry is interpreted as index (integer). "
80 "The second entry is interpreted as function used to create a TF1. The variable to be altered will be assumed to be called \"x\" "
81 "and in addition one can use \"[0]\" can be used which will be interpreted as FullSecID of the static sector the filter is attached to. "
82 "No other parameter is allowed. The structure of the 2-hit filter is as follows: " + structure2HitFilter +
83 " Example: [(1, \"12\"), (3, \"sin(x)\"), (4, \"x + [0]\")] PS: use this feature only if you know what you are doing!",
88 std::string structure3HitFilter = empty3HitFilter.getNameAndReference(&dummyVector);
91 "Vector of vectors containing expressions used to "
92 "alter the 3-hit filters. The inner vector should contain exactly two strings. The first entry is interpreted as index (integer). "
93 "The second entry is interpreted as function used to create a TF1. The variable to be altered will be assumed to be called \"x\" "
94 "and in addition \"[0]\" can be used which will be interpreted as FullSecID of the static sector the filter is attached to. No other "
95 "parameter is allowd. The structure of the 2-hit filter is as follows: " + structure3HitFilter +
96 " Example: [(1, \"12\"), (3, \"sin(x)\"), (4, \"x + [0]\")] PS: use this feature only if you know what you are doing!",
106 B2DEBUG(1,
"SectorMapBootstrapModule: Retrieving sectormap from DB. Filename: " <<
m_sectorMapsInputFile);
108 if (
m_ptrDBObjPtr ==
nullptr) B2FATAL(
"SectorMapBootstrapModule: the DBObjPtr is not initialized");
121 B2FATAL(
"Detected existing output file! Please delete or move before proceeding! File name: " <<
m_sectorMapsOutputFile);
123 B2DEBUG(1,
"Checked that output file does not exist!");
160 config1.
pTmin = 0.02;
188 config1point1.
pTmin = 0.02;
189 config1point1.
pTmax = 6.0;
200 config1point1.
mField = 1.5;
225 vector< double > uDividersMinusLastOne = config.uSectorDivider;
226 uDividersMinusLastOne.pop_back();
227 vector< double > vDividersMinusLastOne = config.vSectorDivider;
228 vDividersMinusLastOne.pop_back();
231 vector< vector< FullSecID > > sectors;
233 sectors.resize(config.uSectorDivider.size());
234 unsigned nSectorsInU = config.uSectorDivider.size(),
235 nSectorsInV = config.vSectorDivider.size();
239 std::vector<VxdID> listOfSensors = geometry.getListOfSensors();
240 for (
VxdID aSensorId : listOfSensors) {
243 if (std::find(config.allowedLayers.begin(), config.allowedLayers.end(),
244 aSensorId.getLayerNumber()) == config.allowedLayers.end())
continue;
249 B2WARNING(
"Found sensor which is not PXD or SVD with VxdID: " << aSensorId <<
" ! Will skip that sensor ");
254 for (
unsigned int i = 0; i < nSectorsInU; i++) {
255 sectors.at(i).resize(nSectorsInV);
256 for (
unsigned int j = 0; j < nSectorsInV ; j++) {
257 sectors.at(i).at(j) =
FullSecID(aSensorId,
false, counter);
262 vDividersMinusLastOne,
268 if (std::find(config.allowedLayers.begin(), config.allowedLayers.end(), 0) != config.allowedLayers.end()) {
269 std::vector<double> uCuts4vIP = {}, vCuts4vIP = {};
288 if (!rootFile.IsOpen()) B2FATAL(
"Unable to open rootfile! This could be caused by an already existing file of the same name: "
294 TString setupKeyName;
300 for (
auto singleSetupFilters : allSetupsFilters) {
302 setupKeyName = TString(singleSetupFilters.first.c_str());
306 rootFile.mkdir(setupKeyName, setupKeyName);
307 rootFile.cd(setupKeyName);
309 singleSetupFilters.second->persistOnRootFile();
330 if (
m_ptrDBObjPtr ==
nullptr) B2FATAL(
"SectorMapBootstrapModule: the pointer to the DB payload is not set!");
331 if (!(*m_ptrDBObjPtr).isValid()) B2FATAL(
"SectorMapBootstrapModule the DB object is not valid!");
333 rootFileName = (*m_ptrDBObjPtr)->getFileName();
336 B2DEBUG(1,
"SectorMapBootstrapModule: retrieving new SectorMap. New file name: " << rootFileName);
337 TFile rootFile(rootFileName.c_str());
340 if (!rootFile.IsOpen()) B2FATAL(
"The root file: " << rootFileName <<
" was not found.");
342 TTree* tree =
nullptr;
344 if (tree ==
nullptr) B2FATAL(
"SectorMapBootstrapModule: tree not found! tree name: " <<
c_setupKeyNameTTreeName.c_str());
346 TString* setupKeyName =
nullptr;
349 if (setupKeyName ==
nullptr) B2FATAL(
"SectorMapBootstrapModule: setupKeyName not found");
353 setupToRead_upper.ToUpper();
356 bool read_something =
false;
359 auto nEntries = tree->GetEntriesFast();
360 for (
int i = 0; i < nEntries ; i++) {
364 if (setupToRead_upper !=
"") {
365 TString buff = setupKeyName->Data();
367 if (buff != setupToRead_upper)
continue;
370 rootFile.cd(setupKeyName->Data());
372 B2DEBUG(1,
"Retrieving SectorMap with name " << setupKeyName->Data());
376 string setupKeyNameStd = string(setupKeyName->Data());
381 B2WARNING(
"The 2-hit filters will be altered from the default!");
382 B2INFO(
"The following set of indizes and functions will be used to alter the 2-hit filters:");
384 B2INFO(
"index=" << std::get<0>(entry) <<
" function=" << std::get<1>(entry));
389 B2WARNING(
"The 3-hit filters will be altered from the default!");
390 B2INFO(
"The following set of indizes and functions will be used to alter the 3-hit filters:");
392 B2INFO(
"index=" << std::get<0>(entry) <<
" function=" << std::get<1>(entry));
400 B2DEBUG(1,
"Retrieved map with name: " << setupKeyNameStd <<
" from rootfie.");
401 filtersContainer.
assignFilters(setupKeyNameStd, segmentFilters);
405 setupKeyName->Clear();
407 read_something =
true;
410 if (!read_something) B2FATAL(
"SectorMapBootstrapModule: No setup was read from the root file! " <<
416 if (setupKeyName !=
nullptr) {
SectorMapBootstrapModule()
Constructor.
std::vector< int > allowedLayers
stores allowed layers to be used (including virtual IP with layer 0).
void modify2SPFilters(const std::vector< std::tuple< int, std::string > > &adjustFunctions)
modifies the 2SP-filters according to the functions given
std::pair< double, double > quantiles
the quantiles to be chosen in the end for determining the cuts first is quantile, second is 1-quantil...
double seedMaxDist2IPXY
Stores a cut for maximum distance of the seed in xy of the given virtual IP.
Class to uniquely identify a any structure of the PXD and SVD.
SensorType
Enum specifing the type of sensor the SensorInfo represents.
Specialization of DBObjPtr in case of PayloadFiles.
This class contains everything needed by the VXDTF that is not going to change during a RUN,...
void setDescription(const std::string &description)
Sets the description of the module.
std::vector< std::tuple< int, std::string > > m_threeHitFilterAdjustFunctions
vector of tuple<int, string> specifying how 3-hit filters are altered.
std::string m_sectorMapsInputFile
the name of the input root file the sectormaps are read from
Class that contains all the static sectors to which the filters are attached.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
bool retrieveFromRootFile(const TString *dirName)
Retrieves from the current TDirectory all the VXDTFFilters.
bool m_writeSectorMap
if true the sectormap will be written to an output file
void initialize() override
Initialize the Module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
void event() override
This method is the core of the module.
double seedMaxDist2IPZ
Stores a cut for maximum distance of the seed in z of the given virtual IP.
Class to identify a sector inside of the VXD.
std::string m_sectorMapsOutputFile
the name of the ouput root file the sectormaps are written to
B2Vector3< double > B2Vector3D
typedef for common usage with double
void lockFilters()
This function should be called only AFTER all adjustments to the filters have been performed.
bool m_readSecMapFromDB
if true the sector map will be read from the DB. NOTE: this will override m_readSectorMap (read from ...
static GeoCache & getInstance()
Return a reference to the singleton instance.
Abstract base class for different kinds of events.
double pTmin
stores pTCuts for min pT allowed for this .
std::vector< double > vSectorDivider
Defines the sectors boundaries in normalized v coordinates (i.e.
double pTSmear
allows smearing of the cuts.
double pTmax
stores pTCuts for min (.first) and max (.second) ptCut.
void assignFilters(const std::string &setupName, VXDTFFilters< point_t > *filters)
assigns filters.
std::string m_setupToRead
if specified (non "") ONLY the setup with this name will be read. Else all setups in the root file wi...
void modify3SPFilters(const std::vector< std::tuple< int, std::string > > &adjustFunctions)
modifies the 3SP-filters according to the functions given
This class provides a computer convenient numbering scheme for the sectors in the sector map and for ...
void persistSectorMap(void)
writes a sectormap to a root file
const std::string c_setupKeyNameBranchName
the name of the branch the setupt are stored in the tree
int addSectorsOnSensor(const std::vector< double > &normalizedUsup, const std::vector< double > &normalizedVsup, const std::vector< std::vector< FullSecID > > §orIds)
To add an array of sectors on a sensor.
void setConfig(const SectorMapConfig &config)
set the configuration which is used to create this filter
unsigned nHitsMin
Stores the minimal number of hits a TC must have to be accepted as TC (vIP-Hits are ignored).
double rarenessThreshold
defined 1 == 100%, if relative frequency of sec-combi to the outer-sector is less than threshold,...
static FiltersContainer & getInstance()
one and only way to access the singleton object
const setupNameToFilters_t & getAllSetups(void)
returns all the available setups.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Class to faciliate easy access to sensor information of the VXD like coordinate transformations or pi...
void retrieveSectorMap(void)
retrieves SectorMap from file or from the DB
simple struct containing all the configuration data needed for the SecMapTrainer.
std::string secMapName
Sets the human readable proto-name of the sectorMap.
B2Vector3D vIP
Stores the position of the assumed position of the interaction point - The virtual IP.
void bootstrapSectorMap(void)
puts several empty sectormaps into the framework
std::vector< std::tuple< int, std::string > > m_twoHitFilterAdjustFunctions
vector of tuple<int, string> specifying how 2-hit filters are altered.
void beginRun() override
Called when entering a new run.
DBObjPtr< PayloadFile > * m_ptrDBObjPtr
pointer to the DBObjPtr for the payloadfile from which the sectormap is read
const std::string c_setupKeyNameTTreeName
the name of the tree the setups are stored in in the root file
void endRun() override
This method is called if the current run ends.
double mField
Magnetic field value to be set for the filters.
void addCallback(std::function< void(const std::string &)> callback, bool onDestruction=false)
Add a callback method.
std::vector< int > pdgCodesAllowed
Stores all the pdgCodes which are allowed to be used by the SecMap.
std::vector< double > uSectorDivider
Defines the sectors boundaries in normalized u coordinates (i.e.
bool m_readSectorMap
if true a sectormap will be read from a file. NOTE: this will be overridden by m_readSecMapFromDB!