Belle II Software development
VXDTFFilters< point_t > Class Template Referencefinal

Class that contains all the static sectors to which the filters are attached. More...

#include <VXDTFFilters.h>

Public Types

typedef decltype((0.<=DistanceInTimeUside< point_t >()<=0. &&0.<=DistanceInTimeVside< point_t >()<=0. &&0.<=Distance3DSquared< point_t >()<=0.&&0.<=Distance2DXYSquared< point_t >()<=0.&&0.<=Distance1DZ< point_t >()<=0.&&0.<=SlopeRZ< point_t >()<=0.&&0.<=Distance3DNormed< point_t >()<=0.)) twoHitFilter_t
 minimal working 2-hits-example used for redesign of VXDTF.
 
typedef decltype((0.<=DistanceInTime< point_t >()<=0. &&0.<=Angle3DSimple< point_t >()<=0.&&0.<=CosAngleXY< point_t >()<=0.&&0.<=AngleRZSimple< point_t >()<=0.&&CircleDist2IP< point_t >()<=0.&&0.<=DeltaSlopeRZ< point_t >()<=0.&&0.<=DeltaSlopeZoverS< point_t >()<=0.&&0.<=DeltaSoverZ< point_t >()<=0.&&0.<=HelixParameterFit< point_t >()<=0.&&0.<=Pt< point_t >()<=0.&&0.<=CircleRadius< point_t >()<=0.)) threeHitFilter_t
 minimal working example for 3-hits:
 
typedef StaticSector< point_t, twoHitFilter_t, threeHitFilter_t, int > staticSector_t
 typedef to make a static sector type more readable.
 

Public Member Functions

 VXDTFFilters ()
 Construct the container of all the filters used by the VXD Track Finder.
 
 ~VXDTFFilters ()
 Destructor.
 
int addSectorsOnSensor (const std::vector< double > &normalizedUsup, const std::vector< double > &normalizedVsup, const std::vector< std::vector< FullSecID > > &sectorIds)
 To add an array of sectors on a sensor.
 
int addTwoHitFilter (FullSecID outer, FullSecID inner, const twoHitFilter_t &filter)
 adds a two hit filter
 
int addThreeHitFilter (FullSecID outer, FullSecID center, FullSecID inner, const threeHitFilter_t &filter)
 adds a three hit filter
 
CompactSecIDs::sectorID_t getCompactID (FullSecID outer) const
 returns compactSecID for given FullSecID, == 0 if not found.
 
const staticSector_tgetStaticSector (const FullSecID secID) const
 returns pointer to static sector for given fullSecID.
 
const twoHitFilter_t getTwoHitFilters (const FullSecID &outer, const FullSecID &inner) const
 retrieves a two hit filter:
 
bool areCoordinatesValid (VxdID aSensorID, double normalizedU, double normalizedV) const
 check if using getFullID() would be safe (true if it is safe):
 
FullSecID getFullID (VxdID aSensorID, double normalizedU, double normalizedV) const
 returns fullSecID for given sensorID and local coordinates.
 
FullSecID getFullID (CompactSecIDs::sectorID_t compactSecID) const
 returns the FullSecId of
 
const SectorMapConfiggetConfig (void) const
 returns the configuration settings for this VXDTFFilters.
 
void setConfig (const SectorMapConfig &config)
 set the configuration which is used to create this filter
 
const CompactSecIDsgetCompactIDsMap () const
 JKL: intended for some checks only - returns CompactIDsMap storing the static sectors.
 
const std::vector< staticSector_t * > & getStaticSectors () const
 JKL: intended for some checks only - returns CompactIDsMap storing the static sectors.
 
unsigned size () const
 returns number of compact secIDs stored for this filter-container.
 
bool persistOnRootFile (void) const
 Persists (i.e.: writes) on the current TDirectory the whole object.
 
bool retrieveFromRootFile (const TString *dirName)
 Retrieves from the current TDirectory all the VXDTFFilters.
 
bool setSubLayerIDs (FullSecID sector, int sublayer)
 during the trainings phase the sublayer ids have to be updated
 
void lockFilters ()
 This function should be called only AFTER all adjustments to the filters have been performed.
 
void modify2SPFilters (const std::vector< std::tuple< int, std::string > > &adjustFunctions)
 modifies the 2SP-filters according to the functions given
 
void modify3SPFilters (const std::vector< std::tuple< int, std::string > > &adjustFunctions)
 modifies the 3SP-filters according to the functions given
 

Private Member Functions

bool persistSectors (void) const
 Persists all the sectors on the current TDirectory.
 
bool retrieveSectors (const TString *dirName)
 Read the whole CompactSecIDs from the current TDirectory.
 
bool persistFilters (void) const
 Persists on the current TDirectory the StaticSectors.
 
bool retrieveFilters (const TString *dirName)
 Retrieves from the current TDirectory the StaticSectors.
 
int addSectorsOnSensor (const std::vector< double > &normalizedUsup, const std::vector< double > &normalizedVsup, const std::vector< std::vector< unsigned int > > &fullSecIDsBaseType)
 Adds the static sector: TODO: need documentation for the parameters.
 

Private Attributes

CompactSecIDs m_compactSecIDsMap
 This member takes care of converting the [layer][ladder] [sensor][sector] multi index into a linear index on the m_staticSectors vector.
 
std::vector< staticSector_t * > m_staticSectors
 This vector contains all the static sectors on a sector map.
 
SectorMapConfig m_testConfig
 Configuration: i.e.
 
const char * c_CompactSecIDstreeName = "CompactSecIDs"
 name of the tree the SecIDs are stored in when persisted
 
bool m_preventModification = false
 The filters are not supposed to be altered after initialization (typically in the Module::initialize() function).
 

Detailed Description

template<class point_t>
class Belle2::VXDTFFilters< point_t >

Class that contains all the static sectors to which the filters are attached.

It contains functions that are used to attach and retrieve filters. Also the type of the filters is defined in this class

Definition at line 63 of file VXDTFFilters.h.

Member Typedef Documentation

◆ staticSector_t

template<class point_t>
typedef StaticSector< point_t, twoHitFilter_t, threeHitFilter_t, int > staticSector_t

typedef to make a static sector type more readable.

Definition at line 117 of file VXDTFFilters.h.

◆ threeHitFilter_t

template<class point_t>
typedef decltype( ( 0. <= DistanceInTime<point_t>() <= 0. && 0. <= Angle3DSimple<point_t>() <= 0.&& 0. <= CosAngleXY<point_t>() <= 0.&& 0. <= AngleRZSimple<point_t>() <= 0.&& CircleDist2IP<point_t>() <= 0.&& 0. <= DeltaSlopeRZ<point_t>() <= 0.&& 0. <= DeltaSlopeZoverS<point_t>() <= 0.&& 0. <= DeltaSoverZ<point_t>() <= 0.&& 0. <= HelixParameterFit<point_t>() <= 0.&& 0. <= Pt<point_t>() <= 0.&& 0. <= CircleRadius<point_t>() <= 0. ) ) threeHitFilter_t

minimal working example for 3-hits:

big working example for 3-hits:

Definition at line 112 of file VXDTFFilters.h.

◆ twoHitFilter_t

template<class point_t>
typedef decltype( ( 0. <= DistanceInTimeUside<point_t>() <= 0. && 0. <= DistanceInTimeVside<point_t>() <= 0. && 0. <= Distance3DSquared<point_t>() <= 0.&& 0. <= Distance2DXYSquared<point_t>() <= 0.&& 0. <= Distance1DZ<point_t>() <= 0.&& 0. <= SlopeRZ<point_t>() <= 0.&& 0. <= Distance3DNormed<point_t>() <= 0. ) ) twoHitFilter_t

minimal working 2-hits-example used for redesign of VXDTF.

big working 2-hits-example used for redesign of VXDTF.

Definition at line 82 of file VXDTFFilters.h.

Constructor & Destructor Documentation

◆ VXDTFFilters()

template<class point_t>
VXDTFFilters ( )
inline

Construct the container of all the filters used by the VXD Track Finder.

Definition at line 120 of file VXDTFFilters.h.

120 : m_testConfig()
121 {
122 m_staticSectors.resize(2);
123 // The first static sector is not used and will never be since the first
124 // compact id is 1 and compact id = 0 is reserved to signal an error.
125 m_staticSectors[0] = nullptr;
126 // initialize the first slot of the Static sector vector
127 m_staticSectors[1] = nullptr;
128 }

◆ ~VXDTFFilters()

template<class point_t>
~VXDTFFilters ( )
inline

Destructor.

Definition at line 131 of file VXDTFFilters.h.

132 {
133 // delete the static sectors
134 for (staticSector_t* aSector : m_staticSectors) if (aSector != nullptr) delete aSector;
135 }

Member Function Documentation

◆ addSectorsOnSensor() [1/2]

template<class point_t>
int addSectorsOnSensor ( const std::vector< double > & normalizedUsup,
const std::vector< double > & normalizedVsup,
const std::vector< std::vector< FullSecID > > & sectorIds )
inline

To add an array of sectors on a sensor.

Parameters
normalizedUsupand
normalizedVsupare two vectors of double coding the geometry of the sectors.
sectorIdsis a rectangular matrix of FullSecID. It returns the number of sectors added to the compactSecIDsMap

Definition at line 142 of file VXDTFFilters.h.

145 {
146
147 auto addedSectors = m_compactSecIDsMap.addSectors(normalizedUsup,
148 normalizedVsup,
149 sectorIds);
150
151 if ((int) addedSectors != ((int) normalizedVsup.size() + 1) *
152 ((int) normalizedUsup.size() + 1))
153 return addedSectors ;
154
155 addedSectors = 0;
156 try {
157 for (const auto& secIDrow : sectorIds)
158 for (auto secID : secIDrow) {
159 auto compactID = m_compactSecIDsMap.getCompactID(secID);
160
161 if ((int) m_staticSectors.size() <= compactID)
162 m_staticSectors.resize(compactID + 1);
163
164 m_staticSectors[ compactID ] = new staticSector_t(secID) ;
165 m_staticSectors[ compactID ]->assignCompactSecIDsMap(m_compactSecIDsMap);
166
167 addedSectors ++;
168 }
169 } catch (...) { return addedSectors ; }
170
171 return addedSectors;
172 }

◆ addSectorsOnSensor() [2/2]

template<class point_t>
int addSectorsOnSensor ( const std::vector< double > & normalizedUsup,
const std::vector< double > & normalizedVsup,
const std::vector< std::vector< unsigned int > > & fullSecIDsBaseType )
inlineprivate

Adds the static sector: TODO: need documentation for the parameters.

Definition at line 603 of file VXDTFFilters.h.

607 {
608 std::vector< std::vector< FullSecID >> fullSecIDs;
609
610 for (const auto& col : fullSecIDsBaseType) {
611 std::vector< FullSecID > tmp_col;
612 for (auto id : col)
613 tmp_col.push_back(FullSecID(id));
614 fullSecIDs.push_back(tmp_col);
615 }
616
617 return addSectorsOnSensor(normalizedUsup, normalizedVsup, fullSecIDs);
618 }

◆ addThreeHitFilter()

template<class point_t>
int addThreeHitFilter ( FullSecID outer,
FullSecID center,
FullSecID inner,
const threeHitFilter_t & filter )
inline

adds a three hit filter

Definition at line 189 of file VXDTFFilters.h.

193 {
194
195 if (m_staticSectors.size() <= m_compactSecIDsMap[ outer ] ||
196 m_compactSecIDsMap[ outer ] == 0 ||
197 m_compactSecIDsMap[ center ] == 0 ||
198 m_compactSecIDsMap[ inner ] == 0)
199 return 0;
200
201 m_staticSectors[m_compactSecIDsMap[outer]]->assign3spFilter(center,
202 inner,
203 filter);
204 return 1;
205 }

◆ addTwoHitFilter()

template<class point_t>
int addTwoHitFilter ( FullSecID outer,
FullSecID inner,
const twoHitFilter_t & filter )
inline

adds a two hit filter

Definition at line 175 of file VXDTFFilters.h.

178 {
179 if (m_staticSectors.size() <= m_compactSecIDsMap[ outer ] ||
180 m_compactSecIDsMap[ outer ] == 0)
181 return 0;
182
183 m_staticSectors[m_compactSecIDsMap[outer]]->assign2spFilter(inner, filter);
184 return 1;
185 }

◆ areCoordinatesValid()

template<class point_t>
bool areCoordinatesValid ( VxdID aSensorID,
double normalizedU,
double normalizedV ) const
inline

check if using getFullID() would be safe (true if it is safe):

Definition at line 248 of file VXDTFFilters.h.

250 {
251 return m_compactSecIDsMap.areCoordinatesValid(aSensorID,
252 normalizedU, normalizedV);
253 }

◆ getCompactID()

template<class point_t>
CompactSecIDs::sectorID_t getCompactID ( FullSecID outer) const
inline

returns compactSecID for given FullSecID, == 0 if not found.

Definition at line 209 of file VXDTFFilters.h.

210 { return m_compactSecIDsMap[outer]; }

◆ getCompactIDsMap()

template<class point_t>
const CompactSecIDs & getCompactIDsMap ( ) const
inline

JKL: intended for some checks only - returns CompactIDsMap storing the static sectors.

Definition at line 282 of file VXDTFFilters.h.

282{ return m_compactSecIDsMap; }

◆ getConfig()

template<class point_t>
const SectorMapConfig & getConfig ( void ) const
inline

returns the configuration settings for this VXDTFFilters.

Definition at line 274 of file VXDTFFilters.h.

274{ return m_testConfig; }

◆ getFullID() [1/2]

template<class point_t>
FullSecID getFullID ( CompactSecIDs::sectorID_t compactSecID) const
inline

returns the FullSecId of

Parameters
compactSecID

Definition at line 268 of file VXDTFFilters.h.

269 {
270 return m_staticSectors.at(compactSecID)->getFullSecID();
271 }

◆ getFullID() [2/2]

template<class point_t>
FullSecID getFullID ( VxdID aSensorID,
double normalizedU,
double normalizedV ) const
inline

returns fullSecID for given sensorID and local coordinates.

Definition at line 259 of file VXDTFFilters.h.

260 {
261 // TODO WARNING how to catch bad cases?
262 return m_compactSecIDsMap.getFullSecID(aSensorID, normalizedU, normalizedV);
263 }

◆ getStaticSector()

template<class point_t>
const staticSector_t * getStaticSector ( const FullSecID secID) const
inline

returns pointer to static sector for given fullSecID.

if fullSecID is not found, a nullptr is returned.

Parameters
secIDFullSecID of the filter to be retrieved

Definition at line 220 of file VXDTFFilters.h.

221 {
222 auto sectorPosition = m_compactSecIDsMap[ secID ];
223 if (sectorPosition == 0) return nullptr;
224 return m_staticSectors[ sectorPosition ];
225 }

◆ getStaticSectors()

template<class point_t>
const std::vector< staticSector_t * > & getStaticSectors ( ) const
inline

JKL: intended for some checks only - returns CompactIDsMap storing the static sectors.

Definition at line 286 of file VXDTFFilters.h.

286{ return m_staticSectors; }

◆ getTwoHitFilters()

template<class point_t>
const twoHitFilter_t getTwoHitFilters ( const FullSecID & outer,
const FullSecID & inner ) const
inline

retrieves a two hit filter:

Parameters
outerFullSecID of the outer static sector this filter is attached to
innerFullSecID of the inner static sector this filter is attached to

Definition at line 231 of file VXDTFFilters.h.

233 {
234 // TODO: sanity checks
235 static twoHitFilter_t just_in_case;
236 const auto* staticSector = m_staticSectors[ m_compactSecIDsMap[ outer ] ];
237 // catch case when sector is not part of the sectorMap:
238 if (staticSector == nullptr)
239 return just_in_case;
240 const auto* filterPtr = staticSector->getFilter2sp(inner);
241 if (filterPtr == nullptr)
242 return just_in_case;
243 return *filterPtr;
244 }

◆ lockFilters()

template<class point_t>
void lockFilters ( )
inline

This function should be called only AFTER all adjustments to the filters have been performed.

It sets m_preventModification to true and the VXDTFFilter is locked meaning that all function trying to modify it will be doing nothing. After a filter is locked it can NOT be unlocked.

Definition at line 354 of file VXDTFFilters.h.

354{ m_preventModification = true; };

◆ modify2SPFilters()

template<class point_t>
void modify2SPFilters ( const std::vector< std::tuple< int, std::string > > & adjustFunctions)
inline

modifies the 2SP-filters according to the functions given

Parameters
adjustFunctionsa vector of vectors that contain exactly two strings, the first string will be interpreted integer, the second one will be interpreted TF1 regexp.

Definition at line 359 of file VXDTFFilters.h.

360 {
361
362 // locked filters cannot be modified
363 if (m_preventModification) {
364 B2FATAL("Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
365 }
366
367 for (auto staticSector : m_staticSectors) {
368 if (staticSector == nullptr) continue;
369 staticSector->modify2SPFilters(adjustFunctions);
370 }
371 };

◆ modify3SPFilters()

template<class point_t>
void modify3SPFilters ( const std::vector< std::tuple< int, std::string > > & adjustFunctions)
inline

modifies the 3SP-filters according to the functions given

Parameters
adjustFunctionsa vector of vectors that contain exactly two strings, the first string will be interpreted integer, the second one will be interpreted as regexp to generate a TF1.

Definition at line 376 of file VXDTFFilters.h.

377 {
378
379 // locked filters cannot be modified
380 if (m_preventModification) {
381 B2FATAL("Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
382 }
383
384 for (auto staticSector : m_staticSectors) {
385 if (staticSector == nullptr) continue;
386 staticSector->modify3SPFilters(adjustFunctions);
387 }
388 };

◆ persistFilters()

template<class point_t>
bool persistFilters ( void ) const
inlineprivate

Persists on the current TDirectory the StaticSectors.

Definition at line 470 of file VXDTFFilters.h.

471 {
472
473 TTree* sp2tree = new TTree("SegmentFilters", "SegmentFilters");
474 twoHitFilter_t twoHitFilter;
475 twoHitFilter.persist(sp2tree, "filter");
476
477 unsigned int outerFullSecID2sp, innerFullSecID2sp;
478 sp2tree->Branch("outerFullSecID", & outerFullSecID2sp);
479 sp2tree->Branch("innerFullSecID", & innerFullSecID2sp);
480
481
482 TTree* sp3tree = new TTree("TripletsFilters", "TripletFilters");
483 threeHitFilter_t threeHitFilter;
484 threeHitFilter.persist(sp3tree, "filter");
485
486 unsigned int outerFullSecID3sp, centerFullSecID3sp,
487 innerFullSecID3sp;
488 sp3tree->Branch("outerFullSecID", & outerFullSecID3sp);
489 sp3tree->Branch("centerFullSecID", & centerFullSecID3sp);
490 sp3tree->Branch("innerFullSecID", & innerFullSecID3sp);
491
492 for (const auto* staticSector : m_staticSectors) {
493 if (staticSector == nullptr)
494 // Why there is an empty sector per layer?
495 continue;
496
497
498 outerFullSecID3sp = outerFullSecID2sp = staticSector->getFullSecID();
499 auto segmentFilters = staticSector->getAllFilters2sp();
500 for (auto compactIdFilterPair : segmentFilters) {
501 auto innerCompactId = compactIdFilterPair.first;
502 innerFullSecID2sp = getFullID(innerCompactId);
503 twoHitFilter = compactIdFilterPair.second;
504 sp2tree->Fill();
505 }
506
507 auto tripletFilters = staticSector->getAllFilters3sp();
508 for (auto compactIdFilterPair : tripletFilters) {
509 CompactSecIDs::sectorID_t id_center, id_inner;
510 CompactSecIDs::extractCompactID(compactIdFilterPair.first, id_center, id_inner);
511 centerFullSecID3sp = getFullID(id_center);
512 innerFullSecID3sp = getFullID(id_inner);
513 threeHitFilter = compactIdFilterPair.second;
514 sp3tree->Fill();
515 }
516
517
518 }
519
520 return true;
521 }

◆ persistOnRootFile()

template<class point_t>
bool persistOnRootFile ( void ) const
inline

Persists (i.e.: writes) on the current TDirectory the whole object.

Definition at line 292 of file VXDTFFilters.h.

293 {
294
295 if (! m_testConfig.Write("config"))
296 return false;
297 // cppcheck-suppress knownConditionTrueFalse ; the persist/retrieve helpers currently always succeed, the check guards future implementations
298 if (! persistSectors())
299 return false;
300
301 // cppcheck-suppress knownConditionTrueFalse ; the persist/retrieve helpers currently always succeed, the check guards future implementations
302 if (! persistFilters())
303 return false;
304
305 return true;
306 };

◆ persistSectors()

template<class point_t>
bool persistSectors ( void ) const
inlineprivate

Persists all the sectors on the current TDirectory.

Definition at line 393 of file VXDTFFilters.h.

394 {
395 TTree* tree = new TTree(c_CompactSecIDstreeName, c_CompactSecIDstreeName);
396 UInt_t layer, ladder, sensor;
397 tree->Branch("layer", & layer, "layer/i");
398 tree->Branch("ladder", & ladder, "ladder/i");
399 tree->Branch("sensor", & sensor, "sensor/i");
400
401 std::vector< double >* normalizedUsup = new std::vector< double> ();
402 tree->Branch("normalizedUsup", & normalizedUsup);
403
404 std::vector< double >* normalizedVsup = new std::vector< double> ({1., 2., 3., 4.});
405 tree->Branch("normalizedVsup", & normalizedVsup);
406
407 std::vector< std::vector< unsigned int > >* fullSecIDs =
408 new std::vector< std::vector< unsigned int > > ();
409 tree->Branch("fullSecID", & fullSecIDs);
410
411 unsigned nOfLayers = m_compactSecIDsMap.nOfLayers();
412 for (layer = 0 ; layer < nOfLayers ; layer ++) {
413 unsigned nOfLadders = m_compactSecIDsMap.nOfLadders(layer);
414 for (ladder = 0; ladder < nOfLadders ; ladder ++) {
415 unsigned nOfSensors = m_compactSecIDsMap.nOfSensors(layer, ladder);
416 for (sensor = 0; sensor < nOfSensors ; sensor ++) {
417 normalizedUsup->clear();
418 normalizedVsup->clear();
419 fullSecIDs->clear();
420 auto sectorsOnSensor =
421 m_compactSecIDsMap.getSectorsOnSensor(layer, ladder, sensor);
422 sectorsOnSensor.get(normalizedUsup, normalizedVsup, fullSecIDs);
423 tree->Fill();
424 }
425 }
426 }
427 delete normalizedVsup;
428 delete normalizedUsup;
429 delete fullSecIDs;
430 return true;
431 }

◆ retrieveFilters()

template<class point_t>
bool retrieveFilters ( const TString * dirName)
inlineprivate

Retrieves from the current TDirectory the StaticSectors.

Definition at line 524 of file VXDTFFilters.h.

525 {
526 TString sp2treeName = *dirName;
527 sp2treeName.Append("/SegmentFilters");
528 TTree* sp2tree = dynamic_cast<TTree*>(gFile->Get(sp2treeName));
529 if (!sp2tree)
530 return false;
531
532 twoHitFilter_t twoHitFilter;
533 twoHitFilter.setBranchAddress(sp2tree, "filter");
534
535 unsigned int outerFullSecID2sp, innerFullSecID2sp;
536 if (sp2tree->SetBranchAddress("outerFullSecID", & outerFullSecID2sp) < 0) B2FATAL("VXDTFFilters: invalid branch address");
537 if (sp2tree->SetBranchAddress("innerFullSecID", & innerFullSecID2sp) < 0) B2FATAL("VXDTFFilters: invalid branch address");
538
539 for (Long64_t i = 0 ; i < sp2tree->GetEntries() ; i++) {
540 sp2tree->GetEntry(i);
541
542 // cross check to only put filters into the map which outer sector is also on outer layer!
543 FullSecID outer_secid_2sp(outerFullSecID2sp);
544 FullSecID inner_secid_2sp(innerFullSecID2sp);
545 // equal layer numbers are allowed!
546 if (outer_secid_2sp.getLayerNumber() < inner_secid_2sp.getLayerNumber()) {
547 B2WARNING("Outer sector is not on outer layer! Not adding this filter. \"Outer\" layer number: "
548 << outer_secid_2sp.getLayerNumber() << " \"Inner\" layer number " << inner_secid_2sp.getLayerNumber());
549 continue;
550 }
551
552 // add filter to the map
553 if (!addTwoHitFilter(outer_secid_2sp, inner_secid_2sp,
554 twoHitFilter))
555 return false;
556
557 }
558
559 TString sp3treeName = *dirName;
560 sp3treeName.Append("/TripletsFilters");
561 TTree* sp3tree = dynamic_cast<TTree*>(gFile->Get(sp3treeName));
562 if (! sp3tree)
563 return false;
564 threeHitFilter_t threeHitFilter;
565 threeHitFilter.setBranchAddress(sp3tree, "filter");
566
567 unsigned int outerFullSecID3sp, centerFullSecID3sp,
568 innerFullSecID3sp;
569 if (sp3tree->SetBranchAddress("outerFullSecID", & outerFullSecID3sp) < 0) B2FATAL("VXDTFFilters: invalid branch address");
570 if (sp3tree->SetBranchAddress("centerFullSecID", & centerFullSecID3sp) < 0) B2FATAL("VXDTFFilters: invalid branch address");
571 if (sp3tree->SetBranchAddress("innerFullSecID", & innerFullSecID3sp) < 0) B2FATAL("VXDTFFilters: invalid branch address");
572
573 for (Long64_t i = 0 ; i < sp3tree->GetEntries() ; i++) {
574 sp3tree->GetEntry(i);
575
576 // cross check to only put filters which layers have correct order
577 FullSecID outer_secid_3sp(outerFullSecID3sp);
578 FullSecID center_secid_3sp(centerFullSecID3sp);
579 FullSecID inner_secid_3sp(innerFullSecID3sp);
580 // equal layer numbers are allowed
581 if (outer_secid_3sp.getLayerNumber() < center_secid_3sp.getLayerNumber() or
582 center_secid_3sp.getLayerNumber() < inner_secid_3sp.getLayerNumber()) {
583 B2WARNING("Layers not in the correct order for Triplet filter! Will not add filter! Outer layer number: " <<
584 outer_secid_3sp.getLayerNumber() << " center layer number: " << center_secid_3sp.getLayerNumber() <<
585 " inner layer number: " << inner_secid_3sp.getLayerNumber());
586 continue;
587 }
588
589 // add the filter to the map
590 if (!addThreeHitFilter(outer_secid_3sp, center_secid_3sp,
591 inner_secid_3sp,
592 threeHitFilter))
593 return false;
594
595 }
596
597 return true;
598 }

◆ retrieveFromRootFile()

template<class point_t>
bool retrieveFromRootFile ( const TString * dirName)
inline

Retrieves from the current TDirectory all the VXDTFFilters.

Definition at line 309 of file VXDTFFilters.h.

310 {
311 // locked filters cannot be modified
312 if (m_preventModification) {
313 B2FATAL("Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
314 }
315
316 if (! m_testConfig.Read("config"))
317 return false;
318
319 // cppcheck-suppress knownConditionTrueFalse ; the persist/retrieve helpers currently always succeed, the check guards future implementations
320 if (! retrieveSectors(dirName))
321 return false;
322
323 if (! retrieveFilters(dirName))
324 return false;
325
326 return true;
327 };

◆ retrieveSectors()

template<class point_t>
bool retrieveSectors ( const TString * dirName)
inlineprivate

Read the whole CompactSecIDs from the current TDirectory.

Definition at line 434 of file VXDTFFilters.h.

435 {
436 TString treeName = *dirName;
437 treeName.Append("/");
438 treeName.Append(c_CompactSecIDstreeName);
439 TTree* tree = dynamic_cast<TTree*>(gFile->Get(treeName));
440 UInt_t layer, ladder, sensor;
441 if (tree->SetBranchAddress("layer", & layer) < 0) B2FATAL("VXDTFFilters: invalid branch address");
442 if (tree->SetBranchAddress("ladder", & ladder) < 0) B2FATAL("VXDTFFilters: invalid branch address");
443 if (tree->SetBranchAddress("sensor", & sensor) < 0) B2FATAL("VXDTFFilters: invalid branch address");
444
445 std::vector< double >* normalizedUsup = new std::vector< double> ();
446 if (tree->SetBranchAddress("normalizedUsup", & normalizedUsup) < 0) B2FATAL("VXDTFFilters: invalid branch address");
447
448 std::vector< double >* normalizedVsup = new std::vector< double> ({1., 2., 3., 4.});
449 if (tree->SetBranchAddress("normalizedVsup", & normalizedVsup) < 0) B2FATAL("VXDTFFilters: invalid branch address");
450
451 std::vector< std::vector< unsigned int > >* fullSecIDs =
452 new std::vector< std::vector< unsigned int > > ();
453 if (tree->SetBranchAddress("fullSecID", & fullSecIDs) < 0) B2FATAL("VXDTFFilters: invalid branch address");
454
455
456 for (Long64_t i = 0; i < tree->GetEntries() ; i++) {
457 tree->GetEntry(i);
458 this->addSectorsOnSensor(* normalizedUsup,
459 * normalizedVsup,
460 * fullSecIDs);
461 }
462
463 delete normalizedVsup;
464 delete normalizedUsup;
465 delete fullSecIDs;
466 return true;
467 }

◆ setConfig()

template<class point_t>
void setConfig ( const SectorMapConfig & config)
inline

set the configuration which is used to create this filter

Parameters
configthe new configuration

Definition at line 278 of file VXDTFFilters.h.

278{ m_testConfig = config; }

◆ setSubLayerIDs()

template<class point_t>
bool setSubLayerIDs ( FullSecID sector,
int sublayer )
inline

during the trainings phase the sublayer ids have to be updated

Parameters
sector: FullSecID of the sector to be updated (SubLayerID of sector will be ignored while searching for it!)
sublayer: new value for the sublayer, the new SubLayerID will be 0 if sublayer==0, and 1 else

Definition at line 332 of file VXDTFFilters.h.

333 {
334 // locked filters cannot be modified
335 if (m_preventModification) {
336 B2FATAL("Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
337 }
338
339 // first update the static sector
340 // the static sector is retrieved from the compactid which automatically ignores the sublayer id
341 auto sectorPosition = m_compactSecIDsMap[ sector ];
342 if (sectorPosition == 0) return false;
343 staticSector_t* staticsector = m_staticSectors[ sectorPosition ];
344 if (!staticsector) return false;
345 staticsector->setSubLayerID(sublayer);
346
347 // then update the fullsectorid in the compactsectoridmap, the sublayerid of sector will be ignored when searching for sector to update
348 return m_compactSecIDsMap.setSubLayerID(sector, sublayer);
349 }

◆ size()

template<class point_t>
unsigned size ( ) const
inline

returns number of compact secIDs stored for this filter-container.

Definition at line 289 of file VXDTFFilters.h.

289{ return m_compactSecIDsMap.getSize(); }

Member Data Documentation

◆ c_CompactSecIDstreeName

template<class point_t>
const char* c_CompactSecIDstreeName = "CompactSecIDs"
private

name of the tree the SecIDs are stored in when persisted

Definition at line 637 of file VXDTFFilters.h.

◆ m_compactSecIDsMap

template<class point_t>
CompactSecIDs m_compactSecIDsMap
private

This member takes care of converting the [layer][ladder] [sensor][sector] multi index into a linear index on the m_staticSectors vector.

Definition at line 625 of file VXDTFFilters.h.

◆ m_preventModification

template<class point_t>
bool m_preventModification = false
private

The filters are not supposed to be altered after initialization (typically in the Module::initialize() function).

To prevent accidental alteration of the contained filters one can set this parameter to true which will not allow further modification of the stored filters. A check of this variable should be included in every public function that modifies filters!

Definition at line 643 of file VXDTFFilters.h.

◆ m_staticSectors

template<class point_t>
std::vector< staticSector_t* > m_staticSectors
private

This vector contains all the static sectors on a sector map.

The index is the compact ID provided by the CompactSecIDs

Definition at line 630 of file VXDTFFilters.h.

◆ m_testConfig

template<class point_t>
SectorMapConfig m_testConfig
private

Configuration: i.e.

name of the sector map, tuning parameters, etc.

Definition at line 634 of file VXDTFFilters.h.


The documentation for this class was generated from the following file: