11 #ifndef VXDTFFILTERS_HH
12 #define VXDTFFILTERS_HH
14 #include <tracking/dataobjects/FullSecID.h>
16 #include <tracking/spacePointCreation/SpacePoint.h>
18 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/Distance1DZ.h>
19 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/Distance3DNormed.h>
20 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/DistanceInTimeUside.h>
21 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/DistanceInTimeVside.h>
22 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/SlopeRZ.h>
23 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/Distance1DZSquared.h>
24 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/Distance2DXYSquared.h>
25 #include <tracking/trackFindingVXD/filterMap/twoHitVariables/Distance3DSquared.h>
27 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/DistanceInTime.h>
28 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/Angle3DSimple.h>
29 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/CosAngleXY.h>
30 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/AngleRZSimple.h>
31 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/CircleDist2IP.h>
32 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/DeltaSlopeRZ.h>
33 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/DeltaSlopeZoverS.h>
34 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/DeltaSoverZ.h>
35 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/HelixParameterFit.h>
36 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/Pt.h>
37 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/CircleRadius.h>
39 #include <tracking/trackFindingVXD/filterMap/filterFramework/Shortcuts.h>
40 #include <tracking/trackFindingVXD/filterTools/ObserverPrintResults.h>
41 #include <tracking/trackFindingVXD/filterMap/filterFramework/VoidObserver.h>
43 #include <tracking/dataobjects/SectorMapConfig.h>
45 #include <framework/logging/Logger.h>
47 #include <vxd/dataobjects/VxdID.h>
48 #include <tracking/trackFindingVXD/filterMap/map/CompactSecIDs.h>
49 #include <tracking/trackFindingVXD/segmentNetwork/StaticSector.h>
65 template<
class po
int_t>
66 class VXDTFFilters final {
77 0. <= DistanceInTimeUside<point_t>() <= 0. &&
78 0. <= DistanceInTimeVside<point_t>() <= 0. &&
79 0. <= Distance3DSquared<point_t>() <= 0.&&
80 0. <= Distance2DXYSquared<point_t>() <= 0.&&
81 0. <= Distance1DZ<point_t>() <= 0.&&
82 0. <= SlopeRZ<point_t>() <= 0.&&
83 0. <= Distance3DNormed<point_t>() <= 0.
103 0. <= DistanceInTime<point_t>() <= 0. &&
104 0. <= Angle3DSimple<point_t>() <= 0.&&
105 0. <= CosAngleXY<point_t>() <= 0.&&
106 0. <= AngleRZSimple<point_t>() <= 0.&&
107 CircleDist2IP<point_t>() <= 0.&&
108 0. <= DeltaSlopeRZ<point_t>() <= 0.&&
109 0. <= DeltaSlopeZoverS<point_t>() <= 0.&&
110 0. <= DeltaSoverZ<point_t>() <= 0.&&
111 0. <= HelixParameterFit<point_t>() <= 0.&&
112 0. <= Pt<point_t>() <= 0.&&
113 0. <= CircleRadius<point_t>() <= 0.
146 const std::vector<double>& normalizedVsup,
147 const std::vector< std::vector<FullSecID> >& sectorIds)
154 if ((
int) addedSectors != ((
int) normalizedVsup.size() + 1) *
155 ((
int) normalizedUsup.size() + 1))
156 return addedSectors ;
160 for (
auto secIDrow : sectorIds)
161 for (
auto secID : secIDrow) {
172 }
catch (...) {
return addedSectors ; }
226 if (sectorPosition == 0)
return nullptr;
235 const FullSecID& inner)
const
241 if (staticSector ==
nullptr)
243 const auto* filterPtr = staticSector->getFilter2sp(inner);
244 if (filterPtr ==
nullptr)
252 double normalizedU,
double normalizedV)
const
255 normalizedU, normalizedV);
312 B2FATAL(
"Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
334 B2FATAL(
"Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
340 if (sectorPosition == 0)
return false;
342 if (!staticsector)
return false;
357 void modify2SPFilters(
const std::vector< std::tuple<int, std::string > >& adjustFunctions)
362 B2FATAL(
"Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
366 if (staticSector ==
nullptr)
continue;
367 staticSector->modify2SPFilters(adjustFunctions);
374 void modify3SPFilters(
const std::vector< std::tuple<int, std::string > >& adjustFunctions)
379 B2FATAL(
"Trying to modify a locked filter! A locked filter is not supposed to be changed anymore!");
383 if (staticSector ==
nullptr)
continue;
384 staticSector->modify3SPFilters(adjustFunctions);
394 UInt_t layer, ladder, sensor;
395 tree->Branch(
"layer" , & layer ,
"layer/i");
396 tree->Branch(
"ladder", & ladder,
"ladder/i");
397 tree->Branch(
"sensor", & sensor,
"sensor/i");
399 std::vector< double >* normalizedUsup =
new std::vector< double> ();
400 tree->Branch(
"normalizedUsup", & normalizedUsup);
402 std::vector< double >* normalizedVsup =
new std::vector< double> ({1., 2., 3., 4.});
403 tree->Branch(
"normalizedVsup", & normalizedVsup);
405 std::vector< std::vector< unsigned int > >* fullSecIDs =
406 new std::vector< std::vector< unsigned int > > ();
407 tree->Branch(
"fullSecID", & fullSecIDs);
410 for (layer = 0 ; layer < nOfLayers ; layer ++) {
412 for (ladder = 0; ladder < nOfLadders ; ladder ++) {
414 for (sensor = 0; sensor < nOfSensors ; sensor ++) {
415 normalizedUsup->clear();
416 normalizedVsup->clear();
418 auto sectorsOnSensor =
420 sectorsOnSensor.get(normalizedUsup, normalizedVsup, fullSecIDs);
425 delete normalizedVsup;
426 delete normalizedUsup;
434 TString treeName = *dirName;
435 treeName.Append(
"/");
437 TTree* tree = (TTree*) gFile->Get(treeName);
438 UInt_t layer, ladder, sensor;
439 if (tree->SetBranchAddress(
"layer" , & layer) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
440 if (tree->SetBranchAddress(
"ladder", & ladder) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
441 if (tree->SetBranchAddress(
"sensor", & sensor) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
443 std::vector< double >* normalizedUsup =
new std::vector< double> ();
444 if (tree->SetBranchAddress(
"normalizedUsup", & normalizedUsup) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
446 std::vector< double >* normalizedVsup =
new std::vector< double> ({1., 2., 3., 4.});
447 if (tree->SetBranchAddress(
"normalizedVsup", & normalizedVsup) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
449 std::vector< std::vector< unsigned int > >* fullSecIDs =
450 new std::vector< std::vector< unsigned int > > ();
451 if (tree->SetBranchAddress(
"fullSecID", & fullSecIDs) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
454 for (Long64_t i = 0; i < tree->GetEntries() ; i++) {
461 delete normalizedVsup;
462 delete normalizedUsup;
471 TTree* sp2tree =
new TTree(
"SegmentFilters",
"SegmentFilters");
473 twoHitFilter.persist(sp2tree,
"filter");
475 unsigned int outerFullSecID2sp, innerFullSecID2sp;
476 sp2tree->Branch(
"outerFullSecID", & outerFullSecID2sp);
477 sp2tree->Branch(
"innerFullSecID", & innerFullSecID2sp);
480 TTree* sp3tree =
new TTree(
"TripletsFilters",
"TripletFilters");
482 threeHitFilter.persist(sp3tree,
"filter");
484 unsigned int outerFullSecID3sp, centerFullSecID3sp,
486 sp3tree->Branch(
"outerFullSecID", & outerFullSecID3sp);
487 sp3tree->Branch(
"centerFullSecID", & centerFullSecID3sp);
488 sp3tree->Branch(
"innerFullSecID", & innerFullSecID3sp);
491 if (staticSector ==
nullptr)
496 outerFullSecID3sp = outerFullSecID2sp = staticSector->getFullSecID();
497 auto segmentFilters = staticSector->getAllFilters2sp();
498 for (
auto compactIdFilterPair : segmentFilters) {
499 auto innerCompactId = compactIdFilterPair.first;
500 innerFullSecID2sp =
getFullID(innerCompactId);
501 twoHitFilter = compactIdFilterPair.second;
505 auto tripletFilters = staticSector->getAllFilters3sp();
506 for (
auto compactIdFilterPair : tripletFilters) {
509 centerFullSecID3sp =
getFullID(id_center);
511 threeHitFilter = compactIdFilterPair.second;
524 TString sp2treeName = *dirName;
525 sp2treeName.Append(
"/SegmentFilters");
526 TTree* sp2tree = (TTree*) gFile->Get(sp2treeName);
531 twoHitFilter.setBranchAddress(sp2tree,
"filter");
533 unsigned int outerFullSecID2sp, innerFullSecID2sp;
534 if (sp2tree->SetBranchAddress(
"outerFullSecID", & outerFullSecID2sp) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
535 if (sp2tree->SetBranchAddress(
"innerFullSecID", & innerFullSecID2sp) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
537 for (Long64_t i = 0 ; i < sp2tree->GetEntries() ; i++) {
538 sp2tree->GetEntry(i);
541 FullSecID outer_secid_2sp(outerFullSecID2sp);
542 FullSecID inner_secid_2sp(innerFullSecID2sp);
545 B2WARNING(
"Outer sector is not on outer layer! Not adding this filter. \"Outer\" layer number: "
557 TString sp3treeName = *dirName;
558 sp3treeName.Append(
"/TripletsFilters");
559 TTree* sp3tree = (TTree*) gFile->Get(sp3treeName);
563 threeHitFilter.setBranchAddress(sp3tree,
"filter");
565 unsigned int outerFullSecID3sp, centerFullSecID3sp,
567 if (sp3tree->SetBranchAddress(
"outerFullSecID", & outerFullSecID3sp) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
568 if (sp3tree->SetBranchAddress(
"centerFullSecID", & centerFullSecID3sp) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
569 if (sp3tree->SetBranchAddress(
"innerFullSecID", & innerFullSecID3sp) < 0) B2FATAL(
"VXDTFFilters: invalid branch address");
571 for (Long64_t i = 0 ; i < sp3tree->GetEntries() ; i++) {
572 sp3tree->GetEntry(i);
575 FullSecID outer_secid_3sp(outerFullSecID3sp);
576 FullSecID center_secid_3sp(centerFullSecID3sp);
577 FullSecID inner_secid_3sp(innerFullSecID3sp);
579 if (outer_secid_3sp.getLayerNumber() < center_secid_3sp.getLayerNumber() or
580 center_secid_3sp.getLayerNumber() < inner_secid_3sp.getLayerNumber()) {
581 B2WARNING(
"Layers not in the correct order for Triplet filter! Will not add filter! Outer layer number: " <<
582 outer_secid_3sp.getLayerNumber() <<
" center layer number: " << center_secid_3sp.getLayerNumber() <<
583 " inner layer number: " << inner_secid_3sp.getLayerNumber());
602 const std::vector< double>& normalizedVsup,
603 const std::vector< std::vector< unsigned int >>&
606 std::vector< std::vector< FullSecID >> fullSecIDs;
608 for (
auto col : fullSecIDsBaseType) {
609 std::vector< FullSecID > tmp_col;
612 fullSecIDs.push_back(tmp_col);