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

typedef to make a static sector type more readable.

Definition at line 117 of file VXDTFFilters.h.

◆ threeHitFilter_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

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()

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 }
SectorMapConfig m_testConfig
Configuration: i.e.
Definition: VXDTFFilters.h:631
std::vector< staticSector_t * > m_staticSectors
This vector contains all the static sectors on a sector map.
Definition: VXDTFFilters.h:627

◆ ~VXDTFFilters()

~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 }
StaticSector< point_t, twoHitFilter_t, threeHitFilter_t, int > staticSector_t
typedef to make a static sector type more readable.
Definition: VXDTFFilters.h:117

Member Function Documentation

◆ addSectorsOnSensor() [1/2]

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 (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 }
sectorID_t getCompactID(const FullSecID &fullID) const
Returns the compact id of the FullSecID It does not throw exceptions (at least it should not).
int addSectors(const std::vector< double > &normalizedUsup, const std::vector< double > &normalizedVsup, const std::vector< std::vector< FullSecID > > &fullSecIDs)
This method defines all the sectors on a given sensor.
Definition: CompactSecIDs.h:69
CompactSecIDs m_compactSecIDsMap
This member takes care of converting the [layer][ladder] [sensor][sector] multi index into a linear i...
Definition: VXDTFFilters.h:622

◆ addSectorsOnSensor() [2/2]

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 600 of file VXDTFFilters.h.

604 {
605 std::vector< std::vector< FullSecID >> fullSecIDs;
606
607 for (auto col : fullSecIDsBaseType) {
608 std::vector< FullSecID > tmp_col;
609 for (auto id : col)
610 tmp_col.push_back(FullSecID(id));
611 fullSecIDs.push_back(tmp_col);
612 }
613
614 return addSectorsOnSensor(normalizedUsup, normalizedVsup, fullSecIDs);
615 }
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.
Definition: VXDTFFilters.h:142

◆ addThreeHitFilter()

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 }
std::map< ExpRun, std::pair< double, double > > filter(const std::map< ExpRun, std::pair< double, double > > &runs, double cut, std::map< ExpRun, std::pair< double, double > > &runsRemoved)
filter events to remove runs shorter than cut, it stores removed runs in runsRemoved
Definition: Splitter.cc:38

◆ addTwoHitFilter()

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()

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 {
252 normalizedU, normalizedV);
253 }
bool areCoordinatesValid(VxdID aSensorID, double normalizedU, double normalizedV) const
JKL: returns true if operator() will not throw an exception.

◆ getCompactID()

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()

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()

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]

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]

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 }
FullSecID getFullSecID(VxdID aSensorID, double normalizedU, double normalizedV) const
Returns a fullSecID for given sensor and pair of coordinates.

◆ getStaticSector()

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()

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()

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 }
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.
Definition: VXDTFFilters.h:82

◆ lockFilters()

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 351 of file VXDTFFilters.h.

351{ m_preventModification = true; };
bool m_preventModification
The filters are not supposed to be altered after initialization (typically in the Module::initialize(...
Definition: VXDTFFilters.h:640

◆ modify2SPFilters()

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 356 of file VXDTFFilters.h.

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

◆ modify3SPFilters()

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 373 of file VXDTFFilters.h.

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

◆ persistFilters()

bool persistFilters ( void  ) const
inlineprivate

Persists on the current TDirectory the StaticSectors.

Definition at line 467 of file VXDTFFilters.h.

468 {
469
470 TTree* sp2tree = new TTree("SegmentFilters", "SegmentFilters");
471 twoHitFilter_t twoHitFilter;
472 twoHitFilter.persist(sp2tree, "filter");
473
474 unsigned int outerFullSecID2sp, innerFullSecID2sp;
475 sp2tree->Branch("outerFullSecID", & outerFullSecID2sp);
476 sp2tree->Branch("innerFullSecID", & innerFullSecID2sp);
477
478
479 TTree* sp3tree = new TTree("TripletsFilters", "TripletFilters");
480 threeHitFilter_t threeHitFilter;
481 threeHitFilter.persist(sp3tree, "filter");
482
483 unsigned int outerFullSecID3sp, centerFullSecID3sp,
484 innerFullSecID3sp;
485 sp3tree->Branch("outerFullSecID", & outerFullSecID3sp);
486 sp3tree->Branch("centerFullSecID", & centerFullSecID3sp);
487 sp3tree->Branch("innerFullSecID", & innerFullSecID3sp);
488
489 for (auto staticSector : m_staticSectors) {
490 if (staticSector == nullptr)
491 // Why there is an empty sector per layer?
492 continue;
493
494
495 outerFullSecID3sp = outerFullSecID2sp = staticSector->getFullSecID();
496 auto segmentFilters = staticSector->getAllFilters2sp();
497 for (auto compactIdFilterPair : segmentFilters) {
498 auto innerCompactId = compactIdFilterPair.first;
499 innerFullSecID2sp = getFullID(innerCompactId);
500 twoHitFilter = compactIdFilterPair.second;
501 sp2tree->Fill();
502 }
503
504 auto tripletFilters = staticSector->getAllFilters3sp();
505 for (auto compactIdFilterPair : tripletFilters) {
506 CompactSecIDs::sectorID_t id_center, id_inner;
507 CompactSecIDs::extractCompactID(compactIdFilterPair.first, id_center, id_inner);
508 centerFullSecID3sp = getFullID(id_center);
509 innerFullSecID3sp = getFullID(id_inner);
510 threeHitFilter = compactIdFilterPair.second;
511 sp3tree->Fill();
512 }
513
514
515 }
516
517 return true;
518 }
uint16_t sectorID_t
Typedef of the compact Id for a single sector.
Definition: CompactSecIDs.h:35
static void extractCompactID(secPairID_t pair_id, sectorID_t &id1, sectorID_t &id2)
Uses the values coded by the Sector Pair ID pair_id and sets the two compact Sector ids id1 and id2.
FullSecID getFullID(VxdID aSensorID, double normalizedU, double normalizedV) const
returns fullSecID for given sensorID and local coordinates.
Definition: VXDTFFilters.h:259
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:
Definition: VXDTFFilters.h:112

◆ persistOnRootFile()

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 if (! persistSectors())
298 return false;
299
300 if (! persistFilters())
301 return false;
302
303 return true;
304 };
bool persistSectors(void) const
Persists all the sectors on the current TDirectory.
Definition: VXDTFFilters.h:390
bool persistFilters(void) const
Persists on the current TDirectory the StaticSectors.
Definition: VXDTFFilters.h:467

◆ persistSectors()

bool persistSectors ( void  ) const
inlineprivate

Persists all the sectors on the current TDirectory.

Definition at line 390 of file VXDTFFilters.h.

391 {
392 TTree* tree = new TTree(c_CompactSecIDstreeName, c_CompactSecIDstreeName);
393 UInt_t layer, ladder, sensor;
394 tree->Branch("layer", & layer, "layer/i");
395 tree->Branch("ladder", & ladder, "ladder/i");
396 tree->Branch("sensor", & sensor, "sensor/i");
397
398 std::vector< double >* normalizedUsup = new std::vector< double> ();
399 tree->Branch("normalizedUsup", & normalizedUsup);
400
401 std::vector< double >* normalizedVsup = new std::vector< double> ({1., 2., 3., 4.});
402 tree->Branch("normalizedVsup", & normalizedVsup);
403
404 std::vector< std::vector< unsigned int > >* fullSecIDs =
405 new std::vector< std::vector< unsigned int > > ();
406 tree->Branch("fullSecID", & fullSecIDs);
407
408 unsigned nOfLayers = m_compactSecIDsMap.nOfLayers();
409 for (layer = 0 ; layer < nOfLayers ; layer ++) {
410 unsigned nOfLadders = m_compactSecIDsMap.nOfLadders(layer);
411 for (ladder = 0; ladder < nOfLadders ; ladder ++) {
412 unsigned nOfSensors = m_compactSecIDsMap.nOfSensors(layer, ladder);
413 for (sensor = 0; sensor < nOfSensors ; sensor ++) {
414 normalizedUsup->clear();
415 normalizedVsup->clear();
416 fullSecIDs->clear();
417 auto sectorsOnSensor =
418 m_compactSecIDsMap.getSectorsOnSensor(layer, ladder, sensor);
419 sectorsOnSensor.get(normalizedUsup, normalizedVsup, fullSecIDs);
420 tree->Fill();
421 }
422 }
423 }
424 delete normalizedVsup;
425 delete normalizedUsup;
426 delete fullSecIDs;
427 return true;
428 }
int nOfSensors(int layer, int ladder) const
get the number of sensors on
int nOfLadders(int layer) const
get the number of ladders on
int nOfLayers(void) const
get the number of layers in this CompactSecIDs
SectorsOnSensor< sectorID_t > getSectorsOnSensor(unsigned layer, unsigned ladder, unsigned sensor) const
Getter for IDs of all sectors on a sensor.
const char * c_CompactSecIDstreeName
name of the tree the SecIDs are stored in when persisted
Definition: VXDTFFilters.h:634

◆ retrieveFilters()

bool retrieveFilters ( const TString *  dirName)
inlineprivate

Retrieves from the current TDirectory the StaticSectors.

Definition at line 521 of file VXDTFFilters.h.

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

◆ retrieveFromRootFile()

bool retrieveFromRootFile ( const TString *  dirName)
inline

Retrieves from the current TDirectory all the VXDTFFilters.

Definition at line 307 of file VXDTFFilters.h.

308 {
309 // locked filters cannot be modified
311 B2FATAL("Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
312 }
313
314 if (! m_testConfig.Read("config"))
315 return false;
316
317 if (! retrieveSectors(dirName))
318 return false;
319
320 if (! retrieveFilters(dirName))
321 return false;
322
323 return true;
324 };
bool retrieveSectors(const TString *dirName)
Read the whole CompactSecIDs from the current TDirectory.
Definition: VXDTFFilters.h:431
bool retrieveFilters(const TString *dirName)
Retrieves from the current TDirectory the StaticSectors.
Definition: VXDTFFilters.h:521

◆ retrieveSectors()

bool retrieveSectors ( const TString *  dirName)
inlineprivate

Read the whole CompactSecIDs from the current TDirectory.

Definition at line 431 of file VXDTFFilters.h.

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

◆ setConfig()

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()

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 329 of file VXDTFFilters.h.

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

◆ size()

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(); }
int getSize() const
Returns the number of sectors defined so far.
Definition: CompactSecIDs.h:53

Member Data Documentation

◆ c_CompactSecIDstreeName

const char* c_CompactSecIDstreeName = "CompactSecIDs"
private

name of the tree the SecIDs are stored in when persisted

Definition at line 634 of file VXDTFFilters.h.

◆ m_compactSecIDsMap

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 622 of file VXDTFFilters.h.

◆ m_preventModification

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 640 of file VXDTFFilters.h.

◆ m_staticSectors

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 627 of file VXDTFFilters.h.

◆ m_testConfig

SectorMapConfig m_testConfig
private

Configuration: i.e.

name of the sector map, tuning parameters, etc.

Definition at line 631 of file VXDTFFilters.h.


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