From bd46e3501b7accb2c6357f77a77ae1b5ce899106 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Sun, 26 Mar 2023 16:36:58 -0500 Subject: [PATCH 1/9] Merge L1 Tau Trigger changes --- DataFormats/L1TParticleFlow/interface/PFTau.h | 23 +- .../L1TParticleFlow/interface/gt_datatypes.h | 44 +- DataFormats/L1TParticleFlow/interface/taus.h | 19 + DataFormats/L1TParticleFlow/src/PFTau.cc | 8 +- .../L1TParticleFlow/src/classes_def.xml | 6 +- .../Phase2L1ParticleFlow/interface/TauNNId.h | 1 + .../interface/taus/TauNNIdHW.h | 1 + .../interface/taus/weights/b1.h | 15 +- .../interface/taus/weights/b2.h | 24 +- .../interface/taus/weights/b3.h | 24 +- .../interface/taus/weights/b4.h | 6 +- .../interface/taus/weights/w1.h | 514 ++++++++---------- .../interface/taus/weights/w2.h | 68 +-- .../interface/taus/weights/w3.h | 31 +- .../interface/taus/weights/w4.h | 24 +- .../plugins/L1NNTauProducer.cc | 240 +++++++- .../python/L1NNTauProducer_cff.py | 5 +- 17 files changed, 625 insertions(+), 428 deletions(-) diff --git a/DataFormats/L1TParticleFlow/interface/PFTau.h b/DataFormats/L1TParticleFlow/interface/PFTau.h index 92aabc0977ca6..c07e1514894fb 100644 --- a/DataFormats/L1TParticleFlow/interface/PFTau.h +++ b/DataFormats/L1TParticleFlow/interface/PFTau.h @@ -4,6 +4,8 @@ #include #include #include "DataFormats/L1Trigger/interface/L1Candidate.h" +#include "DataFormats/L1TParticleFlow/interface/taus.h" +#include "DataFormats/L1TParticleFlow/interface/gt_datatypes.h" namespace l1t { @@ -11,7 +13,7 @@ namespace l1t { static constexpr float PFTAU_NN_SLOPE = 0.2; static constexpr float PFTAU_NN_OVERALL_SCALE = 1. / 20.1; - static constexpr float PFTAU_NN_LOOSE_CUT = 0.05; + static constexpr float PFTAU_NN_LOOSE_CUT = 0.28; static constexpr float PFTAU_NN_TIGHT_CUT = 0.25; static constexpr float PFTAU_PF_LOOSE_CUT = 10.0; @@ -26,14 +28,16 @@ namespace l1t { PFTau() {} enum { unidentified = 0, oneprong = 1, oneprongpi0 = 2, threeprong = 3 }; PFTau(const LorentzVector& p, + float iVector[80], float iso = -1, float fulliso = -1, int id = 0, int hwpt = 0, int hweta = 0, int hwphi = 0) - : PFTau(PolarLorentzVector(p), iso, id, hwpt, hweta, hwphi) {} + : PFTau(PolarLorentzVector(p), iVector, iso, id, hwpt, hweta, hwphi) {} PFTau(const PolarLorentzVector& p, + float iVector[80], float iso = -1, float fulliso = -1, int id = 0, @@ -49,12 +53,10 @@ namespace l1t { float z0() const { return vz(); } float dxy() const { return dxy_; } + const float* NNValues() const { return NNValues_; } bool passMass() const { return (mass() < 2 + pt() / PTSCALING_MASSCUT); } - bool passLooseNN() const { - return iso_ * (PFTAU_NN_OFFSET + PFTAU_NN_SLOPE * (min(pt(), PFTAU_NN_PT_CUTOFF))) * PFTAU_NN_OVERALL_SCALE > - PFTAU_NN_LOOSE_CUT; - } + bool passLooseNN() const { return iso_ > PFTAU_NN_LOOSE_CUT; } bool passLooseNNMass() const { if (!passMass()) return false; @@ -72,11 +74,20 @@ namespace l1t { } bool passTightPF() const { return fullIso_ < PFTAU_PF_TIGHT_CUT; } + //Tau encoding for GT + void set_encodedTau(l1gt::PackedTau encodedTau) { encodedTau_ = encodedTau; } + l1gt::PackedTau encodedTau() const { return encodedTau_; } //Can be unpacked using l1gt::Tau::unpack() + + //Return the l1gt Tau object from the encoded objects + l1gt::Tau getHWTauGT() const { return l1gt::Tau::unpack(encodedTau_); } + private: + float NNValues_[80]; float iso_; float fullIso_; int id_; float dxy_; + l1gt::PackedTau encodedTau_; }; typedef std::vector PFTauCollection; diff --git a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h index 12cec406492f7..a18449bad443a 100644 --- a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h +++ b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h @@ -35,6 +35,8 @@ namespace l1gt { // tau fields typedef ap_ufixed<10, 8> tauseed_pt_t; + typedef ap_uint<10> tau_rawid_t; + typedef std::array PackedTau; namespace Scales { const int INTPHI_PI = 1 << (phi_t::width - 1); @@ -185,12 +187,12 @@ namespace l1gt { z0_t seed_z0; ap_uint<1> charge; ap_uint<2> type; - iso_t isolation; + tau_rawid_t isolation; ap_uint<2> id0; ap_uint<2> id1; static const int BITWIDTH = 128; - inline ap_uint pack() const { + inline ap_uint pack_ap() const { ap_uint ret; unsigned int start = 0; pack_into_bits(ret, start, valid); @@ -204,6 +206,44 @@ namespace l1gt { pack_into_bits(ret, start, id1); return ret; } + + inline PackedTau pack() const { + PackedTau packed; + ap_uint bits = this->pack_ap(); + packed[0] = bits(63, 0); + packed[1] = bits(127, 64); + return packed; + } + + inline static Tau unpack_ap(const ap_uint &src) { + Tau ret; + ret.initFromBits(src); + return ret; + } + + inline static Tau unpack(const PackedTau &src) { + ap_uint bits; + bits(63, 0) = src[0]; + bits(127, 64) = src[1]; + + return unpack_ap(bits); + } + + inline void initFromBits(const ap_uint &src) { + unsigned int start = 0; + unpack_from_bits(src, start, valid); + unpack_from_bits(src, start, v3.pt); + unpack_from_bits(src, start, v3.phi); + unpack_from_bits(src, start, v3.eta); + unpack_from_bits(src, start, seed_pt); + unpack_from_bits(src, start, seed_z0); + unpack_from_bits(src, start, charge); + unpack_from_bits(src, start, type); + unpack_from_bits(src, start, isolation); + unpack_from_bits(src, start, id0); + unpack_from_bits(src, start, id1); + } + }; // struct Tau struct Electron { diff --git a/DataFormats/L1TParticleFlow/interface/taus.h b/DataFormats/L1TParticleFlow/interface/taus.h index 251f2cb5aea1e..2193aeab21c9e 100644 --- a/DataFormats/L1TParticleFlow/interface/taus.h +++ b/DataFormats/L1TParticleFlow/interface/taus.h @@ -3,6 +3,7 @@ #include "DataFormats/L1TParticleFlow/interface/datatypes.h" #include "DataFormats/L1TParticleFlow/interface/bit_encoding.h" +#include "DataFormats/L1TParticleFlow/interface/gt_datatypes.h" namespace l1ct { @@ -87,6 +88,7 @@ namespace l1ct { pack_into_bits(ret, start, hwIsoOrMVA); return ret; } + inline static Tau unpack(const ap_uint &src) { Tau ret; unsigned int start = 0; @@ -102,6 +104,23 @@ namespace l1ct { unpack_from_bits(src, start, ret.hwIsoOrMVA); return ret; } + + l1gt::Tau toGT() const { + l1gt::Tau t; + t.valid = hwPt != 0; + + t.v3.pt = CTtoGT_pt(hwPt); + t.v3.phi = CTtoGT_phi(hwPhi); + t.v3.eta = CTtoGT_eta(hwEta); + + t.seed_pt = hwSeedPt; + t.seed_z0 = hwSeedZ0; + t.charge = hwCharge; + + t.type = hwType; + t.isolation = hwRawId; + return t; + } }; inline void clear(Tau &c) { c.clear(); } diff --git a/DataFormats/L1TParticleFlow/src/PFTau.cc b/DataFormats/L1TParticleFlow/src/PFTau.cc index 5ddb297144c6a..f19562c03973d 100644 --- a/DataFormats/L1TParticleFlow/src/PFTau.cc +++ b/DataFormats/L1TParticleFlow/src/PFTau.cc @@ -1,4 +1,8 @@ #include "DataFormats/L1TParticleFlow/interface/PFTau.h" -l1t::PFTau::PFTau(const PolarLorentzVector& p, float iso, float fulliso, int id, int hwpt, int hweta, int hwphi) - : L1Candidate(p, hwpt, hweta, hwphi, /*hwQuality=*/int(0)), iso_(iso), fullIso_(fulliso), id_(id) {} +l1t::PFTau::PFTau( + const PolarLorentzVector& p, float NNValues[80], float iso, float fulliso, int id, int hwpt, int hweta, int hwphi) + : L1Candidate(p, hwpt, hweta, hwphi, /*hwQuality=*/int(0)), iso_(iso), fullIso_(fulliso), id_(id) { + for (int i0 = 0; i0 < 80; i0++) + NNValues_[i0] = NNValues[i0]; +} diff --git a/DataFormats/L1TParticleFlow/src/classes_def.xml b/DataFormats/L1TParticleFlow/src/classes_def.xml index b1ed9da86adda..e0b4adf92cac0 100644 --- a/DataFormats/L1TParticleFlow/src/classes_def.xml +++ b/DataFormats/L1TParticleFlow/src/classes_def.xml @@ -33,7 +33,8 @@ - + + @@ -43,7 +44,8 @@ - + + diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h b/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h index ea01a3e2c578d..92ed901ae8db7 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h @@ -15,6 +15,7 @@ class TauNNId { void setNNVectorVar(); float EvaluateNN(); + float *NNVectorVar() { return NNvectorVar_.data(); } float compute(const l1t::PFCandidate &iSeed, l1t::PFCandidateCollection &iParts); private: diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h index dfc67de07b1cd..cee3fa5f2c11c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h @@ -147,6 +147,7 @@ class TauNNIdHW { void initialize(const std::string &iName, int iNParticles); void SetNNVectorVar(); + input_t *NNVectorVar() { return NNvectorVar_.data(); } result_t EvaluateNN(); result_t compute(const l1t::PFCandidate &iSeed, std::vector &iParts); //void print(); diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h index 055cdca44f47b..cc14299dc03eb 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h @@ -1,15 +1,14 @@ //Numpy array shape [25] -//Min -1.101188778877 -//Max 1.014160394669 -//Number of zeros 2 +//Min -0.734825849533 +//Max 1.288661003113 +//Number of zeros 0 #ifndef B1_H_ #define B1_H_ -weight_default_t b1[25] = {0.8776568174, -0.0888396949, -0.1198173761, -0.0066847582, -0.0117284302, - -0.0283335019, 0.0000000000, -1.1011887789, -0.0135271018, -0.0323914811, - 0.5437909961, -0.0175916012, 0.5357875228, -0.3656347692, 0.2423969060, - 1.0141603947, 0.0000000000, -0.7741876245, 0.9614976048, 0.5918464661, - -0.3908625543, -0.2043008506, -0.3004969060, -0.1039064825, 0.5963121057}; +weight_default_t b1[25] = {-0.12057505, -0.05409636, 0.27422485, 0.49775919, -0.73482585, 0.44995615, 0.52624124, + -0.71328187, -0.43596983, 0.10772870, -0.68372047, 0.22197038, -0.53673136, -0.00771000, + 0.06140821, 1.28866100, -0.12453079, 0.16897179, 0.18858922, -0.17255782, -0.24242370, + -0.21922758, 0.40799412, 0.46138164, 0.85911417}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h index 89fbfedcc9606..8a0d269df26f1 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h @@ -1,20 +1,20 @@ //Numpy array shape [10] -//Min -0.819882214069 -//Max 0.973487198353 +//Min -0.380347400904 +//Max 0.551839828491 //Number of zeros 0 #ifndef B2_H_ #define B2_H_ -weight_default_t b2[10] = {-0.8198822141, - 0.7516837120, - 0.6504452229, - -0.0292063691, - -0.0308178961, - 0.9734871984, - 0.1587447226, - -0.3352679014, - -0.0403082110, - 0.9563522935}; +weight_default_t b2[10] = {0.55183983, + 0.36323273, + -0.13108490, + -0.38034740, + 0.08559006, + 0.01700789, + 0.13562575, + -0.32752651, + 0.48282012, + -0.15096320}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h index 685f2119739f9..740a1482c32e2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h @@ -1,20 +1,20 @@ //Numpy array shape [10] -//Min -0.128828719258 -//Max 1.138555169106 +//Min -0.936354994774 +//Max 0.407682240009 //Number of zeros 0 #ifndef B3_H_ #define B3_H_ -weight_default_t b3[10] = {1.0009469986, - -0.0118703200, - 0.5378767252, - 0.6056469083, - -0.0177963823, - 0.3281430006, - -0.0163392760, - 1.1385551691, - -0.1288287193, - 0.5457931757}; +weight_default_t b3[10] = {-0.58549309, + -0.06117089, + -0.24173595, + 0.17925857, + -0.93635499, + 0.18813914, + 0.13134949, + 0.04132507, + 0.40768224, + 0.29987794}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h index f6bfeb3075407..07d968b7f0a5a 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h @@ -1,11 +1,11 @@ //Numpy array shape [1] -//Min -0.572278082371 -//Max -0.572278082371 +//Min 0.023343238980 +//Max 0.023343238980 //Number of zeros 0 #ifndef B4_H_ #define B4_H_ -weight_default_t b4[1] = {-0.5722780824}; +weight_default_t b4[1] = {0.02334324}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h index 36336cfbc1bb0..34e95d5f9469b 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h @@ -1,296 +1,234 @@ //Numpy array shape [80, 25] -//Min -3.289977788925 -//Max 3.700143098831 +//Min -2.676796197891 +//Max 3.172224998474 //Number of zeros 0 #ifndef W1_H_ #define W1_H_ weight_default_t w1[2000] = { - -0.0275631975, 0.1840968430, 0.0017615402, -0.0511833914, -0.0200780518, -0.0042256247, -0.0364550948, - 0.0384720340, -0.0489867255, -0.0225831568, -0.0905258134, -0.0269556697, 0.0101243807, 0.1125041321, - 0.0465865135, 0.0026750101, -0.0463647135, 0.0408502258, 0.0250505060, 0.0417109914, 0.1548669636, - 0.0711558312, 0.1098393202, -0.0506406687, -0.0291560069, -0.6492317319, 0.2198102921, 0.1887888014, - 0.0349061787, -0.0283092018, -1.0081952810, -0.0272938609, 1.0008006096, 0.0338130370, -0.0007302842, - -0.0617842078, -0.0273153540, -0.3009278476, -0.6890239120, -0.2352750599, 0.3157918751, 0.0302133597, - 0.5854118466, -0.6246618629, -0.2802330554, 0.0929862931, -0.8329776525, 1.2516969442, -0.6786904931, - -0.1535482258, -0.7423998713, 0.4872898161, 0.5682671666, 0.0370868929, -0.0022424087, -0.1562964022, - -0.0046133399, -0.1033513546, 0.0123399999, -0.0044850325, -0.2373198271, -0.0159488562, 0.0260351524, - 0.3955667615, 0.2467150390, 0.4625576437, -0.0292643905, -0.7233461738, 0.2747081518, -0.1658903807, - 0.7204536200, 0.8856796622, 0.5151911974, 0.3123708665, 0.1316079199, 0.5885148048, 0.0295058079, - 0.4927506149, 0.0299622882, -0.0262605082, -1.0056939125, -0.0008065328, -1.3022788763, 0.0055024284, - -0.0289485976, 0.2242033482, 0.0042681322, 0.5684482455, -0.3274582922, 0.2859292626, 1.1116024256, - 0.0214838646, -0.6427668929, 0.7815344334, 0.1261892021, 0.2290971130, -1.2223799229, -0.4961220622, - 1.0111559629, 0.6050338745, 0.5045208931, 0.2650687695, -0.7037590146, 0.0297495946, 0.0222873390, - 0.6111736894, 0.0005295388, -0.5739755630, 0.0052538514, -0.0307949428, -0.1104973704, 0.0296904631, - 0.5579725504, -0.1175562739, 0.4259014130, -0.1541411281, 0.0119326226, -0.6764405966, 0.9869034290, - 0.3535545766, 0.0040392140, 0.1765626371, -0.4597047269, -0.6800388098, 0.3780533969, -0.8040967584, - -0.6617923379, -0.7268909812, 0.0169448685, -0.0069919117, 0.8752303720, -0.0284540299, 0.4849638045, - 0.0029829517, -0.0327314287, -0.1543710381, -0.0053135268, -0.2826291621, 0.1962907910, -0.0196111575, - -0.9708192945, 0.0061271563, 0.4227552414, -0.8056537509, -0.5267382264, -1.0296963453, -0.3315088451, - -0.0536016747, -0.1942309588, -0.3144842982, 0.5679528117, -1.9735404253, 0.9347930551, -0.0300587546, - -0.0339946374, -0.7351798415, -0.0418845899, -0.1872052401, -0.0383353606, -0.0133074354, 1.1689522266, - 0.0359998457, 0.3681480289, 0.0382503718, 0.4525004029, 0.7792146206, -0.0130382665, -0.2055867761, - -2.0509274006, 0.8194679022, -1.9078072309, -0.0428799093, -0.3958085477, -0.3275701106, 0.6287524104, - 0.4016268849, 0.3687422872, -0.9715765119, -0.0442459360, -0.0036972165, 0.8315604329, -0.0365467891, - -0.2349074483, 0.0066335849, -0.0011842133, -0.0949637517, 0.0012807772, -0.1491129249, -0.2132425010, - -0.4479730725, 0.3647912443, -0.0349627361, -0.1971846074, 0.8265561461, 0.1157044247, 0.4788555801, - 0.5409259200, 0.4084890485, -0.3301912248, -0.1015564576, 0.0552721694, -0.1001074612, 0.0117295543, - -0.0081389183, -0.0320042521, 0.1011462882, 0.0058988929, -0.0258922745, -0.0222880021, -0.0649969801, - 0.1800477803, -0.0160458256, 0.0775651112, -0.0058082407, 0.1404013932, 0.0138113825, -0.0076866262, - 0.0423264354, -0.0252220053, -0.0024362383, 0.1017613336, -0.1683959067, -0.0741082877, 0.1154814586, - 0.0737652481, -0.0575968660, 0.0525054187, 0.3668349385, -0.0134584792, -0.0107941143, -0.0590788126, - -0.0428394340, 0.1588237137, 0.0307290424, 0.0128393173, 0.0514947511, -0.0478221104, 0.0371550396, - -0.2819215953, 0.3036379218, -0.2870236635, -0.0292269941, 0.1646602750, 0.2382705659, 0.2441869527, - 0.1541452259, -0.4535261393, 0.7680447102, -0.4386458099, -0.2863874733, 0.2696151137, 0.1384935081, - 0.3358684182, 0.0214936174, -0.0302639008, -0.4491205513, 0.0185948946, -0.6768887639, 0.0131031843, - 0.0409274511, -0.3085698485, 0.0321140029, 0.0778901279, -0.3827026486, 0.6066994071, -0.0433584340, - 0.0426415466, -0.5007877350, -0.3528825939, 0.6109297276, -0.0108267041, 0.2303432971, -0.1687270403, - 0.2333775014, -0.1115449220, 0.3741680384, -0.2567584515, 0.5571648479, -0.0433077328, 0.0437150858, - 0.0754363760, 0.0162365548, -1.0052497387, -0.0245950222, 0.0104747498, 0.1608157903, -0.0057357922, - 0.2024615258, 0.2402681261, 0.0871868879, 0.2321397513, 0.0325985588, 0.2439140677, 0.1481058747, - 0.0567306653, -0.3911590278, -0.2595056295, -0.0403101370, 0.6333256960, 0.4113848507, 0.6748535037, - -1.2513297796, -0.7839609385, 0.0329567418, -0.0024726763, -0.1283916235, 0.0336718298, -0.0657793283, - -0.0131994374, -0.0059115877, -0.2056767642, 0.0290575884, -0.4871744812, -0.7013683319, -0.8681734204, - -0.5431044102, -0.0054946318, -0.4296252728, -0.5223876834, 0.3792691529, -0.4847563803, 0.5626786351, - 0.5225822330, -1.0988533497, -0.5452597141, -0.4102534056, 0.1492930502, -1.1875908375, -0.0405668244, - 0.0112952217, -1.0899050236, 0.0220720507, 1.0389884710, -0.0009252541, -0.0136074265, -0.4482565820, - -0.0367560871, 0.5741182566, 0.1035321355, 1.0542180538, -0.9191005826, -0.0282482989, 0.9454858899, - -0.7347041965, -0.7605232000, -2.1308665276, -0.0733887479, 0.4966790676, -0.3489643931, 0.3535223007, - 0.2120424807, 0.0650976971, 0.7401156425, -0.0076716733, -0.0485326760, 0.2756471336, -0.0225947145, - -0.7769182920, 0.0330444016, -0.0061788419, -0.3183784783, 0.0289460383, 0.1563081443, 0.0019258521, - 0.0561595149, 0.2160817832, 0.0098051056, -0.5246943235, 1.1672511101, 0.0638373643, -0.5476062298, - -0.3600058556, -0.4550855160, 0.8063696623, 0.1595083326, -0.4357669950, -0.7297945619, -0.8471348882, - 0.0006241986, -0.0226010084, 0.4875481427, 0.0267590918, 0.5019536018, 0.0281460695, -0.0385978222, - 0.2667064071, 0.0006921819, -0.2500030696, 0.6910701394, -0.3940408528, -0.2922672033, -0.0233109239, - 0.0973728672, -0.4336659908, -0.7539330125, -0.7263449430, 0.7418795824, 0.6334456205, -0.8008428812, - -0.3402410150, -0.0469207838, -0.1598144323, 0.0065430230, 0.0235820860, -0.0462826975, -0.0961134136, - -0.0456765778, 0.1207541078, 0.0114686005, 0.0099800816, 0.0039214366, -0.0475820675, -0.0156605877, - -0.2458557189, 0.0061893822, -0.0153258415, 0.0390211679, 0.0085149910, -0.0563477352, 0.0585263297, - 0.1308556795, 0.0291182809, -0.0494102761, -0.0279191844, 0.0002100755, 0.5546772480, -0.2250652909, - -0.5960002542, 0.0368660912, 0.0351069830, -1.0457959175, -0.0193158034, -0.0687266514, 0.0294584874, - 0.0304741058, -0.6063022017, 0.0479554087, 0.3543168604, -0.1647543758, 0.4151002765, 0.5927023292, - 0.0369217135, 0.1877718866, -0.4108899236, -0.8684850931, -0.0650646091, -0.5334713459, 0.3685727119, - -0.0024711322, 0.3164618611, 0.3290246427, 0.3174677789, 0.5689647198, 0.0119487131, -0.0017232411, - 0.1511385888, -0.0245076306, -0.2573692799, 0.0345959328, -0.0144945998, -0.3072093129, 0.0377629474, - 0.2019411772, -0.0135241337, 0.7739552855, -0.0872047544, -0.0106268898, -0.2725397050, -0.1122459993, - 0.3538818359, 0.2059551775, 0.5403658748, -0.1154610962, -0.4107205868, 0.4160876274, 0.0399494767, - -0.3815422058, 0.4317961633, -0.0273265708, -0.0011414662, -0.4350538254, -0.0436208844, 0.0784541443, - -0.0078072771, -0.0214462057, -0.5320805311, -0.0219098926, -0.5725433230, -0.2413637787, -1.2555998564, - -0.1182860062, -0.0321678072, 0.4499124289, 0.1929507703, 0.1390888542, -0.1651152074, 0.0169600658, - 0.0079317233, 0.4918144941, -0.4162785411, 0.1136433110, -0.7038186789, -0.4256927967, -0.0443868265, - 0.0119067803, 0.6235798001, 0.0439075939, -0.1331029534, -0.0209721494, -0.0101545481, -0.5826767683, - 0.0016922839, 0.0107500199, 0.6613684297, 0.0096620312, -0.8467749953, -0.0212519523, -0.2839061916, - 0.0088990871, -0.3103987575, -0.0481924191, 0.2750563025, 0.7255851626, 0.0206207428, -0.1890642494, - -0.9130650163, -0.3930812180, -0.1302175373, 0.0280487537, -0.0232239123, -0.4841814637, 0.0483692400, - 0.9080810547, -0.0317223892, -0.0076600569, -0.9822427034, -0.0170758255, 0.1477649659, 0.1290871054, - -0.4550983310, -0.4435813427, 0.0177123286, 0.6803352237, -0.1834562719, -1.1524848938, -1.0398877859, - -0.4649286866, 0.4694361389, 0.3323754072, -0.1144977063, 0.4595791698, 0.0876737237, 0.8537898660, - -0.0482646413, 0.0048400983, -0.7586640716, 0.0464481227, -0.5925642252, -0.0411571264, -0.0424648672, - -0.1133467332, 0.0350278206, -0.4751182497, -0.5563073158, -0.1296347231, 0.0313198157, -0.0102985613, - 0.1861536503, 0.5267242193, 0.0368519723, -0.3862408698, 0.2183276862, -0.2191678733, 0.5044022202, - -0.2727276385, -0.5753355026, -0.7795884013, -0.4371784329, -0.0385104008, 0.0453653373, 0.9454209805, - -0.0213055965, 0.4308182895, -0.0147529943, 0.0073038843, -0.3879997432, -0.0085734846, -0.3646063507, - 0.8428437114, -0.5474193096, -0.1213414371, -0.0447582118, 0.3180017769, -0.6903175712, -1.5116691589, - -0.4761842191, 0.3577857614, 0.8554373980, -0.3223759830, -0.3117367029, 0.0420887396, 0.0089452937, - -0.0616157129, 0.0011440844, -0.0256317016, -0.0264497921, -0.0221411716, 0.0136214150, -0.0284178350, - 0.0181288514, -0.0289485678, 0.0008052384, 0.0214692168, -0.0017591950, 0.0450270809, -0.4118867815, - -0.0074286349, 0.0637306646, -0.0332321078, -0.2063446492, 0.1343170851, 0.0676441118, -0.0789061263, - 0.0039714044, 0.0469334908, -0.4258472323, -0.0031129576, 0.1694611311, -0.0229218155, 0.0065105185, - -0.1568274647, 0.0442711748, -0.4040796161, 0.0128678223, 0.0067370874, -0.0270004030, -0.0364642292, - -0.2776701748, -0.2626651525, -0.2820671797, 0.6879999638, -0.0167431831, -0.0217852611, 0.2239535451, - 0.1765681207, 0.0004533622, 0.1616515517, 0.4690179527, -0.2932064235, -0.1863811612, -0.4326858819, - 0.5367636681, 0.8232741952, -0.0076241791, -0.0208735596, 0.3781396747, 0.0083103403, 0.0368625633, - -0.0208129082, -0.0092617041, -0.0518519543, 0.0075824461, -0.2745567262, 0.7515665889, -0.3270216882, - -0.1037794799, 0.0054932609, -0.0004360063, 1.5855798721, -0.5013164282, 0.2409702539, 0.5102282763, - 0.0323204994, 0.0443114154, -0.0743079633, 0.5015363693, -0.4499847591, -0.5266178250, -0.0303816795, - 0.0113547444, -0.4145325720, 0.0155029558, -0.5903900266, 0.0132576860, -0.0552800857, -0.3000935614, - -0.0300054196, -0.1883252263, 0.1547352970, -0.4416965246, 0.0176533815, 0.0298686288, 0.0877649859, - 0.3754878938, 0.5241811872, -0.1328917295, 0.1846721023, -0.0684443712, 0.0305131841, -0.0899124667, - 0.0746154487, -0.2723464668, 0.0320945904, -0.0005060069, 0.0357921608, 0.4950470328, -0.0148497112, - 0.1005883962, 0.0352807678, 0.0172633622, -0.0869081467, -0.0152430534, -0.1883669794, -0.2390221804, - 0.0668689683, -2.5013699532, -0.0269711744, -0.1674331278, 0.1789376289, -1.2393864393, -0.2605231106, - 0.4330428243, 0.2570144534, -0.0086775580, -0.1490048021, -0.5241391063, -0.0278369375, 0.2762182951, - 0.0199576281, 0.0066871047, 0.7151912451, -0.0024265163, 0.3064782321, 0.0487763546, -0.0112981694, - -0.2035348862, 0.0493254997, -0.2012788653, 0.1452431232, -0.2540090382, 0.2975836694, -0.0369952545, - 0.0682778209, -0.1628300995, 0.0986325592, -0.7109689116, 0.3238805830, 0.5708168745, 0.0253408048, - -0.2716795206, 0.9938709736, -0.0739620626, 0.0717267692, 0.0293982662, -0.0265223514, -0.3170827329, - 0.0181263424, -0.7185852528, 0.0195867456, 0.0033374443, 0.3110558093, 0.0028834590, 0.2549804747, - -0.4352625012, -0.0825110674, 0.0671706498, 0.0240719654, -0.5600070953, 0.3716776669, 0.6693077683, - -0.1732302159, -0.0300535280, -0.3385710716, -0.0674085692, 0.1381938905, -0.8376773596, -0.2104889005, - -0.3976771533, 0.0174542665, -0.0294472463, 0.5069975257, 0.0314344503, 0.1266442239, -0.0184428375, - -0.0113735562, -0.6051728725, -0.0321377702, -0.2472074926, 0.4815337062, -0.2199861258, 0.7497748137, - -0.0454755314, 0.3922365904, -0.6062285304, -1.6602826118, -0.6259492040, 0.5432906747, 0.8129641414, - -0.1297754496, -0.1781818271, -0.0433640033, 0.0857717618, -0.0634498149, -0.0337122343, 0.0376215614, - -0.1296353936, -0.0357829705, 0.0735422820, -0.0182135999, 0.0211684871, -0.0388115384, 0.0320480876, - 0.0199006833, 0.0938707665, -0.0393314250, -0.2282720208, -0.0348386541, 0.0919079781, -0.0631114319, - -0.2506425679, -0.1178641915, 0.0474984273, -0.0599489510, 0.0388556086, 0.0208455287, 0.1706432998, - -0.3912288845, 0.0646863803, -0.0412294790, 0.0065013990, -0.6113595366, -0.0309886932, -0.4187072515, - 0.0181138869, 0.0137019735, 0.5188140869, -0.0054722503, -0.1139752790, -0.2633494437, -0.1226351783, - -1.1872086525, 0.0032318123, 0.1287258714, -0.0034283027, 0.2808924615, 0.0632052049, -0.2965689003, - -0.0082631623, 0.3466319144, -0.2775699794, 0.2096666694, -0.2093079388, -0.2335083485, -0.0226903427, - -0.0181468017, 0.2967273891, -0.0483438261, 0.2503305972, -0.0409849882, 0.0516897514, 0.3434285820, - -0.0291223079, -0.1667241752, -0.1001765728, 0.2396512926, 0.5946724415, -0.0358862393, -0.0951117501, - -0.1029280201, -0.2618341744, 0.3290935159, 0.0175822675, -0.4756616056, -0.1702777147, 0.1173091084, - 0.6074576974, 0.1073398814, -0.3684058785, 0.0480201729, -0.0015499704, 0.5559393167, 0.0338939913, - -0.4553005397, 0.0349906124, 0.0031389890, -0.3105476499, 0.0079499427, -0.1186323687, 0.2069108784, - -1.0224379301, 0.0116371298, -0.0004839785, 0.0869038552, 0.0972586870, -0.0391659029, 0.2789616585, - 0.0861895606, 0.0461108424, -0.1098890752, 0.0860277712, -0.4243687093, -0.0834341794, 0.0190984122, - -0.0063930326, 0.0137155987, 0.7129291892, -0.0202291254, 0.3586359024, -0.0238374118, -0.0155034000, - -0.7634453177, 0.0053239241, -0.4975944161, -0.0906796083, -0.3312668502, -0.2476382852, -0.0328092724, - 0.1509385556, 0.2201244086, -0.6723868847, -0.1287524849, 0.9522626996, 0.4031330645, -0.0488846414, - -0.6026415229, -0.0940965116, 0.2768926620, -0.8198524117, -0.0326367989, -0.0255582817, 0.8920773268, - -0.0109668858, 0.3828944266, 0.0119301453, -0.0123951333, -0.1709069312, 0.0238716714, -0.1706337482, - 0.3240826428, 0.0393569022, 0.4952742457, -0.0015368350, -0.0197133217, 0.0394634083, -0.2541337311, - -0.2783952951, 0.3719478846, -0.1173014492, -0.3776190877, -0.4898634553, 0.4771644473, -0.1552882195, - -0.0168435965, 0.0220468529, -0.0234047771, -0.1242834181, -0.0035077333, -0.7012911439, 0.0329820998, - -0.0014328394, 0.2872559428, -0.0355794802, 0.2669203281, 0.0872863978, 0.0738353357, -0.4003589749, - 0.0020517111, -0.4586439133, 0.5128808618, 0.0952107608, 0.0757242739, -0.1753569543, -0.0696651936, - -0.2118204683, 0.2049609423, -0.7322594523, -0.2756121457, -0.3130523264, 0.0488914773, 0.0454624332, - 0.1791424453, 0.0192562677, 0.6879280806, -0.0109258108, -0.0589247681, -0.5332060456, -0.0355291367, - -0.6683956981, 0.7817873955, -0.3539718986, 0.5217394829, 0.0450545587, 1.2865257263, -0.4225950837, - -0.9668461084, -0.2438656390, 0.6077676415, 0.7250677347, 0.2058400363, -0.6094794869, -0.0127743725, - -0.0269410182, -0.0443292111, -0.0047174916, -0.0286554936, 0.0164860860, 0.0216391198, 0.0000547430, - 0.0034230519, -0.0193539821, -0.0048638578, -0.0331782587, -0.1216600835, 0.0783850402, -0.2200009823, - -0.5484527349, -0.0338481553, 0.1067893505, 0.0193015374, 0.0190553423, 0.0077600847, 0.0194670819, - 0.0364076868, 0.0389590003, -0.0194327328, -0.5235614777, -0.3690682352, -0.0535990894, 0.0222456716, - -0.0237181541, -0.3437302709, 0.0336950310, -0.2471015453, 0.0347703956, 0.0105486372, -0.1146475747, - -0.0128530264, -0.7887002230, -0.2139095515, -0.2573784292, 0.5604884624, -0.0414251201, 0.0268225595, - -0.0052164104, -0.4037641585, 0.5882292390, 0.1508283466, 0.0373637229, -0.5168998837, -0.5980069041, - 0.0902188942, -0.3578412831, 0.4200122952, 0.0489844419, -0.0343268141, 0.2538180053, -0.0488515757, - 0.1652212143, 0.0102397157, -0.0399376042, 0.6666966081, -0.0027583018, 0.6611607671, 0.2796159685, - 0.3751438558, 0.2801287174, -0.0047272928, -0.7540323734, -0.1706158668, -0.4846105278, -0.5296305418, - -0.0237145554, 0.0754747763, -0.4194953144, 0.4079932868, 0.1623633057, -0.3142811954, -0.6698747873, - -0.0349363089, 0.0393353440, 0.4525082111, 0.0487212576, -0.1602965444, 0.0442362241, -0.0024233470, - -0.2512975633, 0.0364286639, -0.4211257696, -0.1201224327, -0.7451843023, -1.2653163671, 0.0160685070, - 0.0687002018, -0.1986775994, -0.1360448450, -0.0749344677, -0.1515689939, 0.1962397844, -0.2993898094, - -0.1054843217, -0.5224688649, -0.0881583691, 0.3346495926, -0.0048073307, 0.0400011428, 0.7032503486, - 0.0217781998, 0.5896643400, -0.0448040739, 0.0197922196, -0.5217272639, -0.0366307609, -0.5235586762, - 0.7335209846, -0.6986209154, -1.3687721491, 0.0277355798, 0.8085011244, 0.1786081195, -0.1857656986, - -0.1415506601, 0.6941767931, 0.5569129586, 0.0070422618, -0.7057129145, -1.6167650223, 0.4103705585, - -0.6340282559, -0.0154078826, 0.0446273200, 0.8124088049, -0.0420845263, 0.1450776011, 0.0106168017, - 0.0039060870, -0.3815846443, 0.0423646010, 0.0475320518, 0.3476380408, -0.5829945207, -0.6226695180, - -0.0224926602, 0.6960749626, 0.2341582626, -1.4045158625, 0.2748194635, -0.0400918908, -0.0817347243, - 0.0842497200, 0.1486685127, 0.5849114060, 0.1625861973, -0.2580044866, 0.0302444436, -0.0218294747, - 0.1385417581, -0.0310730822, -0.5560604930, -0.0437082313, -0.0103870695, -0.0567841679, -0.0021472089, - 0.0536326170, 0.1611684412, -0.1831469238, 0.2545364499, -0.0459524058, -0.1049438119, 0.2443634421, - 0.0227323826, 0.1885968298, 0.0852972195, 0.1999463588, 0.0207023229, 0.0881121606, -0.5414125919, - -0.3002434075, -0.1424637288, 0.0200603493, 0.0113324746, 0.5935490727, 0.0293819644, 0.6670605540, - -0.0253547784, -0.0393749438, -0.7709679008, -0.0365138873, -0.4396755397, 0.6884223819, -0.2611112595, - -1.8774693012, -0.0382625945, 0.8725510836, -0.4928644598, -0.2189266533, 0.2001470923, 0.5869948268, - 0.5472967625, 0.7693622112, -0.5423539877, -0.0667493343, 0.0380085669, -0.0239525307, -0.0449014418, - 0.0077688210, -0.1430912316, 0.0260939710, 0.0525648743, 0.0446856730, 0.0048831305, 0.1151780188, - -0.0031947494, -0.0155405290, -0.1372660995, -0.0895780846, -1.4037353992, -0.0026806965, -0.1067251340, - 0.0272771921, -0.0559473746, 0.0230121389, -0.0061843856, 0.0015697938, 0.0832877457, -0.0696524903, - -0.3867762685, 0.8635419607, -0.0891173854, 0.0034306645, -0.0194078218, -0.6117094159, -0.0385323875, - 0.0980508998, 0.0028843454, 0.0030354180, -0.5710870028, -0.0170821771, -0.3774715364, -0.0032055390, - -0.0651721805, 0.0269364621, 0.0278133489, -0.2507851720, 0.2601221800, 0.6104131937, -0.2581859231, - 0.4611452520, 0.1026301757, 0.5664731860, -0.4654701352, 0.8525296450, -0.7390667200, 0.1472975314, - -0.0111428984, -0.0404090881, 0.3386467993, 0.0248792283, -0.2538463473, -0.0259546135, -0.0171344150, - -0.3922840655, -0.0310988780, -0.1847026944, -0.1067288741, 0.0350882299, 0.0545480996, -0.0285120849, - -0.1929141283, 0.1348992586, 0.4968050718, 0.2134823650, -0.0042959554, -0.3756020069, -0.0269969516, - -0.1611916125, -0.2077403367, -0.2371500582, -0.6373690367, -0.0304267760, -0.0349376425, 0.7959181666, - -0.0316127092, -0.1119868234, 0.0337211527, -0.0071961484, -0.0262746271, 0.0020413511, -0.2010388523, - 0.2658497691, 0.0118317511, -0.5845263004, 0.0029303320, -0.0133678624, -0.0977094546, -0.3142478466, - 0.3855778277, 0.2161775231, 0.2007939517, -0.0901769325, -0.1543459892, 0.0224080794, 0.2095545381, - 0.4173698127, -0.0358691216, -0.0145311728, 0.9287641644, 0.0244402178, 0.9638146758, 0.0150271170, - -0.0541157387, -0.4310163558, -0.0316328891, -0.4609151185, 0.1989493966, -0.3272954524, -0.7784904838, - -0.0165412538, 0.2622301280, -0.6295908093, 0.2951786220, 0.2422311753, 0.8495292068, 0.6268782020, - 0.1836655438, -0.6979805231, 0.1071579084, -1.9053711891, 0.5337630510, -0.0393848419, 0.0199204572, - 0.3263296187, 0.0102138408, 0.4045059979, 0.0067795031, 0.0336568840, -0.0957986638, -0.0441556461, - -0.4123474360, 0.1715452522, -3.2899777889, -0.1192793176, -0.0152495131, -0.1897758394, 0.1874453872, - -0.6838648319, 0.4448648095, 0.3387575150, 0.7274349332, -0.2438905537, -0.1766054630, 0.2571379244, - -0.3342683911, -0.0333744362, -0.0496788397, -0.0060048699, 0.0281973872, 0.0298788287, -0.5464175940, - -0.0316888839, -0.0078338645, -0.0942152888, 0.0147767402, -0.0103216004, -0.0674225315, -1.3291354179, - -0.3171196878, 0.0113801248, 0.0392228104, 0.2852381170, -0.1502476782, 0.0695211142, 0.0142092993, - 0.2161683738, 0.1448096037, 0.1512847692, -0.8002882004, -0.0595479496, 0.5712021589, -0.0227902662, - 0.0353799127, 0.1896413714, -0.0004423037, 0.9913336039, -0.0143754967, -0.0395907573, -0.6992436051, - 0.0183372013, -0.8203246593, 0.5868998766, -0.4024432600, -1.3700423241, -0.0025487542, 0.9975725412, - -0.2618308365, -0.6395715475, 0.2104645967, 0.5754511952, 0.7471023798, 1.0783131123, -0.7854349017, - -0.0068165897, 0.1311189681, 0.1236141175, -0.0060322173, -0.0189587362, -0.2687618136, 0.0417966880, - 0.0198493917, -0.0133285644, 0.0169729777, 0.0958536118, -0.0073037259, 0.1229945868, -0.1836925745, - 0.1018262282, -1.1953188181, -0.0320160165, -0.1015609577, -0.0014065404, 0.0876024812, -0.0653611943, - -0.0779995173, -0.0327110328, 0.0981066823, 0.0758420303, 0.4111435711, -0.3568826318, 0.3434506059, - 0.0279183425, -0.0183128715, -0.2883189619, -0.0283980723, -0.2920386493, 0.0278911013, -0.0313658006, - 0.6201892495, 0.0323423184, -0.0395300500, -0.4890304804, -0.3237088025, 0.1850017756, -0.0082991496, - -0.2044751197, -0.2546317875, -0.1463038176, 1.0237698555, 0.2653035820, 0.1094458923, -0.3526209593, - 0.0814269111, -0.1548318565, 0.4255304635, -0.1347719580, -0.0227344986, -0.0373442285, -0.1933275908, - 0.0265721716, -0.1351318061, -0.0286027025, 0.0318547115, -0.4003780782, 0.0147478320, 0.0300735664, - 0.2054808438, 0.3550937772, 0.0463373661, -0.0228597168, 0.0476531982, -0.4984072745, 0.8174489141, - 0.1830573529, 0.2413281500, 0.1680587232, -0.1579141021, 0.3081762493, -0.1589800268, -0.1786419451, - 0.5353065729, -0.0170124173, 0.0236417912, 1.8752166033, 0.0207607262, 0.3994472623, -0.0423962586, - -0.0356416479, -0.1865476072, 0.0499989428, -0.2910636365, 0.3568102717, -0.8324245811, -0.4837874174, - 0.0449443720, 0.3211084306, 0.4314349890, -0.5057532787, 1.0553083420, 0.4730113745, 0.1899735034, - 0.3485227227, -0.4126980603, -0.4424137771, -0.1170865819, 0.4439237416, 0.0269787647, 0.0181932710, - 0.3949256539, 0.0440328233, 0.2834262550, -0.0164299011, 0.0375958458, -0.2360804081, -0.0036757477, - -0.8198620081, -0.0002998045, -0.7792702317, -0.5419439077, -0.0194247607, 0.2417463362, -0.4271444976, - -0.0764846727, 0.1383299977, 0.5036548972, 0.2920281589, 0.8199911118, -0.5878306627, -1.2778795958, - 0.7124420404, 1.3059445620, -0.0286112316, 0.0316767804, 0.1078707576, 0.0366549157, 1.7090015411, - 0.0080462322, 0.0222956222, -0.1941069961, 0.0396030061, -0.0920261592, 1.0979866982, -0.7296712399, - -0.5150372982, 0.0039320104, 0.6271898746, -0.8605564833, -1.2512462139, 1.1115969419, 0.0502445102, - -0.0068334118, 0.1084898785, -0.3850990832, 0.4214206636, -1.0038114786, 0.2044304609, 0.0078590885, - -0.0108357556, -0.3498951197, -0.0056974664, -0.2641506791, -0.0335249528, -0.0272149052, -0.3646773696, - -0.0355445854, -0.5063526630, 0.3608566523, -0.4627398551, -0.2056866288, 0.0314389728, 0.3119669855, - -0.0745992735, 0.2019843161, 0.4260723293, 0.1498487443, 0.5227327943, 0.1954478025, -0.3949721754, - -1.0407074690, -0.2556259632, 0.5501220226, -0.0202705264, 0.0399887599, 0.0332411751, 0.0181643404, - 0.4340880811, -0.0158595555, 0.0280248299, -0.7869564891, -0.0438322090, -0.2051930130, 0.5463204384, - -0.2414627969, -1.2405043840, 0.0408474468, 0.2430282831, -0.8686886430, -0.3778093159, 0.2200338393, - 0.8543496728, 1.0129809380, 0.9148719907, -0.1336318254, -0.0621013120, -0.0424140245, 0.0459826365, - -0.0464573763, -0.0030330308, -0.2646920979, -0.0006133430, -0.0221885610, 0.0077072424, -0.0334133096, - 0.0190080479, -0.0366195552, 0.0594232604, -0.0967265293, 0.1483206749, -1.0690969229, 0.0136405267, - -0.2495157272, -0.0741728023, 0.1747024208, -0.0292489193, 0.0105351172, -0.1137630865, -0.0775343254, - 0.0247715060, -0.4604588449, 0.5981205702, -0.6210471988, -0.0354419947, -0.0266215336, 0.1559787691, - -0.0235465523, 0.6589985490, -0.0131545644, -0.0098283142, 0.1084643453, -0.0228822827, 0.2508457601, - 0.3650615811, 0.1267749220, -0.0162414368, -0.0315973312, 0.7237749696, -0.0600906387, 0.8835039735, - 1.2918497324, 0.1131694168, -0.1085247472, -0.2277299166, 0.0366072915, 0.1433445960, 0.3335800171, - 0.3501141369, 0.0115572810, 0.0318727382, 0.5640623569, -0.0335407257, 0.0249900799, 0.0038993331, - -0.0248970166, -0.2782051861, -0.0410117395, 0.2523306310, 0.3517462909, 0.2121896595, -0.1162448376, - 0.0054595582, -0.4676983058, 0.4563185275, -0.1712279469, -0.1131843030, 0.5749317408, 0.0786591992, - 0.0123988315, 0.2857176960, 0.1028187424, -0.4653768241, -0.0813126788, -0.0188388824, 0.0421144478, - 0.9026269317, -0.0141519532, 0.1383557618, 0.0367890857, 0.0053361808, -0.0178884547, 0.0094673038, - -0.2738531828, 0.3822990954, -0.1030377969, -0.3883157372, 0.0101224557, 0.1001654044, -0.0747024119, - 0.6006180048, 0.6424841285, 0.1733836979, 0.4141313434, 0.2577677667, 0.0196546391, 0.0306565147, - -0.0644585490, 1.1456140280, -0.0261694919, -0.0351552740, 0.0118874945, -0.0269273873, 0.2447904199, - 0.0277601518, -0.0310750119, -0.8901538253, -0.0329257250, -0.7822555900, 0.8472951651, -0.5997539163, - -0.5599926710, -0.0345624685, -0.0284180790, -0.3063721359, 0.1183450669, 0.7996146083, 1.3596835136, - 0.5488421917, 0.2623258829, -0.8360809088, -1.0534168482, 0.2761985064, 0.0701652467, 0.0265866555, - -0.0175058469, -0.5787774324, 0.0162952580, -0.5390081406, 0.0217363723, 0.0048607374, 0.5082998276, - 0.0298146345, 0.7032709122, -0.4476767182, 0.6333382726, -0.0702254623, -0.0111619607, -0.2203527093, - -1.3252762556, 0.1918622106, -0.5391735435, -0.6053310037, -0.4060880840, -0.5177740455, 0.7152566314, - -0.1525194645, -0.7066713572, -0.1851055920, -0.0405507907, -0.0179623142, 0.6384886503, -0.0350592025, - 0.2167061567, -0.0110048875, 0.0403056815, 0.1018915400, 0.0335987471, 0.1785299480, 0.0907991529, - -0.9045218825, -0.2081759572, 0.0145147778, 0.2902441025, 0.1892959177, -0.6062126756, -0.1715902835, - -0.2030725628, -0.0454456098, -0.0325598530, 0.0316967256, -1.0412836075, 0.1042325199, 0.7389448881, - -0.0315108448, 0.0161139406, 0.6608737111, -0.0278646350, 0.6341997385, 0.0240364224, 0.0289974492, - -1.0020937920, -0.0050924048, -0.8173771501, 0.0980714336, -0.6252622604, -1.0978114605, 0.0140398778, - 0.4661926031, -0.0560285747, -0.5825963616, 0.9664432406, 0.4695834517, 0.1042769328, 0.6328668594, - -0.8096875548, -0.1974821538, 0.0603384487, 0.1525808424, 0.0068174973, 0.0268414356, -0.7763271332, - 0.0174683444, 0.2644013166, -0.0111980326, -0.0471895151, -0.0116205923, -0.0227108840, -0.1594015211, - 0.0952647924, 0.0387158804, -0.9336721897, 0.0474351905, 0.0543322414, -0.1767173111, -0.0091935284, - -0.1534161121, 0.0854202509, 0.0338279344, 0.1157898754, -0.0844622776, 0.0474394448, 0.3694055676, - -0.6652798057, 0.0305196084, -0.0066180341, 0.8347792625, 0.0477602221, 0.4235672951, -0.0132840648, - 0.0128012868, -0.0184550937, 0.0343486406, 0.0460694805, -0.1225851104, -0.1292703748, -0.1817471832, - -0.0478985421, 0.2783367634, -0.5327829719, -0.2661572695, 0.8686574101, -0.0709094033, -0.0582687892, - 0.0423842631, -0.1033001021, 0.6995526552, -0.1032795608, 0.3756015301, -0.0467913263, 0.0386442803, - 0.2745943069, 0.0066912882, -0.1094110534, -0.0350673199, -0.0435243323, -0.2208653539, 0.0376370810, - 0.6540331244, -0.8201739788, 0.1041640341, 0.0678936169, 0.0339470543, -0.1251623631, -0.5500101447, - 0.2536099851, -0.5599420071, -0.8515334129, -0.8221063614, 0.0267463233, 0.3377620280, 0.0956432298, - -0.7992894650, 0.0376259387, -0.0492405891, 0.0248947479, -0.8014723063, 0.0386015065, 0.3422433138, - -0.0049428940, -0.0233486611, 0.0531458147, 0.0204061605, -0.4921406209, 0.2143180966, -0.9124107361, - -0.5282543302, -0.0082188137, 0.3940183222, -0.0703973770, 0.2838156521, 0.1259212643, -0.0552438870, - 0.0686918423, -0.0180950686, -0.0875097886, -0.2869284451, 0.1590942740, 0.3322785795, 0.0325080790, - 0.0033236369, 0.0557972416, -0.0277688149, 0.4219309092, 0.0037146322, -0.0338882506, -0.4120204747, - 0.0432067402, -0.7439932227, 0.3922487497, -0.4141609371, -0.3591470718, 0.0238076113, 0.2847858965, - 0.1163747385, -0.3206885457, 0.1907688230, 0.0906408504, 0.3747521043, 0.2750247419, -0.7959539294, - -1.1823486090, 0.1879484802, 0.9548650384, -0.0111556277, 0.0337821878, 3.7001430988, 0.0358772390, - 1.1270211935, -0.0360346325, -0.0162308309, -0.0125768138, -0.0061665662, 0.0613936894, -0.3352574110, - 0.2092920393, -0.3123878837, -0.0001231916, 0.6323376298, -0.6722851396, -1.9193249941, -1.1372646093, - -0.6384195685, -0.6505790353, -0.1470468044, 0.0513535812, 0.0227893032, -0.3263072968, 0.2549263537, - -0.0148570053, 0.0227769949, 0.3594914079, 0.0248929597, 0.0588637441, 0.0340429060, -0.0331005305, - -0.2544456422, 0.0161518119, -0.1758094430, 0.5367755294, -0.7055914998, -0.3781234324, -0.0464113355, - 0.0190908965, 0.2719711363, -0.4060737491, 0.6330465078, 0.7658862472, 0.3664361835, 0.1379054785, - -0.3733623028, -0.6987259984, -0.0851245970, 1.5353600979, -0.0303403623, 0.0126178898, 0.8448222876, - -0.0277430657, 0.0630089492, 0.0197844543, 0.0351737067, -0.3107087314, 0.0025146492, -0.3074116111, - -0.0241411477, -0.4679161012, -0.8294273615, 0.0100592971, -0.1811828911, 0.1472923756, 0.0489724167, - 0.7992106080, 0.2863916159, 0.0960692614, 0.4893977344, -0.3130331337}; + -0.24994563, -0.01592130, 0.02984710, -0.03246316, -0.19607241, -0.02163565, -0.00572438, 0.01376110, 0.06863546, + -0.21986796, -0.05606571, 0.06991967, 0.07118288, -0.00832175, -0.03974251, -0.12646708, 0.01565769, 0.02143256, + 0.04822187, -0.01806841, -0.00104700, 0.08732048, -0.19190465, -0.00814264, -0.15155232, 1.28681350, 0.13748017, + 0.39079481, -0.31852159, -0.28351930, 0.04033466, -0.42634365, -0.13127394, -0.20465094, -0.26889697, 0.70893532, + 0.43394735, 0.70848930, 0.04386011, 0.51139277, 0.40600044, -0.50317824, -0.25791675, 0.66503000, -0.40065920, + 0.65473962, -0.00253041, -0.33962274, -0.08765265, -0.11767972, 0.06714126, -0.60412002, -0.38466910, 0.15584932, + -0.06518575, -0.71045715, 0.46661234, 0.24567224, 0.29929164, 0.07424527, 0.00885416, 0.34313247, -0.40707770, + 0.49099818, -0.74588889, -0.10123775, 0.53515995, -0.42928374, -0.12010060, 0.12295905, -0.69315630, 0.38088876, + 0.01870272, 0.10997168, 0.26679659, 0.93503916, 1.01998508, -0.10151886, 0.15381983, 0.08079384, 0.12287367, + -0.29244336, 0.00544387, -0.31489906, -0.21896380, -0.07303306, 0.38462871, -0.88183403, 0.03077884, 0.05728795, + 1.33863544, 0.30312559, 0.28246397, -0.04266880, -0.50959545, 0.60257953, 0.41271350, 0.17042276, 0.60114610, + 0.22945273, 0.73635733, 0.20843484, 0.33445162, -1.11147344, -0.30075341, 0.51580977, -0.18865807, -0.91119158, + -0.39129823, 0.03684294, -0.68891215, -0.59370238, 0.65122741, -0.17603758, 0.66590655, 1.25159955, -0.37625167, + 0.32980818, 0.77502394, -1.58798909, 0.22748075, -0.95392829, -0.37276012, -0.61004913, 0.92332447, -0.09721770, + -0.72238702, -0.34178290, 1.19741392, -0.44719616, -0.75276721, 0.17758735, 0.02224001, -0.08087371, 0.25889483, + 0.03444218, 0.33437315, -0.78717542, 0.07385066, -1.37520838, -0.00982160, 0.42453086, 0.38150313, 0.19821575, + 0.93540424, -1.05033779, 0.57981151, 0.33810690, 0.24172245, -0.02910789, -2.12628174, -0.63280356, 0.29773250, + 3.17222500, -0.49264374, 0.29331800, 1.39211619, -0.76175922, -0.45130953, 0.42933312, -1.54781485, 0.02419901, + -2.16194177, -0.48207095, -0.31510717, -2.11770678, 0.76639241, 1.87467754, -0.52695322, 1.70596778, -2.33492446, + 0.41794685, 1.27378273, -0.10234303, -0.49648684, 1.86050689, -0.50189257, -0.16991651, -0.46694538, -0.00889901, + 0.58299482, 0.08892005, -0.20688151, 0.31415370, -0.20101114, -0.33977607, 0.07279664, 0.60349727, -0.34133548, + -0.48008150, 1.27710438, -0.29224181, -0.02558731, 0.86315304, 0.27016857, 0.12425910, -0.73576742, -0.41963914, + 0.04202708, 0.95604628, 0.15431352, 0.01539763, -0.01423682, 0.10296305, -0.08639759, 0.11045294, -0.03732327, + 0.13618803, 0.10233897, 0.21258777, 0.09800927, -0.05657235, -0.05041919, -0.16974531, 0.12601873, -0.14161462, + 0.12978475, -0.18991150, 0.07589593, 0.06911660, 0.10042754, -0.24628711, -0.28696042, -0.25114185, 0.07191065, + 0.36939719, 0.20196825, 0.19622889, 0.01961792, -0.52867746, 0.02060650, 0.32239082, 0.21925712, -0.29252347, + -0.07450268, 0.07430969, 0.19808058, -0.08999527, -0.41864324, 0.12763937, 0.10551479, 0.13380286, 0.26029557, + -0.09461474, 0.01125190, -0.01001714, 0.38791370, -0.59581864, -0.31798267, 0.13044289, -0.29599217, 0.06823352, + -0.13354187, -0.04749685, 0.44879583, -0.51446730, 0.37497100, -0.19995253, 0.11865021, -0.35735917, 0.28974858, + 0.12435340, 0.00421873, 0.08717419, -0.20247488, -0.05830143, -0.04514945, 0.03859331, -0.02609805, -0.22617900, + 0.09613950, -0.33556163, 0.23096344, 0.06258421, -0.05920995, -0.81900448, -0.61287695, 0.12958381, 0.79978222, + -0.32717428, 0.23371933, -0.11298512, 0.06942000, 0.52603680, 0.06176474, -1.15612555, 0.38241693, 0.13082752, + -0.69803941, -0.44519529, 0.24077913, -0.18162382, -0.41263813, 0.00626828, -0.56472856, -0.09948663, -0.18302669, + 0.95950598, -0.30670726, 0.02000829, 1.03344405, 0.48644996, 0.34142539, -0.14057057, -0.08406556, 0.58438534, + -0.22699004, -1.44362915, -0.95808500, 0.35579941, 0.29348719, -0.11956982, 0.27683857, 0.57247722, 1.37406516, + 0.18090977, -0.48121765, 0.06628983, -0.17082840, -0.86288124, -0.12994859, -0.10934682, -0.44934374, 0.64140421, + 0.43463030, -0.40653625, -0.92759031, -0.26878390, 0.47970986, -0.45654160, -0.31465080, 0.94702774, -0.16918387, + -0.42442611, 0.00438548, 0.00923580, 0.90002447, -0.55483723, -0.11998936, -0.24002072, 0.48533896, 0.11834613, + -0.07799944, -0.42383757, -0.16936988, -0.90337831, 0.50523067, 0.72644299, 0.32532176, 0.05432085, 0.68847007, + -0.60442829, 0.80158204, 0.99259549, -0.30103669, 0.05667507, 0.36611405, -0.94233608, 0.23696357, -0.61583829, + 0.52145499, 0.14344153, 0.00328588, 0.36766458, -0.71754855, 0.42685041, -0.52480674, -0.41898140, 0.29636848, + -0.70113719, -0.20197862, -0.37344661, -0.17589939, -0.54375410, -0.72718179, -1.11110735, 0.32055253, -0.25643155, + -0.30023971, -0.58632553, 0.50699002, 0.73423439, 0.04769143, -0.69287294, 0.71418941, -0.98707741, -0.48756132, + 0.14591850, -0.00972518, -0.18280549, 0.33020869, 0.07739078, -0.27737662, 0.32508579, 0.52724129, -0.13557516, + 0.27238563, 0.73315942, 0.99855763, 0.84088510, 0.08538753, 0.13155562, -0.14930172, 0.02797297, 0.10585469, + 0.02903437, -0.30760777, -0.08591483, -0.16532275, -0.04133916, 0.12315685, 0.08694953, 0.12440344, -0.39931026, + -0.06502170, -0.07466459, 0.25206035, -0.11492801, 0.01234671, 0.02252278, 0.10730736, 0.00707526, -0.04144976, + 0.16572779, -0.06111651, -0.05090914, 0.22255808, 0.21892326, 0.02140033, -0.26701146, -0.09199855, -0.34320089, + 0.04647652, 0.24066357, 0.00315903, -0.14013545, 0.20657861, 0.19460022, 0.13409390, -0.12650517, -0.00711635, + -0.36546883, -0.27223793, 0.22557122, 0.15888590, -0.19231611, -0.01208463, -0.42694032, 0.00924643, -0.04871246, + 0.14489457, 0.19934957, 0.03268532, -0.26802376, -0.06917346, -0.08818764, -0.06936200, -0.00991716, -0.14875649, + 0.20260695, -0.03016085, -0.11772685, -0.06528303, 0.33984911, -0.42861041, 0.04678998, 0.24468878, -0.26212654, + 0.05760178, -0.01277140, 0.25944546, 0.21451963, -0.22919317, 0.08311309, 0.01015522, -0.07370505, -0.28775448, + 0.28065524, 0.80104679, -0.69237137, 0.09623399, 0.04745018, -0.11536954, 0.21645974, -0.17521553, -0.12839432, + -0.32616171, -0.19263010, -0.05076053, -0.32757092, 0.14068608, -0.31371123, -0.36700678, 1.02383471, 0.41596910, + -0.39243886, -0.39699236, -0.18623418, 0.23590773, 0.44462955, -0.01158825, 0.15543512, 0.36914709, -0.19606984, + 0.04083448, 0.11609410, 0.10854912, -0.93667829, -0.59664226, -0.10577209, -0.03770705, -0.82973319, 0.07100462, + 0.46515539, 0.70493704, 0.11769867, -0.09642658, 0.19184169, -0.60267162, -0.15556012, -0.06323973, 0.25728056, + 0.32714555, 0.37354282, 0.64966816, -0.85379928, -0.52891093, -0.53338081, 0.00071357, -0.80146301, -0.23014045, + 0.31370798, 0.19652064, -0.30330509, 0.59732527, -0.61618036, 0.43174049, -0.33461112, -0.09222537, -0.57418764, + 0.31234556, -0.06441883, -0.29923901, 0.04574157, 0.00199618, -0.07604899, 0.18836573, 0.22399814, 0.11964659, + 0.27587023, 0.54073912, -0.07070547, 1.09669447, 0.60586989, -0.56627184, 0.73163223, -0.06587803, -0.95469141, + 0.05797904, -0.32544577, 0.46618402, -0.42818251, -0.15697184, -0.07984095, -0.06863761, 0.27211952, -0.63966370, + -0.85368210, 1.04474986, -0.03273144, 0.04721467, -0.57129002, -0.51463783, -0.01716019, 0.41848388, -0.92354447, + -0.02085111, -0.35023081, -0.28929639, -0.12352847, -0.06491212, 0.62791741, 0.52128577, -0.08786132, 0.50663567, + -0.85222739, -0.67956436, -0.07901944, -0.20291066, -0.12427756, 0.21070847, 0.36405188, 0.01811016, -0.35558707, + -0.07505420, -0.51016599, 0.08317504, 0.78687006, 0.26184845, 0.32996735, -0.11742579, 0.13708171, 0.09675904, + 0.00351471, 0.17156938, 0.04663955, -0.01313619, 0.07353903, 0.11845510, -0.03040916, -0.11860044, -0.05890951, + 0.13578244, -0.27024615, 0.12044270, -0.06773756, 0.26196989, 0.03754797, -0.69103962, 0.11767364, 0.08418153, + -0.07073509, -0.08945126, -0.04465364, -0.01228451, 0.61217988, 0.36905605, -0.06841971, 0.01820075, 0.22142294, + 0.20999679, -0.00854848, -0.21310976, -0.48690179, -0.06172886, 0.09083650, 0.47623742, -0.38875908, 0.29984316, + 0.35164335, 0.07724196, 0.25907773, -0.03366175, 0.00794181, -0.16796382, 0.12707716, 0.67827290, -0.46863237, + 0.40221474, -0.01072991, -0.01881496, -0.22039062, -0.00463564, -0.20179020, 0.14899430, 0.09645735, 0.08785056, + 0.05667125, -0.08783643, -0.57045329, -0.27956113, 0.32969514, -0.32422251, 0.03947007, 0.04782788, 0.12597121, + 0.12803499, 0.24237561, 0.03641291, 0.02941555, -0.13378389, 0.71286631, 0.13059177, -0.11221728, -0.04303265, + 0.32258469, 0.03121127, 0.19749436, 0.80445844, -0.83933711, 0.40717539, -0.08058111, 0.18654235, 0.58147413, + -0.22004756, -0.21094175, -0.49914742, -0.07245248, 0.21281776, -0.72978270, 0.11609764, -0.12739497, -0.49795446, + 0.91565651, 0.71345496, -0.19992878, 0.12728572, -0.34958413, 0.51537168, 0.36229423, -0.20545541, -0.04014085, + -0.15503673, 0.46182132, -0.18324539, -0.02288571, -0.12150281, -0.35487393, -0.25479561, 0.34288880, 0.01429710, + 0.03762121, 0.01153337, 0.11537866, -0.11222634, -0.04343228, 0.09371492, 0.24208696, 0.02680596, 0.08744393, + -0.01195653, -0.02051427, 0.46111181, 0.34674245, 0.17142926, -0.32360074, -0.30470049, -0.08778754, 0.56703365, + -0.39670938, 0.01970642, -0.24996454, 0.59148031, -0.04976763, 0.42775628, -0.51978588, 0.74823248, -0.24332942, + -0.10120203, -0.71067011, -0.05833459, 0.24460207, 0.12378100, 0.39883280, 0.15179272, -0.45821238, -0.26472330, + -0.11036454, 0.47337988, -0.19236894, 0.44863826, 0.19078662, 0.46045646, 0.55434424, -1.23575699, 0.89674824, + 0.14763579, -0.29703000, 0.11096095, -0.23884353, 0.32712832, -0.55054861, 0.67220551, -0.28248659, -0.10569336, + 0.04621894, -0.49375376, -0.12733379, 0.67400223, -0.12935409, 0.09695239, -0.28661168, -0.36145869, 0.06896356, + 0.46334738, -0.83616781, -0.68781477, -0.22872619, -0.02656318, -0.46397430, -0.16735579, 0.57318032, -0.05219025, + -0.06242780, 0.30701312, -0.43937260, -0.05616235, -0.35246953, 0.47527167, -0.36845928, 0.13797158, 0.46169606, + 0.03073783, -0.16647297, 0.35587814, -0.52273571, 0.22240485, 0.32394350, 0.29325587, 0.38622752, -0.12588513, + 0.21903162, -0.03870760, -0.07586532, 0.09732155, -0.44541699, 0.01353051, 0.07500879, -0.22210084, -0.02879842, + -0.02839135, 0.02233995, 0.01847041, -0.22886260, 0.09602077, -0.10249722, 0.02895709, -0.11213382, -0.32242554, + 0.21315952, 0.13921122, -0.05876900, -0.14110731, 0.17718993, 0.06612965, -0.03701587, 0.34920025, -0.22553837, + -0.25041988, 0.16762421, -0.04839466, -0.57936865, 0.20034809, 0.28770819, 0.07073146, 0.06286270, -0.14398633, + 0.08881986, -0.26472491, 0.27725342, 0.22914961, 0.32062715, 0.15277733, -0.33009961, 0.21074554, -0.15565939, + 0.47236079, 0.03225322, 0.06781324, -0.16307135, 0.73327172, -0.11553932, -0.13312288, -0.30246657, -0.04846320, + -0.39416528, 0.15607847, 0.08472254, -0.12179766, 0.23342557, -0.02313556, -0.16107082, 0.19552790, -0.05060831, + 0.08372914, 0.37613615, -0.26624736, 0.05994382, 0.57154304, -0.03778595, 0.15102805, 0.26144159, -0.64846903, + -0.11667332, 0.64444566, 0.53041399, -0.37275234, 0.12701584, 0.25457710, -0.91777927, 0.63840097, -0.04469256, + -0.01554284, 0.52316505, -0.07778227, -0.11871518, 0.13643374, -0.16263111, 0.12193766, -0.43915382, 0.17769964, + 0.06158905, -0.40595376, 0.36887977, 0.21324196, -0.16621692, 0.07623006, -0.07362154, 0.53180701, 0.40119246, + -0.41867191, -0.17060547, 0.11066595, 0.33041847, -0.30610490, -0.01155049, 0.06596804, 0.06266157, 0.11539320, + 0.53958863, -0.19265023, 0.19687888, -0.32241911, 0.17509246, 0.06316098, 0.22965759, -0.10924519, 0.13696006, + 0.34725070, 0.05508206, -0.31879237, -0.07152238, 0.30400902, 0.47540823, 0.05332027, -1.34034514, -0.63157010, + -0.20077212, 0.82977784, -0.83980680, 0.05455742, 0.23470649, 0.15096639, -0.02279334, 0.74177665, -0.51908326, + 0.57153726, -0.20008761, -0.44515362, -0.52133244, -0.53501129, 0.30665237, 0.03230446, -0.27042213, 0.69568527, + -0.53271943, 0.12585282, 0.84569460, 1.16614997, 0.30099568, 1.01664233, -0.04021535, 0.35936305, 0.12363404, + -0.44788554, 0.65720278, 0.14622304, -0.57894391, -0.17871566, -0.13646793, 0.06899100, -0.13851331, 0.07404158, + -0.32255191, 0.22225420, 0.05467210, -0.22595364, -0.09422892, 0.08064129, -0.14696676, 0.24685700, -0.36180913, + -0.50487852, 0.09818821, 0.23832101, -1.06369340, -0.94318706, 0.00698828, 0.28264612, -0.01870376, -0.69367069, + 0.32556781, 0.29627222, 0.17554468, 0.22879148, -0.32052159, 0.18480402, -0.76028723, 0.17409454, -0.52946806, + -1.31131041, 0.72142994, -0.21024033, 0.65006751, 0.28911707, -0.45603541, 0.30260912, 0.22917707, 0.76010191, + 0.50517660, -0.43544480, 0.01703142, 0.15579990, -0.06952365, 0.26123571, -0.32477272, -0.07388589, 0.23853466, + 0.02649050, -0.04410565, 0.35238847, 0.10454764, -0.21788062, -0.05252795, 0.12990016, -0.20476976, 0.02988371, + -0.20392458, 0.07077907, 0.07255822, 0.03174250, 0.19428524, -0.27959460, 0.17289197, -0.06749524, 0.07314484, + 0.04101936, 0.00711376, 0.39040637, -0.09693181, -0.13249642, 0.06778622, -0.20384689, -0.08403887, -0.06206702, + 0.39903295, 0.01676942, 0.16174519, -0.24540325, -0.15171684, 0.36854738, -0.04578711, -0.20637585, -0.58331889, + 0.23066565, -0.40027916, -0.33852276, 0.22725138, -0.22780336, -0.45288083, 0.05498514, -0.15462326, -0.01167145, + 0.14075157, -0.23809917, -0.04884083, -0.15133418, 0.16887660, 0.08024041, -0.26719818, -0.08086196, 0.27881959, + 0.03904902, -0.05400108, -0.14138514, 0.16911660, -0.10002459, 0.31475541, 0.20939967, 0.07277112, 0.10095973, + 0.33317840, -0.23609909, 0.10387685, 0.08162952, 0.30970895, -0.19202805, 0.11137805, -0.08374452, -0.64609599, + 0.49284625, -0.02431013, 0.22352953, 0.35399213, -0.04173037, 0.01117679, -0.26933041, -0.07039601, 0.30380678, + -0.05741419, 0.47689995, 0.20879868, -0.06093958, -0.08551129, -0.07670606, -0.23868953, -0.26600242, -0.24509941, + 0.40901592, 0.42221358, -0.76004744, 0.13680586, -0.25070697, 0.08168428, -0.19393569, -0.23131981, -0.35523322, + 0.31124046, -0.02291389, 0.52390915, -0.46724460, 0.13923384, -0.12886441, -0.03299529, -0.27032244, -1.19288146, + 0.24336755, -0.20915434, -0.14846808, 0.10754984, 0.02535326, 0.28236297, 0.90321386, 0.28560060, 0.31486535, + -0.78192097, -0.21997991, -0.19503053, 0.71680617, -0.23815078, -0.38749680, 0.09747923, -0.11504970, 0.19734858, + 0.98412722, -0.13073727, 0.75299066, -0.85745215, -0.40456349, -0.51684064, -0.47700635, 0.39638016, 0.17537507, + 0.52784997, 0.63105047, -0.69734496, -0.28434739, 0.58557647, 0.96909130, 0.17804323, 0.09428761, 0.17061329, + 0.33784506, -0.14671242, -0.48270255, 0.31931961, 0.04116327, -0.46874690, -0.45884821, -0.19885214, -0.39863971, + -0.41624883, 0.43567199, -0.28685057, 0.40880397, 0.18431477, -0.15750097, -0.56084317, -0.13018279, 0.18903515, + 0.30848095, -0.34719062, -0.19633505, -0.02658261, 0.24495831, -0.78052413, -0.85096359, -0.37101209, 0.22163752, + -0.14013411, -0.24140479, 0.23052573, 0.54393709, 0.13316275, 0.12203635, 0.20220585, 0.49100202, -0.62808341, + 0.16586047, -0.38358831, -1.00215280, 0.77456385, -0.27937427, 0.11909273, 0.50655580, -0.87544155, 0.59288806, + 0.01167453, 0.57931119, -0.02249480, -0.12532967, -0.25048557, -0.28306130, 0.06188992, 0.48368040, -0.36783400, + -0.21773575, 0.14827894, 0.13848552, 0.04230130, -0.04214389, -0.07091486, -0.04140090, -0.30136281, 0.00464335, + -0.21866782, -0.02765239, -0.17025313, 0.08577426, 0.06893988, 0.11575132, 0.07546596, 0.02867554, 0.19112501, + 0.27582642, 0.12627265, 0.10898180, -0.18745209, 0.23613420, 0.23121634, 0.28491151, 0.02902788, 0.15380767, + 0.03966511, -0.01862929, -0.00648489, 0.01908036, -0.19008325, -0.18426324, -0.07000075, -0.29073888, -0.22639032, + -0.11762336, 0.33500755, -0.21507888, -0.07346634, -0.03355709, -0.04096937, -0.33768243, -0.19027354, -0.18297306, + -0.50098300, -0.02807480, 0.23949267, -0.15996224, -0.07754000, -0.17378184, 0.00657926, 0.39929193, 0.45185298, + -0.34957576, -0.24467568, 0.21933684, -0.10674803, -0.35011348, 0.35258722, -0.14792293, 0.02977267, 0.63623291, + 0.01652745, 0.28561106, -0.24670583, 0.39176771, 0.05463742, 0.32333028, 0.14167164, -0.06670932, 0.23938650, + 0.31829852, -0.41095898, 0.35032102, 0.03883050, 0.14073621, 0.64508480, 0.25743634, -0.24900754, 0.26631746, + -0.12656187, 0.01745303, -0.18157384, 0.34143060, 0.32021353, 0.30565801, -0.26965511, 0.23778385, -0.02008655, + -0.08103817, -0.07159230, 0.32048982, 0.06949183, -2.33522058, 0.02816298, -0.10037031, 0.37423018, -0.22492132, + -0.36854437, 0.40015242, 0.28485346, 0.22778602, 0.19501299, -0.93215930, 0.07858350, -0.40451255, -0.27547240, + -0.02443204, -1.41666114, 0.05133143, -0.06660908, 0.50325763, 0.31695950, -0.18681468, -0.12560664, 2.13244534, + 0.22775133, 0.42665431, -1.29449880, -0.23370074, 0.01759187, 0.25374168, 0.06429626, -0.52347112, 0.34470561, + -0.26376522, -0.04219850, -0.01756793, -0.43413332, -0.22707182, 0.05281873, -0.45199049, 0.04030637, -0.54730064, + -0.13315515, 0.10807105, -0.34840381, -0.12949815, -0.38297817, -0.13845149, 0.97675931, 0.20487542, 0.41703507, + 0.23882188, 0.23847181, 0.40595204, 0.22122343, -0.59291810, 0.16200593, -0.23582739, -0.33778340, -0.05766481, + -0.25944924, -0.28257781, -0.02519164, 0.15628809, 0.22581941, 0.29877603, 0.11747632, -0.13611910, -0.68844485, + 0.10147709, -0.19454663, 0.21278845, 0.02120594, 0.12139316, -0.17088807, 0.38014871, -0.78083509, -0.60448849, + 0.05090213, 0.61401623, -0.32977888, -0.38970327, 0.26832360, 0.53781092, 0.20194471, 0.82220250, 0.23819874, + 0.49616402, -0.43314114, -0.50223577, -0.46702045, -1.17008650, 0.48856854, -0.03626145, 0.75825346, 0.49573380, + -0.68196982, 0.29390180, 0.22509925, 0.79214412, 0.17140889, -0.22514503, 0.10945672, -0.20663217, -0.00440216, + 0.21418120, -0.34781390, -0.11805713, 0.12930803, -0.02661256, -0.16583513, 0.50446808, 0.12406299, -0.18522657, + -0.42358905, 0.14963409, -1.34551275, 0.13522045, 0.17906164, 0.25551242, 0.31629464, -0.21916427, -0.00383488, + -0.16207457, 0.18151720, -0.08251988, 0.89760458, 0.44453332, -0.27497387, 0.29844183, 0.01738336, 0.12566963, + 0.00516657, -0.15164798, -0.07898259, -0.25138238, 0.47278392, 0.46358061, 0.20548722, 0.38698843, -0.07769089, + 0.21403231, -0.12140352, 0.01454621, 0.27465621, -0.04136071, -0.18499696, -0.33877471, -0.52207792, -0.06982010, + -0.67964226, -0.37841988, -0.05654239, -0.44023779, -0.34978950, -0.11707290, 0.43336329, 0.23595251, 0.51182544, + 0.45589104, 0.46062201, -0.28254399, 0.04058569, 0.35703275, 0.09476561, -0.19271792, -0.85225898, 0.18226382, + 0.07547066, -0.23841362, 0.07214766, 0.05686964, -0.64615160, 0.89725614, -0.09489815, -0.24773495, 0.18898845, + -0.05227394, -0.04989563, -0.04141004, -0.68845397, 0.44256380, 0.15174553, 0.16641839, 0.20559123, 0.18821712, + -0.18444933, 0.75212121, 0.04695220, -0.14553900, -0.25279966, -0.78429103, 0.21485479, 0.24854848, -0.34898055, + 0.12131061, -0.01442323, 0.31166860, -0.03168157, 0.23537874, -0.04150987, -0.73491955, 0.30445504, 0.01360191, + 0.11793279, -0.01071012, -0.86158031, -0.44057927, -0.11391853, -0.08041152, 0.30659840, -0.07929188, 0.14337794, + -0.16240485, -0.37871391, -0.12544847, -0.75813878, 0.07463507, 0.30250356, -0.08979524, -0.05500457, -0.00572075, + -0.15594503, 0.03389021, 0.33084431, 0.39045012, -0.42743438, -0.61926889, -1.01879334, 0.43193951, 0.11156862, + -0.76947951, -0.20159762, 0.24022132, 0.20872289, 0.69780248, -0.16525456, 0.63648707, -1.59807694, -0.14674914, + -0.52725124, -0.42184243, 0.85394889, 0.03816247, -0.73201150, 0.72350580, -0.94382733, 0.30476892, 0.62137985, + 0.76275116, 0.58395672, 0.12438627, 0.09742960, 0.15616673, -0.26625797, 0.15280285, 0.40855104, -0.06499965, + 0.07652657, -0.03907230, -0.03445091, -0.13297464, 0.12203576, 0.49042386, -0.46612582, 0.23596950, -0.60011405, + 0.01329148, -0.40629655, 0.34626818, 0.00672128, 0.21219759, 0.12195532, -0.24550790, 0.25495195, 0.50089574, + -0.69004655, -0.82626939, -0.04906785, 0.22566023, -0.19735636, -0.32598498, -0.23328499, 0.59350103, 0.50138974, + 0.03376095, -0.21038638, 0.23230115, -0.67481101, -0.46950540, -0.53264731, -1.31645954, 0.43338448, -0.07359013, + 0.19401260, 0.85574108, -0.58386785, 0.27350774, 0.94151503, 0.99626285, 0.16530964, -0.52822798, 0.02781926, + 0.19514728, 0.02097620, 0.00889074, -0.16201399, -0.07028764, 0.22292475, -0.00996018, 0.11951973, -0.02360463, + 0.18132643, 0.03626538, -0.40536785, -0.24706507, -1.10316157, 0.23488073, -0.11203269, -0.26491979, 0.32530117, + -0.07893114, -0.00744999, 0.26029640, 0.33739540, 0.02217237, 0.02589254, -0.42112139, 0.24534294, 0.70596570, + -0.23823494, -0.01574550, -0.57523948, -0.01305772, -0.10088185, 0.27640396, -0.16561478, 0.15046248, -0.04703883, + 0.12256249, -0.13618535, -0.25345358, 0.13640152, 0.11063136, 0.76222241, 0.26646805, -0.26234278, 0.19928859, + 0.05528985, -0.14719652, 0.09461970, -0.29426023, -0.11857925, -0.33014619, -0.16937710, 0.49556774, 0.09860725, + -0.08043962, 0.60073936, -0.16133121, 0.60515904, 0.05304303, 0.21871525, 0.45007041, -0.18452203, -0.23329300, + 0.15948120, 0.03171407, 0.05523947, -0.19391575, -0.06312876, 0.05657719, -0.01570622, 0.34798819, 0.35875756, + 0.64115590, -0.12868474, -0.21662687, -0.07916048, -0.02071994, -0.39688477, 0.34791452, -0.01536988, -0.01980658, + 0.20821385, 0.32254547, 0.03658571, 0.53079057, 0.11581320, -0.52330321, 0.08113370, -0.35415897, -0.01983317, + 0.34641969, -0.06101644, -0.00271639, -0.19201282, -0.43245769, -0.21427184, 0.11255077, -0.15757668, -1.97429311, + 0.25491333, 0.18619338, -0.13669698, -0.33716843, -1.20977962, -0.06677102, 0.12260284, 0.31985071, 0.98761481, + -0.66411626, -0.41700807, -0.00110240, -0.32249039, 0.21490636, -0.67965972, -0.16568908, -0.11263562, -1.06136537, + -0.06080189, 0.00003523, -0.27638850, 0.54172385, 0.15916675, 0.66536385, -0.61083424, -1.17721260, -0.79620224, + 1.62779248, -1.29850137, -0.40923908, -0.21678016, 1.11565304, 1.38857508, 1.67485464, -0.48776993, 1.54490137, + -0.99453592, -0.23702216, -1.28989625, -0.32184783, 1.73645914, 0.50596559, -0.42633674, 2.06059289, -1.31561661, + 0.09407058, 0.71311694, 1.60583699, 0.67549241, -0.75638843, -0.11993816, 0.25794804, -0.30944440, -0.43204123, + 0.36899459, 0.19363843, -0.08060863, -0.05935695, 0.27492559, -0.16506658, -0.00417477, 0.57574582, -0.39738783, + 0.30795437, -1.27800059, -0.36806244, 0.00201544, 0.41062146, -0.01292078, 0.33908349, 0.05562977, 0.15150607, + 0.33948043, -0.19380097, -0.34239587, -0.26843691, 0.14322159, 0.16285747, -0.12242185, -0.39411676, -0.39972457, + 0.32914063, -0.14964050, 0.18657172, -0.32965264, 0.50208765, -0.61841202, -0.96437931, -0.19447599, -1.48685813, + 0.36768064, -0.19042422, -0.14381048, 0.16720532, -0.38585469, 0.28041863, 1.07230306, 0.34857085, 0.56100559, + -0.60621732, -0.27094939, 0.03308203, 0.28440759, -0.05372868, -0.37450859, -0.23122661, 0.14196907, -0.08391851, + 0.58788222, 0.06581475, 0.12165748, -0.56094503, -0.62536222, -0.32290021, -1.14628315, 0.28745806, 0.09321925, + -0.11868286, 0.73546922, -0.14506210, 0.10030940, 0.65942341, 0.56377023, 0.38628533, -0.42766783, -0.12002008, + -0.27770182, 0.38072130, -0.41092056, 0.07260298, 0.32786149, -0.18012661, -0.02678201, 0.29315698, -0.62710303, + 0.16001518, -0.31741443, -0.36174574, -0.17293620, -0.11350867, 0.18780905, 0.17321175, 0.81462449, 0.27337193, + -0.34306210, -0.12359867, 0.26058146, 0.48336327, 0.48286983, 0.00497185, -0.08108788, -0.37280399, -0.07095718, + 0.07272183, 0.25405398, -0.01350151, 0.19333066, 0.50434202, 0.30863705, 0.23423783, 0.27947450, -0.35671273, + 0.39509684, -0.28312561, 0.13625887, 0.05653338, 0.26617846, 0.24114241, 0.22899513, -0.34379941, 0.14200218, + 0.16892987, 0.41087806, 0.25089607, -0.16019906, 0.13426897, -0.13074127, -0.23068653, -0.45294666, 0.30708107, + -0.05777374, -0.03524012, -0.18545437, 0.26572716, 0.34135580, -0.10212494, 0.15759155, -0.29985228, 0.00604882, + -1.35232568, 0.02671386, -0.18605591, 0.28203139, 0.06673647, 0.21136442, 0.02198954, -0.02589645, -0.13472135, + -0.33945116, -1.36670744, 0.26497167, -0.01333835, 0.35838512, -0.00214932, -0.67533672, -0.01949281, -0.15939406, + -0.17611854, 0.62018734, -1.11697268, 0.25882152, -0.40646151, -0.21743414, -0.35022104, -0.48264894, 0.15348732, + 0.32525846, -0.62968028, -0.14668293, 0.04142878, -0.18443897, 1.67367685, 0.29640922, 0.54300213, -0.38739282, + -1.12135983, -0.95634991, 1.56781328, -0.78718096, -0.65814853, -0.09405752, 1.45496094, 1.55392945, 1.32255197, + -0.49480981, 1.84735644, -1.09742570, 0.03602623, -1.19865084, 0.01194180, 1.76398528, 0.22691993, -0.24130857, + 2.00458288, -1.63459969, 0.28926355, 0.26902235, 1.57351863, 0.59064698, -2.67679620, 0.40217704, 0.49060968, + 0.01024920, -0.21290652, 0.01566074, -0.11393169, -0.32448450, -0.27194211, 0.21742176, -0.57667369, -0.03412761, + 0.36706647, -0.42090943, 0.39278191, -0.02046515, -0.30790815, -0.07676671, 0.48708537, -0.19606759, 0.39258122, + 0.11010294, 1.56427002, -0.23800702, 0.70309281, -1.84958696, -0.04740064, 0.06504993, 0.21830852, -0.09291255, + -1.47656202, -0.76586556, -0.02407140, -0.12262835, 0.55286926, -0.37243509, -0.11549302, -0.16901262, -0.81201553, + -0.16746910, -1.11338747, -0.03933520, 0.25118551, -0.27406788, 0.25855088, -0.24614365, -0.05488263, 0.42877647, + 0.41920695, 0.49124199}; + #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h index 85181031c98ab..592ab44151bbc 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h @@ -1,47 +1,39 @@ //Numpy array shape [25, 10] -//Min -1.045674681664 -//Max 0.718651175499 +//Min -1.512127518654 +//Max 2.787853240967 //Number of zeros 0 #ifndef W2_H_ #define W2_H_ weight_default_t w2[250] = { - -0.7057377100, 0.1404066533, 0.2397147864, -0.0538846180, -0.0136500485, -1.0456746817, 0.2339422107, - -0.2464046478, -0.0155451894, 0.3114753366, 0.0252490267, 0.0652531609, 0.2230684459, -0.0703721792, - -0.0061709168, -0.4667471945, 0.2732006609, -0.1566423327, -0.0504947454, -0.2795722485, 0.3157102764, - -0.2208270580, -0.3470733166, -0.0298985839, 0.0033523447, 0.4046282768, -0.3606239557, 0.6249889731, - -0.0325289443, 0.3911077976, -0.0111113638, 0.0061787963, 0.0062978785, -0.0141930580, 0.0326538198, - -0.0164757688, -0.0086768735, 0.0389737710, -0.0255079512, 0.0343580954, -0.0220158268, 0.0359050333, - 0.0078137182, -0.0094889030, 0.0315879099, -0.0038071091, -0.0228841919, 0.0211039726, -0.0303417332, - 0.0266918801, 0.0846779272, -0.1972407401, -0.2197024226, -0.0482244752, -0.0594943352, 0.6427704096, - -0.1127861366, 0.3480221033, -0.0235439185, 0.1047359556, -0.0122122988, -0.0466807000, 0.0192838348, - 0.0184221603, 0.0298816897, 0.0179036893, 0.0378936641, -0.0134130828, 0.0245604031, -0.0230461247, - 0.4430962801, -0.3229490817, -0.4796850085, -0.0328346863, -0.0463326760, -0.1059406400, 0.0650193691, - 0.1677540839, -0.0191161763, -0.9446775317, 0.0047525112, -0.0430214256, -0.0086042080, -0.0065273754, - 0.0322899334, -0.0063139671, -0.0088419663, -0.0265105683, 0.0207859948, 0.0300601982, -0.0358567573, - -0.0101170968, -0.0055280370, 0.0417956375, -0.0293978676, 0.0215279460, -0.0163401272, 0.0019495651, - -0.0018129245, -0.0349077098, 0.0724146366, 0.4244908690, 0.3408450186, 0.0095429150, -0.0044469568, - -0.1800813526, 0.1598049104, -0.0686975494, -0.0571451373, -0.2389617860, -0.0001860010, 0.0376826450, - -0.0334893614, -0.0493457690, 0.0032638730, -0.0276949946, 0.0366198681, -0.0292772222, -0.0406004563, - 0.0360089242, -0.1218376979, 0.1806843132, 0.1113958284, -0.0405312218, 0.0022432276, -0.1337593943, - 0.0729509220, 0.1634687930, 0.0032948528, 0.0776214898, 0.1600115597, -0.0854228437, -0.1109891087, - -0.0564341992, -0.0124987122, 0.0338483378, 0.0216468368, 0.2892125845, -0.0419363230, 0.0799390525, - 0.0079131620, 0.1280078143, 0.0930886343, 0.0150845889, -0.0122468621, -0.3565736711, 0.3034112155, - 0.1370847970, -0.0515636019, 0.1990947574, -0.6926737428, 0.6633190513, 0.7186511755, -0.0038143450, - -0.0632954985, -0.5240395665, 0.6481059194, -0.1913139373, -0.0223663468, -0.0330061354, -0.0007724538, - 0.0031711236, 0.0164572485, -0.0087732449, -0.0083233602, -0.0083719268, 0.0295558013, -0.0158381946, - 0.0207662024, -0.0032593012, 0.0831812173, -0.0175970923, -0.3239497840, 0.0158007033, -0.0106937513, - -0.0832406804, -0.0439340621, 0.0818050355, -0.0590137169, -0.3678484261, -0.8252559304, 0.2230938077, - 0.3108801544, 0.0021616002, -0.0497470722, -0.6720880866, 0.2066508830, -0.5620029569, -0.0025763733, - 0.0753768012, -0.3516313136, 0.3203991950, 0.3835750520, 0.0187730733, -0.0582833514, -0.4428557158, - 0.4818525016, -0.2054705173, -0.0675888211, 0.2989248335, 0.0312647708, 0.0990447775, 0.1213422418, - -0.0735856369, -0.0349877253, 0.1899046749, 0.1087389141, 0.1551754475, 0.0041319388, -0.5746779442, - 0.0658814609, -0.1868388653, 0.0325599350, -0.0466500595, -0.0395346284, 0.2296674401, 0.0618919656, - 0.1525417417, 0.0100804977, 0.2973885834, 0.0829108581, -0.2141572684, -0.2578293085, -0.0191419479, - -0.0261756163, 0.1556160152, -0.1592844576, 0.1052642092, -0.0549823083, 0.4501740336, 0.2459395975, - -0.1690156311, -0.3005261421, -0.0201924089, -0.0455512740, 0.0550876595, -0.5089792013, 0.3866674900, - -0.0132356742, 0.3193220496, -0.0581676178, 0.1859592199, 0.0603353418, -0.0743811354, -0.0334267654, - -0.0704199299, 0.1037535146, 0.1687176079, -0.0629248247, -0.0154705839}; + 0.20997065, 0.23109458, 0.56466961, 0.22711204, -0.20132071, -0.27363914, 0.14927717, -0.16103272, -0.83456266, + -0.16359854, 0.42116061, 0.25756207, 0.04047282, 0.21591994, -0.26583776, -0.55054820, 0.41611665, -0.02321975, + 0.07042803, 0.50135452, 0.00703545, -0.20829202, -0.33702660, -0.12396229, -0.11880612, -0.27329573, -0.11452802, + -0.31897750, 0.21264470, 0.13742544, -0.28871939, 0.41868410, -0.63091415, -0.19237195, -0.65478534, 0.38763866, + -0.24744406, -0.16881032, 0.39083633, -0.50035834, -0.19310105, -0.31465644, 0.00439816, 0.10827218, -0.49906382, + -0.32572702, -0.91848624, 0.37550700, -0.71738565, -0.34755468, 0.06423171, 0.32547599, 0.02474762, 0.03221778, + 0.48550412, -0.33728692, -0.32770881, 0.17164232, 0.55661368, 0.11896797, 0.36957362, 0.47705862, -0.49895954, + 0.33941826, 0.19965869, 0.01562935, 0.11520918, -0.64897013, 0.09584811, -0.06691046, -0.22340138, -0.28523839, + 0.47164100, 0.39281282, -0.27396747, 0.23841321, -0.16906965, 0.23569225, -0.15681265, 0.18717216, -0.60413569, + -0.08125137, 0.03988006, -0.21231870, -0.22519483, 0.12118224, 0.16755132, 0.12627158, 0.01710406, 0.12804474, + 0.15039428, -0.44942543, -0.31897655, 0.23188710, 0.18285972, 0.19390795, -1.01665187, 0.21815108, -0.29137248, + -0.33327803, -0.59519506, 0.28375888, -0.21275434, 0.20035347, 0.24234673, -0.23726320, 0.13105272, -0.11671171, + -1.04230368, -0.01892293, 0.24302486, -0.11491518, 0.00009525, 0.16215059, -0.33812979, 0.25157502, 0.08174099, + 0.02176141, 0.21500087, 0.09077536, -0.76118916, 0.10925286, 0.29795000, 0.12469041, 0.37909570, -0.20281483, + 0.27489746, 0.37251407, 0.22438200, 0.38048640, 0.05875695, -0.26088551, -0.21821247, -0.16538695, 0.41207287, + -0.16648161, -0.84085250, -0.41789296, -0.34957457, -0.61002076, 0.31845343, 0.14742102, 0.19950806, 0.16061406, + 0.06558945, -0.37494221, -0.08883159, -0.04767518, -0.01558618, -0.38022742, -1.51212752, 0.86078125, 0.19461697, + 0.17105880, -0.30809617, -0.31512862, 2.78785324, -0.00088534, 1.45783448, 1.60251164, 0.00830983, -0.11042736, + -0.09234238, -0.63981187, -0.12528154, 0.26517308, -0.64378422, 0.26114368, -0.03288542, -0.30414325, 0.06316128, + 0.20465648, 0.13085699, -0.47638854, -0.23346442, 0.28762946, 0.11337498, -0.16003485, -0.03085457, -0.34413737, + -0.20898604, 0.25293669, 0.12700504, -0.57297736, 0.37069905, -0.10958206, -0.02782927, -0.04480676, 0.37059775, + 0.22780053, -0.46436781, 0.21395527, -0.12828122, 0.25643846, 0.42216083, 0.38164839, -0.21980932, 0.36473754, + 0.07016987, -0.35408738, -0.16640140, -0.25358951, 0.39250490, -0.54550570, -0.19580491, -0.40004924, 0.17290805, + 0.03295039, 0.15710174, 0.38565248, 0.17310381, -0.26752374, -0.01243732, 0.19979088, -0.15178865, 0.05851814, + -0.30287826, -0.22805928, 0.13903613, -0.17035685, 0.42811340, -0.32098049, 0.01897480, 0.19527332, 0.15685958, + 0.24155772, -1.29652667, 0.23406981, -0.14959824, 0.22470856, 0.06737669, -0.17472392, -0.07033237, 0.12923102, + -0.45487776, 0.28186423, -0.08404353, 0.05938773, -0.14591871, -0.37163615, -0.11934289, 0.09545202, 0.20201178, + 0.15774842, 0.09092412, 0.54094648, 0.01843318, -0.20180281, -1.01475310, -0.02641589}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h index 6dd20986aa269..b67cf178a716e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h @@ -1,26 +1,23 @@ //Numpy array shape [10, 10] -//Min -1.066073656082 -//Max 0.681088924408 +//Min -1.255380868912 +//Max 1.165371656418 //Number of zeros 0 #ifndef W3_H_ #define W3_H_ weight_default_t w3[100] = { - -0.1038735062, -0.0083230771, -0.0552374311, -0.5224462748, -0.0573509037, -0.1265300810, -0.0112661421, - -0.5452736616, -0.0644872189, -0.1275455654, 0.1141930372, -0.0077123214, 0.1154981479, 0.3085378408, - -0.0414689742, 0.0115689430, -0.0417736508, 0.1851192564, -0.0965978727, 0.0469020531, -0.0236889981, - -0.0430007130, 0.0516370200, 0.2873915136, -0.0340524092, -0.1160606891, -0.0130381659, 0.1598475724, - 0.0319193080, -0.2202762365, -0.0452292822, -0.0490893982, -0.0062470436, -0.0103780562, -0.0179754607, - 0.0128578581, -0.0021512285, -0.0128093800, -0.0163365994, 0.0363431089, 0.0190900937, 0.0117608421, - -0.0029030738, -0.0137901427, 0.0414321311, 0.0412845612, -0.0302784089, -0.0485344902, -0.0001797759, - -0.0344933569, 0.2524053454, -0.0404473692, 0.4452796578, 0.1888252646, -0.0498852022, 0.6810889244, - -0.0330508612, 0.2906026244, -0.1345981210, 0.5589192510, -0.1634582132, 0.0017064024, -0.0490242988, - 0.1130080819, -0.0318347588, -0.0584588088, -0.0371478200, 0.1148293316, 0.1451935470, -0.1724624336, - 0.0266404785, -0.0216521453, 0.0870701820, -0.4996633530, -0.0126784481, 0.0649333969, -0.0329958349, - -0.1830419898, -0.3936564028, 0.0841621608, -0.0027621964, 0.0302785076, 0.0032740140, 0.0303986724, - 0.0166636966, -0.0340096354, 0.0390744917, -0.0281386729, 0.0063985521, 0.0091940211, -1.0660736561, - -0.0350735374, -0.6366914511, -0.6618690491, -0.0448695309, 0.1518789679, -0.0225193389, -0.6637751460, - -0.4656083286, -0.5459096432}; + -0.24639761, 0.36854371, -0.20667994, 0.63942766, -0.48512432, -0.20601453, 0.95860600, -0.76670301, -0.62915105, + -0.16087309, -0.71208179, -0.22137630, -0.61618358, -0.28030652, -0.16592601, 0.01428368, -0.02218036, 0.18670039, + -0.05923353, 0.38925353, -0.03025977, 0.18113941, 0.04013579, -0.24923514, 0.04662795, -0.21779495, -0.11618838, + 0.27686477, -0.12692934, -0.14645813, 0.13050388, -0.61944312, -0.97363800, 0.34909710, -0.49283633, 0.35699531, + -0.21654762, 0.29707199, -0.37069076, -0.45038351, 0.23440604, -0.01497080, -0.43628553, 0.47897390, -0.57205141, + 0.28325596, 0.45101821, 0.30717590, -0.82709831, -1.01788270, 0.11227678, 0.40207320, -0.01430387, 0.33558398, + 0.14979517, 0.40087056, 0.56262153, -0.08988120, -0.39212254, 0.19313116, 0.18044059, -0.09485760, 0.07735054, + -1.25538087, -0.37033975, 0.96087897, -0.62376523, 0.97630143, 0.54678482, 1.16537166, -0.38099980, 0.25253880, + -0.48733908, 0.30896747, 0.00154836, -1.06780457, -0.38455144, 0.22028424, 0.40647805, -0.58109504, -0.29596746, + -0.19207183, -0.55882788, 0.12817945, -0.23813887, 0.05867399, 0.29090765, 0.50279891, 0.23116076, 0.11913682, + -0.03850375, -0.61140555, 0.42096528, -0.28724584, 0.06309307, -0.41296995, -0.22518104, 0.10956753, 0.17092451, + 0.46520787}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h index 98f4fd3d3607c..d2b8c3be33f48 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h @@ -1,20 +1,20 @@ //Numpy array shape [10, 1] -//Min -0.667848289013 -//Max 0.826535403728 +//Min -0.562117636204 +//Max 0.764084100723 //Number of zeros 0 #ifndef W4_H_ #define W4_H_ -weight_default_t w4[10] = {-0.6678482890, - 0.0003038962, - -0.1780688465, - 0.6331779361, - -0.0266840570, - -0.3114789128, - 0.0264124461, - 0.8265354037, - 0.1617123932, - -0.4059850574}; +weight_default_t w4[10] = {0.41375983, + -0.10875144, + 0.31972024, + -0.56211764, + 0.16606922, + 0.33737957, + -0.11298771, + 0.61149263, + 0.09088434, + 0.76408410}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 7ac2206e0cedc..0e6423fbb27a0 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -1,4 +1,5 @@ #include "DataFormats/Math/interface/deltaR.h" +#include #include #include @@ -11,6 +12,10 @@ #include "DataFormats/L1TParticleFlow/interface/PFTau.h" #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/TauNNId.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h" + +#include "ap_int.h" +#include "ap_fixed.h" using namespace l1t; @@ -25,16 +30,27 @@ class L1NNTauProducer : public edm::stream::EDProducer fTauNNId_; + std::unique_ptr fTauNNIdHW_; + + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + void process_SW(const l1t::PFCandidateCollection& parts, std::unique_ptr& iTaus); + void process_HW(const l1t::PFCandidateCollection& parts, std::unique_ptr& iTaus); + void makeTau_HW(const l1t::PFCandidate& seed, + l1t::PFCandidateCollection& parts, + std::unique_ptr& iTaus); + void addTau(const l1t::PFCandidate& iCand, const l1t::PFCandidateCollection& iParts, std::unique_ptr& outputTaus); - void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; double fSeedPt_; double fConeSize_; double fTauSize_; int fMaxTaus_; int fNParticles_; + bool fHW; + bool fEMSeed; + bool fDebug; edm::EDGetTokenT> fL1PFToken_; }; @@ -46,16 +62,23 @@ L1NNTauProducer::L1NNTauProducer(const edm::ParameterSet& cfg, const tensorflow: fTauSize_(cfg.getParameter("tausize")), fMaxTaus_(cfg.getParameter("maxtaus")), fNParticles_(cfg.getParameter("nparticles")), + fHW(cfg.getParameter("HW")), + fEMSeed(cfg.getParameter("emseed")), + fDebug(cfg.getParameter("debug")), fL1PFToken_(consumes>(cfg.getParameter("L1PFObjects"))) { std::string lNNFile = cfg.getParameter("NNFileName"); //,"L1Trigger/Phase2L1Taus/data/tau_3layer.pb"); - fTauNNId_ = std::make_unique(lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", - cache->getSession(), - lNNFile, - fNParticles_); + + if (fHW) { + fTauNNIdHW_ = std::make_unique(); + fTauNNIdHW_->initialize("input_1:0", fNParticles_); + } else { + fTauNNId_ = std::make_unique( + lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", cache, lNNFile, fNParticles_); + } produces("L1PFTausNN"); } -std::unique_ptr L1NNTauProducer::initializeGlobalCache(const edm::ParameterSet& cfg) { +std::unique_ptr L1NNTauProducer::initializeGlobalCache(const edm::ParameterSet& cfg) { tensorflow::setLogging("3"); std::string graphPath = edm::FileInPath(cfg.getParameter("NNFileName")).fullPath(); return std::make_unique(graphPath); @@ -64,28 +87,38 @@ std::unique_ptr L1NNTauProducer::initializeGlobalCache void L1NNTauProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { edm::Handle l1PFCandidates; iEvent.getByToken(fL1PFToken_, l1PFCandidates); + auto lTaus = std::make_unique(); + + if (fHW) { + process_HW(*l1PFCandidates, lTaus); + } else { + process_SW(*l1PFCandidates, lTaus); + } + if (lTaus->empty()) { + PFTau dummy; + lTaus->push_back(dummy); + } + std::sort(lTaus->begin(), lTaus->end(), [](l1t::PFTau i, l1t::PFTau j) { return (i.pt() > j.pt()); }); + iEvent.put(std::move(lTaus), "L1PFTausNN"); +} +void L1NNTauProducer::process_SW(const l1t::PFCandidateCollection& parts, + std::unique_ptr& iTaus) { + std::vector> pfChargedHadrons; std::vector> pfChargedHadrons_sort_v; std::vector> pfChargedHadrons_seeds_v; - for (const auto& l1PFCand : *l1PFCandidates) + for (const auto& l1PFCand : parts) if ((l1PFCand.id() == l1t::PFCandidate::ChargedHadron || l1PFCand.id() == l1t::PFCandidate::Electron) && std::abs(l1PFCand.eta()) < track_trigger_eta_max) pfChargedHadrons_sort_v.push_back(std::make_unique(l1PFCand)); + if (pfChargedHadrons_sort_v.size() == 0) + return; std::sort( pfChargedHadrons_sort_v.begin(), pfChargedHadrons_sort_v.end(), [](std::unique_ptr& i, std::unique_ptr& j) { return (i->pt() > j->pt()); }); - auto lTaus = std::make_unique(); - if (pfChargedHadrons_sort_v.empty()) { - if (lTaus->empty()) { - PFTau dummy; - lTaus->push_back(dummy); - } - iEvent.put(std::move(lTaus), "L1PFTausNN"); - return; - } pfChargedHadrons_seeds_v.push_back(std::move(pfChargedHadrons_sort_v[0])); for (unsigned int i0 = 1; i0 < pfChargedHadrons_sort_v.size(); i0++) { bool pMatch = false; @@ -100,14 +133,8 @@ void L1NNTauProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) break; } for (unsigned int i0 = 0; i0 < pfChargedHadrons_seeds_v.size(); i0++) { - addTau(*(pfChargedHadrons_seeds_v[i0]), (*l1PFCandidates), lTaus); - } - if (lTaus->empty()) { - PFTau dummy; - lTaus->push_back(dummy); + addTau(*(pfChargedHadrons_seeds_v[i0]), parts, iTaus); } - std::sort(lTaus->begin(), lTaus->end(), [](l1t::PFTau i, l1t::PFTau j) { return (i.pt() > j.pt()); }); - iEvent.put(std::move(lTaus), "L1PFTausNN"); } // create taus based on grid structure @@ -118,6 +145,8 @@ void L1NNTauProducer::addTau(const l1t::PFCandidate& iCand, math::PtEtaPhiMLorentzVector lTot(0, 0, 0, 0); math::PtEtaPhiMLorentzVector lCand(0, 0, 0, 0); int lId = 0; + float z0 = 0; + float dxy = 0; for (const auto& l1PFCand : iParts) { if (reco::deltaR2(iCand, l1PFCand) > fConeSize_ * fConeSize_) continue; @@ -128,6 +157,10 @@ void L1NNTauProducer::addTau(const l1t::PFCandidate& iCand, l1PFCand.id() == l1t::PFCandidate::Photon)) { lId++; lCand += pVec; + if (z0 == 0 && l1PFCand.id() == l1t::PFCandidate::ChargedHadron) { + z0 = l1PFCand.z0(); + dxy = l1PFCand.dxy(); + } } pfTauCands.push_back(l1PFCand); } @@ -136,8 +169,11 @@ void L1NNTauProducer::addTau(const l1t::PFCandidate& iCand, std::sort( pfTauCands.begin(), pfTauCands.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (i.pt() > j.pt()); }); float NN = fTauNNId_->compute(iCand, pfTauCands); - math::PtEtaPhiMLorentzVector tempP4(lCand.Pt(), lCand.Eta(), lCand.Phi(), lCand.M()); - l1t::PFTau l1PFTau(tempP4, NN, 0, lId); + float* lNNVector = fTauNNId_->NNVectorVar(); + math::PtEtaPhiMLorentzVector tempP4(lCand.Pt(), lCand.Eta(), lCand.Phi(), lCand.M() * lCand.M()); + l1t::PFTau l1PFTau(tempP4, lNNVector, NN, 0, lId); + l1PFTau.setZ0(z0); + l1PFTau.setDxy(dxy); outputTaus->push_back(l1PFTau); } void L1NNTauProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -149,9 +185,163 @@ void L1NNTauProducer::fillDescriptions(edm::ConfigurationDescriptions& descripti desc.add("nparticles", 10); desc.add("conesize", 0.4); desc.add("seedpt", 20); + desc.add("HW", true); + desc.add("emseed", true); + desc.add("debug", false); desc.add("L1PFObjects", edm::InputTag("L1PFProducer", "l1pfCandidates")); descriptions.add("L1NNTauProducer", desc); } + +void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, + l1t::PFCandidateCollection& parts, + std::unique_ptr& iTaus) { + // Seed Cone Jet algorithm with ap_fixed types and hardware emulation + L1TauEmu::detaphi_t rCone2 = + L1TauEmu::detaphi_t(fTauSize_ * fTauSize_ * L1TauEmu::etaphi_base * L1TauEmu::etaphi_base); + unsigned lId = 0; + L1TauEmu::pt_t pt_tot = 0; + input2_t p1_tot = 0; + input2_t p1x_tot = 0; + input2_t p1y_tot = 0; + input2_t p1z_tot = 0; + + float p_tot = 0; + float px_tot = 0; + float py_tot = 0; + float pz_tot = 0; + + float eta_1 = seed.eta(); + float phi_1 = seed.phi(); + input_t e1ta_1 = seed.eta(); + input_t p1hi_1 = seed.phi(); + L1TauEmu::pt_t pt = 0; + L1TauEmu::z0_t z0 = 0; + L1TauEmu::dxy_t dxy = 0; + for (unsigned i0 = 0; i0 < parts.size(); i0++) { + pt_tot = pt_tot + L1TauEmu::pt_t(parts[i0].pt()); + if (L1TauEmu::inCone(seed, (parts[i0]), rCone2)) { + if (parts[i0].id() == l1t::PFCandidate::Electron || parts[i0].id() == l1t::PFCandidate::ChargedHadron || + parts[i0].id() == l1t::PFCandidate::Photon) { + lId++; + pt = pt + L1TauEmu::pt_t(parts[i0].pt()); + float deta = parts[i0].eta() - eta_1; + float dphi = parts[i0].phi() - phi_1; + float dr2 = deta * deta + dphi * dphi; + pz_tot = pz_tot + (parts[i0].pt()) * (1 - dr2 * 0.5); + py_tot = py_tot + (parts[i0].pt()) * dphi; //sin(dphi )); + px_tot = px_tot + (parts[i0].pt()) * deta; //sin(deta )); + + input2_t d1eta = input_t(parts[i0].eta()) - e1ta_1; + input2_t d1phi = input_t(parts[i0].phi()) - p1hi_1; + input2_t d1r2 = d1eta * d1eta + d1phi * d1phi; + input2_t tmppt = input_t(parts[i0].pt()); + input2_t half = 0.5; + p1z_tot = p1z_tot + tmppt * (1 - d1r2 * half); + p1y_tot = p1y_tot + tmppt * d1phi; + p1x_tot = p1x_tot + tmppt * d1eta; + p_tot = p_tot + (parts[i0].pt()); + p1_tot = p1_tot + tmppt; + if (z0 == 0 && parts[i0].id() == l1t::PFCandidate::ChargedHadron) { + z0 = parts[i0].hwZ0(); + dxy = parts[i0].hwDxy(); + } + } + } + } + input2_t tmpmass1 = (p1_tot * p1_tot - p1x_tot * p1x_tot - p1y_tot * p1y_tot - p1z_tot * p1z_tot); + if (tmpmass1 < 0) + tmpmass1 = 0; + L1TauEmu::pt_t mass = l1ct::pt_t(tmpmass1); + if (pt < fSeedPt_) + return; + result_t NN = fTauNNIdHW_->compute(seed, parts); + input_t* lNNVector = fTauNNIdHW_->NNVectorVar(); + float pNNVec[80]; + for (unsigned i0 = 0; i0 < 80; i0++) + pNNVec[i0] = float(lNNVector[i0]); + L1TauEmu::etaphi_t eta = etaphi_t(seed.eta() * L1TauEmu::etaphi_base); + L1TauEmu::etaphi_t phi = etaphi_t(seed.phi() * L1TauEmu::etaphi_base); + + //Firmware Tau + l1ct::Tau l1ctTau; + l1ctTau.hwPt = l1ct::pt_t(pt); //l1gt is <16,11> and currently <16,14> + l1ctTau.hwEta = l1ct::Scales::makeGlbEta(float(eta)); + l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(float(phi)); + + l1ctTau.hwSeedPt = seed.pt(); + l1ctTau.hwSeedZ0 = seed.hwZ0(); + l1ctTau.hwCharge = seed.charge(); + + l1ctTau.hwType = l1ct::Tau::type_t(lId); + l1ctTau.hwRawId = ap_uint<10>(NN * 1024); //NN Output is ap_fixed<16, 8> so need to cast. + + //Convert to GT format and pack to encodedTau of PFTau + l1gt::Tau l1gtTau = l1ctTau.toGT(); + l1gt::PackedTau packed_Tau = l1gtTau.pack(); + + //Make PFTau + //Save pt, eta and phi in gt scales + math::PtEtaPhiMLorentzVector tempP4(l1gt::Scales::floatPt(l1gtTau.v3.pt), + l1gt::Scales::floatEta(l1gtTau.v3.eta), + l1gt::Scales::floatPhi(l1gtTau.v3.phi), + float(mass)); + + l1t::PFTau l1PFTau(tempP4, pNNVec, NN, 0, lId); + l1PFTau.setZ0(float(z0) * 0.05); //L1TauEmu::z0_base); + l1PFTau.setDxy(float(dxy) * 0.05); //L1TauEmu::dxy_base); + + l1PFTau.set_encodedTau(packed_Tau); + + iTaus->push_back(l1PFTau); +} + +void L1NNTauProducer::process_HW(const l1t::PFCandidateCollection& parts, + std::unique_ptr& iTaus) { + // The fixed point algorithm emulation + using namespace L1TauEmu; + std::vector work; + work.resize(parts.size()); + std::transform(parts.begin(), parts.end(), work.begin(), [](const l1t::PFCandidate& part) { return part; }); + std::sort(work.begin(), work.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { + return (l1ct::pt_t(i.pt()) > l1ct::pt_t(j.pt())); + }); + + std::vector seeds; + uint lSeed = l1t::PFCandidate::ChargedHadron; + if (fEMSeed) + lSeed = l1t::PFCandidate::Photon; + std::copy_if(work.begin(), work.end(), std::back_inserter(seeds), [&](const l1t::PFCandidate& part) { + return ((part.id() == l1t::PFCandidate::Electron || part.id() == l1t::PFCandidate::ChargedHadron || + part.id() == lSeed) && + std::abs(part.eta()) < track_trigger_eta_max); + }); + // It would be nice to transform the inputs to the etaphi_base of the FW here, as in the line below + // However the phi may wrap around if the etaphi_base > 1, so don't do it... + //std::for_each(work.begin(), work.end(), [](l1t::PFCandidate& x){x.setP4(math::PtEtaPhiMLorentzVector(pt_t(x.pt()), etaphi_t(x.eta()*etaphi_base), etaphi_t(x.phi()*etaphi_base), x.mass()));}); + detaphi_t rCone2 = detaphi_t(fConeSize_ * fConeSize_ * etaphi_base * etaphi_base); + + iTaus->reserve(fMaxTaus_); + while (!seeds.empty() && iTaus->size() < unsigned(fMaxTaus_)) { + // Take the first (highest pt) candidate as a seed + l1t::PFCandidate seed = seeds.at(0); + // Get the particles within a _coneSize of the seed + std::vector particlesInCone; + std::copy_if(work.begin(), work.end(), std::back_inserter(particlesInCone), [&](l1t::PFCandidate& part) { + return inCone(seed, part, rCone2); + }); + makeTau_HW(seed, particlesInCone, iTaus); + // remove the clustered particles + work.erase(std::remove_if( + work.begin(), work.end(), [&](const l1t::PFCandidate& part) { return inCone(seed, part, rCone2); }), + work.end()); + + seeds.erase( + std::remove_if( + seeds.begin(), seeds.end(), [&](const l1t::PFCandidate& part) { return inCone(seed, part, rCone2); }), + seeds.end()); + } +} + L1NNTauProducer::~L1NNTauProducer() {} #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py index 64083f6fa7931..8aa876c19775a 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/L1NNTauProducer_cff.py @@ -15,7 +15,10 @@ tausize = cms.double(0.1), maxtaus = cms.int32(5), nparticles = cms.int32(10), - L1PFObjects = cms.InputTag("l1tLayer1:Puppi"), #1pfCandidates:Puppi"),#l1pfCandidates + HW = cms.bool(True), + emseed = cms.bool(True), + debug = cms.bool(False), + L1PFObjects = cms.InputTag('l1tLayer2Deregionizer:Puppi'), #1pfCandidates:Puppi"),#l1pfCandidates NNFileName = cms.string("L1Trigger/Phase2L1ParticleFlow/data/tau_3layer_puppi.pb") ) From 26a9275f51e55c9aff95bb532f9859de4b15b554 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Sun, 26 Mar 2023 16:36:58 -0500 Subject: [PATCH 2/9] Fixes after rebase. --- DataFormats/L1TParticleFlow/interface/taus.h | 2 +- DataFormats/L1TParticleFlow/src/classes_def.xml | 3 +-- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 7 +++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/DataFormats/L1TParticleFlow/interface/taus.h b/DataFormats/L1TParticleFlow/interface/taus.h index 2193aeab21c9e..179e24c986c0d 100644 --- a/DataFormats/L1TParticleFlow/interface/taus.h +++ b/DataFormats/L1TParticleFlow/interface/taus.h @@ -47,7 +47,7 @@ namespace l1ct { hwPhi = 0; hwSeedPt = 0; hwSeedZ0 = 0; - hwCharge = 0; + hwCharge = false; hwType = 0; hwIsoOrMVA = 0; hwIdVsMu = 0; diff --git a/DataFormats/L1TParticleFlow/src/classes_def.xml b/DataFormats/L1TParticleFlow/src/classes_def.xml index e0b4adf92cac0..346fc705cb82b 100644 --- a/DataFormats/L1TParticleFlow/src/classes_def.xml +++ b/DataFormats/L1TParticleFlow/src/classes_def.xml @@ -33,8 +33,7 @@ - - + diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 0e6423fbb27a0..19b87205d27c2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -67,18 +67,17 @@ L1NNTauProducer::L1NNTauProducer(const edm::ParameterSet& cfg, const tensorflow: fDebug(cfg.getParameter("debug")), fL1PFToken_(consumes>(cfg.getParameter("L1PFObjects"))) { std::string lNNFile = cfg.getParameter("NNFileName"); //,"L1Trigger/Phase2L1Taus/data/tau_3layer.pb"); - if (fHW) { fTauNNIdHW_ = std::make_unique(); fTauNNIdHW_->initialize("input_1:0", fNParticles_); } else { fTauNNId_ = std::make_unique( - lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", cache, lNNFile, fNParticles_); + lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", cache->getSession(), lNNFile, fNParticles_); } produces("L1PFTausNN"); } -std::unique_ptr L1NNTauProducer::initializeGlobalCache(const edm::ParameterSet& cfg) { +std::unique_ptr L1NNTauProducer::initializeGlobalCache(const edm::ParameterSet& cfg) { tensorflow::setLogging("3"); std::string graphPath = edm::FileInPath(cfg.getParameter("NNFileName")).fullPath(); return std::make_unique(graphPath); @@ -112,7 +111,7 @@ void L1NNTauProducer::process_SW(const l1t::PFCandidateCollection& parts, std::abs(l1PFCand.eta()) < track_trigger_eta_max) pfChargedHadrons_sort_v.push_back(std::make_unique(l1PFCand)); - if (pfChargedHadrons_sort_v.size() == 0) + if (pfChargedHadrons_sort_v.empty()) return; std::sort( pfChargedHadrons_sort_v.begin(), From e6d3c9048c3616ec6d49eeaff9056117a0e7e1eb Mon Sep 17 00:00:00 2001 From: Emyr Clement Date: Tue, 6 Jun 2023 12:30:16 +0100 Subject: [PATCH 3/9] code-format --- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 19b87205d27c2..8965f4b3cdea6 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -71,8 +71,10 @@ L1NNTauProducer::L1NNTauProducer(const edm::ParameterSet& cfg, const tensorflow: fTauNNIdHW_ = std::make_unique(); fTauNNIdHW_->initialize("input_1:0", fNParticles_); } else { - fTauNNId_ = std::make_unique( - lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", cache->getSession(), lNNFile, fNParticles_); + fTauNNId_ = std::make_unique(lNNFile.find("v0") == std::string::npos ? "input_1:0" : "dense_1_input:0", + cache->getSession(), + lNNFile, + fNParticles_); } produces("L1PFTausNN"); } From ca2da9265654f9cae1fbadd1bad99ac2c4c5e41b Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 7 Jun 2023 03:09:32 -0500 Subject: [PATCH 4/9] quick fix for eta and phi --- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 8965f4b3cdea6..c836ce0b22954 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -266,8 +266,8 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, //Firmware Tau l1ct::Tau l1ctTau; l1ctTau.hwPt = l1ct::pt_t(pt); //l1gt is <16,11> and currently <16,14> - l1ctTau.hwEta = l1ct::Scales::makeGlbEta(float(eta)); - l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(float(phi)); + l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates + l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(seed.phi()); l1ctTau.hwSeedPt = seed.pt(); l1ctTau.hwSeedZ0 = seed.hwZ0(); From 70daec1708cdabc874b4934620d15b25c13b8b41 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 7 Jun 2023 03:18:26 -0500 Subject: [PATCH 5/9] code formatting --- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index c836ce0b22954..47cbb46bf9e3d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -265,8 +265,8 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, //Firmware Tau l1ct::Tau l1ctTau; - l1ctTau.hwPt = l1ct::pt_t(pt); //l1gt is <16,11> and currently <16,14> - l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates + l1ctTau.hwPt = l1ct::pt_t(pt); //l1gt is <16,11> and currently <16,14> + l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(seed.phi()); l1ctTau.hwSeedPt = seed.pt(); From f2e969d2d523b2423ce0700ffcffd56144ab07b3 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 7 Jun 2023 03:27:53 -0500 Subject: [PATCH 6/9] delete unncessary codes --- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 47cbb46bf9e3d..28d0dbc81b320 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -260,8 +260,6 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, float pNNVec[80]; for (unsigned i0 = 0; i0 < 80; i0++) pNNVec[i0] = float(lNNVector[i0]); - L1TauEmu::etaphi_t eta = etaphi_t(seed.eta() * L1TauEmu::etaphi_base); - L1TauEmu::etaphi_t phi = etaphi_t(seed.phi() * L1TauEmu::etaphi_base); //Firmware Tau l1ct::Tau l1ctTau; From 1800c936b140319dae48d215d0ede23c5c95cd2e Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 7 Jun 2023 03:49:35 -0500 Subject: [PATCH 7/9] remove more unnecessary codes --- .../plugins/L1NNTauProducer.cc | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 28d0dbc81b320..dd1c98fb76658 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -200,17 +200,12 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, L1TauEmu::detaphi_t rCone2 = L1TauEmu::detaphi_t(fTauSize_ * fTauSize_ * L1TauEmu::etaphi_base * L1TauEmu::etaphi_base); unsigned lId = 0; - L1TauEmu::pt_t pt_tot = 0; + input2_t p1_tot = 0; input2_t p1x_tot = 0; input2_t p1y_tot = 0; input2_t p1z_tot = 0; - float p_tot = 0; - float px_tot = 0; - float py_tot = 0; - float pz_tot = 0; - float eta_1 = seed.eta(); float phi_1 = seed.phi(); input_t e1ta_1 = seed.eta(); @@ -218,19 +213,13 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, L1TauEmu::pt_t pt = 0; L1TauEmu::z0_t z0 = 0; L1TauEmu::dxy_t dxy = 0; + for (unsigned i0 = 0; i0 < parts.size(); i0++) { - pt_tot = pt_tot + L1TauEmu::pt_t(parts[i0].pt()); if (L1TauEmu::inCone(seed, (parts[i0]), rCone2)) { if (parts[i0].id() == l1t::PFCandidate::Electron || parts[i0].id() == l1t::PFCandidate::ChargedHadron || parts[i0].id() == l1t::PFCandidate::Photon) { lId++; pt = pt + L1TauEmu::pt_t(parts[i0].pt()); - float deta = parts[i0].eta() - eta_1; - float dphi = parts[i0].phi() - phi_1; - float dr2 = deta * deta + dphi * dphi; - pz_tot = pz_tot + (parts[i0].pt()) * (1 - dr2 * 0.5); - py_tot = py_tot + (parts[i0].pt()) * dphi; //sin(dphi )); - px_tot = px_tot + (parts[i0].pt()) * deta; //sin(deta )); input2_t d1eta = input_t(parts[i0].eta()) - e1ta_1; input2_t d1phi = input_t(parts[i0].phi()) - p1hi_1; @@ -240,8 +229,8 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, p1z_tot = p1z_tot + tmppt * (1 - d1r2 * half); p1y_tot = p1y_tot + tmppt * d1phi; p1x_tot = p1x_tot + tmppt * d1eta; - p_tot = p_tot + (parts[i0].pt()); p1_tot = p1_tot + tmppt; + if (z0 == 0 && parts[i0].id() == l1t::PFCandidate::ChargedHadron) { z0 = parts[i0].hwZ0(); dxy = parts[i0].hwDxy(); @@ -249,14 +238,19 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, } } } + + //Compute the mass input2_t tmpmass1 = (p1_tot * p1_tot - p1x_tot * p1x_tot - p1y_tot * p1y_tot - p1z_tot * p1z_tot); if (tmpmass1 < 0) tmpmass1 = 0; L1TauEmu::pt_t mass = l1ct::pt_t(tmpmass1); + if (pt < fSeedPt_) return; + result_t NN = fTauNNIdHW_->compute(seed, parts); input_t* lNNVector = fTauNNIdHW_->NNVectorVar(); + float pNNVec[80]; for (unsigned i0 = 0; i0 < 80; i0++) pNNVec[i0] = float(lNNVector[i0]); From 8debb0ef4fe2e4a72e04432e6716c6f05c5abb25 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 7 Jun 2023 04:47:29 -0500 Subject: [PATCH 8/9] remove eta and phi --- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index dd1c98fb76658..bfc8d1a9b7fea 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -206,8 +206,6 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, input2_t p1y_tot = 0; input2_t p1z_tot = 0; - float eta_1 = seed.eta(); - float phi_1 = seed.phi(); input_t e1ta_1 = seed.eta(); input_t p1hi_1 = seed.phi(); L1TauEmu::pt_t pt = 0; From 70ee234268495241732b0b757c29d7967ac6f895 Mon Sep 17 00:00:00 2001 From: Duchstf Date: Wed, 21 Jun 2023 04:10:32 -0500 Subject: [PATCH 9/9] add comments and const --- DataFormats/L1TParticleFlow/interface/PFTau.h | 2 +- DataFormats/L1TParticleFlow/src/PFTau.cc | 2 +- L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DataFormats/L1TParticleFlow/interface/PFTau.h b/DataFormats/L1TParticleFlow/interface/PFTau.h index c07e1514894fb..4ff6acf2c081e 100644 --- a/DataFormats/L1TParticleFlow/interface/PFTau.h +++ b/DataFormats/L1TParticleFlow/interface/PFTau.h @@ -82,7 +82,7 @@ namespace l1t { l1gt::Tau getHWTauGT() const { return l1gt::Tau::unpack(encodedTau_); } private: - float NNValues_[80]; + float NNValues_[80]; // Values for each of the 80 NN inputs float iso_; float fullIso_; int id_; diff --git a/DataFormats/L1TParticleFlow/src/PFTau.cc b/DataFormats/L1TParticleFlow/src/PFTau.cc index f19562c03973d..bad668a3e00b5 100644 --- a/DataFormats/L1TParticleFlow/src/PFTau.cc +++ b/DataFormats/L1TParticleFlow/src/PFTau.cc @@ -4,5 +4,5 @@ l1t::PFTau::PFTau( const PolarLorentzVector& p, float NNValues[80], float iso, float fulliso, int id, int hwpt, int hweta, int hwphi) : L1Candidate(p, hwpt, hweta, hwphi, /*hwQuality=*/int(0)), iso_(iso), fullIso_(fulliso), id_(id) { for (int i0 = 0; i0 < 80; i0++) - NNValues_[i0] = NNValues[i0]; + NNValues_[i0] = NNValues[i0]; // copy the array of NN inputs } diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index bfc8d1a9b7fea..68baad7517a74 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -48,9 +48,9 @@ class L1NNTauProducer : public edm::stream::EDProducer> fL1PFToken_; };