|
ATLAS Offline Software
|
#include <SiTrackMaker_xk.h>
|
|
| SiTrackMaker_xk (const std::string &, const std::string &, const IInterface *) |
|
virtual | ~SiTrackMaker_xk ()=default |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | finalize () override |
|
|
virtual std::list< Trk::Track * > | getTracks (const EventContext &ctx, SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const override |
|
virtual std::list< Trk::Track * > | getTracks (const EventContext &ctx, SiTrackMakerEventData_xk &data, const Trk::TrackParameters &Tp, const std::vector< Amg::Vector3D > &Gp) const override |
|
virtual void | newEvent (const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override |
|
virtual void | newTrigEvent (const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override |
|
virtual void | endEvent (SiTrackMakerEventData_xk &data) const override |
|
|
MsgStream & | dump (SiTrackMakerEventData_xk &data, MsgStream &out) const override |
|
|
|
ToolHandle< InDet::ISiDetElementsRoadMaker > | m_roadmaker {this, "RoadTool", "InDet::SiDetElementsRoadMaker_xk"} |
|
ToolHandle< InDet::ISiCombinatorialTrackFinder > | m_tracksfinder {this, "CombinatorialTrackFinder", "InDet::SiCombinatorialTrackFinder_xk"} |
|
ToolHandle< ITrigInDetTrackFollowingTool > | m_trigInDetTrackFollowingTool {this, "TrigTrackFollowingTool", "TrigInDetTrackFollowingTool"} |
|
ToolHandle< ITrigInDetRoadPredictorTool > | m_trigInDetRoadPredictorTool {this, "TrigInDetRoadPredictorTool", "TrigInDetRoadPredictorTool_FTF"} |
|
ToolHandle< InDet::ISeedToTrackConversionTool > | m_seedtrack {this, "SeedToTrackConversion", "InDet::SeedToTrackConversionTool"} |
|
|
SG::ReadCondHandleKey< InDet::BeamSpotData > | m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"} |
|
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"} |
|
SG::ReadHandleKey< ROIPhiRZContainer > | m_caloCluster {this, "EMROIPhiRZContainer", ""} |
|
SG::ReadHandleKey< ROIPhiRZContainer > | m_caloHad {this, "HadROIPhiRZContainer", ""} |
|
|
BooleanProperty | m_seedsfilter {this, "UseSeedFilter", true, "Use seed filter"} |
|
StringProperty | m_fieldmode {this, "MagneticFieldMode", "MapSolenoid", "Mode of magnetic field"} |
|
StringProperty | m_patternName {this, "TrackPatternRecoInfo", "SiSPSeededFinder", "Name of the pattern recognition"} |
|
BooleanProperty | m_usePix {this, "usePixel", true, "flags to set whether to use pixel/sct cluster, irrespective of what is in event"} |
|
BooleanProperty | m_useSct {this, "useSCT", true} |
|
BooleanProperty | m_useassoTool {this, "UseAssociationTool", false, "Use prd-track association tool"} |
|
BooleanProperty | m_cosmicTrack {this, "CosmicTrack", false, "Is it cosmic track"} |
|
BooleanProperty | m_multitracks {this, "doMultiTracksProd", false} |
|
BooleanProperty | m_useBremModel {this, "useBremModel", false} |
|
BooleanProperty | m_useCaloSeeds {this, "doCaloSeededBrem", false} |
|
BooleanProperty | m_useSSSfilter {this, "useSSSseedsFilter", true} |
|
BooleanProperty | m_useHClusSeed {this, "doHadCaloSeedSSS", false, "Hadronic Calorimeter Seeds"} |
|
BooleanProperty | m_ITKGeometry {this, "ITKGeometry", false, "ITK geometry"} |
|
BooleanProperty | m_seedsegmentsWrite {this, "SeedSegmentsWrite", false, "Call seed to track conversion"} |
|
BooleanProperty | m_useTrigTrackFollowingTool {this, "useTrigTrackFollowingTool", false, "Option to use TrigInDetTrackFollowingTool instead of SiCombinatorialTrackFinder_xk"} |
|
BooleanProperty | m_useTrigInDetRoadPredictorTool {this, "useTrigInDetRoadPredictorTool", false, "Option to use TrigInDetRoadPredictorTool instead of ISiDetElementsRoadMaker"} |
|
BooleanProperty | m_LRTmode {this, "LRTMode", false} |
|
DoubleProperty | m_xi2max {this, "Xi2max", 15., "max Xi2 for updators"} |
|
DoubleProperty | m_xi2maxNoAdd {this, "Xi2maxNoAdd", 35., "max Xi2 for clusters"} |
|
DoubleProperty | m_xi2maxlink {this, "Xi2maxlink", 200., "max Xi2 for clusters"} |
|
DoubleProperty | m_pTmin {this, "pTmin", 500., "min pT"} |
|
DoubleProperty | m_pTminBrem {this, "pTminBrem", 1000., "min pT for Brem mode"} |
|
DoubleProperty | m_distmax {this, "MaxDistanceForSCTsp", 5.} |
|
DoubleProperty | m_xi2multitracks {this, "Xi2maxMultiTracks", 3., "max Xi2 for multi tracks"} |
|
IntegerProperty | m_nholesmax {this, "nHolesMax", 2, "Max number holes"} |
|
IntegerProperty | m_dholesmax {this, "nHolesGapMax", 2, "Max holes gap"} |
|
IntegerProperty | m_nclusmin {this, "nClustersMin", 6, "Min number clusters"} |
|
IntegerProperty | m_nwclusmin {this, "nWeightedClustersMin", 6, "Min umber weighted clusters(pix=2 sct=1)"} |
|
IntegerProperty | m_trackletPoints {this, "trackletPoints", 1, "Select which tracklet points to use"} |
|
DoubleProperty | m_phiWidth {this, "phiWidth", 0.3} |
|
DoubleProperty | m_etaWidth {this, "etaWidth", 0.3} |
|
DoubleArrayProperty | m_etabins {this, "etaBins", {}, "eta bins"} |
|
DoubleArrayProperty | m_ptbins {this, "pTBins", {}, "pT bins"} |
|
|
enum | statAllTypes {
kTotalInputSeeds,
kTotalUsedSeeds,
kTotalNoTrackPar,
kTotalBremSeeds,
kTwoClusters,
kWrongInit,
kWrongRoad,
kNoTrack,
kNotNewTrack,
kBremAttempt,
kOutputTracks,
kExtraTracks,
kBremTracks,
kDESize,
kSeedsWithTracks
} |
|
enum | kNStatEtaTypes { kUsedSeedsEta,
kSeedsWithTracksEta
} |
|
Trk::TrackInfo | m_trackinfo |
|
bool | m_heavyion {false} |
|
Trk::MagneticFieldMode | m_fieldModeEnum {Trk::FullField} |
|
std::mutex | m_counterMutex |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_totalInputSeeds | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_totalUsedSeeds | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_totalNoTrackPar | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_totalBremSeeds | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_twoClusters | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_wrongRoad | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_wrongInit | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_noTrack | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_notNewTrack | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_bremAttempt | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_outputTracks | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_extraTracks | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_bremTracks | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_seedsWithTrack | ATLAS_THREAD_SAFE {} |
|
std::array< std::atomic< double >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_deSize | ATLAS_THREAD_SAFE {} |
|
std::vector< std::vector< double > > m_usedSeedsEta | ATLAS_THREAD_SAFE |
|
std::vector< std::vector< double > > m_seedsWithTracksEta | ATLAS_THREAD_SAFE |
|
std::vector< statAllTypes > | m_indexToEnum {kTwoClusters,kWrongInit,kWrongRoad,kNoTrack,kNotNewTrack,kBremAttempt} |
|
std::unique_ptr< Trk::TrackParameters > | getAtaPlane (MagField::AtlasFieldCache &fieldCache, SiTrackMakerEventData_xk &data, bool sss, const std::vector< const Trk::SpacePoint * > &SP, const EventContext &ctx) const |
|
bool | globalPositions (const Trk::SpacePoint &s0, const Trk::SpacePoint &s1, const Trk::SpacePoint &s2, double *p0, double *p1, double *p2) const |
|
bool | globalPosition (const Trk::SpacePoint &sp, const double *dir, double *p) const |
| This is a refinement of the global position for strip space-points. More...
|
|
InDet::TrackQualityCuts | setTrackQualityCuts (bool simpleTrack) const |
|
bool | newSeed (SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const |
|
bool | isCaloCompatible (SiTrackMakerEventData_xk &data) const |
|
bool | isHadCaloCompatible (SiTrackMakerEventData_xk &data) const |
|
double | pTmin (double eta) const |
|
MsgStream & | dumpStatistics (MsgStream &out) const |
|
MsgStream & | dumpconditions (MsgStream &out) const |
|
template<typename T , size_t N, size_t M> |
void | resetCounter (std::array< std::array< T, M >, N > &a) const |
| helper for working with the stat arrays More...
|
|
template<typename T , size_t N> |
void | resetCounter (std::array< T, N > &a) const |
|
static void | globalDirections (const double *p0, const double *p1, const double *p2, double *d0, double *d1, double *d2) |
| Here, we derive the local track direction in the space-points as the tangents to the estimated trajectory (assuming a circle in x-y and straight line in r-z) More...
|
|
static void | detectorElementsSelection (SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE) |
|
static int | kindSeed (const std::vector< const Trk::SpacePoint * > &Sp) |
|
static int | rapidity (const std::vector< const Trk::SpacePoint * > &Sp) |
|
static bool | isNewTrack (SiTrackMakerEventData_xk &data, Trk::Track *Tr) |
|
static void | clusterTrackMap (SiTrackMakerEventData_xk &data, Trk::Track *Tr) |
|
static MsgStream & | dumpevent (SiTrackMakerEventData_xk &data, MsgStream &out) |
|
InDet::SiTrackMaker_xk is algorithm which produce Trk::Track started from 3 space points information of SCT and Pixels in the road of InDetDD::SiDetectorElement* sorted in propagation order.
In AthenaMT, event dependent cache inside SiTrackMaker_xk is not preferred. SiTrackMakerEventData_xk class holds event dependent data for SiTrackMaker_xk. Its object is instantiated in SiSPSeededTrackFinder::execute.
- Author
- Igor..nosp@m.Gavr.nosp@m.ilenk.nosp@m.o@ce.nosp@m.rn.ch
Definition at line 63 of file SiTrackMaker_xk.h.
◆ kNStatEtaTypes
◆ statAllTypes
Enumerator |
---|
kTotalInputSeeds | |
kTotalUsedSeeds | |
kTotalNoTrackPar | |
kTotalBremSeeds | |
kTwoClusters | |
kWrongInit | |
kWrongRoad | |
kNoTrack | |
kNotNewTrack | |
kBremAttempt | |
kOutputTracks | |
kExtraTracks | |
kBremTracks | |
kDESize | |
kSeedsWithTracks | |
Definition at line 205 of file SiTrackMaker_xk.h.
◆ SiTrackMaker_xk() [1/3]
InDet::SiTrackMaker_xk::SiTrackMaker_xk |
( |
const std::string & |
t, |
|
|
const std::string & |
n, |
|
|
const IInterface * |
p |
|
) |
| |
◆ ~SiTrackMaker_xk()
virtual InDet::SiTrackMaker_xk::~SiTrackMaker_xk |
( |
| ) |
|
|
virtualdefault |
◆ SiTrackMaker_xk() [2/3]
InDet::SiTrackMaker_xk::SiTrackMaker_xk |
( |
| ) |
|
|
privatedelete |
◆ SiTrackMaker_xk() [3/3]
◆ clusterTrackMap()
Definition at line 1188 of file SiTrackMaker_xk.cxx.
1194 for (;
m!=me; ++
m) {
1196 if (prd)
data.clusterTrack().insert(std::make_pair(prd, Tr));
◆ detectorElementsSelection()
◆ dump()
◆ dumpconditions()
MsgStream & InDet::SiTrackMaker_xk::dumpconditions |
( |
MsgStream & |
out | ) |
const |
|
private |
Definition at line 405 of file SiTrackMaker_xk.cxx.
409 std::string
s4;
for (
int i=0;
i<
n; ++
i)
s4.append(
" ");
s4.append(
"|");
411 std::string fieldmode[9] ={
"NoField" ,
"ConstantField",
"SolenoidalField",
412 "ToroidalField" ,
"Grid3DField" ,
"RealisticField" ,
413 "UndefinedField",
"AthenaField" ,
"?????" };
422 fieldCondObj->getInitializedCache(fieldCache);
427 int mode = fieldprop.magneticFieldMode();
428 if (mode<0 || mode>8 )
mode = 8;
430 n = 62-fieldmode[
mode].size();
431 std::string
s3;
for (
int i=0;
i<
n; ++
i)
s3.append(
" ");
s3.append(
"|");
434 std::string s6;
for (
int i=0;
i<
n; ++
i) s6.append(
" "); s6.append(
"|");
436 out<<
"|----------------------------------------------------------------------"
437 <<
"-------------------|"
439 out<<
"| Tool for road builder | "<<
m_roadmaker .type() <<s6<<std::endl;
441 out<<
"| Use association tool ? | "
444 out<<
"| Magnetic field mode | "<<fieldmode[
mode] <<
s3<<std::endl;
447 out<<
"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<
m_pTmin
449 out<<
"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2max
451 out<<
"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxNoAdd
453 out<<
"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<
m_xi2maxlink
455 out<<
"| Min number of clusters | "<<std::setw(12)<<
m_nclusmin
463 out<<
"|----------------------------------------------------------------------"
464 <<
"-------------------|"
◆ dumpevent()
Definition at line 474 of file SiTrackMaker_xk.cxx.
476 out<<
"|---------------------------------------------------------------------|"
478 out<<
"| Number input seeds | "<<std::setw(12)<<
data.inputseeds()
480 out<<
"| Number good seeds | "<<std::setw(12)<<
data.goodseeds()
482 out<<
"| Number output tracks | "<<std::setw(12)<<
data.findtracks()
484 out<<
"|---------------------------------------------------------------------|"
◆ dumpStatistics()
MsgStream & InDet::SiTrackMaker_xk::dumpStatistics |
( |
MsgStream & |
out | ) |
const |
|
private |
Definition at line 197 of file SiTrackMaker_xk.cxx.
200 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
202 out<<
"| Kind of seed | PPP | PPS | PSS | SSS | ALL |"
204 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|"
206 out<<
"| Input seeds | "
207 <<std::setw(12)<<m_totalInputSeeds[0]<<
" | "
208 <<std::setw(12)<<m_totalInputSeeds[1]<<
" | "
209 <<std::setw(12)<<m_totalInputSeeds[2]<<
" | "
210 <<std::setw(12)<<m_totalInputSeeds[3]<<
" | "
211 <<std::setw(12)<<(m_totalInputSeeds[0]+m_totalInputSeeds[1]+m_totalInputSeeds[2]+m_totalInputSeeds[3])
214 out<<
"| No track parameters | "
215 <<std::setw(12)<<m_totalNoTrackPar[0]<<
" | "
216 <<std::setw(12)<<m_totalNoTrackPar[1]<<
" | "
217 <<std::setw(12)<<m_totalNoTrackPar[2]<<
" | "
218 <<std::setw(12)<<m_totalNoTrackPar[3]<<
" | "
219 <<std::setw(12)<<(m_totalNoTrackPar[0]+m_totalNoTrackPar[1]+ m_totalNoTrackPar[2]+m_totalNoTrackPar[3])
222 out<<
"| Used seeds | "
223 <<std::setw(12)<<m_totalUsedSeeds[0]<<
" | "
224 <<std::setw(12)<<m_totalUsedSeeds[1]<<
" | "
225 <<std::setw(12)<<m_totalUsedSeeds[2]<<
" | "
226 <<std::setw(12)<<m_totalUsedSeeds[3]<<
" | "
227 <<std::setw(12)<<(m_totalUsedSeeds[0]+m_totalUsedSeeds[1]+ m_totalUsedSeeds[2]+m_totalUsedSeeds[3])
230 out<<
"| Used seeds brem | "
231 <<std::setw(12)<<m_totalBremSeeds[0]<<
" | "
232 <<std::setw(12)<<m_totalBremSeeds[1]<<
" | "
233 <<std::setw(12)<<m_totalBremSeeds[2]<<
" | "
234 <<std::setw(12)<<m_totalBremSeeds[3]<<
" | "
235 <<std::setw(12)<<(m_totalBremSeeds[0]+m_totalBremSeeds[1]+m_totalBremSeeds[2]+m_totalBremSeeds[3])
238 double tdetsize = 0.;
241 tdetsize+= m_deSize[
i];
242 goodseed+= m_totalUsedSeeds[
i];
243 if(m_totalUsedSeeds[
i] > 0.) m_deSize[
i]= m_deSize[
i]/m_totalUsedSeeds[
i];
245 if(goodseed > 0) tdetsize/=
double(goodseed);
247 out<<
"| Det elements in road | "
248 <<std::setw(12)<<std::setprecision(4)<<m_deSize[0]<<
" | "
249 <<std::setw(12)<<std::setprecision(5)<<m_deSize[1]<<
" | "
250 <<std::setw(12)<<std::setprecision(5)<<m_deSize[2]<<
" | "
251 <<std::setw(12)<<std::setprecision(5)<<m_deSize[3]<<
" | "
252 <<std::setw(12)<<std::setprecision(5)<<tdetsize
256 out<<
"| Two clusters on DE | "
257 <<std::setw(12)<<m_twoClusters[0]<<
" | "
258 <<std::setw(12)<<m_twoClusters[1]<<
" | "
259 <<std::setw(12)<<m_twoClusters[2]<<
" | "
260 <<std::setw(12)<<m_twoClusters[3]<<
" | "
261 <<std::setw(12)<<(m_twoClusters[0]+m_twoClusters[1]+m_twoClusters[2]+m_twoClusters[3])
264 out<<
"| Wrong DE road | "
265 <<std::setw(12)<<m_wrongRoad[0]<<
" | "
266 <<std::setw(12)<<m_wrongRoad[1]<<
" | "
267 <<std::setw(12)<<m_wrongRoad[2]<<
" | "
268 <<std::setw(12)<<m_wrongRoad[3]<<
" | "
269 <<std::setw(12)<<(m_wrongRoad[0]+m_wrongRoad[1]+m_wrongRoad[2]+m_wrongRoad[3])
272 out<<
"| Wrong initialization | "
273 <<std::setw(12)<<m_wrongInit[0]<<
" | "
274 <<std::setw(12)<<m_wrongInit[1]<<
" | "
275 <<std::setw(12)<<m_wrongInit[2]<<
" | "
276 <<std::setw(12)<<m_wrongInit[3]<<
" | "
277 <<std::setw(12)<<(m_wrongInit[0]+m_wrongInit[1]+m_wrongInit[2]+m_wrongInit[3])
280 out<<
"| Can not find track | "
281 <<std::setw(12)<<m_noTrack[0]<<
" | "
282 <<std::setw(12)<<m_noTrack[1]<<
" | "
283 <<std::setw(12)<<m_noTrack[2]<<
" | "
284 <<std::setw(12)<<m_noTrack[3]<<
" | "
285 <<std::setw(12)<<(m_noTrack[0]+m_noTrack[1]+m_noTrack[2]+m_noTrack[3])
288 out<<
"| It is not new track | "
289 <<std::setw(12)<<m_notNewTrack[0]<<
" | "
290 <<std::setw(12)<<m_notNewTrack[1]<<
" | "
291 <<std::setw(12)<<m_notNewTrack[2]<<
" | "
292 <<std::setw(12)<<m_notNewTrack[3]<<
" | "
293 <<std::setw(12)<<(m_notNewTrack[0]+m_notNewTrack[1]+m_notNewTrack[2]+m_notNewTrack[3])
296 out<<
"| Attempts brem model | "
297 <<std::setw(12)<<m_bremAttempt[0]<<
" | "
298 <<std::setw(12)<<m_bremAttempt[1]<<
" | "
299 <<std::setw(12)<<m_bremAttempt[2]<<
" | "
300 <<std::setw(12)<<m_bremAttempt[3]<<
" | "
301 <<std::setw(12)<<(m_bremAttempt[0]+m_bremAttempt[1]+m_bremAttempt[2]+m_bremAttempt[3])
304 out<<
"| Output tracks | "
305 <<std::setw(12)<<m_outputTracks[0]<<
" | "
306 <<std::setw(12)<<m_outputTracks[1]<<
" | "
307 <<std::setw(12)<<m_outputTracks[2]<<
" | "
308 <<std::setw(12)<<m_outputTracks[3]<<
" | "
309 <<std::setw(12)<<(m_outputTracks[0]+m_outputTracks[1]+m_outputTracks[2]+m_outputTracks[3])
312 out<<
"| Output extra tracks | "
313 <<std::setw(12)<<m_extraTracks[0]<<
" | "
314 <<std::setw(12)<<m_extraTracks[1]<<
" | "
315 <<std::setw(12)<<m_extraTracks[2]<<
" | "
316 <<std::setw(12)<<m_extraTracks[3]<<
" | "
317 <<std::setw(12)<<(m_extraTracks[0]+m_extraTracks[1]+m_extraTracks[2]+m_extraTracks[3])
320 out<<
"| Output tracks brem | "
321 <<std::setw(12)<<m_bremTracks[0]<<
" | "
322 <<std::setw(12)<<m_bremTracks[1]<<
" | "
323 <<std::setw(12)<<m_bremTracks[2]<<
" | "
324 <<std::setw(12)<<m_bremTracks[3]<<
" | "
325 <<std::setw(12)<<(m_bremTracks[0]+m_bremTracks[1]+m_bremTracks[2]+m_bremTracks[3])
328 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
330 out<<
"| Seeds with track | "
331 <<std::setw(12)<<m_seedsWithTrack[0]<<
" | "
332 <<std::setw(12)<<m_seedsWithTrack[1]<<
" | "
333 <<std::setw(12)<<m_seedsWithTrack[2]<<
" | "
334 <<std::setw(12)<<m_seedsWithTrack[3]<<
" | "
335 <<std::setw(12)<<(m_seedsWithTrack[0]+m_seedsWithTrack[1]+m_seedsWithTrack[2]+m_seedsWithTrack[3])
336 <<
" | Number seeds |"<<std::endl;
337 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
340 std::vector<std::pair<int,std::string>> rapidityTablePrint;
342 rapidityTablePrint.emplace_back(0,std::string(
"| Track/Used 0.0-0.5 | "));
343 rapidityTablePrint.emplace_back(1,std::string(
"| 0.5-1.0 | "));
344 rapidityTablePrint.emplace_back(2,std::string(
"| 1.0-1.5 | "));
345 rapidityTablePrint.emplace_back(3,std::string(
"| 1.5-2.0 | "));
346 rapidityTablePrint.emplace_back(4,std::string(
"| 2.0-2.5 | "));
347 rapidityTablePrint.emplace_back(5,std::string(
"| 2.5-3.0 | "));
348 rapidityTablePrint.emplace_back(6,std::string(
"| 3.0-3.5 | "));
349 rapidityTablePrint.emplace_back(7,std::string(
"| 3.5-4.0 | "));
354 std::array<double,SiCombinatorialTrackFinderData_xk::kNSeedTypes+1>
pu{};
357 double totalUsedSeedsEta = 0.;
361 if(m_usedSeedsEta[j][
i]!=0.)
pu[j]=m_seedsWithTracksEta[j][
i]/m_usedSeedsEta[j][
i];
362 totalUsedSeedsEta += m_usedSeedsEta[j][
i];
366 if(totalUsedSeedsEta!=0.) {
376 out<<rapidityTablePrint.at(
i).second;
377 out<<std::setw(12)<<std::setprecision(4)<<
pu[0]<<
" | "
378 <<std::setw(12)<<std::setprecision(4)<<
pu[1]<<
" | "
379 <<std::setw(12)<<std::setprecision(4)<<
pu[2]<<
" | "
380 <<std::setw(12)<<std::setprecision(4)<<
pu[3]<<
" | "
381 <<std::setw(12)<<std::setprecision(4)<<
pu[4]<<
" | "
382 <<std::setw(12)<<
static_cast<int>(m_seedsWithTracksEta[0][
i])+
static_cast<int>(m_seedsWithTracksEta[1][
i])+
static_cast<int>(m_seedsWithTracksEta[2][
i])+
static_cast<int>(m_seedsWithTracksEta[3][
i])
387 out<<
"|----------------------|--------------|--------------|--------------|--------------|--------------|--------------|"
◆ endEvent()
End event for track finder tool
correction to exclude memory fragmentation
Definition at line 587 of file SiTrackMaker_xk.cxx.
593 data.clusterTrack().clear();
603 for(
int r = 0;
r != 8; ++
r) {
624 m_deSize[K] = m_deSize[K] +
data.summaryStatAll()[
kDESize][K];
◆ finalize()
StatusCode InDet::SiTrackMaker_xk::finalize |
( |
| ) |
|
|
overridevirtual |
◆ getAtaPlane()
we need at least three space points on the seed.
for tracklets we select first, middle, and last spacepoint of the seed to improve pT estimate
for tracklets we select middle, 3rd-quarter, and last spacepoint of the seed
for tracklets we select first, penultimate, and last spacepoint of the seed
for tracklets we select first, second, and third spacepoint of the seed
get the first cluster on the first hit
and use the surface from this cluster as our reference plane
write the global positions into arrays. This includes an improved position estimate for strip spacepoints. If this improvement fails, the method can return false -> then we abort
translate second and third SP w.r.t first one
distance of second SP to first in transverse plane Also happens to be u-coordinate of second SP in conformal mapping
denominator for conformal mapping
coordinate system for conformal mapping - this is local x
u-coordinate of third SP in conformal mapping
v-coordinate of third SP in conformal mapping
A,B are slope and intercept of the straight line in the u,v plane connecting the three points.
Keep in mind that v1 == 0
From inserting A into linear equation. Note that Igor sneaks in a factor two here
Curvature estimate. (2R)²=(1+A²)/b² => 1/2R = b/sqrt(1+A²) = B / sqrt(1+A²).
estimate of the track dz/dr (1/tanTheta), corrected for curvature effects
local x of the surface in the global frame
local y of the surface in the global frame
centre of the surface in the global frame
location of the first SP w.r.t centre of the surface
local x and y - project onto local axes
silently switch off field if solenoid is off
if we are not running with "no field":
get the field at our first SP
field is in kiloTesla. So here we check for more than 0.1 Tesla
phi estimate
theta estimate
inverse transverse momentum estimate
if we have low field, use a straight-line estimate
note: Now no curvature correction
no pt estimate, assume min pt
treat absence of solenoid like the low-field case
apply the pt on the initial parameter estimate, with some margin
update qoverp
qoverp from qoverpt and theta
ref point = first SP
never done in main ATLAS tracking. Would otherwise check if the seed is compatible with a hadronic ROI
now we can return the initial track parameters we built, parameterised using the ref surface. Pass a nullptr for the covariance
Definition at line 859 of file SiTrackMaker_xk.cxx.
867 if (theSeed.size() < 3)
return nullptr;
869 std::vector<const Trk::SpacePoint*> SP;
873 unsigned int middleIdx = theSeed.size() == 3 ? 1 : theSeed.size()/2;
874 SP = {theSeed[0], theSeed[middleIdx], theSeed.back()};
878 SP = {theSeed[theSeed.size() - 3], theSeed[theSeed.size() - 2], theSeed.back()};
882 unsigned int middleIdx = theSeed.size() == 3 ? 0 : theSeed.size()/2;
883 unsigned int quarterIdx = theSeed.size() == 3 ? 1 : 3*theSeed.size()/4;
884 SP = {theSeed[middleIdx], theSeed[quarterIdx], theSeed.back()};
888 SP = {theSeed[0], theSeed[theSeed.size() - 2], theSeed.back()};
892 SP = {theSeed[0], theSeed[1], theSeed[2]};
898 if (!
cl)
return nullptr;
902 if (!pla)
return nullptr;
917 double z2 =
p2[2]-
z0;
929 double u2 = (
a*
x2+
b*
y2)*r2 ;
934 double A =
v2/(u2-u1) ;
935 double B = 2.*(
v2-
A*u2) ;
936 double C =
B/sqrt(1.+
A*
A) ;
937 double T = z2*sqrt(r2)/(1.+.04*
C*
C*
rn);
939 T = std::abs(
C) > 1.e-6 ? (z2*
C)/asin(
C*sqrt(
rn)) : z2/sqrt(
rn);
945 double Ax[3] = {Tp(0,0),Tp(1,0),Tp(2,0)};
947 double Ay[3] = {Tp(0,1),Tp(1,1),Tp(2,1)};
949 double D [3] = {Tp(0,3),Tp(1,3),Tp(2,3)};
951 double d[3] = {
x0-D[0],
y0-D[1],
z0-D[2]};
953 data.par()[0] =
d[0]*Ax[0]+
d[1]*Ax[1]+
d[2]*Ax[2];
954 data.par()[1] =
d[0]*Ay[0]+
d[1]*Ay[1]+
d[2]*Ay[2];
962 if (fieldprop.magneticFieldMode() > 0) {
970 if (fabs(
H[2])>.0001) {
974 data.par()[3] = atan2(1.,
T) ;
976 data.par()[5] = -
C/(300.*
H[2]) ;
982 data.par()[3] = atan2(1.,
T) ;
990 data.par()[3] = atan2(1.,
T) ;
998 if(std::abs(
data.par()[5])*pTm > 1)
return nullptr;
1000 else if(std::abs(
data.par()[5])*
m_pTmin > 1.1)
return nullptr;
◆ getTracks() [1/2]
incremenet seed counter
0 or 3 typically (PPP or SSS), other numbers indicate PPS/PSS (1/2)
eta of the seed, rounded down to leading digit via int-conversion
more counter incrementation
prepare output list
if we run the SI track maker without using the Si, this becomes a trivial task...
check seed quality.
this checks if all of the clusters on the seed are already on one single existing track. If not, we consider the seed to be "good"
read the B-field cache
Get initial parameters estimation from our seed
if we failed to get the initial parameters, we bail out. Can happen in certain pathological cases (e.g. malformed strip hits), or if we would be running with calo-ROI strip seeds (we aren't)
otherwise, increment the 'good seeds' counter
Now, obtain a search road of detector elements. This is done by extrapolating our estimated starting parameters through the detector and collecting all detector elements reasonably close to the projected trajectory. This will populate the 'DE" list.
if we don't use all of pix and SCT, filter our list, erasing any that don't fit our requirements
if we did not find sufficient detector elements to fulfill the minimum cluster requirement, bail out. We will not be able to build a track satisfying the cuts.
update statistics tables - we have sufficient detector elements to have a chance of finding a track!
prepare a list of global positions
update another counter
Find possible list of tracks using space points space points information
Note: The branch below is the one taken in ATLAS default inside-out tracking for run-3
update stat tables
update the cluster-track-map to allow to filter any upcoming seeds with hits that are already taken
require sufficient free clusters on track
Definition at line 638 of file SiTrackMaker_xk.cxx.
653 std::list<Trk::Track*> tracks;
655 if (!
data.pix() && !
data.sct())
return tracks;
658 bool isGoodSeed{
true};
672 if (fieldCondObj ==
nullptr) {
676 fieldCondObj->getInitializedCache (fieldCache);
679 std::unique_ptr<Trk::TrackParameters> Tp =
nullptr;
682 m_seedtrack->executeSiSPSeedSegments(
data.conversionData(), Tp.get(), isGoodSeed, Sp);
704 std::vector<const InDetDD::SiDetectorElement*> DE;
712 if(road_length == 0)
return tracks;
720 if (
static_cast<int>(DE.size()) <
m_nclusmin) {
729 std::vector<Amg::Vector3D> Gp;
739 if(newTrack !=
nullptr) tracks.push_back(newTrack);
746 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
752 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), *Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
758 std::array<bool,SiCombinatorialTrackFinderData_xk::kNCombStats>
inf{0,0,0,0,0,0};
760 for (
size_t p =0;
p<
inf.size(); ++
p){
768 while (
t!=tracks.end()) {
779 data.findtracks() += tracks.size();
781 if(!tracks.empty()) {
◆ getTracks() [2/2]
Definition at line 796 of file SiTrackMaker_xk.cxx.
800 std::list<Trk::Track*> tracks;
801 if (!
data.pix() && !
data.sct())
return tracks;
810 if (fieldCondObj ==
nullptr) {
814 fieldCondObj->getInitializedCache (fieldCache);
818 std::vector<const InDetDD::SiDetectorElement*> DE;
824 if (
static_cast<int>(DE.size()) <
m_nclusmin)
return tracks;
828 std::vector<const Trk::SpacePoint*> Sp;
833 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), Tp, Sp, Gp, DE,
data.clusterTrack(),
false,ctx);
835 tracks =
m_tracksfinder->getTracksWithBrem(
data.combinatorialData(), Tp, Sp, Gp, DE,
data.clusterTrack(),
true,ctx);
842 while (
t!=tracks.end()) {
851 data.findtracks() += tracks.size();
◆ globalDirections()
void InDet::SiTrackMaker_xk::globalDirections |
( |
const double * |
p0, |
|
|
const double * |
p1, |
|
|
const double * |
p2, |
|
|
double * |
d0, |
|
|
double * |
d1, |
|
|
double * |
d2 |
|
) |
| |
|
staticprivate |
Here, we derive the local track direction in the space-points as the tangents to the estimated trajectory (assuming a circle in x-y and straight line in r-z)
transform transverse coordinates relative to the first SP
Now apply the same transform used in the seed maker: x,y --> u:=x/(x²+y²); v:=y/(x²+y²); in a frame centered around first SP
set x axis as direction unit vector in transverse plane, from first to second SP
reasoning: u = sqrt(d01)/d01, and v01 = 0
decompose the SP3-SP1 separation into components parallel...
and orthogonal to our new local x axis
squared distance third to first SP the transverse plane
u,v coordinates of third SP in the new frame
Now obtain A,B parameters from circle parameterisation in the new frame: V = (-x0/y0) x U + 1/(2y0) =: A x U + B. A ~= delta V / delta U, B = V - A x U, add a factor 2 for utility
v01 is 0, as the direction from SP 1 to 2 is the u-axis
Now we can resolve the related geometry. Note that A0, in the original frame, is related to the angle Phi1 between the tangent the central SP and the tendon between the first and second SP, alpha, as tan(alpha) = A0.
dz/dr along the seed = 1 / tan(theta)
1/sqrt(1+1/tan²(theta)) -> sin(theta)
cos theta (= sin(theta)/tan(theta))
multiply with cos(alpha) via A0
(a,b) parameterises the direction corresponding to the tendon between the first two SP. Now, go from there to the local tangents by removing or adding the angle 'alpha' from before, derived from A0. direction at first SP - rotated by - 1 x alpha w.r.t the tendon defining a and b The structure below comes from the formulae for sin / cos of a sum of two angles with (a,b) = r(cos phi / - sin phi)
px0: a sin theta cos alpha - b sin theta sin alpha
py0: b sin theta cos alpha + a sin theta sin alpha
pz0: cos theta
direction at second SP - rotated by + 1 x alpha w.r.t the tendon
px1: a sin theta cos alpha + b sin theta sin alpha
py1: b sin theta cos alpha - a sin theta sin alpha
pz1: cos theta
direction at third SP
px2: a sin theta cos alpha * C2 - b sin theta cos alpha S2
py2: b sin theta cos alpha * C2 + a sin theta cos alpha S2
Definition at line 1403 of file SiTrackMaker_xk.cxx.
1407 double x01 =
p1[0]-
p0[0] ;
1408 double y01 =
p1[1]-
p0[1] ;
1409 double x02 =
p2[0]-
p0[0] ;
1410 double y02 =
p2[1]-
p0[1] ;
1417 double d01 = x01*x01+y01*y01 ;
1418 double x1 = sqrt(d01) ;
1419 double u01 = 1./
x1 ;
1420 double a = x01*u01 ;
1421 double b = y01*u01 ;
1423 double x2 =
a*x02+
b*y02 ;
1425 double y2 =
a*y02-
b*x02 ;
1430 double u02 =
x2/d02 ;
1431 double v02 =
y2/d02 ;
1436 double A0 = v02 /(u02-u01) ;
1437 double B0 = 2.*(v02-A0*u02) ;
1445 double C2 = (1.-B0*
y2) ;
1446 double S2 = (A0+B0*
x2) ;
1448 double T = (
p2[2]-
p0[2])/sqrt(d02);
1449 double sinTheta = 1./sqrt(1.+
T*
T) ;
1450 double cosTheta = sinTheta*
T ;
1451 double sinThetaCosAlpha = sinTheta / sqrt(1.+A0*A0) ;
1452 double Sa = sinThetaCosAlpha*
a ;
1453 double Sb = sinThetaCosAlpha*
b ;
1469 d2[0] = Sa*C2-Sb*
S2;
◆ globalPosition()
This is a refinement of the global position for strip space-points.
It uses the direction estimate to fix the hit position along the strip axis (non-sensitive direction).
pick up the two components of the space point
get the two ends of the strip in the global frame for each of the two clusters
get the "strip axis" in the global frame for each of the two clusters these define two planes in which the strips are sensitive
get the connection vector between the bottom ends of the two strips
divide max distance by the first strip length
Get the cross products of the direction vector and the strip axes. This gives us a normal representation of the planes containing both.
The two planes are still only defined up to a shift along the normal. Now, we fix this degree of freedom by requiring that the u-plane (perpendicular to momentum and second strip direction) should actually contain the second strip itself. To do so, we virtually 'hold' the u-plane at its intersection plane with the first strip, starting with it touching the very bottom of the first strip, and then move the intersection point along the strip. We can thus parameterise the shift by the distance we need to walk this way
Find the maximum distance we can go until we have walked past the full length of the first strip. Equivalent to the projection of the full strip length on the u-plane normal.
if no such component, bail out - no solution exists
The distance we need to walk to contain the second strip in the u-plane is is obtained by projecting the separation vector between the strip starting points onto the normal. (remember, we virtually start our shift with the u-plane intersecting the first strip at its starting point). We normalise the shifts to the maximum allowed shift.
this is playing the same game, but for shifting the v-plane w.r.t the version that intersects with the bottom of the second strip until we contain the first strip in it. du has the same length as dv (symmetry of the problem)
check that the result is valid. We want the final fixed planes to still intersect the respective other strip within some tolerance. Keep in mind that s=0 --> intersect start of strip, s == 1 --> intersect end of strip. We apply a tolerance beyond each end
now, update the position estimate as the intersection of the updated u-plane with the first strip.
Definition at line 1288 of file SiTrackMaker_xk.cxx.
1300 std::pair<Amg::Vector3D,Amg::Vector3D>
e0
1303 localPos =
c1->localPosition();
1304 std::pair<Amg::Vector3D,Amg::Vector3D>
e1
1309 double a0[3] = {
e0.second.x()-
e0.first.x(),
e0.second.y()-
e0.first.y(),
e0.second.z()-
e0.first.z()};
1310 double a1[3] = {
e1.second.x()-
e1.first.x(),
e1.second.y()-
e1.first.y(),
e1.second.z()-
e1.first.z()};
1312 double dr[3] = {
e1.first .x()-
e0.first.x(),
e1.first .y()-
e0.first.y(),
e1.first .z()-
e0.first.z()};
1319 double u[3] = {a1[1]*
dir[2]-a1[2]*
dir[1],a1[2]*
dir[0]-a1[0]*
dir[2],a1[0]*
dir[1]-a1[1]*
dir[0]};
1331 double du =
a0[0]*
u[0]+
a0[1]*
u[1]+
a0[2]*
u[2];
1334 if (du==0. )
return false;
1342 double s0 = (
dr[0]*
u[0]+
dr[1]*
u[1]+
dr[2]*
u[2])/du;
1347 double s1 = (
dr[0]*
v[0]+
dr[1]*
v[1]+
dr[2]*
v[2])/du;
1353 if (s0 < -d0 || s0 > 1.+
d0 || s1 < -d0 || s1 > 1.+
d0)
return false;
◆ globalPositions()
first, fill the arrays with the global positions of the 3 points
for PPP seeds, we are done
for SSS, we need some extra work
try to refine the position estimate for strip SP using the cluster information in combination with the direction estimate
Definition at line 1246 of file SiTrackMaker_xk.cxx.
1252 p0[0] =
s0.globalPosition().x();
1253 p0[1] =
s0.globalPosition().y();
1254 p0[2] =
s0.globalPosition().z();
1256 p1[0] =
s1.globalPosition().x();
1257 p1[1] =
s1.globalPosition().y();
1258 p1[2] =
s1.globalPosition().z();
1260 p2[0] =
s2.globalPosition().x();
1261 p2[1] =
s2.globalPosition().y();
1262 p2[2] =
s2.globalPosition().z();
1265 if (!
s0.clusterList().second && !
s1.clusterList().second && !
s2.clusterList().second)
return true;
1268 double dir0[3],dir1[3],dir2[3];
◆ initialize()
StatusCode InDet::SiTrackMaker_xk::initialize |
( |
| ) |
|
|
overridevirtual |
Get beam geometry
read the config string for the field mode
this one is the default
Get detector elements road maker tool
Get combinatorial track finder tool
Get trigger track following tool
Get trigger road predictor tool
Get seed to track conversion tool This is used if we want to write out the seeds for performance studies
flag for HI running
this is on by default in offline tracking
useSSSfilter is on by default in offline, m_useHClusSeed is off by default.
pt cut can never be below 20 MeV
initialize counters
Definition at line 38 of file SiTrackMaker_xk.cxx.
55 return StatusCode::FAILURE;
63 return StatusCode::FAILURE;
72 return StatusCode::FAILURE;
84 return StatusCode::FAILURE;
97 return StatusCode::FAILURE;
112 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_HeavyIon" ) {
115 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LowMomentum") {
117 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_BeamGas" ) {
119 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ForwardTracks" ) {
121 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_LargeD0" ) {
123 }
else if (
m_patternName ==
"SiSpacePointsSeedMaker_ITkConversionTracks") {
140 return StatusCode::FAILURE;
144 ATH_MSG_DEBUG(
"No. of cut values smaller than eta bins. Extending size..." );
149 if (
pt < 20.)
pt = 20.;
177 return StatusCode::SUCCESS;
◆ isCaloCompatible()
◆ isHadCaloCompatible()
◆ isNewTrack()
Definition at line 1204 of file SiTrackMaker_xk.cxx.
1207 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
1208 ti,
t[100],te =
data.clusterTrack().end();
1216 for (;
m!=me; ++
m) {
1221 t [
n] =
data.clusterTrack().find(prd[
n]);
1222 if (
t[
n]==te)
return true;
1227 if (!
n)
return true;
1230 for (
int i=0;
i!=
n; ++
i) {
1232 for (ti=
t[
i]; ti!=te; ++ti) {
1233 if ( (*ti).first != prd[
i] )
break;
1234 int ncl = (*ti).second->measurementsOnTrack()->size();
1235 if (ncl > nclmax) nclmax = ncl;
1237 if (nclt > nclmax)
return true;
◆ kindSeed()
Definition at line 1161 of file SiTrackMaker_xk.cxx.
1164 if(Sp.size()!=3)
return 0;
1166 std::vector<const Trk::SpacePoint*>::const_iterator
s=Sp.begin(),
se=Sp.end();
1169 for(;
s!=
se; ++
s) {
if((*s)->clusterList().second) ++
n;}
◆ newEvent()
initialize beam position
propagate pixel / strip usage to the event data object
build a holder for the configured track quality cuts
Setup New event for track finder tool
Erase cluster to track association m_seedsfilter is true in the vast majority of all applications, so this is usually done
Erase statistic information
retrieve calo seeds for brem fit
retrieve hadronic seeds for SSS seed filter
if we want to write out the seeds, also call newEvent for the seed-to-track converter
Definition at line 493 of file SiTrackMaker_xk.cxx.
497 data.xybeam()[0] = 0.;
498 data.xybeam()[1] = 0.;
501 if (beamSpotHandle.isValid()) {
502 data.xybeam()[0] = beamSpotHandle->beamPos()[0];
503 data.xybeam()[1] = beamSpotHandle->beamPos()[1];
523 data.inputseeds() = 0;
524 data.goodseeds() = 0;
525 data.findtracks() = 0;
532 if (!calo_rois.isValid()) {
535 data.setCaloClusterROIEM(*calo_rois);
541 if (!calo_rois.isValid()) {
544 data.setCaloClusterROIHad(*calo_rois);
◆ newSeed()
counter for clusters on track
start by checking the first cluster - always needed
lookup if the cluster is already used by another track
add tracks consuming our seed space-points to the trackseed list.
increment cluster counter
now, prepare to check also the second cluster on any strip seed
if we don't have one, nothing to do
otherwise, same game as before. Note that a track consuming both clusters on a strip hit is counted twice into the map
incremenent counter again
check if at least on cluster is not already used by any track. This works since the multiset allows adding the same track multiple times If this is the case, we accept the seed.
in the case of HI reco, we accept any 3-cluster (PPP) seed.
Now we look for the track consuming the largest number of clusters
This is done by looping over all tracks using any of our clusters, and counting the appearance of each track in the multiset. If one single track contains all of the clusters (--> is included n times), we reject this seed.
loop over the list of tracks
if this is a new track, reset the counter
otherwise increment the counter. If this track has all clusters from the seed on it, reject the event
If we have no single track 'eating' all of our clusters, we accept the seed
Definition at line 1092 of file SiTrackMaker_xk.cxx.
1094 std::multiset<const Trk::Track*> trackseed;
1095 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator iter_clusterOnTrack,iter_clusterOnTrackEnd =
data.clusterTrack().end();
1106 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1107 if ((*iter_clusterOnTrack).first!=prd)
break;
1109 trackseed.insert((*iter_clusterOnTrack).second);
1114 prd = spacePoint->clusterList().second;
1118 for (iter_clusterOnTrack =
data.clusterTrack().find(prd); iter_clusterOnTrack!=iter_clusterOnTrackEnd; ++iter_clusterOnTrack) {
1119 if ((*iter_clusterOnTrack).first!=prd)
break;
1120 trackseed.insert((*iter_clusterOnTrack).second);
1128 if(trackseed.size() <
n)
return true;
1139 size_t clustersOnCurrent = 1;
1143 if(
track != currentTrack) {
1144 currentTrack =
track;
1145 clustersOnCurrent = 1;
1150 if(++clustersOnCurrent ==
n)
return false;
1153 return clustersOnCurrent!=
n;
◆ newTrigEvent()
◆ operator=()
◆ pTmin()
double InDet::SiTrackMaker_xk::pTmin |
( |
double |
eta | ) |
const |
|
private |
◆ rapidity()
Definition at line 1173 of file SiTrackMaker_xk.cxx.
1175 if(Sp.size() < 2)
return 0;
1177 Amg::Vector3D delta_sp = Sp[0]->globalPosition() - Sp[1]->globalPosition();
1178 float eta = 2*std::abs(delta_sp.eta());
◆ resetCounter() [1/2]
template<typename T , size_t N, size_t M>
void InDet::SiTrackMaker_xk::resetCounter |
( |
std::array< std::array< T, M >, N > & |
a | ) |
const |
|
inlineprivate |
◆ resetCounter() [2/2]
template<typename T , size_t N>
void InDet::SiTrackMaker_xk::resetCounter |
( |
std::array< T, N > & |
a | ) |
const |
|
inlineprivate |
◆ setTrackQualityCuts()
Definition at line 1030 of file SiTrackMaker_xk.cxx.
1041 else trackquality.
setIntCut(
"UseAssociationTool",0);
1043 else trackquality.
setIntCut(
"CosmicTrack" ,0);
1044 if (simpleTrack) trackquality.
setIntCut(
"SimpleTrack" ,1);
1045 else trackquality.
setIntCut(
"SimpleTrack" ,0);
1047 else trackquality.
setIntCut(
"doMultiTracksProd" ,0);
1058 return trackquality;
◆ ATLAS_THREAD_SAFE [1/17]
◆ ATLAS_THREAD_SAFE [2/17]
◆ ATLAS_THREAD_SAFE [3/17]
◆ ATLAS_THREAD_SAFE [4/17]
◆ ATLAS_THREAD_SAFE [5/17]
◆ ATLAS_THREAD_SAFE [6/17]
◆ ATLAS_THREAD_SAFE [7/17]
◆ ATLAS_THREAD_SAFE [8/17]
◆ ATLAS_THREAD_SAFE [9/17]
◆ ATLAS_THREAD_SAFE [10/17]
◆ ATLAS_THREAD_SAFE [11/17]
◆ ATLAS_THREAD_SAFE [12/17]
◆ ATLAS_THREAD_SAFE [13/17]
◆ ATLAS_THREAD_SAFE [14/17]
◆ ATLAS_THREAD_SAFE [15/17]
◆ ATLAS_THREAD_SAFE [16/17]
std::vector<std::vector<double> > m_usedSeedsEta InDet::SiTrackMaker_xk::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [17/17]
std::vector<std::vector<double> > m_seedsWithTracksEta InDet::SiTrackMaker_xk::ATLAS_THREAD_SAFE |
|
mutableprivate |
◆ m_beamSpotKey
◆ m_caloCluster
◆ m_caloHad
◆ m_cosmicTrack
BooleanProperty InDet::SiTrackMaker_xk::m_cosmicTrack {this, "CosmicTrack", false, "Is it cosmic track"} |
|
private |
◆ m_counterMutex
std::mutex InDet::SiTrackMaker_xk::m_counterMutex |
|
mutableprivate |
◆ m_dholesmax
IntegerProperty InDet::SiTrackMaker_xk::m_dholesmax {this, "nHolesGapMax", 2, "Max holes gap"} |
|
private |
◆ m_distmax
DoubleProperty InDet::SiTrackMaker_xk::m_distmax {this, "MaxDistanceForSCTsp", 5.} |
|
private |
◆ m_etabins
DoubleArrayProperty InDet::SiTrackMaker_xk::m_etabins {this, "etaBins", {}, "eta bins"} |
|
private |
◆ m_etaWidth
DoubleProperty InDet::SiTrackMaker_xk::m_etaWidth {this, "etaWidth", 0.3} |
|
private |
◆ m_fieldCondObjInputKey
◆ m_fieldmode
StringProperty InDet::SiTrackMaker_xk::m_fieldmode {this, "MagneticFieldMode", "MapSolenoid", "Mode of magnetic field"} |
|
private |
◆ m_fieldModeEnum
◆ m_heavyion
bool InDet::SiTrackMaker_xk::m_heavyion {false} |
|
private |
◆ m_indexToEnum
◆ m_ITKGeometry
BooleanProperty InDet::SiTrackMaker_xk::m_ITKGeometry {this, "ITKGeometry", false, "ITK geometry"} |
|
private |
◆ m_LRTmode
BooleanProperty InDet::SiTrackMaker_xk::m_LRTmode {this, "LRTMode", false} |
|
private |
◆ m_multitracks
BooleanProperty InDet::SiTrackMaker_xk::m_multitracks {this, "doMultiTracksProd", false} |
|
private |
◆ m_nclusmin
IntegerProperty InDet::SiTrackMaker_xk::m_nclusmin {this, "nClustersMin", 6, "Min number clusters"} |
|
private |
◆ m_nholesmax
IntegerProperty InDet::SiTrackMaker_xk::m_nholesmax {this, "nHolesMax", 2, "Max number holes"} |
|
private |
◆ m_nwclusmin
IntegerProperty InDet::SiTrackMaker_xk::m_nwclusmin {this, "nWeightedClustersMin", 6, "Min umber weighted clusters(pix=2 sct=1)"} |
|
private |
◆ m_patternName
StringProperty InDet::SiTrackMaker_xk::m_patternName {this, "TrackPatternRecoInfo", "SiSPSeededFinder", "Name of the pattern recognition"} |
|
private |
◆ m_phiWidth
DoubleProperty InDet::SiTrackMaker_xk::m_phiWidth {this, "phiWidth", 0.3} |
|
private |
◆ m_ptbins
DoubleArrayProperty InDet::SiTrackMaker_xk::m_ptbins {this, "pTBins", {}, "pT bins"} |
|
private |
◆ m_pTmin
DoubleProperty InDet::SiTrackMaker_xk::m_pTmin {this, "pTmin", 500., "min pT"} |
|
private |
◆ m_pTminBrem
DoubleProperty InDet::SiTrackMaker_xk::m_pTminBrem {this, "pTminBrem", 1000., "min pT for Brem mode"} |
|
private |
◆ m_roadmaker
◆ m_seedsegmentsWrite
BooleanProperty InDet::SiTrackMaker_xk::m_seedsegmentsWrite {this, "SeedSegmentsWrite", false, "Call seed to track conversion"} |
|
private |
◆ m_seedsfilter
BooleanProperty InDet::SiTrackMaker_xk::m_seedsfilter {this, "UseSeedFilter", true, "Use seed filter"} |
|
private |
◆ m_seedtrack
◆ m_trackinfo
◆ m_trackletPoints
IntegerProperty InDet::SiTrackMaker_xk::m_trackletPoints {this, "trackletPoints", 1, "Select which tracklet points to use"} |
|
private |
◆ m_tracksfinder
◆ m_trigInDetRoadPredictorTool
ToolHandle<ITrigInDetRoadPredictorTool> InDet::SiTrackMaker_xk::m_trigInDetRoadPredictorTool {this, "TrigInDetRoadPredictorTool", "TrigInDetRoadPredictorTool_FTF"} |
|
private |
◆ m_trigInDetTrackFollowingTool
◆ m_useassoTool
BooleanProperty InDet::SiTrackMaker_xk::m_useassoTool {this, "UseAssociationTool", false, "Use prd-track association tool"} |
|
private |
◆ m_useBremModel
BooleanProperty InDet::SiTrackMaker_xk::m_useBremModel {this, "useBremModel", false} |
|
private |
◆ m_useCaloSeeds
BooleanProperty InDet::SiTrackMaker_xk::m_useCaloSeeds {this, "doCaloSeededBrem", false} |
|
private |
◆ m_useHClusSeed
BooleanProperty InDet::SiTrackMaker_xk::m_useHClusSeed {this, "doHadCaloSeedSSS", false, "Hadronic Calorimeter Seeds"} |
|
private |
◆ m_usePix
BooleanProperty InDet::SiTrackMaker_xk::m_usePix {this, "usePixel", true, "flags to set whether to use pixel/sct cluster, irrespective of what is in event"} |
|
private |
◆ m_useSct
BooleanProperty InDet::SiTrackMaker_xk::m_useSct {this, "useSCT", true} |
|
private |
◆ m_useSSSfilter
BooleanProperty InDet::SiTrackMaker_xk::m_useSSSfilter {this, "useSSSseedsFilter", true} |
|
private |
◆ m_useTrigInDetRoadPredictorTool
◆ m_useTrigTrackFollowingTool
◆ m_xi2max
DoubleProperty InDet::SiTrackMaker_xk::m_xi2max {this, "Xi2max", 15., "max Xi2 for updators"} |
|
private |
◆ m_xi2maxlink
DoubleProperty InDet::SiTrackMaker_xk::m_xi2maxlink {this, "Xi2maxlink", 200., "max Xi2 for clusters"} |
|
private |
◆ m_xi2maxNoAdd
DoubleProperty InDet::SiTrackMaker_xk::m_xi2maxNoAdd {this, "Xi2maxNoAdd", 35., "max Xi2 for clusters"} |
|
private |
◆ m_xi2multitracks
DoubleProperty InDet::SiTrackMaker_xk::m_xi2multitracks {this, "Xi2maxMultiTracks", 3., "max Xi2 for multi tracks"} |
|
private |
The documentation for this class was generated from the following files:
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
JetConstituentVector::iterator iterator
MsgStream & dumpStatistics(MsgStream &out) const
char data[hepevt_bytes_allocation_ATLAS]
IntegerProperty m_nclusmin
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
DoubleProperty m_xi2multitracks
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
MsgStream & dumpconditions(MsgStream &out) const
void setIntCut(const std::string &, int)
DoubleProperty m_xi2maxNoAdd
IntegerProperty m_nwclusmin
ToolHandle< InDet::ISeedToTrackConversionTool > m_seedtrack
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
void getFieldZR(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field valaue on the z-r plane at given position works only inside the solenoid.
Scalar eta() const
pseudorapidity method
Eigen::Matrix< double, 2, 1 > Vector2D
static MsgStream & dumpevent(SiTrackMakerEventData_xk &data, MsgStream &out)
BooleanProperty m_useTrigTrackFollowingTool
BooleanProperty m_seedsfilter
Trk::TrackInfo m_trackinfo
Trk::MagneticFieldMode m_fieldModeEnum
BooleanProperty m_useCaloSeeds
ToolHandle< ITrigInDetRoadPredictorTool > m_trigInDetRoadPredictorTool
@ SiSpacePointsSeedMaker_LargeD0
Large d0 for displaced vertex searches.
bool globalPositions(const Trk::SpacePoint &s0, const Trk::SpacePoint &s1, const Trk::SpacePoint &s2, double *p0, double *p1, double *p2) const
const std::string & key() const
Return the StoreGate ID for the referenced object.
static int kindSeed(const std::vector< const Trk::SpacePoint * > &Sp)
StringProperty m_fieldmode
bool empty() const
Test if the key is blank.
StringProperty m_patternName
BooleanProperty m_useHClusSeed
@ u
Enums for curvilinear frames.
static void detectorElementsSelection(SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE)
@ FastField
call the fast field access method of the FieldSvc
static bool isNewTrack(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
DoubleArrayProperty m_ptbins
BooleanProperty m_useTrigInDetRoadPredictorTool
BooleanProperty m_seedsegmentsWrite
InDet::TrackQualityCuts setTrackQualityCuts(bool simpleTrack) const
BooleanProperty m_multitracks
static void globalDirections(const double *p0, const double *p1, const double *p2, double *d0, double *d1, double *d2)
Here, we derive the local track direction in the space-points as the tangents to the estimated trajec...
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
@ SiSpacePointsSeedMaker_LowMomentum
bool globalPosition(const Trk::SpacePoint &sp, const double *dir, double *p) const
This is a refinement of the global position for strip space-points.
DoubleProperty m_phiWidth
Eigen::Affine3d Transform3D
ToolHandle< InDet::ISiDetElementsRoadMaker > m_roadmaker
BooleanProperty m_useSSSfilter
SG::ReadHandleKey< ROIPhiRZContainer > m_caloCluster
@ SiSpacePointsSeedMaker_Cosmic
Entries allowing to distinguish different seed makers.
BooleanProperty m_useassoTool
@ SiSpacePointsSeedMaker_BeamGas
double pTmin(double eta) const
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)
void setDoubleCut(const std::string &, double)
@ BremFit
A brem fit was performed on this track.
SG::ReadHandleKey< ROIPhiRZContainer > m_caloHad
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
BooleanProperty m_ITKGeometry
IntegerProperty m_dholesmax
bool solenoidOn() const
status of the magnets
@ FullField
Field is set to be realistic, but within a given Volume.
BooleanProperty m_useBremModel
@ SiSpacePointsSeedMaker_HeavyIon
void fill(H5::Group &out_file, size_t iterations)
@ NoField
Field is set to 0., 0., 0.,.
std::pair< Amg::Vector3D, Amg::Vector3D > endsOfStrip(const Amg::Vector2D &position) const
Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame...
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - charged.
IntegerProperty m_trackletPoints
DoubleArrayProperty m_etabins
StatusCode initialize(bool used=true)
bool isCaloCompatible(SiTrackMakerEventData_xk &data) const
Eigen::Matrix< double, 3, 1 > Vector3D
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
DoubleProperty m_etaWidth
ToolHandle< InDet::ISiCombinatorialTrackFinder > m_tracksfinder
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
MsgStream & dump(SiTrackMakerEventData_xk &data, MsgStream &out) const override
@ SiSpacePointsSeedMaker_ForwardTracks
Entries allowing to distinguish different seed makers.
bool newSeed(SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const
std::unique_ptr< Trk::TrackParameters > getAtaPlane(MagField::AtlasFieldCache &fieldCache, SiTrackMakerEventData_xk &data, bool sss, const std::vector< const Trk::SpacePoint * > &SP, const EventContext &ctx) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
DoubleProperty m_pTminBrem
struct TBPatternUnitContext S2
BooleanProperty m_cosmicTrack
std::mutex m_counterMutex
void resetCounter(std::array< std::array< T, M >, N > &a) const
helper for working with the stat arrays
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
double e0(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in pre-sampler
DoubleProperty m_xi2maxlink
static int rapidity(const std::vector< const Trk::SpacePoint * > &Sp)
std::vector< statAllTypes > m_indexToEnum
ToolHandle< ITrigInDetTrackFollowingTool > m_trigInDetTrackFollowingTool
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
static void clusterTrackMap(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
@ SiSpacePointsSeedMaker_ITkConversionTracks
ITkConversion Track flag.
IntegerProperty m_nholesmax