Loading [MathJax]/jax/output/SVG/config.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
3 #ifndef FPGATrackSimGenScanBinning_H
4 #define FPGATrackSimGenScanBinning_H
64 #include "GaudiKernel/StatusCode.h"
68 #include <initializer_list>
104 if (
val.size() != 5) {
105 throw std::invalid_argument(
"Not enough parameters in ParSet initialization");
109 operator const std::vector<double>()
const {
return std::vector<double>(this->
begin(),this->
end());}
114 if (
val.size() != 5) {
115 throw std::invalid_argument(
"Not enough parameters in IdxSet initialization");
119 operator const std::vector<unsigned>()
const {
return std::vector<unsigned>(this->
begin(),this->
end());}
129 virtual const std::string &
136 virtual std::vector<unsigned>
scanPars()
const = 0;
188 std::vector<unsigned> retv =
slicePars();
190 retv.insert(retv.end(),
scan.begin(),
scan.end());
239 std::vector<unsigned>
subVec(
const std::vector<unsigned>& elems,
const IdxSet& invec)
const;
242 void setIdxSubVec(IdxSet &
idx,
const std::vector<unsigned>& subvecelems,
const std::vector<unsigned>& subvecidx)
const;
246 std::vector<ParSet>
makeVariationSet(
const std::vector<unsigned> &scanpars,
const IdxSet &
idx)
const;
253 for (
auto &
f :
m_map) {
f.second <<
"\n"; }
260 std::map<std::string, std::fstream>
m_map;
266 static constexpr
unsigned NPars = 5;
320 declareInterface<FPGATrackSimGenScanBinningBase>(
this);
326 virtual unsigned rowParIdx()
const override {
return 4;}
328 virtual std::vector<unsigned>
slicePars()
const override {
return std::vector<unsigned>({0,1}); }
329 virtual std::vector<unsigned>
scanPars()
const override {
return std::vector<unsigned>({2,3}); }
396 :
z1(parset[0]),
z2(parset[1]),
phi1(parset[2]),
phi2(parset[3]),
xm(parset[4]) {}
405 std::pair<double, double>
getXY(
double r,
double phi)
const;
409 std::pair<double, double>
getRotationAngles(
const std::pair<double, double>& xy1,
const std::pair<double, double>& xy2)
const;
412 std::pair<double, double>
rotateXY(
const std::pair<double, double>& xy,
const std::pair<double, double>& ang)
const;
417 std::pair<double, double>
xy1p{};
418 std::pair<double, double>
xy2p{};
432 double zExpected(
const KeyLyrPars& keypars,
double r)
const;
468 declareInterface<FPGATrackSimGenScanBinningBase>(
this);
474 return StatusCode::SUCCESS;
477 Gaudi::Property<double>
m_rin{
this,
"rin", {-1.0},
"Radius of inner layer for keylayer definition"};
478 Gaudi::Property<double>
m_rout{
this,
"rout", {-1.0},
"Radius of outer layer for keylayer definition"};
481 virtual unsigned rowParIdx()
const override {
return 4;}
482 virtual std::vector<unsigned>
slicePars()
const override {
return std::vector<unsigned>({0,1}); }
483 virtual std::vector<unsigned>
scanPars()
const override {
return std::vector<unsigned>({2,3}); }
490 return ParSet({keypars.
z1,keypars.
z2,keypars.
phi1,keypars.
phi2,keypars.
xm});
544 declareInterface<FPGATrackSimGenScanBinningBase>(
this);
550 return StatusCode::SUCCESS;
553 Gaudi::Property<double>
m_rin{
this,
"rin", {-1.0},
"Radius of inner layer for keylayer definition"};
554 Gaudi::Property<double>
m_rout{
this,
"rout", {-1.0},
"Radius of outer layer for keylayer definition"};
555 Gaudi::Property<bool>
m_approxMath{
this,
"approxMath", {
false},
"Use approximate math to emulate possible firmware"};
559 virtual unsigned rowParIdx()
const override {
return 4;}
560 virtual std::vector<unsigned>
slicePars()
const override {
return std::vector<unsigned>({2,3,4}); }
561 virtual std::vector<unsigned>
scanPars()
const override {
return std::vector<unsigned>({0,1}); }
568 return ParSet({keypars.
z1,keypars.
z2,keypars.
phi1,keypars.
phi2,keypars.
xm});
598 double r = hit->
getR();
600 double d0_range = 2.1;
602 double slopelow = - 8.0 * binLowEdge(4,
idx[4]) * (
r / ((r2 - r1) * (r2 - r1))) + d0_range/
r;
603 double slopehigh = - 8.0 * binHighEdge(4,
idx[4]) * (
r / ((r2 - r1) * (r2 - r1))) - d0_range/
r;
606 double xmeffective_in = m_parStep[4] * ((r2 -
r) / (r2 - r1))*((r2 -
r) / (r2 - r1));
607 double xshift_low_in = slopelow * (r1-
r) - 4.0 * xmeffective_in;
608 double xshift_high_in = slopehigh * (r1-
r) + 4.0 * xmeffective_in;
610 double phi_hit = hit->
getGPhi();
614 if (((r1*phi_hit + xshift_high_in) > r1*binLowEdge(2,
idx[2]) &&
615 (r1*phi_hit + xshift_low_in) < r1*binHighEdge(2,
idx[2]))) {
619 double xmeffective_out = m_parStep[4] * ((r2 -
r) / (r2 - r1))*((r2 -
r) / (r2 - r1));
620 double xshift_low_out = slopehigh * (r2-
r) - 4.0 * xmeffective_out;
621 double xshift_high_out = slopelow * (r2-
r) + 4.0 * xmeffective_out;
623 if ((r2*phi_hit + xshift_high_out) > r2*binLowEdge(3,
idx[3]) &&
624 (r2*phi_hit + xshift_low_out) < r2*binHighEdge(3,
idx[3])) {
636 auto tmppars = keypars;
637 tmppars.xm = m_parStep[4] / 2.0;
639 return (std::abs(phiShift(
idx, hit)) <
xrange);
646 double lowz_in = binLowEdge(0,
idx[0]);
647 double highz_in = binHighEdge(0,
idx[0]);
648 double lowz_out = binLowEdge(1,
idx[1]);
649 double highz_out = binHighEdge(1,
idx[1]);
653 if (hit->getZ() < lowz_in + (lowz_out-lowz_in) * (hit->getR()-r1)/(r2-r1))
654 return std::pair<unsigned, unsigned>(0, 0);
656 if (hit->getZ() > highz_in + (highz_out-highz_in) * (hit->getR()-r1)/(r2-r1))
657 return std::pair<unsigned, unsigned>(0, 0);
659 return std::pair<unsigned, unsigned>(rowIdx(
idx), rowIdx(
idx) + 1);
664 StreamManager
streams(
"z_binning");
677 double z_in = binCenter(0,
idx[0]);
678 double z_out = binCenter(1,
idx[1]);
679 double dz_dr = (z_out - z_in)/(r_out-r_in);
680 double w_in = (binHighEdge(0,
idx[0]) - binLowEdge(0,
idx[0])) / 2.0;
681 double w_out = (binHighEdge(1,
idx[1]) - binLowEdge(1,
idx[1])) / 2.0;
682 double dw_dr = (w_out - w_in)/(r_out-r_in);
688 streams.writeVar(
"z_in", z_in);
689 streams.writeVar(
"dz_dr", dz_dr);
691 streams.writeVar(
"w_in", w_in);
692 streams.writeVar(
"dw_dr", dw_dr);
705 StreamManager
streams(
"phi_binning");
720 streams.writeVar(
"y", rotated_coords.y);
721 streams.writeVar(
"x1p", rotated_coords.xy1p.first);
722 streams.writeVar(
"y1p", rotated_coords.xy1p.second);
723 streams.writeVar(
"cosb", rotated_coords.rotang.first);
724 streams.writeVar(
"sinb", rotated_coords.rotang.second);
726 double x_m = binCenter(4,
idx[4]);
728 streams.writeVar(
"x_factor", 4.0 * x_m / (rotated_coords.y * rotated_coords.y));
733 r_in * ((binHighEdge(2,
idx[2]) - binLowEdge(2,
idx[2])) / 2.0);
734 double w_out = r_out*((binHighEdge(3,
idx[3])-binLowEdge(3,
idx[3]))/2.0);
735 double w_x = (binHighEdge(4,
idx[4])-binLowEdge(4,
idx[4]))/2.0;
737 double dw_dr = (w_out - w_in)/(r_out-r_in);
739 streams.writeVar(
"w_x", 4.0 * w_x / (rotated_coords.y * rotated_coords.y));
740 streams.writeVar(
"w_in", w_in);
741 streams.writeVar(
"dw_dr", dw_dr);
756 #endif // FPGATrackSimGenScanBinning_H
void xrange(TH1 *h, bool symmetric)
static double phiFromPars(double r, const FPGATrackSimTrackPars &pars)
std::pair< double, double > xy1p
void setR1(const double r1)
virtual std::vector< unsigned > scanBins() const
virtual std::vector< unsigned > slicePars() const override
std::pair< double, double > rotateXY(const std::pair< double, double > &xy, const std::pair< double, double > &ang) const
double xmForHit(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
FPGATrackSimGenScanPhiSlicedKeyLyrBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
Scalar phi() const
phi method
StreamManager(const std::string &setname)
virtual double phiHistScale() const override
static constexpr double CurvatureConstant
virtual double rowPar([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
std::pair< double, double > getXY(double r, double phi) const
bool inRange(unsigned par, double val) const
Scalar eta() const
pseudorapidity method
void setIdxSubVec(IdxSet &idx, const std::vector< unsigned > &subvecelems, const std::vector< unsigned > &subvecidx) const
virtual std::pair< unsigned, unsigned > idxsetToRowParBinRange(const IdxSet &idx, [[maybe_unused]] FPGATrackSimHit const *hit) const override
void setR2(const double r2)
virtual double sliceVar(FPGATrackSimHit const *hit) const override
static double ThetaFromEta(double eta)
virtual double sliceVar(FPGATrackSimHit const *hit) const override
Scalar theta() const
theta method
FPGATrackSimGenScanKeyLyrHelper(double r1, double r2)
virtual std::vector< unsigned > sliceAndScanIdx(const IdxSet &idx) const
virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
FPGATrackSimTrackPars keyParsToTrackPars(const KeyLyrPars &keypars) const
virtual double etaHistScale() const override
virtual const std::string & parNames(unsigned i) const =0
virtual unsigned rowParIdx() const override
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
const std::vector< std::string > m_parNames
virtual StatusCode initialize() override
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const =0
unsigned binIdx(unsigned par, double val) const
virtual StatusCode initialize() override
virtual const std::string & parNames(unsigned i) const override
virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
virtual std::pair< unsigned, unsigned > idxsetToRowParBinRange(const IdxSet &idx, FPGATrackSimHit const *hit) const
Gaudi::Property< double > m_rin
virtual double phiHistScale() const =0
virtual double rowPar(const ParSet &parset, FPGATrackSimHit const *hit) const override
virtual std::vector< unsigned > scanIdx(const IdxSet &idx) const
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const =0
std::pair< double, double > rotang
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const override
FPGATrackSimGenScanStdTrkBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
virtual double phiHistScale() const override
virtual double sliceVar([[maybe_unused]] FPGATrackSimHit const *hit) const
virtual const std::string & parNames(unsigned i) const override
const IdxSet m_invalidBin
KeyLyrPars(const FPGATrackSimGenScanBinningBase::ParSet &parset)
unsigned rowParBinIdx(double val) const
std::vector< unsigned > sliceAndScanPars() const
virtual std::vector< unsigned > scanPars() const override
virtual double etaHistScale() const =0
static constexpr unsigned NPars
virtual std::vector< unsigned > sliceIdx(const IdxSet &idx) const
virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
virtual std::vector< unsigned > scanPars() const =0
virtual std::vector< unsigned > slicePars() const =0
virtual double etaResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug=false) const =0
IdxSet(const std::vector< unsigned > &val)
ParSet keyparsToParSet(const FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars &keypars) const
Gaudi::Property< double > m_rout
virtual unsigned rowParIdx() const override
virtual std::vector< unsigned > scanPars() const override
::StatusCode StatusCode
StatusCode definition for legacy code.
FPGATrackSimGenScanKeyLyrHelper m_keylyrtool
virtual double phiResidual(const ParSet &parset, FPGATrackSimHit const *hit, [[maybe_unused]] bool debug) const override
std::pair< double, double > getRotatedHit(const std::pair< double, double > &rotang, const FPGATrackSimHit *hit) const
DeclareInterfaceID(FPGATrackSimGenScanBinningBase, 2, 0)
std::pair< double, double > xy2p
virtual unsigned rowIdx(const IdxSet &idx) const
virtual void writeSliceConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const override
virtual std::vector< unsigned > sliceAndScanBins() const
Gaudi::Property< double > m_rin
std::map< std::string, std::fstream > m_map
const std::vector< std::string > m_parNames
FPGATrackSimGenScanKeyLyrHelper()
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
void setIdxSubVec(IdxSet &idx, const std::vector< unsigned > &subvecelems, const std::vector< unsigned > &subvecidx)
virtual StatusCode initialize() override
std::pair< double, double > getRotationAngles(const std::pair< double, double > &xy1, const std::pair< double, double > &xy2) const
const std::vector< std::string > m_parNames
FPGATrackSimGenScanKeyLyrHelper m_keylyrtool
virtual double etaHistScale() const override
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
: FPGATrackSim-specific class to represent an hit in the detector.
Gaudi::Property< bool > m_approxMath
static double parsToTrkPhi(const FPGATrackSimTrackPars &pars, FPGATrackSimHit const *hit)
rotatedConfig getRotatedConfig(const KeyLyrPars &keypars) const
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
double etaShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const
double xExpected(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
virtual unsigned rowBin() const
const IdxSet parsToBin(FPGATrackSimTrackPars &pars) const
virtual bool hitInSlice(const IdxSet &idx, FPGATrackSimHit const *hit) const override
FPGATrackSimGenScanKeyLyrBinning(const std::string &algname, const std::string &name, const IInterface *ifc)
virtual double sliceVarExpected(const ParSet &pars, FPGATrackSimHit const *hit) const override
virtual void writeScanConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const override
virtual double phiHistScale() const override
void scan(TDirectory *td=0, int depth=0)
double parRange(unsigned par) const
virtual std::vector< unsigned > scanPars() const override
#define ATH_MSG_WARNING(x)
Gaudi::Property< double > m_rout
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const =0
Iterable Multidimensional Array Class for FPGATrackSimGenScanTool.
double deltaX(const KeyLyrPars &keypars, const FPGATrackSimHit *hit) const
virtual void writeSliceConsts([[maybe_unused]] FPGATrackSimGenScanArray< int > &valid) const
virtual const FPGATrackSimTrackPars parSetToTrackPars(const ParSet &parset) const override
double binLowEdge(unsigned par, unsigned bin) const
double zExpected(const KeyLyrPars &keypars, double r) const
void writeVar(const std::string &var, T val)
virtual unsigned rowParIdx() const =0
virtual unsigned rowParIdx() const override
virtual double rowPar(const ParSet &pars, FPGATrackSimHit const *hit) const override
virtual double etaHistScale() const override
ParSet(const std::vector< double > &val)
virtual const ParSet trackParsToParSet(const FPGATrackSimTrackPars &pars) const override
double phiShift(const IdxSet &idx, FPGATrackSimHit const *hit, bool debug=false) const
virtual double sliceVarExpected([[maybe_unused]] const ParSet &pars, [[maybe_unused]] FPGATrackSimHit const *hit) const
KeyLyrPars trackParsToKeyPars(const FPGATrackSimTrackPars &pars) const
virtual const std::string & parNames(unsigned i) const override
std::vector< ParSet > makeVariationSet(const std::vector< unsigned > &scanpars, const IdxSet &idx) const
virtual std::vector< unsigned > slicePars() const override
virtual std::vector< unsigned > sliceBins() const
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars parSetToKeyPars(const ParSet &parset) const
double binCenter(unsigned par, unsigned bin) const
virtual std::vector< unsigned > slicePars() const override
ParSet keyparsToParSet(const FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars &keypars) const
Structs that store the 5 track parameters.
static double EtaFromTheta(double theta)
double binHighEdge(unsigned par, unsigned bin) const
static double zFromPars(double r, const FPGATrackSimTrackPars &pars)
std::vector< unsigned > subVec(const std::vector< unsigned > &elems, const IdxSet &invec) const
FPGATrackSimGenScanKeyLyrHelper::KeyLyrPars parSetToKeyPars(const ParSet &parset) const