BSMPT 3.0.7
BSMPT - Beyond the Standard Model Phase Transitions : A C++ package for the computation of the EWPT in BSM models
Loading...
Searching...
No Matches
minimum_tracer.h
1// Copyright (C) 2024 Lisa Biermann, Margarete Mühlleitner, Rui Santos, João
2// Viana
3//
4// SPDX-FileCopyrightText: 2024 Lisa Biermann, Margarete Mühlleitner, Rui
5// Santos, João Viana
6//
7// SPDX-License-Identifier: GPL-3.0-or-later
8
9#pragma once
10
14#include "Eigen/Eigenvalues" // Eigenvalues utility
15#include <BSMPT/minimizer/Minimizer.h> // for Minimizer
16#include <BSMPT/models/ClassPotentialOrigin.h> // for Class_Potential_Origin
17#include <BSMPT/utility/Logger.h> // for Logger Class
18#include <BSMPT/utility/asciiplotter/asciiplotter.h>
20#include <Eigen/Dense> // Eigenvalues matrix
21#include <chrono>
22#include <cmath> // std::pow
23#include <memory> // for shared_ptr
24#include <optional> // std::optional
25#include <stdlib.h> // std::strtol
26
27namespace BSMPT
28{
29
34const double EmptyValue = NAN;
40{
41 NotSet,
42 Off,
43 Success,
44 NoNLOStability
45};
50const std::unordered_map<StatusNLOStability, std::string>
52 {StatusNLOStability::NotSet, "not_set"},
53 {StatusNLOStability::Off, "off"},
54 {StatusNLOStability::Success, "success"},
55 {StatusNLOStability::NoNLOStability, "no_nlo_stability"}};
60enum class StatusEWSR
61{
62 NotSet,
63 Off,
64 Failure,
65 NotBFB,
66 FlatRegion,
67 EWSymNonRes,
68 EWSymRes
69};
74const std::unordered_map<StatusEWSR, std::string> StatusEWSRToString{
75 {StatusEWSR::NotSet, "not_set"},
76 {StatusEWSR::Off, "off"},
77 {StatusEWSR::Failure, "failure"},
78 {StatusEWSR::NotBFB, "non_bfb"},
79 {StatusEWSR::FlatRegion, "flat_region"},
80 {StatusEWSR::EWSymNonRes, "ew_syum_non_res"},
81 {StatusEWSR::EWSymRes, "ew_sym_res"}};
86enum class StatusTracing
87{
88 NotSet,
89 Success,
90 NoCoverage,
91 NoMinsAtBoundaries,
92 NoGlobMinCoverage,
93 Failure
94};
99const std::unordered_map<StatusTracing, std::string> StatusTracingToString{
100 {StatusTracing::NotSet, "not_set"},
101 {StatusTracing::Success, "success"},
102 {StatusTracing::NoCoverage, "no_coverage"},
103 {StatusTracing::NoMinsAtBoundaries, "no_mins_at_boundaries"},
104 {StatusTracing::NoGlobMinCoverage, "no_glob_min_coverage"},
105 {StatusTracing::Failure, "failure"}};
111{
112 NotSet,
113 Success,
114 NoCoexPairs
115};
120const std::unordered_map<StatusCoexPair, std::string> StatusCoexPairToString{
121 {StatusCoexPair::NotSet, "not_set"},
122 {StatusCoexPair::Success, "success"},
123 {StatusCoexPair::NoCoexPairs, "no_coex_pair"}};
128enum class StatusCrit
129{
130 NotSet,
131 Success,
132 FalseLower,
133 TrueLower,
134 Failure
135};
140const std::unordered_map<StatusCrit, std::string> StatusCritToString{
141 {StatusCrit::NotSet, "not_set"},
142 {StatusCrit::Success, "success"},
143 {StatusCrit::FalseLower, "false_lower"},
144 {StatusCrit::TrueLower, "true_lower"},
145 {StatusCrit::Failure, "failure"}};
152{
153 NotSet,
154 Success,
155 NotMet,
156 NaN
157};
162const std::unordered_map<StatusTemperature, std::string>
163 StatusTemperatureToString{{StatusTemperature::NotSet, "not_set"},
164 {StatusTemperature::Success, "success"},
165 {StatusTemperature::NotMet, "not_met"},
166 {StatusTemperature::NaN, "nan"}};
171enum class StatusGW
172{
173 NotSet,
174 Success,
175 Failure
176};
181const std::unordered_map<StatusGW, std::string> StatusGWToString{
182 {StatusGW::NotSet, "not_set"},
183 {StatusGW::Success, "success"},
184 {StatusGW::Failure, "failure"}};
185
193std::ostream &operator<<(std::ostream &os, const StatusNLOStability &status);
201std::ostream &operator<<(std::ostream &os, const StatusEWSR &status);
209std::ostream &operator<<(std::ostream &os, const StatusTracing &status);
217std::ostream &operator<<(std::ostream &os, const StatusCoexPair &status);
225std::ostream &operator<<(std::ostream &os, const StatusCrit &status);
233std::ostream &operator<<(std::ostream &os, const StatusGW &status);
241std::ostream &operator<<(std::ostream &os, const StatusTemperature &status);
242
253{
254 std::vector<double> point;
255 double temp;
256 double potential;
257 bool is_glob_min = false;
258 int EdgeOfPhase = 0;
259
260 bool operator<(const Minimum &a) const { return temp < a.temp; }
261};
262
264{
265private:
266 int WhichMinimizer;
267 bool UseMultithreading;
268
269protected:
273 std::shared_ptr<Class_Potential_Origin> modelPointer;
274
275public:
280 double GradientThreshold = 1e-3;
281
287 double HessianDiagonalShift = 1e-3;
288
293 std::vector<double> HighTemperatureVEV;
294
299 std::vector<Minimum> SavedMinimaFromVEVSplitting;
300
305
312 MinimumTracer(const std::shared_ptr<Class_Potential_Origin> &pointer_in,
313 const int &WhichMinimizer_in,
314 const bool &UseMultithreading_in);
315
319 void FindFlatDirections();
320
325 void ConvertToNonFlatDirections(std::vector<double> &point);
326
332
338 std::vector<double> ConvertToVEVDim(const std::vector<double> &point);
339
347 std::vector<double> GetGlobalMinimum(const double &Temp,
348 std::vector<double> &check,
349 const std::vector<double> &start);
350
357 std::vector<double> GetGlobalMinimum(const double &Temp,
358 const std::vector<double> &start);
359
365 std::vector<double> GetGlobalMinimum(const double &Temp);
366
372 void IsGlobMin(Minimum &min);
373
380 StatusNLOStability GetStatusNLOVEV(const bool &out);
381
388 StatusEWSR GetStatusEWSR(const int &out);
389
398
406 double SmallestEigenvalue(
407 const std::vector<double> &point,
408 const std::function<std::vector<std::vector<double>>(std::vector<double>)>
409 &Hessian);
410
419 std::vector<double> FindZeroSmallestEigenvalue(std::vector<double> point_1,
420 double T_1,
421 std::vector<double> point_2,
422 double T_2);
423
436 std::vector<Minimum> TrackPhase(double &globMinEndT,
437 const std::vector<double> &point_In,
438 const double &currentT_In,
439 const double &finalT,
440 const double &dT_In = 1,
441 const bool &output = true,
442 const bool &unprotected = false);
443
453 std::vector<Minimum> TrackPhase(const std::vector<double> &point_In,
454 const double &currentT_In,
455 const double &finalT,
456 const double &dT_In = 1,
457 const bool &output = true,
458 const bool &unprotected = false);
459
463 bool flat_dirs_found = false;
464
468 std::vector<int> NonFlatDirections;
469
473 std::vector<std::size_t> flat_1D_dirs;
474
478 std::vector<std::vector<std::size_t>> flat_2D_dirs;
479
483 std::vector<std::vector<std::size_t>> flat_3D_dirs;
484
489 std::vector<Eigen::MatrixXd> GroupElements;
490
496 void ReduceVEV(std::vector<double> &vev);
497
503 void ReduceVEV(Minimum &min);
504
514 const std::vector<std::vector<double>>
515 WarpPath(const std::vector<std::vector<double>> &path,
516 const std::vector<double> &T1,
517 const std::vector<double> &F1,
518 const std::vector<double> &T2,
519 const std::vector<double> &F2);
520
535 std::vector<double> LocateMinimum(
536 const std::vector<double> &guess_In,
537 std::function<std::vector<double>(std::vector<double>)> &df,
538 std::function<std::vector<std::vector<double>>(std::vector<double>)>
539 &Hessian,
540 const double &error = 1e-4,
541 const double &const_multiplier = 1e-2,
542 const int &maxiter = 100);
543
550 std::vector<std::string> GetLegend(const int &num_coex_phases,
551 const bool &do_gw_calc);
552};
553
563std::vector<std::vector<double>>
564Create1DimGrid(const std::vector<double> &point,
565 const int k,
566 const double low_value,
567 const double high_value,
568 const int nsteps = 100);
569
578std::vector<std::vector<double>>
579Create1DimGrid(const std::vector<double> &min_start,
580 const std::vector<double> &min_end,
581 const int npoints = 100);
582
586bool almost_the_same(const double &a,
587 const double &b,
588 const double &rel_precision = 0.01,
589 const double &num_zero = 1e-10);
590
595bool almost_the_same(const std::vector<double> &a,
596 const std::vector<double> &b,
597 const bool &allow_for_sign_flip = false,
598 const double &rel_precision = 0.01,
599 const double &num_zero = 1e-10);
600
605struct Phase
606{
610 int id = 0;
611
615 double T_low = 0;
616
620 double T_high = 0;
621
625 std::vector<Minimum> MinimumPhaseVector;
626
630 std::shared_ptr<MinimumTracer> MinTracer;
631
637 void Add(Minimum min);
638
646 Minimum Get(double T);
647
651 Phase();
652
662 Phase(const std::vector<double> &phase_start,
663 const double &initialT,
664 const double &finalT,
665 double &globMinEndT,
666 std::shared_ptr<MinimumTracer> &MinTracerIn);
667
679 Phase(const double &initialT,
680 const std::vector<double> &phase_start,
681 const double &LowT,
682 const double &HighT,
683 double &globMinEndT,
684 std::shared_ptr<MinimumTracer> &MinTracerIn);
685
696 Phase(const std::vector<double> &phase_start,
697 const double &initialT,
698 const double &finalT,
699 std::shared_ptr<MinimumTracer> &MinTracerIn);
700
710 Phase(const double &initialT,
711 const std::vector<double> &phase_start,
712 const double &LowT,
713 const double &HighT,
714 std::shared_ptr<MinimumTracer> &MinTracerIn);
715
724 Phase(const double &initialT,
725 const double &LowT,
726 const double &HighT,
727 std::shared_ptr<MinimumTracer> &MinTracerIn);
728};
729
735{
736 int coex_pair_id;
737 double T_high;
738 double T_low;
739 Phase false_phase;
740 Phase true_phase;
741 double crit_temp = -1;
742 StatusCrit crit_status = StatusCrit::NotSet;
743
747 CoexPhases();
748
752 CoexPhases(const int &pair_id,
753 const Phase &false_phase,
754 const Phase &true_phase,
755 const double &Tlow_in,
756 const double &Thigh_in);
757
761 void CalculateTc();
762};
763
768struct Vacuum
769{
774 double T_low = 0;
775
780 double T_high = 300;
781
788
795
800 int num_points = 0;
801
805 StatusTracing status_vacuum = StatusTracing::NotSet;
806
810 StatusCoexPair status_coex_pairs = StatusCoexPair::NotSet;
811
816 std::shared_ptr<MinimumTracer> MinTracer;
817
822 std::shared_ptr<Class_Potential_Origin> modelPointer;
823
828 std::vector<Phase> PhasesList;
829
834 std::vector<CoexPhases> CoexPhasesList;
835
851 Vacuum(const double &T_lowIn,
852 const double &T_highIn,
853 std::shared_ptr<MinimumTracer> &MinTracerIn,
854 std::shared_ptr<Class_Potential_Origin> &modelPointerIn,
855 const int &UseMultiStepPTModeIn,
856 const int &num_pointsIn = 10,
857 const bool &do_only_tracing = false);
858
866 void MultiStepPTTracer(const double &Temp, const double &deltaT = 0);
867
872 void print(const Phase &phase);
873
884 void setCoexPhases();
885
892 void setCoexRegion(const int &UseMultiStepPTMode);
893
899 void addPhase(Phase &phase);
900
908 int MinimumFoundAlready(const Minimum &minimum);
909
915 void MultiStepPTMode0(const std::vector<double> &LowTempPoint,
916 const std::vector<double> &HighTempPoint);
917
923 void MultiStepPTMode1(const std::vector<double> &LowTempPoint,
924 const std::vector<double> &HighTempPoint);
925
929 bool DoPhasesOverlap(Phase &new_phase, Phase &old_phase);
930
935 bool DoGlobMinOverlap(const Phase &new_phase, const Phase &old_phase);
936
942 void MultiStepPTMode2(const std::vector<double> &LowTempPoint,
943 const std::vector<double> &HighTempPoint);
944
950 void PrintPhasesDiagram(int size = 100);
951};
952
953} // namespace BSMPT
Definition minimum_tracer.h:264
MinimumTracer()
default constructor
Definition minimum_tracer.cpp:759
StatusEWSR GetStatusEWSR(const int &out)
GetStatusEWSR convert double output of IsThereEWSymmetryRestoration to status string.
Definition minimum_tracer.cpp:1139
std::vector< std::vector< std::size_t > > flat_2D_dirs
storage of indices of flat 2D directions in VEV basis
Definition minimum_tracer.h:478
std::vector< double > LocateMinimum(const std::vector< double > &guess_In, std::function< std::vector< double >(std::vector< double >)> &df, std::function< std::vector< std::vector< double > >(std::vector< double >)> &Hessian, const double &error=1e-4, const double &const_multiplier=1e-2, const int &maxiter=100)
Finds stationary points of a function (not only minimas).
Definition minimum_tracer.cpp:54
std::vector< Minimum > TrackPhase(double &globMinEndT, const std::vector< double > &point_In, const double &currentT_In, const double &finalT, const double &dT_In=1, const bool &output=true, const bool &unprotected=false)
TrackPhase with enforced global minimum tracing (= phase is checked if it is still the global minimum...
Definition minimum_tracer.cpp:255
std::vector< Eigen::MatrixXd > GroupElements
List of group elements allowed by the potential.
Definition minimum_tracer.h:489
std::vector< double > FindZeroSmallestEigenvalue(std::vector< double > point_1, double T_1, std::vector< double > point_2, double T_2)
FindZeroSmallestEigenvalue.
Definition minimum_tracer.cpp:148
void IsGlobMin(Minimum &min)
IsGlobMin checks whether current minimum is the global minimum.
Definition minimum_tracer.cpp:1095
std::shared_ptr< Class_Potential_Origin > modelPointer
modelPointer for the used parameter point
Definition minimum_tracer.h:273
void FindDiscreteSymmetries()
Calculates the list of symmetries that leave V unchanged.
Definition minimum_tracer.cpp:965
int IsThereEWSymmetryRestoration()
IsThereEWSymmetryRestoration checks if there is EW symmetry restoration at high temperatures.
Definition minimum_tracer.cpp:1174
std::vector< std::vector< std::size_t > > flat_3D_dirs
storage of indices of flat 3D directions in VEV basis
Definition minimum_tracer.h:483
StatusNLOStability GetStatusNLOVEV(const bool &out)
GetStatusNLOVEV convert bool output of CheckNLOVEV to status string.
Definition minimum_tracer.cpp:1129
std::vector< double > GetGlobalMinimum(const double &Temp, std::vector< double > &check, const std::vector< double > &start)
get global minimum of effective potential
Definition minimum_tracer.cpp:1068
std::vector< std::string > GetLegend(const int &num_coex_phases, const bool &do_gw_calc)
GetLegend derive legend.
Definition minimum_tracer.cpp:2800
std::vector< double > ConvertToVEVDim(const std::vector< double > &point)
ConvertToVEVDim converts point from full to reduced (VEV) dimension.
Definition minimum_tracer.cpp:1054
void FindFlatDirections()
Calculates flat field directions.
Definition minimum_tracer.cpp:776
std::vector< int > NonFlatDirections
storage of all non-flat VEV-directions
Definition minimum_tracer.h:468
bool flat_dirs_found
bool to store whether flat directions are found
Definition minimum_tracer.h:463
double HessianDiagonalShift
Add a constant to the diagonals of the hessian matrix in the LocateMinimum function....
Definition minimum_tracer.h:287
void ConvertToNonFlatDirections(std::vector< double > &point)
Convert point into minimal non-flat space, reduces dimension in case of flat directions,...
Definition minimum_tracer.cpp:948
std::vector< Minimum > SavedMinimaFromVEVSplitting
Vector to store minima that appeared from VEV splittings.
Definition minimum_tracer.h:299
const std::vector< std::vector< double > > WarpPath(const std::vector< std::vector< double > > &path, const std::vector< double > &T1, const std::vector< double > &F1, const std::vector< double > &T2, const std::vector< double > &F2)
WarpPath.
Definition minimum_tracer.cpp:735
void ReduceVEV(std::vector< double > &vev)
Reduce the VEV into the same principal quadrant.
Definition minimum_tracer.cpp:700
std::vector< double > HighTemperatureVEV
Minimum found in IsThereEWSymmetryRestoration()
Definition minimum_tracer.h:293
std::vector< std::size_t > flat_1D_dirs
storage of indices of flat 1D directions in VEV basis
Definition minimum_tracer.h:473
double SmallestEigenvalue(const std::vector< double > &point, const std::function< std::vector< std::vector< double > >(std::vector< double >)> &Hessian)
SmallestEigenvalue calculate Eigenvalues of Hessian and returns smallest.
Definition minimum_tracer.cpp:124
double GradientThreshold
Threshold for the acceptable gradient.
Definition minimum_tracer.h:280
This classes calculates the Bounce action of the potential with a set temperature.
Definition CalculateEtaInterface.h:24
StatusEWSR
Possible electroweak symmetry restoration status.
Definition minimum_tracer.h:61
const std::unordered_map< StatusEWSR, std::string > StatusEWSRToString
Map to convert StatusEWSRToString to strins.
Definition minimum_tracer.h:74
const std::unordered_map< StatusCrit, std::string > StatusCritToString
Map to convert StatusCritToString to strins.
Definition minimum_tracer.h:140
StatusNLOStability
Possible NLO stability status.
Definition minimum_tracer.h:40
const double EmptyValue
Value to be store in the columns without any values.
Definition minimum_tracer.h:34
const std::unordered_map< StatusGW, std::string > StatusGWToString
Map to convert StatusGWToString to strins.
Definition minimum_tracer.h:181
StatusGW
Possible results for the GW and bounce_sol class.
Definition minimum_tracer.h:172
StatusTracing
Possible tracing results.
Definition minimum_tracer.h:87
StatusCoexPair
Possible status for the coex phase.
Definition minimum_tracer.h:111
const std::unordered_map< StatusTemperature, std::string > StatusTemperatureToString
Map to convert StatusTemperature to strins.
Definition minimum_tracer.h:163
StatusCrit
Possible status for the critical temperature.
Definition minimum_tracer.h:129
StatusTemperature
Possible status for the approximated nucleation, exact nucleation, percolation and completion tempera...
Definition minimum_tracer.h:152
bool almost_the_same(const double &a, const double &b, const double &rel_precision=0.01, const double &num_zero=1e-10)
Definition minimum_tracer.cpp:1428
const std::unordered_map< StatusNLOStability, std::string > StatusNLOStabilityToString
Map to convert StatusNLOStability to strins.
Definition minimum_tracer.h:51
const std::unordered_map< StatusCoexPair, std::string > StatusCoexPairToString
Map to convert StatusCoexPairToString to strins.
Definition minimum_tracer.h:120
std::ostream & operator<<(std::ostream &os, const StatusNLOStability &status)
Override << operator to handle StatusNLOStability.
Definition minimum_tracer.cpp:18
const std::unordered_map< StatusTracing, std::string > StatusTracingToString
Map to convert StatusTracingToString to strins.
Definition minimum_tracer.h:99
std::vector< std::vector< double > > Create1DimGrid(const std::vector< double > &point, const int k, const double low_value, const double high_value, const int nsteps=100)
Create1DimGrid creates a 1-dim grid of given size in index-direction.
Definition minimum_tracer.cpp:1381
CoexPhases struct to save pair of coexisting phases (false and true phase)
Definition minimum_tracer.h:735
void CalculateTc()
CalculateTc critical temperature for coexising phase pair.
Definition minimum_tracer.cpp:1291
CoexPhases()
empty constructor
Definition minimum_tracer.cpp:1272
struct to store minimum and temperature
Definition minimum_tracer.h:253
Phase object.
Definition minimum_tracer.h:606
void Add(Minimum min)
Function that adds min to MinimumPhaseVector.
Definition minimum_tracer.cpp:1719
Phase()
empty constructor
Definition minimum_tracer.cpp:1474
double T_low
Lowest temperature of the phase.
Definition minimum_tracer.h:615
double T_high
Highest temperature of the phase.
Definition minimum_tracer.h:620
Minimum Get(double T)
Calculates the minimum of the phase at temperature T. This function assumes that T is inside the temp...
Definition minimum_tracer.cpp:1667
std::shared_ptr< MinimumTracer > MinTracer
MinTracer object.
Definition minimum_tracer.h:630
std::vector< Minimum > MinimumPhaseVector
Set of Minimum that compose the phase.
Definition minimum_tracer.h:625
Complete vacuum structure of the theory for this parameter point.
Definition minimum_tracer.h:769
void MultiStepPTMode0(const std::vector< double > &LowTempPoint, const std::vector< double > &HighTempPoint)
MultiStepPTMode0 single-step PT mode.
Definition minimum_tracer.cpp:1767
void addPhase(Phase &phase)
Adds a phase to the phase list.
Definition minimum_tracer.cpp:2684
int MinimumFoundAlready(const Minimum &minimum)
This function checks if the minimum already exists in one of the phases in the phase list.
Definition minimum_tracer.cpp:2776
void PrintPhasesDiagram(int size=100)
prints the phases from T_low up to T_high on the terminal
Definition minimum_tracer.cpp:2192
std::vector< CoexPhases > CoexPhasesList
List of different phase pairs.
Definition minimum_tracer.h:834
void MultiStepPTTracer(const double &Temp, const double &deltaT=0)
MultiStepPTTracer traces all phases between T_high and T_low assuming that we start and end in a glob...
Definition minimum_tracer.cpp:2423
double T_high
Highest temperature, 300 GeV or set in input file.
Definition minimum_tracer.h:780
StatusCoexPair status_coex_pairs
coexisting phases status code = success, no_coex_pairs
Definition minimum_tracer.h:810
std::shared_ptr< MinimumTracer > MinTracer
MinTracer object.
Definition minimum_tracer.h:816
int num_points
number of equally-spaced intermediate points to check for new phases
Definition minimum_tracer.h:800
std::shared_ptr< Class_Potential_Origin > modelPointer
Model pointer.
Definition minimum_tracer.h:822
void MultiStepPTMode2(const std::vector< double > &LowTempPoint, const std::vector< double > &HighTempPoint)
MultiStepPTMode2 multi-step global minimum coverage PT mode.
Definition minimum_tracer.cpp:2080
void print(const Phase &phase)
print info on phase
Definition minimum_tracer.cpp:2516
double T_high_lowTempPhase
Highest temperature at which low-temperature phase is found to exist.
Definition minimum_tracer.h:794
void setCoexPhases()
setCoexPhases Calculates all coexisting phase pairs irrespective of borders of coexisiting phase regi...
Definition minimum_tracer.cpp:2527
bool DoGlobMinOverlap(const Phase &new_phase, const Phase &old_phase)
DoGlobMinOverlap check for global minimum at left-/rightmost overlap and choose endpoint of previous ...
Definition minimum_tracer.cpp:1863
double T_low
Lowest temperature 0 GeV.
Definition minimum_tracer.h:774
double T_low_highTempPhase
Lowest temperature at which high-temperature phase is found to exist.
Definition minimum_tracer.h:787
std::vector< Phase > PhasesList
List of different phases.
Definition minimum_tracer.h:828
bool DoPhasesOverlap(Phase &new_phase, Phase &old_phase)
DoPhasesOverlap checks if two phases overlap.
Definition minimum_tracer.cpp:1848
void setCoexRegion(const int &UseMultiStepPTMode)
setCoexRegion Calculates all coexisting phase regions with phase pairs included from the phase vector
Definition minimum_tracer.cpp:2564
StatusTracing status_vacuum
vacuum status code = success, no_coverage, no_glob_min_coverage
Definition minimum_tracer.h:805
void MultiStepPTMode1(const std::vector< double > &LowTempPoint, const std::vector< double > &HighTempPoint)
MultiStepPTMode1 multi-step coverage PT mode.
Definition minimum_tracer.cpp:1906
Definition transition_tracer.h:143