From f64421c7e6223ccd10f5563b18e83eedd89f40f0 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 8 May 2024 14:14:16 +0200 Subject: [PATCH 01/36] Adding Displaced Vertexing Producer --- .../L1Trigger/interface/DisplacedVertex.h | 82 ++++++ DataFormats/L1Trigger/src/classes.h | 1 + DataFormats/L1Trigger/src/classes_def.xml | 5 + .../interface/DisplacedVertexProducer.h | 264 +++++++++++++++++ .../plugins/DisplacedVertexProducer.cc | 221 ++++++++++++++ .../python/DisplacedVertexProducer_cfi.py | 10 + .../python/L1TkObjectProducers_cff.py | 3 + .../test/L1TrackObjectNtupleMaker.cc | 271 +++++++++++++++++- .../test/L1TrackObjectNtupleMaker_cfg.py | 9 +- .../plugins/L1FPGATrackProducer.cc | 3 + .../python/Producer_cfi.py | 2 +- .../l1tTTTracksFromTrackletEmulation_cfi.py | 6 +- .../test/L1TrackNtupleMaker.cc | 13 + .../data/clf_GBDT_newbin_disp_xgb.onnx | Bin 0 -> 118038 bytes 14 files changed, 876 insertions(+), 14 deletions(-) create mode 100644 DataFormats/L1Trigger/interface/DisplacedVertex.h create mode 100644 L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h create mode 100644 L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc create mode 100644 L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py create mode 100644 L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h new file mode 100644 index 0000000000000..6e4a80b0c921a --- /dev/null +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -0,0 +1,82 @@ +#ifndef DataFormats_L1TVertex_DisplacedVertex_h +#define DataFormats_L1TVertex_DisplacedVertex_h +#include +#include "DataFormats/Common/interface/Ptr.h" +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" + +namespace l1t { + + class DisplacedTrueVertex { + public: + DisplacedTrueVertex(float d_T, float R_T, float cos_T, float x, float y, float z, float openingAngle, float parentPt): d_T_(d_T), R_T_(R_T), cos_T_(cos_T), x_(x), y_(y), z_(z), openingAngle_(openingAngle), parentPt_(parentPt){} + DisplacedTrueVertex(){} + ~DisplacedTrueVertex(){} + float d_T() const { return d_T_; } + float R_T() const { return R_T_; } + float cos_T() const { return cos_T_; } + float x() const { return x_; } + float y() const { return y_; } + float z() const { return z_; } + float openingAngle() const { return openingAngle_; } + float parentPt() const { return parentPt_; } + + private: + float d_T_; + float R_T_; + float cos_T_; + float x_; + float y_; + float z_; + float openingAngle_; + float parentPt_; + }; + typedef std::vector DisplacedTrueVertexCollection; + + class DisplacedTrackVertex { + public: + DisplacedTrackVertex(int firstIndexTrk, int secondIndexTrk, int firstIndexPt, int secondIndexPt, int inTraj, float d_T, float R_T, float cos_T, float del_Z, float x, float y, float z, float openingAngle, float parentPt, int delIndexPt, bool isReal): firstIndexTrk_(firstIndexTrk), secondIndexTrk_(secondIndexTrk), firstIndexPt_(firstIndexPt), secondIndexPt_(secondIndexPt), inTraj_(inTraj), d_T_(d_T), R_T_(R_T), cos_T_(cos_T), del_Z_(del_Z), x_(x), y_(y), z_(z), openingAngle_(openingAngle), parentPt_(parentPt), delIndexPt_(delIndexPt), isReal_(isReal){} + DisplacedTrackVertex(){} + ~DisplacedTrackVertex(){} + void setScore(float score){ score_ = score; } + float d_T() const { return d_T_; } + float R_T() const { return R_T_; } + float cos_T() const { return cos_T_; } + float x() const { return x_; } + float y() const { return y_; } + float z() const { return z_; } + float openingAngle() const { return openingAngle_; } + float parentPt() const { return parentPt_; } + int firstIndexTrk() const { return firstIndexTrk_; } + int secondIndexTrk() const { return secondIndexTrk_; } + int firstIndexPt() const { return firstIndexPt_; } + int secondIndexPt() const { return secondIndexPt_; } + int inTraj() const { return inTraj_; } + float del_Z() const { return del_Z_; } + int delIndexPt() const { return delIndexPt_; } + bool isReal() const { return isReal_; } + float score() const { return score_; } + private: + int firstIndexTrk_; + int secondIndexTrk_; + int firstIndexPt_; + int secondIndexPt_; + int inTraj_; + float d_T_; + float R_T_; + float cos_T_; + float del_Z_; + float x_; + float y_; + float z_; + float openingAngle_; + float parentPt_; + int delIndexPt_; + bool isReal_; + float score_; + }; + + typedef std::vector DisplacedTrackVertexCollection; +} + +#endif diff --git a/DataFormats/L1Trigger/src/classes.h b/DataFormats/L1Trigger/src/classes.h index 6589b8b674620..69f1a3e1df14a 100644 --- a/DataFormats/L1Trigger/src/classes.h +++ b/DataFormats/L1Trigger/src/classes.h @@ -39,3 +39,4 @@ #include "DataFormats/Common/interface/RefToBase.h" #include "DataFormats/L1Trigger/interface/P2GTCandidate.h" #include "DataFormats/L1Trigger/interface/P2GTAlgoBlock.h" +#include "DataFormats/L1Trigger/interface/DisplacedVertex.h" diff --git a/DataFormats/L1Trigger/src/classes_def.xml b/DataFormats/L1Trigger/src/classes_def.xml index 7afcc79dc8447..2652d58bf8014 100644 --- a/DataFormats/L1Trigger/src/classes_def.xml +++ b/DataFormats/L1Trigger/src/classes_def.xml @@ -335,6 +335,11 @@ + + + + + diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h new file mode 100644 index 0000000000000..c1109fed15cec --- /dev/null +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -0,0 +1,264 @@ +#ifndef __L1Trigger_L1TTrackMatch_DisplacedVertexProducer_h__ +#define __L1Trigger_L1TTrackMatch_DisplacedVertexProducer_h__ + +#include "DataFormats/L1Trigger/interface/DisplacedVertex.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "PhysicsTools/ONNXRuntime/interface/ONNXRuntime.h" +#include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" +#include "TMath.h" +#include +#include +#include +#include +#include +#include + +using namespace std; + +class Track_Parameters +{ +public: + float pt; + float d0; + float dxy = -99999; + float z0; + float eta; + float phi; + float charge; + float rho; + int index; + int pdgid = -99999; + float vx; + float vy; + float vz; + Track_Parameters* tp; + float x0; + float y0; + int nstubs; + float chi2rphi; + float chi2rz; + float bendchi2; + float MVA1; + float MVA2; + + float dist_calc(float x_dv, float y_dv, float x, float y){ + dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); + return dxy; + } + float x(float phi_T=0){ + return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); + } + float y(float phi_T=0){ + return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); + } + float z(float phi_T=0){ + float theta = 2 * TMath::ATan(TMath::Exp(-eta)); + return (z0 + rho*phi_T/TMath::Tan(theta)); + } + float deltaPhi_T(Double_t phi1, Double_t phi2) + { + Double_t dPhi = phi1 - phi2; + if (dPhi >= TMath::Pi()) + dPhi -= 2. * TMath::Pi(); + if (dPhi <= -TMath::Pi()) + dPhi += 2. * TMath::Pi(); + return dPhi; + } + float phi_T(float x, float y){ + float num = x - (d0 + charge * rho) * TMath::Sin(phi); + float den = y + (d0 + charge * rho) * TMath::Cos(phi); + return ((phi-TMath::ATan2(num,-den))/charge); + } + float z(float x, float y){ + float t = std::sinh(eta); + float r = TMath::Sqrt(pow(x,2)+pow(y,2)); + return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math + } + Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0, float MVA2_in=0) + { + pt = pt_in; + d0 = d0_in; + z0 = z0_in; + eta = eta_in; + phi = phi_in; + if(charge_in > 0){ + charge = 1; + } + else if (charge_in < 0){ + charge = -1; + } + else{ + charge = 0; + } + index = index_in; + pdgid = pdgid_in; + vx = vx_in; + vy = vy_in; + vz = vz_in; + tp = tp_in; + rho = fabs(1/charge_in); + x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); + y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); + nstubs = nstubs_in; + chi2rphi = chi2rphi_in; + chi2rz = chi2rz_in; + bendchi2 = bendchi2_in; + MVA1 = MVA1_in; + MVA2 = MVA2_in; + } + Track_Parameters(){}; + ~Track_Parameters(){}; +}; + +constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) +{ + return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) +{ + return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) +{ + return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); +} + +std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) +{ + std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; + std::valarray p_vec = {-r_vec[1],r_vec[0]}; + if(a.charge>0){ + p_vec *= -1; + } + p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + p_vec *= a.pt; + return p_vec; +} + +class Vertex_Parameters +{ +public: + Double_t x_dv; + Double_t y_dv; + Double_t z_dv; + float score; + Track_Parameters a; + Track_Parameters b; + int inTraj; + bool matched = false; + std::vector tracks = {}; + float p_mag; + float p2_mag; + float openingAngle; + float R_T; + float cos_T; + float alpha_T; + float d_T; + float chi2rphidofSum; + float chi2rzdofSum; + float bendchi2Sum; + float MVA1Sum; + float MVA2Sum; + int numStubsSum; + float delta_z; + float delta_eta; + float phi; + Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): + a(a_in), + b(b_in) + { + x_dv = x_dv_in; + y_dv = y_dv_in; + z_dv = z_dv_in; + score = score_in; + tracks.push_back(a_in); + tracks.push_back(b_in); + inTraj = inTraj_in; + std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); + std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); + std::valarray p_tot = p_trk_1+p_trk_2; + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); + cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); + int ndof_1 = 2 * a_in.nstubs - 5; + float chi2rphidof_1 = a_in.chi2rphi / ndof_1; + float chi2rzdof_1 = a_in.chi2rz / ndof_1; + float bendchi2_1 = a_in.bendchi2; + int ndof_2 = 2 * b_in.nstubs - 5; + float chi2rphidof_2 = b_in.chi2rphi / ndof_2; + float chi2rzdof_2 = b_in.chi2rz / ndof_2; + float bendchi2_2 = b_in.bendchi2; + chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; + chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; + bendchi2Sum = bendchi2_1 + bendchi2_2; + MVA1Sum = a_in.MVA1 + b_in.MVA1; + MVA2Sum = a_in.MVA2 + b_in.MVA2; + numStubsSum = a_in.nstubs + b_in.nstubs; + p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); + delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); + delta_eta = fabs(a_in.eta-b_in.eta); + } + + void addTrack(Track_Parameters trk){ + tracks.push_back(trk); + std::valarray p_tot = {0,0}; + for(auto track : tracks){ + p_tot+= calcPVec(track,x_dv,y_dv); + } + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); + int ndof = 2 * trk.nstubs - 5; + float chi2rphidof = trk.chi2rphi / ndof; + float chi2rzdof = trk.chi2rz / ndof; + float bendchi2 = trk.bendchi2; + chi2rphidofSum+= chi2rphidof; + chi2rzdofSum+= chi2rzdof; + bendchi2Sum+= bendchi2; + numStubsSum+= trk.nstubs; + p2_mag+= pow(trk.pt,2); + MVA1Sum+= trk.MVA1; + MVA2Sum+= trk.MVA2; + } + + Vertex_Parameters(){}; + ~Vertex_Parameters(){}; +}; + +constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) +{ + return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); +} + +class DisplacedVertexProducer : public edm::global::EDProducer<> { + public: + explicit DisplacedVertexProducer(const edm::ParameterSet&); + ~DisplacedVertexProducer() override {} + + private: + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + + private: + const edm::EDGetTokenT> ttTrackMCTruthToken_; + const edm::EDGetTokenT >> trackToken_; + const std::string outputTrackCollectionName_; + const std::string qualityAlgorithm_; + const std::string ONNXmodel_; + const std::string ONNXInputName_; + const std::vector featureNames_; + std::unique_ptr runTime_; +}; + +#endif diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc new file mode 100644 index 0000000000000..d5a0223fe0fd4 --- /dev/null +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -0,0 +1,221 @@ +#include "L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h" + +bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } + +Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points + return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); +} + +Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho;// Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if((R>=(R1-R2)) && (R<=(R1+R2))){ + return (0); + } + else if(R==0){ + return (-99999.0); + } + else{ + return(R-R1-R2); + } +} + +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if(R==0) return -1; + float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); + float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; + float co2 = 0; + if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); + float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); + float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); + float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); + float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); + float ix1_z1 = a.z(ix1_x,ix1_y); + float ix1_z2 = b.z(ix1_x,ix1_y); + float ix1_delz = fabs(ix1_z1-ix1_z2); + float ix2_z1 = a.z(ix2_x,ix2_y); + float ix2_z2 = b.z(ix2_x,ix2_y); + float ix2_delz = fabs(ix2_z1-ix2_z2); + float trk1_POCA[2] = {a.d0*sin(a.phi),-1*a.d0*cos(a.phi)}; + float trk2_POCA[2] = {b.d0*sin(b.phi),-1*b.d0*cos(b.phi)}; + float trk1_ix1_delxy[2] = {ix1_x-trk1_POCA[0],ix1_y-trk1_POCA[1]}; + float trk1_ix2_delxy[2] = {ix2_x-trk1_POCA[0],ix2_y-trk1_POCA[1]}; + float trk2_ix1_delxy[2] = {ix1_x-trk2_POCA[0],ix1_y-trk2_POCA[1]}; + float trk2_ix2_delxy[2] = {ix2_x-trk2_POCA[0],ix2_y-trk2_POCA[1]}; + float trk1_traj[2] = {cos(a.phi),sin(a.phi)}; + float trk2_traj[2] = {cos(b.phi),sin(b.phi)}; + bool trk1_ix1_inTraj = ((trk1_ix1_delxy[0]*trk1_traj[0]+trk1_ix1_delxy[1]*trk1_traj[1])>0) ? true : false; + bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; + bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; + bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; + if(trk1_ix1_inTraj&&trk2_ix1_inTraj&&trk1_ix2_inTraj&&trk2_ix2_inTraj){ + if(ix1_delz >(iConfig.getParameter("mcTruthTrackInputTag"))), + trackToken_(consumes > >(iConfig.getParameter("l1TracksInputTag"))), + outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), + ONNXmodel_(iConfig.getParameter("ONNXmodel")), + ONNXInputName_(iConfig.getParameter("ONNXInputName")), + featureNames_(iConfig.getParameter>("featureNames")) +{ + //--- Define EDM output to be written to file (if required) + produces(outputTrackCollectionName_); + runTime_ = std::make_unique(this->ONNXmodel_); +} + +void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { + edm::Handle > MCTruthTTTrackHandle; + iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle); + edm::Handle > > TTTrackHandle; + iEvent.getByToken(trackToken_, TTTrackHandle); + std::vector >::const_iterator iterL1Track; + int this_l1track = 0; + std::vector selectedTracks; + std::vector> selectedTPs; + + for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { + edm::Ptr > l1track_ptr(TTTrackHandle, this_l1track); + this_l1track++; + float pt = iterL1Track->momentum().perp(); + float eta = iterL1Track->momentum().eta(); + float phi = iterL1Track->momentum().phi(); + float z0 = iterL1Track->z0(); //cm + float x0 = iterL1Track->POCA().x(); + float y0 = iterL1Track->POCA().y(); + float d0 = -x0 * sin(phi) + y0 * cos(phi); + float rinv = iterL1Track->rInv(); + float chi2 = iterL1Track->chi2Red(); + float chi2rphi = iterL1Track->chi2XYRed(); + float chi2rz = iterL1Track->chi2ZRed(); + float bendchi2 = iterL1Track->stubPtConsistency(); + float MVA1 = iterL1Track->trkMVA1(); + float MVA2 = iterL1Track->trkMVA2(); + std::vector >, TTStub > > stubRefs = iterL1Track->getStubRefs(); + int nstub = (int)stubRefs.size(); + if( chi2rz<3.0 && MVA2>0.2 && MVA1>0.2 && pt>3.0 && fabs(eta)<2.4){ + + if(fabs(d0)>1.0){ + if(MVA1<=0.5) continue; + } + if(fabs(eta)>1.1 && fabs(eta)<1.7){ + if(nstub<=4) continue; + } + if(fabs(eta)>0.95){ + if(fabs(d0)<=0.08) continue; + } + if(fabs(eta)<=0.95){ + if(fabs(d0)<=0.06) continue; + } + + //std::cout<<"track params: "< my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); + selectedTPs.push_back(my_tp); + } + } + //std::cout<<"num selected tracks: "< product(new std::vector()); + for(int i=0; i tp_i = selectedTPs[i]; + edm::Ptr tp_j = selectedTPs[j]; + bool isReal = false; + if(!tp_i.isNull() && !tp_j.isNull()){ + bool isHard_i = false; + bool isHard_j = false; + if(tp_i->genParticles().size() && tp_j->genParticles().size()){ + isHard_i = tp_i->genParticles()[0]->isHardProcess() || tp_i->genParticles()[0]->fromHardProcessFinalState(); + isHard_j = tp_j->genParticles()[0]->isHardProcess() || tp_j->genParticles()[0]->fromHardProcessFinalState(); + } + + if(tp_i->eventId().event()==0 && tp_j->eventId().event()==0 && fabs(tp_i->vx()-tp_j->vx())<0.0001 && fabs(tp_i->vy()-tp_j->vy())<0.0001 && fabs(tp_i->vz()-tp_j->vz())<0.0001 && isHard_i && isHard_j){ + isReal = true; + } + } + + int inTraj = calcVertex(selectedTracks[i],selectedTracks[j],x_dv_trk,y_dv_trk,z_dv_trk); + Vertex_Parameters vertex = Vertex_Parameters(x_dv_trk, y_dv_trk, z_dv_trk, selectedTracks[i], selectedTracks[j]); + l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracks[i].index, selectedTracks[j].index, i, j, inTraj, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z, vertex.x_dv, vertex.y_dv, vertex.z_dv, vertex.openingAngle, vertex.p_mag, fabs(i-j), isReal); + std::vector ortinput_names; + std::vector ortoutput_names; + cms::Ort::FloatArrays ortinput; + cms::Ort::FloatArrays ortoutputs; + float minD0 = vertex.a.d0; + if(fabs(vertex.b.d0) Transformed_features = {vertex.delta_z, vertex.R_T, vertex.cos_T, vertex.d_T, vertex.chi2rzdofSum, float(vertex.numStubsSum), vertex.chi2rphidofSum, minD0, vertex.a.pt+vertex.b.pt}; + std::vector Transformed_features = {selectedTracks[i].pt, selectedTracks[j].pt, selectedTracks[i].eta, selectedTracks[j].eta, selectedTracks[i].phi, selectedTracks[j].phi, selectedTracks[i].d0, selectedTracks[j].d0, selectedTracks[i].z0, selectedTracks[j].z0, selectedTracks[i].chi2rz, selectedTracks[j].chi2rz, selectedTracks[i].bendchi2, selectedTracks[j].bendchi2, selectedTracks[i].MVA1, selectedTracks[j].MVA1, selectedTracks[i].MVA2, selectedTracks[j].MVA2, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z}; + //cms::Ort::ONNXRuntime Runtime(this->ONNXmodel_); //Setup ONNX runtime + ortinput_names.push_back(this->ONNXInputName_); + ortoutput_names = runTime_->getOutputNames(); + ortinput.push_back(Transformed_features); + int batch_size = 1; + ortoutputs = runTime_->run(ortinput_names, ortinput, {}, ortoutput_names, batch_size); + outputVertex.setScore(ortoutputs[1][1]); + product->emplace_back(outputVertex); + } + } + // //=== Store output + + iEvent.put(std::move(product), outputTrackCollectionName_); +} + +DEFINE_FWK_MODULE(DisplacedVertexProducer); diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py new file mode 100644 index 0000000000000..1e6164606c629 --- /dev/null +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +DisplacedVertexProducer = cms.EDProducer('DisplacedVertexProducer', + l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), + l1TrackVertexCollectionName = cms.string("dispVertices"), + mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), + ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre2/src/L1Trigger/L1TTrackMatch/test/trackAndVertParams_model.onnx"), + ONNXInputName = cms.string("feature_input"), + featureNames = cms.vstring(['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) +) diff --git a/L1Trigger/L1TTrackMatch/python/L1TkObjectProducers_cff.py b/L1Trigger/L1TTrackMatch/python/L1TkObjectProducers_cff.py index 6b642ed5781a2..79bcb2d8903ac 100644 --- a/L1Trigger/L1TTrackMatch/python/L1TkObjectProducers_cff.py +++ b/L1Trigger/L1TTrackMatch/python/L1TkObjectProducers_cff.py @@ -41,6 +41,9 @@ #Other tk Objects +from L1Trigger.L1TTrackMatch.DisplacedVertexProducer_cfi.py import DisplacedVertexProducer +pDisplacedVertexProducer = cms.Path( DisplacedVertexProducer) + # from L1Trigger.L1TTrackMatch.L1TrackerJetProducer_cfi import L1TrackerJets # pL1TrackerJets = cms.Path( L1TrackerJets) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index a90b8f1d4f9f1..a74d1054ff32b 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -72,6 +72,7 @@ #include "DataFormats/L1Trigger/interface/EtSum.h" #include "L1Trigger/L1TTrackMatch/interface/L1TkEtMissEmuAlgo.h" #include "L1Trigger/L1TTrackMatch/interface/L1TkHTMissEmulatorProducer.h" +#include "DataFormats/L1Trigger/interface/DisplacedVertex.h" /////////////// // ROOT HEADERS @@ -184,7 +185,8 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer> GenJetToken_; edm::EDGetTokenT> GenParticleToken_; edm::EDGetTokenT> SimVertexToken_; + edm::EDGetTokenT> DispVertToken_; edm::EDGetTokenT L1VertexToken_; edm::EDGetTokenT L1VertexEmuToken_; @@ -286,12 +289,32 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_gen_z0; std::vector* m_gen_mother_pdgid; + //displaced vertices + std::vector* m_dv_d_T; + std::vector* m_dv_R_T; + std::vector* m_dv_cos_T; + std::vector* m_dv_x; + std::vector* m_dv_y; + std::vector* m_dv_z; + std::vector* m_dv_openingAngle; + std::vector* m_dv_parentPt; + std::vector* m_dv_firstIndexTrk; + std::vector* m_dv_secondIndexTrk; + std::vector* m_dv_firstIndexPt; + std::vector* m_dv_secondIndexPt; + std::vector* m_dv_inTraj; + std::vector* m_dv_del_Z; + std::vector* m_dv_delIndexPt; + std::vector* m_dv_isReal; + std::vector* m_dv_score; + // all L1 tracks (prompt) std::vector* m_trk_pt; std::vector* m_trk_eta; std::vector* m_trk_phi; std::vector* m_trk_phi_local; std::vector* m_trk_d0; // (filled if nFitPar==5, else 999) + std::vector* m_trk_rinv; std::vector* m_trk_z0; std::vector* m_trk_chi2; std::vector* m_trk_chi2dof; @@ -299,6 +322,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trk_chi2rz; std::vector* m_trk_bendchi2; std::vector* m_trk_MVA1; + std::vector* m_trk_MVA2; std::vector* m_trk_nstub; std::vector* m_trk_lhits; std::vector* m_trk_dhits; @@ -340,6 +364,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_phi; std::vector* m_trkExt_phi_local; std::vector* m_trkExt_d0; // (filled if nFitPar==5, else 999) + std::vector* m_trkExt_rinv; std::vector* m_trkExt_z0; std::vector* m_trkExt_chi2; std::vector* m_trkExt_chi2dof; @@ -347,6 +372,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_chi2rz; std::vector* m_trkExt_bendchi2; std::vector* m_trkExt_MVA; + std::vector* m_trkExt_MVA2; std::vector* m_trkExt_nstub; std::vector* m_trkExt_lhits; std::vector* m_trkExt_dhits; @@ -364,6 +390,10 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_matchtp_phi; std::vector* m_trkExt_matchtp_z0; std::vector* m_trkExt_matchtp_dxy; + std::vector* m_trkExt_matchtp_d0; + std::vector* m_trkExt_matchtp_x; + std::vector* m_trkExt_matchtp_y; + std::vector* m_trkExt_matchtp_z; std::vector* m_trkExt_gtt_pt; std::vector* m_trkExt_gtt_eta; std::vector* m_trkExt_gtt_phi; @@ -387,6 +417,9 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_tp_dxy; std::vector* m_tp_d0; std::vector* m_tp_z0; + std::vector* m_tp_x; + std::vector* m_tp_y; + std::vector* m_tp_z; std::vector* m_tp_d0_prod; std::vector* m_tp_z0_prod; std::vector* m_tp_pdgid; @@ -400,6 +433,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrk_eta; std::vector* m_matchtrk_phi; std::vector* m_matchtrk_d0; //this variable is only filled if nFitPar==5 + std::vector* m_matchtrk_rinv; std::vector* m_matchtrk_z0; std::vector* m_matchtrk_chi2; std::vector* m_matchtrk_chi2dof; @@ -407,6 +441,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrk_chi2rz; std::vector* m_matchtrk_bendchi2; std::vector* m_matchtrk_MVA1; + std::vector* m_matchtrk_MVA2; std::vector* m_matchtrk_nstub; std::vector* m_matchtrk_lhits; std::vector* m_matchtrk_dhits; @@ -418,6 +453,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExt_eta; std::vector* m_matchtrkExt_phi; std::vector* m_matchtrkExt_d0; //this variable is only filled if nFitPar==5 + std::vector* m_matchtrkExt_rinv; std::vector* m_matchtrkExt_z0; std::vector* m_matchtrkExt_chi2; std::vector* m_matchtrkExt_chi2dof; @@ -425,6 +461,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExt_chi2rz; std::vector* m_matchtrkExt_bendchi2; std::vector* m_matchtrkExt_MVA; + std::vector* m_matchtrkExt_MVA2; std::vector* m_matchtrkExt_nstub; std::vector* m_matchtrkExt_lhits; std::vector* m_matchtrkExt_dhits; @@ -595,6 +632,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon RecoVertexEmuInputTag = iConfig.getParameter("RecoVertexEmuInputTag"); GenParticleInputTag = iConfig.getParameter("GenParticleInputTag"); SimVertexInputTag = iConfig.getParameter("SimVertexInputTag"); + DisplacedVertexInputTag = iConfig.getParameter("DisplacedVertexInputTag"); if (Displaced == "Prompt" || Displaced == "Both") { L1TrackInputTag = iConfig.getParameter("L1TrackInputTag"); @@ -732,6 +770,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenJetToken_ = consumes>(GenJetInputTag); GenParticleToken_ = consumes>(GenParticleInputTag); SimVertexToken_ = consumes>(SimVertexInputTag); + DispVertToken_ = consumes>(DisplacedVertexInputTag); L1VertexToken_ = consumes(RecoVertexInputTag); L1VertexEmuToken_ = consumes(RecoVertexEmuInputTag); tTopoToken_ = esConsumes(edm::ESInputTag("", "")); @@ -756,12 +795,14 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trk_phi_local; delete m_trk_z0; delete m_trk_d0; + delete m_trk_rinv; delete m_trk_chi2; delete m_trk_chi2dof; delete m_trk_chi2rphi; delete m_trk_chi2rz; delete m_trk_bendchi2; delete m_trk_MVA1; + delete m_trk_MVA2; delete m_trk_nstub; delete m_trk_lhits; delete m_trk_dhits; @@ -803,12 +844,14 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_phi_local; delete m_trkExt_z0; delete m_trkExt_d0; + delete m_trkExt_rinv; delete m_trkExt_chi2; delete m_trkExt_chi2dof; delete m_trkExt_chi2rphi; delete m_trkExt_chi2rz; delete m_trkExt_bendchi2; delete m_trkExt_MVA; + delete m_trkExt_MVA2; delete m_trkExt_nstub; delete m_trkExt_lhits; delete m_trkExt_dhits; @@ -826,6 +869,10 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_matchtp_phi; delete m_trkExt_matchtp_z0; delete m_trkExt_matchtp_dxy; + delete m_trkExt_matchtp_d0; + delete m_trkExt_matchtp_x; + delete m_trkExt_matchtp_y; + delete m_trkExt_matchtp_z; delete m_trkExt_gtt_pt; delete m_trkExt_gtt_eta; delete m_trkExt_gtt_phi; @@ -848,6 +895,9 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_tp_dxy; delete m_tp_d0; delete m_tp_z0; + delete m_tp_x; + delete m_tp_y; + delete m_tp_z; delete m_tp_d0_prod; delete m_tp_z0_prod; delete m_tp_pdgid; @@ -863,17 +913,37 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_gen_z0; + delete m_dv_d_T; + delete m_dv_R_T; + delete m_dv_cos_T; + delete m_dv_x; + delete m_dv_y; + delete m_dv_z; + delete m_dv_openingAngle; + delete m_dv_parentPt; + delete m_dv_firstIndexTrk; + delete m_dv_secondIndexTrk; + delete m_dv_firstIndexPt; + delete m_dv_secondIndexPt; + delete m_dv_inTraj; + delete m_dv_del_Z; + delete m_dv_delIndexPt; + delete m_dv_isReal; + delete m_dv_score; + delete m_matchtrk_pt; delete m_matchtrk_eta; delete m_matchtrk_phi; delete m_matchtrk_z0; delete m_matchtrk_d0; + delete m_matchtrk_rinv; delete m_matchtrk_chi2; delete m_matchtrk_chi2dof; delete m_matchtrk_chi2rphi; delete m_matchtrk_chi2rz; delete m_matchtrk_bendchi2; delete m_matchtrk_MVA1; + delete m_matchtrk_MVA2; delete m_matchtrk_nstub; delete m_matchtrk_dhits; delete m_matchtrk_lhits; @@ -885,12 +955,14 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrkExt_phi; delete m_matchtrkExt_z0; delete m_matchtrkExt_d0; + delete m_matchtrkExt_rinv; delete m_matchtrkExt_chi2; delete m_matchtrkExt_chi2dof; delete m_matchtrkExt_chi2rphi; delete m_matchtrkExt_chi2rz; delete m_matchtrkExt_bendchi2; delete m_matchtrkExt_MVA; + delete m_matchtrkExt_MVA2; delete m_matchtrkExt_nstub; delete m_matchtrkExt_dhits; delete m_matchtrkExt_lhits; @@ -1023,12 +1095,14 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trk_phi_local = new std::vector; m_trk_z0 = new std::vector; m_trk_d0 = new std::vector; + m_trk_rinv = new std::vector; m_trk_chi2 = new std::vector; m_trk_chi2dof = new std::vector; m_trk_chi2rphi = new std::vector; m_trk_chi2rz = new std::vector; m_trk_bendchi2 = new std::vector; m_trk_MVA1 = new std::vector; + m_trk_MVA2 = new std::vector; m_trk_nstub = new std::vector; m_trk_lhits = new std::vector; m_trk_dhits = new std::vector; @@ -1070,12 +1144,14 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_phi_local = new std::vector; m_trkExt_z0 = new std::vector; m_trkExt_d0 = new std::vector; + m_trkExt_rinv = new std::vector; m_trkExt_chi2 = new std::vector; m_trkExt_chi2dof = new std::vector; m_trkExt_chi2rphi = new std::vector; m_trkExt_chi2rz = new std::vector; m_trkExt_bendchi2 = new std::vector; m_trkExt_MVA = new std::vector; + m_trkExt_MVA2 = new std::vector; m_trkExt_nstub = new std::vector; m_trkExt_lhits = new std::vector; m_trkExt_dhits = new std::vector; @@ -1093,6 +1169,10 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_matchtp_phi = new std::vector; m_trkExt_matchtp_z0 = new std::vector; m_trkExt_matchtp_dxy = new std::vector; + m_trkExt_matchtp_d0 = new std::vector; + m_trkExt_matchtp_x = new std::vector; + m_trkExt_matchtp_y = new std::vector; + m_trkExt_matchtp_z = new std::vector; m_trkExt_gtt_pt = new std::vector; m_trkExt_gtt_eta = new std::vector; m_trkExt_gtt_phi = new std::vector; @@ -1115,6 +1195,9 @@ void L1TrackObjectNtupleMaker::beginJob() { m_tp_dxy = new std::vector; m_tp_d0 = new std::vector; m_tp_z0 = new std::vector; + m_tp_x = new std::vector; + m_tp_y = new std::vector; + m_tp_z = new std::vector; m_tp_d0_prod = new std::vector; m_tp_z0_prod = new std::vector; m_tp_pdgid = new std::vector; @@ -1130,17 +1213,37 @@ void L1TrackObjectNtupleMaker::beginJob() { m_gen_z0 = new std::vector; + m_dv_d_T = new std::vector; + m_dv_R_T = new std::vector; + m_dv_cos_T = new std::vector; + m_dv_x = new std::vector; + m_dv_y = new std::vector; + m_dv_z = new std::vector; + m_dv_openingAngle = new std::vector; + m_dv_parentPt = new std::vector; + m_dv_firstIndexTrk = new std::vector; + m_dv_secondIndexTrk = new std::vector; + m_dv_firstIndexPt = new std::vector; + m_dv_secondIndexPt = new std::vector; + m_dv_inTraj = new std::vector; + m_dv_del_Z = new std::vector; + m_dv_delIndexPt = new std::vector; + m_dv_isReal = new std::vector; + m_dv_score = new std::vector; + m_matchtrk_pt = new std::vector; m_matchtrk_eta = new std::vector; m_matchtrk_phi = new std::vector; m_matchtrk_z0 = new std::vector; m_matchtrk_d0 = new std::vector; + m_matchtrk_rinv = new std::vector; m_matchtrk_chi2 = new std::vector; m_matchtrk_chi2dof = new std::vector; m_matchtrk_chi2rphi = new std::vector; m_matchtrk_chi2rz = new std::vector; m_matchtrk_bendchi2 = new std::vector; m_matchtrk_MVA1 = new std::vector; + m_matchtrk_MVA2 = new std::vector; m_matchtrk_nstub = new std::vector; m_matchtrk_dhits = new std::vector; m_matchtrk_lhits = new std::vector; @@ -1152,12 +1255,14 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrkExt_phi = new std::vector; m_matchtrkExt_z0 = new std::vector; m_matchtrkExt_d0 = new std::vector; + m_matchtrkExt_rinv = new std::vector; m_matchtrkExt_chi2 = new std::vector; m_matchtrkExt_chi2dof = new std::vector; m_matchtrkExt_chi2rphi = new std::vector; m_matchtrkExt_chi2rz = new std::vector; m_matchtrkExt_bendchi2 = new std::vector; m_matchtrkExt_MVA = new std::vector; + m_matchtrkExt_MVA2 = new std::vector; m_matchtrkExt_nstub = new std::vector; m_matchtrkExt_dhits = new std::vector; m_matchtrkExt_lhits = new std::vector; @@ -1282,6 +1387,7 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trk_phi", &m_trk_phi); eventTree->Branch("trk_phi_local", &m_trk_phi_local); eventTree->Branch("trk_d0", &m_trk_d0); + eventTree->Branch("trk_rinv", &m_trk_rinv); eventTree->Branch("trk_z0", &m_trk_z0); eventTree->Branch("trk_chi2", &m_trk_chi2); eventTree->Branch("trk_chi2dof", &m_trk_chi2dof); @@ -1289,6 +1395,7 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trk_chi2rz", &m_trk_chi2rz); eventTree->Branch("trk_bendchi2", &m_trk_bendchi2); eventTree->Branch("trk_MVA1", &m_trk_MVA1); + eventTree->Branch("trk_MVA2", &m_trk_MVA2); eventTree->Branch("trk_nstub", &m_trk_nstub); eventTree->Branch("trk_lhits", &m_trk_lhits); eventTree->Branch("trk_dhits", &m_trk_dhits); @@ -1333,6 +1440,7 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_phi", &m_trkExt_phi); eventTree->Branch("trkExt_phi_local", &m_trkExt_phi_local); eventTree->Branch("trkExt_d0", &m_trkExt_d0); + eventTree->Branch("trkExt_rinv", &m_trkExt_rinv); eventTree->Branch("trkExt_z0", &m_trkExt_z0); eventTree->Branch("trkExt_chi2", &m_trkExt_chi2); eventTree->Branch("trkExt_chi2dof", &m_trkExt_chi2dof); @@ -1340,6 +1448,7 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_chi2rz", &m_trkExt_chi2rz); eventTree->Branch("trkExt_bendchi2", &m_trkExt_bendchi2); eventTree->Branch("trkExt_MVA", &m_trkExt_MVA); + eventTree->Branch("trkExt_MVA2", &m_trkExt_MVA2); eventTree->Branch("trkExt_nstub", &m_trkExt_nstub); eventTree->Branch("trkExt_lhits", &m_trkExt_lhits); eventTree->Branch("trkExt_dhits", &m_trkExt_dhits); @@ -1357,6 +1466,10 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_matchtp_phi", &m_trkExt_matchtp_phi); eventTree->Branch("trkExt_matchtp_z0", &m_trkExt_matchtp_z0); eventTree->Branch("trkExt_matchtp_dxy", &m_trkExt_matchtp_dxy); + eventTree->Branch("trkExt_matchtp_d0", &m_trkExt_matchtp_d0); + eventTree->Branch("trkExt_matchtp_x", &m_trkExt_matchtp_x); + eventTree->Branch("trkExt_matchtp_y", &m_trkExt_matchtp_y); + eventTree->Branch("trkExt_matchtp_z", &m_trkExt_matchtp_z); eventTree->Branch("trkExt_gtt_pt", &m_trkExt_gtt_pt); eventTree->Branch("trkExt_gtt_eta", &m_trkExt_gtt_eta); eventTree->Branch("trkExt_gtt_phi", &m_trkExt_gtt_phi); @@ -1381,6 +1494,9 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("tp_dxy", &m_tp_dxy); eventTree->Branch("tp_d0", &m_tp_d0); eventTree->Branch("tp_z0", &m_tp_z0); + eventTree->Branch("tp_x", &m_tp_x); + eventTree->Branch("tp_y", &m_tp_y); + eventTree->Branch("tp_z", &m_tp_z); eventTree->Branch("tp_d0_prod", &m_tp_d0_prod); eventTree->Branch("tp_z0_prod", &m_tp_z0_prod); eventTree->Branch("tp_pdgid", &m_tp_pdgid); @@ -1395,12 +1511,14 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrk_phi", &m_matchtrk_phi); eventTree->Branch("matchtrk_z0", &m_matchtrk_z0); eventTree->Branch("matchtrk_d0", &m_matchtrk_d0); + eventTree->Branch("matchtrk_rinv", &m_matchtrk_rinv); eventTree->Branch("matchtrk_chi2", &m_matchtrk_chi2); eventTree->Branch("matchtrk_chi2dof", &m_matchtrk_chi2dof); eventTree->Branch("matchtrk_chi2rphi", &m_matchtrk_chi2rphi); eventTree->Branch("matchtrk_chi2rz", &m_matchtrk_chi2rz); eventTree->Branch("matchtrk_bendchi2", &m_matchtrk_bendchi2); eventTree->Branch("matchtrk_MVA1", &m_matchtrk_MVA1); + eventTree->Branch("matchtrk_MVA2", &m_matchtrk_MVA2); eventTree->Branch("matchtrk_nstub", &m_matchtrk_nstub); eventTree->Branch("matchtrk_lhits", &m_matchtrk_lhits); eventTree->Branch("matchtrk_dhits", &m_matchtrk_dhits); @@ -1414,12 +1532,14 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrkExt_phi", &m_matchtrkExt_phi); eventTree->Branch("matchtrkExt_z0", &m_matchtrkExt_z0); eventTree->Branch("matchtrkExt_d0", &m_matchtrkExt_d0); + eventTree->Branch("matchtrkExt_rinv", &m_matchtrkExt_rinv); eventTree->Branch("matchtrkExt_chi2", &m_matchtrkExt_chi2); eventTree->Branch("matchtrkExt_chi2dof", &m_matchtrkExt_chi2dof); eventTree->Branch("matchtrkExt_chi2rphi", &m_matchtrkExt_chi2rphi); eventTree->Branch("matchtrkExt_chi2rz", &m_matchtrkExt_chi2rz); eventTree->Branch("matchtrkExt_bendchi2", &m_matchtrkExt_bendchi2); eventTree->Branch("matchtrkExt_MVA", &m_matchtrkExt_MVA); + eventTree->Branch("matchtrkExt_MVA2", &m_matchtrkExt_MVA2); eventTree->Branch("matchtrkExt_nstub", &m_matchtrkExt_nstub); eventTree->Branch("matchtrkExt_lhits", &m_matchtrkExt_lhits); eventTree->Branch("matchtrkExt_dhits", &m_matchtrkExt_dhits); @@ -1458,6 +1578,24 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("gen_z0", &m_gen_z0); + eventTree->Branch("dv_d_T", &m_dv_d_T); + eventTree->Branch("dv_R_T", &m_dv_R_T); + eventTree->Branch("dv_cos_T", &m_dv_cos_T); + eventTree->Branch("dv_x", &m_dv_x); + eventTree->Branch("dv_y", &m_dv_y); + eventTree->Branch("dv_z", &m_dv_z); + eventTree->Branch("dv_openingAngle", &m_dv_openingAngle); + eventTree->Branch("dv_parentPt", &m_dv_parentPt); + eventTree->Branch("dv_firstIndexTrk", &m_dv_firstIndexTrk); + eventTree->Branch("dv_secondIndexTrk", &m_dv_secondIndexTrk); + eventTree->Branch("dv_firstIndexPt", &m_dv_firstIndexPt); + eventTree->Branch("dv_secondIndexPt", &m_dv_secondIndexPt); + eventTree->Branch("dv_inTraj", &m_dv_inTraj); + eventTree->Branch("dv_del_Z", &m_dv_del_Z); + eventTree->Branch("dv_delIndexPt", &m_dv_delIndexPt); + eventTree->Branch("dv_isReal", &m_dv_isReal); + eventTree->Branch("dv_score", &m_dv_score); + if (SaveTrackJets) { eventTree->Branch("genjet_eta", &m_genjet_eta); eventTree->Branch("genjet_p", &m_genjet_p); @@ -1591,6 +1729,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_phi->clear(); m_trk_phi_local->clear(); m_trk_d0->clear(); + m_trk_rinv->clear(); m_trk_z0->clear(); m_trk_chi2->clear(); m_trk_chi2dof->clear(); @@ -1598,6 +1737,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_chi2rz->clear(); m_trk_bendchi2->clear(); m_trk_MVA1->clear(); + m_trk_MVA2->clear(); m_trk_nstub->clear(); m_trk_lhits->clear(); m_trk_dhits->clear(); @@ -1639,6 +1779,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_phi->clear(); m_trkExt_phi_local->clear(); m_trkExt_d0->clear(); + m_trkExt_rinv->clear(); m_trkExt_z0->clear(); m_trkExt_chi2->clear(); m_trkExt_chi2dof->clear(); @@ -1646,6 +1787,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_chi2rz->clear(); m_trkExt_bendchi2->clear(); m_trkExt_MVA->clear(); + m_trkExt_MVA2->clear(); m_trkExt_nstub->clear(); m_trkExt_lhits->clear(); m_trkExt_dhits->clear(); @@ -1663,6 +1805,10 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_matchtp_phi->clear(); m_trkExt_matchtp_z0->clear(); m_trkExt_matchtp_dxy->clear(); + m_trkExt_matchtp_d0->clear(); + m_trkExt_matchtp_x->clear(); + m_trkExt_matchtp_y->clear(); + m_trkExt_matchtp_z->clear(); m_trkExt_gtt_pt->clear(); m_trkExt_gtt_eta->clear(); m_trkExt_gtt_phi->clear(); @@ -1685,6 +1831,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_dxy->clear(); m_tp_d0->clear(); m_tp_z0->clear(); + m_tp_x->clear(); + m_tp_y->clear(); + m_tp_z->clear(); m_tp_d0_prod->clear(); m_tp_z0_prod->clear(); m_tp_pdgid->clear(); @@ -1700,18 +1849,38 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_gen_z0->clear(); + m_dv_d_T->clear(); + m_dv_R_T->clear(); + m_dv_cos_T->clear(); + m_dv_x->clear(); + m_dv_y->clear(); + m_dv_z->clear(); + m_dv_openingAngle->clear(); + m_dv_parentPt->clear(); + m_dv_firstIndexTrk->clear(); + m_dv_secondIndexTrk->clear(); + m_dv_firstIndexPt->clear(); + m_dv_secondIndexPt->clear(); + m_dv_inTraj->clear(); + m_dv_del_Z->clear(); + m_dv_delIndexPt->clear(); + m_dv_isReal->clear(); + m_dv_score->clear(); + if (Displaced == "Prompt" || Displaced == "Both") { m_matchtrk_pt->clear(); m_matchtrk_eta->clear(); m_matchtrk_phi->clear(); m_matchtrk_z0->clear(); m_matchtrk_d0->clear(); + m_matchtrk_rinv->clear(); m_matchtrk_chi2->clear(); m_matchtrk_chi2dof->clear(); m_matchtrk_chi2rphi->clear(); m_matchtrk_chi2rz->clear(); m_matchtrk_bendchi2->clear(); m_matchtrk_MVA1->clear(); + m_matchtrk_MVA2->clear(); m_matchtrk_nstub->clear(); m_matchtrk_lhits->clear(); m_matchtrk_dhits->clear(); @@ -1725,12 +1894,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_phi->clear(); m_matchtrkExt_z0->clear(); m_matchtrkExt_d0->clear(); + m_matchtrkExt_rinv->clear(); m_matchtrkExt_chi2->clear(); m_matchtrkExt_chi2dof->clear(); m_matchtrkExt_chi2rphi->clear(); m_matchtrkExt_chi2rz->clear(); m_matchtrkExt_bendchi2->clear(); m_matchtrkExt_MVA->clear(); + m_matchtrkExt_MVA2->clear(); m_matchtrkExt_nstub->clear(); m_matchtrkExt_lhits->clear(); m_matchtrkExt_dhits->clear(); @@ -1884,6 +2055,10 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even edm::Handle> GenJetHandle; iEvent.getByToken(GenJetToken_, GenJetHandle); + //Displaced vertices + edm::Handle> DispVertHandle; + iEvent.getByToken(DispVertToken_, DispVertHandle); + //Vertex edm::Handle L1PrimaryVertexHandle; iEvent.getByToken(L1VertexToken_, L1PrimaryVertexHandle); @@ -2039,6 +2214,31 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } else { edm::LogWarning("DataNotFound") << "\nWarning: GenParticleHandle not found in the event" << std::endl; } + + // loop over displaced vertices + if (DispVertHandle.isValid()) { + vector::const_iterator dispVertIter; + for (dispVertIter = DispVertHandle->begin(); dispVertIter != DispVertHandle->end(); ++dispVertIter) { + m_dv_d_T->push_back(dispVertIter->d_T()); + m_dv_R_T->push_back(dispVertIter->R_T()); + m_dv_cos_T->push_back(dispVertIter->cos_T()); + m_dv_x->push_back(dispVertIter->x()); + m_dv_y->push_back(dispVertIter->y()); + m_dv_z->push_back(dispVertIter->z()); + m_dv_openingAngle->push_back(dispVertIter->openingAngle()); + m_dv_parentPt->push_back(dispVertIter->parentPt()); + m_dv_firstIndexTrk->push_back(dispVertIter->firstIndexTrk()); + m_dv_secondIndexTrk->push_back(dispVertIter->secondIndexTrk()); + m_dv_firstIndexPt->push_back(dispVertIter->firstIndexPt()); + m_dv_secondIndexPt->push_back(dispVertIter->secondIndexPt()); + m_dv_inTraj->push_back(dispVertIter->inTraj()); + m_dv_del_Z->push_back(dispVertIter->del_Z()); + m_dv_delIndexPt->push_back(dispVertIter->delIndexPt()); + m_dv_isReal->push_back(dispVertIter->isReal()); + m_dv_score->push_back(dispVertIter->score()); + } + + } if (SimVertexHandle.isValid()) { const SimVertex simPVh = *(SimVertexHandle->begin()); @@ -2166,6 +2366,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int tmp_trk_nFitPars = iterL1Track->nFitPars(); //4 or 5 float tmp_trk_d0 = -999; + float tmp_trk_rinv = iterL1Track->rInv(); if (tmp_trk_nFitPars == 5) { float tmp_trk_x0 = iterL1Track->POCA().x(); float tmp_trk_y0 = iterL1Track->POCA().y(); @@ -2179,6 +2380,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trk_chi2rz = iterL1Track->chi2ZRed(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); + float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector>, TTStub>> stubRefs = iterL1Track->getStubRefs(); @@ -2260,12 +2462,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_d0->push_back(tmp_trk_d0); else m_trk_d0->push_back(999.); + m_trk_rinv->push_back(tmp_trk_rinv); m_trk_chi2->push_back(tmp_trk_chi2); m_trk_chi2dof->push_back(tmp_trk_chi2dof); m_trk_chi2rphi->push_back(tmp_trk_chi2rphi); m_trk_chi2rz->push_back(tmp_trk_chi2rz); m_trk_bendchi2->push_back(tmp_trk_bendchi2); m_trk_MVA1->push_back(tmp_trk_MVA1); + m_trk_MVA2->push_back(tmp_trk_MVA2); m_trk_nstub->push_back(tmp_trk_nstub); m_trk_dhits->push_back(tmp_trk_dhits); m_trk_lhits->push_back(tmp_trk_lhits); @@ -2331,6 +2535,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_matchtp_phi->push_back(myTP_phi); m_trk_matchtp_z0->push_back(myTP_z0); m_trk_matchtp_dxy->push_back(myTP_dxy); + // ---------------------------------------------------------------------------------------------- // store the index to the selected track or -1 if not selected @@ -2389,6 +2594,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int tmp_trk_nFitPars = iterL1Track->nFitPars(); //4 or 5 float tmp_trk_d0 = -999; + float tmp_trk_rinv = iterL1Track->rInv(); if (tmp_trk_nFitPars == 5) { float tmp_trk_x0 = iterL1Track->POCA().x(); float tmp_trk_y0 = iterL1Track->POCA().y(); @@ -2402,6 +2608,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trk_chi2rz = iterL1Track->chi2ZRed(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); + float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector>, TTStub>> stubRefs = iterL1Track->getStubRefs(); @@ -2483,12 +2690,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_d0->push_back(tmp_trk_d0); else m_trkExt_d0->push_back(999.); + m_trkExt_rinv->push_back(tmp_trk_rinv); m_trkExt_chi2->push_back(tmp_trk_chi2); m_trkExt_chi2dof->push_back(tmp_trk_chi2dof); m_trkExt_chi2rphi->push_back(tmp_trk_chi2rphi); m_trkExt_chi2rz->push_back(tmp_trk_chi2rz); m_trkExt_bendchi2->push_back(tmp_trk_bendchi2); m_trkExt_MVA->push_back(tmp_trk_MVA1); + m_trkExt_MVA2->push_back(tmp_trk_MVA2); m_trkExt_nstub->push_back(tmp_trk_nstub); m_trkExt_dhits->push_back(tmp_trk_dhits); m_trkExt_lhits->push_back(tmp_trk_lhits); @@ -2511,8 +2720,12 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float myTP_eta = -999; float myTP_phi = -999; float myTP_z0 = -999; + float myTP_z = -999; float myTP_dxy = -999; - + float myTP_d0 = -999; + float myTP_x0 = -999; + float myTP_y0 = -999; + if (my_tp.isNull()) myFake = 0; else { @@ -2526,12 +2739,35 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even myTP_pt = my_tp->p4().pt(); myTP_eta = my_tp->p4().eta(); myTP_phi = my_tp->p4().phi(); - myTP_z0 = my_tp->vertex().z(); + myTP_z = my_tp->vertex().z(); - float myTP_x0 = my_tp->vertex().x(); - float myTP_y0 = my_tp->vertex().y(); + myTP_x0 = my_tp->vertex().x(); + myTP_y0 = my_tp->vertex().y(); + myTP_dxy = sqrt(myTP_x0 * myTP_x0 + myTP_y0 * myTP_y0); + // get d0/z0 propagated back to the IP + float tmp_tp_t = tan(2.0 * atan(1.0) - 2.0 * atan(exp(-myTP_eta))); + float delx = -myTP_x0; + float dely = -myTP_y0; + float A = 0.01 * 0.5696; + float Kmagnitude = A / myTP_pt; + float tmp_tp_charge = my_tp->charge(); + float K = Kmagnitude * tmp_tp_charge; + float d = 0; + float tmp_tp_x0p = delx - (d + 1. / (2. * K) * sin(myTP_phi)); + float tmp_tp_y0p = dely + (d + 1. / (2. * K) * cos(myTP_phi)); + float tmp_tp_rp = sqrt(tmp_tp_x0p * tmp_tp_x0p + tmp_tp_y0p * tmp_tp_y0p); + float tmp_tp_d0 = tmp_tp_charge * tmp_tp_rp - (1. / (2. * K)); + myTP_d0 = tmp_tp_d0 * (-1); //fix d0 sign + const double pi = 4.0 * atan(1.0); + float delphi = myTP_phi - atan2(-K * tmp_tp_x0p, K * tmp_tp_y0p); + if (delphi < -pi) + delphi += 2.0 * pi; + if (delphi > pi) + delphi -= 2.0 * pi; + + myTP_z0 = myTP_z + tmp_tp_t * delphi / (2.0 * K); if (DebugMode) { edm::LogVerbatim("Tracklet") << "TP matched to track has pt = " << my_tp->p4().pt() << " eta = " << my_tp->momentum().eta() << " phi = " << my_tp->momentum().phi() @@ -2547,7 +2783,12 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_matchtp_phi->push_back(myTP_phi); m_trkExt_matchtp_z0->push_back(myTP_z0); m_trkExt_matchtp_dxy->push_back(myTP_dxy); - + m_trkExt_matchtp_d0->push_back(myTP_d0); + m_trkExt_matchtp_x->push_back(myTP_x0); + m_trkExt_matchtp_y->push_back(myTP_y0); + m_trkExt_matchtp_z->push_back(myTP_z); + + // ---------------------------------------------------------------------------------------------- // store the index to the selected track or -1 if not selected // ---------------------------------------------------------------------------------------------- @@ -2656,7 +2897,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_tp_dxy = dxy; if (MyProcess == 6 && (dxy > 1.0)) continue; - + if (DebugMode && (Displaced == "Prompt" || Displaced == "Both")) edm::LogVerbatim("Tracklet") << "Tracking particle, pt: " << tmp_tp_pt << " eta: " << tmp_tp_eta << " phi: " << tmp_tp_phi << " z0: " << tmp_tp_z0 << " d0: " << tmp_tp_d0 @@ -2741,6 +2982,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_dxy->push_back(tmp_tp_dxy); m_tp_z0->push_back(tmp_tp_z0); m_tp_d0->push_back(tmp_tp_d0); + m_tp_x->push_back(tmp_tp_vx); + m_tp_y->push_back(tmp_tp_vy); + m_tp_z->push_back(tmp_tp_vz); m_tp_z0_prod->push_back(tmp_tp_z0_prod); m_tp_d0_prod->push_back(tmp_tp_d0_prod); m_tp_pdgid->push_back(tmp_tp_pdgid); @@ -2837,12 +3081,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrk_phi = -999; float tmp_matchtrk_z0 = -999; float tmp_matchtrk_d0 = -999; + float tmp_matchtrk_rinv = -999; float tmp_matchtrk_chi2 = -999; float tmp_matchtrk_chi2dof = -999; float tmp_matchtrk_chi2rphi = -999; float tmp_matchtrk_chi2rz = -999; float tmp_matchtrk_bendchi2 = -999; float tmp_matchtrk_MVA1 = -999; + float tmp_matchtrk_MVA2 = -999; int tmp_matchtrk_nstub = -999; int tmp_matchtrk_dhits = -999; int tmp_matchtrk_lhits = -999; @@ -2866,13 +3112,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_matchtrk_d0 = -tmp_matchtrk_x0 * sin(tmp_matchtrk_phi) + tmp_matchtrk_y0 * cos(tmp_matchtrk_phi); // tmp_matchtrk_d0 = matchedTracks.at(i_track)->d0(); } - + tmp_matchtrk_rinv = matchedTracks.at(i_track)->rInv(); tmp_matchtrk_chi2 = matchedTracks.at(i_track)->chi2(); tmp_matchtrk_chi2dof = matchedTracks.at(i_track)->chi2Red(); tmp_matchtrk_chi2rphi = matchedTracks.at(i_track)->chi2XYRed(); tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); + tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -2905,12 +3152,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrk_phi->push_back(tmp_matchtrk_phi); m_matchtrk_z0->push_back(tmp_matchtrk_z0); m_matchtrk_d0->push_back(tmp_matchtrk_d0); + m_matchtrk_rinv->push_back(tmp_matchtrk_rinv); m_matchtrk_chi2->push_back(tmp_matchtrk_chi2); m_matchtrk_chi2dof->push_back(tmp_matchtrk_chi2dof); m_matchtrk_chi2rphi->push_back(tmp_matchtrk_chi2rphi); m_matchtrk_chi2rz->push_back(tmp_matchtrk_chi2rz); m_matchtrk_bendchi2->push_back(tmp_matchtrk_bendchi2); m_matchtrk_MVA1->push_back(tmp_matchtrk_MVA1); + m_matchtrk_MVA2->push_back(tmp_matchtrk_MVA2); m_matchtrk_nstub->push_back(tmp_matchtrk_nstub); m_matchtrk_dhits->push_back(tmp_matchtrk_dhits); m_matchtrk_lhits->push_back(tmp_matchtrk_lhits); @@ -3008,12 +3257,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrkExt_phi = -999; float tmp_matchtrkExt_z0 = -999; float tmp_matchtrkExt_d0 = -999; + float tmp_matchtrkExt_rinv = -999; float tmp_matchtrkExt_chi2 = -999; float tmp_matchtrkExt_chi2dof = -999; float tmp_matchtrkExt_chi2rphi = -999; float tmp_matchtrkExt_chi2rz = -999; float tmp_matchtrkExt_bendchi2 = -999; float tmp_matchtrkExt_MVA = -999; + float tmp_matchtrkExt_MVA2 = -999; int tmp_matchtrkExt_nstub = -999; int tmp_matchtrkExt_dhits = -999; int tmp_matchtrkExt_lhits = -999; @@ -3039,12 +3290,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even // tmp_matchtrkExt_d0 = matchedTracks.at(i_track)->d0(); } + tmp_matchtrkExt_rinv = matchedTracks.at(i_track)->rInv(); tmp_matchtrkExt_chi2 = matchedTracks.at(i_track)->chi2(); tmp_matchtrkExt_chi2dof = matchedTracks.at(i_track)->chi2Red(); tmp_matchtrkExt_chi2rphi = matchedTracks.at(i_track)->chi2XYRed(); tmp_matchtrkExt_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrkExt_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrkExt_MVA = matchedTracks.at(i_track)->trkMVA1(); + tmp_matchtrkExt_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrkExt_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrkExt_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrkExt_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -3076,12 +3329,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_phi->push_back(tmp_matchtrkExt_phi); m_matchtrkExt_z0->push_back(tmp_matchtrkExt_z0); m_matchtrkExt_d0->push_back(tmp_matchtrkExt_d0); + m_matchtrkExt_rinv->push_back(tmp_matchtrkExt_rinv); m_matchtrkExt_chi2->push_back(tmp_matchtrkExt_chi2); m_matchtrkExt_chi2dof->push_back(tmp_matchtrkExt_chi2dof); m_matchtrkExt_chi2rphi->push_back(tmp_matchtrkExt_chi2rphi); m_matchtrkExt_chi2rz->push_back(tmp_matchtrkExt_chi2rz); m_matchtrkExt_bendchi2->push_back(tmp_matchtrkExt_bendchi2); m_matchtrkExt_MVA->push_back(tmp_matchtrkExt_MVA); + m_matchtrkExt_MVA2->push_back(tmp_matchtrkExt_MVA2); m_matchtrkExt_nstub->push_back(tmp_matchtrkExt_nstub); m_matchtrkExt_dhits->push_back(tmp_matchtrkExt_dhits); m_matchtrkExt_lhits->push_back(tmp_matchtrkExt_lhits); diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py index 0ad414a072c7b..c9822c72955bc 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py @@ -42,6 +42,7 @@ # input and output ############################################################ + process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) readFiles = cms.untracked.vstring( @@ -96,8 +97,7 @@ process.load("L1Trigger.L1TTrackMatch.l1tTrackerEmuHTMiss_cfi") process.load("L1Trigger.L1TTrackMatch.l1tTrackTripletEmulation_cfi") process.load('L1Trigger.VertexFinder.l1tVertexProducer_cfi') - - +process.load('L1Trigger.L1TTrackMatch.DisplacedVertexProducer_cfi') ############################################################ # Primary vertex @@ -170,6 +170,7 @@ process.pTkMET = cms.Path(process.l1tTrackerEtMissExtended) process.pTkMHT = cms.Path(process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMissExtended) + process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Displaced'# # HYBRID: extended tracking @@ -191,6 +192,7 @@ process.pTkMHT = cms.Path(process.l1tTrackerHTMiss*process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMiss*process.l1tTrackerEmuHTMissExtended) process.pL1TrackTripletEmulator = cms.Path(process.l1tTrackTripletEmulation) + process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Both' @@ -281,6 +283,7 @@ GenParticleInputTag = cms.InputTag("genParticles",""), RecoVertexInputTag=cms.InputTag("l1tVertexFinder", "L1Vertices"), RecoVertexEmuInputTag=cms.InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation"), + DisplacedVertexInputTag = cms.InputTag("DisplacedVertexProducer","dispVertices"), ) process.ntuple = cms.Path(process.L1TrackNtuple) @@ -301,4 +304,4 @@ # use this if cluster/stub associators not available # process.schedule = cms.Schedule(process.TTClusterStubTruth,process.TTTracksEmuWithTruth,process.ntuple) -process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator, process.ntuple) +process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator, process.DispVert, process.ntuple) diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index 6bc9104b41764..af24bd542548e 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -182,6 +182,7 @@ class L1FPGATrackProducer : public edm::one::EDProducer { bool trackQuality_; std::unique_ptr trackQualityModel_; + std::unique_ptr trackQualityDispModel_; std::map> dtclayerdisk; @@ -327,6 +328,7 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) trackQuality_ = iConfig.getParameter("TrackQuality"); if (trackQuality_) { trackQualityModel_ = std::make_unique(iConfig.getParameter("TrackQualityPSet")); + trackQualityDispModel_ = std::make_unique(iConfig.getParameter("TrackQualityDispPSet")); } if (settings_.storeTrackBuilderOutput() && (settings_.doMultipleMatches() || !settings_.removalType().empty())) { cms::Exception exception("ConfigurationNotSupported."); @@ -749,6 +751,7 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe if (trackQuality_) { trackQualityModel_->setL1TrackQuality(aTrack); + trackQualityDispModel_->setL1TrackQuality(aTrack); } // hph::HitPatternHelper hph(setupHPH_, tmp_hit, tmp_tanL, tmp_z0); diff --git a/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py b/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py index 3ca33e23bd4e0..c0e1ab3d7dc23 100644 --- a/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py @@ -21,6 +21,6 @@ PrintKFDebug = cms.bool ( False ), # print end job internal unused MSB UseTTStubResiduals = cms.bool ( False ), # stub residuals are recalculated from seed parameter and TTStub position TrackQualityPSet = cms.PSet ( TrackQualityParams ), - + TrackQualityDispPSet = cms.PSet ( TrackQualityDispParams ), ) diff --git a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py index 7515a7c089c62..da47cdc523908 100644 --- a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py @@ -22,6 +22,7 @@ # Quality Flag and Quality params TrackQuality = cms.bool(True), TrackQualityPSet = cms.PSet(TrackQualityParams), + TrackQualityDispPSet = cms.PSet(TrackQualityDispParams), Fakefit = cms.bool(False), # True causes Tracklet reco to output TTTracks before DR & KF StoreTrackBuilderOutput = cms.bool(False), # if True EDProducts for TrackBuilder tracks and stubs will be filled RemovalType = cms.string("merge"), # Duplicate track removal @@ -36,6 +37,7 @@ tableTEDFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TED/table_TED_D1PHIA1_D2PHIA1.txt'), tableTREFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TRE/table_TRE_D1AD2A_1.txt'), # Quality Flag and Quality params - TrackQuality = cms.bool(False), - TrackQualityPSet = cms.PSet(TrackQualityParams) + TrackQuality = cms.bool(True), + TrackQualityPSet = cms.PSet(TrackQualityParams), + TrackQualityDispPSet = cms.PSet(TrackQualityDispParams) ) diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc index 789a10020b25b..9a496192e3f6c 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc @@ -186,6 +186,7 @@ class L1TrackNtupleMaker : public one::EDAnalyzer* m_trk_combinatoric; std::vector* m_trk_fake; //0 fake, 1 track from primary interaction, 2 secondary track std::vector* m_trk_MVA1; + std::vector* m_trk_MVA2; std::vector* m_trk_matchtp_pdgid; std::vector* m_trk_matchtp_pt; std::vector* m_trk_matchtp_eta; @@ -229,6 +230,7 @@ class L1TrackNtupleMaker : public one::EDAnalyzer* m_matchtrk_chi2rz_dof; std::vector* m_matchtrk_bendchi2; std::vector* m_matchtrk_MVA1; + std::vector* m_matchtrk_MVA2; std::vector* m_matchtrk_nstub; std::vector* m_matchtrk_lhits; std::vector* m_matchtrk_dhits; @@ -484,6 +486,7 @@ void L1TrackNtupleMaker::beginJob() { m_trk_combinatoric = new std::vector; m_trk_fake = new std::vector; m_trk_MVA1 = new std::vector; + m_trk_MVA2 = new std::vector; m_trk_matchtp_pdgid = new std::vector; m_trk_matchtp_pt = new std::vector; m_trk_matchtp_eta = new std::vector; @@ -525,6 +528,7 @@ void L1TrackNtupleMaker::beginJob() { m_matchtrk_chi2rz_dof = new std::vector; m_matchtrk_bendchi2 = new std::vector; m_matchtrk_MVA1 = new std::vector; + m_matchtrk_MVA2 = new std::vector; m_matchtrk_nstub = new std::vector; m_matchtrk_dhits = new std::vector; m_matchtrk_lhits = new std::vector; @@ -598,6 +602,7 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("trk_combinatoric", &m_trk_combinatoric); eventTree->Branch("trk_fake", &m_trk_fake); eventTree->Branch("trk_MVA1", &m_trk_MVA1); + eventTree->Branch("trk_MVA2", &m_trk_MVA2); eventTree->Branch("trk_matchtp_pdgid", &m_trk_matchtp_pdgid); eventTree->Branch("trk_matchtp_pt", &m_trk_matchtp_pt); eventTree->Branch("trk_matchtp_eta", &m_trk_matchtp_eta); @@ -644,6 +649,7 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("matchtrk_chi2rz_dof", &m_matchtrk_chi2rz_dof); eventTree->Branch("matchtrk_bendchi2", &m_matchtrk_bendchi2); eventTree->Branch("matchtrk_MVA1", &m_matchtrk_MVA1); + eventTree->Branch("matchtrk_MVA2", &m_matchtrk_MVA2); eventTree->Branch("matchtrk_nstub", &m_matchtrk_nstub); eventTree->Branch("matchtrk_lhits", &m_matchtrk_lhits); eventTree->Branch("matchtrk_dhits", &m_matchtrk_dhits); @@ -741,6 +747,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_combinatoric->clear(); m_trk_fake->clear(); m_trk_MVA1->clear(); + m_trk_MVA2->clear(); m_trk_matchtp_pdgid->clear(); m_trk_matchtp_pt->clear(); m_trk_matchtp_eta->clear(); @@ -783,6 +790,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rz_dof->clear(); m_matchtrk_bendchi2->clear(); m_matchtrk_MVA1->clear(); + m_matchtrk_MVA2->clear(); m_matchtrk_nstub->clear(); m_matchtrk_lhits->clear(); m_matchtrk_dhits->clear(); @@ -1094,6 +1102,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_trk_chi2rz = iterL1Track->chi2Z(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); + float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector >, TTStub > > stubRefs = iterL1Track->getStubRefs(); @@ -1194,6 +1203,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_chi2rz_dof->push_back(tmp_trk_chi2rz_dof); m_trk_bendchi2->push_back(tmp_trk_bendchi2); m_trk_MVA1->push_back(tmp_trk_MVA1); + m_trk_MVA2->push_back(tmp_trk_MVA2); m_trk_nstub->push_back(tmp_trk_nstub); m_trk_dhits->push_back(tmp_trk_dhits); m_trk_lhits->push_back(tmp_trk_lhits); @@ -1602,6 +1612,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_matchtrk_chi2rz_dof = -999; float tmp_matchtrk_bendchi2 = -999; float tmp_matchtrk_MVA1 = -999; + float tmp_matchtrk_MVA2 = -999; int tmp_matchtrk_nstub = -999; int tmp_matchtrk_dhits = -999; int tmp_matchtrk_lhits = -999; @@ -1628,6 +1639,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2Z(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); + tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -1695,6 +1707,7 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rz->push_back(tmp_matchtrk_chi2rz); m_matchtrk_bendchi2->push_back(tmp_matchtrk_bendchi2); m_matchtrk_MVA1->push_back(tmp_matchtrk_MVA1); + m_matchtrk_MVA2->push_back(tmp_matchtrk_MVA2); m_matchtrk_nstub->push_back(tmp_matchtrk_nstub); m_matchtrk_dhits->push_back(tmp_matchtrk_dhits); m_matchtrk_lhits->push_back(tmp_matchtrk_lhits); diff --git a/L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx b/L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx new file mode 100644 index 0000000000000000000000000000000000000000..229085ac5fe75d53543513107cdf5045e11146a4 GIT binary patch literal 118038 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 literal 0 HcmV?d00001 From e92047057ed78eb218f63e516d873488e4ccc08f Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 8 May 2024 14:18:53 +0200 Subject: [PATCH 02/36] Modifying track quality MVA inputs for displaced tracks --- .../python/TrackQualityParams_cfi.py | 24 ++++++++++++++++++- L1Trigger/TrackTrigger/src/L1TrackQuality.cc | 4 ++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py index e1e8f6cdb5ec2..2927075e3a5e1 100644 --- a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py +++ b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py @@ -4,8 +4,30 @@ # It is compatible with the HYBRID simulation and will give equivilant performance with this workflow model = cms.FileInPath("L1Trigger/TrackTrigger/data/L1_TrackQuality_GBDT_emulation_digitized.json"), #Vector of strings of training features, in the order that the model was trained with - featureNames = cms.vstring(["tanl", "z0_scaled", "bendchi2_bin", "nstub", + featureNames = cms.vstring(["phi", "eta", "z0", "bendchi2_bin", "nstub", "nlaymiss_interior", "chi2rphi_bin", "chi2rz_bin"]), tqemu_TanlScale = cms.double( 128.0), tqemu_Z0Scale = cms.double( 64.0 ), ) + +TrackQualityDispParams = cms.PSet(qualityAlgorithm = cms.string("GBDT"), #None, Cut, NN, GBDT, GBDT_cpp + ONNXmodel = cms.FileInPath("L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx"), + # The ONNX model should be found at this path, if you want a local version of the model: + # git clone https://github.com/cms-data/L1Trigger-TrackTrigger.git L1Trigger/TrackTrigger/data + ONNXInputName = cms.string("feature_input"), + #Vector of strings of training features, in the order that the model was trained with + featureNames = cms.vstring(["phi", "eta", "z0", "bendchi2_bin", "nstub", + "nlaymiss_interior", "chi2rphi_bin", "chi2rz_bin", + "d0" ]), + # Parameters for cut based classifier, optimized for L1 Track MET + # (Table 3.7 The Phase-2 Upgrade of the CMS Level-1 Trigger http://cds.cern.ch/record/2714892) + maxZ0 = cms.double ( 15. ) , # in cm + maxEta = cms.double ( 2.4 ) , + chi2dofMax = cms.double( 40. ), + bendchi2Max = cms.double( 2.4 ), + minPt = cms.double( 2. ), # in GeV + nStubsmin = cms.int32( 4 ), + tqemu_bins = cms.vint32( [-480, -62, -35, -16, 0, 16, 35, 62, 480] ), + tqemu_TanlScale = cms.double( 128.0), + tqemu_Z0Scale = cms.double( 64.0 ), + ) diff --git a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc index 7296cb385e665..2a1bb5cadc079 100644 --- a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc +++ b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc @@ -60,7 +60,7 @@ std::vector L1TrackQuality::featureTransform(TTTrack L1TrackQuality::featureTransform(TTTrack Date: Mon, 13 May 2024 14:49:15 +0200 Subject: [PATCH 03/36] Reverting changes to prompt track quality BDT, adding fix to MVA score, and updating displaced vertex BDT --- L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py | 2 +- L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 1e6164606c629..1aad6dfcc0cd4 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -4,7 +4,7 @@ l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre2/src/L1Trigger/L1TTrackMatch/test/trackAndVertParams_model.onnx"), + ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/trackAndVert_D95LowFake_model.onnx"), ONNXInputName = cms.string("feature_input"), featureNames = cms.vstring(['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) ) diff --git a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py index 2927075e3a5e1..db8e828d17d6d 100644 --- a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py +++ b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py @@ -4,7 +4,7 @@ # It is compatible with the HYBRID simulation and will give equivilant performance with this workflow model = cms.FileInPath("L1Trigger/TrackTrigger/data/L1_TrackQuality_GBDT_emulation_digitized.json"), #Vector of strings of training features, in the order that the model was trained with - featureNames = cms.vstring(["phi", "eta", "z0", "bendchi2_bin", "nstub", + featureNames = cms.vstring(["tanl", "z0_scaled", "bendchi2_bin", "nstub", "nlaymiss_interior", "chi2rphi_bin", "chi2rz_bin"]), tqemu_TanlScale = cms.double( 128.0), tqemu_Z0Scale = cms.double( 64.0 ), From 918ed68f3ecbf4f170ae9bcfe48c82d6f3609626 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 14 May 2024 10:24:29 +0200 Subject: [PATCH 04/36] Adding newest BDT model file and displaced vertexing analyzer --- .../python/DisplacedVertexProducer_cfi.py | 2 +- .../test/Analyzer_DisplacedMuon.C | 3526 +++++++++++++++++ .../test/trackAndVert_NewTQMVA_model.onnx | Bin 0 -> 3089729 bytes 3 files changed, 3527 insertions(+), 1 deletion(-) create mode 100644 L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C create mode 100644 L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 1aad6dfcc0cd4..c5706688157fd 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -4,7 +4,7 @@ l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/trackAndVert_D95LowFake_model.onnx"), + ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx"), ONNXInputName = cms.string("feature_input"), featureNames = cms.vstring(['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) ) diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C new file mode 100644 index 0000000000000..24ac4179b9974 --- /dev/null +++ b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C @@ -0,0 +1,3526 @@ + +// // ---------------------------------------------------------------------------------------------------------------- +// // Feasibility study of using L1 Tracks to identify Displaced Vertex +// // +// // By Bharadwaj Harikrishnan, May 2021 +// // Edited by Ryan McCarthy, Sept 2021 +// // ---------------------------------------------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include "TFile.h" +#include "TTree.h" +#include "TChain.h" +#include "TBranch.h" +#include "TLeaf.h" +#include +#include "TLegend.h" +#include "TH1.h" +#include "TH2.h" +#include "TF1.h" +#include "TGraph.h" +#include "TMath.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +bool detailedPlots = false; +float d0_res = 0.02152; //cm + +void SetPlotStyle(); +void mySmallText(Double_t x, Double_t y, Color_t color, char *text); +void removeFlows(TH1F* h); +void removeFlows(TH2F* h); + +class Track_Parameters +{ +public: + float pt; + float d0; + float dxy = -99999; + float z0; + float eta; + float phi; + float charge; + float rho; + int index; + int pdgid = -99999; + float vx; + float vy; + float vz; + Track_Parameters* tp; + float x0; + float y0; + int nstubs; + float chi2rphi; + float chi2rz; + float bendchi2; + float MVA1; + float MVA2; + + float dist_calc(float x_dv, float y_dv, float x, float y){ + dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); + return dxy; + } + float x(float phi_T=0){ + return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); + } + float y(float phi_T=0){ + return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); + } + float z(float phi_T=0){ + float theta = 2 * TMath::ATan(TMath::Exp(-eta)); + return (z0 + rho*phi_T/TMath::Tan(theta)); + } + float deltaPhi_T(Double_t phi1, Double_t phi2) + { + Double_t dPhi = phi1 - phi2; + if (dPhi >= TMath::Pi()) + dPhi -= 2. * TMath::Pi(); + if (dPhi <= -TMath::Pi()) + dPhi += 2. * TMath::Pi(); + return dPhi; + } + float phi_T(float x, float y){ + float num = x - (d0 + charge * rho) * TMath::Sin(phi); + float den = y + (d0 + charge * rho) * TMath::Cos(phi); + return ((phi-TMath::ATan2(num,-den))/charge); + } + float z(float x, float y){ + float t = std::sinh(eta); + float r = TMath::Sqrt(pow(x,2)+pow(y,2)); + return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math + } + Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0, float MVA2_in=0) + { + pt = pt_in; + d0 = d0_in; + z0 = z0_in; + eta = eta_in; + phi = phi_in; + if(charge_in > 0){ + charge = 1; + } + else if (charge_in < 0){ + charge = -1; + } + else{ + charge = 0; + } + index = index_in; + pdgid = pdgid_in; + vx = vx_in; + vy = vy_in; + vz = vz_in; + tp = tp_in; + rho = fabs(1/charge_in); + x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); + y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); + nstubs = nstubs_in; + chi2rphi = chi2rphi_in; + chi2rz = chi2rz_in; + bendchi2 = bendchi2_in; + MVA1 = MVA1_in; + MVA2 = MVA2_in; + } + Track_Parameters(){}; + ~Track_Parameters(){}; +}; + +constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) +{ + return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) +{ + return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) +{ + return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); +} + +std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) +{ + std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; + std::valarray p_vec = {-r_vec[1],r_vec[0]}; + if(a.charge>0){ + p_vec *= -1; + } + p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + p_vec *= a.pt; + return p_vec; +} + +class Vertex_Parameters +{ +public: + Double_t x_dv; + Double_t y_dv; + Double_t z_dv; + float score; + Track_Parameters a; + Track_Parameters b; + int inTraj; + bool matched = false; + std::vector tracks = {}; + float p_mag; + float p2_mag; + float openingAngle; + float R_T; + float cos_T; + float alpha_T; + float d_T; + float chi2rphidofSum; + float chi2rzdofSum; + float bendchi2Sum; + float MVA1Sum; + float MVA2Sum; + int numStubsSum; + float delta_z; + float delta_eta; + float phi; + Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): + a(a_in), + b(b_in) + { + x_dv = x_dv_in; + y_dv = y_dv_in; + z_dv = z_dv_in; + score = score_in; + tracks.push_back(a_in); + tracks.push_back(b_in); + inTraj = inTraj_in; + std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); + std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); + std::valarray p_tot = p_trk_1+p_trk_2; + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); + cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); + float chi2rphidof_1 = a_in.chi2rphi; + float chi2rzdof_1 = a_in.chi2rz; + float bendchi2_1 = a_in.bendchi2; + float chi2rphidof_2 = b_in.chi2rphi; + float chi2rzdof_2 = b_in.chi2rz; + float bendchi2_2 = b_in.bendchi2; + chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; + chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; + bendchi2Sum = bendchi2_1 + bendchi2_2; + MVA1Sum = a_in.MVA1 + b_in.MVA1; + MVA2Sum = a_in.MVA2 + b_in.MVA2; + numStubsSum = a_in.nstubs + b_in.nstubs; + p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); + delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); + delta_eta = fabs(a_in.eta-b_in.eta); + } + + void addTrack(Track_Parameters trk){ + tracks.push_back(trk); + std::valarray p_tot = {0,0}; + for(auto track : tracks){ + p_tot+= calcPVec(track,x_dv,y_dv); + } + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); + float chi2rphidof = trk.chi2rphi; + float chi2rzdof = trk.chi2rz; + float bendchi2 = trk.bendchi2; + chi2rphidofSum+= chi2rphidof; + chi2rzdofSum+= chi2rzdof; + bendchi2Sum+= bendchi2; + numStubsSum+= trk.nstubs; + p2_mag+= pow(trk.pt,2); + MVA1Sum+= trk.MVA1; + MVA2Sum+= trk.MVA2; + } + + Vertex_Parameters(){}; + ~Vertex_Parameters(){}; +}; + +constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) +{ + return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); +} + +class Cut { +public: + virtual ~Cut() = default; + virtual TString getCutName() const = 0; + virtual TString getCutLabel() const = 0; + virtual float getParam(int it) const = 0; + virtual float getCutValue() const = 0; + virtual float getDoPlot() const = 0; +}; + +template +class TypedCut : public Cut +{ +public: + TString cutName; + TString cutLabel; + std::vector** params; + T cutValue; + bool doPlot; + + TypedCut(TString cutName_in, TString cutLabel_in, std::vector** params_in, T cutValue_in, bool doPlot_in): cutName(cutName_in), cutLabel(cutLabel_in), params(params_in), cutValue(cutValue_in), doPlot(doPlot_in) {} + TypedCut(){}; + ~TypedCut(){}; + TString getCutName() const + { + return cutName; + } + TString getCutLabel() const + { + return cutLabel; + } + float getParam(int it) const + { + T param = (*params)->at(it); + return float(param); + } + float getCutValue() const + { + return float(cutValue); + } + float getDoPlot() const + { + return doPlot; + } +}; + +class Plot { +public: + virtual ~Plot() = default; + virtual TString getVarName() const = 0; + virtual TString getUnit() const = 0; + virtual float getParam(int it) const = 0; + virtual int getNumBins() const = 0; + virtual float getMinBin() const = 0; + virtual float getMaxBin() const = 0; + virtual std::vector getBins() const = 0; + virtual bool getBool() const = 0; +}; + +template +class TypedPlot : public Plot +{ +public: + TString varName; + TString unit; + std::vector** params; + int numBins; + float minBin; + float maxBin; + std::vector bins; + bool variableBins; + + TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, float minBin_in, float maxBin_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), minBin(minBin_in), maxBin(maxBin_in){ + variableBins = false; + } + TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, std::vector bins_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), bins(bins_in) { + variableBins = true; + } + TypedPlot(){}; + ~TypedPlot(){}; + TString getVarName() const + { + return varName; + } + TString getUnit() const + { + return unit; + } + float getParam(int it) const + { + T param = (*params)->at(it); + return float(param); + } + int getNumBins() const + { + return numBins; + } + float getMinBin() const + { + return minBin; + } + float getMaxBin() const + { + return maxBin; + } + std::vector getBins() const + { + return bins; + } + bool getBool() const + { + return variableBins; + } +}; + +void displayProgress(long current, long max) +{ + using std::cerr; + if (max < 2500) + return; + if (current % (max / 2500) != 0 && current < max - 1) + return; + + int width = 52; // Hope the terminal is at least that wide. + int barWidth = width - 2; + cerr << "\x1B[2K"; // Clear line + cerr << "\x1B[2000D"; // Cursor left + cerr << '['; + for (int i = 0; i < barWidth; ++i) + { + if (i < barWidth * current / max) + { + cerr << '='; + } + else + { + cerr << ' '; + } + } + cerr << ']'; + cerr << " " << Form("%8d/%8d (%5.2f%%)", (int)current, (int)max, 100.0 * current / max); + cerr.flush(); +} + +template +void raiseMax(T *hist1, S *hist2=nullptr, T *hist3=nullptr, T *hist4=nullptr) +{ + Double_t max = hist1->GetBinContent(hist1->GetMaximumBin()); + if(hist2!=nullptr){ + Double_t max2 = hist2->GetBinContent(hist2->GetMaximumBin()); + if(max2>max) max = max2; + } + if(hist3!=nullptr){ + Double_t max3 = hist3->GetBinContent(hist3->GetMaximumBin()); + if(max3>max) max = max3; + } + if(hist4!=nullptr){ + Double_t max4 = hist4->GetBinContent(hist4->GetMaximumBin()); + if(max4>max) max = max4; + } + if(max>0.0){ + hist1->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist2!=nullptr) hist2->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist3!=nullptr) hist3->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist4!=nullptr) hist4->GetYaxis()->SetRangeUser(0.,1.2*max); + } +} + +void raiseMaxStack(TH1F* hist, THStack* stack) +{ + Double_t max = hist->GetMaximum(); + Double_t max2 = stack->GetMaximum(); + if(max2>max) max = max2; + + if(max>0.0){ + hist->GetYaxis()->SetRangeUser(0.,1.2*max); + stack->GetYaxis()->SetRangeUser(0.,1.2*max); + } + +} + +template +void drawSame(T *hist1, S *hist2, T *hist3=nullptr, T *hist4=nullptr) +{ + if(hist1->GetBinContent(hist1->GetMaximumBin())!=0.0){ + hist1->Draw("HIST"); + hist2->Draw("HIST,SAME"); + if(hist3!=nullptr) hist3->Draw("HIST,SAME"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + else if(hist2->GetBinContent(hist2->GetMaximumBin())!=0.0){ + hist2->Draw("HIST"); + if(hist3!=nullptr) hist3->Draw("HIST,SAME"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + else if(hist3!=nullptr){ + if(hist3->GetBinContent(hist3->GetMaximumBin())!=0.0){ + hist3->Draw("HIST"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + } + else if(hist4!=nullptr){ + if(hist4->GetBinContent(hist4->GetMaximumBin())!=0.0){ + hist4->Draw("HIST"); + } + } + else{ + hist1->Draw("HIST"); + } +} + +void drawSameStack(TH1F* hist, THStack* stack) +{ + if(hist->GetMaximum()!=0.0){ + hist->Draw("HIST"); + stack->Draw("HIST,SAME"); + } + else if(stack->GetMaximum()!=0.0){ + stack->Draw("HIST"); + } + else{ + hist->Draw("HIST"); + } +} + +bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } +bool CompareZ0Track(Track_Parameters a, Track_Parameters b) { return a.z0 > b.z0; } +bool CompareD0Track(Track_Parameters a, Track_Parameters b) { return a.d0 > b.d0; } +bool ComparePtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.a.pt > v2.a.pt; } +bool CompareDelzVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.delta_z > v2.delta_z; } +bool CompareDtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.d_T > v2.d_T; } +bool CompareChi2rphidofSumVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.chi2rphidofSum > v2.chi2rphidofSum; } +bool CompareRtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.R_T > v2.R_T; } + +template +std::vector linspace(T start, T end, int num){ + std::vector out; + T delta = (end - start) / (num-1); + for(int i=0; i logspace(const float &a, const float &b, const int &k) +{ + std::vector bins; + float delta = (log10(b) - log10(a)) / k; + for (int i = 0; i < (k+1); i++) + { + bins.push_back(pow(10, log10(a) + (i * delta))); + } + //std::cout<<"logspace bins: "; + for(uint j=0; j TMath::Pi()) + dPhi -= 2. * TMath::Pi(); + if (dPhi < -TMath::Pi()) + dPhi += 2. * TMath::Pi(); + return dPhi; +} + +Double_t deltaR(Double_t eta1, Double_t phi1, Double_t eta2, Double_t phi2) +{ + Double_t dEta, dPhi; + dEta = eta1 - eta2; + dPhi = deltaPhi(phi1, phi2); + return sqrt(dEta * dEta + dPhi * dPhi); +} + +Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points + return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); +} + +Double_t dist_Vertex(Double_t x_vtx, Double_t y_vtx, Track_Parameters a){ // Distance between track and displaced vertex + float R = dist(x_vtx,y_vtx,a.x0,a.y0); + return (fabs(R-(a.rho))); +} + +Double_t dist_TPs(Track_Parameters* a, Track_Parameters* b); // Closest distance between 2 tracks +Double_t dist_TPs(Track_Parameters a, Track_Parameters b); // Closest distance between 2 tracks +bool CompareDeltaXY(Vertex_Parameters v1, Vertex_Parameters v2) {return dist_TPs(v1.a,v1.b) < dist_TPs(v2.a,v2.b); } + +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx); +// Identify the displaced vertex (x_vtx,y_vtx,z_vtx) and return the status +//-2 = Circles with same center. No Intersection +//-1 = Circles don't Intersect. A point on the line connecting the centers is chosen. +// 0 = Only 1 Intersection not satisfying Z cutoff +// 1 = Only 1 Intersection satisfying Z cutoff +// 2 = Only 1 Intersection detectable dist(x,y)<20 +// 3 = 2 Intersections + +void Analyzer_DisplacedMuon(TString inputFilePath, + TString outputDir, + float TP_maxD0 = 1.9, + float TP_minD0 = 0.0004196) +{ + TChain *tree = new TChain("L1TrackNtuple/eventTree"); + tree->Add(inputFilePath); + //TChain *vertTree = new TChain("L1TrackNtuple/dispVertTree"); + //vertTree->Add(inputFilePath); + std::string inputFileString(inputFilePath.Data()); + inputFileString = inputFileString.substr(inputFileString.find_last_of("/")+1); + TString inputFile(inputFileString); + std::cout<<"input: "<SetBatch(); + gErrorIgnoreLevel = kWarning; + + SetPlotStyle(); + float barrelEta = 0.95; + + //Vertex parameter vectors + vector *trkVert_firstIndexTrk; + vector *trkVert_secondIndexTrk; + vector *trkVert_firstIndexPt; + vector *trkVert_secondIndexPt; + vector *trkVert_inTraj; + vector *trkVert_d_T; + vector *trkVert_R_T; + vector *trkVert_cos_T; + vector *trkVert_del_Z; + vector *trkVert_x; + vector *trkVert_y; + vector *trkVert_z; + vector *trkVert_openingAngle; + vector *trkVert_parentPt; + vector *trkVert_delIndexPt; + vector *trkVert_isReal; + vector *trkVert_score; + + vector *tpVert_d_T; + vector *tpVert_R_T; + vector *tpVert_cos_T; + vector *tpVert_x; + vector *tpVert_y; + vector *tpVert_z; + vector *tpVert_openingAngle; + vector *tpVert_parentPt; + + vector *trk_pt; + vector *trk_eta; + vector *trk_phi; + vector *trk_d0; + vector *trk_rinv; + vector *trk_z0; + vector *trk_chi2; + vector *trk_chi2rphi; + vector *trk_chi2rz; + vector *trk_bendchi2; + vector *trk_nstub; + vector *trk_lhits; + vector *trk_dhits; + vector *trk_seed; + vector *trk_hitpattern; + vector *trk_phiSector; + vector *trk_genuine; + vector *trk_loose; + vector *trk_unknown; + vector *trk_combinatoric; + vector *trkExt_fake; + vector *trk_MVA1; + vector *trk_MVA2; + vector *trk_matchtp_pdgid; + vector *trk_matchtp_isHToMu; + vector *trk_matchtp_isHToB; + vector *trk_matchtp_pt; + vector *trk_matchtp_eta; + vector *trk_matchtp_phi; + vector *trk_matchtp_z0; + vector *trk_matchtp_dxy; + vector *trk_matchtp_d0; + vector *trk_matchtp_x; + vector *trk_matchtp_y; + vector *trk_matchtp_z; + vector *tp_pt; + vector *tp_eta; + vector *tp_phi; + vector *tp_dxy; + vector *tp_d0; + vector *tp_z0; + vector *tp_x; + vector *tp_y; + vector *tp_z; + vector *tp_d0_prod; + vector *tp_z0_prod; + vector *tp_pdgid; + vector *tp_isHToMu; + vector *tp_isHToB; + vector *tp_nmatch; + vector *tp_nstub; + vector *tp_eventid; + vector *tp_charge; + vector *matchtrk_pt; + vector *matchtrk_eta; + vector *matchtrk_phi; + vector *matchtrk_z0; + vector *matchtrk_d0; + vector *matchtrk_rinv; + vector *matchtrk_chi2; + vector *matchtrk_chi2rphi; + vector *matchtrk_chi2rz; + vector *matchtrk_bendchi2; + vector *matchtrk_MVA1; + vector *matchtrk_MVA2; + vector *matchtrk_nstub; + vector *matchtrk_lhits; + vector *matchtrk_dhits; + vector *matchtrk_seed; + vector *matchtrk_hitpattern; + + TBranch *b_trkVert_firstIndexTrk; + TBranch *b_trkVert_secondIndexTrk; + TBranch *b_trkVert_firstIndexPt; + TBranch *b_trkVert_secondIndexPt; + TBranch *b_trkVert_inTraj; + TBranch *b_trkVert_d_T; + TBranch *b_trkVert_R_T; + TBranch *b_trkVert_cos_T; + TBranch *b_trkVert_del_Z; + TBranch *b_trkVert_x; + TBranch *b_trkVert_y; + TBranch *b_trkVert_z; + TBranch *b_trkVert_openingAngle; + TBranch *b_trkVert_parentPt; + TBranch *b_trkVert_delIndexPt; + TBranch *b_trkVert_isReal; + TBranch *b_trkVert_score; + TBranch *b_trk_pt; + TBranch *b_trk_eta; + TBranch *b_trk_phi; + TBranch *b_trk_d0; + TBranch *b_trk_rinv; + TBranch *b_trk_z0; + TBranch *b_trk_chi2; + TBranch *b_trk_chi2rphi; + TBranch *b_trk_chi2rz; + TBranch *b_trk_bendchi2; + TBranch *b_trk_nstub; + TBranch *b_trk_lhits; + TBranch *b_trk_dhits; + TBranch *b_trk_seed; + TBranch *b_trk_hitpattern; + TBranch *b_trk_phiSector; + TBranch *b_trk_genuine; + TBranch *b_trk_loose; + TBranch *b_trk_unknown; + TBranch *b_trk_combinatoric; + TBranch *b_trkExt_fake; + TBranch *b_trk_MVA1; + TBranch *b_trk_MVA2; + TBranch *b_trk_matchtp_pdgid; + TBranch *b_trk_matchtp_isHToMu; + TBranch *b_trk_matchtp_isHToB; + TBranch *b_trk_matchtp_pt; + TBranch *b_trk_matchtp_eta; + TBranch *b_trk_matchtp_phi; + TBranch *b_trk_matchtp_z0; + TBranch *b_trk_matchtp_dxy; + TBranch *b_trk_matchtp_d0; + TBranch *b_trk_matchtp_x; + TBranch *b_trk_matchtp_y; + TBranch *b_trk_matchtp_z; + TBranch *b_tp_pt; + TBranch *b_tp_eta; + TBranch *b_tp_phi; + TBranch *b_tp_dxy; + TBranch *b_tp_d0; + TBranch *b_tp_z0; + TBranch *b_tp_x; + TBranch *b_tp_y; + TBranch *b_tp_z; + TBranch *b_tp_d0_prod; + TBranch *b_tp_z0_prod; + TBranch *b_tp_pdgid; + TBranch *b_tp_isHToMu; + TBranch *b_tp_isHToB; + TBranch *b_tp_nmatch; + TBranch *b_tp_nstub; + TBranch *b_tp_eventid; + TBranch *b_tp_charge; + TBranch *b_matchtrk_pt; + TBranch *b_matchtrk_eta; + TBranch *b_matchtrk_phi; + TBranch *b_matchtrk_z0; + TBranch *b_matchtrk_d0; + TBranch *b_matchtrk_rinv; + TBranch *b_matchtrk_chi2; + TBranch *b_matchtrk_chi2rphi; + TBranch *b_matchtrk_chi2rz; + TBranch *b_matchtrk_bendchi2; + TBranch *b_matchtrk_MVA1; + TBranch *b_matchtrk_MVA2; + TBranch *b_matchtrk_nstub; + TBranch *b_matchtrk_lhits; + TBranch *b_matchtrk_dhits; + TBranch *b_matchtrk_seed; + TBranch *b_matchtrk_hitpattern; + + trkVert_firstIndexTrk = 0; + trkVert_secondIndexTrk = 0; + trkVert_firstIndexPt = 0; + trkVert_secondIndexPt = 0; + trkVert_inTraj = 0; + trkVert_d_T = 0; + trkVert_R_T = 0; + trkVert_cos_T = 0; + trkVert_del_Z = 0; + trkVert_x = 0; + trkVert_y = 0; + trkVert_z = 0; + trkVert_openingAngle = 0; + trkVert_parentPt = 0; + trkVert_delIndexPt = 0; + trkVert_isReal = 0; + trkVert_score = 0; + trk_pt = 0; + trk_eta = 0; + trk_phi = 0; + trk_d0 = 0; + trk_rinv = 0; + trk_z0 = 0; + trk_chi2 = 0; + trk_chi2rphi = 0; + trk_chi2rz = 0; + trk_bendchi2 = 0; + trk_nstub = 0; + trk_lhits = 0; + trk_dhits = 0; + trk_seed = 0; + trk_hitpattern = 0; + trk_phiSector = 0; + trk_genuine = 0; + trk_loose = 0; + trk_unknown = 0; + trk_combinatoric = 0; + trkExt_fake = 0; + trk_MVA1 = 0; + trk_MVA2 = 0; + trk_matchtp_pdgid = 0; + trk_matchtp_isHToMu = 0; + trk_matchtp_isHToB = 0; + trk_matchtp_pt = 0; + trk_matchtp_eta = 0; + trk_matchtp_phi = 0; + trk_matchtp_z0 = 0; + trk_matchtp_dxy = 0; + trk_matchtp_d0 = 0; + trk_matchtp_x = 0; + trk_matchtp_y = 0; + trk_matchtp_z = 0; + tp_pt = 0; + tp_eta = 0; + tp_phi = 0; + tp_dxy = 0; + tp_d0 = 0; + tp_z0 = 0; + tp_x = 0; + tp_y = 0; + tp_z = 0; + tp_d0_prod = 0; + tp_z0_prod = 0; + tp_pdgid = 0; + tp_isHToMu = 0; + tp_isHToB = 0; + tp_nmatch = 0; + tp_nstub = 0; + tp_eventid = 0; + tp_charge = 0; + matchtrk_pt = 0; + matchtrk_eta = 0; + matchtrk_phi = 0; + matchtrk_z0 = 0; + matchtrk_d0 = 0; + matchtrk_rinv = 0; + matchtrk_chi2 = 0; + matchtrk_chi2rphi = 0; + matchtrk_chi2rz = 0; + matchtrk_bendchi2 = 0; + matchtrk_MVA1 = 0; + matchtrk_MVA2 = 0; + matchtrk_nstub = 0; + matchtrk_lhits = 0; + matchtrk_dhits = 0; + matchtrk_seed = 0; + matchtrk_hitpattern = 0; + + //tree->SetMakeClass(1); + tree->SetBranchAddress("dv_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); + tree->SetBranchAddress("dv_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); + tree->SetBranchAddress("dv_firstIndexPt", &trkVert_firstIndexPt, &b_trkVert_firstIndexPt); + tree->SetBranchAddress("dv_secondIndexPt", &trkVert_secondIndexPt, &b_trkVert_secondIndexPt); + tree->SetBranchAddress("dv_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); + tree->SetBranchAddress("dv_d_T", &trkVert_d_T, &b_trkVert_d_T); + tree->SetBranchAddress("dv_R_T", &trkVert_R_T, &b_trkVert_R_T); + tree->SetBranchAddress("dv_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); + tree->SetBranchAddress("dv_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); + tree->SetBranchAddress("dv_x", &trkVert_x, &b_trkVert_x); + tree->SetBranchAddress("dv_y", &trkVert_y, &b_trkVert_y); + tree->SetBranchAddress("dv_z", &trkVert_z, &b_trkVert_z); + tree->SetBranchAddress("dv_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); + tree->SetBranchAddress("dv_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); + tree->SetBranchAddress("dv_delIndexPt", &trkVert_delIndexPt, &b_trkVert_delIndexPt); + tree->SetBranchAddress("dv_isReal", &trkVert_isReal, &b_trkVert_isReal); + tree->SetBranchAddress("dv_score", &trkVert_score, &b_trkVert_score); + tree->SetBranchAddress("trkExt_pt", &trk_pt, &b_trk_pt); + tree->SetBranchAddress("trkExt_eta", &trk_eta, &b_trk_eta); + tree->SetBranchAddress("trkExt_phi", &trk_phi, &b_trk_phi); + tree->SetBranchAddress("trkExt_d0", &trk_d0, &b_trk_d0); + tree->SetBranchAddress("trkExt_rinv", &trk_rinv, &b_trk_rinv); + tree->SetBranchAddress("trkExt_z0", &trk_z0, &b_trk_z0); + tree->SetBranchAddress("trkExt_chi2", &trk_chi2, &b_trk_chi2); + tree->SetBranchAddress("trkExt_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); + tree->SetBranchAddress("trkExt_chi2rz", &trk_chi2rz, &b_trk_chi2rz); + tree->SetBranchAddress("trkExt_bendchi2", &trk_bendchi2, &b_trk_bendchi2); + tree->SetBranchAddress("trkExt_nstub", &trk_nstub, &b_trk_nstub); + tree->SetBranchAddress("trkExt_lhits", &trk_lhits, &b_trk_lhits); + tree->SetBranchAddress("trkExt_dhits", &trk_dhits, &b_trk_dhits); + tree->SetBranchAddress("trkExt_seed", &trk_seed, &b_trk_seed); + tree->SetBranchAddress("trkExt_hitpattern", &trk_hitpattern, &b_trk_hitpattern); + tree->SetBranchAddress("trkExt_phiSector", &trk_phiSector, &b_trk_phiSector); + tree->SetBranchAddress("trkExt_genuine", &trk_genuine, &b_trk_genuine); + tree->SetBranchAddress("trkExt_loose", &trk_loose, &b_trk_loose); + tree->SetBranchAddress("trkExt_unknown", &trk_unknown, &b_trk_unknown); + tree->SetBranchAddress("trkExt_combinatoric", &trk_combinatoric, &b_trk_combinatoric); + tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); + tree->SetBranchAddress("trkExt_MVA", &trk_MVA1, &b_trk_MVA1); + tree->SetBranchAddress("trkExt_MVA2", &trk_MVA2, &b_trk_MVA2); + tree->SetBranchAddress("trkExt_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid); + tree->SetBranchAddress("trkExt_matchtp_isHToMu", &trk_matchtp_isHToMu, &b_trk_matchtp_isHToMu); + tree->SetBranchAddress("trkExt_matchtp_isHToB", &trk_matchtp_isHToB, &b_trk_matchtp_isHToB); + tree->SetBranchAddress("trkExt_matchtp_pt", &trk_matchtp_pt, &b_trk_matchtp_pt); + tree->SetBranchAddress("trkExt_matchtp_eta", &trk_matchtp_eta, &b_trk_matchtp_eta); + tree->SetBranchAddress("trkExt_matchtp_phi", &trk_matchtp_phi, &b_trk_matchtp_phi); + tree->SetBranchAddress("trkExt_matchtp_z0", &trk_matchtp_z0, &b_trk_matchtp_z0); + tree->SetBranchAddress("trkExt_matchtp_dxy", &trk_matchtp_dxy, &b_trk_matchtp_dxy); + tree->SetBranchAddress("trkExt_matchtp_d0", &trk_matchtp_d0, &b_trk_matchtp_d0); + tree->SetBranchAddress("trkExt_matchtp_x", &trk_matchtp_x, &b_trk_matchtp_x); + tree->SetBranchAddress("trkExt_matchtp_y", &trk_matchtp_y, &b_trk_matchtp_y); + tree->SetBranchAddress("trkExt_matchtp_z", &trk_matchtp_z, &b_trk_matchtp_z); + tree->SetBranchAddress("tp_pt", &tp_pt, &b_tp_pt); + tree->SetBranchAddress("tp_eta", &tp_eta, &b_tp_eta); + tree->SetBranchAddress("tp_phi", &tp_phi, &b_tp_phi); + tree->SetBranchAddress("tp_dxy", &tp_dxy, &b_tp_dxy); + tree->SetBranchAddress("tp_d0", &tp_d0, &b_tp_d0); + tree->SetBranchAddress("tp_z0", &tp_z0, &b_tp_z0); + tree->SetBranchAddress("tp_x", &tp_x, &b_tp_x); + tree->SetBranchAddress("tp_y", &tp_y, &b_tp_y); + tree->SetBranchAddress("tp_z", &tp_z, &b_tp_z); + tree->SetBranchAddress("tp_d0_prod", &tp_d0_prod, &b_tp_d0_prod); + tree->SetBranchAddress("tp_z0_prod", &tp_z0_prod, &b_tp_z0_prod); + tree->SetBranchAddress("tp_pdgid", &tp_pdgid, &b_tp_pdgid); + tree->SetBranchAddress("tp_isHToMu", &tp_isHToMu, &b_tp_isHToMu); + tree->SetBranchAddress("tp_isHToB", &tp_isHToB, &b_tp_isHToB); + tree->SetBranchAddress("tp_nmatch", &tp_nmatch, &b_tp_nmatch); + tree->SetBranchAddress("tp_nstub", &tp_nstub, &b_tp_nstub); + tree->SetBranchAddress("tp_eventid", &tp_eventid, &b_tp_eventid); + tree->SetBranchAddress("tp_charge", &tp_charge, &b_tp_charge); + tree->SetBranchAddress("matchtrkExt_pt", &matchtrk_pt, &b_matchtrk_pt); + tree->SetBranchAddress("matchtrkExt_eta", &matchtrk_eta, &b_matchtrk_eta); + tree->SetBranchAddress("matchtrkExt_phi", &matchtrk_phi, &b_matchtrk_phi); + tree->SetBranchAddress("matchtrkExt_z0", &matchtrk_z0, &b_matchtrk_z0); + tree->SetBranchAddress("matchtrkExt_d0", &matchtrk_d0, &b_matchtrk_d0); + tree->SetBranchAddress("matchtrkExt_rinv", &matchtrk_rinv, &b_matchtrk_rinv); + tree->SetBranchAddress("matchtrkExt_chi2", &matchtrk_chi2, &b_matchtrk_chi2); + tree->SetBranchAddress("matchtrkExt_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); + tree->SetBranchAddress("matchtrkExt_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); + tree->SetBranchAddress("matchtrkExt_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); + tree->SetBranchAddress("matchtrkExt_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); + tree->SetBranchAddress("matchtrkExt_MVA2", &matchtrk_MVA2, &b_matchtrk_MVA2); + tree->SetBranchAddress("matchtrkExt_nstub", &matchtrk_nstub, &b_matchtrk_nstub); + tree->SetBranchAddress("matchtrkExt_lhits", &matchtrk_lhits, &b_matchtrk_lhits); + tree->SetBranchAddress("matchtrkExt_dhits", &matchtrk_dhits, &b_matchtrk_dhits); + tree->SetBranchAddress("matchtrkExt_seed", &matchtrk_seed, &b_matchtrk_seed); + tree->SetBranchAddress("matchtrkExt_hitpattern", &matchtrk_hitpattern, &b_matchtrk_hitpattern); + + //preselection cuts and plots definitions + // Cut assumptions: first cut is maxEta + std::vector> preselCuts; + std::unique_ptr> cut0(new TypedCut("maxEta","max #eta",&trk_eta,2.4,true)); + preselCuts.push_back(std::move(cut0)); + std::unique_ptr> cut1(new TypedCut("maxChi2rzdof","max #chi^{2}_{rz}",&trk_chi2rz,3.0,false)); + preselCuts.push_back(std::move(cut1)); + std::unique_ptr> cut3(new TypedCut("minMVA2","min MVA2",&trk_MVA2,0.2,false)); + preselCuts.push_back(std::move(cut3)); + std::unique_ptr> cut4(new TypedCut("minMVA1","min MVA1",&trk_MVA1,0.2,false)); + preselCuts.push_back(std::move(cut4)); + std::unique_ptr> cut5(new TypedCut("minMVA1_D","min MVA1 D",&trk_MVA1,0.5,false)); + preselCuts.push_back(std::move(cut5)); + std::unique_ptr> cut6(new TypedCut("minNumStub_overlap","Quality",&trk_nstub,5,true)); + preselCuts.push_back(std::move(cut6)); + std::unique_ptr> cut7(new TypedCut("minPt","min p_{T}",&trk_pt,3.0,true)); + preselCuts.push_back(std::move(cut7)); + std::unique_ptr> cut8(new TypedCut("minD0_barrel","min d_{0} Bar",&trk_d0,0.06,false)); + preselCuts.push_back(std::move(cut8)); + std::unique_ptr> cut9(new TypedCut("minD0_disk","min d_{0}",&trk_d0,0.08,true)); + preselCuts.push_back(std::move(cut9)); + + std::vector> preselCutsTP; + std::unique_ptr> tpCut0(new TypedCut("maxEta","max #eta",&tp_eta,2.4,true)); + preselCutsTP.push_back(std::move(tpCut0)); + std::unique_ptr> tpCut1(new TypedCut("minPt","min p_{T}",&tp_pt,3.0,true)); + preselCutsTP.push_back(std::move(tpCut1)); + std::unique_ptr> tpCut2(new TypedCut("minD0_barrel","min d_{0} Barrel",&tp_d0,0.06,true)); + preselCutsTP.push_back(std::move(tpCut2)); + std::unique_ptr> tpCut3(new TypedCut("minD0_disk","min d_{0} Disk",&tp_d0,0.08,true)); + preselCutsTP.push_back(std::move(tpCut3)); + + std::vector> varCutFlows; + std::unique_ptr> plot0(new TypedPlot("d0","cm",&trk_d0,20,logspace(0.01,10.0,20))); + varCutFlows.push_back(std::move(plot0)); + std::unique_ptr> plot1(new TypedPlot("pt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); + varCutFlows.push_back(std::move(plot1)); + std::unique_ptr> plot2(new TypedPlot("eta","",&trk_eta,50,-2.5,2.5)); + varCutFlows.push_back(std::move(plot2)); + std::unique_ptr> plot3(new TypedPlot("z0","cm",&trk_z0,100,-20.0,20.0)); + varCutFlows.push_back(std::move(plot3)); + std::unique_ptr> plot4(new TypedPlot("phi","",&trk_phi,100,-2*TMath::Pi(),2*TMath::Pi())); + varCutFlows.push_back(std::move(plot4)); + std::unique_ptr> plot6(new TypedPlot("MVA1","",&trk_MVA1,100,0.0,1.0)); + varCutFlows.push_back(std::move(plot6)); + std::unique_ptr> plot7(new TypedPlot("MVA2","",&trk_MVA2,100,0.0,1.0)); + varCutFlows.push_back(std::move(plot7)); + std::unique_ptr> plot8(new TypedPlot("chi2rphidof","",&trk_chi2rphi,100,0.0,6.0)); + varCutFlows.push_back(std::move(plot8)); + std::unique_ptr> plot9(new TypedPlot("chi2rzdof","",&trk_chi2rz,100,0.0,6.0)); + varCutFlows.push_back(std::move(plot9)); + std::unique_ptr> plot10(new TypedPlot("bendchi2","",&trk_bendchi2,100,0.0,10.0)); + varCutFlows.push_back(std::move(plot10)); + + std::vector> varCutFlowsTP; + std::unique_ptr> tpPlot0(new TypedPlot("d0","cm",&tp_d0,20,logspace(0.01,10.0,20))); + varCutFlowsTP.push_back(std::move(tpPlot0)); + std::unique_ptr> tpPlot1(new TypedPlot("pt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); + varCutFlowsTP.push_back(std::move(tpPlot1)); + std::unique_ptr> tpPlot2(new TypedPlot("eta","",&tp_eta,50,-2.5,2.5)); + varCutFlowsTP.push_back(std::move(tpPlot2)); + std::unique_ptr> tpPlot3(new TypedPlot("z0","cm",&tp_z0,100,-20.0,20.0)); + varCutFlowsTP.push_back(std::move(tpPlot3)); + std::unique_ptr> tpPlot4(new TypedPlot("phi","",&tp_phi,100,-2*TMath::Pi(),2*TMath::Pi())); + varCutFlowsTP.push_back(std::move(tpPlot4)); + std::unique_ptr> tpPlot6(new TypedPlot("dxy","cm",&tp_dxy,50,-2.0,2.0)); + varCutFlowsTP.push_back(std::move(tpPlot6)); + + std::vector,std::unique_ptr > > varCutFlows2D; + std::unique_ptr> plot0X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); + std::unique_ptr> plot0Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); + varCutFlows2D.push_back({std::move(plot0X),std::move(plot0Y)}); + std::unique_ptr> plot1X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + std::unique_ptr> plot1Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); + varCutFlows2D.push_back({std::move(plot1X),std::move(plot1Y)}); + std::unique_ptr> plot2X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); + std::unique_ptr> plot2Y(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + varCutFlows2D.push_back({std::move(plot2X),std::move(plot2Y)}); + std::unique_ptr> plot3X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + std::unique_ptr> plot3Y(new TypedPlot("nstub","",&trk_nstub,7,0.0,7.0)); + varCutFlows2D.push_back({std::move(plot3X),std::move(plot3Y)}); + + std::vector,std::unique_ptr > > varCutFlowsTP2D; + std::unique_ptr> tpPlot0X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); + std::unique_ptr> tpPlot0Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot0X),std::move(tpPlot0Y)}); + std::unique_ptr> tpPlot1X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + std::unique_ptr> tpPlot1Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot1X),std::move(tpPlot1Y)}); + std::unique_ptr> tpPlot2X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); + std::unique_ptr> tpPlot2Y(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + varCutFlowsTP2D.push_back({std::move(tpPlot2X),std::move(tpPlot2Y)}); + std::unique_ptr> tpPlot3X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + std::unique_ptr> tpPlot3Y(new TypedPlot("nstub","",&tp_nstub,7,0.0,7.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot3X),std::move(tpPlot3Y)}); + + //std::vector trackType = {"primary","np","fake","PU","notHiggs"}; + std::vector trackType = {"primary","np"}; + //std::vector tpType = {"primary","np","PU","notHiggs","match",""}; + std::vector tpType = {"primary","np","match",""}; + std::vector plotModifiers = {"","_H","_L","_P","_D","_barrel","_disk"}; + if(!detailedPlots) plotModifiers = {""}; + uint preselCutsSize = 0; + for(uint i=0; igetDoPlot()) preselCutsSize++; + } + TH1F* preselCutFlows[varCutFlows.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; + TH2F* preselCutFlows2D[varCutFlows2D.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; + TH1F* preselCutFlowsTP[varCutFlowsTP.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; + TH2F* preselCutFlowsTP2D[varCutFlowsTP2D.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; + //std::map numPartCutFlows[trackType.size()][preselCuts.size()]; + //std::map numPartCutFlowsTP[tpType.size()][preselCutsTP.size()]; + + for(uint it=0; itgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; + //std::cout<<"name: "<getBool()){ + //std::cout<<"setting bins"<getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events "; + std::vector bins = varCutFlows[it]->getBins(); + TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),bins.data()); + preselCutFlows[it][i][i_plot][j] = hist; + TString varString = varCutFlows[it]->getVarName(); + if(varString.Contains("d0") || varString.Contains("pt")){ + //std::cout<<"labels: "<GetNbinsX()+1); ibin++){ + binValues+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinContent(ibin)) + ", "; + binWidths+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinWidth(ibin)) + ", "; + + } + binValues+="]"; + binWidths+="]"; + + //std::cout<<"binValues: "<getMaxBin() - varCutFlows[it]->getMinBin()) / varCutFlows[it]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Track "+varCutFlows[it]->getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlows[it]->getUnit(); + TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),varCutFlows[it]->getMinBin(),varCutFlows[it]->getMaxBin()); + preselCutFlows[it][i][i_plot][j] = hist; + } + } + } + } + } + + for(uint it=0; itgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetVarName()+"_vs_"+varCutFlows2D[it].first->getVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; + TString labels = name+"; Track "+varCutFlows2D[it].first->getVarName()+" ("+varCutFlows2D[it].first->getUnit()+") ; Track "+varCutFlows2D[it].second->getVarName()+" ("+varCutFlows2D[it].second->getUnit()+")"; + TH2F* hist = new TH2F(name,labels,varCutFlows2D[it].first->getNumBins(),varCutFlows2D[it].first->getMinBin(),varCutFlows2D[it].first->getMaxBin(),varCutFlows2D[it].second->getNumBins(),varCutFlows2D[it].second->getMinBin(),varCutFlows2D[it].second->getMaxBin()); + preselCutFlows2D[it][i][i_plot][j] = hist; + } + } + } + } + + for(uint it=0; itgetVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; + if(varCutFlowsTP[it]->getMaxBin()==varCutFlowsTP[it]->getMinBin()){ + TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events "; + std::vector bins = varCutFlowsTP[it]->getBins(); + TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),bins.data()); + preselCutFlowsTP[it][i][jt][j] = hist; + } + else{ + float binWidth = (varCutFlowsTP[it]->getMaxBin() - varCutFlowsTP[it]->getMinBin()) / varCutFlowsTP[it]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlowsTP[it]->getUnit(); + TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),varCutFlowsTP[it]->getMinBin(),varCutFlowsTP[it]->getMaxBin()); + preselCutFlowsTP[it][i][jt][j] = hist; + } + } + } + } + } + + for(uint it=0; itgetVarName()+"_vs_"+varCutFlowsTP2D[it].first->getVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; + TString labels = name+"; Tp "+varCutFlowsTP2D[it].first->getVarName()+" ("+varCutFlowsTP2D[it].first->getUnit()+") ; Tp "+varCutFlowsTP2D[it].second->getVarName()+" ("+varCutFlowsTP2D[it].second->getUnit()+")"; + TH2F* hist = new TH2F(name,labels,varCutFlowsTP2D[it].first->getNumBins(),varCutFlowsTP2D[it].first->getMinBin(),varCutFlowsTP2D[it].first->getMaxBin(),varCutFlowsTP2D[it].second->getNumBins(),varCutFlowsTP2D[it].second->getMinBin(),varCutFlowsTP2D[it].second->getMaxBin()); + preselCutFlowsTP2D[it][i][jt][j] = hist; + } + } + } + } + + //vertex cuts and plots definitions + std::vector> vertCuts; + std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,true)); + vertCuts.push_back(std::move(vertCut0)); + std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,true)); + vertCuts.push_back(std::move(vertCut1)); + std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,true)); + vertCuts.push_back(std::move(vertCut2)); + std::unique_ptr> vertCut3(new TypedCut("min_trk_sumCharge","min #Sigma q",&trk_rinv,0,true)); + vertCuts.push_back(std::move(vertCut3)); +#if 0 + std::unique_ptr> vertCut4(new TypedCut("max_trk_sumBendChi2","max #Sigma #chi^{2}_{bend}",&trk_bendchi2,14.0,true)); + vertCuts.push_back(std::move(vertCut4)); + std::unique_ptr> vertCut5(new TypedCut("minCos_T","min cos_{T}",&trkVert_cos_T,0.96,true)); + vertCuts.push_back(std::move(vertCut5)); + std::unique_ptr> vertCut6(new TypedCut("max_trk_deltaEta","max #Delta #eta",&trk_eta,2.0,true)); + vertCuts.push_back(std::move(vertCut6)); + std::unique_ptr> vertCut7(new TypedCut("max_delZ","max #Delta z",&trkVert_del_Z,0.5,true)); + vertCuts.push_back(std::move(vertCut7)); + std::unique_ptr> vertCut8(new TypedCut("minR_T","min R_{T}",&trkVert_R_T,0.25,true)); + vertCuts.push_back(std::move(vertCut8)); + std::unique_ptr> vertCut9(new TypedCut("min_trk_highPt","min lead p_{T}",&trk_pt,13.0,true)); + vertCuts.push_back(std::move(vertCut9)); + std::unique_ptr> vertCut10(new TypedCut("max_trk_sumChi2rphidof","max #Sigma #chi^{2}_{r#phi}",&trk_chi2rphi,6.0,true)); + vertCuts.push_back(std::move(vertCut10)); + std::unique_ptr> vertCut11(new TypedCut("min_trk_sumNumStubs","min #Sigma n_{stub}",&trk_nstub,11,true)); + vertCuts.push_back(std::move(vertCut11)); + std::unique_ptr> vertCut12(new TypedCut("min_trk_highD0","min d_{0}",&trk_d0,0.3,true)); + vertCuts.push_back(std::move(vertCut12)); +#endif + std::unique_ptr> vertCut4(new TypedCut("min_score0p8","score>0.8",&trkVert_score,0.8,true)); + vertCuts.push_back(std::move(vertCut4)); + std::unique_ptr> vertCut5(new TypedCut("min_score0p9","score>0.9",&trkVert_score,0.9,true)); + vertCuts.push_back(std::move(vertCut5)); + std::unique_ptr> vertCut6(new TypedCut("min_score0p95","score>0.95",&trkVert_score,0.95,true)); + vertCuts.push_back(std::move(vertCut6)); + std::unique_ptr> vertCut7(new TypedCut("min_score0p96","score>0.96",&trkVert_score,0.96,true)); + vertCuts.push_back(std::move(vertCut7)); + std::unique_ptr> vertCut8(new TypedCut("min_score0p97","score>0.97",&trkVert_score,0.97,true)); + vertCuts.push_back(std::move(vertCut8)); + std::unique_ptr> vertCut9(new TypedCut("min_score0p98","score>0.98",&trkVert_score,0.98,true)); + vertCuts.push_back(std::move(vertCut9)); + std::unique_ptr> vertCut10(new TypedCut("min_score0p99","score>0.99",&trkVert_score,0.99,true)); + vertCuts.push_back(std::move(vertCut10)); + std::unique_ptr> vertCut11(new TypedCut("min_score0p992","score>0.992",&trkVert_score,0.992,true)); + vertCuts.push_back(std::move(vertCut11)); + std::unique_ptr> vertCut12(new TypedCut("min_score0p994","score>0.994",&trkVert_score,0.994,true)); + vertCuts.push_back(std::move(vertCut12)); + std::unique_ptr> vertCut13(new TypedCut("min_score0p996","score>0.996",&trkVert_score,0.996,true)); + vertCuts.push_back(std::move(vertCut13)); + std::unique_ptr> vertCut14(new TypedCut("min_score0p998","score>0.998",&trkVert_score,0.998,true)); + vertCuts.push_back(std::move(vertCut14)); + + std::vector> vertCutFlows; + std::unique_ptr> vertPlot0(new TypedPlot("x","cm",&trkVert_x,100,-5.0,5.0)); + vertCutFlows.push_back(std::move(vertPlot0)); + std::unique_ptr> vertPlot1(new TypedPlot("y","cm",&trkVert_y,100,-5.0,5.0)); + vertCutFlows.push_back(std::move(vertPlot1)); + std::unique_ptr> vertPlot2(new TypedPlot("z","cm",&trkVert_z,100,-50.0,50.0)); + vertCutFlows.push_back(std::move(vertPlot2)); + std::unique_ptr> vertPlot3(new TypedPlot("firstIndexPt","",&trkVert_firstIndexPt,50,0.0,50.0)); + vertCutFlows.push_back(std::move(vertPlot3)); + std::unique_ptr> vertPlot4(new TypedPlot("secondIndexPt","",&trkVert_secondIndexPt,50,0.0,50.0)); + vertCutFlows.push_back(std::move(vertPlot4)); + std::unique_ptr> vertPlot5(new TypedPlot("cos_T","",&trkVert_cos_T,40,-1.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot5)); + std::unique_ptr> vertPlot6(new TypedPlot("openingAngle","",&trkVert_openingAngle,40,-3.14,3.14)); + vertCutFlows.push_back(std::move(vertPlot6)); + std::unique_ptr> vertPlot7(new TypedPlot("parentPt","GeV",&trkVert_parentPt,200,0.0,200.0)); + vertCutFlows.push_back(std::move(vertPlot7)); + std::unique_ptr> vertPlot8(new TypedPlot("d_T","cm",&trkVert_d_T,40,0.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot8)); + std::unique_ptr> vertPlot9(new TypedPlot("R_T","cm",&trkVert_R_T,20,logspace(0.1,20.0,20))); + vertCutFlows.push_back(std::move(vertPlot9)); + std::unique_ptr> vertPlot10(new TypedPlot("highPt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); + vertCutFlows.push_back(std::move(vertPlot10)); + std::unique_ptr> vertPlot11(new TypedPlot("lowPt","GeV",&trk_pt,100,0.0,100.0)); + vertCutFlows.push_back(std::move(vertPlot11)); + std::unique_ptr> vertPlot12(new TypedPlot("highD0","cm",&trk_d0,80,-2.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot12)); + std::unique_ptr> vertPlot13(new TypedPlot("lowD0","cm",&trk_d0,80,-2.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot13)); + std::unique_ptr> vertPlot14(new TypedPlot("delZ","cm",&trkVert_del_Z,100,0.0,1.5)); + vertCutFlows.push_back(std::move(vertPlot14)); + std::unique_ptr> vertPlot15(new TypedPlot("deltaZ0","cm",&trk_z0,100,0.0,10.0)); + vertCutFlows.push_back(std::move(vertPlot15)); + std::unique_ptr> vertPlot16(new TypedPlot("deltaEta","",&trk_eta,100,0.0,2.4)); + vertCutFlows.push_back(std::move(vertPlot16)); + std::unique_ptr> vertPlot17(new TypedPlot("deltaD0","cm",&trk_d0,100,0.0,10.0)); + vertCutFlows.push_back(std::move(vertPlot17)); + std::unique_ptr> vertPlot18(new TypedPlot("deltaPhi","",&trk_phi,100,0.0,6.3)); + vertCutFlows.push_back(std::move(vertPlot18)); + std::unique_ptr> vertPlot19(new TypedPlot("delIndexPt","",&trkVert_delIndexPt,20,0.0,20.0)); + vertCutFlows.push_back(std::move(vertPlot19)); + std::unique_ptr> vertPlot20(new TypedPlot("sumNumStubs","",&trk_nstub,12,0.0,12.0)); + vertCutFlows.push_back(std::move(vertPlot20)); + std::unique_ptr> vertPlot21(new TypedPlot("sumChi2rphidof","",&trk_chi2rphi,200,0.0,8.0)); + vertCutFlows.push_back(std::move(vertPlot21)); + std::unique_ptr> vertPlot22(new TypedPlot("sumChi2rzdof","",&trk_chi2rz,200,0.0,3.0)); + vertCutFlows.push_back(std::move(vertPlot22)); + std::unique_ptr> vertPlot23(new TypedPlot("sumBendChi2","",&trk_bendchi2,200,0.0,14.0)); + vertCutFlows.push_back(std::move(vertPlot23)); + std::unique_ptr> vertPlot24(new TypedPlot("sumMVA1","",&trk_MVA1,100,0.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot24)); + std::unique_ptr> vertPlot25(new TypedPlot("sumMVA2","",&trk_MVA2,100,0.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot25)); + std::unique_ptr> vertPlot26(new TypedPlot("leadEta","",&trk_eta,50,-2.4,2.4)); + vertCutFlows.push_back(std::move(vertPlot26)); + std::unique_ptr> vertPlot27(new TypedPlot("score","",&trkVert_score,50,0.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot27)); + + std::vector> vertCutFlowsTP; + std::unique_ptr> vertPlotTP0(new TypedPlot("x","cm",&tpVert_x,100,-5.0,5.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP0)); + std::unique_ptr> vertPlotTP1(new TypedPlot("y","cm",&tpVert_y,100,-5.0,5.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP1)); + std::unique_ptr> vertPlotTP2(new TypedPlot("z","cm",&tpVert_z,100,-50.0,50.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP2)); + std::unique_ptr> vertPlotTP4(new TypedPlot("cos_T","",&tpVert_cos_T,40,-1.0,1.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP4)); + std::unique_ptr> vertPlotTP5(new TypedPlot("openingAngle","",&tpVert_openingAngle,40,-3.14,3.14)); + vertCutFlowsTP.push_back(std::move(vertPlotTP5)); + std::unique_ptr> vertPlotTP6(new TypedPlot("parentPt","GeV",&tpVert_parentPt,200,0.0,200.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP6)); + std::unique_ptr> vertPlotTP7(new TypedPlot("d_T","cm",&tpVert_d_T,40,0.0,0.2)); + vertCutFlowsTP.push_back(std::move(vertPlotTP7)); + std::unique_ptr> vertPlotTP8(new TypedPlot("R_T","cm",&tpVert_R_T,20,logspace(0.1,20.0,20))); + vertCutFlowsTP.push_back(std::move(vertPlotTP8)); + std::unique_ptr> vertPlotTP9(new TypedPlot("highPt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); + vertCutFlowsTP.push_back(std::move(vertPlotTP9)); + std::unique_ptr> vertPlotTP10(new TypedPlot("lowPt","GeV",&tp_pt,100,0.0,100.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP10)); + std::unique_ptr> vertPlotTP11(new TypedPlot("highD0","cm",&tp_d0,80,-2.0,2.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP11)); + std::unique_ptr> vertPlotTP12(new TypedPlot("lowD0","cm",&tp_d0,80,-2.0,2.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP12)); + std::unique_ptr> vertPlotTP13(new TypedPlot("deltaZ0","cm",&tp_z0,100,0.0,10.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP13)); + std::unique_ptr> vertPlotTP14(new TypedPlot("deltaEta","",&tp_eta,100,0.0,2.4)); + vertCutFlowsTP.push_back(std::move(vertPlotTP14)); + std::unique_ptr> vertPlotTP15(new TypedPlot("deltaD0","cm",&tp_d0,100,0.0,10.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP15)); + std::unique_ptr> vertPlotTP16(new TypedPlot("deltaPhi","",&tp_phi,100,0.0,6.3)); + vertCutFlowsTP.push_back(std::move(vertPlotTP16)); + std::unique_ptr> vertPlotTP17(new TypedPlot("leadEta","",&tp_eta,50,-2.4,2.4)); + vertCutFlowsTP.push_back(std::move(vertPlotTP17)); + + std::vector vertType = {"matched","unmatched"}; + std::vector vertTypeTP = {"matched","all"}; + std::vector vertPlotTPModifiers = {"","_oneMatch"}; + + TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCuts.size()]; + TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCuts.size()][vertPlotTPModifiers.size()]; + TH1F* vertexCutFlowsTP[vertCutFlowsTP.size()][vertPlotTPModifiers.size()]; + TH1F* vertexNumVertices[vertCuts.size()]; + + for(uint i=0; igetVarName()+"_"+vertType[j]+"_"+vertCuts[k]->getCutName()+"Cut"; + if(vertCutFlows[i]->getMaxBin()==vertCutFlows[i]->getMinBin()){ + TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlows[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),bins.data()); + vertexCutFlows[i][j][k] = hist; + } + else{ + float binWidth = (vertCutFlows[i]->getMaxBin() - vertCutFlows[i]->getMinBin()) / vertCutFlows[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlows[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),vertCutFlows[i]->getMinBin(),vertCutFlows[i]->getMaxBin()); + vertexCutFlows[i][j][k] = hist; + } + } + } + } + + for(uint i=0; igetVarName()+"_"+vertTypeTP[0]+"_"+vertCuts[k]->getCutName()+"Cut"+vertPlotTPModifiers[m]; + if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlowsTP[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); + vertexCutFlowsMatchTP[i][k][m] = hist; + } + else{ + float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); + vertexCutFlowsMatchTP[i][k][m] = hist; + } + } + } + } + + for(uint i=0; igetVarName()+"_"+vertTypeTP[1]+vertPlotTPModifiers[k]; + if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlowsTP[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); + vertexCutFlowsTP[i][k] = hist; + } + else{ + float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); + vertexCutFlowsTP[i][k] = hist; + } + } + } + + for(uint k=0; kgetCutName()+"Cut"; + TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; + TH1F* hist = new TH1F(name,labels,40,0,40); + vertexNumVertices[k] = hist; + } + + + TH1F *h_numSelectedTrks = new TH1F("h_numSelectedTrks","h_numSelectedTrks; Number of Selected Tracks; Events / 1.0",100,0,100); + TH1F *h_numSelectedTrks_zoomOut = new TH1F("h_numSelectedTrks_zoomOut","h_numSelectedTrks_zoomOut; Number of Selected Tracks; Events / 10.0",100,0,1000); + TH1F *h_trk_H_T = new TH1F("h_trk_H_T","h_trk_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_trk_MET = new TH1F("h_trk_MET","h_trk_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_trk_oneMatch_H_T = new TH1F("h_trk_oneMatch_H_T","h_trk_oneMatch_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_trk_oneMatch_MET = new TH1F("h_trk_oneMatch_MET","h_trk_oneMatch_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_tp_H_T = new TH1F("h_tp_H_T","h_tp_H_T; Event TP Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_tp_MET = new TH1F("h_tp_MET","h_tp_MET; Event TP Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_trueVertex_numAllCuts = new TH1F("h_trueVertex_numAllCuts","h_trueVertex_numAllCuts; TP Vertices; Events / 1.0",40,0,40); + TH1F *h_trueVertex_numTPs = new TH1F("h_trueVertex_numTPs","h_trueVertex_numTPs; TPs Associated with Vertex; Events / 1.0",6,0,6); + TH1F *h_trackVertexBranch_numAllCuts = new TH1F("h_trackVertexBranch_numAllCuts","h_trackVertexBranch_numAllCuts; Track Vertices; Events / 1.0",40,0,40); + + // Displaced Vertex Plots + TH1F *h_res_tp_trk_x = new TH1F("h_res_tp_trk_x","h_res_tp_trk_x; x residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); + TH1F *h_res_tp_trk_y = new TH1F("h_res_tp_trk_y","h_res_tp_trk_y; y residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); + TH1F *h_res_tp_trk_x_zoomOut = new TH1F("h_res_tp_trk_x_zoomOut","h_res_tp_trk_x_zoomOut; x residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); + TH1F *h_res_tp_trk_y_zoomOut = new TH1F("h_res_tp_trk_y_zoomOut","h_res_tp_trk_y_zoomOut; y residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); + TH1F *h_res_tp_trk_z = new TH1F("h_res_tp_trk_z","h_res_tp_trk_z; z residual of vertex (cm) ; Events / 0.05 cm",400,-10,10); + TH1F *h_res_tp_trk_r = new TH1F("h_res_tp_trk_r","h_res_tp_trk_r; r residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); + TH1F *h_res_tp_trk_phi = new TH1F("h_res_tp_trk_phi","h_res_tp_trk_phi; phi residual of vertex ; Events / 0.02",100,-1,1); + + TH2F *h_trueVertex_charge_vs_numTPs = new TH2F("h_trueVertex_charge_vs_numTPs","h_trueVertex_charge_vs_numTPs; TPs Associated with Vertex; Net Charge",6,0,6,12,-6,6); + TH2F *h_correct_trackVertex_charge_vs_numTracks = new TH2F("h_correct_trackVertex_charge_vs_numTracks","h_correct_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); + TH2F *h_false_trackVertex_charge_vs_numTracks = new TH2F("h_false_trackVertex_charge_vs_numTracks","h_false_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); + + std::string binVariable = ""; + std::vector> track_bins = {{-1,1}}; + std::vector> z0_bins; + double z0_bin_min = -20.0; + double z0_bin_width = 4.0; + double z0_bin_max = z0_bin_min+z0_bin_width; + while(z0_bin_max<20.0){ + z0_bins.push_back({z0_bin_min,z0_bin_max}); + z0_bin_min += (z0_bin_width/2); + z0_bin_max += (z0_bin_width/2); + } + std::vector> phi_bins; + double phi_bin_min = -TMath::Pi(); + double phi_bin_width = 0.6; + double phi_bin_max = phi_bin_min+phi_bin_width; + while(phi_bin_max numPart_primary_noCuts{}; + std::map numPart_primary_chi2rzdofCuts{}; + std::map numPart_primary_bendchi2Cuts{}; + std::map numPart_primary_chi2rphidofCuts{}; + std::map numPart_primary_nstubCuts{}; + std::map numPart_primary_ptCuts{}; + std::map numPart_primary_d0Cuts{}; + std::map numPart_primary_z0Cuts{}; + std::map numPart_np_noCuts{}; + std::map numPart_np_chi2rzdofCuts{}; + std::map numPart_np_bendchi2Cuts{}; + std::map numPart_np_chi2rphidofCuts{}; + std::map numPart_np_nstubCuts{}; + std::map numPart_np_ptCuts{}; + std::map numPart_np_d0Cuts{}; + std::map numPart_np_z0Cuts{}; + + if (tree == 0) return; + Long64_t nevt = tree->GetEntries(); + //nevt = 100; + Vertex_Parameters geomTrackVertex; + Vertex_Parameters geomTrueVertex; + auto trackLoopTime = 0.; + auto tpLoopTime = 0.; + auto trueVertLoopTime = 0.; + auto trueVertPlotLoopTime = 0.; + auto trackVertLoopTime = 0.; + auto matchLoopTime = 0.; + auto trackVertPlotLoopTime = 0.; + //std::cout<<"before event loop"<GetEntry(i_evnt); + displayProgress(i_evnt, nevt); + std::vector> binnedSelectedTracks; + for(uint i=0; i selectedTracks; // Tracks + std::deque selectedTPs; // Tracking particles + std::vector trueVertices; + int maxPT_i = 0; + bool oneMatch = false; + std::valarray trkMET = {0.0,0.0}; + float trkH_T = 0.0; + + vector> tpVert_indexTPs; + vector trkVert_indexMatch; + tpVert_d_T = new vector (); + tpVert_R_T = new vector (); + tpVert_cos_T = new vector (); + tpVert_x = new vector (); + tpVert_y = new vector (); + tpVert_z = new vector (); + tpVert_openingAngle = new vector (); + tpVert_parentPt = new vector (); + + // ---------------------------------------------------------------------------------------------------------------- + // track loop + //std::cout<<"starting track loop"<size(); ++it){ + bool isPrimary = true; + if(inputFile.Contains("DarkPhoton")){ + isPrimary = trk_matchtp_isHToMu->at(it); + } + if(inputFile.Contains("DisplacedTrackJet")){ + isPrimary = trk_matchtp_isHToB->at(it); + } + //std::cout<<"track pt: "<at(it)<<" eta: "<at(it)<<" d0 : "<at(it)<<" phi: "<at(it)<<" z0: "<at(it)<<" nstub: "<getDoPlot()){ + i_plot++; + } + bool mods = true; + TString cutName = preselCuts[icut]->getCutName(); + float cutValue = preselCuts[icut]->getCutValue(); + float param = preselCuts[icut]->getParam(it); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; + if(cutName.Contains("disk") && fabs(trk_eta->at(it))<=barrelEta) mods = false; + if(cutName.Contains("_H") && trk_pt->at(it)<=10) mods = false; + if(cutName.Contains("_L") && trk_pt->at(it)>10) mods = false; + if(cutName.Contains("_P") && fabs(trk_d0->at(it))>1) mods = false; + if(cutName.Contains("_D") && fabs(trk_d0->at(it))<=1 ) mods = false; + if(cutName.Contains("overlap") && (fabs(trk_eta->at(it))<=1.1 || fabs(trk_eta->at(it))>=1.7)) mods = false; + if(mods){ + if(cutName.Contains("max") && param>cutValue) break; + if(cutName.Contains("min") && paramgetDoPlot()) continue; + for(uint i=0; iat(it)==1 && isPrimary; + if(trackType[i]=="primary" && !primary) continue; + if(trackType[i]=="np" && primary) continue; + if(trackType[i]=="fake" && trkExt_fake->at(it)!=0) continue; + if(trackType[i]=="PU" && trkExt_fake->at(it)!=2) continue; + if(trackType[i]=="notHiggs" && !(trkExt_fake->at(it)==1 && !isPrimary)) continue; + string partId = to_string(trk_matchtp_pdgid->at(it)); + //numPartCutFlows[i][icut][partId]++; + for(uint j=0; jat(it)<=10) continue; + if(plotModifiers[j]=="_L" && trk_pt->at(it)>10) continue; + if(plotModifiers[j]=="_P" && fabs(trk_d0->at(it))>1) continue; + if(plotModifiers[j]=="_D" && fabs(trk_d0->at(it))<=1) continue; + if(plotModifiers[j]=="_barrel" && fabs(trk_eta->at(it))>barrelEta) continue; + if(plotModifiers[j]=="_disk" && fabs(trk_eta->at(it))<=barrelEta) continue; + for(uint ivar=0; ivargetParam(it); + TString varName = varCutFlows[ivar]->getVarName(); + if(varName.Contains("sector")){ + while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); + while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); + while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; + } + if(varName.Contains("d0")){ + param = fabs(param); + } + preselCutFlows[ivar][i][i_plot][j]->Fill(param); + } + for(uint ivar2D=0; ivar2DgetParam(it); + float param2 = varCutFlows2D[ivar2D].second->getParam(it); + TString varName1 = varCutFlows2D[ivar2D].first->getVarName(); + TString varName2 = varCutFlows2D[ivar2D].second->getVarName(); + if(varName1.Contains("sector")){ + while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); + while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); + while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; + } + if(varName2.Contains("sector")){ + while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); + while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); + while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; + } + preselCutFlows2D[ivar2D][i][i_plot][j]->Fill(param1,param2); + } + } + } + } + if(icut==preselCuts.size()){ + Track_Parameters* tp_params = new Track_Parameters(trk_matchtp_pt->at(it), trk_matchtp_d0->at(it), trk_matchtp_z0->at(it), trk_matchtp_eta->at(it), trk_matchtp_phi->at(it), trk_matchtp_pdgid->at(it), trk_matchtp_x->at(it), trk_matchtp_y->at(it), trk_matchtp_z->at(it)); + for(uint i=0; iat(it); + if (binVariable=="z0") trkVariable = fabs(trk_z0->at(it)); + if(trkVariabletrack_bins[i][0] ){ + binnedSelectedTracks[i].push_back(Track_Parameters(trk_pt->at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it), trk_MVA2->at(it))); + } + } + + + //std::cout<<"track params: "<at(it)<<" "<<-trk_d0->at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it), trk_MVA2->at(it) )); + trkH_T += trk_pt->at(it); + std::valarray trackPtVec = {trk_pt->at(it)*cos(trk_phi->at(it)),trk_pt->at(it)*sin(trk_phi->at(it))}; + trkMET -= trackPtVec; + } + } + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + trackLoopTime += std::chrono::duration_cast(end - begin).count(); + h_trk_H_T->Fill(trkH_T); + h_trk_MET->Fill(TMath::Sqrt(pow(trkMET[0],2)+pow(trkMET[1],2))); + h_numSelectedTrks->Fill(selectedTracks.size()); + //std::cout<<"num selected tracks: "<Fill(selectedTracks.size()); + + // ---------------------------------------------------------------------------------------------------------------- + // tracking particle loop + float tpH_T = 0.0; + std::valarray tpMET = {0.0,0.0}; + //std::cout<<"tp_pt size: "<size()<size(); it++){ + + float tmp_d0 = tp_d0->at(it); // Sign difference in the NTupleMaker + float tmp_z0 = tp_z0->at(it); + + bool isPrimary = true; + if(inputFile.Contains("DarkPhoton")) isPrimary = tp_isHToMu->at(it); + if(inputFile.Contains("DisplacedTrackJet")) isPrimary = tp_isHToB->at(it); + + uint icut=0; + for(icut=0; icutgetParam(it); + TString cutName = preselCutsTP[icut]->getCutName(); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + float cutValue = preselCutsTP[icut]->getCutValue(); + //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; + if(cutName.Contains("disk") && fabs(tp_eta->at(it))<=barrelEta) mods = false; + if(cutName.Contains("_H") && tp_pt->at(it)<=10) mods = false; + if(cutName.Contains("_L") && tp_pt->at(it)>10) mods = false; + if(cutName.Contains("_P") && fabs(tp_d0->at(it))>1) mods = false; + if(cutName.Contains("_D") && fabs(tp_d0->at(it))<=1 ) mods = false; + if(cutName.Contains("overlap") && (fabs(tp_eta->at(it))<=1.1 || fabs(tp_eta->at(it))>=1.7)) mods = false; + if(mods){ + if(cutName.Contains("max") && param>cutValue) break; + if(cutName.Contains("min") && paramat(it)==0 && isPrimary; + if(tpType[i]=="primary" && !primary) continue; + if(tpType[i]=="np" && primary) continue; + if(tpType[i]=="PU" && tp_eventid->at(it)==0) continue; + if(tpType[i]=="notHiggs" && !(tp_eventid->at(it)==0 && !isPrimary)) continue; + if(tpType[i]=="match" && tp_nmatch->at(it)==0) continue; + string partId = to_string(tp_pdgid->at(it)); + //numPartCutFlowsTP[i][icut][partId]++; + for(uint j=0; jat(it)<=10) continue; + if(plotModifiers[j]=="_L" && tp_pt->at(it)>10) continue; + if(plotModifiers[j]=="_P" && fabs(tp_d0->at(it))>1) continue; + if(plotModifiers[j]=="_D" && fabs(tp_d0->at(it))<=1) continue; + if(plotModifiers[j]=="_barrel" && fabs(tp_eta->at(it))>barrelEta) continue; + if(plotModifiers[j]=="_disk" && fabs(tp_eta->at(it))<=barrelEta) continue; + for(uint ivar=0; ivargetParam(it); + TString varName = varCutFlowsTP[ivar]->getVarName(); + if(varName.Contains("sector")){ + while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); + while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); + while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; + } + if(varName.Contains("d0")){ + param = fabs(param); + } + preselCutFlowsTP[ivar][i][icut][j]->Fill(param); + } + for(uint ivar2D=0; ivar2DgetParam(it); + float param2 = varCutFlowsTP2D[ivar2D].second->getParam(it); + TString varName1 = varCutFlowsTP2D[ivar2D].first->getVarName(); + TString varName2 = varCutFlowsTP2D[ivar2D].second->getVarName(); + if(varName1.Contains("sector")){ + while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); + while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); + while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; + } + if(varName2.Contains("sector")){ + while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); + while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); + while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; + } + preselCutFlowsTP2D[ivar2D][i][icut][j]->Fill(param1,param2); + } + } + } + } + if(icut==preselCutsTP.size() && tp_eventid->at(it)==0 && isPrimary==true){ + selectedTPs.push_back(Track_Parameters(tp_pt->at(it), tmp_d0, tmp_z0, tp_eta->at(it), tp_phi->at(it), tp_pdgid->at(it), tp_x->at(it), tp_y->at(it), tp_z->at(it), tp_charge->at(it), it)); + if (tp_eventid->at(it)>0){ + tpH_T += tp_pt->at(it); + std::valarray tpPtVec = {tp_pt->at(it)*cos(tp_phi->at(it)),tp_pt->at(it)*sin(tp_phi->at(it))}; + tpMET -= tpPtVec; + } + } + } + end = std::chrono::steady_clock::now(); + tpLoopTime += std::chrono::duration_cast(end - begin).count(); + h_tp_H_T->Fill(tpH_T); + h_tp_MET->Fill(TMath::Sqrt(pow(tpMET[0],2)+pow(tpMET[1],2))); + + // -------------------------------------------------------------------------------------------- + // Vertex finding in Tracking Particles + // -------------------------------------------------------------------------------------------- + if (!(selectedTracks.size() >= 2)) continue; + double_t x_dv = -9999.0;// (tp_x->at((*selectedTPs)[0]->index));//+tp_x->at((*selectedTPs)[1]->index))/2.0; + double_t y_dv = -9999.0;// (tp_y->at((*selectedTPs)[0]->index));//+tp_y->at((*selectedTPs)[1]->index))/2.0; + double_t z_dv = -9999.0;// (tp_z->at((*selectedTPs)[0]->index));//+tp_z->at((*selectedTPs)[1]->index))/2.0; + + if(selectedTPs.size()>=2){ + begin = std::chrono::steady_clock::now(); + //std::cout<<"vertex finding in TPs"<1){ + bool foundTrueVertex = false; + for( uint i=1; iat(index0)-tp_x->at(index1))<0.0001 && fabs(tp_y->at(index0)-tp_y->at(index1))<0.0001 && fabs(tp_z->at(index0)-tp_z->at(index1))<0.0001 ){ + x_dv = tp_x->at(index0); + y_dv = tp_y->at(index0); + z_dv = tp_z->at(index0); + if(dist(x_dv,y_dv)>d0_res && dist(x_dv,y_dv)<20){ + //std::cout<<"true vertex: "<at(selectedTPs[0].index)<<" "<at(selectedTPs[i].index)<Fill(trueVertices.size()); + float maxPT = 0.0; + // loop through trueVertices and fill ntuple branches + for(uint i=0; imaxPT){ + maxPT = trueVertices[i].a.pt; + maxPT_i = i; + } + + std::vector itps; + for(uint itrack=0; itrackpush_back(trueVertices[i].d_T); + tpVert_cos_T->push_back(trueVertices[i].cos_T); + tpVert_R_T->push_back(trueVertices[i].R_T); + tpVert_x->push_back(trueVertices[i].x_dv); + tpVert_y->push_back(trueVertices[i].y_dv); + tpVert_z->push_back(trueVertices[i].z_dv); + tpVert_openingAngle->push_back(trueVertices[i].openingAngle); + tpVert_parentPt->push_back(trueVertices[i].p_mag); + + float netCharge = 0; + for(uint itrack=0; itrackFill(trueVertices[i].tracks.size()); + h_trueVertex_charge_vs_numTPs->Fill(trueVertices[i].tracks.size(),netCharge); + } + end = std::chrono::steady_clock::now(); + trueVertLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + // fill true vertex plots using ntuple branches + for (int it = 0; it < (int)tpVert_d_T->size(); it++){ + for(uint i=0; igetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + param = fabs(param1 - param2); + vertexCutFlowsTP[i][k]->Fill(param); + } + continue; + } + else if(varName.Contains("high")){ + param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + if(fabs(param2)>fabs(param)) param = param2; + } + } + else if(varName.Contains("low")){ + param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + if(fabs(param2)getParam(tpVert_indexTPs[it][0]); + } + else{ + param = vertCutFlowsTP[i]->getParam(it); + } + vertexCutFlowsTP[i][k]->Fill(param); + } + } + } + end = std::chrono::steady_clock::now(); + trueVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); + + } + + // -------------------------------------------------------------------------------------------- + // Vertex finding in Tracks + // -------------------------------------------------------------------------------------------- + //std::cout<<"vertex finding in tracks"< lastBinVertices; + for(auto trackBin : binnedSelectedTracks){ + std::vector binVertices; + if(trackBin.size()<2) continue; + sort(trackBin.begin(), trackBin.end(), ComparePtTrack); + for(uint i=0; ipush_back(trackBin[i].index); + //trkVert_secondIndexTrk->push_back(trackBin[j].index); + //trkVert_firstIndexPt->push_back(i); + //trkVert_secondIndexPt->push_back(j); + //trkVert_inTraj->push_back(inTraj); + //trkVert_d_T->push_back(vertex.d_T); + //trkVert_R_T->push_back(vertex.R_T); + //trkVert_cos_T->push_back(vertex.cos_T); + //trkVert_del_Z->push_back(vertex.delta_z); + //trkVert_x->push_back(vertex.x_dv); + //trkVert_y->push_back(vertex.y_dv); + //trkVert_z->push_back(vertex.z_dv); + //trkVert_openingAngle->push_back(vertex.openingAngle); + //trkVert_parentPt->push_back(vertex.p_mag); + //trkVert_delIndexPt->push_back(fabs(i-j)); + //std::cout<<"found vertex"<push_back(x_trk_alt); + //trkVert_alt_y->push_back(y_trk_alt); + //trkVert_leadingCharge->push_back(vertex.a.charge); + //trkVert_subleadingCharge->push_back(vertex.b.charge); + } + } + } + lastBinVertices = binVertices; + } + end = std::chrono::steady_clock::now(); + trackVertLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + //std::cout<<"match track and true vertices"<size(); it++){ + int itp = trkVert_firstIndexTrk->at(it); + //std::cout<<"match vertices first track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); + //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 1 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<at(it); + //std::cout<<"match vertices second track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); + //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 2 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<=2){ + trkVert_indexMatch.push_back(i); + foundMatch = true; + break; + } + } + if(!foundMatch) trkVert_indexMatch.push_back(-1); + } + end = std::chrono::steady_clock::now(); + matchLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + bool filledOneMatch[vertCuts.size()]; + bool isMatchedVec[trueVertices.size()][vertCuts.size()]; + uint numVertices[vertCuts.size()]; + for(uint i = 0; isize(); it++){ + for(uint i=0; igetCutName(); + float cutValue = vertCuts[i]->getCutValue(); + //std::cout<<"cutName: "<at(it)<<" "<at(it)<getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + param = fabs(param1 - param2); + } + else if(cutName.Contains("sum")){ + float param1 = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(cutName.Contains("Charge")){ + if(param1>0.0) param1 = 1.0; + if(param1<0.0) param1 = -1.0; + if(param2>0.0) param2 = 1.0; + if(param2<0.0) param2 = -1.0; + } + param = param1 + param2; + } + else if(cutName.Contains("high")){ + param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)>fabs(param)) param = param2; + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + } + else if(cutName.Contains("low")){ + param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + } + else{ + param = vertCuts[i]->getParam(it); + } + //std::cout<<"trackVert cutName: "<cutValue) break; + if(cutName.Contains("min") && paramgetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + param = fabs(param1 - param2); + } + else if(varName.Contains("sum")){ + float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(varName.Contains("charge")){ + if(param1>0.0) param1 = 1.0; + if(param1<0.0) param1 = -1.0; + if(param2>0.0) param2 = 1.0; + if(param2<0.0) param2 = -1.0; + } + param = param1 + param2; + } + else if(varName.Contains("high")){ + param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)>fabs(param)) param = param2; + } + else if(varName.Contains("low")){ + param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); + } + else{ + param = vertCutFlows[k]->getParam(it); + } + vertexCutFlows[k][j][i]->Fill(param); + } + if(vertType[j]=="matched"){ + for(uint k=0; kFill(tpVert_x->at(jt)-trkVert_x->at(it)); + h_res_tp_trk_x_zoomOut->Fill(tpVert_x->at(jt)-trkVert_x->at(it)); + h_res_tp_trk_y->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); + h_res_tp_trk_y_zoomOut->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); + h_res_tp_trk_z->Fill(tpVert_z->at(jt)-trkVert_z->at(it)); + } + + for(uint m=0; mgetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + param = fabs(param1 - param2); + vertexCutFlowsMatchTP[m][i][k]->Fill(param); + } + continue; + } + else if(varName.Contains("high")){ + param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + if(fabs(param2)>fabs(param)) param = param2; + } + } + else if(varName.Contains("low")){ + param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + if(fabs(param2)getParam(tpVert_indexTPs[jt][0]); + } + else{ + param = vertCutFlowsTP[m]->getParam(jt); + } + vertexCutFlowsMatchTP[m][i][k]->Fill(param); + } + } + break; + } + } + } + } + end = std::chrono::steady_clock::now(); + trackVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); + + h_trackVertexBranch_numAllCuts->Fill(numVertices[vertCuts.size()-1]); + //std::cout<<"num vertices: "<Fill(numVertices[i]); + } + + delete tpVert_d_T; + delete tpVert_R_T; + delete tpVert_cos_T; + delete tpVert_x; + delete tpVert_y; + delete tpVert_z; + delete tpVert_openingAngle; + delete tpVert_parentPt; +#if 0 + delete trkVert_firstIndexTrk; + delete trkVert_secondIndexTrk; + delete trkVert_firstIndexPt; + delete trkVert_secondIndexPt; + delete trkVert_inTraj; + delete trkVert_d_T; + delete trkVert_R_T; + delete trkVert_cos_T; + delete trkVert_del_Z; + delete trkVert_x; + delete trkVert_y; + delete trkVert_z; + delete trkVert_openingAngle; + delete trkVert_parentPt; + delete trkVert_delIndexPt; +#endif + + + } // End of Event Loop + + std::cout<<"nevt: "<Exec(mkDIR); + TString PRESELDIR = DIR + "/PreselectionPlots"; + TString makedirPreSel = "mkdir -p " + PRESELDIR; + const char *mkDIRPRESEL = makedirPreSel.Data(); + gSystem->Exec(mkDIRPRESEL); + TString VERTDIR = DIR + "/VertexPlots"; + TString makedirVert = "mkdir -p " + VERTDIR; + const char *mkDIRVERT = makedirVert.Data(); + gSystem->Exec(mkDIRVERT); + + TFile *fout; + fout = new TFile(outputDir + "output_" + inputFile, "recreate"); + TLegend* l = new TLegend(0.82,0.3,0.98,0.7); + l->SetFillColor(0); + l->SetLineColor(0); + l->SetTextSize(0.04); + l->SetTextFont(42); + + std::cout<<"trkEffOverlay"<Clear(); + TH1F* h_trkEff[preselCutsSize]; + uint i_plot = 0; + for(uint mcut=1; mcutgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + //std::cout<<"trkEffOverlay i j m k: "<Clone(); + h_trkEff[i_plot]->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trkEff[i_plot]); + h_trkEff[i_plot]->SetStats(0); + removeFlows(preselCutFlows[ivar][j][i_plot][k]); + TString cutLabel = preselCuts[mcut]->getCutLabel(); + TString varString = varCutFlows[ivar]->getVarName(); + h_trkEff[i_plot]->Divide(preselCutFlows[ivar][j][i_plot][k],h_trkEff[i_plot],1.0,1.0,"B"); + if(i_plot!=10){ + h_trkEff[i_plot]->SetLineColor(i_plot); + h_trkEff[i_plot]->SetMarkerColor(i_plot); + } + else{ + h_trkEff[i_plot]->SetLineColor(40); + h_trkEff[i_plot]->SetMarkerColor(40); + } + //TString cutLabel = preselCuts[mcut]->getCutLabel(); + //std::cout<<"cutName: "<AddEntry(h_trkEff[i_plot],cutLabel,"lp"); + //TString varString = varCutFlows[ivar]->getVarName(); + if(varString.Contains("d0") || varString.Contains("pt")){ + //std::cout<<"h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_trkEff[i_plot]->GetBinContent(ibin)) + ", "; + binWidths+=to_string(h_trkEff[i_plot]->GetBinWidth(ibin)) + ", "; + binErrors+=to_string(h_trkEff[i_plot]->GetBinError(ibin)) + ", "; + binCenters+=to_string(h_trkEff[i_plot]->GetBinCenter(ibin)) + ", "; + } + binValues+="]"; + binWidths+="]"; + binErrors+="]"; + binCenters+="]"; + //std::cout<<"binValues: "<Draw(); + } + else{ + h_trkEff[i_plot]->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + /* + TString label_cms="CMS"; + TLatex* Label_cms = new TLatex(0.15,0.92,label_cms); + Label_cms->SetNDC(); + Label_cms->SetTextFont(61); + Label_cms->SetTextSize(0.065); + Label_cms->Draw(); + TString label_cms1="Simulation Phase-2 Preliminary"; + TLatex* Label_cms1 = new TLatex(0.232,0.92,label_cms1); + Label_cms1->SetNDC(); + Label_cms1->SetTextSize(0.051); + Label_cms1->SetTextFont(52); + Label_cms1->Draw();*/ + c.SaveAs(PRESELDIR + "/h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"); + /*std::cout << "trkEffOverlay took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n";*/ + } + } + } + + std::cout<<"signalvsbg"<getDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetCutName(); + auto h_stack = new THStack("hs_"+varCutFlows[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j],"Stacked BG histograms"); + float integralSum = 0; + l->Clear(); + for(uint m=0; mGetYaxis()->SetNoExponent(kTRUE); + removeFlows(preselCutFlows[kvar][m][i_plot][j]); + if(detailedPlots){ + raiseMax(preselCutFlows[kvar][m][i_plot][j]); + preselCutFlows[kvar][m][i_plot][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + //preselCutFlows[kvar][m][icut][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/"+ preselCutFlows[kvar][m][i_plot][j]->GetName() + ".pdf"); + } + if(m!=9){ + preselCutFlows[kvar][m][i_plot][j]->SetLineColor(m+1); + preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(m+1); + } + else{ + preselCutFlows[kvar][m][i_plot][j]->SetLineColor(40); + preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(40); + } + if(trackType[m]=="fake" || trackType[m]=="PU" || trackType[m]=="notHiggs"){ + integralSum+=preselCutFlows[kvar][m][i_plot][j]->Integral(); + } + /*std::cout << "preselCutFlows took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n";*/ + } + for(uint m=0; mScale(1./integralSum); + h_stack->Add(preselCutFlows[kvar][m][i_plot][j]); + } + } + + //h_stack->Draw("HIST"); + preselCutFlows[kvar][m_primary][i_plot][j]->Scale(1./preselCutFlows[kvar][m_primary][i_plot][j]->Integral()); + /* + raiseMaxStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); + drawSameStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); + mySmallText(0.3, 0.9, 1, ctxt); + l->Clear(); + l->AddEntry(preselCutFlows[kvar][m_primary][icut][j],"Primary","l"); + l->AddEntry(preselCutFlows[kvar][m_fake][icut][j],"Fake","l"); + l->AddEntry(preselCutFlows[kvar][m_PU][icut][j],"PU","l"); + l->AddEntry(preselCutFlows[kvar][m_notHiggs][icut][j],"notHiggs","l"); + l->Draw(); + c.SaveAs(PRESELDIR + "/h_signalVsBGStack_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + */ + delete h_stack; + for(uint m=0; mScale(1./preselCutFlows[kvar][m][i_plot][j]->Integral()); + preselCutFlows[kvar][m][i_plot][j]->SetStats(0); + } + /* + raiseMax(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); + drawSame(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + //std::cout<<"signalvsBGOverlay primary fake PU notHiggs: "<getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + std::cout << "signalVsBGOverlay took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n"; + */ + raiseMax(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); + drawSame(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); + mySmallText(0.3, 0.9, 1, ctxt); + l->Clear(); + l->AddEntry(preselCutFlows[kvar][m_primary][i_plot][j],"Primary","l"); + l->AddEntry(preselCutFlows[kvar][m_np][i_plot][j],"NP","l"); + l->Draw(); + preselCutFlows[kvar][m_primary][i_plot][j]->Write("", TObject::kOverwrite); + preselCutFlows[kvar][m_np][i_plot][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/h_signalVsBG_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + } + } + } + std::cout<<"trackFindingEff"<getCutName(); + for(uint j=0; jGetYaxis()->SetNoExponent(kTRUE); + removeFlows(preselCutFlowsTP[kvar][m][icut][j]); + if(detailedPlots){ + raiseMax(preselCutFlowsTP[kvar][m][icut][j]); + preselCutFlowsTP[kvar][m][icut][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + //preselCutFlowsTP[kvar][m][icut][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP[kvar][m][icut][j]->GetName() + ".pdf"); + } + } + preselCutFlowsTP[kvar][m_match][icut][j]->Divide(preselCutFlowsTP[kvar][m_match][icut][j],preselCutFlowsTP[kvar][m_tp][icut][j]); + raiseMax(preselCutFlowsTP[kvar][m_match][icut][j]); + preselCutFlowsTP[kvar][m_match][icut][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/h_trackFindingEff_"+varCutFlowsTP[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j]+".pdf"); + } + } + } + + i_plot = -1; + for(uint icut=0; icutgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + TString cutName = preselCuts[icut]->getCutName(); + for(uint j=0; jDraw("COLZ"); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/"+ preselCutFlows2D[kvar][m][i_plot][j]->GetName() + ".pdf"); + } + } + } + } + std::cout<<"preselCutFlowsTP2D"<getCutName(); + for(uint j=0; jDraw("COLZ"); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP2D[kvar][m][icut][j]->GetName() + ".pdf"); + } + } + } + } + } + std::cout<<"eff_trueVertex"<getVarName().Contains("highPt")) std::cout<<"onematch entries: "<GetEntries()<<" "<GetEntries()<Clone(); + h_eff->Divide(vertexCutFlowsMatchTP[j][vertCuts.size()-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); + raiseMax(h_eff); + h_eff->SetStats(0); + h_eff->SetAxisRange(0, 1.1, "Y"); + h_eff->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(VERTDIR + "/h_eff_trueVertex_" + vertCutFlowsTP[j]->getVarName() + "_" + vertPlotTPModifiers[i] + ".pdf"); + } + } + std::cout<<"findEff_trueVertex"<Clear(); + for(uint j=0; jClone(); + h_findEff->Divide(vertexCutFlowsMatchTP[i][j][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); + h_findEff->SetStats(0); + if(j!=9){ + h_findEff->SetLineColor(j+1); + h_findEff->SetMarkerColor(j+1); + } + else{ + h_findEff->SetLineColor(40); + h_findEff->SetMarkerColor(40); + } + l->AddEntry(h_findEff,vertCuts[j]->getCutLabel(),"lp"); + TString varString = vertCutFlowsTP[i]->getVarName(); + if(varString.Contains("R_T") || varString.Contains("highPt")){ + //std::cout<<"/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"<getCutLabel()<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_findEff->GetBinContent(ibin)) + ", "; + binWidths+=to_string(h_findEff->GetBinWidth(ibin)) + ", "; + binErrors+=to_string(h_findEff->GetBinError(ibin)) + ", "; + binCenters+=to_string(h_findEff->GetBinCenter(ibin)) + ", "; + } + binValues+="]"; + binWidths+="]"; + binErrors+="]"; + binCenters+="]"; + //std::cout<<"binValues: "<SetAxisRange(0, 1.1, "Y"); + h_findEff->Draw(); + } + else{ + h_findEff->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"); + } + std::cout<<"fakeEff_trackVertex"<Clear(); + for(uint j=1; jClone(); + h_fakeEff->Divide(vertexCutFlows[i][1][j],vertexCutFlows[i][1][0],1.0,1.0,"B"); + h_fakeEff->SetStats(0); + if(j!=10){ + h_fakeEff->SetLineColor(j); + h_fakeEff->SetMarkerColor(j); + } + else{ + h_fakeEff->SetLineColor(40); + h_fakeEff->SetMarkerColor(40); + } + l->AddEntry(h_fakeEff,vertCuts[j]->getCutLabel(),"lp"); + if(j==1){ + raiseMax(h_fakeEff); + h_fakeEff->Draw(); + } + else{ + h_fakeEff->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_fakeEff_trackVertex_" + vertCutFlows[i]->getVarName() + ".pdf"); + } + std::cout<<"correctVsFalse"<Clear(); + for(uint k=0; kSetStats(0); + vertexCutFlows[i][k][j]->Scale(1./vertexCutFlows[i][k][j]->Integral()); + TString varString = vertCutFlows[i]->getVarName(); + if(varString.Contains("score")){ + //std::cout<<"/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"<GetNbinsX()+1); ibin++){ + binValues+=to_string(vertexCutFlows[i][k][j]->GetBinContent(ibin)) + ", "; + } + binValues+="]"; + //std::cout<<"binValues: "<SetLineColor(k+1); + vertexCutFlows[i][k][j]->SetMarkerColor(k+1); + } + else{ + vertexCutFlows[i][k][j]->SetLineColor(40); + vertexCutFlows[i][k][j]->SetMarkerColor(40); + } + l->AddEntry(vertexCutFlows[i][k][j],vertType[k],"l"); + if(k==0){ + removeFlows(vertexCutFlows[i][k+1][j]); + vertexCutFlows[i][k+1][j]->Scale(1./vertexCutFlows[i][k+1][j]->Integral()); + raiseMax(vertexCutFlows[i][k][j],vertexCutFlows[i][k+1][j]); + vertexCutFlows[i][k][j]->Draw("HIST"); + } + else{ + vertexCutFlows[i][k][j]->Draw("HIST,SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"); + } + } + std::cout<<"trueVertex_charge_vs_numTPs"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trueVertex_charge_vs_numTPs); + h_trueVertex_charge_vs_numTPs->SetStats(0); + c.SetLogz(); + h_trueVertex_charge_vs_numTPs->Draw("COLZ"); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/h_trueVertex_charge_vs_numTPs.pdf"); + delete h_trueVertex_charge_vs_numTPs; + c.SetLogz(0); + + std::cout<<"numSelectedTrks"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numSelectedTrks); + h_numSelectedTrks->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_numSelectedTrks->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + ".pdf"); + h_numSelectedTrks->SetStats(0); + h_numSelectedTrks->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + "_noStatBox.pdf"); + delete h_numSelectedTrks; + + h_numSelectedTrks_zoomOut->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numSelectedTrks_zoomOut); + h_numSelectedTrks_zoomOut->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_numSelectedTrks_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + ".pdf"); + h_numSelectedTrks_zoomOut->SetStats(0); + h_numSelectedTrks_zoomOut->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + "_noStatBox.pdf"); + delete h_numSelectedTrks_zoomOut; + + std::cout<<"trk H_T"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_H_T); + h_trk_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_H_T->GetName() + ".pdf"); + delete h_trk_H_T; + + h_trk_oneMatch_H_T->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_oneMatch_H_T); + h_trk_oneMatch_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_oneMatch_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_oneMatch_H_T->GetName() + ".pdf"); + delete h_trk_oneMatch_H_T; + + std::cout<<"trkMET"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_MET); + h_trk_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_MET->GetName() + ".pdf"); + delete h_trk_MET; + + h_trk_oneMatch_MET->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_oneMatch_MET); + h_trk_oneMatch_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_oneMatch_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_oneMatch_MET->GetName() + ".pdf"); + delete h_trk_oneMatch_MET; + + std::cout<<"tp HT"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_tp_H_T); + h_tp_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_tp_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_tp_H_T->GetName() + ".pdf"); + delete h_tp_H_T; + std::cout<<"tp MET"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_tp_MET); + h_tp_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_tp_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_tp_MET->GetName() + ".pdf"); + delete h_tp_MET; +#if 0 + int numPart = numPart_primary_noCuts.size(); + TH1F *h_numPart_primary_noCuts = new TH1F("h_numPart_primary_noCuts","h_numPart_primary_noCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_chi2rzdofCuts = new TH1F("h_numPart_primary_chi2rzdofCuts","h_numPart_primary_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_bendchi2Cuts = new TH1F("h_numPart_primary_bendchi2Cuts","h_numPart_primary_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_chi2rphidofCuts = new TH1F("h_numPart_primary_chi2rphidofCuts","h_numPart_primary_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_nstubCuts = new TH1F("h_numPart_primary_nstubCuts","h_numPart_primary_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_ptCuts = new TH1F("h_numPart_primary_ptCuts","h_numPart_primary_ptCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_d0Cuts = new TH1F("h_numPart_primary_d0Cuts","h_numPart_primary_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_z0Cuts = new TH1F("h_numPart_primary_z0Cuts","h_numPart_primary_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); + + int binNum = 1; + for(const auto & [key, value] : numPart_primary_noCuts){ + h_numPart_primary_noCuts->SetBinContent(binNum,value); + h_numPart_primary_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_noCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_noCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_ptCuts){ + h_numPart_primary_ptCuts->SetBinContent(binNum,value); + h_numPart_primary_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_ptCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_ptCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_d0Cuts){ + h_numPart_primary_d0Cuts->SetBinContent(binNum,value); + h_numPart_primary_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_d0Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_chi2rzdofCuts){ + h_numPart_primary_chi2rzdofCuts->SetBinContent(binNum,value); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_chi2rzdofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_bendchi2Cuts){ + h_numPart_primary_bendchi2Cuts->SetBinContent(binNum,value); + h_numPart_primary_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_bendchi2Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_chi2rphidofCuts){ + h_numPart_primary_chi2rphidofCuts->SetBinContent(binNum,value); + h_numPart_primary_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_chi2rphidofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_nstubCuts){ + h_numPart_primary_nstubCuts->SetBinContent(binNum,value); + h_numPart_primary_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_nstubCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_z0Cuts){ + h_numPart_primary_z0Cuts->SetBinContent(binNum,value); + h_numPart_primary_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_z0Cuts); + h_numPart_primary_chi2rzdofCuts->SetName("partEff_pt_primary"); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); + h_numPart_primary_chi2rzdofCuts->Divide(h_numPart_primary_chi2rzdofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_chi2rzdofCuts->SetLineColor(1); + h_numPart_primary_chi2rzdofCuts->SetMarkerColor(1); + h_numPart_primary_chi2rzdofCuts->SetStats(0); + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); + h_numPart_primary_chi2rzdofCuts->Draw(); + h_numPart_primary_bendchi2Cuts->Divide(h_numPart_primary_bendchi2Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_bendchi2Cuts->SetLineColor(2); + h_numPart_primary_bendchi2Cuts->SetMarkerColor(2); + h_numPart_primary_bendchi2Cuts->SetStats(0); + h_numPart_primary_bendchi2Cuts->Draw("SAME"); + h_numPart_primary_chi2rphidofCuts->Divide(h_numPart_primary_chi2rphidofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_chi2rphidofCuts->SetLineColor(3); + h_numPart_primary_chi2rphidofCuts->SetMarkerColor(3); + h_numPart_primary_chi2rphidofCuts->SetStats(0); + h_numPart_primary_chi2rphidofCuts->Draw("SAME"); + h_numPart_primary_nstubCuts->Divide(h_numPart_primary_nstubCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_nstubCuts->SetLineColor(4); + h_numPart_primary_nstubCuts->SetMarkerColor(4); + h_numPart_primary_nstubCuts->SetStats(0); + h_numPart_primary_nstubCuts->Draw("SAME"); + h_numPart_primary_ptCuts->Divide(h_numPart_primary_ptCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_ptCuts->SetLineColor(5); + h_numPart_primary_ptCuts->SetMarkerColor(5); + h_numPart_primary_ptCuts->SetStats(0); + h_numPart_primary_ptCuts->Draw("SAME"); + h_numPart_primary_d0Cuts->Divide(h_numPart_primary_d0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_d0Cuts->SetLineColor(6); + h_numPart_primary_d0Cuts->SetMarkerColor(6); + h_numPart_primary_d0Cuts->SetStats(0); + h_numPart_primary_d0Cuts->Draw("SAME"); + h_numPart_primary_z0Cuts->Divide(h_numPart_primary_z0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_z0Cuts->SetLineColor(7); + h_numPart_primary_z0Cuts->SetMarkerColor(7); + h_numPart_primary_z0Cuts->SetStats(0); + h_numPart_primary_z0Cuts->Draw("SAME"); + mySmallText(0.4, 0.82, 1, ctxt); + l->Clear(); + l->AddEntry(h_numPart_primary_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_primary_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); + l->AddEntry(h_numPart_primary_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_primary_nstubCuts,"n_{stub} Cut","lp"); + l->AddEntry(h_numPart_primary_ptCuts,"p_{T} Cut","lp"); + l->AddEntry(h_numPart_primary_d0Cuts,"d_{0} Cut","lp"); + l->AddEntry(h_numPart_primary_z0Cuts,"z_{0} Cut","lp"); + l->Draw(); + c.SaveAs(DIR + "/h_partEffOverlay_pt_primary.pdf"); + delete h_numPart_primary_noCuts; + delete h_numPart_primary_ptCuts; + delete h_numPart_primary_d0Cuts; + delete h_numPart_primary_chi2rzdofCuts; + delete h_numPart_primary_bendchi2Cuts; + delete h_numPart_primary_chi2rphidofCuts; + delete h_numPart_primary_nstubCuts; + delete h_numPart_primary_z0Cuts; + + numPart = numPart_np_noCuts.size(); + TH1F *h_numPart_np_noCuts = new TH1F("h_numPart_np_noCuts","h_numPart_np_noCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_chi2rzdofCuts = new TH1F("h_numPart_np_chi2rzdofCuts","h_numPart_np_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_bendchi2Cuts = new TH1F("h_numPart_np_bendchi2Cuts","h_numPart_np_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_chi2rphidofCuts = new TH1F("h_numPart_np_chi2rphidofCuts","h_numPart_np_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_nstubCuts = new TH1F("h_numPart_np_nstubCuts","h_numPart_np_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_ptCuts = new TH1F("h_numPart_np_ptCuts","h_numPart_np_ptCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_d0Cuts = new TH1F("h_numPart_np_d0Cuts","h_numPart_np_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_z0Cuts = new TH1F("h_numPart_np_z0Cuts","h_numPart_np_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); + + binNum = 1; + for(const auto & [key, value] : numPart_np_noCuts){ + h_numPart_np_noCuts->SetBinContent(binNum,value); + h_numPart_np_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_noCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_noCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_ptCuts){ + h_numPart_np_ptCuts->SetBinContent(binNum,value); + h_numPart_np_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_ptCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_ptCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_d0Cuts){ + h_numPart_np_d0Cuts->SetBinContent(binNum,value); + h_numPart_np_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_d0Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_chi2rzdofCuts){ + h_numPart_np_chi2rzdofCuts->SetBinContent(binNum,value); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_chi2rzdofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_bendchi2Cuts){ + h_numPart_np_bendchi2Cuts->SetBinContent(binNum,value); + h_numPart_np_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_bendchi2Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_chi2rphidofCuts){ + h_numPart_np_chi2rphidofCuts->SetBinContent(binNum,value); + h_numPart_np_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_chi2rphidofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_nstubCuts){ + h_numPart_np_nstubCuts->SetBinContent(binNum,value); + h_numPart_np_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_nstubCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_z0Cuts){ + h_numPart_np_z0Cuts->SetBinContent(binNum,value); + h_numPart_np_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_z0Cuts); + h_numPart_np_chi2rzdofCuts->SetName("partEff_pt_np"); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); + h_numPart_np_chi2rzdofCuts->Divide(h_numPart_np_chi2rzdofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_chi2rzdofCuts->SetLineColor(1); + h_numPart_np_chi2rzdofCuts->SetMarkerColor(1); + h_numPart_np_chi2rzdofCuts->SetStats(0); + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); + h_numPart_np_chi2rzdofCuts->Draw(); + h_numPart_np_bendchi2Cuts->Divide(h_numPart_np_bendchi2Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_bendchi2Cuts->SetLineColor(2); + h_numPart_np_bendchi2Cuts->SetMarkerColor(2); + h_numPart_np_bendchi2Cuts->SetStats(0); + h_numPart_np_bendchi2Cuts->Draw("SAME"); + h_numPart_np_chi2rphidofCuts->Divide(h_numPart_np_chi2rphidofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_chi2rphidofCuts->SetLineColor(3); + h_numPart_np_chi2rphidofCuts->SetMarkerColor(3); + h_numPart_np_chi2rphidofCuts->SetStats(0); + h_numPart_np_chi2rphidofCuts->Draw("SAME"); + h_numPart_np_nstubCuts->Divide(h_numPart_np_nstubCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_nstubCuts->SetLineColor(4); + h_numPart_np_nstubCuts->SetMarkerColor(4); + h_numPart_np_nstubCuts->SetStats(0); + h_numPart_np_nstubCuts->Draw("SAME"); + h_numPart_np_ptCuts->Divide(h_numPart_np_ptCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_ptCuts->SetLineColor(5); + h_numPart_np_ptCuts->SetMarkerColor(5); + h_numPart_np_ptCuts->SetStats(0); + h_numPart_np_ptCuts->Draw("SAME"); + h_numPart_np_d0Cuts->Divide(h_numPart_np_d0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_d0Cuts->SetLineColor(6); + h_numPart_np_d0Cuts->SetMarkerColor(6); + h_numPart_np_d0Cuts->SetStats(0); + h_numPart_np_d0Cuts->Draw("SAME"); + h_numPart_np_z0Cuts->Divide(h_numPart_np_z0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_z0Cuts->SetLineColor(7); + h_numPart_np_z0Cuts->SetMarkerColor(7); + h_numPart_np_z0Cuts->SetStats(0); + h_numPart_np_z0Cuts->Draw("SAME"); + mySmallText(0.4, 0.82, 1, ctxt); + l->Clear(); + l->AddEntry(h_numPart_np_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_np_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); + l->AddEntry(h_numPart_np_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_np_nstubCuts,"n_{stub} Cut","lp"); + l->AddEntry(h_numPart_np_ptCuts,"p_{T} Cut","lp"); + l->AddEntry(h_numPart_np_d0Cuts,"d_{0} Cut","lp"); + l->AddEntry(h_numPart_np_z0Cuts,"z_{0} Cut","lp"); + l->Draw(); + c.SaveAs(DIR + "/h_partEffOverlay_pt_np.pdf"); + delete h_numPart_np_noCuts; + delete h_numPart_np_ptCuts; + delete h_numPart_np_d0Cuts; + delete h_numPart_np_chi2rzdofCuts; + delete h_numPart_np_bendchi2Cuts; + delete h_numPart_np_chi2rphidofCuts; + delete h_numPart_np_nstubCuts; + delete h_numPart_np_z0Cuts; +#endif + h_trueVertex_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trueVertex_numAllCuts); + h_trueVertex_numAllCuts->SetStats(0); + h_trueVertex_numAllCuts->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trueVertex_numAllCuts->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trueVertex_numAllCuts->GetName() + ".pdf"); + delete h_trueVertex_numAllCuts; + + h_trackVertexBranch_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trackVertexBranch_numAllCuts); + c.SetLogy(); + h_trackVertexBranch_numAllCuts->SetStats(0); + h_trackVertexBranch_numAllCuts->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trackVertexBranch_numAllCuts->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trackVertexBranch_numAllCuts->GetName() + ".pdf"); + delete h_trackVertexBranch_numAllCuts; + c.SetLogy(0); + std::cout<<"triggerEff"<GetNbinsX()+1); j++){ + numTriggers += vertexNumVertices[i]->GetBinContent(j); + } + std::cout<<"i cut: "<SetBinContent(i,numTriggers/nevt); + h_triggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); + } + raiseMax(h_triggerEff); + h_triggerEff->SetStats(0); + h_triggerEff->Draw("HIST, TEXT"); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_triggerEff->GetName() + ".pdf"); + delete h_triggerEff; + for(uint i=0; iFit("fit","R"); + h_res_tp_trk_x->SetStats(0); + h_res_tp_trk_x->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_x->Write("", TObject::kOverwrite); + + std::cout<<"h_res_tp_trk_x"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_x->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_x->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_x->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + //std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_x; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_x_zoomOut); + h_res_tp_trk_x_zoomOut->Fit("fit","R"); + h_res_tp_trk_x_zoomOut->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_x_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_x_zoomOut->GetName() + ".pdf"); + delete h_res_tp_trk_x_zoomOut; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_y); + h_res_tp_trk_y->Fit("fit","R"); + h_res_tp_trk_y->SetStats(0); + h_res_tp_trk_y->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_y->Write("", TObject::kOverwrite); + std::cout<<"h_res_tp_trk_y"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_y->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_y->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_y->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + //std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_y; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_y_zoomOut); + h_res_tp_trk_y_zoomOut->Fit("fit","R"); + h_res_tp_trk_y_zoomOut->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_y_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_y_zoomOut->GetName() + ".pdf"); + delete h_res_tp_trk_y_zoomOut; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_r); + h_res_tp_trk_r->Fit("fit"); + h_res_tp_trk_r->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_r->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_r->GetName() + ".pdf"); + delete h_res_tp_trk_r; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_phi); + h_res_tp_trk_phi->Fit("fit"); + h_res_tp_trk_phi->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_phi->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_phi->GetName() + ".pdf"); + delete h_res_tp_trk_phi; + delete fit; + + fit = new TF1("fit", "gaus", -10, 10); + removeFlows(h_res_tp_trk_z); + h_res_tp_trk_z->Fit("fit"); + h_res_tp_trk_z->SetStats(0); + h_res_tp_trk_z->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_z->Write("", TObject::kOverwrite); + std::cout<<"h_res_tp_trk_z"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_z->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_z->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_z->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + //std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_z; + delete fit; + + //Geometric plot of circle projections and vertex locations + /*Double_t x_min=0; + Double_t x_max=0; + Double_t y_min=0; + Double_t y_max=0; + Double_t x_values[6] = {geomTrackVertex.a.x0-geomTrackVertex.a.rho,geomTrackVertex.a.x0+geomTrackVertex.a.rho,geomTrackVertex.b.x0-geomTrackVertex.b.rho,geomTrackVertex.b.x0+geomTrackVertex.b.rho,geomTrackVertex.x_dv,geomTrueVertex.x_dv}; + Double_t y_values[6] = {geomTrackVertex.a.y0-geomTrackVertex.a.rho,geomTrackVertex.a.y0+geomTrackVertex.a.rho,geomTrackVertex.b.y0-geomTrackVertex.b.rho,geomTrackVertex.b.y0+geomTrackVertex.b.rho,geomTrackVertex.y_dv,geomTrueVertex.y_dv}; + for(uint i=0;i<6;i++){ + if(x_values[i]x_max) x_max = x_values[i]; + if(y_values[i]y_max) y_max = y_values[i]; + } + x_min*=1.1; + x_max*=1.1; + y_min*=1.1; + y_max*=1.1; + c.DrawFrame(x_min,y_min,x_max,y_max); + float trk1_POCA_x = geomTrackVertex.a.d0*sin(geomTrackVertex.a.phi); + float trk1_POCA_y = -1*geomTrackVertex.a.d0*cos(geomTrackVertex.a.phi); + float trk2_POCA_x = geomTrackVertex.b.d0*sin(geomTrackVertex.b.phi); + float trk2_POCA_y = -1*geomTrackVertex.b.d0*cos(geomTrackVertex.b.phi); + TEllipse *circleTrk1 = new TEllipse(geomTrackVertex.a.x0,geomTrackVertex.a.y0,geomTrackVertex.a.rho,geomTrackVertex.a.rho); + circleTrk1->SetLineColor(kGreen); + circleTrk1->SetFillStyle(0); + TEllipse *circleTrk2 = new TEllipse(geomTrackVertex.b.x0,geomTrackVertex.b.y0,geomTrackVertex.b.rho,geomTrackVertex.b.rho); + circleTrk2->SetLineColor(kBlack); + circleTrk2->SetFillStyle(0); + auto trackTraj1 = new TF1("trackTraj1","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); + trackTraj1->SetParameters(geomTrackVertex.a.phi,trk1_POCA_x,trk1_POCA_y); + trackTraj1->SetLineColor(kGreen); + auto trackTraj2 = new TF1("trackTraj2","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); + trackTraj2->SetParameters(geomTrackVertex.b.phi,trk2_POCA_x,trk2_POCA_y); + trackTraj2->SetLineColor(kBlack); + TMarker m1(geomTrackVertex.x_dv,geomTrackVertex.y_dv,8); + TMarker m2(geomTrueVertex.x_dv,geomTrueVertex.y_dv,8); + TMarker m3(trk1_POCA_x,trk1_POCA_y,5); + TMarker m4(trk2_POCA_x,trk2_POCA_y,5); + //std::cout<<"trk1 POCA: "<Draw("SAME"); + circleTrk2->Draw("SAME"); + trackTraj1->Draw("SAME"); + trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeom.pdf"); + c.SaveAs(DIR + "/h_circleFitGeom.pdf"); + x_min = geomTrackVertex.x_dv; + x_max = geomTrueVertex.x_dv; + y_min = geomTrackVertex.y_dv; + y_max = geomTrueVertex.y_dv; + if(geomTrueVertex.x_dvDraw("SAME"); + circleTrk2->Draw("SAME"); + //trackTraj1->Draw("SAME"); + //trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); + c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); + x_min=geomTrackVertex.x_dv; + x_max=geomTrackVertex.x_dv; + y_min=geomTrackVertex.y_dv; + y_max=geomTrackVertex.y_dv; + Double_t x_values_POCA[4] = {geomTrackVertex.x_dv,geomTrueVertex.x_dv,trk1_POCA_x,trk2_POCA_x}; + Double_t y_values_POCA[4] = {geomTrackVertex.y_dv,geomTrueVertex.y_dv,trk1_POCA_y,trk2_POCA_y}; + for(uint i=0;i<4;i++){ + if(x_values_POCA[i]x_max) x_max = x_values_POCA[i]; + if(y_values_POCA[i]y_max) y_max = y_values_POCA[i]; + } + x_min-=1; + x_max+=1; + y_min-=1; + y_max+=1; + c.DrawFrame(x_min,y_min,x_max,y_max); + circleTrk1->Draw("SAME"); + circleTrk2->Draw("SAME"); + trackTraj1->Draw("SAME"); + trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); + c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); + fout->Close()*/; + + for(uint i=0; ix0; // Centers of the circles + float y1 = a->y0; // + float x2 = b->x0; // + float y2 = b->y0; // + float R1 = a->rho; // Radii of the circles + float R2 = b->rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if((R>=(R1-R2)) && (R<=(R1+R2))){ + return (0); + } + else if(R==0){ + return (-99999.0); + } + else{ + + return(R-R1-R2); + } +} + +Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if((R>=(R1-R2)) && (R<=(R1+R2))){ + return (0); + } + else if(R==0){ + return (-99999.0); + } + else{ + + return(R-R1-R2); + } +} + +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if(R==0) return -1; + float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); + float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; + float co2 = 0; + if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); + float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); + float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); + float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); + float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); + float ix1_z1 = a.z(ix1_x,ix1_y); + float ix1_z2 = b.z(ix1_x,ix1_y); + float ix1_delz = fabs(ix1_z1-ix1_z2); + float ix2_z1 = a.z(ix2_x,ix2_y); + float ix2_z2 = b.z(ix2_x,ix2_y); + float ix2_delz = fabs(ix2_z1-ix2_z2); + //std::cout<<"R: "<0) ? true : false; + bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; + bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; + bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; + //std::cout<<"ix1 inTraj: "<SetFrameBorderMode(0); + gStyle->SetFrameFillColor(0); + gStyle->SetCanvasBorderMode(0); + gStyle->SetCanvasColor(0); + gStyle->SetPadBorderMode(0); + gStyle->SetPadColor(0); + gStyle->SetStatColor(0); + gStyle->SetHistLineColor(1); + + gStyle->SetPalette(1); + + // set the paper & margin sizes + gStyle->SetPaperSize(20, 26); + gStyle->SetPadTopMargin(0.05); + gStyle->SetPadRightMargin(0.19); + gStyle->SetPadBottomMargin(0.16); + gStyle->SetPadLeftMargin(0.12); + + // set title offsets (for axis label) + gStyle->SetTitleXOffset(1.4); + gStyle->SetTitleYOffset(1.0); + + // use large fonts + gStyle->SetTextFont(42); + gStyle->SetTextSize(0.05); + gStyle->SetLabelFont(42, "x"); + gStyle->SetTitleFont(42, "x"); + gStyle->SetLabelFont(42, "y"); + gStyle->SetTitleFont(42, "y"); + gStyle->SetLabelFont(42, "z"); + gStyle->SetTitleFont(42, "z"); + gStyle->SetLabelSize(0.05, "x"); + gStyle->SetTitleSize(0.05, "x"); + gStyle->SetLabelSize(0.05, "y"); + gStyle->SetTitleSize(0.05, "y"); + gStyle->SetLabelSize(0.05, "z"); + gStyle->SetTitleSize(0.05, "z"); + + // use bold lines and markers + gStyle->SetMarkerStyle(20); + gStyle->SetMarkerSize(1.2); + gStyle->SetHistLineWidth(2.); + gStyle->SetLineStyleString(2, "[12 12]"); + + // get rid of error bar caps + gStyle->SetEndErrorSize(0.); + + // do not display any of the standard histogram decorations + gStyle->SetOptTitle(0); + //gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + // put tick marks on top and RHS of plots + gStyle->SetPadTickX(1); + gStyle->SetPadTickY(1); +} + +void mySmallText(Double_t x, Double_t y, Color_t color, char *text) +{ + Double_t tsize = 0.044; + TLatex l; + l.SetTextSize(tsize); + l.SetNDC(); + l.SetTextColor(color); + l.DrawLatex(x, y, text); +} + +void removeFlows(TH1F* h) +{ + int nbins = h->GetNbinsX(); + double underflow = h->GetBinContent(0); + double overflow = h->GetBinContent(nbins+1); + h->AddBinContent(1,underflow); + h->AddBinContent(nbins,overflow); + h->SetBinContent(0,0); + h->SetBinContent(nbins+1,0); +} + +void removeFlows(TH2F* h) +{ +} diff --git a/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx b/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx new file mode 100644 index 0000000000000000000000000000000000000000..5824542b67b4ca0e33dfa0778bb30dd547e86f41 GIT binary patch literal 3089729 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≺z=qKfJ4UgJa+)4wRdlfgxy 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

XQ(V5<9|5zRdxKpbO_GXcCa^jRiSM!pa+t3x5y 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

>_JKldXDgyd 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
+gPvR9#&h>D3bIK)+t5Kns*M)2A&4CqUCExAP^ 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%0A~ zOxWkm7*Lo#A@Z}_&N)~I6zwm3x-_0cz*(Tl6V{|07HmL0qg?@?4ZU{6Fe^wXd+~mzezu zKk~elBHaJS*WdT)6Q%0NZyYD~GtWfkX*@m%-%H7|s)jqR(^GYwW7>wL?T)CyVrjkVieY>DL*!b4#AelWQ0Q)qST6y_E=d$Rf{y0>u*rEaHlUja#H0W*k9PmxxkwA4^8lxzcTEkz> zs^f~dMBCI@pMwJ3aFfHt9*hN#M1$t|c=Vo%X3SvcS@lK_dLJ~&Jd>9+RBe3dU?M)<&VA8)V6d|>da#G+96O@3--yoU!Ok<(OdRYyRi@!V zBRXS8bjFPEZ@Nb`d#l+u`iG6^9H8DIBRU7i$b@K)8PPdXy`$q2f60i>38fG0A&Y(i zdweZI_YYXsj@~QE@r#&?=Hfer-S4vY``+e)CBh1s)KTeM8ZaT~H{g6rs5H$Egrz(6Oe*rj9zIewc- zHaDw}_&vqpFw^1=1amBL9viY16&jY1Lb*>hzC=@(>1B4?rhB_(Fk&3@S~cl9sjkau zGiKnn8o7rukhQ)`@CLY@V%1LJ33^|xM*-D z?HxVjvfkk&$L38)ml9%JgQ&$wX7v#5YEY0T)}R5tiS6tR{K^z+;xqO__|sMOEXNeI^>*{FrYE*WP2Ggl}hl3evdOq>Bv~+i%)*2^`RS9Amkx z9uis&K>^cUly^#8BbPONYL?VNC5-{Bx#!esiv$j6QJ+Z{s>>7mS=1UKs*v@M_<61u zKhLi!U#l8Bfvnmjko9Gr6}l>JOXKeYJ$01m>wWe2el7NbU3{fl=gOneY9Z)um^^oN zKajN?C;CZ`6>nK@JQe_S@NlZ-DAMpN;H!4}FTeI?E^pmjFiw@qe(T#%dQ#u%Gdp6F z?S)nhhNv}1`A7x6-~l&*viclpb_7hPy3nG=tna{-YEX0{D|mXg?w=W(U@_3@EA1(} zBrYyjgMyUmjtiV$6;n-Z2VG^kt&V6qHWz3kuoUeIl=azT8cAsFvliSFJM!LmRvohp zl6SGy`VIhFv30Mewlk*28}3=5)ky24KQLJDjHZ)j$3tUaaz-0YvZw5r7__=GG5SVE zw3?G@yy0op>Uc&h0Z?bQ%>@^?-DTGnNBx|#FQ}UO&NVS~v-1M4j|=csA9!i|w0U3% zbOcA&G>;v-yKMSk6I<`s=mRnJ#1KKzSWJqJ1FDV+km%KRaM1(FiLLzo+NaH*Xfq?I zn)=R`y!9wPU2W&oc&G50>9GeH%TRor{->!~J2tB9RAfDAP&6LD6vzmA;;Fw@ z_biHyZ`!fvym>pxz*V#!?RaN2D{Iw+)iJQi@mHursqk!wVIs3odUWF>(Ez5vD(aBN zo{na8JN55G=ggqr0ISw__!b86b>p!BSZy(sx-+R=7OF1DoZpwCcPhbla&?$}?(A%cT)nrWBR zc2IAQPj?xlJ*H56Qr*FsrnNZAPK_Q8wx+ube;C?L*Ijl|tU~WeZAW*5r=LbvycyZ@ zmoBH-l~KysDb+QUyBQ`q#le?j@m|3Ouk?o~<<`6To03sGd+r_Bzzh2?0cDCCmb*+J zp~S?C?Kf*{?Cx2kyu{JJb6JYP>4Z$(`encVmtPNYqWO;f_l`X3Q6esnZb%>7S@i^fRj#oStI!0J|EGvT zWMPd%N6&$Tfg$)mHZnLo_O^YRF~jHsx*hR^7N8zFf*M$V*CvPN$i4 z=wT$4Mv!-E2<|v3dME)J2pb&I%Qm?bQWp$#dQEb(29&vpMAt3)hfE^GBSqALGLDk_ zroM~~X$!;bQIwZZne%_{Ene)`q0sj=%!KWwS3~$EzK(wYY2Q=pu)o`Tyw9&4UU%hZ zHxO7K@ne4N`a^z7T-`r2Rtg$_*7IR^`J(&7&=da4y>IyS2dzU%f5hldJX3P#4OLi1 z4t3(>9z&$hV~nakk(Q1C!s~Me@E#EtRt&)8#NYHNPKilS_2jMQB%PymX?+Rx;3AEr zj(`~`;TJ_g?~G>9wZ5cBWKm3wCUwBkyZ9BCv|WnJ+UfImw~sZrt0N$|+JOmo8C5a5 zT)l%1DE8ko8Z-mz2%xh@Z;9rPrbhNh6|E7e;amzY}aQ4hr+j4;|j|A1EDc2m2& z5#XHgyE!%h$wA&;6=A=&Lj;(E>mS}soU{qXi5kcGd}6&P&KxyEp)XFYA{whPV6X-NUBmCX zxCC!O-n74@ituPVW#cH*|FKpNo{js)1e{@c*)w{ev9?Ds0D0{aLD7n_z+lZ1SEmMm zo$P2jY&p74_{H)99BUxq7r4bbllGTX5wN@f#9EZ-d$W_|uQc+ek^mB;WW}m^(JXWk zPV@%dN%e-BJ&(qqfk#|x6V2fEnm&)4L^CT1VvHWzf(AAWbnb0u&p&8AL9=KKYQ|yA zA0na-?O;?;^0Cp3cQ9SLM6wcRxJ9%}mf~DWafabUfIPn^3Z*GCGW7}W_RI*8G>>_8G>NL!;v6;A_ICqgjwlMONg7=M|U7QZjCLm zFX>aSXb^UYHzH!a{pU&9G23euv|SBWB*e(Waq(z0P<4cdW}k@$IWg7;?`mwXb|uaO zdSkE;35)~}7nyla8`_ILrB+;-8aKeuPpwhdr^ndYZNfg+ML4@60|KwlG`nrFze?lR zSZrt>0ip)LN1!a-LDJ&p7=pHICgg^CDKge>H3a_Q=RklVu=BzwELVmw##D4 zEHy|FEl$23=A;xEX;ZpEE07u~FfiTghGnHNUcA|2dz|;BVu*`JVVrV;AG}@j_eJwa zIYLik562jCLsz4V13k@3Jimd7hzNuQW_ztl!tTN;Fm(8QGWH48Vn4K1=>*+BDK{1CJe6#oar_P7^4n8df2zK>~ zNZ`|N-F3C@?yFKL<#R4T(2Lw(_6pGYe?aSYt*q}e`9m)#zSduY>Ux7;`}McH4vpMc zUYe#B;2N5b7a~3$7_JV64Nw$VhRy@v_yVB(ngGDnbd4=1#Q@HPE^^oOJ@ESc8a+5n zkpt2-cp`&_eapnA-Z{(uu4ZG2!e4%t?g#O}ia-j21ywfb6*kI@<1ib4j+ z_36)wW@a>Vb`ZJm0{7*O^U!C<5?DH*j70?}K^MB6nSEWXz&slrK$>_#tS)J50lxK? zL)1`yu$i3={wH#$JK!l3{>SVThz*{Mou0*J6+Ku!Mi)))5e+&%1_uCjQmK+W!EV-r zVjBF`Vvs!9zOIgMhasP1JIbl0V2ak95;xAM`7@Azjq4vI9jNY-eL(xtG7H7OviHl2VOdIW7cx4EDf)HZeyBhcg;u}Qvn9Ox1HL*<`ORO%9xh*LSVL5sE*V`F@(aWc{I#2D+ELQai=#Xh=jrpYe$z!(gS)ZW{FBprB& z83d%%O^!s#LV~x%5D*9SEw>dUnJqq4EneM@t`3UZOKhRE55;n4HN$h`UCN^)HG6(^@cacICBU|CnEoh1RF6ycWC0ijqhe?3U*{b^;?~sd?@4xLOs>c%JDd zJlX&PGH#6N$G6860w@|D;kkMrSU>ERuU}j`MFNxq|Bfitp0&*Ah+t`-IzMfQV?R&Q zRtb*SJ^)^TF^MfOs_g*A^P`6;TLTc;E82&W%+*v{LI6CV4^#yio6MFVo`lCtZnphn z*_LZaB|1KCG7Cl~JYtU4$3RX%bJc?htAWQp(>~m3TpsRZgw!IaJA`5Ua1`U6vE&xY z7w0Z%!SlUWuZ4Ff=$`=X<(^ZhdpWZ1wH_(Q8NbO_r8eG&i4l3XV?c&E^=w$@gXv%U zkk@S~_3WQL`y;#7KI?v*aQ{X6U(V~TN4)>qMW^)J{DPlf`JUhKI+S&HpLTK7i|kGV z&64s>(4!1T#ynp!&4G0jdqdt6)6O-|1J6zg2sk|&nBrN{1Ksq=(AWVs^+1HomrY9`dGXv6Gn__Kx2F= zc%Mu2*ty2ns}Wpxm&=u&P@>{d;j!}SuJO?vTw_4^t2N7`9u@P)*NhPdyHAeMQ=1_m zr^MLlYG8%h9Dsu3fp$EUS#zp_+8k5B%VXi}Xwc_*D5DQ@LH>Z=g>ij-G`F;Mb&%}N zdS0F06cz`w1IpIa;?MWi>ZlI1(<*??>1GeB-4uHRan7&PJj4x8+Orzz<9s0HK6-+I zH!X$g9T>esqM2fI?oloQtpxy^nu#^IZgLE47vUr7078VBb&0iei~}yrQ!C?PSPtzS zl+(MUx_(XL+>D!>8Phk#GLTKH!^Z2lK3&4`R%Zyvs#xH%JhdVZD)@s<_nOQ30Cxb| zqh-B)Y}yQXgZrt6avql5RMs_yU(J*+1Ku4M2eU(WM`PClymC$V8X8*PLHAAbE^2zZ z*D&=A$aRK6ccz2vwA*>H>7~7g8K-v*Yj2u&=iBGvHF3aM1E}MdJ1bZh4#)$MuZ%gge~p32 z*F+Bx*T7BHgu0|U-3TVNC(cY0(wVT#1JdhtTc<6OX#&G2;Sa>7@J;OvA}7@x<#N?e z$MCb!j1jtw(+hvnhMR5w-b6l49~!F;k7k9j^DNs;C*^rY6JyHNbD){i;_~EZV422c zR~6KL=O!#8)@mXWH1m>Jo~R7u!a9Rx&MVtr9i8hMiAX?oA1p6#!t!0^=2hyT*=Nx6 zI`u$meIlMg$Phg3I7in#+SvBGfyxlh$~B)E{Hr@K-LG#*lG3AFLulV5FF-H z+;H)y>8j#jvxd;Z?RA?Nmmo405lu{w28Wwr8AGZ@0pzpP+fvX2fSgXZt_hXDo^An< zdrhct1D@m~hXaW_*NV~4@!OQxhmv;^YJanskl3+4(AJspyL(O!c$e>ZuV251R{ueI zAMJdY*WEnUj69RON}B$^cxEVV{~Mj&Q%FlS*6;d`U)mPhK84g_4P&~&(U?;8OLW~> zDE}IO2_Mi7jz-TnGd6r{5$qUJ(lmvZ$TFDl^m?w-$+6{WYR-thffmR;Z<~21^Ib)# z7lC2NdV4f%;1%dE385}`rkPvYxuB~J#^A7KF_5Z(B4ZFx50C|T?{5d5!I6_0Cj_J7 zn;EAYYfQC;b|Lrx7ubXyYhPek%|U7aUPJIYB8a;?TXQlI@;`htur^qnymh&xY5+uM$gUl1o|=Uk_>wZV;pjp z%osil_QH=ftbc&$Nka!m!~vqUf)Q*>%x?wpR8b!sz%9=ea1l zz4BrsaB$+yaTB4w0yZCcsF6=}cI5#2zp7ZKspomYpYi%a_mu6Sam97Ls%rSJ^vG*? z{ag1+3|Bb;VRJY`kf6`2&N)a&p3+GUau#{KQkflz85rm5z@Xn^}ZATtp>(M1^T z)0tco=yco*TzN$GD8@IQt!Js zn%|Gr5-`)AJR&^ir@6K+s5REHw64rMI-XN4+B3Q!(vjO)`u_N0+SKj5i|gjA*9T;1 z{2HI_qc2hH;h+ff7zD)5kKRRUl1t7qSJh4S$J}Ix&VqKD$MyAmx*KDQ+nYFcTa1Bi ziDN5b0JQ4j7(5dE)7xx_=8@i%6#DFtMrS?SShV`Mf2aP<~J|RsU8uNWz5j%nV%9vZKj!(qaZM7yE zu6eCrG0E*sy^vFQx!FB}K<32J)TRa(yFb7>coSeMplh-$rVdeD&d;Jso zf9jFf*-6#Sn^3OAOPP5&KRbEFmhHMa(C@8YqrJb2qW`b3)m@3~dcQ|M=+_dtD>uGS z|C1gqxqZQ2o34D76Z@jq$i`bRztmd)j%TonKumw-oavwB+Mm+~>bIh>psM>e(!n1U7e#4cI1wuox9`F^8xXk2qC;|)O z_nHuvY|mK&5L9FVR5l6hns`5~2lqw~3$Q-GqYl8bWf%GtV^2DISF>qBfQRmB3)C1v zS`t`rY6$*%NW0YfBwGxit{8f?<#EwWj0Ul>CDdPSe-q#i;GZ3<0sQl#2ffv1S6DLC zQoL8X!k8xJ#r!SXDuwCVKLGx%vHp%|R_svnCRWA3dYg3biHkHLz+2N<^-zq1)Lqnv zxIU#}EDQQP`<5)fChVhM1-czDWFg)Y?4deBOA_^uudaOU3Acr_o~Ze0u}{Hv=<1BN zEB_+b73-qDcBp1u3?X*(UuWpQs-{hJ?YcmJ+yRAE2jI8Es`{#6vXe0D59btyx8pf_ zu7iaFVH7A72%|!~fA0HV?AOAAG+KVs>6ndk_hk-7^D|hkrzrr6?X!pIo z`hZ_|<@Lkv30?ldy`d21%Rc#7$yxeM{*#|Cxz|2b>ANsXt@yrQf9+bkKc%nKtb#At zf6QBd=QVp5JEd;hE1o9sMpv-RN-LK-tOxc8=Y?VdHd?{6;Svqehd2T=!80`i%&0lF zdXAhed{)*_q;HaPmrMd2G+0 z-C4@d`n1rdjS@=vRIEt_d92B$K2y5GVbtp55F;gE|G0p24=59$>p99`A-qX2Pp!9w z(s4qQ%RRVpaP7bp@e)BKA*#J`o){|AMwyJHV;L z>MtMAfqN}lxvYFDsNqJR-~gpuQwG-$6kd6M3~d@ve!;_Kp0r`eWxN%|bjLa;;Mo`% zGw6xE20Ii?(vmE-OV%)TdNn{!K;{l-somfoU&b;TF$RCgB1w%u_VN;Mppv)B3MfHT z+Ujr2OUoHoukrfV`c-u&h9Nn$>QlBtlmjB(>9Jm^p}G^w>DB6?rN)1>GRk_-V+CS? z@!w)~kWKYl-bXUyd+zHFl&wU(UYTwrA zfW4I2!t(ue?Kq;n6P=BS(sECjyvFNsF?rNJOkP~a$X4U)KL8i!rC!1#g zJrSG1PLr693J8RV_Q{R?(;Q*Lg#JIVK|n+gx1&qf$PP7NuwxBir@BC5OfC~)hd_A5 zI!lc+;tG7e-Zk_frbwt192dsqWi`gs%#^^sty&|Xt$Ksy_I6>2KzisJN~-2gAJM9w ztq~-VH_Q1ntr6?v2B031@K`af>dr@F27!T1LIc<-)a>a1Dr^$Ez&fD@rxr3tJ)#cO zAVAb04Qz`bT=j5`AVoB6sexmwYmCt7NtsTTjxB`7jAlNWmR#gQ69|knM_ds5xdMge zfsK(Jjg8<(T72`Q>lZqb>jj=^2k!?T|GYyDRPFb*Ejw=@tHK4|>iggBS4DBX$GuO2 zrn`1N=>CWOTB1`w;j1m3eepTZ{u=E3KUjB*zbZ}-3|#G=uJ%(~d4J+NO0Mp&d<7qe zhGP;K6=1T5;Z=VDfL2YDko&tk1xH9Z-vTHHU@NvdY5-d9tXuMZO zU_aG^x_&qYk-(Y*NzwLA$(^vPv9UGr%JHY*>AqVINNJ5SlSYrG2CdUTO^bzu9&5!|5^8$ya8e7xQ3#h`&D<#)vw>nH~j>&ma^4YO} zSLFw3we-gAiBH8+Y?gR>P253ebEAV)|yE=b(>X%p5!W&Uax#*~Pt~ z2!V)h)HIA+Af+0j6Gld)bH z14&pRM4-hJE_Vi)&a0;i^}#9>^~P;hg}&D~3Z$B{I{0578<~C zH^o32I*u@KjxEvuS~?~$W3P5X>mfUI4s2UGV6Bb`(0$V#=YL%LRG|~=sjSmtV`%GX z?J8-IRq$53*wA6e8no5sQxNsim~#~xEt+ow?7T9%bUQ<2mk$w(wYq(#*;&p@#h%e( ztl>q|yE`EONKMB2v_1yl8dES&*y-Ljs=`}i5F4w*0d&>1a~#%NfyM$KG(EnWQYXg! zY3P8Wp6svz?Sdyw4S)(ek2e8ojjG@+02^b!Z&+RHf-{g+Kwj^#BAV4|09XxeG@{-Y z7eKGZ9#r#i^eZm~O#2KS39FT`0;T)a8fk_+@DR)lAnmhsB(5G8U*yz2cOiUqbN zWyOi6(TIyB3=0aY>s~ttp^rWh2v-_jvny%^n%S}Vs&+o>^;s19x|rXV|LpGVsR{jP z(|;D$4t-EUed0}aB`o5(ok0dh@>9-`8wQ=$qL({_;)U*a!zD_=v0)Uz)OkEAJ*?F_ zzb7^?Ij}lMPKRzp!Lfe4|Df0Nc!F480OdbfOO9!uE!8jhyzc^T|9^Fg94LLdO%hY= zK+`V(>Z<|kPmUgTZw;JViW=wwJB1ps{(|U1rZoVn&lw&iZy@j*xyqog-hvna< zLt}7hH8)4I2enpg)CS-&a@-N4Kz)XOnLV3FuZ<~qdJ^fxdl>XXG3BE(kUI(ZPKS6# zQ#MeTd5Ch=JWHrPD86jgCN>=-?1ThDQL}cD+lp%#5K~#wx<$go^WJ^q`1LlZ{%W4tA)>fUOf>-U9IJ;ky=~A>fJqa; zmKvxc+B;0NX!sgDs-33={!VR1qhd?dx;_#L>x49?ZhuZJYLd_!3`Cdr7FDr(txvaK zWPH=RV1ZSGz4YejIX4S9x~*K=681e%W)~L)FA1T~^?lFt>nkXE^lcF5 zYhK%R&wSU{`^j(fYa&H|;!8nIi568lleX{T3`+1`^$etHMLevO|45*z+HN}ak&Qgf zD53xbI}m zH5yu|7eMCvn7=8S#cIHqTjMf;2AqHqS=j|&x>m&ErE#K?-T}NxsDT1$0N#UTG2Whs z{c!v6!Ish1c{M&Zo}#@SO{#%Jnm`^6fHI~(JT9>o7&)P@C^&MxUA+mAIXUh)EgD!0 zD02Sx6a}B>kfGUe-`r@fuJ!(GFkGb38?F87W8NH#%zbWmArOsPudML0QfpSnLNg~V z012QiK+7Wzeh0QR`fxPBO+}i~7{JmC6;c!yiTf^x*)&uhp1Qiu7YzWO+?Lz%%$1AdI9>&rfRTbq2zH}sYQ zEkWcz$Z($@c@2;MuQ8kb+!w#{YdI=lbbQ~TC0$s6glPW*+SxEX*pqGgI07Sw<@{e16lpx&0xL^;1KH*|3M(Qn% z8&}w2duLoMj|O={zJ>`0SaDAb-WLscurYcMMT2_uc#R@QQPSSe*4jXTga$%Ig8pug zPSl4AOI(NoHHYULW7o818Dk9g1F<_Xs%NOZ_z!W9jRwGEh<XiwtV}v96Ok%ZnGyAF9!B6VtzD)he6G> zfv62MH7>)gkXEqjTexsQk?J;rog3@YZ5yU8GRBeWdcho)MzFcD&e`GDX0#7s12KAo znw#{pqchK;=!07hBX=y%7@vx^Iqn@T zix@1peKZ>JJ>7U8s)1@z-_hEfa(1#0MB`L#P7KhRNzqIj)KO^~;DiY^oUhG^0qS9i zRfkgp)W6eboyFk*92<~_1zcK|a+Ws7s?CYZdC}y-Xp4MMn)X;c*x^vL8)NpCXm0cI zXqx4qG&P)ScE688TkXTzG_)pWI27&P=xvDRQI0wv>^u|~o1%G=|A6RmI+|{NR?XNE zt%K1vkLb)A(K&HM=ZF!VgGO`?%(KyS1E-=LI>NUe9?fwhI-I)3DQTMJFE>I5q^UP0 znwcXyr;q5IGNN;GT%Q)rStB}UM(>jp!_j-VM>*Hlnj+L}zha+#1cY5uH1uw>+8$M|AET(OEm9vnHEp6$B538(SIhI!$)=w9oZQ_va{F7&bX2M0(yTI~?x2va(xGgdcrpCmKvS=w8l2)~ygPH7I4XYe_M<)Lac;6?14@TCz~h4K-rJ4!;$q zQMcRj?87d!u$NVBa4udDsODTbj|wfxRAF@yma+W*r-N zv=2sRD_bQa4?V7_ZDAp4D_f{ocok8(bbBgW7@4708c0rsi3Mv-OW8sLGpp*eG+!3? zLYXivL$H!oVcXG`5UMmaW82X{SafcRiwvU12Cb=koRycfYK6w&R!OVY#*!|na(Xr< zh*x4=7WNkVPXy?ec!&0(a4&U1u!wiq$#05v|5tUepm+gR@Hv;P22 z#-L~0c^%{8A*;}Gh;2kfN4CQqjvgYh<5=B{#0Nu?{ay>S6vWc|UEj_YUgZj4=z&XP0pO%{%QK41na3JHu|vg6 zM7lQ?q2k>iJpjs;vgSFe_7J7mZk>y!E2Pt z_U2qI*b4*KXMwpbCCmoweY#cLwG>GRDyD+2y%o2L-TRw7&?wjf}ACN2!&2EJPG1p;7LWTWewn zpj*FXxBsSCG{y|f$cGh7TaVsBv`oEpvF+WqdmmP!0JNk_#hl7^WZVk>0`iV4`%G!u zy)QH5o#AR*$;F_uvHaXxa_i#eIb%L{Oz(JQQn5L){AO1^goYXTwiG>U+m;RAD97z; zFCg3M8s-J}>N9X9?g3^1+!J}w&EwU=rB4O^CFLP%(V00Dy`gd~KJKoUyG2@oK(1VRFVBwv8g zixa*ON+>FpqaRJqB*Wu_6E)26x+=zZ;b`kjVc%2fM=s=`f!hEE>5v+ zHvbiKA9Apl>KtlQ!C|#6TuG#dr=x}2Z{W7tH{HN;Y4BmgJs2&{vT^f`p1BcI1!vg~ ziW)a!ssUE(=;7W`@zCbCt{m>o8}7k>`8G^0!aOlXL33&5Im06DlHxi$+F(?D1t#3q z1*K)taBpGMVYxK%GSgwnaIK2AE26kzxOe@qxUOWlG#r)-#4_BweYkg9jN&)1%Ws`W z_>BFVZ$*jy&UU>#<#gVw{e@o3=j-?@PmkWH970lr{a|OEz5aVRhj*a>|I8!a>Cg9O z+R2`uwvGKuu=BrgZO>;t{`3Bfbd+E1jqK$4w#WPre&6r9_C0?V-|vt8G{uO2e7z7F zm8gHj-aD1Ud6T1IKNV<1bsk#J=7Ikc`rDm}_Z6QFnhu=bSAw%O>-d=3RDtNlGi%z( z)Pd)9qfF3wFc`^4^r8RAP9FA4-Ur>MBT#=g>D{RV9Up?agN5i|f4hC}iLVJMp?~P( zJ92f;L?6fl_m3|sYzK2j++me9EptZnvH#RqXKqOZJiDxWVpQNCP=BY!1D+mz(|Pp( z$+^)0Xh+E{+K!h87UJ^lW&>Vh#E&Mdk#C9pQG|N;cn&5zIq==_3{j!xE!KIDIAM^U z?fWg^aB8q3gxHZh9~VNM;5BeP(K7(k)Pj?vXMm0%=p;0v7CI^hHH?7i(UQ;~wU~Sa zMt~+jKLjVC2lSu{vk~V;9hrecg4{cxZm>IQZifg7^fd}F35li_EWvK*zuV&tC`G*# z^{C=LJ9zGnhs{wufp zs-R-kjSB?jgZc{9hqI^pc~E~>#~{?9#)kgG8>NQtRKp&l zdym`SbJuWqdG3sMTs=g=L>>RmgHd}#1x_E$96P%A>~QaCJ>W4?%b3wFaP{a3&k25( zV~cBN%IMzY=ujt4p8+oq{+%OZ1pXck!l8qMXL>x$8Qq&5wRG~FF}io^=-w&OhO0+2 z&Kcc1J8JWzxOjB0@8yBbR_i6Bd&@@mmc{@)J(>vXF}in|>Ueteh#!d1m#Aat{JAgl zi^pH}fZxPn@j}-W&90D;m*vx&d{U|p3Wfj#ySeXo{i#d+hJ0jS`KkZdZGY;|00kIl zcnp*R^`pHH02g}hd%r(FjO#*Q?<4;FxIcfnRH*ytz9`)Z^?$vX^1S@Owg2_!9?her zfCIf8yE$!Rz=0Y7P1wR<0%%V?|59!W%+|%lR36zj#w-RM=tXQ1=cHB*aG>Ifrki5b z)`LING!BjtqDHep2(c%AoL-9KqaCP#9PzoQ zUO-$H+scY)9Y7r|-D@FMlff>3^~vrq%YqUOVY@_0QbOj>vs5QUBd+ z27NQO5#~`hcg4{IDUaAH8V)jsfSO)YX@Zf}3|el(V|by{Ysw>jsk$kFuNs*dhYq?V zDWVmzGGUQy2EC(R0L1U~x}Efk4_}_#xbd;CMq^)S=-MbYs7Qv0y%DUq_d%t`*)N*# zw8Njg5qw5OZ3EQ!X{1zWraaoWxeYQWFm$BOI_M{t327|A3^%Z*iUp z05J3r47qwBg+Rt;$N4En+d-prIkI{a9s`OEk2xc#*6GdLGT?cmb)gSZgNhvmby75* zsv;?(^L)Dcoai_=3Xt)IQ3FS7?aO=!5Tip692C4HYDUL+It`2+1_eNgt{X@7%n_l+ zq5)KWSMw;~oxU&`H5T0{sZj#O_nR)#YlwtW@fc=K)Sid}pu8n&0~8Su_Yj9ZaS<|5 zS<|OP0Wu~iN)2FU6@7SojEN$(B|HZD5*XFT#{)r7r^XWVhX>&?STI`}Imgv^D z|AvK8X8Pi~?cU|2@xR62SMXOy+M7U4p|Z*n{f8V|{5|@0oKc_cOwaG`#OStje*QhM ztqs#kG|3Q*P1}X>FL-ga{=fM%vViEh98@1_-A^a|6evyl=?9)O$0yLoHuRJ8exRfr zU82QMO^MU&l0BqE@T)If7*IF3In-eNbWGIoXdo4uC)G6qrslNb$8e~w8f!EO`f`4a zCV}p>eu4^eBuV-(V!~9P2?YDVzMzNDK#)d`-Uq^I$hFDfIN6dK0LE}PC@ejUpr9~B zc2a^*fEl`}P2dEg(?laRNANeVb8?``xSF)y2yJ2r+`Uxn6LmC|);Oq!?t|$PrUB57 zjNb5LXdFKu=QsjHEw+OKXDzx3V5q)SP<^0=l2SVg3GQZoJe(iJg5+;}h+Ts&^M%WO z1yy|*DC&}^{<`g+T!eXArx&2tv?%n0Gb-I{7AIP2#`=S-g`RX!NsZk{DQ(f*XUhU8 zGt`x)!q>pu*mcX#FWOK|`$Y{0um;Vwj{>#_)dY*9Ciol`sHUk=n-N7&H^;|=Mw}eg zdz}CYxAKMM_+m0R{3IJE7eh;F-eS#L8j~+|=4Z8DnWuzcc=Xt3Z>-VKN;j(GW_`5v z6Pjs*S~tc-+_tDIEx`||q*b!-7B{XMA1l3(N*(<)R@>I)3 zK58HE=nwf*H|BoKwIQ;Wf0Eii`02C0R9xS%Yc>A_>-?J)m3+ga+cB>HgH+PYwoeJW z86<+aJT878Z7xqL_1Lac$|L-dR+!B1k`D>7RSimxjP@odnc0XZV{e|}LxkAWbIV#I z8_kgHwu(U|-n8J6i(|&3D3(UC+DR0!mvh%*PV1XpQ%?@DiPZoG0ga^5oVyk%gOpb9 zhA6-rIFU9tF^PJyp)=#-BQb8Q16|qe>V38zT^^&~KA&ISBWl1AHnG|glVI0kO&>Ty zBJ!h68zm~qc(SQ6cUDbAJ~y)|*k*PrvQsn!0ibs{vTChO<8vz}VZ(w^)OoRrg;B>I zMsN&l+bg;!hi=-Dlgm%~(9ouu@bR8{{{%m^JUPVP)pvNT9pegN?|X9Du?b4X?&5J1 zyNQB9B7LJ7Q0ME+v?8GuD&{w{DFjd%042Z?>}-t&o~Ss}hnBIQ^>9WM_>-#5yu@L! z7uAH1h9iq&oKeSRBb*$%s(X*lErugE#57|PyxU!m5_P*Y3*hJkki!b6E zzQo_No4TtVUH{A3Ly^FxWJJ_YMR#`V^YcXh%O)yEnM;Q963IG}J@ie_1Oy#nq0%I- zb#Sp$qzUErrv0u zwjS<`)_YVSgVfZQJU|7cliCt59A~`nTn%M47YB$y;7qESyDXwp_Us#55YTQ>bGStj z?wx3EOCE>12M$2EfEtdkeBB6u0e}EhI4c&KS6*XlDDlFwZ60O5yzUw5z zUGZcCD)jHaEsC{K7%yy$`u!F}h#w8RFNzdAI4I%72&_V0VCGD)eFR#tK~y0_-yp)M zj13zoLJN+J7)COOW{r?Ep?PExQDb|^lIQez4?+j`w%&s%t8^WXY>XSsoK@upMH@uE z(@SGlHZHflJf>gcbCc?H`q=djUPbJ{->Io-53P%)J5*p9@#`23eYy@GcGDapc-dqd zW)D=|(=i&lF$ueIqx=f!xdDR+;x6gB17Z-Y9Q@qjqZHYt?}blWML#3rv}k~yBerXH zJe&{(-tu&3qtJX$BK#ao-PzHNcUw!@n>|3+t#CBgvKWFPUJotej#6W?b<6B1hFQbo zz0R4+VIz~V!@aHb*G7@{Q8v=uDfb0qYQCJmop zFS}|c1gWdsfu=P+Om8;F z74dFsLVB|=urHlozcTCJxo%{%O^P8On^Wl7D@bwtLgxIYXG*cZjK44UlgNM}Uv4DQ zQ!BrlnCwCXD1rPRxb=_x`8I$4g>!QLx$E!p=f^QEia)yPhzo!8$2_K)p-mxbpK+^* z)e@_%x340US7%Uk5$Cs^NM5bq^4Q(|Sscm&?bZ;Ly!!c^7ME~hg zSg}I~=q<}f_DC=3-fo0-kyHRX*#}K-XgcDquT(&un_Fikzjf8#w<)mwALyndFrY@I zLRn%!pwmqTG(**FX$)8uQ@Uy7kG1>l(3(cxL2BuVL(}Ug0EU3%oE{HodbI`JsoF`= zuymK+c_m?qn)_BohN@vjT-?ovgt?)y7!YXtre=rk1Olkfd6HLeH;X(W)exBX4tV13 ziB-_=XeNC;6b)$d$5ev@t$}Lj_yNt{cf{=#It#6h{>J@=RwrgVz9JsGLrVRKs2uC~ zw&*@-XZVpn#LAK7^5PMb6i2i|5r}P$rJN&vBX9eI8n>&Zi{}T8WmDj**erkJ%i=>M zie(w zcVSk}Zv^OE6l)@kFjTH93E%qyQHyWY@x!lXP0xa$L?~9r4DEfEI;n(K9kpMf!aZc>TZxgy772c7+&9jXWWSr#J)*{ERSqeD}QCI~IBN>`pVU&6~5@tuY1FP&Gm2c`EA$!lg~Jz`#nFG z>(_qF(@)(3fnof^rY}MId#W0L0`)+!)=+)5v#r_3-tTPnbcM_`_L-`o<~B6Y_^0l7 z@X4umJgMvK4Aeg>UIr(+%q(hbdyU8)KR|5&eJ;@?m=6tO(KkGVct{OT?BMm}W9$am5|bb}GzwPG|VYsWG zw&&seQ%1GV-+Y>bsNF!@4>Ib*UQZfan_7RQ#s9%IC0F|#8(Xda;?LOB+rCo~tu9AN zXmRc2|7DkJiJ$nB4Lvq~HNC4-i?h@Bj#eP4x8kwhya+(Hxn{GYZP)l1z8cWwD%ioZ zGV?UMTrG2=IH|fyux-?SnJt!c9e2wPSJV6`uy5GfY5)MKV7tRrE{O*MlqzA#{#HLa zo(+9fJX{+^cuCOZ8jx|e=yTQC&g-KFF9}V_p08QfY}MQ!y{PSnReRha9-8@NbPTvk z*cHb*ppgAMNx!yx#qTb| zt(x=g8)1W|8lM-v=S6XG<8G`)YFbv~Y%i@!e3d%TN%K{hhly)i?^6 zeS5eKn)Gp^)-}{tO~!Aa!Kc^M)97;bqro$NV{SB5gC-fv5v&@=TtHZ^^p#jpm5X93 z=8%@Wv<7g1ee5Plv*zmP=LhE?Lyf&DnjW_qb4NLjs-6we16O%x)b5D_gXaFI!CGSe zXsoRoxLn&Z&vXL}3F^Sg(YT){yb$(r#;D*cr}~m^j2o@tNJAB{l;$gsk9H2{z?nxK zlJa!bIJAn6i8dHX0thdt$8VP8O#_Q-mNhN9JO;1!B?JBVLZS-$$8X|WZ1izcNJ`U{ zx5m6RQNU&abf2*9Ke3M(+beZ40OtN=58i?0wpuJUXCRCM~t{_Y>R|7V<`D8S4t5jK}a zIJyj(j|kESf?P|&AB_-#H^b%^m@JtoFhw_`(_GtNDZ;^WTB;As08I{5!6r)y?&$TJ zMPNa7cCTnk@a5%8A!l$XA%Qm3Z2s-2}Qw?se7QZFHt#ckfh~sp@k= zi0fD%(kX~$#3PG-a;G!r%Xv?BzTxKAK@<|zfRdgY{uZvm=a6~0g3-P?J zZHR>&$B>QDcSo^V1&Tng1!XIKpFO!)v(>(k}5x)M{4!wV<(Z8b(*Gq_zd<{%;Q@H}h((%ou;tuiTdkWx6F^neQr2oZIJ zxteDAEM=^QxJH;;QulpMXF2D<88JG>rN;>v2Fm*p-2Sg*_)wfY`*klIL;n`)OQAzA zcUzmh4@609u;%3cJ*?kYl>3*QvmP)&%exB@-%!!%woY)AvSmF{WTH4FR!N|n#WdkNfYK1+&X=PYYfiRoWx-lH5qa2X|1!Urm|QP4X|H; zt&s#r)0764Y4+NTI=pR!)SAGzJ7SbgX+yAkqamdRvIKb$(gHA6qkmFvjIqN|uK|&b zkKHseioK#Zv|Q(;L48x&as%>k2d^rft71+*wAVvU?+D__ThKd1g7zQF!KlUzRUKq*?d`u6ETCL9Kgstma{M4{4 z+EHTLJ882U)_+P;UQ?TJyn zjQx2k8v2nx5%n{E*xv??Kiu0h>KXaNAwAMr0GrB)gN-mg+4|c>TmLrY zJ$gm1+vZ;1Y@k{0&sLt(Kk2=Nk#FVi+dQLv(W_3*{bjDybf|pDZSbGpgk=3>MVd0) z%kl2d=Cl%3(!4;s9G{cI02zsN{Vzk!I6wD2H%nXmC>Jr@)L3k&sxeG;&auA)H9c4{=AWk;$S&?hP&TQTR)j|UWp+5&T`h6+=0OS$ZC zrJm6pYP2H-APU~pLu!m0^>lMIp$*UweZ$>Q)6pcUF(3gn6Ltaas9mNIqo}O1`qD9n+hFDTVO3)R{OaC>_z>P(nZjQ&> zqQGhZ8~h0l$kB``r%hkr8S-7c$hFsaue{uK1z^28YrDGKjn6mtewWYR^YdFUrhFjZ_n4u^Q7mk*@%2~-*owWXFP?T8C@Qwh)^`h_>L|@gSH;wrKdTL|(k#PH znY6Pqa$MmvSHP+>G@MPNce15Sa-A2C39wcqz+$T;!m?#%heaA@m&XLa6v)f$79gy- zUmR?3Ym7?6Y;#E%RwEAXR(}&cSN9jND# z=us6YwWaNrvs(LC_#R!Y&^;K^zD@HL{$6kH>3G^}Tz{QEf4BEW zmm#`zJWZ-zAyfK%hwu0;xqfvZzRM|nfKeax*dffsawJXKUh~@rL&`x?#XiMRw05rF z(DdJCR#Egr_OkwuS3)Z7xkFdFgTYJ4l%q-YH4d(B)4sGG*Qo^ornwOHMhB`Ru`mhO zTjA>&)vp4vbyw6$=o)dPC=m|vDtmp{}9^V)^Jb%^NKpaIc^z*?Nfp}y?0 zSPA*%Q}Zdh_#vffi2C>GQKZ)OF;ugVOKY14N%_IGy{vbYu@LPukcd0MQv4ZPVtd=E zdoKI+Aa1?z4gM???bf!FyjCA_o}@qm!L$@45ZmeRd}+4U{DjvmS4Ij6C)XFF>sG%0|%8+`afhc0N|4?M3Odk83Imw^H%?Brhdn}!0JCr53+C=T}tEB2In z*=#C~PAGsri-wb(0c}>r0>FUdqsNr3=CEDZJ+LfB0+nh31DqQpb2G7p2B?-xoFYuC zL%MA2)5A=dvAvxTVHoWAw&IjIRma zQ<{YC?{BBc@oUzH0=b(GRr}HH1D;dOyl9E(F^j#$wyK-yIzwFc%lvYAfX1@1*i))` zJ5`DnXBWUg?QGQ8Q+mklw6X?c0|(T8b(d)YUTk!N?AtPR_N_5+op+X|cu%PS4pb!Y z@CdQk&-ju6Se7SZ3Fj2mM1Vmef$^c+raHK=va|a{E5bY~1569#?2*w0S(_9sKdT?J~Ti<{! z1(sLfaoe{sFHXtDRb*0d%a!2acQrTVdrS9f#e+f+uos{hV(aiclC z<16%Mn|s5fVm0nDhbTQ152#bMf%;LRsH5CIu zgPx0mt$Kjtk|x;#P!G0%3Je=80M(EJDhMxzR!!(n)RNlR_NIYVM`Vn=z_RLQ|boav>7 z9P3ekpIdZPI@J3|{5-OXmumkU{o3;S^DS@pFXfXGIfOGsecy5Gsk#}u1SX0X`(Y0L ziAyvzn;K0%l8$HNYoUEr00UIVvS*94*$<89Bcf2(Ne(@n-8^uGqF0YqJQ6_lbi;aY zUTPj}eulNoivcKljbdK|rP=m+Kmf4qRa+JXie67(<;$XWZ3ZSbxv?9f3xJFm$sKQF zAA(G?+4U-px6u@o7>XWiEZV)X(eZ5l-0~Tj*hb83&;!k4Ol+iH38jv@PbCj<)~obq zs&gEA$Ftc1&T2&6t2i!-=_+RGBR9Mq3+TaBjw!rg2k(DHvoG|<*V2n)=@kuj3`MV= z4R*A$(Sgfsd^KGc#Z5_%nFmn&`V!ls2mN`(Tl{VZ9qaktn233Ia(s*aRs^yVxWa4vKlQvqil#qQF%`C?bcd9oJ%?ih2o3JS_$|GLiVS zQ9aI7XI#tq(S=(johgf=0d>I6VefqtYwG2Q)-E~mBEMRq_P1Pn(}1XLr(5nGZq;Q( z`g-s1=cl)8O^KNJsK+Y)`|n-*2Y<@-(2fC@CG`dRzU2P48vWMOpMeH6xf+9;N?HrDXi49o`uG%{!N(EO(ImG24wSu!OYxT+mS4dfani{65=yMZ@ zaLjtxPEJPXlE?BJf!L=p?F=umB((YU2?RdcNM;ArR6 zt2z<04k2_{p&Agl%@D%$TqAG!q4{=h;s|5i3?M|dB4y`A>v>TiWiN`_!YBylzR^zV z%j~qiBwANRfs3sf1b$t#-VnvjDl!HfuQc9keAesBMBLSPs(yDg;HiGVnP&A3A1Z?$ zQw5*(lhN=jnGj1C`{-{G(Qifc|7zwo(D5H3ZT$)H|LU6C;J0aem3wriZ&zxs_tP8w zIcQwJ&F#H<1n93Ytl#an_xe+*(%$dd2l@Q4YvYw8|Kn7@OyJ``+PeOWy-arS`0P+KyaZ3b1cas*KV1s)={3H3B zNE-t&UV|P0{+mKGnO2Q!@H8}=kv57zKm3I|brKsGXs7Uh#^y0X{^}I}SH&bicXdM} z^l#~=a0Pjz?&E(KP`yd@d#ni5_Vd`*h;n57_>}&{eAS#qdxaE4H(;aK{MOnBM(YeG z*gv8h@Hn;0rp+y<`!x5&n0sp1uXc-}^ZXj`ctJhM3(#I{T6$qj)hf%PdWni_?2fxk zRdj%QQ86kowZYx0-KYW;pgKbHIIe+l^x~Z(oB;~EI-#~>mcZMZ2pU&`fvw_TV`=0) z>fqUE8XFR=AGl?el-ODjpY%HjfPOi z+9=QicV*ntoza5ePoV7>@=R<1+SV*I;y-iB_}6Q&%=2k{fxCXgpMQk6ECOX-?q^LZ z!7}0W-;I`#QorXB#rZE=zkt+t`=YSFp#NPS(@r(5s}H)tm7nmqPx`YRD+9)1e^OjSHr8+SzV0dC^5^$(vi+B9|LxDVoZ8zgKSFA2Fx4U3`*klv7?4vZ7w=h;fTjQt zQO2qDtfCnKH8S%|{^-M@T0SD&&B=ha{a4S=EPTmJj{_nqX^`09aKMZybRG zgbYAfsTZ-OVoO1&$f%9cbXOGjsz^ovG5{$1aCAHt1t!f?QR7#qdCsNJ`Xj9L4y4ln zA#iZ_N)SZAc|N)_)iNq^s!56goC-okaA|47R3AA$CnGEYuDQp1~a z>RPh`S|GT98_IeF6`Af^Ya&ns)~hRFDpE^Lz)eKbW40MtoQ+dB%lfPJHe@ee-DgD&9JM5+7?qo1=c{0y`1)8%OM zZxao${R>nOaL*3n-`+=`ySN}JD*fi-s*)DW6w9iTS&ox za2j%O5eo>xqw49uW1@9>_kx(EHrs(~2*iYMr^L_!SLj7M5_Mh;`05M&#ccQKK9e_w zD@=+T6gyu3yn!e}v!mGUNXh62HX>J5e=drB9ZE2<+V03p_3onr(Wp8?QpF+mj;J=R zKsbIaqt7yNYSb;*F7|OhMB(vj+!}mCtj_D+pa_I>D7s#R*jwS4DbSprmq&4_id9ih z@CFbB(KXQ&tvYdr7Qf` zsh3QIe@<}g?+lzy6!vY0zP!nE{>+KaL*DKcetj^Iy&V29-iKtEgyCutlst^ zw-mBAaIoCp?JHLXlbg3);TPDN7D@XZ)+;brro7&PK-XFC|MkO9{Rue$6jtYilwVFk z2uN1jlqd$|JtBN+Q{eZl^^sBVfV>YcI8tA4$skyeaOG+rutyuz3rIHITcgG=cMut< zSo1E60+YRIt=sE`I}F}7*;=r$hNIfoMr}hB80zL~Q{3BHzdyQ=+hd*698sSz_{r#b zcI(;A69rGMj_?6%9W&<85QSLmRotJ2W5iJ^vznf8;_FS(BK1??cTg|@_^ep0qG0sI zMLU-$*i3G|IL558?;BZfd%X&Lfbip7uV~2gLQN z(=`amuR1~x0l&=WkIsvx#k(}j^+nMJ9@c2QUn^^d;mg$4N5LgohXuX{TLM4eh*z8I z824$fr@+TZ2LL1XH8#z4*k3(8VJQ4qWoy+oX5h*dPPtWikGoETknMQHlB`9__m6w4 z7yOGRPz_|P0=DzqQ94KjpIdm^8PVmu9WcEbHa7|+{F&((JEIIbM->=b4TFb8@1g(@ z`(25@qTU*h!Rmua1ILV3kJ1fcS}4idwN?U6fzRfy89OZS`5)vWSM#)+HTV8l0BRSp zucZ+7k4Fv4Rt=mX;)=1c-CN^1VdNWg@yiZ-94UoKF6?tga01bG*l_RAsBtZr7CXa< zgvl;EZMZiznr1}7wO|^+ExEol{-k&$%`m@zQ75DDxz0Vz&o5etTpw0;;k*)TVYHHZ znPkISY(*3g7{u+r6Gtmv>T~r)bG-;w=QljEB**{V-s@@*S7C5=^@x(DWC)gK+ipf# zDZ$|AJIIY#jyrArvM|LmZ|`{QHwZfYioeU({n^eJIaY}S+6U`@nyIGDGuyR@N=wDH zXGmvM7Iu!lClrnf#PuaU;yTSaN{*;0Be7T1f2<0$nd)%Qvq$8aPmX@nYe#dTw35C# zKZZa%FWhMxJTqhrN(swlz*K>IUL9-P7{x6r&|~^$XeBh&9o-nNd%HoK+oo@@RWt7%ls@YQc|C?uqv*{ZuPMCLoddJ3I&MLaw66!9?egaLw%y2buSO|s%LeUphwAZ|96iKwi5 zqK=kJ#r2RHl4r)7hIT;bz|f3!Zj&T%&}3RX>=o6LzuCXI9o2@tqN2~=q~@CA5Du)A z4C%1uBACcos5E1COgze9&_EJB3Oa)o-(OI05)dL5rRrFKiV<=kDpsL~qORKKD>m8jx+)a*Oloko} zwNh#>lot10s)1iWUudaXDlRT$M@ylvthpA%IF#0sGGp~{Z`;Z7uZxj44eRQ6t$d4$ z+oHaCxVK@rw>};=s<@j=LgVq?C>|W{WorCKhm|T{OFTK;BSF4uzUdudKf1Tq=pM=N z$B*uf8||J6Dl#`d_$V)WCnNp=&XBLk{0?eR=EgrlbuM{7I_5(gkM40(`)Q+l-0j{^ zj(>b~pX?0zT7z8qD!AL7y!dCu!@MZSke|u%x$j+rxXhiq-MQs`Njxu)V%6y0%BZnv zN9&sRtIFf`qkF5Peq$8(jqa@<-CH-hw{~=IO&Ns@9NpU(Pxp-O-5s^fQEVCAdwg{7 zkcL4)W7Lu-{uD$zQs?9asJ(h|-UnJpGt^+mTP( zPHDS4nL578tbionqV^rHA&*jo95O<*cxM1x3v=3!|~L!<&t^u0}=?x0U;R`bH1 z0s0hla(t|r{1yH3&O;qiRiK`a$ROPixw|DQ0vAnZlrI+S5^t1E4!>Xj&te?W7UC z-zWuXt1cm(oRJr71vO=`7e=+lR?p$pr34sh`ji~m@;aR6&+`fUA>`r|-*g6}lH$8ii{<9TA9ziq9`di`KEr_1OOS(UqS+?HI@>2Y_Ko78 zddCT2p_+guL7*U7R@z}crvwCL_A^I;A}KZ0VL&HF{nVP}+sP!uP}7hdve8!5OHPto zL=wU^YCh~CQt-O&1!kCMH{%7m^T@EheTo zTvvSKNV$p4V>S-`#5~(Ogus+24y?DFIJO>68)otF=sPM3WMaJGl$~|ADK4Zr^_G)# zCY@AM6s}Iqd_Yo80$Hk%e%SHu*Ys{MuOfL>)aB>?JCwr z9hm^Nhgf^KWcse`BBBs$PXCmLqIj}>opV1B^ttFq=!GDh5ZfH*55m7_NssXAHX^0G**~sb-Ft(hm;_x(*mc{rpqCnIkA_v4Fg0O9(t#lL+hML}W zX%vXWwlqW_A<+#TGnBh z^~ptOM=jo$hv`g$OPreIqFqWFgaMZ(+6gfWBQa=2Og0T@n`jp~5%77@g_))ii)^;3 z2H&V+@-Fx_zQz3~Z$P3dwCVXYzQA3-;m;TI`BK-mMu_d^-ZuLDDw6guA;^lfeTT=i z^O3+C z3_r+Pz-V>mfK3yAB6T$!2|M7-IZRyuS@jdVG{e3fJUV&?gQ`GCILliasze#{7WD(ult3jlbR96{t(-#wxfw0UqhqzOTLWQd$& zqL|&xH90HVPISIWeS?&?mpP#F?Dich5MlE*9+|757uR#l3!`C0W?#3swHF5ns*&gz z2h{^PudN|X&}QnnxjOF=#A?{+v(4+`;f^Rku8BVHjRxc?m=igi;x^IeQ#+Em7udOH z$R0$l-iS<`YcUF_oLT}dEpTz{Ye3U|e_S+;06tHQ9t71$ZKVH6Z2fHTAm4KKkSbX3TkuMw$}K(988|xFhDnfmz(* z)v>&FB)=98FHUk|cJ0)_`+W>N5y=|Y7q{R}#IM>A`zj8}h^BDps0Hb(0&-2oMn}ve zmm$L((_|?-vrCEfb5b6xVm(KM(_<6jgalA5TOR&YE$< zz31v}kzVDqk{iYP#j|K;~@86HoL}~Sn$pK{R1!k;qB_B?Ok?=YWN1h z|J@ja&w2ST)kIrg^mE%&^CKtO+TA_h^=I2rGj1DJz@8zI(KAGk9guOh__Fl#!WK|* zw3(H|7L_zN9&k@)vKoMIG@TR0!c4PuQH?NI5FJZ11G4cy z3Q9}+000`!2E~=74SjT7)NhCa;g60%1Fds5(`p86i0&`~?x_dD%!jm%fYeF=K8UaY6n1#ZC$2h?p2ny-gXq^^C*aKQTIT7>_ z8tLTd#S~E2*-p8o+Pr8$^;}rvYzH_I)YI0K5{Q0{BhjEku8XzMby^v7z*>ngjcC~L z|K-VBh>;p*i{M5v;DkXLp?#*bkKSSmR8~aaYrap^PPaya8-bbAN1g|>k7iah93KU$ zh$sZ0WjxNaLc%K09P9%X_QWhqKMksBNMQzQUaSJuq&kYrUL9+tbkv}ls#dzbMwFqM zd=d;L6|3XF$7`}>RPUY)F+i(27VWMwB0Mt>I@&;U9xfdOAXqJBhylNOR!tg1TmcGc zk5C91VL)5~KAZH^WP|}qezoh{2^%zizm9rTsP4pXQjY5o7jJ*Iw?=SMvF4*It*|X%vP%M1~r@pdEr;E(|DMguh_KyF5;z)F18X@Z9_S ztiy93a_uAj>|Pj9?6`l<(Yhd5?^8J5m$L2adH;&T3-(ivijv+<%JO?Ts^oF~iJ!xO zLw#zoq|N$P9E=(94eCOcJCFh6%`w=AmS*fg>(2~q(8w_ARGS^6(3vLAFtMTm2@J1( zuMH_Q;e~c80AjlNs8E(zbXo~zNu+~nsWGw9Fx+6wa44u5*Mf=x)(kBPp9XiP-jPG{ z?ykw*G~y}epb6i>BlTp8dQxFF&ZIn7mK`rOV1+p;^awWJKB`TLM=Pb{owF@0xW)5IlasRRYw&b3`XpX5pG~P$0w`x{pQC|3_3k6$>Y-t^|(0NP}Iv+yCfb5ShH)? zzTTk>SanS^4g{V0lAmGB-c)nbpdYc|P?~!0eNmuD+g2PV3UogT@@Wl#FncxzVp&)v z?p?SuErJ47v2VkPaDbXJu;K9T@oCgp*n2^kr5$HoIVYA%JI?wNV=iOz_@R}vbb22G zzNs)Tj;Sco#Zg-p1@;$e5p|6PcUd$!sNw3Ur@q8&yV=y4)n-uE-N~)^Wi4XM85*$r!XH3Y6uTPzd9rz-s_whB2q5G4)jRoe0=+YQSPU zeCu8WxU#KTad+GFx?q%yw=?n@tr~=VZZ}uOk`m~kcUoauSEd0i1^HFzVri3*9=-DGz$h9 zgrR!u&{C09A-d!k^`M8+F@r@%G)asOzEH!%9z(CkB59PNZtyXO7D21vpvFvdVnhu~ zC9}9px~5z&v8v&!M%|>6iIpGnWvUyjUvAROR5BQ3Yht1GQK08A?(U2SJWZPZK+P7e zCo~I$A>lXCIc|U|92>F{D{NBNPmQLjO6IuqQ=?rDi5Z8hI8q-r$xuFe-;8=K&76i~ z2JLWi^;4rF&?neq=p0QsTLo60>Zq2*rV=mil7;HU9$Oyc^n`G~qUPwhJ)`GtaT27} z8g)Yqy*Y~8qIldlNo;C+s{2OS<`{*0#^Mim7ToilkqN9@ zN_u9n#>m}99 z4dS0h-#BSUv|SX#LY1JzP%ulQ$tScgje6BFSX@|P=$C7w1Hw@2V2`0`R7ng4E||B3I=nxcAF26}o^S-XCgtHr6bOoEK*^w9CWS=ZJBovR^L%=$Q^`OR zVz_CsBchnzqzb1+8@djH(5{&@%509E9KHUDv18w0Q2soY`c*He3>Gh>_FK+w@e*n; zbNeg!e5Gr0gAXM*-_0$Eq0e&=Mu)~jaO#juLFaGxkaC^ZyZxk$@$DF&k~{LF?*DWr zyU}O!IUcXz^!zXYLGuC4yETf5mUbdhcIg4>cu?#CYeGd>ZR3C)e^CrLcOVC`>M zjzZDT7oe}gauQU2NIV`M1rif(OT8AGXlsWX&x|(EcwcUw6m6&1L*wWyO}xNCKRzh~ zK95%+FE5VzlA1*h?dZI|IMFXHS7=^?Mw(GTuMOwQ=W_khabyEFvRsR9NIAfG-Kgs<8L9NI`FAo!IA->U{( zEO=K^ZfY{3RRv-*yekRL)dm>1*aVSVZbEpexd!+Es*#SHGr;HG=zTE3Ib2LM;B2wP zOlS@uf37As;^1kKWg|gzBqXvEiD@oNZ-(ho0Y0~+Mr*5PCJOyQN$k`$a#&wJVcmS2C7ppa1rt!3>-5639Y?Is#JvFjx!~ zfXTh1HYEz=VINR7B_nuK6A+5WM$I4zq5xos+(Q<^SsWi-bE7z|%k$4m)}kpIFO0F! z63`TV*|;p4`=T*Pi`5Q$v}81Oq3;BgY)VEG^vJ$VK8lfua$~G_PtE%S4l)`=;A)MB zqX1SWqC{N!2jr~TW4C*6>_NVG2F$EU2S#yN`y?Tpr-_FXO=?VUU#O9^1wv8_AP-Ni ziGOgDs5K?y!gA%|c`l#h0b`S?jDEA@mXV@(rf=5s(^#>{fA0Cec=Xef#7% zsB&Wrx+@9U}(hz*^v&Mm}o2tpQ5QMcfOp`G+{*aX(20&}8NLH5(<; zJV*$#OgzcY%<(=IPg*d})fxy-O$LwckBLu+M!KlIjIkstB&)aXc;Y+-5B%IJqXUQbQ5t zDiTm4B)7&|Ap3x>_C6<~oH{B_j>BhY37?~Y(eEJ2xzRh{e8p+;0Do~-)L{KJ6Hep& zsF~#_I5(bf(%$Mr7-lUliAJc3E9!k^K$?0Sogt40w1*Ad1n-G z``dIr`(VXHAHdiKZQ(P7dkuTx0oDSB0&;)gBw?}^=tdu;=+hQwnb(K$Z+o9{Jf9YC zI5P@-&bXk_&+!QV57)1M+JY$X2`o_!hJSgqB+Y;Q$TUAkHZrN^kvt9yyKSUlpJ-y7IZ|}Vhs{U23zlP6UUDFj(Z*=YV{Hai@cF@08 z_#j!OMb{6tPS7{6k%}bpA7RADJWki9Yy4Q{jQVQti#=tLFDX+>Hu*1j$bazp71xwI zs!%C~t&huCba_jkN{M?q$AlOM>YnH0@CVxvK>2opgKXg?L`K|qB*Qt_eF zW;$C67(xSPM1jVe6E*AtwWABSq4&;>L1-*A8`^H+P8}v?MK{RxnjJZZc(*TLSOerVaoVad*eckquus4osv;kHV&plADb>JsIEEo zX&+HzTrmV-QSfo=E9lR3RcBibM#IT%?>4$m?EphC8_4_`n$|j{wDIPO>nS7U9}o2Q3aZ=Zxb9FZGDrVglyTrjbWe}r*^}x&~x*)o9+}{1r?7S z(06dBMS#w`JXXFc3iRCd?U;X)D7Qv$S_J6F9nyQ~IW*p*F&8>T{{nR3mZ)JCr~w^^ zVZkq*iTYH0m92+0$4w33N7Lc+#yrrRq*93YM+d6mm?&nZO)w)K9ae=u8=VKWqH#&3 z46yYCS)J#D_!@-vQ-RJ~5VgfoTyDM}ral!P$HbxodLGIi#A^0lbFYt%HKU|2(SvGB zwthp+cA9KGuA-lC4&m2)PT^M=_Wi1|C*7b5(xTbBb2!R>s&y&v-DcR73Yxq&O%+a6a*^MCW`FZlB- zcwY70zUI%}v0%RKnvS8Xz4%+(oX%AilZaRZ@}#^vGi?`W9HjR?A;qw7v|!04cL9POLsU(Q;>h&49<(F2%h8&H7`ODE77NUb0y^d#6WU zr0tSqxU*cH-@OTNfrc%qH)lG&XthN)!aPMdmXlUQ5nLU$>!N_fL3rO34_G!Dv?dB{ zl{-!M_*A(%>L~?82HY#q9Z|Y>$#aGLek^7_8HFI!5KGDGAhQoBf;`@m zbU1?hh;Gi(zVR|W7Qy_0y}?{Te7AWW1o_rnt~OmRhy{?@BiSy<@p@1J!Ho%&#*2@U zUmJ6g-JuOb{tjc`YhR~bH4_31HXPCcm57vVKR3Hgk5g5*BO9$5Wb2V^+dJ61{& zj^z<9)|K@vIg%T}?(kVHksjC8YC^78kL&$SkL$f9Z?$G%%B1abPrU2CD6nMIjTu0A zD zMMJP>25gseG<$>yrK_6}N|*SMxeXYtbJ=ijRlM{n8!&3a<{eff646OmHIUjd;5H1$ zsM&bohc?{XINZA<+U|^E^KdWEk`t$-rJfz`J)URD9is&IGu(SB`kskm;=oaIOg|qo z*8-DAd!3Ct_x_q|b>7;00|wBx$-#0mx}R=$S1+-fKSy>qm$NC-vWjPVr^hz0-!XNM zv9deCzB(8Ew;mB@QaKylb~t~fw>5`z=vdvjtAF8l{Q0w%-{c3hwX=*_y`dV>o@mrP ztG_wfL3C|uSS%&2ibg%Gd;Jc?;4#sgHWG~B>~6A_(|rc;ai z;YVR}=wm@NFVB#sW$}m!b!pU6!`|kT(AU-M;3oNyMpAp=}jJT}a2C*!jeZ5)D zGKTg<>kepGbSs9EzR)dEtlv2_?7DcoBMP+91ZN9>*pBGU(fUxmY?mLOnozP@3a$D~ zmmM4@Re{f0{m^wsIvqILSepNBB3WHyfH9YDEJJ+G1Xa7y@xSY$ z8NZAcK-JzAwN$W}P!B`{=FuZjYr0L)+5-x9Vk%f7MnZM4djPmU^<_6dZ@%2OY}M=W zhyKQI<+BL3FdaUDnb70V!+YHSSN?n-pC52dxpG6S4f(QzUp!y#5MnaKTJx%#|7{$) z`-$I(p)kJsgC}UCI_7dpIz5v6Il=*&eaiv;si7u+$p5E$iZzT0M5I=M3Q~c%I>m`{ zPmJdjYv+t`bLa>@k9B}odwG|pTqDe|S`LV`Rk7$5DzJm}LS&o$9oMT&yMgUtQDwtn zbGePzDHb(lK(Haq;DH{D1=*5Y&z?BhY|kEBKXON~iqAIhAKUt%D3EP>@fAL!FwJC8 zP(W(cAG{pMGz=j<93KTX!%0y~v9`eRo9A?6H7~UPLlZBK;VVW+m%FNKIAAW|?m)Q3 z7YLgn<=|+U{nda67+)|9kovG8R5)GY^bz7{pn=p2*%J{pdN?WC zP9Nb~vGbeckH%tFsQ4TL@9pp|&xc+w!8R|T_Co%?IIogl18Mh#5)D?-7-#8ymms z&TsfLKx5mb{C)TQ$e%cY!HI~`kp%4CU2Yxh=olQm9Lbu*jKwRIjODAvvii@rCmFiO z0(N%DC}3m;!#f%W1o;aPGhoMMvD^S`e9W#`WEe6LP>4*vp{CSMsb%mdLrb_dhb?p4xA=mmR*Y?;!%wedi;L%<;HQ@|e8J<>cirY^UL zJlz5nQG0x}&W+*}6@W**YMvqE+3^7SQRV!2T2QYN>oYUUq6@^g+8J~%@1~FlDXW#C zghyaz*43MtH^fr+n4>{Q#pC_Pj+zaM1UstsXcUOZ{dN&lYPR^+QV2yV$q7_UQ%QyCprRUKxp{UrZT$S8;E0ffY_wp&+mGxREbd z5iok2``_-*Kj$;{?pZr?D)R&Q$A&OBhkEaK_rI|*x0MX*pBVL7k1Xj3bi3*oXwiw! zFT1BC!z!fef71G0_wd`yZaKiz=}#PG{A0I|bw(`xV}VF2Ktp?VF9O_GUHeBr$mbU} z`oKje#VV&p0km0YmmCNRw50c+8wH5;vC$*(mP5QdpR-r&>1eXi$4{=_1T`Uk8~1IV{A35~3$bt0 zHFj_`%(6RdVDnDz284i!PVD9*U{mMbJu?=&)S<)Y)$A|q(WNEO*cr3*71+Wm^yiYO zUTuDr4Xn1SN;iAzAgos@h!5a3&~4+ofm~yx(Uh=OyP`OYUxTCgm45ymf0kYG20y(6 z55vf3yJA=TW#vKMA8?$6Y`lLtdIP_3PkIG-HZxo(}Z?iGJ#FI8f z|7_Q{JfirD_$3{PUrh1C`&0FkW zcD4YUVQ!2#C5kh5DrceLLbNj62fFaQco-4^a&gobMZvE;d#G~JWu^=0_eR$q7N5yj?YANsDC2oG0vX7_O#3)mOxe*kbVXT5S%TVfytl( zvSaNoaph16xW6NMY+z`}Q;xC^n?cVHML!+}9L8#RGKz6KLW6`4AtFcd{D24ap+6W3 zTXPjR-3&MvjvuA0NSc$LV!RcnL<7-L_=^Fj@i=g>i})g307OA89i@;oett0!7sCqG za2RV{`--oKI)33BeGD3pvHI+2Xr6^mUojry^%~I*k-~9+A7isR@Jf(xCl-0Ep6q(6 zUX8gWy2jRA>%>G6JcTPlujPQ4ihWe%!7f|{cq=&W^>ZHW;@45DG~EouIuQY~u2r2B>l}hUKi-drL~RRIERK3VM9R5|evOOr)bTtIe7-+F3Y)KV>zZ0lBJ$B@{80t%FVRIc+9pr~q`aWZv&{=Kz9*u(NvMI>?c{&-kLeC!>E$6l1&5z38gF%;IZ-eL_4B zsIF<{N+<|@jRVlBI9A2fsGqPSJQoNKP78$<)|l3?A%@_MRTdl1EsTc};;UhoMAJ^rI} zc`o!*=&W<&4XL;;)>B(?UFQQ2kX?Ea6c>uDM)#t#u89tQhEciCd_9UWkBhCVXOfHd z(mI=+RO+5G7ZcT&KcTLg1pX81N4aUnGg06Nhu7Mpdre5vT=>S}zBK&6dh8)tt{Zj+ z?fwf#41N!k{ws_Kx%VpU)*|;_;+d~#_9|CQyvgH)*vn;j?En^zgfk%rH-4#~DJ!~17u1X^z&X}HYP47|`79r)e$LD}x@NIn~D3)cL8B6dvH zK4Lfj1XFF{r+*E+pJRZI(Dp~<8L=DLtMB;cd9OJkA^LdTod0QRJkBH(#`zfb(FEgG~kI5nh zH5;goMXTBw^(K3Zy7?A;>aa*#WabIjuIGhOEURZ4Rzw3R9pm+~ctG@N>~-e&RYUZt z0G)w1iH-p-KjBkdf!5bWw`Ja@Qh%`Nw?z19fk(T+oqIZi(X-u4CXjgPxHP|yo#QMF zCis2mON)i@Qw`{@0uT<1Kg~@4G0}twR8JGJqrX6$(LT@2ej;|nV9LF7q8B-b#5+G8 zE{bAt_e=wLeP!dc7yLa?9SNw{BJB`J&) z-5ft^B-Welm{7eJ)UM*>OkJcp;JbzdC1M{TE{Jd-p!&k{{hXZWlEmv!CWiB1^~?JM z@Q^!p$bmsO8Ncgw`g5B`1yo-b6PkGa?r8dOFG5d#B|+@S)XU)cwAZlqu71rsNk;u9 zh)TWk&Hnsj-)#C;*Z+i1Q7;naf8mzqO?Q7yOFPJueF?uX)uABYa3bpBQ20mBZYQMv za<7eJzsi`ed)&{Ti4II#PpBcs_txWNefY?32yz?{dfu9|_PFRqGzWg2rRM<#>$N4hPR*+WL!;rhIom-W#3JU^%ofV4?$(!v z!yHTk-GYeU>}yVApk1^G@`q#KV^JW;pNblgRs;7e%**&9(vaxtKzdKXMQJA^MTz%gcfY z@>Qh{s6l>TTfMcAFfjp~n?WdvVUgV%lYY6Q40_zib+gm!Xc{gB6_1#MQ7thnT+LI_ z^<4GUjt!xO*hZiO{M%=Dec%>3jr4|iNf4Xt%aPr5)U$kS7ul{?BIQ-UyjYkg{o*sJ z4oPtszeYgOpj0u6c844NW%<{)Aq+wYlt}NeWQFPqqI;*m*gt_FM?R#g>)$`>F`w{f zTL46U|@;iQFSF)LPI<=jQ(oP7_-_Ja1T>L_VRf&<$nqDv6~aMT-)ZC-Z?s#BZOm7HShb#^xpZLWp@1T`we1kykcDFfhM(Y0=s`=sk7btBH#drdus^;I_xkz71iK9ezayG27E+k zM$LPI9Ec%n9Y(gWjm;4BwJ~4sfXDuys{Hr}pjGuxov8M|~hTXjfu264CMdC*VWSMtmP1Qaz^L z83yG#vwc`+fPsZf_vKwz``*g=4)RV!H!oHtwi~Pmv8`8J90m9faHoc4Q2^u2z=Gv2 zixvYsjR4Cf0Skn?HSaeD=EXOLq*Z0J(`qH61I)qos`=h19xWM@)%HlVJs!pE;U2k; zCpS|h!@KS=+#5ga75LE&wbknWt2N!Oa}Wc}f);Rx^p^Ue*ltUK-6DP$lSF12WQ^jFg0g6Ys6IYoj2> znK|;obK*Bc%po?M5pS>P3(ndUzgxf7N|*-fPTn`V-P{ z-<=3~c{_@;OYycHle)4c6yqOyW}D*u0O2(yK>I!JZ#yPG=G7RvW7W)aq*k2hnCvk% zt&QFFnR2p5*&O2ZU+6}kU)?{nf}++p#IXop&br$q%?FHTkabbZW>5%cVcoLg^! zJ~^7tYNi7NWkf4JPh(@WBs@{Hp%E9U21eG4m#erW>V2NWi5b=u78ixNI!4^wJprX9 z)@iaxcg8b#_&)1OjTs@%21V-F8mq-;Vh)6`#zNwv0#SyrAjxwWB*#i{EHE4g zXejVlZ79g-x)!&S^%Ts-Ne;+HC+-L~Mr1qv*V#3DgVmy4lIO?j$#X2XPDMlNjW9kc znmos9t4i}6SF6`NhX!pdmjQv_!_o1O$s5p(Gok^q zLxaw?6S7ZqoL=J?t7CGh&qGBpqo$x5RrGldRHGWuf+$4T4n3@jA{Y-f3%g^G_TUs5zR)g(e7nIiMEN zh&})XNgm_!{1b`|ujAAm$vN3~OrESIPK|X?eyBmtKAj!Uc>pT?l8by5bUG&4y)ovy zi2uLviCjgMg|d9;uRD`IWcJ=3>oO&$lUZE4c-C_Jsjc{NoqysNglB6`p(>vxhuy0PhvEb*YX zmgzOFY;*HkvAflMZ;ZKL1uCm%8bTQy<4Dd)_C8|YZHbXM1oVye=tkY|XAWnd5Xt*S zfdO}5)KFxa1yFL{%A?{D^=|fNMz!KJ==71b6^5L8&#p<>aJ!b+`U`8+{lc9)85bPr zk8(_PWgZ8erKPT^$94P4Dvh|Ooc(x%147rt==D*cs5V9I?kFB^IwP^uYT2YiW61w*DW|o4nHrXv>WtBgGT^g-8D#=~DzW|0?Hd2mg)h<)The7lOZQD@I>szKds z<>m$kT0+1C)HDsFh4km?O2o2rpN)ma>bG=!{HlVU?(&|Q;q4Cl!sa#NG&QRw*v4r6 z7!Lb#glf5ir*{2nXO0}!&E`Ed7C0k{b4|d^iw9JF-N3+4y_0>qyd4O)vL*{N&3c_T z?^Q7xE=H5syf;Mc<|x)>%9OS7xUm~f(1DxJc-uZ&-D>E2XHY~MXnFmCj#Y8FJz4m} z*rV+2K%Fsy%?lJ&9XFebAYqH9)9_-WUZ)6IMnIYofS| zTsNu#NpVd^8~76BnRxSoXah?p-h4b7AXadkfiGc}l7|@^Xli2jJRsD|WOac#_2!6( zQ|*vw084@|L7MpE)O>6dAkFDfn-#@L&6FvS*rR%%E?MtL;S+ zzcSM;4)tE^M6^YQzK0Xp1qGEnw14C;_Kq5xpxFA5q3?Fjhmo7@voRlXdz;Bds{Lp0 z3s~w!i2kz&wKI5sy~fvn&Amm0?(Qdv&62d_2W|nc?nI`Rq2#gms1`eRQij&=9RkA9 zTl@mY6QU228WDM9^HwDkxw-*ISO75)xD#^IAn5pL)c@1TQB47ge7e+mq!5|&)C2rE zuM9?bUL17H4Ikyc3}`?iu}(IDumGO+`J06!^0O?}_dPDEP*6)Zw)K-NQzbBA+$ zN#6uJz4|f~9HehDt{$jHCaVE~xwoUT^e{Qv28iqhOdbnE=k1V6=i}*l3x# zA&ZIV}pk1*2UBQnU(C?C--+UyAa1&oAxY zl4Q_r%YWe4gjDE8EWMMykP6DG@ImaN_jz<1S$)iHx<97Sc>hT4Gj9Fm()tH&re)j*SU6 z0z<*!ovGniN?KtXMBdWs;$9wOflr8m%e$$JfK=DU0MmCjSN9gOL9YNuC$icQ4Ol_< zWu67ty($*cGD3WU2DX2|V6PF5%Yov{Nn{Kqz1)cE;8M36=)4kS2~&qOnC4>#8aX3| z9bZovoEQzK=Lv%p3t%tXN3s05F=mBrB=dMkgoSEc96ib7;p+D}f~%YEtv0T@)ePQ^ zG3}Np*6v&~8Lf|od($wwr*YL9<`58zpI;0?GU&Upou6&uDoX|1MCsmw$3y;r_v>-F zee`HVg?XeJhLQ@<4o+(j79vZ}(00eBSU|u=+pKP!W}qoVLt82&uDW1^3zsj7l|Wc4 ze8UV6s}L1O&p3G_9G6j!-4@c=m6h)HTYu3R+Lo zVBtVbxVr}YTVSeFVhm)ShT`JFv2{*7U=h_Mtm)iZ?z=x1NB^=YR@OX5(0W<~57k!0QA?WHTCM4AM>? z_OCjQb;zgA`u6r~z=tno>TmJ)6<*?1eEyDWyYl&Z*A&jwb?$8Y&Vu)Pp6)4lKQ(EE zz>4AA`8dyi=MkUcQ)jC6;~OdJ;fwD1zx5b(H-`1Q?*AU2KXj4`t%EuRoq)VRe{g50 zig6N&fW{j8gie^;&2V>s`kC!$hr^wPN6#Qf73h+tX7H`hbDV`oy{HEjV9hpO4CT<) z3z*)ZM-4Yx1Sl?wN0ftF$JtiKy56>8!1mVYHO)K4ZjUx}!uqIfi~T z;L_m609OMTaZ8P4MWxp8eH+x1YTN@{8JJNsK#xwsqdFk*5JOKr98r^$nl@u&#)R`r zE1c7sTl0!Q9lCy@}d(K#}sUD z^`H|lyH!JPsJJ!{o?R1<1A5^eTi9ze?g7abFqdQG;yp7IT@zsTKq!;d3M^N_#dxCrye06Yal-246Rz_*TODgh;59en}i|1H9j*7xYasHGc32LW8U8AToCF2 z+^Rs3rTAJG4G1kD?It|{Y1`&*NG>qAW)gZB6$I2C#<`YcJ^^4MRvE*IWnWG;q}{hm z7anCI5h12U5oZXoc)>BMpj7mP;5pe;;VeDR(MMl?X~4xkGkbcB2ENX#`NI%?h%$}2 zFbcL>3ExyJ(#&^O!FokM5^e{@7n~ddYF*6(v9S_{pj(XLM%WhE^eN}n0o10sizi#} ze=>@3%{)6}V=E%M3~bqw(J;kMYt4cm?8`4qV72ve?NQMH?ws2U-JG5I!+egc#^Ima zIE18S&Wy=e&1vr%H-mHW??=}{6)C--0k0Sc+d{-?rR(x$dnB12`EShhVMsweZfG8y z-J1CNE~w>QoZk5p5K{ks);^l*-p^VRz7O?wv;Xn+e$^jT=1sC_sFU!$?|+nyJ!H?t zdtFm<_Yz3nz5(hJ?*EK4(`e2=`S}aZ`L5@Gx z|hk>fHVRD zIw{Y}ZZ^X!)p4~xkWl(Y$QMLX-^wl_rzo;+6e)7(u9#Gf?8$5<2gh7OIly;27B!M>A|+r#zY-BM?Nhqjo|RCq;pzxxlHu zKvFid_2P58L8Lwqv>;|Ijsgq#x)M6Ns+;yJ4?|uXL)Sa)`^`0425H{S_oaz zyQ9FshJe%ec`yo4(Rgx{?<_%N^361y28`)u3l0Mt#HHShmO&(`jwnPVA&9_P(K{fG zW;#qJt?U^w3~L-eh9&^0RNzRy!`kfsvI%zsXf$tlC;#^^U4A)uk&?$}bQAKW|z2<}L>{h;XWaP8*MZ9C20Ns)1g z7OgQWihiVWsTS}8+;LgF!~1=8#*8D}^m^}e zPrQw;ku4XWv@`mC&SSpbQ|A1k-WU8-5m!_vz0?#ko59=SgvvH!&ozTa zjn4J5iw(lrE4eSukM~{_#d6cki{rs+u)3f+yMk@d=bEpN384!0mfND?Yrsl;W)7A#IfW)D$B5bH=~#YX znbQ|lNQ^|hW<%Qnb!RsU=W#pjA9O5^zE&HO!vg@g#};Nm1JH#kfa4|=fDzHK|BjrE zMHQN2&bh3op7?IB&UFHO0DUFf?wi3f|`B%2|E;fo)(?;g$}S%u9p=Ajxj>XWtb%uoyZLXagY zOe#DVb$t4yRC0O%C};KJ=vQGUzK>hr{2%b*`y4E^vw7xYVn&k9bDS?fz4(}f-Fr_s zJV2c0l|K1;UXyJ;Hnh)iyHSg`ljFODz*-<@?P?&8duvDX-?k3HLVTS5aPQSGXa-^&I5HC<5uy`~CW`oip6~tK z-?Q)29SKF<=bm%+UVFXowbx!}Uk^{!=#_)`9Zt=^>P4?3ZW{c0wW2@Q?|NNjqW|p8 ze)8*=-2NB-TnoN8-(7D|{K}i&x2XLO-le$Sp!n4{J2k%+*DDj(%M-u$rbG3+{`da; z$2Z^o2j8w2D!TvMZ@&94Z#sOxi{J9+f85T`@5cXh<0|vG(yN#I{qgVq$Tj`_ZiO5F z|6gAJ{Xd8%fA6(~Y^2|J`}~8q19rOp1Gnoxbd|Ao^@netf9y7GZuwX?t7m`o_W38T z^4cZi|M>0B&P8n6{M}wb{F`O7e&TA@;iu-!zj*7`q$Z0MZ@&NU`wNKw%jK=O;qN#>@IGt))#p_FEi-@3n19V=bB`wf zhO2Alyib}xdq2_inlOLbv!C(jayPdO)iqaM!R9@jyw93{|GD(-tR4TcZohEPWc|~J zL*Q=9*I)AdiX(s7w=0JHSI;jY|7-WIK=R-CcFnjk?N%xi(!h*v(VKY#sqI0NolHeUIx zo?gqy{#=vZwG(^o&faoaKkeqV%k;CpU5m+DUFj`TX&1l4&xKvn;+5WdOl4i^`G2DC zFZgrKm;d~^^zE13yQ<#)rEm94)-|d9>f;Zu|J&y?;BLpiT@&&(mA;%df8+aaApYjd z6Qh6o`G?p4yP^KdPUx$)Zb{lOmX?M;j8Je^uzrEWiU-=e*O zHutU~xO?f_wUt|=>vfAO4|Dq+OT}&~;Cgi5qP;?}+kE*CYkA+I{e|1Rht~@iwY#Ry z{#?7Wzv$b2(!8e1+p8AWMs3f3#h>eai!12x{hAg{mDePCEe74ZZOs1KZ7;WO*E;Zd zi}u=?zn$QAZOZ=E>+i0e+G|R$#eenZnmX^Z=6#R$FFo$jUW>t|f}iZ;S{mHmPrRnw z`?Puaz#d%hTlDmrE3el(?(bUslzZ0;iB}NO)7u+}7wg`9_j7Li$j`j`@b~=u-}~g_ zFaPY1|LBkX#Gm-nKlZ2o{9pKUKlW#S^e4W{hwvkxUpdP!udB~*Fn;7Zf%NV3x1jd# z?e+Ad?_S^9x%2hy{`zQB&GxJNnMhil=k@>if&#YBuP=z&?eE*~p6+9~^YQKZmp7Qh zN)I?aT@XIHwbB0d!{{G9)A7lj()#rOj0V5q^!a`7$f%#+VZ|Gxbw3QdcK7r9RrlQQ zdEBavJD=W1e}szjPj}o=0K1QFC%*1EOkL?8>@V;A8Y8~y|LJ|q@#)J8($h1?;rsr6 zx~#SM`#WZjJwLobLGcbm2{U7$C=5EO_Wku&-`aB#A6z527rwsr86}@x|NHml^-}4F zH(tB*&2{gS+mmi!JRKI4&X;n@%NKwUz9Jv`A;t&X+)I8>u)apyuSLQ8=ulZvYf|w^UUGy z)8CJ;Hd(5kuP<81I~>5z`0&M@mLz!~C9@quFpHSy=x=%!wy*EKCu8~+rnQRN^n140 zoOATD{$Jjy?|XWT7uhFnzHLo4b~=3Q*^pW&`i1x_4=+uxcT9wz2J?)S$`H8Poh;@7)>+aGi-v5 zD_>n)HlLfLiid{HsGgTI=CRp&h^vYs>heCaxD z>ksZMgEUaNsP1@uP|{IyMZsb^kYV!r(xRRk2ZWDrnl;;~-J4q*x<@zD&;D;s#2W5o*46si!Yl&QSjN_f58(c9yyc+#B~^inQwWsX<(fE>TWlnhTEba^o;^s zj5kI^>o-^Hp!mn9ERIOxi&FE^;|_m4-HWQI3j!Rr4%7b3jkUaTo`_xYOsk*zS=xZ|>2+o^QPdQj|4I zz^XMBYWvJ6Up zxaY<_aPpz=9;i7_j$~28vweL*UTgwGaU`yOdXsu1e)x>@x6k+JaCVhMhi%#q5*Xvi z_%#mmCiHC4c`|wQKl!AmJKx=>Em57k>&I(s^v~|P7bn;ANLSn9xo}Gt@D=PdB)HLw zJJH>U`_D(xsbJNr_y?uy#rv6~gO%m6=U{($m(J+V9*2Fcw`y8s1kNP!?Sdv6PiFE2@a@j~+aeKbu6 zcxrm1S9sElaHGwch==81G5b{rPO;2c7N1Y94zyy}Gmn z_AKeM7h{AGI0y5$7a!R7GCAm(r-I8jH@fiDSn1PXrIozRXZQJH+LU#@x^RBPsUy$g za(w>yj-NYy`o>G+;GX%5uB>T%8z0AKTzus1BrzE^HVljC^6qOPs}{DPB`d$cv6&|r z=EVF^SMM(^8ZKp0(3WoH3A;Mh=~-6cTmG{gT34)H#PMh^aaW5EufLPrN6#ZQ^W*+J z+-8U3&-66;f&jYb`O@%!%iFte@vN-fFb5ll;(n0e`sPmG>uZEKG3n7K{gcK=H?8ja zWCXOAd-KcWJs+LmyL$a>F<)KJlS{bF%FHRap7(3k3{syorWgh_`A?E^9W}MXfqZw7 zs$b62H%R?!B~ByoI4_CQZO;m%IWKGOF56v{ zi=W?Ix9r&^R;6n=NV2+dBm~k+yz)QS$y-zZ>yz?Zkd~H(g!UfX>0*dge&2Z}dGZ zKe_XMScLml3fWWgph>uS{NejcUtwgN&87LRR=l;}&d=oZ{?56ifWzU?F5_o+D>CNV zk1IHrA3EIcTXduSe0smET)<~{i$dEtkoU*s#@gC&ndzWz)a1O8yU&|`dyN==pl+V& zdG<>)Xh8SO>ggga^Ms|(n@w{X8D{wU{-#x%*~(wa#MBXe9OVT`SpFy1*yT zTRh!+(~{&gj}K~)c+zA9X7_5@ljRUc1)K8Jnh|d{`+M$lnY?9!gZJUZHGJ6|o8~M> zV3hq@+4Qu%2fU{fZ}0r|d~*Bh&IwWs!+h{oA%it-D=PpGv@C0-T`THI%=3@#@*(qh zH$LN1+~QB?6W|d=v>}bMTKA;Z?{8MMn96;W*5{L}{j_Tla5nJaT~p&5j_ofj${fZi zR`=%O!*H9&=fjdVttunNm*UTCdHRrl-~RIl7uK|m=FS(8P0|cT`fxIwQRaD3=qK0H z_^f{|jk?uXIMLU)cdQx@F6iw$jVl%k^5&Q1gA$yJ6TK7?2aGqG@F#5yyD-47W+QwI zYEoX*VvP59o}s5czO9#CR``c?-}DS4n0$4|rG5LxLRGjl7tleH2{y>^4o{h6JY#9C zPVyL0_?VY9!|Hj~$kW_LHS$;2U*C)!PQEQeLN{Mucg<7NE%&FvFl`pv?i>1&`FOgB zHo7*4p(QTS{`46vqrK0K z%zMo@Mp0QQPt(*jI+~MmN&pI&7@*5)l^!D(O#&6X+P8z!%nyLwskRCLYT#LAd z9qPv;8n6}Mv}OF~kF=R&^>02|=5Z9C=p6K|gC@sUm!z`#Yzuaa474bQ)HC|=em343 z-uKykf3=~H#d5(xaS{t}@T_C?1m*LKQ#kU;v$WGQ_sD!W}H1B+-0ILMKmjD%rx-h~b`BN=~(BA9QWMN}ueCV}frC5~6AFWn0lY>OZ<$ z&7)0a{qt$C|Kx6Sa4n}eiNGYeA(q(i!i2n zpWUs8Pr}J~0oToN#d~IU`s$)0+e&uYy}R1=ZF*8RcT{(OmKFpU zG%8IL@9S?)oR6+&G4DPBasR+oXSX2#QmThhw#Zy*;?rN$lJf2 zJlro|L>tLvb70t&VF+ST%QttfYP&kL&2(`e2GKM74U>AW&oJ*^I~>}bN~rGVjgwzJ zn?1;Kc(}@Xd%mh_T22GxGK1uLF%4e4x^!jpdh(w}X}>B?(ZYO&o{hNr8u*hOPPaNn zC7M=4TFdYZW3#VTZ|_!MBpI(s* z4KPpWSvaz*tBuP- z;G1p36DF+GciI~UcpU`1eDwmyY=hS^`trNe(fYwR-Yrko<4oV9l1%^3?^am~YjgYe73vO$MJ{bosW*0Nm~~iedZp zHKMUsIW*5qld_7SlEi8s;QYz6{LIzGG{HKvrwRal;ZkI{+#@+JR{*zgv zYo&jf;9VZ%vm2~0?{b6XY|m9Ru@~Arj*sf&)3OzOq*=H_THWuzdJ!>jlGNxpoATojc>cUoCnZ0gmOv-1RvNY0UPxXf^&tPqA*2_gRFx zh;BWYILp{$MXGS==o?6AVMF;T>^ycTRM>gu|y5AfE-?cE;cOPZ>VDcoXs%z?p zir#yuT|3pV12vqcqutMo&Z0M4nNx}w4t}*QXV1D|wmtvxxWAtGq{U%u#?GHMJ`Afs z#zXY*1DiW%&FLe5vY8qN;WPbV8O_+s9w)s=EzW<#QrpE?II)@g-*Rb1uK-kYd!a4t3L@`~1PdnW3i-SA?-lTWD-tZxb{GA@2n%&3IAI|cP zGtEdRlFfFpdUEt+St^*dKNtRFv^kpICCf(*^xb<S2QVA_y}Y0hKCed44s@U~bFr0H;6t>-G)Y)7B2;{4;x4okBA_~J7tIGXO`ml5}N zS+v(<`&P7W+GmXPUu=uZ+e_7#uH*^vB;LfO>GZoBHyS0cJqzPoG0 z%h}D!Yg}$`F=)69ZZq*b$a$yNp4!&gc`dEkXBF!Nx>*e+Pzh&*P4w^vEp!g z(R7qkE?cKRqoy~85gFv%QB^1 z?e)&%oxFFmOSr%|%3&&&@qPOY*?SRRJf?@9e|BlY^zrxs5bINnxA}z^nhZfHdqUS; zFWccNkF)(}bdG!Y7DU=1k~sB|az^p9+)96=uD0_B^ugHqusrqfUZgOtW=-Tpv&%2; zjZE;iZ)>F9x80ciU6tBo(EDP&K|0;q-nr++@6+OM?%ImS=}D9Zb6QQ_?zPr?x;=%} z-tU`VsgKnI2*%g;v8v2dkc?A&vz2^L8y~lP7SY0fc(J7MzA^GpSxkDd9Z>uXtHz&x zujUzM>^gteTx&e~QE&7w(~D1yy;&0;VTIb_1Q6*vNM%gDO-UoPSUXsT4Y|N`{D46# zspVQx&BJ6hc!F=|43Fw0YFYoumnWK!+DRO6tbPoSy^%NX`Y1(Nj%D>(oLB&iojLGy zjme9T3OJuR3bxC;qd4k)d$~&i_TJ3GkE(EeTaU#Iabz>+IGlF*j@S8>FqnnJ`+O%o z2l3^8p6XoE{_HNN>27OBHZTjEhHb^LY$>XvF6nJfHD39jVI&7TD-3({aQ)*3ElnSc zNUO|s<#lko*%C!t+xwl2vwJ?C1~(72>Q@}!oJZ5*pKqX#Mp_U~AKs0!NpBw3RrZIII0cW*93Ncribqwk_1vdg^WikB==r34d{Qw@`Ia;-9>S`487z9+ zep~&=h5qiHD0t~tEN)J4ecmM+0tZ2ug|1|~3d7Z6 zz}@rCZLv>5w-(O@Wga=`o8k1DY}@Hc6OD?-@S6sKN&9zh!>KByDO-Ei%N@{yoM$Lr zzzsYugEK1giU*^fqfK6BR+rSGr#kOx*Kz}T^W$0HTAmzmc=ddEqAfqHZNBAE=EW!5 zE7xN6+qAhgF#f@1l|!D2W?HL~W0dz@kN%cJf%W#G($Uco{abIuKbn?g*a-ML&!{n+ zvVlK+Mw!3++}S?t#ZwV>5I;}Jt(Dg?56sD`ie~gUe zoKQIafn_foF3a%qK;FtoW2V*1deS0P=0kXMqZ@TAAT%}CgE?NpoJ6Wp*s2WOc%W_m z#yb&U=`(J2Z#tc|jgFq_sa;Yxq`HDd^I?5wWBo+ zg4bfj#sP8n=}_w>n4)asO~>P0ysNeTsEOyxTe6Zqak-50u#Xd~cfi4P*qa{b$uv0c z7x&5bcmb6usk`l48^4Ml8WnEYN29ruC&$@l9dwb`X6eD~ zS$n;%2d~PC^`BiD-@0~W{MkSu`~9vwX@Ht9Cp*H6(+IBjgr)p7F z(F;<08qWP#q=~m-(W<-oB3%j>_+*v*DF|_ag;g|clm;?@XE#xpL95n?^N1h-)=3;j0DFl-KOPjlH2XR^0)Kk8*{BvcX~c5VpWOZ5DBdp8-aMm&MaRjRtlN`<2|mP8 z*I`+Y`4yu_NB>@3))9<2*tOo9Iq|Q2D!tt`SVoT5d>7v1)(4k{rlTagT@Nj)o|}hn z%yJ9;#ZTYknbEdhHD+gVxQ~MH zvN+`ow)uH$JmW1Qsc&$?5&s_Lo_{eS9?fP*H_x#5*I_Vz47293xaM z79$@F@5OcIO<1&_BFbB&5N&WZzKEZEanQJGftUYVETCs+w8W)(2R-mMN$k|}XdI?- zi$rKkCzmY-m>$Eqt5Z3t58CB;;=t-};td|8F{|D^aX~AoJRiul9+rLIJWPAKCQEpc z;C3+GTW)ss7dW4ECZD2(#b@v!`FXc_8WaV!9qXO35G|gxV~X~JF%C{AHw$=PmU~%& zVA9y_WJFuBKy6PQJgsGGd6#KD9b3)_r>Y{-a=dJ>xI8y}NTHGA2|gYgM?-uQDd*#i zgR`Kvx3g*&I=Sj;Z9C~We5xwxFN}6IIoAjM@K}^_G`^GYMn`L zrt=@);luIF>m;^lbbhqRavazhiMW>MVMQA)4yEVuNgtF>wk)uBi`coR^Te~TEE4ze zt&DNwkP<4jEiys{Jzef3eTlEe%S*w~XHsVMV9q~g1&`TcV~k7f@A>X?F(*p$Q@-i7 z+{O3H6B~Pao`o zhh=(C6O8Pw^XW^^w_Bri+|%C3tM9>&vJrW1l!3S$B)VZEKO2vivvGfCT+a^LwQBa5 zE`-C*Cqrxg>FGv?(c&3y7Imz`9(H-<#qYQ=&QEI=o5lA>e5-CDe~=cP<7N_`#elmv zD@h_xglG7=INDYAaH<2F)0UgU;hp4)r$=6m3Y*^2XayeK#vhfqS{1LBXxJ=e{48qw z2fK3v~A&Ao)C)lJbha>aLb~{)9TITt{2u>bmyZNvTuTi^|m^$XDL&NMf zeQYjSJk#@4GE75Al2*i#mwBq9w<6=lEr$rY%!*eS@-&ez?e>+)Q)xmkWRyfd!ywg@!d#?k0 zt%^rh(*>ijFkaGWtv??W%~8I*GE404=8eS%xTdyhmJ;;l6}ZweIBd0+j+7&~4uG7q$lf7pxfpA9zldE|0li+<~3Q4CIZ6Q>{a_vFB*a zc{+1W5~3xiBC1S)ws^5Q4$a=HV3YZkY=tGsS9k*VY%W}U7DKQsHZc3sBah#xVZ&cF zUjG+Y#qCKxm{lzoE$v?L^z`}31P6xNWXEz^QE@BeQCc(g$ z^f?a9^VJR>Rm$-~u&x9LT2(3lL(&huP(4cOCzVzgm7&cG?V2nrd{<7|XQ>+N^2rc2BH z&>S{To~?@>`-Kh8mHk<*!nE+%L6G+*tfxD(3+2sJWsg=vqvzhQ9B=naFlh=7;a*tc%II8n&W7g?|^lCMp{P?8PU@!#qvY5#nB6Db=Rvt0LiHuvo%?9 zbnZlaaQn0uycsf%?)xOPo@bwgjYN6&kyet!W@XTuDUt+jDN``ItreHaDr>Nv3T>mp zHyKtEnZ;aT_DRk%#-%&3+VsW)<%ooqPaj?KywK=7{aM}>^u}AB zYP83v6T`=+MG7p&8^VJRuf?9t()E~i#EYW7diLMbMxYlc7cGK#DoL9oCu_XN*>=0} zV78sNY3&7qXD_qvy>T-=STCH*$MYUNpLK0N0ne66nw>;n>m2w@V?D*!^x1u|_m(RT z=6koxrq#PUXW-QO4`<*UH(^pl(_SzdVGCx_I#~SUR)XxOIsBYu0`KzMMqyX0&-Jue zQXN`tMhmHd*(w_zMr2dTVtE+Yzkgx*r%Ev0e8gB)lr_R;(w)OMPQT>pve>X{{GCdb zhT#rrJEf6+7&EPp&yTA;5`=Yfq}$cz&ELXfPs$1vb56!MV5c0E)y0C8g>8M~`6|rW zOW6bx!BL;q+QlhltPXbh6D{;nGg7_m^wV@X^%RXI=BXmNed!gTM~Hop6{+8l&O zd!xQMla%T6fs^b;X;8~uw<EhzUX=jJmDwlzAkCus&d0)u{=UqA*=OAh zjbp1dGQP@CuqH9GD4trTeVQ>TdG8*sv$652c_h3^BU`{B^4r@S@mWPGm}xMKvUm4z zWb0I3yEP21EMs0nwoZ#QC; zZii^p;#pbYLC0n1VwF4Uy7_FrZ6m?FtF%hQ*0=F)?foUyC~5xG7Y?gBGg9*_&f(VH z-Nh~E<1K1g3q0393F*IcAZ4m?V>4CjtnKA&4UH4#G!R)v5cgYF!OoVpPBZ4R1Bn)1mt^g$fU!LmV+K*qh5v8H($2U?v*o`?50-nYP5Zng&GGc) zNL!_yI1XgesObneBolpVm_5&yvzaOb zmgR!|A_4dodruRBQS1J~qZR$~RQR-9q37!Mz}@d6yJ|<0XYlTh8RO+H$oXygX)ikW zRw~J*Em5(&6G;?Lhv#Cuy=gehi#q(r86IU`i4LK(y@mZ6c5^4nw1}76IYmLylKewi z-sNkKcK8+yaGFiiyH*bV`dp59^&F#y2CQ}t2jLlv=E+rzPOo`uRQ5TKV|=xn-7QMU zbM+k#QAbm&>>^*ngiPwP)jW+((x-t$*SZD_8}Fp4Pwh z$4PdV?$fI78b4a-CM{f*0&Qqtv@yMxF`BJGQBp8V@GRyJ%ab z#WDu#4Km(kqxtXErlRS*gA|?39Qtk+8tr=*lf072@SbKHr5J6sTeuYN@F@N!hdc;M zwE6ndneqbe`JC0QulmJBepVr?`7`$T>k5yu4mwUg=*jDrpPH4;56yeRvRM@@JXvKY zeQx$y6~}z2zgnBoSWWthj_B1&9;DnJZH}YC#9{p!!Ts>|1b0pjem>{jO>ffb;GESC zS{hT&tgAN5gp+g;1H4eT6HY-3Mv*AW+}rs@^r%{w*1uKZcuwEo(&w_IFl?W|$kR7} zds+^58CI46vwRC*Gj5KT!Ed}WJh;?#vovaG+43Y>bV>-gG^3X6tbG0Ajz!L7wCcv4 zHGp=p1MY&jEFF01VA@`Ub27T^_=fRZ}2h&L8?OxH>thKgyRGdxcV2Bs<>-x9S-n(sk8-}!73Cts){JblW zZo$c4&*%BWuNaMIUW^e|cFMLVlKpQDg7aG~&JSi4tE9%4%_n%%etT^Cf{*+(%yL8 zFA7Nyx8DYb%>a03%;L9ZBpln^sJ(IX5x(j7GLowXYxQLZF6ot{#TB}-bJvYkM!(3~ zm`QT6fYBG1M|Ja%$coh`Kk{hxNhUs*M{-s6oTaqhMg{KyL*HAO?6e-(=$$^r)m=6J z?cFLpCqZ&aLPkR`4%!|$!eKK)`QV_TeJf%;l9L{j0bJ3T)s!tNXP2C&pUo+wzj4f=eJfiv zz8ax+aBYu;OmKEHqju%B!_vsL*gkzeAa3CZ{7#h7sMXk$kf)7D-u=Q)lr7_&Usxox zb<}op$GNC16AWVT!w~n<^i_AvOYlJSBpg@CSkH9A`tW3((7Q}-dRD%MY*uAAq`Dyqm+UkwJMHjU_4wk>v)_O>HaK{7s8n;1NJT>PR^@D|K9Xlz)KkyhKw#iKM1FKf3959yFezsFvk4IE$@ z)rT8eJCR^-Ux1!X_=XeKhm)47dwip@p!ZH`-6(#W z>UJ&gvCQMNFm96MGOooo)uQlr+bPq&If;Dmz?mdQZTEy-YCGwoKf9)9`X~ST!Lhlu zb)x>WWpGiJN20~>8g|9$(~fB_Tg#4dxOfW|bF!V+JtS)$aN0?;7m?S|9Pq3O1&<5A7AoRmQ`e4*(&f0Oa=lZEnK>vQPPVeH~ z#((5>+Df8y-FfTN)>fC>joTh3yj#KJw(H3l4z0Vxi;U;#jg$ApbNpJ49gb;m5mY|l z>4Gq-VApjLYnR-(yN`!aRt6pxKDS4!Z;>VX^>pD!;j zrmkRcUhdjf8HRFL@0|${;%P8Jhh36I<#7jvWz3fsMvus1u}=KN zr*x~BEE{^%x%@?z?%tw-da(oeepo zbnARLqi~<|jPTs7hUWC8oPai3z#;l^Rd&mW?6iHWbhPMs6x0{L!tqGIsD|vwqtVcs z94Cv$H^SCb;5M)H)){QsQEg$CWI&h{sv=&US=`wy6UXz*^J`s)^*yVmT1~tJT_X>cDim zJlT)CIFHkvgIW%>dKa8E*5v5kb{gVOm~VC6x9#|mJ9^`CG~*jumqmw7GQ)RIw|hyq zTJ0{cl77VVc?ubru6GwDcv5!Bd+4YXkHW1M=&5gb(67a(yRK>rZjD*q8&$pWg#USx z-Sy0#b+c7)Y0oOIaKSxtO%Lk_hsBBLSp))p`;vP4T$TScpp#*7)SXrBYTcZH;@KGd zXNy}S;d(groOUN^IDoMCv-K_0xEw0(2E(`L9iOWAs6V>*Hd7pXt6v^deCVZ_@sVvdN8i# zrM6x`S^PqkG4QiUpu5rN{>wd{?HN^D2yeWeN5kRrn(-yg3eqemkBI`@fXRFj?tn_` zS^fCpd9gR|arX6=6#;2{Y3*DDS}i06#@Co$sN-YCmA z-~wHEl(N1(MOX7-l5O1OzWI^uAI$EzPt0F!w;Cr`8;FK7J7Bt5Aj z-e#G6+}iG;kvolp-fs55tMmwlY;Rd|mPg~-ds!uXyG3wam5MoV^9#C@pm=FjxIu57 zRAzOR4=7KTFqWgB6ZM~eo_9k3dN(`t_Q`&u3!U|AEI9f;53u)P>RIGdRu6^Q+uEjs z?cT;MPnQ8gTYd-Tjngw2uj&Rj%jIe1daE$^f*ppvL%bZv@o{@6W@}QC3LAP~?qRm5 z4cjheOj|}td5BqL&^sr*XLb@$6CN_o=7Qq>=|gi}cb%d$F1EHJFLdwZylFVU%et~- z*r2=5VU&gqzhZ{;YS}uPx-~k?g0pv+ofHdbJn@b>y@iv~hsU7DpS~OyxEcz@HK0K!x z>Gdj&_@wA7pTH-Q#&j0UA`@eSvIu8b#9zJ1ZXT3ezPM>|_<*s$MxSQZwiC-yNyJyW(Ou`me8tXe560M`GGkhD(43gg??e1;nKy`B`-=3|om&ctR zIO{{#_4&u}2I z%~JZ2T=UE-)5FsK^d!_NA3N_KmsPFz9iFWvNnuf-z6WMCk9irb{AQl-I329jUs`*S zd2kl%%+;i*r|v*O2J#!5#LCqnu%4tlgYBa`fPlh2@*N8A?KVQthRr^C(IhF z#2AkA@>N^42e7DuwXN0>7u3HRDQ{vQ5!BU$dTQ>DU%Ukh8}lSJ%8>ZO8n?%{H~^)cU4rt-FV3z$XOfy%^II9aD#B0NAmM-1!`R*4 z5F)E$$JRaV2F_k+%+|DeWFa_3+mL7g>*IiIxb@-l++$@Wl! zy2uPAFxRT6waWecC$6yG#s4%V+2y?-J=T2vVkXkv3Jm^5x~HNWKlb*lt7L(0pR-f6 z%13Jn{wfU6u+_rJpX6m4VHHbhRhmN!;os_t9+2MNb@DWiJzR!kYYGwzTC+61Oc%PB zKbu~q;oX}=CZWwJ#>L}h_)%O;2xtEBXlSd5M&-4mr)Q*S+;aY|gAaF4@}u#x`}l~C zJlv#?L-8uDY?Vbj8-p~14QhMGTQz$&s5oc++3pjb!fG@7JbzKoYTzetwBt{asGh@C zPh*w)%LBk0uB+8?JM`(ispJ!^?Yx9<7{t=Ouiz8#n-Sv+p?tfF_!A~X%Q`mA1LqIJ(#=F zb20OD#RzE!&7eWx6w?%2=K;Xe=4CX{I_}tAwoHz6+d1MmfG_h&?wwthW2sST*EQ_m z&2I9JdoLF*)2ofP$OyNWwb8Z;lU8=)O%}GjvT0E|h5C3GCG3#T+?feId6{)u#D%Kz zB<1_#pRvg%$kX~X*gHkI*LYdvYH(n=lRfb6?1RD%)@dfc6n(7>!rM5_Rya#4t7Y;u z&$CqrEVd?_CoHmUrwTSWvtRoJvDy|ELwEMZho|Ktwz3=LTH|ZGAHLD%!A5VfMLsJV zfge5CZowiW)>M9TduQ%!$KJ?2qbE2L58={&Tva7(+!)h{X-Ki;xKhuZLIPG9j{I{` zlAc-q_D04FZ3o5J<3BD0x$Fu2_3O!@9(Kha-r>`7d&Vfp+r_iZBy7mI-QPZN-Y}eI z-;KUiL_8}JXl@&B@X02_Vsz>Suky(G{o?&_8RfN^@77QDNw4j+!mwS&?U18j`Dgl< zj?)&@u6BZs7JHTV8J`+?JDfOP-*aL|Yb~Q3ZP>hA-y%@s@YLdh`O&H`XW?l83DdWY ziU(y@S3QBBTT7yPydAWpGJfE2_@!a3GS9A6nlZ1V9X{kuU=t@$=reh?dW*6m{d(a{ zE%7an0wdB|#t7fbBu+wjl^+idjPoiWqIC8;zT{6>cz#OHp1Ieq+{ylJ6#`OPznN^l zOs^n@)5*w%&uTF@18iJ$tlAO=cmc-~cPvW6<9P#g=Be zMcwLVIOq4&ik^{GI#NC3s+D@4eFPN_qGvpCei!~!S(XIJ2lmZb^A|zd+b!@nZf&YD zvoEpC<;I$(OnRI9^<69!O|@v$waj9)n%{`iIA6QPrk)0&*sl4W^=-u!-lugO&UddD zZnq|WYcW`FH|){F){jVec{;Nvy6d-Q8IgDBr4e zk?2O+TnD>!b^CeY6Ml{hdw2FkTNUWClu=ht`Ze>y? zAgp0#tU-&vSr@3s{({{25M1ZQ8vG6l0df+MDB`Z#JEd;bmL^ z1;y>F^(KM%FMqq;Gq|jhpL~k=^h<+%L;32v)1>g*Xna+EcA1=G;Z6gfYmK(}4SwYc z@ExpHey7rEKCPJ_f49qo`reUiWduu7H&UxNJ$CKsqaDj-w$h^mXk1o*6t_Y^4SgB^ z@oL$PBpj{bsj`4q#P1+&4qa4vFo#VjkgSIN3u4WG~&t7_$^6U~Wzd!=%WYt3RReJHLVCNZe z$=y}S(~RzAMP#AH?0b~12iu*WiHAF9E@^yw{WE%>%Mog?c0TjvtW4E?9}RE?^>aJ(YQ7~!*S~sz6a;jXU`Y$MkJcN=|S`0 ztZup;CuoGTVOZzdy^OzbeQ$=5CkbpPGHA(?zM?R#12rs+g=?L9Tn~_vNbf1MqhMUH z)2`kutR>5elYB=$qje*A^Ihm}bh2Hwa{XCVvdMn3kV$E+m+OIZa)IS|NDjsd{%jDn z%V0(6-mxQrDfM{sUW$~U}Ow1CIW3iT{L%zDcKjrMY~@Swe0JL%!w1TeFN%~>cf z$8@S4r%!{^c)hPdKiJ~-AL*GIHQ(vY)>E*pZUR&oZ0?)J&2p-r+ph_E#%gJMk{$Q( z!>`M<3Uqpv->HB%OP+2f?`U=18zIfRVb?yzPMSjLY@2q_!Nx6vg+|ic`%CME`+20T z?@o-3Yq*{6tnLE5MJ_a=_b9rRY?9Vw}(n8k_%%TcwZn_3 z$AQ+`sH#PF)!y)M-x&j8KWkt|dz;DFi<5ePW*UU@qReqL?x$goRjOKz2VE`R7gH@F ztafv6mEzmtJ$<8MBkyfQ?MQd)Z5-N(_^^*k-{#Blrif34qh6=ReEa9)=T^CJDJE%$`S@lfq;-$;653@z-}+F=>e*dBgIl>ks!MVeew$^CC=IG0%W+MYr>% zwT^pnC0)?Io%)`@VEP-ry;)E_{_+?gF7K9)%rn)Ojh$Vf=EG&$;i#SO_1xJ%U~bl< zg}p~mh6G-;HVxl(SI-$tS<=AZ&I(TjN12G~1C4@b zn~Pw2_Gso4V8~vw$yT%O!KLrM`OKoy#r7`1biWlrZ|WUsv%q-Rvv^CMVThN- zq&fYpl7MCzZEcvx3Cwf(d+6hn*l6RE2->oJ zyjXO0PBLix`OW67{8>^P#`&c7M8jfuWW{kyo0qY6c!^|DT)VJU^V+M2$XK!mm{a{_z{N(XOa}u}B)NJ)J8~#VJ}ntHooZg)<(4yz`hB z<)PMC?b@&+W}w9s$$5f z#>jWf19`*8(?>kY(tw$kvFlk-J4^8gv_3%-TeQD{XD|&DlqVM>f#iGq#NAbSg4TSB z*GAX6XRG4z&50{vv6%p`j1jG%!(p|-uKbP)Y}XrAv}*eqTbFqjU#t@0H2s}sgjcwi z=bB$YQ#!U*G^{n;sXd%@^-3O(+E))F@(7FVL0bHwZ*vd7NJF~|`}TzLt)8|E&+hsx zM~pMc3`k;t7HN@GRLLGE#a46q5D3Qg|W`xY$d(kEC%9Yhi1B{ir4eTlm9r;+A>~@U1GdJ?YIiblQ6pF|_YRSE?#OM1FAT!$oKsQD-tX@3FxUz{`i)CN;*yrE zYZl?2*^R{02-3l?{Vo-Z;?~(cC8Uj?@4R5>*Uh-MVDIp#3xj)f+p_ZNW1-=h`-&CaRw|@v{L}z=wjDL8xBS! zIlbEG+u61P#UX9VIJZY#)e#P$DBbH{)u;V+-TqemnI{VuQl`1yHi6gPWdgN)_cHmg zC$rJAs^vy%&fMDpc(L3%4z`l>Z7|@P4=C^4)#4H}iIWTI(aU;^Dq6~gM#mft&PNwWEH&HGtcz{oBfV)pdAR4!reQoJPZHd&Ya1x?1jL z{Er*yK@!5v)>3qf)a*He9M$EStG}kH@dNyL5@)w6#|hL0FPVW@yW~CnqibF5PPQ)l z8fQ0l{Ti9q(W|@+yvbl*eIqUQ5UVzOG;V9^+$@qX;|%ANAH(pvZZmpzj&AKsc7(Qk~eaF`cHS-xdC-{T3%!; zy!lCU(xBt-iRM>_Y@=8Yw*>82@RR+vggSU4Xrq|03qR{8;KWm#r`Lfkm z;$qd~q|4uCld#K{s?Q<4Nr}yBTO{TwZm)(Byx!NuiTdj2NwY#8X!8je@oVb?xWS_= zC|w_3jb3iYsI+c=sga7!d*gnY{;+7|+T%`j?YrCGoi~_0l0+K3YD0I}YEk6gTd(J8 zDrj?=V|zNZbM+79Woq5OWs4`FS zL3n^8kFR`a8cKKTo;6d2(3Z=lGrShKs4D z>ok>R_BIV};*3*4#{Xi^X4Yv2UX1_q&%*`8=`Y&U(=0xY67tBa#m{iUm1Sf0`#kdz zo>u#X#+{&&RS?Y>&HIwm9he6%pIG$hPI}C`abkNC(}M6@h1&8N*?QJ9 zS-yO0tuaQ?_=QKS^=fSNMcZVy)9N=@#Y6SaTe+s;Wf%0=8FRCS##&7W+e#)yw|iF! zHgRe5M|bipvTzk6gh^tn}NiJCQDX#dI7n&wcQ#@(rhD+3?q4R<$+Pj5XH+sB-@3f?TS$o;j z>1217h0!h!vWd0d{LpnXWg|`t(}y^*Y7yA%Y1MLBN0}=3@Ss=&oy9Zmp=*`^gJ{Ib zVN_<5IF!%Bb2u!+<7rx=q5|hn9JKi>Y30EK931^pb(ImqvSk>(yQtsOJgYiFfgItExP}^qD3` zL6(c+>IB%&D&toT7T(Eqa2u(ZI^CL|&ysP3M`*N{)*qi=(mRc921z%=gT4-G_yv_T zHYazty;58w(XA0smPLWYYm7tSv@;)XWqh~G9X~x^^<11m^K|6okp1FEYiJ|JlU6HR zVUpY|o91kXeDC?fO+1Eoa*)&Va!h9@mR2?5{6-k>4A@z1ctq`4InW+5UR9S$klM}y zn=gCQq8*_{MDW|$!?^7Phof`gif6X+;R8VKO`LRN^He#~{4^TL?lJcfZCf!JaVJrl zW13rL%kJz1e;iC#;7yiWuS~Dn$B$P$N*q8zKD;Yq7VmFm@pQX?qKR6yYC|OoUcQ}( zud9?}g`mT%YK^^lK{|NEV;p^gU6#fk;MUG{&}b&Owe(LMc7BZp{4B9deR`}yPiuQ> zv#$6u3y7}#A^JoOtSG;_Jwi}cM?wc@Ydx#hLmR)mf!AAWoBgejrY+u6kBZ0GVDmZ| zuf}&fX5>gVC~q`jefz%aDoRrp>jQ4AvRc)xc_ox)J(j{ zU^5hZ+*NCh#}T_fiEWLBiq-L=Fs$_pi{&D5hj!2j*$;9{`rXCV)n0?w$qdFp)#~1+ zvs-T$t#waZeIF^>UQU_Tb~E5|=CaAWzs;Y)fsa{bv{p@KHM`$uL)*M7>SRt(myCL< z9Us2EIrqrC%u_yP8UQ2XZpMv1&*#6(6B)?6x09i#w`<`)zG}Jlaj7|J zbkPbk<^1t>qd^GI<`(qK&uPmB%T4AJ-J3Uf^abUEU^shW4KS@*fF4d8Rsqf8n;(ph z*G|8meH3S$hy-2P&$4%V?mcZ+aiJa6cu~{@H+^A7!p85r7RL$~hwr_J%~-9g!goHO zHsv4O!K0*B>|gvuTWEvt^GT0bRRa!pEw{$ULA86!#EdgRTlBhUa1^8u%`VIKvYu5i zEpjT}IJAV%ENi|Y-H?OH16bQ{w*fV@sF8|}Rv$-8YO$HG@9j8D3lHyG4XC%%Yt?Kx zkw)%RNLaPb+fD|(->TO0vkGxthOg1_TV_VTu%14g6O5({d|q?B-&G>Z{Q@!A+0uLt zezZ4%w#C5iCt+ie^Tsnud9$AO_Oxh?Fh-`ZM7vTaf3YTAL)bguw z%p8oDX=3+wzQlO3_mMzxx4QZDiq?~@t-2%cg098O+R~W5*C$z%cUa(gtFv?yUS*x) z{>l5z#-gEJ<w-)O>Q#=SQk82w&E*tks?;o&EY(_wp-^JKa5zS=fTl8jF5L|4yTA zl-bB^0;Jh;RP96q^d(o4D`IaAMT8?UZKOpTtgFZ2;g!$a%8q-fLK# zZ2t6xmKw8M6!~o&e|Hs@TVG7S(yei~>da``x$gS)wnVa6Miz(DasBA|v^KuUI`cc5 zQ&3i9L<+QHa)kf!AW1VHTO}trKK1J9-i_P79|`1naR5G1VC1}T{-t&(IMoN*hIJIV zYLD2-(TxeezJb0oG>U}UMT&3Z03Pml0o{$W@o%0q%_70#NiZ8@9gnDYt6tM8 zvKjyCSr*It469f>nCElzea#@lGvB?uFnsy$q zla$fv-eArW(v{{6QpM?Jktl#!YdCt8bhLw4k{!;xI@$D;3{|YG!jLC8mc2I_wrhd2 z#TeVg*CTAux!TBGZ>|Be&*I$XjagAz0T*)K9v-|~o$9;YCODL@!wbFk&NYq%zq(>Q zaW|~v8N0F9=FWa~ho+XR(QkIVS~Vk|6IFS8I1K4_xq#sx%+BgA zc~x9%N8I-~MPtrxXR%#eo>yThq6_`|OhQk0czCjtZOV4cE1)(%)a*ZRm(0<$x^eM0 zDQ4;Np;e8Oizji(m}$$_y^~*08W;CTqD+6x-D z;STOu9}L6IbZBhO4;t@+F0-WN?)S>iOJr+LfTv7+RAxGw@|MxYlyw@+u} zQ%&xAo|b-;^-Ff>Sf+x;R6%7d*USI#2-#G#S@8_q@Mrl|b$xU)EuBt969{F};nY1X z`}XyX{;qd#x_n}!By3dcnlurv>oYCr&9?1t(3ZtW@GS<#H=}HRrE__gRw#U&^*}h1 zP1ls@=j?Z`e?gau=%pHo|!_i)4Hie?aNIR3GR$KXzNYq4YXF}tZp5c$ad9E1*SPH#6r0l-G`~FgGYNW1o0j{;@$y?cvA~`AY+kAvPrvz;N1d#$bn5^V zhLe?}{yy_o)vjs7`gWQXeze9SpW#IVXjf9~{(MN)i}2BEGrQ5sj;Qk@jr_x*0gP#I z_*PLBwArt=K8tuCDS4@Nc?@Gjwf>_=udJr%)!oJb7e-rm!KwT~K5)8$c5w1+^YY=m z>{xn2HwL$-TDG=3bzrK|C#Ck6=g;C#|2)G{nHrGyewq=A=IxT@LuU1pn!ia(#ni0v zROz=DvXRk7Yr{a+$=%hj!YzL$R^2&$_#Th+Z^bol)%c|GXfNTNj-B^eg2`9mSk}K9 zR(^1Ci8p7O$??aS^BOpq6h{mFdaUO?-?wsO-}7K)KaCljk=D5QhnmHOJVp5g`xrgt5rX2ZuUR;cs7Kr( z+r7Dr4w+N&Z1&9i4##|7|F_Z^oxC`X&jyN*@qBd$sGp5*rUyesxzVG#v7G!)duU zkjiB=H+icK#(i!b1-r6sGx0&pXnT(Eek`@eTx%NymmCH{VU$l+ALVO zT+X`cnfdiFMHR~Fuege}EMu_wb#VYp#K9nFUtFF4DY97ARHIK%;6=NN5%vZd{8pFk z>g1R5j3;*=_tR9~p}%R=Mi8yxguTUL)F5boYFNqxEM9SDioRNIZOAKc4`idnsj|)e z#WfsheL1a*@2mNAuiUF0xM>7A`<#9`PooGs?vp(%@U0QsePU_)E_+D|cBZEdWXrbI zmDH!XY#f~2yWeUmDDL5rE3glpy?>E@ul9%3ngd`<){{MKnje;b_k8chqAe*K8ML$e zmo~H##yNH~z0b=$?)k>|ad^LES3LD7sa1Ev%bO>lHmA(zZMHY_FRqC5)8Tlgx@v2L zw73=_B2MWzCz9gH%)w*FKBUK=s*)9^D6x zf5YvQmB=@z<7O2tx7P?tc}dzq`?tpgp2!?#VM9`lT5Ix3PR07|mhO z0moie=!yjDL)T@1r)BfXVxRqLNVHC`>lMfFzxDXM7n&C}!L6J(*sk+!*({pl$kTPz zzjj@U*ZQspo;NPpl+jsige!U`msJPG{nb3caC#WtJvH*)vc!X8?q;A>xY81JT00dJ zo~@X{-Pq&H$sv2AXdY!0p@F}uZ*ih$lkRXk9Pxa%I-2S7Dpc4f-q#a$u(B^S3z5gC zE$vz21iZ9w?kf(2B^w<6#fFQVr;Y5D#^*EX?5t}X;&&D?p>CE=L(944%@%=-(s3r8 z)q`YKj|c1Kua}t3gQ1{RIjW7eojG`S6(_W%rHixZ;iBqx7u)eF8<~e#4hlDh!6dOa z$?DkZnC%)Hckil#RgLna&s)th&Nh1(rA!eV$#T1<_!3uFOM>fceNjigmHr!b z^x#!{UZ*ZCEg^wcoFtnq&bmP`ZuKm*N{{VU(o}6`2g|VsaXH|0p}csMO;6@~_x46w zzEeN(f}V=+CUw1WpA%(h(RTK9@T{I-nhlQ8CV#Vbz3I|&c12x- znFQLUOFmJuoG!@p(uu?4Q{LMBbI#N}IBfQg;Kr?z9Z#ZhnLiY!@!JE$yEwJb&~(^iB;*MpOdB@yk7w5ooz6whlHSoMH)C6HDVrQGeTbB zk(Q*wqT!TQ;J6IIsB0Eq260ixi5i1ogzRRgGsEH3j$1d=_09a+#FOfIdc$ewx*K_U zCD6+@t$)u^O7EbCN8kLvb-;oHhTjiz_2s4+(Ck7$8M5GNblXhm36Uh>+$3^?;`)(Xx1Ws(O6 z&*40&72CJNXx6|bdXZ#k9Iw}>zIlJJnytc*JeoPk05;3%MQ0cl-=65OdvQoxaPrOV!QI2NeHw)$Cvt6M}f9%r4i=+s!56Wo>qy;7RX~e)-17S z%RAxhXn?N~tAc0^w8{-W;c;(pyUFl4>&hbZ?N`x9zfiCo0zYHqtv|IR(|Oz06j9jS zq6oCa%js~tgCe|T0Z~Ah3jHA z+}kRJK1KyDrSE$$36}A<|M&}1l=gI%U!66$`h<;^y*08C8|C=!_AUk$&Ai}zI}K}f z*z8!gK`Znw=fN6UiK7`G*wg$~+*_@Z=c{EjRi) zyq&dj-tlTQ&*|E#dvIl^GHf?_`k2j@BilY89_)?SX~Ak)$tS&T*BInU4qvrsCc%Fk zSOu##?MRwyKyZS~tR;?&}m+Ikiu3eAA;G)XtEMw)6gfI!te7 zSufx5S`BoX1LLjSR*5M3*mzyh&ithwyB^>7UhdNymL32Db>Z+xQ5?IRdN%ukC>3|7q~yD6sN9kt2#W@(Ghm$x!Uf;ni- z604p>32rUETZEOS%3Kw(>{t4Z?JXi-q|=({{6ZdX6jihC_UOuF?o?*{&E||=1`>CQ z$c(}w)hM3)7+t`zd7fEgd|BM0_hJNcaGFe7G%LnMpL>6E=R}D9Je%jM@3J3G|4EPO zP0#XAyBlsYPQ#f5lC_fp@{9Z@*+(HrCv)q0v~*$>Xw3t@!7{sM|2{#> z8mEo(veUz}N>2)^RP^EjM}OmxLK=f>s7PPq8Ga`r_p1?DOLKht7@IYNkX9WjdHZH{ zO6wUs9BegRG!wnkko@g(!?c-{H{ZmSupu!kztts>Ph1^c(V!}!j5fYb*2xV{al-g} z=9H85AmRAWW1P3Xil!4Q<~J8;vpoUW^mOl7H(FS|JX>oX2-Nl(VVEbL@dg3~|r;?~Inx85yxJD(S>Ml<&2*i|K? zLZ#NUGU%g@zB;?4`?P5iB)xRXo`5mtsc8zm^{GB(GAM~{{ybk9j$t;>7!KX55(Krg_^e0$TU3)1PSxKW1t#iX(c6;n z2y*|>Ljo+ayYz`1;JIFT4pm6u2+u|s^{X4T4#e|e-uq6A5;j9MS~IRa&__BNoxW@y z8n#<~X`Kh#>3Aq+QRp+?Br-^c+na-1MeeO3a95dwe|dF00DWF&Qe2c*boUt18L8DW z-DY)ViNde--K?vYB$(CWXPTE5%6pIuj`cY@%TaZmocie-5ntA&j*t0**TGYr|&qL-%KCVL09GUZX5Grd@s4A8jgO zws)r$36*O}`bFg0;=ta>fNSfh$N6Qm@ELC_EtKy)44lrE$Qd72`|O_67`NKmxKY+# z+BAWz+ZjOF^ou9(nKWv@no}4r+9uJ~;9#<*?RrnjJ=<>$z^|$$RJmTxlWfXWl+B*( za0J)J=j~^KvOG4~t4<03@wfb?JiGpUe_q=4_7>6_vf5b!Xee8gRushzN0KFt__tc_ zNjHDsDTvG6!>M&M?%~n?wx)%KGo%V?XX%*Pc;ZO>z#FrLr}J-0?r|BGu@;TZn-m#-_<^R8snE&7Lj zEz1v}n8mTPG$zX^Qr(^GWc#`_aa8MHMewSy=)!XLje)|j2@f!jKX0^?6N+zX{VX6n z^sjIBvS@ud1X=y66{vH2?V3s$}=}2wJTgqgT)E41l|HWbj_Z5QTV3H^K+3@<)qFx0Z;< za^&^FFEmca8z~s1xwLv(fW@S=ow{AHfy-h(?EB{u(W$G5sdn`G393FGRlx z5--I<;anX0$g$y&1cWYo8cIQoSU!W!Izcvr%P> zZe_cYNysi@$7@gZNh-^14wZDEjD0=WZ8v?+C-3a|q&aUyL)+bk&#(5@Px+7G1G7BB z#@>x)dF95=EO4Xvd?aqr5`xW^zkW8$z+tf|jYZY?CP{m2eHNqe9n1el?RM#DKgzem z^6htLhn20ye6O~$ik|Z%Wd_Pm)*9aD0e534IzyZkvOIk+GZCf5VfBUfq`0=r9zmF%t?bmTMmCbgzNxTuXcR=oYz(aH`Q zpLb7}k+>GTOSe56?$O)Hv7NmN<2a?8v+()8c>r?nHq^%nDQLY`&|BoPn|)~H*2du3 z><9|@-2N)9$q$tyS&tCT=GCHc@EUb_?&Ul1xtypz$%YQ?6vA|%xe`idziA$>hDx4G z?ra*BC6$qBb@9c3-?h-RX_4eK>Df;nlWwxV?dF)L-HHfp+wQrwGmF`-zU`iUkzOka z`H&~|##gP8O4ftR(2g(GrVlw($+bpF@8FP_Gn0p@WuNrN^LCBQX}%vrvW?BgxC6M=8|{Zy@tK1pR#te zOaGe(LZPTjW@!G2PLNtN>p1AYox>fa(b_DhS;n%$!%SN{bIfDlw;1Bl+^1y}c_VU& zUUZnFM9oem%+rjn+GzfdJLpW8(NWZ0PD9)3E#JFd7Om3Y{SF3xlCT{m8^O2UuB|Yq zWi)r^$Hr&7r+XvbsU$4W+Wb4aA9i1xPOkB#-DYO}@&#$4bmJ#V_@ik``_v|TrMHfz z=VkML-VNQlVEZ+T744W85q& z=hN^)0m;3+0P{sf3?zr%^=Y*8=Ym$ zvyuGv&ybxM_-R=C1R%1AvNhV`oVfnwS1P<6El^A6*`_|W-_*0Le7gwLUalMmMcicP zul0sWvC|v7w{X2Leqa^NV)cvTowbLOIgR&tUakRkokPKm-nE&uIwh2RNXzr0Sr)3V z`9I$_Q!P8C{6;cTFKfCrPm9i_992Gy*5eCuEfeIn}68aUHUjnDcYbBVW!1pxtH%@x45L~@SPo5`S9#3 zwVfUcsZrl9Qn$lweB7!qJhkG+sJMV*IzL;MwVN&EXCSX<*%MDlQoHe}t#s|XoA`NZ zeSc4HwT2gd-`!SGA1(Q`^^;YQ-R_ftX)_SF?m-qUI6?2b!Ddzjy;k4^wXJ*20-wOB@o&XW3CNm^l7PPKCLCjQk^tIB&`*|4jg zx}o3Rug(7TDwl@FxLuq%8-4M_`b_U|y0{*_-SChG=ZWz)4yWs3zqNKP*zeu@ZY@v8 zHh&)X?d>p*zjyk3Gp#2Hny2kr&GQwHGlF>S8can4M)?J5Zo`GO-pyvElxH@`$l5p3SOh^XFk9ja|OilW$O>Mf2bK zZ6wsH7PhlyKCLJPF6f#pU{>6Ko8buoZ~NO>QoFtAfgKf3YI!j`vEp4@v(%>>jSQ$9 zU9%mz12{}_N|xQJ&7`pyhP28spv`;KD!u#B%?_rEmFpx|V}_ogRTiapknQiXZ)&#w z36V-Q8%1etq`l9-##ejNwQg0mI{jD7Si8O32s>SEEJ>1du5U#(+tG)v%}jRYH66JUhhmU zE!mk<+%?}QirVgNT?$j?$hOFD{xddk6z0xv$++H zaJbb=^yJ^ed(>5LSxY+9dK>hUwSMrs{Sq|Zvz?r$aqS!^`rZCY?Zi7&@swvrxmsxy z?JlAmQhqHd`qG}=)!=)mC+|GN_O_7w){RM|**I)o4_gTe$)D$9Iu%j-sG>Wbgq9Yw z2G2bCFMmfltvW29Ivaq$ zday@nF~Ypu>qD*lb2oYKmi+jgK9E|-@3zBvk;N;p<5SX|EGHW2W;2!Dz1h?LTierG zPt8Z7wh?tZ&$QCt)mlyn;^}Lda+r@6x;IQ}-+r`g+3#xgthE#T)z)lDKj}J4Fak%{ z{8xJ~v`wBpM~&y|&5p?;UYilWyV0jr8z-Pp-P&Sn%l^-UMI|0P@l%bVl2w)|mRYb` z`qiWma5s6Dg!lFHo;fo^koKMd75~tf(`qq6xh03^YBon^K?4=WYy1 z3ftMEZo61$E?TwGs?z3t+qFk3X{D0TXCc~ZB@vZ4Se|SsY~ML9=UeG{(TuDk2~X2% zxtX+f^|?rfOv*}o?)%fR_P0i#{?NbdCAu5MQMXZlRyRM|C|FiN|Kt7HNjac)hqRs@ zcH1AG){*I?zrD_lpV5NmbRhcZVVZ=__^u|}Cbgy)lzyXwsLV2=S8I>*=7781LF>Cs z0T(UTN$u~_dau@me z{3u$>>+5fref@*^-&X1y={7Hi*y6qD&m%%#7HwGfMqksG?u(#Lv~6cu$htYnvgc{S zyUDVax;;wElQ_Cjoy6!v{3}sU&3ni~kJ}M}idL>R`;CU`ZMBO55xS1TbQjFHPXJzV#fj8aQ?&R4#)mB$Xv(?03el6|4 zM#`v#x)yt*YxJEvC*!@K8;)zH(P zyRF+aPCU(Q1qV{;I^@Hf=GRg>QM{`qHS?x0sn<$Pqb7gc?w%wT!@i2m%bWFIIsSgJ z1jX7hR!#EDAd%18!_zESAM3k5*q=3MHPX;$ORefo=etdbzCe4sLTaVDW%JOTY(yid zYV7eToTqb9FH8PbO0BG}Y%x&sTC3ZWJ893))Y5PbZ+vDUohvH~M~l|8_Wa%HmZAXd zXzOKdJL5sR>hBI1rROb{v5k)1Hb_shJs9@AHndazgBJMS48Ast4_349^^K$E&E;yg zvtXtCOO|#!<$KbzX=VK@g_7+=gbUlPmtg`6Z$mNPGpWp9=`Xw9{tfN8(=f{MWeiD6 zqbMrWEXooWb(Z+&`ac`VTj>olo5?{fE0~RXzf2F^tFP_GG?OV(CAF1=YdXo+aJ>8k z%NmA{8@s;L)#ALSp4+QAkI}ym^V;xcJMSP)+w@RrpLVxddasSBSEHycKe#g-`4RX- z_w8Q{e|+Ixe2jV;GJDdpZ_}+8eMG_54V7s&R7Rjv#nukj4;m(&X6a=YVN8$k)BXZ@ zpnYe(repgh@F>$JWW*3@RGPA0hgy7QgX3|C&?--x!wkvFZObdwOPKQl?B+-?0V2*K5QkU%hPld=J>8ehHQ%+=gq}*5!%kjp${*UcGrD7F>cTCevC4+~Dg(>Hj= z8_KP=*LNC`Y?SCpKIJRvC`XgGyAvNx`2sSU1){65ZM43#-SVSbeVEjeh#pW)24O~y zGKJ$M*~G=9l4M&qoHwH-)0oyiw?@V9uAOEh-6o(NymeQ)PtAZ9$^P{9(G|6e;>mn* zQQ7WVpc6%t`ddyOYV8)AWmnqMY@o=itcq69w%-&&TjPv2@q^xFgS2Fi8Et?>y8_Az zRa5QlQq#)h-`Fw#T1{=dy>A;+w5p`vRb?}{*?fmo=VRd5-AJvbFPpa$nzj7Pum7ii z%@x;oPvm224Qk8r>VMH*wX?~uMAL?5-aA97hwVd6i=qnc+c`m^ax1hd4OKJGGi}{o z>SW*5^2av`g9b!YGAsnkKa^)A-4wXZa)ef7#Ok321$rSGkMd9Y2?ola#<*RxuGE><}upA?;ZZPx=60= zDcV>@_lF{FT^!1zmz65-gs#mlab^FF&$Dny7IiwYKB?}^Np`XmRcvJOCxpvXcs?7! z1Khe(0ku{LSwd9pW>`;t^0gBUNlk7T61z1&85GIZuQ!bzt&wh~jiT>aGI}tK*itjk z$r~NsPs@`@a$WDTL&d3L$Z7ocIz$EB)o4XvyEZoVkh#C@{Lz1Lvl4qFZ$axIn1w2{ z7#mM{h_9{|*VU@JA@L*tXIi=y8=A-0MmK$$UMGEM7FXj7jq3G|N6TjyGjH5VzsFtC z`u1)??d|CaCAvd%^x+Zr9^9b~Dvl8y3z~R3q=3_VpPxvuWrrLR%Dr)^c%4wwZ^y zQ#v%HSd!6ZySQt=-g>wFj;PVM-exoHj-O;b+ZaTj-i-zI3Ndds5{obE6WUufqwD$4 z*6BNCkv{a__AY5BJ^7-N#OXZ*ZV1wu=3(T9 z`^`PZLo4Sv@qV*7@05y0bXHfESh~Z-fafO{>Z2NHltKf#LGO!|1Kw)zfm>(}#_rtVJ*0EiNqPNus2>=vnLW^6W?d^hJAUEZ368$63W3jUp(Ao0Gq7Y9U`QspWWApmgWUMecR(RR`P2NjTW-7dZxR1 zZGED3HkV&0UpjhvyK@((f1 z18S|mu!{7kPukx}8&YT`wE58P3ZK6qkGPpvZ&ghe98%IOnSFt<9W}OZ47}_ zBcMI%s9UTK@i;G{+KE)HpkyV=E|K+6MAdkohYr=Oe3}g7`RIH>|79uKpO%(o@r1vA zdn}9otxZSERt!c(@`vKa(?-_fh39M6GFlhWRgPbVQ7c9H4m&YLYPi@P0Qhf>_$M}W zLw~ImZEl^uDmni@T2VY+zV@ATfBBWC{%fY%zvQvG!b!qJ1P=;@>i#9>w*qSjznoaXyzgAU$WiECFQ1S_$TO<(AUa@2=a z{5(tR`7}Z4-9x6o{QNS1(4r^t4|PwMd5G?`ZJx1D?cLZZ5oj&jItlIm6!PEi9n1!j z0uGhWoA4;;v!?Z8{N~&t?RSi;%05*WvANkR1Bv7odOyXjV$iUsqMv5i%yIf zv}5zMWCrQzcA8h8Z+GDK8CV&q=Xik+37EC|9BqvS?O|YPY52>L%Z~J{7WCbIj&g)g zvwFX^8@x6OP5*kkk&x!Jrax_l?q-{#bE64q?w2=fskWL`Ec%;wq<5rPTrw-E#@0f~ zt2c2EfyEEAv1Rl~54~|(e$p8JMy^_pLVXvn)fGOiv?*eV)yikne@=6QTr+OeiR{r1^-KUrzNGuOTAzjg_9N)lq^zWY2-m=!K# zLHpwq0(!`UKCd?(x+8b1PU~&)ke1sKs$b~Gck8lj0ax1tlO1dg+nc20 zRBSM>@aBM6{@~h=jotad%CmLpx)yI zmH9HeEwoO~(W+INPcrX(RvKAW8m0Psw&i>*U3Si7KD*w{6n(OTAWYv~hR(d9j{eV+ z=pp~qz8`p{pF2e0DDSq)okK^*>>MKe z8C}`#KdrS^o4on8{#74cA-7qOmUg3p+IfE3g64NSKsQHj1xH)e|JwNOYE*wCLf-m& z2Uk1j%K8;uE?Y@g=|I+)yvOx+iNd9kwQ`VewmE+QHQvPE%Hc*^{x&a;6W^-Ur^U@X zYqTgpsU(5t@SJ@t>KHZ6lsj)lTSI59Eg!eN?PicPlnk5uY&XJmfIsO*)ou}M6fIUH z7w>#d7s$cWe$&3TSCX8y8YYi((RZ~fv(;VoDz!6`DD6aWIvhlZ? z`H!NFwNK8QJ!oms72O%_<=Pg3do$YgxYclNWRac8L_aBP_lkPWFX+Y)@^588$3hj)6mP?Y~K<(>oHWri)ZLb;|s2|vH71nh3X-H zGqlQnHA;`0XZ4G9%XO7a%v-iHxU;siBl@#wpy&@RWYuWDzP=uz9K=?^)m>&D2CGdA zPzT#ze&s-Zd<>wptM|AFt+~mKfFP29AvPX2Gya73Ab6Pyqo2_i0>ueZ4 z_$b%m6YjR(00$v7jI_9KMJieRw1!9IPc{M!`EXDUrL7KXN1OWv8D+}D6gQ)mK5cgy z^pX$caI#sSXYE+q44Q>_K981-!U}zPfOz*TYb!gmT%!J$lh&S0(yR~FC`nd)`K-NF zwpzz;ID9$J+T;$VF_rz9H%X_o0g<(gYO{x}m!PFMc$!;#Wib2K+bp$P^U6c;bl%b7 zdY|TzV{exeBfmULZG{cGTUAQ?=jD?t*)De)zB^-$52MlK%l7Gyn!D9z7PGt?4>H{< z8!=pgk`$2{Ug(^Rz)OY*Y-&GR%DJ{( z?sqlPPnb`xi}{n?G`YUa`?aU+=300%!$!@<0=zYHrGYq5dV5qzq-f;JrIUq=F3M(X zl!ov2B5FVDhFEmY$MiWl7JWpoe&ZD#+ZljjnuM=(w7Miao1O33x-ojUADWIv#b$Hb z-AN|zi)wJpwp!({C;cV0@A_8~>OJ`^c3_>j!T)l`(}78L`y!enPmz0r&isdL8dgLSyGuiRF&_D7A=fE-|}ASR3h2%TTw$+G$C*3LA)C$y|wDLv}@?$9RN?YKxPXiQIK zFz}q^>#O+{WO|eD(S8`ixtw%+va9oz-O86;>N9G$7Dk5k-=5pv#b1!?RbYREv(2cmAc7 zu||}&3CZ2ytABNN&IVu6JsH$HBx%W{^UJT#QR)l}o>tZwL2G8r{Vu*~&tfJK4UwByNqwt7V`o2d^?c)+JTntFOA zfg~#Xp;E{370`?hb$e0>+*)ayaK|QqjT#m)fOBi>4~W_RvA@=xlUcJkEmWG1N%5Taia) zW2$`m^asAJnUOI$ZhoPi5W;WY%ag!zQWygH)7@C)*;XRdCQ)2ZZ&^vUTF+~-+#@V- zH2uPNv+X2UR(e?x{VmQW)7>XiyXBRQ8IyQr`X7&57lB85nsuj5s7`KCWcTvwOq=nP z9krhel9iv#Xd=t!lZs(csVxY#A89!*Z{<|fkKRQCdRDjj1+O#zx|X+#Zge!-Z7pVP z&N^GChdFNiwVFu^)kt1DQPKCUYw(5bWemBfw2A_A(%ESch;By|4X8wAcN?3iBb}J{ z**I4|S8v+h{1lC??CMP~qa0q-{VY(w{)Ry_lb!J(!Q~U7SDt8;$N6Fd^2}nU?JEUM zqetEnq8q(8GKle#b0ZI)wD2U9Jku8nP$#*fELWzOmGND zsO|OK8tisdqhR~N$)h&Eqf^LhKiltZQPlRdj*{iHdG&X41Quv1-=Sr*=|yg>9xCyZ zQWjIxu#(eg-YB&4-%hPv z2Po{d%YyQ!L$@cBG7jD^Ac!S?`A~~U>k|b2NrD&P# zwOmB1ZgObGso(5-IsWPVEK3P!{y#5Rpro_U!#+gbTjUC?!`Tm|mK0QK{ zo~Kpxri?5Ee1E$yqhMU}an0lPKHQs~?^h+JKb2@6s-$RV8R7hA-tom*#noFu*!@kD zb}bb5eQy$BNxtEsE8f8Tm$y)=8$ z0y%D<+@!a;F6p6bv0*zqw&LvlG6>Uvom2OAd2u+mg4bvXjr{wh6ZJcRLr!kOP%k(Gow8lgmcS3&O+9ePb>Td52gtDovfE%Yb7p~5B@&EF> z`eZh|CikBwW6J!#9c*M#j8gxrkKXT&^WHU%;n@4#fc~urVlZl0cD0yGZHOIC&R1$aBaXa5w{Lb<%o_E#obJZR&Bd$DLnOuI!S|}=9BpN$ ze<47QJMT|Fp!e=C?gp;fNcYsGh4v?s&3T5Ec8{6Pc>Tc8q09tKKbB04PD-J zBW{^?J%!eM+v9kd_q@CP+_KmUJ`^>pR3=0 zjT?GgIg+FWjV373;?@#i+>Wa479g7>N~-4G^Fq+mZ!xMh7~i*7LJL{lb{a*I-m^+= z(bmOmFnOa%v_~mk%)&yBT*qOnjq{l}sc+*rK9>V(RRa=e%}V>e{rlR*UHiVuc#->~ z{b|muw2`@c0_#f)wT?O*wf;QJ?6Dpd#9s;IuIO{2Qf?`j$kJ__xot|rRz9P)pRXG{GPx*z#Ox{j={M(q}6YBD# zuDMZ=SH>1Sqbyzu9Gs}`x^xy+7OXYZ{j)&Hz!l!SG|weTm1OqDlu4J@*w}-T@Km>Z2sfId zSBW8!m)hw;J*b!MIsevak>%s?qg*`sv{S&Xi2l^aMzJT$YU~UNs{2kac$sP&MV70| z8}f+qnm#YWszo&Qi7dC1E9&Gy;Xa%eKZjo^;CCyCs6m5q^!cYnt~9q9-)pnBw4{79 z(d|tpso5i+Rg_8QzCR0SblU&!suxhnK`(@xKvH93=E}sF9?Mg>MGhJ=g ze$sIYd(T>Z*jxd%%ST7UEVNJ2UtEPEh;8K4T5}!a2)Qor1Ggff-6gM$p*VZkh&`*v zL6Jdg|69R^)bu<3T`mM_+f|HqQR}R#Ry>4)#xKo*C;mjzBX_1r$7?HwyG z$~tMN67FuEfHJot%CS6Id5ky-Ow(3 z40U)kT9KFc^CiW&VZR)LGWlztHeT}=lNxD7O&CYv*K=+5Hg0LmYcV7m-*=Z8JKeef z$@a@X(|xk&FL~`0QBqg8k#2W3(zn?k?)%Fx_`WqcJf@TQ<8#X-Y{b~Q7ml0p&|u}m z5}rk*o9Ur+@d`@bFB!F#kO!ebKi7G(Q2di|s6uZ!ZQRwa+MAcK&SJVw zr{XizpY}%;+}jPvg4L=Y+(Kg>k$$$1?Z5g}w(5q{`d54TjNY_UIZJLg3fo7?tUFHD z&a7xYeEP&fqJ2Ei4~9xI4yQ&i)WU8zWe&-7F)s7W=;ZG@Kb}_87&)v;ZI!V4u*e(d z&1p5B7n5o6-PobE(W~G1+Hc{|h^!3F8$)CQ>%aIaJ<|7b@s%gRo)7oRXDQQN*4vKg zR#wY(OwZ$s?Nw*zdO`*V){IAYE5ULtc;3BFsE+~~(Z4+4<~U_Bm+PID@y+!c2Xs4n zwl6YXADt*!l)U*PX_m)oA&-2Fjz#IJ@y1O&+nwOS@$rn3_8k{&!6$Cp0{fl7sUp%jq2k>48o1? zhFN7%9U4yUO}4$GHA=`v)?+d7WM2RFU-ZU*?Q4tf?XWLCO>f6bC0Dx4mG)(J@zALJ zPC3n+;9P0ml~sB&PFguaM|;kA_2mk-%Nix&y;#tbo#!E`Vl?y&^V+qqU}sU$w%ewBHB`g}7TTN();>rjM;F zZBGLpcB)-lmD&xl+OvAR^KPCcPuOO8xP^~aiZSP>`Stk<@U`hN8l%Yh^c5;~AdzHLWg<+zKZoT8Yc^%+71ctYP+^Jo-jdo{U?oCY~SQ|&9T+_qE8ds15FMasjC@2ZT;RxA{ zMANY5)teVzt?k^J9mXLp>l25xpy->vdiri#Xe8L$+;<+by)5lS(B>#g- z4=tXmzYJ;Gr*#x`+Rx~@8Txc`J4%$+_wu`MeCFe4V=(b7^yDo?Pt&vTdABzgwKOMK z921)4*?cytX<=ORR@JVJm%)rSb&8?nk7_3$p`N|-Z*nW{uANG0anNGh9LHixxLB3m? zB&Xz&&3!Gn9-cqZDm;b=?!`MK+4{tyshvC0Yq6}>l1$W*?{irj4}WJD20PS3g-OZ4Z69)6MOsfh1We zlFPQ?RMfIwXn&Z_168j)Thx;5dd;Tgd_%dhpRM?t;hUZSR~0qL=S?AFGpf7l-y4g`^af zp$wVP-dI=uVyiN^dtNx{HUB0{Z#O^15jkizt|q6@;Loxs2rp_Tv#8&>J8c!!q&-=n zzRob2>%EK2JbUXsq(9n7 zroYX+LJxv;X(POw#?}){s1Dk#4Wm%4zy6N4a4Z^;zh2Wb*)hWfxF|%0_Hl$|2*Zk*TvwTYdL*l;eH7{O5(q zCtD=nVVCbqv*@M2TTz*e=TC66J*p(MS!!8}Y1eY}`m{5IUh`P(5Zw-gvS88D3gWwQ zH@$PqN$<9*sePxmVAR{qV&a?pr_;(OmFeRwC(fYWI8pp&4F)CK!HWLI1G>@f_VGBc z3^Aj;ci}tzo9?BHPiMT1+SWdr*R0k0U);eCk`IZYclkxKX@#ME64mo}dwEz{E&HSg zer}dtv?gPSi}Z3CH&2op-pjXaG(*Y80WEKDWu;MGmSMB}FqGRH3Y|GzuZ@k-F&_{& z%{F&$-1fqMJxBIN14FxAq0Slb)zGmjzZeA3SK1C?5K+ZAq>_ox?rGzxubp3L0uF#N=JFILlo$R_bBO2>)S9x_jWt2j0l$2rg5Z}R*-Zf<7`R`w4sq`Bd$8zL0{c@ z(9ms-a8XX)3&q>55ZA_??ToP#cRJcGK>mHd{HM3AnbY6AW!&!9f6=aY<>83y^04s7 z(bn81f#x5}u20`;8|5fde{sw(-+kqkDR1_*;q6f)tFjrBL6k3FwHnK6;z~)jQ#_3) zV@2;~k7c>G=L|PA->CCfEvns{+i#!#1!%#J!6YTWvAM-QTOnfzLx z-^eD**U~ZCIt@oN&8rXeE`HTV<6Zkt+VP=0TDwigC%Ehkh-Wl^cDQJ0nmswqcF+s! zM#1zmTJT*hva!PzmGohVLAB8xpZ*SiQlfE5Tj}WDFVRG)(&d7O_p_Sh+n&I?a3TP#Yrb(O5Y`>6}+V$-d9gB}; ze$dVI#HwUGzu2z zc)J*t**P{Xw;!b_A%CN`Qj6y4rZ;higDh4b&t{Aho|cJHa(*PAtL4dMIkj)rK&;#< z3dx2$DQeekhCWAiGk>M;TwePO4xk>8?}b`c%LOsW2b4+ zoXw_-Fz|#ddA4+iX82x7_2F9$h=o)&aqPFw^QzM{&nsURye!PtrS(3I*W1QDI^QU| znRztN`q)_`d%JZX9npx&p|!h1$fc6#3gx%v3FF-rQ>0xx?KQJv3&AAU=tZKlbrIWE zWZnp_PNkIhW_bftZ1pX4wgwdr^tFtWv0{ByE*#KHUSSei^AcsAw)=KcnSG(8QGGjm zw>PJD(bRa}I?wX=>gX{9o>uIH39M_OxmXd2Cp0~6g#MzXa)(7GG)ukyw%>bNpg))? z_tufqsD}vNn#Vz{7GUxEFQX9+Y%6^&YFhu*&TW84htgoFxRJ+l!al8HhS=L6&Uw+3m45DWiu()#CvfU%zm!I*;-*h_e z=|wY`MmBVzX|q54wQFo1XTBd^t=Y~8;A5j4kFtnS?Q&O9ww;rD+)5SRXjs&tq#f>k z8~uNEUfXl6cRLbV$Rm{0jr;yn&Rc!g@@6i5-V6mVGALiHc7_si&D!V!E&ho>J%pSR zaqx5OGxF=A!21VA3}dpP%09<2WBW^KrPwCq(Ky?!$CD3#SWWRXV;|xNoBE zC>swrSj$^sSihUaR-+b%@ib%>9eqREuX~hlB%SKM8@3vwhSjjHRoayXqexG?b=0$P z)Fw`wWzRd;OY>K_lCV7(i>Tx@>~c!y@m!CMUrE{%JWcYoD-QOYHE)OKa4=igUbf1h za}ff1qR?E5kx^(6a90$ahIZ5yp;A=?3#9keT|to>ri;$56<1hA5T)9HV^p3>B5L;V-g zjB+x8SUOFs%PHV^Z_;~p7YVeFDQvPLBN1NJSU#mXyYI;RGG@zwk?L{^l}(C}rzdH( zPrX}|QNQFeeeUh%r^ICz?bx34o@RtgtU{L8QZ zvpqYVh2PB={mJAEYhicmH3u-hW|0^O~>p4P|91iwS!Y z!n;RH>uDWowjUa%%|Rw_o`HTQk0Md_uD|WTghw+oy?IO1Mon~PGhb|aruFs>oV-q47jqd#U`Dj zdo!`gZ?QZnF3Z&zY$t`<+qb39&ac5^K1r$JT7=q@aXxDF0lQ=|SwVQaMo=c6Be(qu zT+%Uno9ZfH>y`pbU8ZftD5@kZ(|LbX~$5gZnZi&zB@=f zn-%%DRXv}`W_ee5bRuXo2FPt(fM)&{R(fA;D3t3dSF^k|{oDB&Wr_k|J9|kxqqH2> zJjXP*90JsonLK76?LgVh3fh|oRjX5NxYaw_CyC~E(L%bLp-&ff&#n5)4fs~QEIn@3 z9v5q^tdu?*J-$9gEUFi}nk3*m|4x(F@@#K5S6}UIcDu)rQ5Q1Bzf~$+gLwd*N+i-yP-A*Z~U#TD4^5x{^7d*NgpSb-@PM!%G-=? zzo7K!2sPBNEq#<(O7EKOL4kJc3@$zz@jWMtcqQ$gZr1`?pl~DL?xL;N?lGWM5J>t; z(}ArnghFjipLPy%StT zMfAA#*Uc}{KYrW0Nsm2Q1n*h9Fm_)r4K&kYgEV5ZPV^OHwu&0sTLYfPHBxV%4ry!; z!mM~RbZ_6Dm#A;%Mf>sy8>7O=Q`nC)ezX-d1%s!_`p}aEZRtG-U<_m$mwlO ziakd^yU>O~E6SSocfT6VMOEw7TF-+OP0lZCX}2P2?X5>bfA%n|Z7ydl8is7j zXq?5Od9s5jda4VF-RCfSoYyJiJFgPWeV$#uGulZ9?Pz{G;!zn+TFF+!0}?13#wbfK z;9D%(E%5cL-DP6n9=>`dv#ogGA->E7y@is`yGe`=mXF>UI#kX_lT-cRS#OJ`K!#Nub;zjj#5Vy#XyMqM+9BfBlQL-2^6esb# z^z3D`&E=e; z-QwA39^J`e>!$Hn?4u=8Uv$^l`o*ZMmpz%vZQhf9wYwDW(-o3Za+!uF)ASGz$#T1P zP`DM|?S|S|>uqbcwW_!N!m)89`D7zBpI@Rw)tGl}?rFSud%eh6*=b}Rs^@rk@l((8 z^UD#;ui!Y;cN1I`XhX~HmfH#W+Sv?yJn*SS-`iPCzxb4DIFF>@nE$p;CG}~226Y8n|Si>ZX3%^>h68#Gy){))0x#_F3n>|N8>qXhJuBd5s z|Cj&JUOMf08180|-p6mN=kW-AZ7x<}4Lw6KS~surEP1N6`!ST-_(390TWl1b1+`ZT zGU%JdXt@z`a-Bcl&ftxX;SoODOHEo9ym5?%-^r&h(*iayCG+TVvBt>n-21(Cn{O(N?_X?fHoD##*hA>syQS z$nl$Qt#+T1oJ`1Uz36>%SnM$x$~TgAPhd-O&H9Uva0Ce!JF2#mb3S-FMJ}y{(d1|S z_Su?E;Aaxs&Wze7qe+*P(3@w`J9;*L7o$QZy;*FES2)Ydqkpy5hPId2*&Im!t@gB2 zn{Ca0(Vp*!XYwIowMfzD=4?^&_M^V%i&D#uz-luslx`2eP7aV%Sm`0k+k-`7!-lsB zMW;9_Mf*1=SAOSYcSjU|(H`>ch9aGv2n<*E;H6=;IU?tmQ-|`(mOfR(5$pTsCGc3kQR( zm7}kd8(-hFcvVl?C>@5CHv8*SJImE(w^2`9nnjPdJz?o;HU>jk%kXbDp1)TE7Va@I zH_6)EEs)hG%bn7|Tf8q`$DiK9lEqag8p%pO-2u=T*(%v$a8&8z$+jp_&E3sFCvm#H z#ZP0>^y#_&XQxnW{_&)k<-k1(%i?&az3oZogW5qdWYl=6Ic4t88 zFAcGyXcpjKG%VVyjm;waoc+xQp>KI5aw!|-d8PZ$x5>e;o%CG!={K5-LP!rSyT?N9 zW>-Zj)#T|XpH|6hlYWx%(=4@rX0uvJ$rmnOOIK&JY2dew`5^LNc5889nrk-*ovfvJ zm|a$Dd!qL2=U!8?X;oSe8-*8dl84^BZpgF3{KVGT(oXn>S(edi zGV0N?x!W*YX}xMO4c|Nqh5aRmt(0aPA>3RWb(2{5hSEG$>l-M5(dJ~?^ln>J7tix4 zd1$?BX?tI2QJF{muGTWKd7g2l$G$h4?T(f7Z21KoO`do!+W-q~EO+qqk0%P>_FdH? zWa-tiaie^cKmf({t2Y_tck{kl>tVNg&2IHGU2XLPRS;Ng3awT*@Uig~#_P8^M(yfL zJ6rph-+Q_ow`Hkzj-K{x_wgjZU)@3Pv=qwj0?>OSYdW@F+9=*G60|gXL%-JMndS?( z7a+>|Puc0>!!a#V2hHUsNh%H1m;Rf_wQlIvEN}cBk~A;>Nd{p;uCt~n`T2_lG;o=i zt+HiJA-^3luO%9i$0%1YN*|X_zxqDkNdBlxU!!iT!f+`v(=s$6Vx?`d;w-kc*3L(4 zZ#&+$%1Z~c67A`AQ4UI)HNteeLEyE$(aV9NMgD6$28S2U_4aP*hHopo%HeMNOXza9 z0_ffM+IY5^B<2G}7`>Y($e)*$-Z}T-UJ01dbu)CmG%o6CwqBkiB%+QcruXbHYH;=1 z#>?hF_49U6G%7at466`demZGoA@E-;XZDDi*U!%6YoRu#uk0~zgu8O9THJ^mmG0x% z*)EvROZT3%zgqZiQE3fG4Lzg@)5Pr&Yz%=$nlTU6lVwpS?V?DC4%tPCwOc=sNJH|6 zMcb7pnJAzM&3d#$GkZ^(@5FZRr{n%bWgaEkmURj*Z^}NDf!vwCMq`xgB`GSo_IM9H z*CINT_|wRJa^8LC_upJKDq*H}o>3j`?&RHDNlsGEK@Q6_5~bv@RTS-{Pu0OiBdE0k zHoN;AS;ltKZZtw!_x>#(Hd)g%?~9sYlB`gI`l5%uNxH?jt;$T}Cvmat_r@$^n^yex z%e20;fAW23$+r4${mg&7XL+EV7MnILTEzFXDV!$HXzMf0Uv5e-J)4hSK4u7`CJjel zyJJWK*UJ$>Fl*)^Cy82ayxdL$wCxuWXe(Vwmi4AYIU_TWp}RHr`2>{lUu9P2$&whU z@jV-vyf6BS6CNV!VBqiDsg0K1ACBYDUA-*Cm`IYvxBahAe=RfB-9xL zpLW&-Dy?my4gFeZWNpoASpst3>|A*#Dnn^#K$6#qkL@1vezRowZ?#~0uzf!GOES%B zCYxn+(A*rGE&02#c5!E(lOE!DoO@sHK)d@+(t1t;wJ&Zf!ci90^J#c2O9Gkn9xdeB zNM^^%ENFaff9*yV9Fb>xq+5a3(s*wrmu%SXXdtOF9m{X%W9K5Lk2~8qsp(nmS$}!2 z-MWdQ_xnV%sOCw}uHdUJl&1AjUU^Tp=2*0g!_5V{Io`cjX7=MONsRCKY9#_a&yq;1 zF`*q8^@h{sR8ZEc{Wz({q}ylb=GDrkSXeEMAHT;vU$I{Q2j^iXa&EMJ4x~M&JhNCA@pZD1>t!7u7>kTUy&JxS&kt6iBM+1LZ z0czBq&(KCzMnh?tGL2pMpKZ4`@>aw*Pg1AWM`54vnH5h{M#*j~(5f?cvzB+VwLKsZ zVYAEX`X+K*b|WpLXKyB5Hs?j2*-5j!sKRrcX=}RJo1V}zoy zywLqJ`Q)t*!^fwP;@#0RgMBG^k^s0d@B=!n(0W9`1YN6vl)VK z?UWqKagk2Yi>(nwSNm!0wIIzQ#|NTz8oga4B-?nl?EZ8UPW*!1EcJ|@?cCL78HeU$ z-jV&dN$$I6j%A^0eyII;n>l*3Z*;skksMGm MoXcigB5p3Sp2n?Nk_cXjGC@7ZP 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≪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

XQ(V5<9|5zRdxKpbO_GXcCa^jRiSM!pa+t3x5y zX9NhjJJj4`Kmd+93XvH^OzhyRBO?HF4~2L^Q5Us%&At^x;C*D@!h7b@hnUzQ(hbN( z`jA6AKrV)M{WXI)L{mo02;j~B7=5$P0OB-T=7tR7Tz#LpNVnJ^V#JI9BHcjUb@n+t zPV5*o+M{`HBn2?BJETD)Bn1NhZvNJN_%Nn51N;7Rc&SaBC~UK8M&!^AyrQ2Xcq);DYlbqo!`O>HQ=7*8OuB0;Z`uxn2Op1CNLUHYy&1@+g%%H8#;y zbBX}Ui}ay3HT5cerM*Vm0U7ufx7aaughNhN`*v`lmAud+?FG-=Vn;A=kIP3;_4)0hV`Ee_|9lI#~ewTJYTpp*rfD9b;dzyXXWsY@(MJ|;blxgtlKY%nH_ZWmJ z7+=HM;?tjQ+H4bMV4*sKq>f?wCw zzQIuqiY&OPHj4_~KUiM2r^B}5+l-fvs+;hl{o{&v)e%9TR=({89vIyh^!`ceyWoD$ zGEFvLlUtyIejLU24=M;AxWlX$3bLBse@fdwtSRPbhXa_hb&w|Kvy%sOcAr={B6?dj<6R^kt}Sri&SsNjU^4@R>6qxZvuLHmaX z;{_S+_XfS+xZK+`YL5HO-oM{vMbY^E{l4h-`d+t%hW9jF@h~Tks=w{kUibP^mO+q_ z2i7OIy!$fAz3z)_5XmjfdD;8H23HsxHcJw3aSA-Fo`4vBh`UnVMZUy&! zw!FvY&vc0Pm&ifb_{`W*^R`b5AGNm+s>c5BO9VP;sLpDE0;EUdG=fB(6zc;z3H7m{ z`mGjFprQJkssMuR1_XovRtcrjNd*E(B~-~pTZ%wy65QyX8`Kg4D3wqpkV>FOfB=?A zA2o#8|5+b^fRPFTV{C-RDw$ecB`gt=q}AE*R%@-*$0k=F9s)RWKz$Gb&YEWddIX(x z&5}ouN{yDN1`0e?dW8CDQ~eP2En$i_PU`~@KzEW-X_n=W z00fI$${*3QV3iO8P$he-KOBK7!5|HVLKJ{tvfOR(&B;!JpY~z&ZhM%`q(8?MpVo0j zbLVdPizZ>m(koym_Dz$o!#U@;B1GfdOQCk=q_J`LQ0Ls=&A~bp8(uxH;Kc-K$K3=s z@x)}Y@^%RLl`ZYv!`(y^-)SQY+UDRUxSJA97v?~p!~=@vIZ&W|cDTQ(vgmi!sN|dXFJUwhh+imr zJ6cZ8n-^I9qdudkey0ig7p)OczCrfdeVADzk@Zd1fdo&MsEDdZ$zu$(#88pk4^_X` z3=$AO94o4Rw@YYvY>ccAB~Mhm?mnZ8st54{F#0n^$wL?MSpAvyRbAwXU#$8GE_Fy? z1n~nlqU52AfQqPkj3rhmJfikV{5ER(X{!R`PMw_t8^Qe!y4m?j_ec}m?}`>aiQnz& zmss#f!2MAB9u?t{^sv++>K(v1P*aBy6{(0&_2aGNr@5W?5g5V!Q25I&)x6fm5)?%+ zNOq`4vak9JWSF4SuRN_)U!#j|SMNaqFhUwVRd@`VK3w0RT*CD=RUZ_+x$KrO3Vp%$ zuknKoc72;a*zhG7d|y`G@|Vi%nu8yrvqjY zu*m5mY@s#GwoHD!y~|x|zy*eW;nfAR+f{dak6T}$st2dLT)m+hO@X)fq2`PH1!hyI zxA*$Dvc(6tw+680*cKmN-6b0S@XT(5^Vzpsb`QwquP&G!Ve6c&@VR8Lbwk4+cO7i; z_LAAPx7bG~eFYRRFfohdF0lS^L+tyC_B|}7DVnwIFM!j0rpfd96|jElTJoCOuVDpU z>-U&j0?luEs%~#x-t`-cXmZ2rMy^v$)Xs5f3StLt5&zmUHS~X zX1yD^lJxIrX+Ix%&1u!OxFZ)`sG1jq9qxhhe)cw85b&CpW&zXr!3F81QHmBj97qkC zTn+D^VPEwCqXF+{dxHgx4i^Ognw*!mXmX@BXmSVLCp}I$_774+_J7@MpGMQQXm4KH zwo~2@T?^_D=ck(*!I;H(>Oa(GF&Mmh3mBdcct1w2@Ohs|Yuzk{x$5ou z620C9<~XLPP7w(Mqa&fBLOSWAsuf5WenwS7h>ci^fjZ&0bhgR04)$`JIy&$%j#OSl zHmRA7Q7O2zG=)NE8>{ql77=crV|Di8gy4xGggPlf1z^_S)l zf-82iZ=_Qp;BDCQibI*_Hn$yS<&!~ZpHhS5%d7zWtG!w-)&^9{HhJC^Y%8Yyubx`_g z8}%dYk-GF6Jrq-I+9&kQ(L-lh8}+_9>=TZ(G0$GF^K3*|wrYNb!?eA+&4Xh!KhHi> zJxRN6Bkj9+X|(tHPjqJQ?Mxi3i#WgAJ&W{o^UwvpEyu(|fp>PIW6M##3veQ&4~j@9Ui?{m!MZLW=K1o!RU z$^s2&wox|7s&B)rM#?snB6=`n+y5%@CF=#RIb(hesSSECoEoxTkQz8Ok4>|+HK(3t zCS)6&nrPF+QiN<9=E9+#)KIp;&zx;$4a`jPnpOH;7HT&7nXwdi*`t*jKNAHBr^Z*~ zRh?zUQUtHLua8l|YpB_tJua8d$N5e#6ApPcQnB8xr-^!z%TkYCaX@3v3 zj94Dfh4ePaQlJZgSL2na0Ix_?=DH~s2tO#wGN%aFIhI0Q2vNA(>B3kWC(JKGc|4X+OZKLBWa@0xvTb35-mX#{r%50P9v^S;27TGGO`ieKnu}EXs9SD=OMJE^s?9b}p6%~(8#UzHnZH5R z+E=akf$lXh7#CIRST*DkR`6~-8vGoaR?&@Lstq1Dm_6RBR!UaTt?0%dR_#hF9+&u> z%Pw7W3kTrNJ<#kD8a#OyE-`N~2eRN@h%ZsNqRlgg(@b2#+MeJ#|5%L1h9LaUYIhC- z^55x`KwI5oYrjG;_K!6h8+!Afs~z*Id{vr*vCU?Fc;_D89{fwwyO#G(UD%j$v)Pzu zm?gswy-;6kk-9)gtZ{QD@|K$R4EDl1?JXJKo3A=c=B{Z8Z`id_KL$6uzBj*%kRW@3 zmY^RqLoFHhW?XJ|WnODI&S=kT-BWjT=S-pOT** z+9Dea5>G)l`J2^qO+qSuu!HtRdHiPRLll1i(+fs7ubYR)AMCyx55CX|I({wSDSxnT zN;iAkbEE+pW*%g#mPT4aWRgjK{9q7&enfyDEYi&t2Bz!ON!#S61bbEQL+nQ|J+3Az zh$i~bIrGr2D5TyrJZ-euAX?EA9TBwEw@4inPrKNvrJib|u^ZJ72FGYC0-mxPP19%6 zvmD*@q1^B)*pf!(+4Jd9^E(*6Y-|3+vT2v#Bh+gb?(OpA%+_4EBnIqQpc)_z)U20% zR}ut`w+X;D+=X&c{-kC=wV9U0m}fI5+^H4s%FcHFZ>QtI&LCTOo6rGpp{QI4Y(O<$ zDBl61heTlGg<|>7bYY|U>Lx(E0N8Mw&;(Ha#I}vL{g2qT%WR~>#?Ek|NX>AkaG}oE z<#K7t-q%O>QNpm9G_P%ADmz$*{HSP%8F1bhVg`ZKgdHb=*7%oa_Q4!RaTqiB3mxaa zripBRSk!iGhsTX!V53Wv&`UaM5)(gtPy6*@Bt>S!Uq7~!aZ1l)=Vv4FoqxGr05+1f z#%Z>=H{tuL^Vmn-z~-zHbMz8+e)ba5b2Jh#8`2v7`uOSFR{!+iG_jZ9*GD56Y>{kS zfH6vI*!*z;(EmZq*-p^>(MT4$ucyWSzuvh>+gn)+dqQ7DoL1e6-yJRz={dc_TWTbs zm)x_T9^Cx7dP%;Wcy5k?4cZCRE82+%8*ag|nRK`%d?xparlkRVnHX+}MYV#xVGmzv zGcu&h+YzE#7DchQiCpT}yflEf19;O-I|T0tdIK*A!3K9^lzTq|nlRM`wRlHBdT~w2 z4wl)#hP-#ZMRjWk0@(pB2*Ku*<#fq=ujn-a_cEjzq8Ehi zVXTr~UXaO-9RP1|LFO6nU845JD$D6MDA?4rhduUq=8)xdaYtf%0Oa6~T(l0s#()dL z-aw>zW+@bqUWzw39Pl>1ULXzZ4f5XUI+7;uoolWJNH3JzN`3eW z>f2yhtxaxk@D67-LcbkS3CGA_=vD7;ik*B2Oto2pHE(2MI>JUBe6SgA;umy(HBC0U z2z;{Hn#pFgr;XcS4WPnJWVb?}ip+;Mkw7)t+1^v^G7_smRq3(;s1_?wtuoq!Yq-Jk z5!+i|$#lXgFfbopMo(2E=Xs)|LufCws&>`kh#o4x`nb6vZ{qN}9ksZLXjLSsvo$qH zltQ;6RbAn3BA8FSiEt9)H9TM|nT{*%;Y}n;;U-?ThuCC3chqYGL_M<5I6Q=xdLMZc z$$X-XfNq7GNFC68$EBv#b@LNuSa5BoO46G*^H6F z23rlYQCGuYdPvWEw{5UKqz_1r>N74pAi=wli@KopN?xwoM`G^i2LbMx=l#$;@0a$B zi?2sI+cyDfT@gN8H|Lx15H`wus!5B4R~+Vwd|peE5;Dx8!gtB-NtgG&{|4`qD5I~2!)u|7VN79E5=88~?&=LWO0DXWO0ewJO4pVCnuE=QTihx0YJD@CC zlRyWQVV-7qVSB^Z13&;B{2U6E>3uzx}TXV0*JH zFSxDp7(&6?yQOoe`(}HiCSi#@uXaUXiJ&t1ii1gY*xrNfX{Db-jkkBy97UllF^b|i zA7NfN-+a`?vRs`HA7Tv>E8v!GcL*ZO%tPDo;6F>r;LGPU_7c8jV-Jvn%M#Fw8y>!_ zao*s78;9cJB|6}AS%_TiEHgu!SlihXQPYMzKW5 zv+I!yDhpMz*9rw33dSL-1SN9DwmV#M?>WGsz_S}I)<>TGOobLmHo%L8LJkF<4g4Z_ zp-RZJQ6;2NsFE={t(~axD1aA)7C6)#rBN&qA{RLn2-MnY*xF$w0{q&isrRGm9Rj>g zxw87QSA_;QQkY8XwRKywDJHMRYLG$ zp`b)SpfOngj^6>pQRq?b&XJ>ZAdiJnk;~ zJRE{}cSlxd(Px-FfQuX3JNZ8-*XruW^EHFbeRgpVx-}WNzHIMcUC@ZQzLWrW%o==X z8^dsM(cwY7JnQ1E1@lLH@24Gppxs@}Z$?@WecZdQ$-woE_CUP8U|s7~Chl~LoY3CE zy5Kh*bL+y+sy9ILkBfUv^Ch?R?&9J$nm~MJ0 zC-LINCHLap#pGt2rM1xH57sT@!`(gSeDACFW|tlQo_nkDRGa(@ZSw7Gyy@G!4;u`t z`)J4nZSo*q(>1e2;)N!U4v*&=wn(ozW@^#lbNN z1!1cAE762)4qe$qGn57Td3$Zg#e`BgY0aF~0LtSv2x{W4QJzO`xtUiYoi%;KfwzFfO`xA+9E5%j;sZ4t z#Rymr1TiY(xP3(jtmmwj1)Di*f@0*3zRv^kd06*;2{qB)9_K-cVA#(mOs%mVK3wIn zACxD~`%w+pDM2y9VLt;n&>)E3Y_{)`?bHv?@6&}62X&zYWC#K{kRc~^mBe}5JROzD z&FW8+aiPRBeahZm*G}URJ7frV-Sa~_@tYa7s>CcS^Rxrmq9$p!tb!`BL{88owJGD) zUZ{j^FJVT){jqIz(L^+@yewgX0)2}axOp@s*|qfN|hy^ zb3vA%Kx1`+bM3Fr7*9b+1L`>LV=QSb#(DKKvz$FX4qGuE7mAD7jSEo z$r4&uGpaSoLVZL*L9()Lr_{VOuXWV%%OQwX9JH z5)^1}t5L|3NVrDWyq2cbBps4WbKjGtGFeppdJ1K_#zwZ3B>*kdCQU`J;+x$9}K zeEM6CfWR@*4euzIaWALa)tsk%iogLr#j6>CgQ&4Z4R_wlT}}ubc6X`< z%~Zf{OTvIs9ahndOL<5KcQl1xDeT(;Qe4NJn@wGS6OviChu z%-~b@FqM!0exPaiY|MuqY-p_^%N2&t;Rc6k0At5|z!7e-XFkneWaYT9HU?Aw9l=g| zktt`XW&7F{MuTN{1^of>nc&u8LeAnA&vK7^X!_t5qsOwluC*x4CY=gw*Y3KzF3(ld zS6jTukpVq%Z#X)*Fc(ap9`<~DfLrg1z6$O$vL*V1TkIX5MdtW`{@^07R2hK#ySeTo zKe)UH%!T#b2Tc`v0QdK@=>cA0e}A92x2Y7eXsx)s-7L%nNx+LtF)&o)j_9tq#gX{% z3X}e@ui^?XH15M&OzyK@=?}RNTI+T*V!?gTT`6bj`#=vwBi3tK+~Pa7w}adVLKc$X zr6#$^eLA_7TDE|bc?!%6 z`#Vh^dLX0sjkz_6i@^e}G}r>WGG_}j^-9mFdzQ39uQY@%2?HfA*aEIJS~9NmUVTUb ziOa5h+)YB+n=fg5zOIpqTP~%D-VCk#tRu&1}YVdwbs+!;eVGVM`G6b@Kx>HyaTu_G4)<70iA}G>CGfKhR2`+Q$CJHFV6*^Q{ z*V40=ol4yaE(aA~NZJ7|D8@*UuGp6-0WP;4zJzTEW(e6ngfN&6dAxuf_U@VC_UbpS z;UyL+(eJ_xqP-s`V6=n6wdFROut_*%sDc$lQvV&Dfl+M&KRW8&?XH7qf(Q5zE-tSu z_)xsHzz^J7u%gN82=U6!)<@5fnsE3@>}$vnSUo8{zyqwF$bktMz~hK}f_KU+QsPHF za^TkT$^tx|J5~=?)Y(><5j=2r!`ZsTZ9D`cI2xRUWE7! z3hq0cSBJ)eu0nhVxSw`!b3j=E?pIB95!}&L9@z7oi0|#}kq-DOx=PQwyd?Q5x(dO4 z?Efsiy~rS*UB!bt`6^q=UVSXbmICc{(%$C42Y}=PzEgFfp8((4Qts7R*ic;ncRo1o zs=002b;NhR(7~J%!2v&{q<=j*FL3N=*U`eJe~lp}96L-X>D8^(H^=KOHLy)r!0ytI z+t$CA1G1mi$8zUv?IayL*mbw^LWmCyF$|2jz9+C+lpN}fSbk64H_+%u&K{@r zhGvL*>*BtcK;JDL%5Y-3aN%t{*SmScg9v`Pb?)Bm9Y6u6V282T*u2fb{eYnv=0U*;J z!Vf5fA9WuA@m_}^b+9j*R}crRrUe%a48|F`gxCx?ZlEx5C{m@{%*p%0Ad5KhdXB&h`{SPL+@riRxh>8Gj8a57b1(-6Iu_~6V5O$ z=3#T-PUsAWxAIC|mXY)lcN1_;tbVC*?Sa6P%y>6}1;dqOM!3e^1Y8rVaXsf)oRQbl zW5F6FnZ$x^#w{WATC{}$2WP6E@m$k!ChumW6M9eT?2Gr#Fo6Z0WX`nx6OeoGE&v4n zZmw2m*pp0p!k$|mvC$3br3ZrRF0E1z1TWOSfYu`xM4{J9wI0WretN^FnjQ!!^k!*} zj6i_V4TK&-WE|Zfssf?6uI{6uJ8Tj7VH0|s+ng~Vxab!DdmwnED~O-!7ek*{znbQU z&ixi*t{~>({}Bbj{^8LD8CQ_;`l0hl1(~WVh_U-0pAO}>&bfjZUn<55;^nsWf30pI z-e{jYC;JN%q2~P<4ByzhJ(HD8FYrU2zp6{MxOK)JIfd|zc{`!z$^U3szMg$D)Tz4WK>@-1SnZMg5sbjkAuJ~tKc8+dwCB164!~%og3($tD>oWH-=>g+YA64T z)qY$b?GcRrS8Kk#vn;ziVab{YOD7(o?8m#W2~IOGnr#KYP)9*aTz;97a)XnUEPG$@ zM|4HT@#^<77tFG}QJqjD|9hkqu#JnS0g_Pjuq>%6Y3mG7*L|=W?;})F5|2>ubS*gw zf~uUQ#(VU4me@+IRXVZt1;14z41}ccAvD|5!9985vpzo@hdngQ`Me@*=?L2JbDEB{ zFH~1Ayr-*Z*_jYp4p?KZq78dEhothL?C9*?)(~x?@)%M5XcSOGBR!U^;Xv80Xb zIS|&}?BOqkb^q$9JrITVIF$=rEH7UE2YcTECRtT&?Z9+3B1kY045*lqpctMor#P4c zV*CXaifKt9o+IIp>^n4*xoP^*+6;s(a+2NV@O#$A@o* z?&@=QSZnQYkWMU+p~`5P%M2}1A?z@hP{mrI=>)0Z4;9M- z8K4+w;|MzdGGNs$L>q4-EtpiX5N#}q>186%5VI~DF$V!>j0)ouw4nv88es>uR|;8? zzkpRQGZ!YTQ(+t`7GlmWX~f(sLRO49$E0!Kly=*LxzyInQ!IJ0jhF~K=*2|XftFQL zaA5+4ER?8*N*87xdEsq-^p7Ap>1N5$n!xR&+NGSk5sjm)^bXyGSH7V`B`0mI$wymZ zP_ae<%7^L%i2uAyqqJ6_4^9u~U_z#IAR)s!`bk&9K&j#)Ee|s)eDsfrxmPEE*%NV5 zassml)?z{?tzU0kWV<%m&^eHhqjNAV!#N;4F(=nm6&`R45+u))=GmPSOiSn2=|Qi!dQCk}B>pvpaXAq4nDew#-m(iY{_q{KKYYItS7+ za&mMLCS*vw$jS5%s!qM7e#@Lplus`Kxd*d{e?WL5%8xDr&mg|H2^q8=*?3LCcvxjs zqZ8Uyb0)Vdp-|#2%*kD4tt9=!=448|a1M}r=(}L{$jM;#Ov_Vr9~$eo^Q45ku&Q4q zHw&SJOLC8#ytb;3%zmq;WlQUiR`tguC!dsd%nRgXUM|$C$hR)?Ov_;QorT#WEi)&B z+4nB;@qQu8?0LBm(=xC0qp*CrG|+L&n%;{N*nF5b3&L{P!@~w7m6ppJkhE8Wqcm*2 z*51yL1w);Uvu010)!GVf4XT&BuYjD2sGE5Ze%@L0Ad?_n9c+G(b{~OO5qQJN$>xy( zC!1|jb9C=GlOUWt=D{_F&2QFegdMtq$I_}(ioN0CHPy)}Eh7o$d3al;@<82ia(H-& z7KoVy;pCL>hDql&sXQ{^cm>|{b2#}-Y3xJ>1fe482AhJDGYPISW1x}BGYKBZ-Hv@i zS6`end5{7#*?bfA^H?K>t9OtZF;F*nJTo9Y9H<*k9z8rJL3;Q^(|L^~$P7sAy{MwS zha0u?nn{qZzE9@O4r=#NUJ^tGgnY+V4FGSHa+*r#HJ!Y*Zdzj!>?V5;dsOv3&CL;j z-vHipa*MrL$|3fqs}p;pRinKA845CX$A@n056DroV^F+x$4Ah=LS`(dtDN5n6>2tB zC~njZA5X~6n9x-5mz?gVx+;Lh)Yx1K)NM37(q)hxyXnGEq{cqlb4utqR7cR@I82Si zjg-NrYfT2Jajy6d{AHOc-f$VDM&!i}I)AoJ3Nplv=&XoJ#Bnpmb5@iHqQ`n#lX)4A zL$8U@k*N`mlNHCAC?jaVjqn-@U`UOHGQ?`}8bHU5y5eKI;>NuqgMqFhJ06qH3ewfH zGN@^@qb03$nbv|HnHq^6t>g63wu-^I>#J;Pq~k>BI7@s7*^#>U3bS;Xbaj)UM|jPJ z3!vvDHP(>fX^P(UWn=-}P4Jq3y#N~N>Ljyt8U8Z6pa8m3x|^69H%N9QW8G2J@6>zu zQ2hjHJtPZ5t?td%rkX{*mdq=Fu5x6dX_1ff3e*XSU9XJDRi~(LEW7@jJ9xN;y=bV-+C)t!%p+>!3Kr6JQ-6|&?s$^n;iLH(qSBP~fvb%^|k=2;e zdP-I!sT&~cw`^9kxYhEyX`0pM$UG59-4b1#zv_b3(mkpu(LV`Y>7N$8)>Vxf0Jgcg z=EXwSZgLqC{nJ8MIwum_FsVxcx{lUrX~eBlWu%DCNdUV*T@=)AxeijV6)g#*4$isD zT!d$N-DxFt=cNbHW;FmdFY!uR_)fXi+s2T^Pbzuii$Xoj;)wq1>+?gixz}z2#%q zA?tDRsJTZEsjq?h6`>+rtCckVbT)$)Q7nl`4^Z(%QEK5-BgL;GAB1Z$=}nc!pP9-B z=jrZIroQFovVo0437PaLzccm4yhm1eQrZ#nC?VwcCT0MLg`akY62i3#Yd=7XkZB8D zE0de|2o;g{02M7IBveGwBU;>$oA-9=ZuI@q*h`rfu60rXBlBJjvo6h&L1sMq6*XE? z!d@bl^p#l)LPct{L&dMi2gj>lO%jcb8ioLreSn z!~+aQ>0gfD=uhc#n49&h+2_ z?{!zTkdTjp2uvUO1ZoIPf3yy0fF(fk7Lf?*4tG-{(O2Wb7> z&2A246*>S@3Qd1xff_={hfW-#zL-yF`cMmzPhkCPL=YkB+iWJcY5M!6NO9P#9AIK0 z@T)1E?F4=mEh%I_*#~@BuO3SHVa-g~{1ghQx~0wzbcT8BK>9m}e3Y`LlMe&VFIQo<+c?;`phExNLJ4r~NjkC8lvaTxMU-TgFQ!uTSAN3dl?a_D=j z#hf=N>1QM-gCXfhBtKfPeV4XOgv5~}D}GyX52PQFJc@gW;RH$jbPEAVKV)wpBr1F3 zb6Ys4$9cJA=$^P-L;E6|79nAW!osN%0vrfv zXqaec$Oof!(I?$#syYw>5w$b8QK1jPfnrM7qMQ8SM!QY98aU{*>?^2l+F+0j>YM5j zyoVBibs(e!vWyZ_IvQZM&|IJmh7<#U=)(D6olI72(yawMg=p-}ZG%20TMJI=Ed>BX z)`!3{;6}}>dJBbEJ?gAJMB$7xPVgaCk1Ev8CukwN*U^IBKu%TDFPjgx+0XU8kxsT!3<>64{{Hn6w6ES8$hXz=2AwcAE2p&vg!j+DrO+K4!Hz4I=BST z)J4&dL+|rDMQ6HBn)2BRsVXqnXNEh4*^S0Kqk<9~TJyv3HtVC|YEh*G5BWd}wD(yr z7u8+QVV6@)Y0L+Hij1JClt`@^gBO4jchf0X}pO68lGg&hx zgn}8**RFg5DTIIMz{~&_CIv^NJ^!qZD4}!$8?GaCAR2Hp-8}#U1}W&M5US9OVZ$H= zi2bl(g#VGcHGG^YolI0ZKpQ3*rU*<+CL>sDmXOhsVaB@@LLJn$rDJBi4iE}D6Ce~A zK^@&a00`AYP!vf)8(lvD6om``6h&k1qjUgfJXm{{V8ElaI7$?i)hjp<`)6qB1WCX` zC~L;FVL+&@Dgs+Za74`bgej4d57#m+1kYcv?YX-!VM3@razhPuCWuV7e;^h|8T+S5 z?4PcKFu+gqtNMtaSRaML1RdB;!JzpWI`A&hf%h8`_?UDqp+tI$w=58U1vbv+1da%X z=AGOu!hKPnlLq84fEEfcUxVA(i5Ln|EWyzARE!GiX#R+)R__1%8ypW=1o;Ch6n!r* zg@C>wg&==)5RI3<*Hg0yQwV$y?FmCv;DzHMivWF%%`I43+_mW6cS#?U2Yk=w5BMJF zOG{ak3GM=o7gRi=FPlQ>dqWB~D1(O+cd=$URnXV$f~f-#@)gp!L;4bN*JkZNhVKD) zk&V;+=z9=&&&Y&%bUdUGpsxnnGT2OI-spR9yv{m=*29dp4wSOxi&D9y?}5RLF(jr` z7e+CE%*h2{i=|}{?zbW=pb2IejPR;h3Do5sYKCEb$1QTJd>GAANr>B8LzTfA;(cW~ zzz$ezE$~U0A`S6b+2&Wv%w-`7G}KB1m;g)=C!hbZxC<_6_Fb`M`0CPkVpdm5?_7gA4#GoNNZH zqb(B7zzQjf!VuROSqQ0sC?+bRVAIF|$Akc!5&}RVLllD~08NOZC=^i^1IeSQh>}Nx z24Dh)d7y_f=s`03Qplq%0fLdrT!uWbwernnv3C_o08KKe1lB0> zs04C{GACdfOZzJOWH7?9(5Y#R^u)?dRf`eL^rfr_(PMUvTTF4W>j>SMK zU4f^U-NyhQwaKE18J`5%K(e5lc9Hos2wiYf@(lpBJd|dAlzanNZHm!tiPFH+Nz#{y z+_ggI(*V>qsE=+@AKk5Px?kk3Ln?Pg@2s6Wt3s^SLNWy%v@)R9S2sir)T#xs8hLuA zqGS;Z_H@$=qqH5O+wL)x1Kx>D0kQ$A&P)N62FhU_6ez8+YF(|&xJrA?6y0;Lcj;@E zmyM9la%KvmG&tylih$ZY*?<7=gx1A0L9L5?W3x7w(@l3v;o^|4hk~1eX~0d-2;ZQO zlB(C2YJDTq<^r~k9+$S#<^nf`gHrB-n*ytms*|VFQ&A0s+{IqDF*>Dou{5;MN4Qa0 z3wt4vg=IbE%`Cblgyr&prosrPDp_`nGf0R=xdbm(Bx zP6GF6r**w9rVETHD*6WC)ClDH$kF)h1}bDacqGq^JiC3yBO_ z3{C;2sOKs24qCm1eQ%9@{06(LMI+_2I{LRZn4EudePJM+##z3$qy9BPv<+kmwtb zvA|;n7OWhHhrm6c39~&?Z`xG9;MHIudxX8Tx}7aQcLbG}v-i4;|A*L2OQu23sHh40 zX~`S~p3%sFyXM+S5?MxP@sA!dA<#=mJ|W&9Gn+KRjGZxkFn7!_MG_#p3WX{p4tU09 zagObpJNBBXB+`50JLHb@DDsGB)G=)&O$@jL(O~-MC`5yvQ6fce;yddfMe>lK-o7td(sS8+1DxNd7i$CV^)F-yKl7%Hlhcd^r4l$twyH0!sFP%l6iF&0`5R29*Y*OEe^_Rd zj_P<);P_#=051tGm)C+)9I{d%SG<^yZIIWj|E(5njS?}_5+!2h zBs$+gEx6P3PMYdUO|7mplnN!C4=QnUq4;gI><*SsT1DrhN=)Yixf-ma#$Z+eZp=&| z`hahf)a_;&iP+MrRi=jvX$kzEr4^(l@OwJnJ}pm1;0AsL$X3Ht+d=WIN=$Nvv;@f3 zL9{hc{BF|51?MBP0&1i4!RLmn+l^Ib1;~c9L}oQz0;Ixrv< zBmiWIjsl@*sLT?~4-}%Tp^g?Iiuobpr^#ZdkzV8(>Pi`0jXE&11Z@>60L&G(3VLxs z*CU@WOE8ctkSJ&JZg{ z0XZ#GEozOC04#W-p~6amqK;IuW38q#3>a$663r^A1ky@-NEf|L5yVfF0Ah;B2!x`o zPBqKRsYO`{0Jgf)Y@*f6QOcJE=_vILWnnXaTleS7t{@C`30)WTE!mz{9yotumj03Q z2BV}w@`|}YcxjY%bXgEAvY}dJ1TB=NY|vy)g0?ugU~?LSCPXQi<0KvR(V-ua|KG3rn7`A!6ak6`^=qDTQrA6Q!|wif(p=+&SA^ z83(y@scd#-*=v&w=~L_6S$VbVMCAj46gn~T0Ik!m`oT0HR{eC7A$?BhV;ZoJuKK~W z{@@}%q{w4hpVNTji#!JcC&`|lsYQNTk>{vB=Je+l`Gqp4zof`7l{x*DGN->rCiFKK z`K>aizfVqd4&*Ddz-i+#gl->BF(E%whB`{u>I zMX_&H>{}Q6j>W!HvF}psyB7PBV&9|KzfkOZ75je0zJIYFSnLNC`ys`CXt5t&>_-&) zvBiE|vCkCyY_XqM>?albDaC$jv7cG&XBGQ7#eQzFUr_897W>7;en~OzjtZhgxH~F9 zPVUy$Wq?7FP`R#rRZ3`|xdV$*DA%$0$^4#s!?bOm`Ayl@f+u4m^54qlvTJMmjLq&X z3T}_;QlMxv3=cGt#7I;4w0hk%DLKuQ1kW(MK!gcoca)r{XajGqHS=c-!#fJ(>|F}Rzy&qT1v><(6hNX#5RQWwUL6Jdgq1i~-3Kwj=W!!K&dH|aL}D~oB)dh*jSz!Z2;^i8-k>oUlEijZCH4eSnY)@Ulj^8$ z5C|>v@0X2Dib8{(=1XUGMv`;Ix+6A}=mRy%Z!y+wO#y|9coxkRXu*nSphZ9nkrojx zlxV{|ZM46($5>`$4RngBx)3eQH&qwdXhaJ%)5wWnpunMfL^&(Oq2TXlO=Xm{sG-h^ z04e~7QZ@r80#pDk0w)4mpr!WI;ofsBW$eFE|gF=DW3`9B4q6V&YuaXjQiJ> zRz?ekVd1T`1AxSzu{aueKhwuJ#H_&s_b1tcsh3La#41#C%v8t{GdoYFwN7I3R%xT( zWu^>)hhtF@=6zZeD&k=TVpzB(TVVZw#EiutTWzIw(n*cHyCGW)!~=C{6(KRS;W1`M z24XQps>wPMGFw_vVBrgN0Ve1_?3_lv*6fh6keEh(Sf_xg5Hk=%9)`8k)az<13e3Be zMqyZZRH#bK-b+T|0Sbv>UjE4tW@b6P6aEk+TuFbybfJ01QMyBnA>j)gMS0+AzUz?Ehs0SYA;P3h@NN z!;=fvWB>^-)&-c$3kHD!jJHS=z;3zbV6QZQ9h50xl>dQ;(fxH=YX8-x_FqfO|6F~^ zDc}|YiLoOC+b_Ad%A#T{$iV7LEXWv8Z(meKBD6M_@HajLjnwRnagq69uyX91fZt(FXX4dFfJLUZ2q<7 zxJ`9P01+apgB^530O&Hcm>41Q!owKd6EMLHjRCDO2NJ3w6M``ls;yLMaIIF4h|_F@ zKzIOSK5DLCI3sDWrs{%qF4(EY97qkDIIXwtml|XQY$U)4)heXR0BK;%3=fOVDDrAu z60qLPOELjc!#-rz+A$NJRyn4I%uCicx}c@YZOxQTC&g(@gNzVNgD*;(8X^SI+Gy!i zyD&&wTKTXfN=G{-`vIZt)h+3VrMimJD(UiB8JVmhJIqN%mgx;L(v*!OGl*3d#d`v*lSZfEmyiPXTfi7dG-3~*S4+vw%PCL-$W3t)qOp!lZOz-mrF^55 zZ!A0Qz?dyv=1x1%<<2SJJ>@}{Ur700%9sbH{2-yrLsEWt%8y9-QNox>m$O2br=^$`|U%Jp{)ij6wD5rx0g|4mu%{ zjT5d(C=Zkax;fP_PDV1I`S9wBrS*;5+21LR(k!6ffaLShvI1&=s3HBZsi&H(ROM#& z(487?QPF#*e=Gyb50+gU!1)B-Z^-RVVPe00I-!ov*)$ZfHfA3%u(oDCjbd#Nv!;tWU3=G)^Z;r2RgLW_wqT=&*9OV< zq>OoGWD=3)k`l&BtFGEgGw-5dV2^?`R1q+0GZ;=O&5Gh z2DUI4nXc4L%}6~P%)Igr-Qk7=#O!lSDgn$s=VUs8sR!T`$P{`lcvxd|Z>LoWI-BW) z9@-?01cdA}P&YLboT7JuWq_=%R;>)2+61)5^rj;FY}58sCZPS2gN}$;iv$FGdfMDH zO|cfRw2?NZ<|QCBy&(a`rnerV*8-pRm-#d_y`gtuh%~)n#&fiE^+2pedn&RI@F`Ny zRGm&h4nq6F0yCfhaJoXT;bH;;GTo*N+>m|tDL4f(jg1Qcr+EnosRt`+8W%LCG68ig z@||=$d!b%CNc38pfb42jJI2k8*w@71`~kG>eO$Is>HJZ7J%$uigEQ|*(wlg6A9kq7 zgyOSaoXys~KS_WN9$sByGdvvOnXwr%OEYsZNc8YdGKJJtHI^6T{sm|(kOC2&;pB|a zBehLpywXp$Nlcb1-@Jn1BltGBXP$c_JX>%XqcZR%-20R=(CP)(@-~zertok?Xm~hC zD8qAmsmM@ffvd9+L-!tRbih%f1IBVpscI~AZ|H!epMaPaTw3nA(bW2&uI$zxiT%2d zBDFxbc3}hBS%;vJ10Q9rH>}>(H*P7Oj9o8-H}F&R&NK#9`q^6VtB^zJ$C5<* zw!Kc3!_CtCgS-XeM8l?4+w65py0&T9Hg7eQ&N~t(7yRn9Xz}H@^BnG}b z=?x~52W=4hU?momQeviw%$4S_g$9%o+R#KIw285gRqrIlC{S!3F6wu-n6`(W(bCsFU9sewRx zJ6p-v4WSKU9|Io*xYpVqW&>X@vyNzx^f?U4ZE_f|yND>gO_t^`NN=-6U!HH4SS*(s z$SPT4vCd2pYw*hLqt^vl|12SMOHk-q3@Q2h(zD2cFul5v2{{aeaW3&`ANuHX8YJrJ zQkBMnxtWnE_b?;VDiOZWgJWYCGBONvpsoo*>>6#F!I+C_l>po<&M_$?d@*({lfnnA za-CM@V3Gjb+l4S8FI&SrVlM0=;09refr}=|bo{(&S+s`PMHd7iDcis`OfWa(p1jyK zF}Lc0*kwhZCDKf9GcqtYlQM0ShPhX&9tUJ347vD>nB;lX6pa*&j9g*VvKblaxVvb= zR`EePhGA0iK~e_nj+h(u4%p*V=>&sG&JwGnAiPlLf?4l~fP141wr?rG+^BjS(tWBG zs=={40*VhBBv|s`Fc|xVJIky|H|ZCqCd{E=Dn5YS!_A-xL?4T}0l25hUKKV-0CUe% z*uAQ%UoCRax?IJF&B9cCI1$Wd;bYP)d{&3Ss>@Eu+9C*ZCnPX88ziD2Ow0|y4MDiO zUWWv^hdmNdg8{g$Aj}?#DEdrPK^Sckv*a!VG)O=YUMM{hRD*Gs0R-USP{^*MXYba8E{TCrwjujVFcDDSK0 zm2Dw!hBhwUyb;#AhX}>Rwa`cwOrZ-R@Kg3Sb)4q!oZ9PRRDycgEmzoJfUi3!xIH*n>0s@B#<$^st8h3%;u+g z1w~nK26R*-NHK3lNnn?jtRM*-ln4dF07>Aal&oyMimCuhR?lmAq9z^dRh{(y&hiPK zFrZCqe~-)%=(1)mt>k6&x5ZV><+E*JjzC4QaK*>{(zN(eKjEuF-6)js$gaWFVftZkmu-vbJSlfnTRYIWC95pWC95p z*?6~-30geJ1adNw;%NbkHKhbon3Iu^Vf5q^ZFRa0l%kt9%z#ov`4X9Vh|w;QlgFxp ziG)lMY=*3Yjl!k1_!VOD>qP;x*%)Mk37Jd+7Jpd4B4A=PdXNbieGL`CP>4ZVCRl7? zR`)S2QwM{^_s})xwhBWLJS;A{Li(<*iEE2=h&T+R1SORV^K{Zbl>7Czm~Vk@*oAq4 zmxiDjcqxY@dDG?ZXJw$gya6uebENUMum8Us%+F`0g*LBvY$ z;|jK1P0hVwXn~m@Tw$&wP{Px8m& zE@XB17vnKhAo|xxA=`|~S&_ddo106J-mUmU&sr@KA;lkf7MV72EOI-evgO!>vgfN* zJmBV8O11UGOZ#Wkuph&itXzLZ3 zHgPOmY?E}tLimR2P0s?;MsEe&3OM$J8AX6w)fUgPD;)@BF^AC7taKobWr3@QP9uP9 zlWC*0g;4}{Sd7rc4qEgL^?L5cQe~9acBu-bH))1_Ctu9jjumt$1uE=H{27$d+%cU{ zvH!hX%B`)p0jS7Yy4t!LD`MUVRoWSf*F^;M62ZKEgx|%y1HX9DxW=f0g3vTGv<|33 z?*QgqZZq=o+ldJSa18=p%kuha_wC?{F7>f24-^kl)N~O@wFr5ITnHV2PO!K4qCbRPuxvBX zB4hx@UyMtzeB2$vHt+9aKSH_U$v8|czTDn|roc-9{$5sugux*e10I80!PE*-PG`OT zy@y$mFhHU(O>L-J8|l?}*&i}Nn%o$OXKJkm*0w-V4uSE?+*%C-F;EU-F&I`vIY)D6 z!U&8l!=k}8F%`&GLb7OW0LEQ%@7sXQS)emiNY*H`1{XjF5C_%DuX2Z@oX`&$&kL zTq*-$Xfs$TZ3gTy*j#XTD<#iE(gRD$6Mb%{bTX`_s-E?v&yB)oQyB|mt6Rti0V@R> z5}E|U7L#%!a-$3keH_GKZgZ`loKc;$=92xUxwglvKlI?SByJ8feI0 zB^y*11qA*HBGT9lY!W4rhyW#ZQlP|a0OAU))L*AC;G*!)VY;HOGVVId?0H{g)+GWi zt&&y&Vx`T3mFS-UN^sGb77mL7a#H&QkPvE!=2uJZETDfjGzo$9mE0BnN#a_fS9dTc zfW9IdKmmb&4wp`#m=NHf$O)vcESCW*&D9lk6hW2<9a)jvrq0otAV!3D%I%lscTt4N zgOKC7zdvO8kl({z4ClY(?Y<_y(;s-|cp~3l`ha}H`^=5Fy3?$NQE}@_=Lb|=#$EeT zJE*4BRkD1HyG-;$%(a|(5trc>`F*;k__+BmxJL?>&*l@i5RfX`naLX`bH`@B?75+U z1&Gj>7#6$SSJoDTGXp@4b78g2(oEPdf>KklUxJ3#IyeJx3d^mGw*j2O zghyz@QlTzF`$a^Wt%KxGsU7C4Xr^9NhEE^*dK?B1P zKtnWPM5G>~i@QQ;+**TF-CDqoIWzAQkmVAHLOs=G7a z01x5?H!|-yFF+yj02ty;GdlHFt+c-+9=u>=9n$mBrVwsXA!5`FEjBGSFPQlT0cxGd zrFhMor4WuV#gwyGvku-dfFZ)vDQ!(7Fht4$6X6SPq*JQRbU3QDUMvb40#u0C++FV$ zG?saG#ytOa#||l zj8SAF5WXx8vA~eUCejcnrcrl?0tQsrU%J!6v~w_}w+nO$cWvqr%?;=W3nMgoKkY5J zrbf$^A=#A|a6%U|$L#c~nxC0%Cgm*^gfFBQW!p?@nhH(>*=7>69l=X`5#DJ=-7dIu zVwf6JMhZ6*b(@Jzb#t_V8KDB%F0xr>JKz_XQOtI*B#;YO5(zEXEG+4SH2NS^AluP~ zAfeXN8`^E0fDN@#GosK_V)m~w&mmL{%mpu_G+F?;lxmYB_yzC_LIsQo*$#06W<=xy za)E@mP8-3H>b9Ee0`@4sIG{Iez>-d?&~r}8mXuIYy8*di?FK4OGtG8wb%-Vk@79d^ z<(d)kQrIQ-uGl6^O{Bbd!x;uUixtW@+$F}Y97dyXe^*dNe(nPXegs+}F;mbBgBV}F z6vsxRhFbR~Vrs1|g)}1sBxanR+EPfd5CLhR)Nc@tMw*%Vtmq<>%<2+EBQRB%(OjXa z5eCzeB51OC2N?%8L<~$DLNtOIF(93lR(OP>Is%s%imWICGa>*+D1sTqXw*YX-v~$u zMME?i!GK0<BO zA%j>^EJREKTmn-?G$LrC86hA+FYK1vD9boBP{cye)I7uly%3-&GF2iba@2*=mb28% zVnHvYShz`)LYBUF%l_AW1xh?SbIzJsEHYJcRJ7$lF9b)0ScuZMoyDS9$Z;&T<$$9? zFC1((`HeEynUkqfkJqftfsvr)aA3cD)<-qAPiba~|C4)XTcg3d~tw4vtASNU+61YBSk zA4Xev3Ii@uH?i4Cah4i-8#n@PgMxs|Xxml;F4!VGrJKUDUgn-V>nzbzvL@QnQxIz5 zDM;Gj77Vyc1)ITBkh<4u%!R)&Z*SAQ&6rDW0Z(DZJ}Yf(bdy@T;U`90Chaydwr`U* zJf(ZClmj<`nsZ@UeX?G1M?q(fN;$S*1y2FDux_%`OfAA$4w{9qCq-GOr=X?0hHf)& zsDciCgbi#RWMU*Xuvs++b0d^;;3-trM~bFCMpnUQWbNeysa(yd>Y?V$)`jK^&D3HX z8e!RLlkEAy+z5KucFLZgeN{aKor8L{G3G{2RP_*a&ZwXh`m^l5@=!PqimLXjSjZFD zeHh)k1N=VdHFqIb1@z3#0^BG_dK5C1?i3_F3ipZydQ?7h7glG~5PlEfOb2A1YOWWo zwiO?=4j5BaAH7sykm)lRVSsaKl`ypxvlZPC4!9s!PKEcaRtIFB0_Xv72D$&IhzCAc zQ&UyM&dgTL1v|q5k*zw2ejig+iT089Eg<*A&SRxv1*vMHW~)e!0C(VkAoomI^uZM> z*C0v3``~&&&CFAKwXc~DcuWSj=zXB|a6rnbNL2*R%u|3nEu>*3!kwt!mnd)sYDU9K z%vMNM!?kWaMkYH*?k8wn%ZjQX_lwjGsi>|J2Sm2oAfhT#70Erb)n3U~@Ih3!!0&^? z$Udu3b1J`$rF>JX>QOhxEtsLFP?rAU7-z2ZLduw;0I_23AjDFzqzwq6Cya2Zd@%ZxB627*)iA9RN1zoiWi*;s5S5p`EG>

OO3f|X$P8Hv*qb=4-UewOH1F9j!h%XGiC~fPb#}6l{JaP>P|NhK~px`GgJ9*5tt|mdgkVP*M!io6Sx0F-|i=A1k>0g(eS5 z0jp;h0-OCoDPZ;Nrfn}K&lZGk(%(b41fXOo1+Wq;U!!%vmXrcmX_D5z0GH-y@oT=W zLR@LKzpSt7H&*q4OTbFoWH~tC(jHmzK&*7c%-C`@cmPSZ#o@iOS4^9KR9qxY`FsRO zoNWJkOgK9CT0Z=xDl!2QOIliRCOjggN3sD(YHY@ATAJpc3iFM1KB$Y-ghra?A0nhF zl5%E>=S4EVP`i3bQIKrb8g+4tRzP;;)|}yd)P&%9XDiA#a6Y6Q3zC>`qW=LNG35{* z#e6d?H{Xm`&qKqQ1h@Mx-=PgUwtoa7X2A;QDoG)rZCkn1~sVT!Ya68CCjZ_wj zAc>xblta&hv3r;CCrf!=``F=pC_5wNkkX^(Tq3KNdYZO6IA5eF@VpV)`IF~% z(`3vBT*cO$mx%L`rI4b)^EN0;f#-p!!0pIV3Tw{itNQA?cd2fXN6nej?I<{7(uM_R z?pEkV&|5ygASZ8Oay=#bYQ)PL)-X+G?CwA^0K!Hk`Hx|fnYd1&}FyW zp*lD`m5J!>1ela1N-Lp6K$q}#sCP@v#>>cxz=z=NphQq6;O!RxnDqIYs!TA|=6U=7 zl@c-Aj;ct*1I(PI^&+q$>+{5zQN!D!Ixqm{PH}h;qkRH1kBfSTBnwt_UW%Rcb}GR1 zb|hKr?QKN_CbXohzhKr~MpqxAl!$p2eY9Cq@0@Cutj|-22P;}4J`X;$+AOlzq+{-2 zMY~MHU!+85q{HO=#UALgmUR0e&jMXG%Due_$^^aLc9_uN(MQ`$Zs35oQs zw#fu}cCv0AMxI5J2~+JNU9=W8iPZ%+ZNl4;XLm`Sh0hAD(K>8WIwEs*CuEt@X?%FyI?TDc`m#?6i-((~Jm%_J>ResB zl<%1GT&BdKy56!$iHnD^NeR1$v2_?jbyz%%O-dZ9%cMLuDNRm!Y*Lygo0PD4cy`KT zlM)vXFUs9L%&o&4Q+|`~9>(I~UAlYtP|6?H#lt6L@$l)CKbP{=i+zn^UrW~y2Z>18 z#}(4h69gh1GY%VoLscwXjKU$l&~nGC=d~(UexaRRET_{bkChGbvH4lqM`-UP{y{fS zU2XELjBj@;U>?1tz)A>YnFsI>!(ql$#t4CCnYKFwMMT8KT0~zVIuZFcb)u~X0+D|l z(EIGjKTb)Fm6Z&{!UlqT8k>eYFpoA;K5wt>A7macUA+_^0X80ZWXKO`ev4h&@37rTL@tj6P(hf#MslsksQak|$B_=l8xhUt7>ARQpFp23I+@XOc?kIDfT*-bwg35~ z4i_*eMwPaK1Vz>}Flh|@gP=&t9r-p;P*`SFevcz3`Lw6t1}Oyxjfo>zp*ErGth9?w zSA&EaUVs3hqd*60?BxTYry%G|+EY+ITVGqpX&Pz~uc=fgTBtbMMY4Z)1prW(`sVif z6Yf_A0H82I6D84?~hQpd2tS$wx40nk+BDzZpbLT0t14;;; zWLgoTREf4&^)b_mLrlSYjF~$_c0d&Y2?D+{-QZPT<)eCI-C5Z~L9omv6d=fK z$8J*OL6FIgTNQZ_WZ-2kq39-%8SFR@FJl!&WXIe*%2gB!`&4w+9H@PDVcH^4;e6)~ zW2Gv65&Ws}6>e%(;HN}5>~9D)dOO?0Y770lo}fQKzvs=wMcdr%Skb@f+{Ar@3KqUm zcP8|M`UU@IDMBMW9U5l%Ma7C?VUg!8pP&u$hn;g|w9i}VGz-X%2HCPF&*Nr8Tm3^Ng0 z&j$2kB5Wy%5MJI{`&fYfqGux!4v?X@!J>N+`i&Iy2j?E23;hcHdxU8cgY{ncl(!G7Q~|{>`<*)V)ZC2gu5CNMDu)bG;16@WdiNNtrNoubHxB zW}fUDUsU857kQB3$b{F(Lg5X15f7R0F1dndpDdXTfVK)PPZp``H(LK}mC_GR?reqFlYEG!84`KQuKsXcI^QXAT?1A6|mK!VUn zSwngX7&(Xx8f%@lrBrAE3lKa|vFfNTxdnR7Lg-0mLlqQr3kw)LR+?>*RyQY# zri=#B92y#e#|gm%r$sa;V`SKXhK6z#FahERNn>*%jfIS{5E%dyKtmfQ8XCd|%2i_} zc*Mv7WI$Lz84Y1$frO34xr18k1QxJdh2XJG<41%AM+_`DBYi#8&28}DK3HmKEsH#0 zL7O7qw#auh`(UkZUQyyN*L(u`RRvtf-Bt6^wEusX`h^mg4V7Yoin z^&r7V^kT;d?BTvO45~-&kM0W++)Cyw+veV>Lnn?rm?Rje9=RVLjDqthQ}6<$pCmOe zqI#0xxzZc7&@7ao`vTR&gOT{@yUhK7^l;z(y1416j9Q*HvQN$2d!Gu0@QzYvCaNzH z1`PV!OX)8m{SX_#fet0lzUN-&5+}~Gc-ob;pj3+Et340bpH#gVuybnEcAMk@>{4tM8U00w-FK_ zav6PKgJdy6U`uY{2B`iXlATV+q(u&i49;*)1kf7hS`CofCfaua{2N&=)lc+YFqaVp z0|JBJ_7@<`L`D=0X8_9`D;GpZemhh5KEM;^Nj->JEPBG)f?IcXN+oEIxB=A92!WZ) z&Is`~FVkloI^tG}+ zyRcidBH2H`FSLAyp=QAx3=tetKs5aJW*P>DUm5WOf*UCaE@lD7|EWU!X!QhfFnnnK zOQaAQ4Idzm@gJ%VM9>J|_UrCG82&L)Ku=0%_W4S7o;1~U{w;Kw8G0VttI0?BMpcIh z4u+2uK*I;|8!HV*S>=9H^dbfjzgc4VNC7bUB|0_7_`gQw&rO;FX#08GkA`1a3IL7+ ze2c^nh7S=GAPxu)iGW$4o5=#O{eH>-Y4u~obOgahGP4-EJ)q(rui2XYrKo1!T69Z8CT)^SFTE#pBJ;yAdr;F8>h zWk`Y#fe9O^-pgc&sz^)ChYSk{2xyKdk$i~S2!cajVRcp#Vq_q_D-~kL$Y5(Dm8nAO zr1cj05W#_wfhiGsFY;kThDWtFLU4%S0AyHGh+TcD2}Wedln7Xeut2dF`LL_>A%fTu z8Af4fkkkY#D~v$touOjyJku{uF^FMdonduIiHr#(cFc!|r5bqQun?1B3$x&m$*{A8 z1?EF=J5&P;#au$Fw(6P(r5^%X>q2NO^|VI>rq=B zK8+cd-i2HX*CNgwRG^u_wLrSyT{h`X*PXe9n(!{myDCe%yJdC|P?MSolJ0RWrJPl@ z6?wO|dKaoGkWElc0rhIBtw*S`BjbW}brn%}%`F$q=Pu<56xJ#_p_p?!2E9V1RxgMQQ|-D1LrXb&eMRVC4(khZ zw}Y0?5B%ewUvh%L0s`B)qMpV9X4G<+snL!zg3e?enwe>um;vP%Yfs}!bFCV4HY+)n z#zK#UloJ#7N$Fr_RAIudr=yllG_X+0X(LTM2q{S0%-JQTm;)(?*_u%WA!Vd#X~-y= zpQ<%lpn1|*8&y_FU|B6&5~3K3zyeKYk4QNnum^?19?{EVEtIdJ*9A0?eg*~>o3q;q zlxNNcjz?ethlQGhv>gKrDmg=CB6)aj6Hiu(InZO7wppglqp>S=hs$b}a<*uVc4sb) zJ*<7q1oU}fg$2h za?=Px+nFm_fJ2cfsmm};(x!))ogaA&6$TAOhG}xP-bh7-5;na|uccolrAZ*rLTe@h zg-yetK~GPZD_LO8NRxFGgd$Bg(lt}yrY)78c2;XfnnZ#G0;MPegGQ#LO%FFCVB^d^ zfs+fG4!}(TMUf`SP-)PBqE?!LHo033I)YFlP$tW>k}RV&*VTKF8;LH{Oc`o>vsa$h z3D$Nk@^ZPb~a7pGGw3$*Bb*4xD4THsw&X+#t6xT9UTM^yL)#2S^&ier<6P#C-5H_y>4e zQ&n(U7u4Xu)8Hla4xpGVISW4Q%v}JS4fnNSE7nwtlZP zvB$6vREd~R7da1-X{J^X_8Y5oNiT^C4o4jVnGfSlG?WlXLx%@LsZP_fy_dsB>7U?Yg6Wb`9MJ!WuA^V2VA!+ciSQ|A<`fSBXAvFA>SW7JrYK^IbI<=J-RuPVLMZsfRFR# z^)j9gH%BHUv|}d=XVag(k$+aYX`=#D;qSfSlXoeYJu z*Va~5)Fzk)f$jk9qJx7r#_~iLT{gp79r7Vm+CgTEMr4Z_5n?8q&g_Wmz!s4PNf?)# zo5|LTP|Gy9O03_+wYEuN_#?@bkLy#+IU{()7X9&7ot+Ay>O8o?ROkbBWGmq z-7pzWgHSuR$b&FubT|!7I+Ke$h1wZKp0^POjVO$xhVB}5`5VgWk?c*^w9dW};THVRHSv1(4;`Gez`=lmG)O%V6!I{;GeVNq>e671veMPwL zXzm874EyFWIe7d8-PvKo^*kfMBC9Xc^#>OCZV@Jj#15z5S5TJ+_O)a#dOXP-6MJ)= z$Y`T&x1Dn9GCh^gMRza6zF=}tU#-*6GhyrW@Ov=1wOX3lq&<1Nl*|DEMgesWHbQRCWhX%7VL_=23$h1 z0!ghz3k-b(lnfB~3hc_f2JDLN6Xdl_B}+aE;VY~h#fFW#;(ME3f5UVZxm^@1&X@tr zTC$b~+^(LETO*@E2t`tBsdYyfcW2%0QKEH6h!uTJMx%YR#=vTOM%SlJ%AL5Ltpk`y zYD>)qH88vlqE~D-yAEjL$ZHfrS!1ABaZ2pFx>O%w9rD^R9l#{LV~t^gxy}T64P}P8vgMmX=t9YBNNQ9;QD#_cb{(L93$tGQE0B_qZGD=}8A#wz4JSVfxHN@5G>p~IWN9GZN$97uZhqqZ71%5{4*k3!m zhln)z&zMNiUS_C}F| zLBX0{Fb0K?Jy5TPA1=$5NhLu=#+x>&NF@PGU`;e7pb}7#l^V5yN)WZJ%4~rN4C+Y1 z?$qkJ7sLaefQKM(KQDuG;31%rZFJKzu?eF#u?YytAdwqrO2af>Te$()#ENnxk)R^h zpjL=MMJlpEqxLQ}D5}ihAu({DQpKUV>=U!)t3oycDgv7V8$s*_73prSd>m-{eG#}v z>h)7mlmjY3)P^V*6}kClDbo_uFt|pCL?bHMA(i16vJV-F86o?$Ue7>a5=A+NY_Jg& zhat+5jUaG$lnNH2c8OGmEfs+-$B@l#5ytCmMRzmI(Ws5u6+$-I2tqdEHK+(e_WG(} zPX?*T4hh-2rETPZP6C0Apkd^=?(wUsGxL#$U|s-|Kxp~pBoLZ?+sUv18%8iJP$GLW zKt(Vzz)1ntu7)TNVZ#V(R};;!07wWLMp(OAAlK0@mSKVAGB2>I$gh^M`HeCxu%*bO ze6_R4V^{#?tGz`YqWn;y1LcbFYF@Cr ztc}hL0^dQj0KQ`z3E~AI9>T;RUEjt?F-k@R5GFFY4aP`12ooSL0C#z*2M`bOVvV6N z$U8uJ5#sGPGlRf)Cq%b6ryF&UeUN&9@=Pr!4BfKKc)`4bq_ax*b+0pRB;+rIct|}5wH|d;dnzr;BfdlGX{aaextuDtC+&EOf^((N!Y_ z!bB7;5HAK5dBlt1W}^;ui?~q-qQw+m9zv;t;xeyn(wixDIym409R%VqeW*MKfmug^ zzAZOXeqW$wSl1X_T}SE5YtKQl__N3re=i#Z0?e$f+ant5AW*DBw98#x2X|+w4%h(h z4mt;5@S<5UN?(sibD~ZX02lyfMt7el9#6RfzD`F6Dp;?;V4M0n!6uL<=p4Z&L^!$%Qe+|DdFg?1r<=S0N5ldD0FwgOwc(1gW*!JgRhU*!t*3`cltVzCVhRO zU;}zQfdLB7fCQUFpd_Q)DH?Cv*>hArJ7I;$!NxxRCekD5g<1%a-hQ`=(EEjv# z&|&g=Vl1?j=gqvS#gDe4+ednz`WJNCk1m)RnlfYPP-3kzr zmO>jLghXOEY1C|>NZJeX0n8+VN16#JKh4Cl{@&7N-%l!57DA3x2uVxHim^;lDSM_$ z*(^dVmfk0@5ts=Q!)h5gfu(FzLXwvlh#z4oWFx1|*a;{uLc&kl2+6kySm~J3>27Q2KH!Cu7!XFyw3|12zK545c2|`#zNr;)f z^;Q!`PGF_M5{|of=jd)f=-txFknnuBJnoc>e3zneMvL?ViFJaiKZv)}WNil% zvJJL~v_RpAv}?4>bd#p#o!VuJw0ywa>=lg*>JP~}3JHw2gy2+Jn+pnOu!UuTsdp71 zPRr^gEnx#x_jyrU!eCZtqCunuUndHmtOI`26@t&v$);sO)?)_^AUH~g8%-0Z_F=R6J!QA)22HkHKnvT=L(`7> zq&Bq$2n6gC-LaurH`PqKb=v5-JUkMyzKby8?xtI(uV9}T>n$lpxCbvr#Gfdw-&3R+ zV~!DH(Srf_vrOuGjP(FMK*5m*`F9zYo& zsHL=Fv^6)!fEOd;6D7Z3oDvA=MIE_{9ywO^Si+x(lILg{zYzW);sg6^Hm%>4>9NE< z(IXM=sh~kSBLYIWr$@G_gZcp1$Gj(-F6|{ihFA@A6%66eIGeDLASi*G@p>P*=1*!%dN_SyrYWYPH zyoRm(LYHvu(N86<05>x0pjzo{5b{bVgIG!=ufTqpQ3e^VH$wY~ zXu_pZQm_bqrr8CxNJ|RfddMpcLz4<{%OM$*wL}m0 z3&awW3QU-Jg;q=xZYemPd8LC)4N~19i0`ddY!Unjwc?mmCKQOkFyVQ*(#{H1cPg`D zovyh;Of=M%?G4f@Na*-ln6P1?f;XOo{s~nd!*)NdF0*CoLEL&`JKp|RdMMcOmP<1m z6kuu^DJ+ys(}r5hF%f5n81OT?5}G+xnFDNe4NP&C^t49g)L69Y~E;aaPmKm{`FYRs&wLm_r zlx9McK&S=yv4X^2>7pR`Iex+Gxj;4nei&*gK7wpoBPIAL5oAs9L$Vp*^JSt_=q1N? zCu;dLMbIjANK0cK?-UIUI4WQNFfNA-1{74S&~+DTU0OcX5iQ+`3Q4Q3>AAB)MdW78 z*WG0bvZq;&0qi^=*N9#sf<~A_vX0!0kq*fk2%7mCc7$LDZpM@iZpID;5w4jVw&_wOLL!?8>rYX(S zRvg+9-(dh;sy2}Xg=`gOVm@59;4>d^g?x24!T>Km;tZ?K#BjY?D1j@%X5;GaALawHwH8qzlC#|*lwWH}X!7GgP8bJWb3f!8ZfbVatX`*7LLJ*i%FluKZ z7hmC8$ya!D+cg60&7EQ;1G4YWW~zv{AUd_w=>gy^W-9v%@&3SrC^rq1q9v0RUm+L} z;{aaXB<0q8e*jw`K?nj!R(yF&Rc-ykKC5eO0k*(^F5G9rawSA3 zrYS}MLaqUdw=BILFZ8GM;?PGmwW5ibh__;zTBFzWkpUG}AW*KP&~#F69s}5lbqLZQ zHc>%t0t2#I6G#vkP$!+X0|TPggdzmxrUAl(NPkA_Z5kP!vzwxe%}|7xEft7)7wnwe zEal2=(qUrj5THLtrB=xz1llISfLMX3UF7SSwf^Xw9hErrA4_+kpuDHh7BSJ$R`LM zKoAW6h#w$pi2nc)N3`AHl%@a#k2)1~&NP<|!2l7^P7pkRaS=QyqIB2D&)@;3HdvM; zA#xz{gRG6w#fX5p01=EIluu??vK3~Xsa0W+ZEXxriTG8K;{pTJ;x|I$&;MGf9eD-_Q{i+z^i!zReka#C-8bWfw0#ud6E-&t(`y$ z3y6~^Ie|Cx2^6ERAbFA#NKT-l6SxFDH_4NnKym{4C-7FR(oLS^1d=U>a_qilbasqGG z6Sxky86{700?7$fd;-_wDy8H}P9Qk}J%RW5JCxZNkut91gO^~v+vJAu#nXz+FCh-h3zElmGjdPT+2zJjn_CXHVcuK6&2wC-7yTJjn^X5l-MMK6&0qC-7CD zJg@u-e9b3MastT-RDJ?q_sNr-z{@>>Z}{X%PT=)?0^jt>lbpc6=LEjxlP5WW*VYMq z+b2(Q0ljn_j0zdT0lbpb7?F4@0lP5WWmwN*L&nHiE0x$0be(aMcIe}N>1n%?6 z^X55$`+f4faZlhUK6zfRC-76BJjn?pC-BBPfuH&0dGnmW13r0@6UaY-pZnxVPT-Ay z0>ALdlbk?u0{`9i%@Ee~z zZ;TW8txulh1YTPw@H?M8ujC0l?vv-udjkLKljlEm0>Agk^ZGe~Cw%g}eoo*?pFGJ4 z{A(xh2cJC23A}nI@RU!UH{S{T(I-!G0v9@gKl$WIPT$qBsnPvCDp zd6E-&=_l}apFGJ4T=)e3;gcshfj9OERIlQbujB-h6L<}tK#eLs`ASY8If3K^UOOjH zvx-l?k`qWyfG1F^ich|h6G%?r6*__1RebW5oWLu30(GkRhPM~QOpL``J@ESaU=d1YS zD>;GW1l|}Y(5#A2zLFDo)1E-{Dn9v2PT&oE0xhcec5rTCNEJH7qV%OC#TLr*>R;M0%(`hR})$ERGj z__|WJbi_5KuG#zWZ?m7nzg5Y;qts1Y_m)z(c1Dw|J6(4~*8R_8kELDvTi#jf8q}|! zaRdK0IgS6{wyZmM=DDm}dhOdv-DN+Sk>wwBXn$SVzdd{RyGq@>Irn7UHAAl~bsgHb z&$_qZ|JaN%NcTuk!X%clxriS$F?$UPzn2{M;mbAo*_x^y`=AHyC>e zpYOoFeOY(Uz$NMMZ)G27^y913;oGO(k8atTbx*oW@8W+UKQ~+VP}boe>F`Oj?u$(y z&bmjxem)yMqq0b%VdYvFr!oKf4P*9KTVsNk^T#_t0BQ-Itc&1ATDkxvV?Y z@Ybxme%@uJ?(Z9yW!;VUUL>D1)-nusH z4rGp}-L!juSN4OxykvUT$?vvy#^v(U(&5(%p9+T~A6(95)r$Mm?#be+rLOjbS!E|F z=OUl)6WwscavJx3er0$wXEHn&d5z7RUFqD)$KQUJ`$(!vY4~YnzqEVrS4Q&zyB*-d|L9#5dNv;w~QS;M;m- zoxF-W`_#(15f9_9T=ClnGw$Ijmz451m$xq;{G+X}D0Sa%_OY^;@|6{^Ci$i1NaR)E z@1e*$b7ACVxddYVI7^5G*W1U$|w(MR(CAPcUqn7t8|5JY2m zLHRx2w*1Djce&+?VsWOjZz}(-d^Gtti9T|=@;}8e@qw~#(c4_c_^+ISd}q8+=l0#N z#xI{wKKQhI_oTxS%W1$lLoAU9hrgWRZzSgeQ%0zI98pDnM&rRJ%3_XutFPR8B<-qw zy<3K7|HuPZ$}b(hDeSN8U~$CqStKUP2a->Zf850vFMj}&3au%dN38Cf2O<8wI_l;RM z?632)uE)EVX59F?laY45`uD8c*7DlBT%UI9@cVucALF^z4`kispW)LFtNt^@&faIz zuFdXu;h4VP^iH?oyKAzp=K1w$H>7nPoI&q@q}{!j-iB{gZNhkW^txGD_vd%s=iJZl zLipNVJT2?KG%(}bfBzQ0*800HO1tm2_=9toeC9(L*Zm57`YFE{n09w}#`&H74T9jD zsy*>5e6nxGU47<(YHs2IxP7}%JeYM4ZTn@`J=MQ&+HE-T^^E((*G8t@cZMFrJ8wJ^ z$2sw0=dK^vJ>$mKU7B`ZS-3mxI@jxvcG<~zQ3JlaD(z-QS}u zGk$y`yZZ= zUH%tjwfVyk9Y2C!|Jo}*pLHLYSugF{eey0G*n8)s-5>sP6VCa080+*0Q>CuWomb(T z{`ZH{uIU*3@PXevkaj0O`ceGp<*={~HII*Vr@xK&_R+64sOGM{5uf?bZ{Lw|KUxTr z`u3flNV{*}^NXx28hn4+ZLWzIuxr&tS@+F0ccz?@Lw2ZsH*Uz)Av#XzWli&WZb9a0O-{scZev@&jiNlePKKI?U zoBxwmS=Vp-L(cvBuBmDF!K>eqb!~5WBJGwg>W#O56sK|E_S$LJ(SH!eT7L_Y(ie-e zuEEVWI`_vmc+*eJ`bOG~8a*uS-d+9qtoy>Xu=W-=EUV`3o{it_)avQZ)&1PFS+`@` zuxjpO7vn>I_hbLay8rpm@6zr)f5W%hy>Lg?eZ1q?tn2yi<<9-`2^`{Y?wOHx;|?rC ze*6AJ=bmcv%d|Uo;L)u6{gIoq?x#aGAYm+OopJ5=JwD$3?9)}UZozf%t!mxyT~^hB zLzJ}oLB`#5*V>GGbZ_UhdtlU_jQhwU81S0@t)1I+qI=p+7*R9pUcBbXtb6a7OXvDD-=4OJAPpW!yU%|Wr*Zvz@WEZ< z1u&$m*8-uG3`@H|^_q=u@J!e7?)K?$m&f1nR^W{*>y2|a_Ah}U4aHBZ`6<}=zNbHz zaeFR#F6~x*aA?+je$~*7`^gP=q}|c)!PQ(<{K#8B@nPqFcKB_G8&C93yDuHTB<&u( zW<%QD{@EXAUCW2&X5B^anu9m^k@{J;<>xBRb5GVYRQQ?su7yGyg~vyD4v+@YO= z((bce@t2!_0%2rN9sK_~)V|5N@7^{LVY9*Co%`}ynAsmsPpRgv%=F5-*0 z>wffp9Bfh1$ZBrijDzrs+c!G*lGuyjp+(N+6#Z$ zchCSFdslp`XZqtif1yiv1c1FOoJ+T_Io|z#W*5Y@>mI_-xaqHHcjD^P_*PS&&AO8t z?u1?abu{8ewN`0&)e}#{5}!MecK$croLk*=K-N9};L~aM-od|vy^JcwOTH2La(XNL zT7PYX;P%AT#}VqU=?7FlZI*LyAJPqRyv6ji8+~OT{4yWEIP1F1`yy=e2b+=0T2IKj z+V90n`D``(sz3h+4($3{#%A5kE$iYl-}eoe^6y%}i3fe7nyd3J{HixS_RF*@{$$6j z`=R?_+U@!?65qm);p`9p?@zMs()-Q=7x#Kw#yx#wcjpe@jc>Z_p-~w(`BB7(UsoHS zcAdWUmyFxF0H<+fBYeo~8@;QV`^*RM(LOT+*mlsys#({5B7AE@vj%wGU8iT=W7Egt zh0g8)1NrgI_~5r88+>CIKIx^kegvGovT4?>xu;RuHQ#{bRW$s2&h6cb6Tj)%DKN8J zK3~m!_O?5aYwvFhn$f2VlGmB{WZj3q*gWk%_w5D9rtSgf9^Shz?H;>l1m4!jFX0V7 zh;Q(%A3p0`wQqxeTs^0H)(t&_W8eM|UfHeF);Rar*Dk)xJ^ctiMw`a%((dQ2aGdK8 z%!T{io65SbPs~7&xnyP9-PAmduypRxw5#_3jJnBv2nC;e__=CsdcC=D_8(13yGcKP zG2_mU*_?I%`@r3ZdY5bqKK&FB<9pg?UFk1dr`_r9S%k=64#>F71{mh!KbY#=?5AM1 zSA7Uxd(WXN0FX;2;xz&yxrZ9pgl$|u1^>mL@Vf79*gxy)z2%QM&R^`#xX+&-gJk`4 zxLU~_%@Jt-zRJ1Mp7^GJ=#|a5%l_Is?QYq055nu$@vTmMq)x{D;^+W`mQ(LSmOMH? z>xz5gn_gABN!C64wX@ERxa9X)ml?1-?H0PXI(M*oFrRCl1IYT)-SEcm;ZH|Q#J}A? zzZ1^o7aw!((%*c|xxt_MDImnCOxBJ42=dX;|N3d#P1#Tv@A5zW!=i@A5Xijw*xUg z*=>Brt$PsfXxle>W!+ahKjPeV*L?*B_X*hjW6w@YyDrCz(r&|dG8y-dy)B$8`OfUL zTU`HMWWR=800^eskJEkYk27xA)!p!&&o^~$+GB{Kmwp$3>c$^#%eafj-GkRtI?}lp zr;N_ee@WK)5l@YGOI9^>?uifA%DUgSg)dBh&ovo0_4`v`b*)>0@c!4W$miGL1Krl_ zC(hM5lf_@TwKo3pEF9g^E{)T!?u1%6?2E3-y6x3}I>uf8X?*Y*kB>;Zl8gR<)4djN z=F)dwoN?`L#;;%ctF_J*zi)fS)&K8zrQMlBc>5nO88+SxyS5Gv>{B;o-MAZ$IQPst z7+l?tY=&#Bf5Exzxn6i%qdTQtosU17c7wWpHS0ck8Is|^Y52#6XK)4+iihCiP6q1R zwPzeW^qFzM#W#)3y4ydB@bH5gHGvOq8JTgX-Z2Tm_ov^?xPLs1PdaiMGEVW?Au!Pi zh+Ivsf{iz+cX!5(*$@AC@2%I5chzci2Xgz$16eow_x+LH&*KMuapUdyEx+0(>)zS4 zvvb?G{4DFHUj%30IvqdvsjrR(KIk(h<39CWyrXfKHp{wSU0VvTSUxfB7EJ9n-YvKp zKj^lO_yoKDfk=IOZ`kR)uP+8M+1nM~_&ETF6N~!6fA0Xc*t7Y6k&5o^fuQ=kNf|d` zbd|eYYH$zWzv?)@8k6uVeB>7=s=5Eq(s{?__! zSs7)g(xx;tkd?B@is&B6-n;CP?47;+p7;0h`^SUs?(2HL&v>2JdA-kdiK@@f{0#~8 zmc7~UlORxeL|Ybgu!QLRRLN5-4qhE}GA)|>PB?`F7QSu<-8w%`Cq1UVQ{;AF4@I&v zalEe?rmIp)w3k1S0g7&BA7ABRlVQhp(O69l@3F?FBol zv6ez>OA7O|rl6URm9zBOa*n!{l|aegFhMOl6s;ovvIb!Y_fnBwo;MXa`NCHv+iOjS zj142QEBwp_|322#$`hZ8ikNs}oQlco0hA|rrriE@V1yG@BQu~j-Qr#>)Mvn80_1#= zMzSxi)kpPL09FvXO_8A+*m=^Cogz29v1wV|JaVS_G;nBQ+9h3r5uZ&;m<7dd3#caDnVitwiQNTLU3zw~Qp|Kr|gZ7OF_f zjIHpd$u1zn@vCG?`VO5~j5C8XxQqaO+Eb!yMil7e;SwWk<(CWY?(~H7-yx&!UN``K zb6Z8v%$-9$c@C$8Ko#HgjlM__5wL0gb(7&gdl96_I#H$}uM2B-La8n2bL@r1?Y*{{{| zH@7iAYo6~U>eUCKzxmzhV*C#i?H}VrLUvFLyO(i+p}+CvqOU-~iaCJC`^=?8#8n)x z{`b{MI>n4q%bRevI-$G*SuEun7LA9iWZ|f z+Y^-fL?8`Z{D^Ihp0AazMeBe_PmM-?-^!#=Z6bfGB$_EwHG~u@oE0u&84aFxzf^)q zxr2M$PCNix`pgDjKaWzRvdJ0PNR5+PF|WiuYBmN0r_|V{$j1&-;PS&3Xr=A*NUU}Q zl#gq9Mv+>rLTUO7E{NQ^Mmk6S*`|`3M>mM9cTN$>Yf%80*E3h7Pwp_C?9*yQc6n_> zr2Md6D|M#5QHkY_W%L?WNoWf5HtXcu$Y#XB$(N+0KAQRzmuaPR&NM~#{<%#^+3pq@ zsvW46twUJG?=$?$=eKEE$@9Uc1^f2sWXm*`G0vC284k_SNrNrhAUo%|a>-c>t(f(^ zE0VFtK_?flHRtkf+u27F8Q*0kmaP18`~UySC+!F_)H7Ho+f-Y1veRP#fqo)|7t3~Gh9ZeubV9tJq@3i85%1V*Yvv_9SL$Z7H zeG{_LuenxStFXSF&YM_TqoryI9`g$KygLncR{jlj@gd~*nz3fLRpfNnrj(r@F)*Gj z+u6+B&=3GBngH1`i~S~Na+O}yf}n3r2Ww?rhn)aQcP?)>e3D4#(cKBwHmuJ>UziR0 z$LXZ&Bms-Nv7iYZ+1AknBlzE*SfZr;WMJ-T5=uww*|ZsUeUX6mJw%&){YuB-__cB1 zhFcjCHn&5BMz+5sqvk%1p{AS%^p~#PNY1nasf#*o1hjUt(reC5Sa{E_;9vM&k>gzs zZ~@&yD&qTajilV~qsaVkTUhu)jGg|i93^3CRoao{RayzG!sX*^B2d~+BqA4;$1Z>W zo)cNPgIe)paxa~{9WqHLCudi7mL=n`^UW@_{}Zl+lR~Qse|hK8O@ChPk`MEb8*WJ`+~;CN>s=yGr(_w}x>mErNM z&pd~p9X@uEMEt%6H!dlG+Q*=`CvKZBQohg~+vlEzYK*~Z?ze4;?02zP+z+-svQHgA zu)e(_U2SF}vgwZuj6MlXNFIOdJ_o-0G*>4Y*{l_psdW{p(98?kxa0;MU)48?jI3};B;sKwh?319h}V_^ zm_o`iMXI;6U}+z=DKfS*4m}xU4e*pS(#hE1bnu|0FUfhlDqg)qGR=CuftJGl7%b@i zPDF%m|G}GX52iEhYp#{2!w%5=1nlBQ1BnCQw3>>%Z*W)<(>DQZaN1TydUjzMW9ltM z(i`>=K-Pc^3tkm+(J;JF(uHlE?J}NB>B&W#I2wr9Yn*6(gZMNjxgH%*X|z@%E)cOV zZ=Xflc*UCYUJ>INm$;sZHL8C8Bc6)_ML=z5QMSzLDsHQp~(k%#Zhb#lw95+2O< zQzYyNL0H`@3Ff9Ilwa08ua!}c_n=0-)hLp?>OX{vPmaW2Mq@1b<%U|6EsqdAZNF1G z48UindE@Dwx1Ljr>eEuKWR1Ze*Z#7FFqs3fIdqg_eYg$iUA6!eP_b~|-F@N8Mzbki z&nO)uYLfd0kCXAeCUCwrHYr~vo@d!=`Tr7dd@`Y&bg7=+?AY{AFV=TT6`+#Vf8rr5 zSFUNLzA>8#Ois{z3b;_#bU={LS_DP+Q`XN z_P+C1kWt%0s7!6~>X}S?%o*GrN%T|*QP+o1{-`&b`Ufso34qp_u7pNo(8V{`FdF^y&i7{WE7IbH8&ouc~m=yNar|3 z&Qv5Xo910dl=x;qV(;Ka4q+7ufu%F)D^_B<68F`x;c#-b@|)k#o(HVz^rBLgTruYI z9($VOigQ^MhkJA3juF6Q=sN z3*2XlhfX}3g~8j4!K<|I?9$YlPlxsT3O&C=P^OVUI;^j$%|PTa z!z4;fXMDNGgv;lQixjD6Ku8@}JB`YDYy^kTmyIbCMVO>d@fGBR1NC5TUb|t#tM_Q7 z_mx2U&_^8FE*O1PL?$lQ$&kUHRB~#;P_8!;lSC@r$*6vZ&}|h`&3W}!kr`$qXfrx{ z(C9R+3SsF;*%`5quq~%0UcNb#h)v3AC?ey|X{5oI96G8mtflMFK4^!nPHW^^lTDE5 zt0croS7#_)+jX4zf51IiYp5>9w?nkzXvi+_jO`@SRh7Mqf_vLlu_eN+(>`xcz1TO2rvhP>@g^n)rx0L!kAMYKk1 zbrLdfCr+6ei;`vYLM5|K-xlfJ59ht{kKts+*-E7Pf(?+$fJ4-`g@?2futujyPUX{D zdEDRvhuO&;h}fRot$F`;$Sh`9ZD94UA{#Q3X){`nrC1w((#mr~Hdt=m5S3htb%2dD zd4Xy$zBOv?#752%xT~vHwx9SVQh11Mg&FL_J)RA85;Z1FCH`YBf-mNG0R=;l=EUo- zDzR%D%IX`X(K!8lt`g@kZsd@$j9RfSmF23lAf&C>s=BN;B~^&4--p<*_mKYxhBILh zYnK^NUAKQ6Hw+F{Q2oN+1izSJK?xqC5sN9;B3rl zIAVj3A>BmfxtyWh$rm}%jrO5x2&=y~Xd{P{_5kDZZ`QPPr`)t+)gl9kOfL_m`-|y9 zs~;12@SfsTzjYudViB!~h|#2Txn~U&`E~*!x$N&8NO_Anu#rwM0Lvf5ZliXmMLfT+ zLc3nElhlavr&DsJ;ds_$BOGpp6~byD@w_2;41X(drAw_5t4PRjPn~>iaT>@S`#_}9 zi8!>DypNol#$nybCR&={ahDZ&8Ep*6Z01wfzrNtX4E*unayAW&$0N=(3(lye{Lz~# z8BrCBH!Wj9RtJ4FqOF@sZq2-+7PD)t;BkLrMUI`${G^TyYYTzik2RuyZDWS92_A`-5WG_D(k^>E&*zKNK*9m)vRYBu~3>siCPy z;J~(L@xJbd$n-^cA#oT!_bVkFrw7rK@vWiMo^ls8^7JL2wz1nJQnTtx zMaK7VVg<*SQM_`?Az_Z;9>)@|QA4jflDe7XZ}q|DC`x;lk!shlRi`~*L{63Z^lw_6 z*VC*(BfdSxgYt=lUi)K5wDM~^zgKX9QaPj=seAXUHvzYV%RdN9pd$M3#>6WWD&qSa z+|q3+W!sj8ulmH-MmHq4T3>t5*~wR&_vBh8c1a*|w2rM1KEi?Kf?a;_VrMV1_RmjD z(zgYGw=Z2Ma-}b@zKMhw*g1tyT{1N?_y*$=o#*>$<$f0uV&9OvoMZRyg3s#{qIssB z6e-Rg$3+9!?|J8VsKyGGVbtG>gQ^en@$ZSwoC0(s^J>`6(n@^Y&sy>LMhNVlo`ad} z7EqXx!T3=RPD`gWaz{no5^W2VH z{$rhKc;<2#P4$Q>ipW>)*0MJt_4jWZDtmW!elrmO*w&hY;TSktC#_bDMr6B}AabpJ zEt;vJLt&+FU&9G6v7p_ZX^kqxZYRP_uTsjJv7j$zIIm;R{}g%Flj3?P-~e*qbJ96$ z%2Y*~wmD2(z22pjX=9He5!S;@5wnSs=cc5_!Yxx-_=jBpsQV@keQtw)_SuDm@}m*> zJa9ONotax9i9FBxk3C zdJnS$5b_R@YVAzBK^JST-nI-N%xQ2f&#s*EFeH2-CFa$(0Hit~~U4>9KsevMX$4%7IwWc*i=^wwmZ(?`) zlog?h_>UZgoVx0t$mX~p!qL(P);F36Q-v02f-oK+&;96Oo<8rG#GX@gzid z!1s;|&^Prr(cYt_tw?YitUF=!Ypo3Xifc`FKn*@uilw=A-%hKrV69d*2V(5rOCM4f z@^4TpR>vR=nwikz)mW*>vhrqRk6lZa>-Iq_e;|DC37(#`ru_$*nP% z6C%-Jk105w-wQl&!$M_G&9qYWXdrc= zry1ecpg*lliv?V7Vmtc%3o3$Zdj`k6DLGn6IfQkK0)Uasf&?1H!q#L@KzB;u+{?78 zU%qR^tBMme+3T+&nw`f;>}H_U;;Ls=;=N`Gep^_MA{=v^Zs&4Ejg-?>WujsxYi|0A z<=z}lVpmS940e`|K~4Vn5`vpa99VwqsFA?gWcT;ID>;+X%b#<$Sdh+c^nQO**;b!| zR$58g8>*4&&sgLk`#magxC+$g*0Rw`^}lyjV!J&UzcszAl^dz`XaJvW($MX!Q>1|h zK;33xKEXPnA4uIeR>Y`;i!Szq+uk(Uqmko5ws_&+VMWg0A)X!1gFZeNh=?B_M<9~l ze1(a>&qm6wJRFJ3hYvEBY^JI?f(%ws=SA+#<{Jk+jsh~d-0pNAB6gT{f|DFE^+pli z3oPYL*+uOsqlkpP?oPtm^2-j_K^4bj9ME?X3ESXkm|FUs`K4DSlPI%!CseY&J7H#Z zF;ye3Z!n_e+oN=lJ5v>TvX2<5vgtkn5{~K4>yK+*7ZED!@AJp>Ja}>L)yj&@m<3oC z)nXFM?eQ#~cojuCNNX$7$~-?oD|ZarIg58B3mVdytITT7RUTLI;r9mgrQrww*9IIc zuZZ&+OxG=nf>wY1SxyzsrqPgppdWPFND2ikH38Q9wNPY2n>9?2^$gWYzXR04?2Exb zQ2jB`!4ST&B+^DF$NX=it0a!c5F3I}kG!3j1E^2Hwae*+9OKJ9`t@LGnR5x-?Bjeb zu@wudxqTlpS_mb&zMB)KyV=B9;u=|Lhgr4q%$kDHk^ykN^B$JXV zF@NxnWfW}OO)jLi)k)Rf6@kr*`0{W9Ao!rpS^%JG8;yKj2Ne8-TuJdl%=u(zCgS7m zK{VecXEZX-3sBgVvrZ#1+j_!AZk@-Cjqz`d#8zla?um-H^`C|ikk5jqy0MIFPDFdb z0c_f-!74@UTzino{v$MUbOs)Le2c3X&uT_mZCS6C!f8;U*y(t%LIAwPVn`K5Y{s^x zQx6G+6#2aZnk#OFxvg$M?l&2MyYFxnzp-H&8CV(gsnObi8mYN?5zt(NrJZZr8346^O06BurP8Y|(8#-@aiJyUPug-o*ck_Uk~+1!>Mr$Y+;OgOeT9y^X4A4RTq4>4pI>Ks4weu@z-OeTUG z_h?$XPcug1PxgcodyQrIYd!(zV`U8`DGTA)_-&jbmgNm-k$+&T?08E>?xz=uoIS=p z4);$|N%$4k9Ba^s3g+KWE5(y-oTcTWYS6)P9cf$kMx#8Py}=AsP&}kEDgnjjFF`Y^ z66t(05S$E)uE`M52NgfTKtC8e|1mVZp zZME`e&P2dyJGQ^|jo@0Srot9#2QgdgSgIA}0Q0eHccA^RJx%yz>~aAp(kdz9os2bh z4_HZSzHXZy>u^d&*Y!}QN@PHJgS(tStAK*%Yr?66yXjcMZEAyIZd*kHy@r)m>Q#iqFu*HcW@WR!Ru=uW(j_;QLk1&4@9~WGAmN?WlVe-53TIT}F8XExJndjL$U z+C6w@o4tJS!Vv5`a^uKiopgPcLcpc)x1ED1i#1D4L4nrS;XZG;Z`Tqm zo-sC>=`o)gbT&(0qry(EL5Vp-s1($-Wuj+2!S!R+X_hf`2DaDW_{u(%qFrbCy||+e z9N!+{QpR(&P?r}Y(TksxQ3VghS@vl_DJTDdoO9Z8qqgC0I@vOzDzc60970)QC%Aw) ze|*_$$bsO%6bj##I*^#L%^AP7NmArwi$HFEW2{ETHv?Ylz3iqDWt2PhvO+Z=e54-( z=%HBSd898Iaws8{>Wi6XX0+gImCY3K-p%3KsJerx0kgPouUOJ=YA%gfcpz)epC3UG zercrJT3oR3e&o9qS{KmP7DQn06NSu&=&GE)ORw7KP)5%3*79=)FY7 zJ|?LsxTS8$9ebk4{aZ1x!<4TmHst^SUDs9|zO)EpZ+onnK+Iu5uRGME{eM$g#9&ZG zs^n!my8K8_jdbZU8A;UG5P!7CU{#N@kAWpM$m!bf@vuWMlntdJTKQ&>Of#@-D)QL5 zgCaNeV_?RsYHAokVKd#nVab&2al~5rAzG<-b~TzuvIqVx7r{u{!ZMY-YIK(4ki*>L z#BZvQ@o6ye>7oRnW%fL_x^3pOhXL(w&A`RsmEN(s{ltsRa zrb+TxNki_E12aEDad>8IKur2y(nv@a#<3g8MdwF1R>aqYcs9EBP9xUUSzk>RRXoa? zmitvp3fj{ObD=n``cNthoU~G)pSrrgyC&V!=PI;IOZqdS{~0et>AV@5a_NO}l4_$m zC+$?E;V*o2<4iNM)&xUDn5~14zgtJ^7Mre>CaaIq?6rFa#Yqo^OGUHr#!u{Mn>8&F z@r$uRE$8i8*>^db$&e#`^=+Dd3zN=>G_AQ$BZ>Rig5d+45*x{VuWk2%t-n4Fzq)EH za(YW|io<`?MDlHMe9vy|vULfit%{yCkFp4ddF0om#oG%UW;Y_SOV$w#Pihz{6y=R7 znWi6Ea=*I}y>9JpiiksH%+#EH{FyxyHWC`iX0C#NPd5ZAQt9?56rkW>#%9c}Fc-Or zUH17^feaX|zsj0}Dw!EK4-{>WKaRDar9D1%x=y^`R&$odEr+v~V#@n+FJk=I2UZZj z?mhFEM-q|D4j2LOJ~LnxZ3G^%nX$4olj%^uI1J{$XS^bJ-&>Q|UCpU#^M=qW^sTPQ z_Sxl`(sNzGN~5CTG*&-FVn+7>EuMe}SCen4ByG@lhQI2u$W3446`9+<0+{X91QBLF z#xZVJqLQyXdMKxt1}NgFEsr$rq7Y_J_KCP>r*hnX)q^>xWAt=OqsNd(6@Jlk-aVm` zt{whU$);s^@Pk1Q3~Sb$9E6d}y;30gt$Us8FI6_a)X*D39hd`66b+x`o| zOphw!Mh)944aX#Y{^uEd&+r9LAG)I?yu)-?em&w5r31&He(f>I6>VKONTYbhy8ABW zmKFNZz^o2aBVCfORN5exgyI!U&tlGuzo2fs25V=PoZ^W^fO6LqF~flAzhVFg*S z*tv46`h52r%bh>8l_GE21Fu7U-07lQzG4!v`31F1wx_%MeA*Rb-v=ms8q|ZX`h9>Y zw8WCl%eA1#Im7Dv?xVSF`f>d%KE0UphGn*I4p_bM!QUhLyxvi zLVtOf1_4jnOgx89Lq6%Zgxce1`o>9%xX?LS=tqYy(Xq5$#yExypfa~^mYs>X=CIp+KqhDr6ZO+P_LV_ zG|@ke@bKP1McO#gWgRIwN(MBUs$tlwyCP=&v#2gP&4}mPr<^41^bsnKLu(@Y4a>cM zzyqzI@gQ{hyQ83-u52*jx+5Y{VU8lxpSuC!7O51BO_t!L1Tc;~&(AWNdO{}7%|r6u|3)qQ#uFej z)}_FB#)qPAHR98UPr^|vPR6l?`dM1Jl0wkDILoi_oCDjhZ$=ZB-V3IB_rA#WAKdrI zf?DkIb})dKgp;p+NyGsG+(WVsiqn;Xv27?R`9A151KH=bYMHMlkB;7!;~wQeS$k3|mk_kCeJ zEU5lTH3y}v<;onusB)qK1NZB`Kn)ho#)ID-2$lBOAo0WrHr+LdymYijIMUTdplf?X zEqR+GsY31hA*LVVZzeiSVsnE{`^D;*FtB|o@}g!My+OO@%q#0#l%^pB=4Bmm@X;=u zj-?Ax(r^A)ws48aPKoKr>GizRP}6@KnQZ+O&4QZJG1p$4t(A+hjbYd8&a33}II?l= zb$a{svWJR9)a-(Vz7d^99l6`Ui$KfLy;_d^OjyeY_hd48BN0&;K(T4Lbt^>pQocq` zr=zXAuEG1&Ce%>md7cAfGp~U4DMPvZqMrj`G6}6U@@z~SXQ};?r42KKklwn*st#Y@ zs}T?1U5YHO)B&e7h$1?dd2>!OF$3}OZxX(|?t|h#s2q|&dmO*W602=4Vg>uAW2-~s zc8K_8QaLTQ(p#0celLuNM1Wm6mhK$E8TFL2+H*4uIIfBS(MhMh- zpP|Us+mF>Uy(;$WXVp?G&ulUAq)myadEKli>ets(-ml~7eI^|^hl&@-w^>lU6*+}C-`jWV;is8RPL)Br0kP&)cQz5Pnm z5@y+m_R!4+6PpkvA4YXUVrUQqP>hB1Kg%K;jR#`M~P-^un?5AC0qeylaytT9Acp~CGib&@R(N6MU0oQvrkbQLDG!Wbv z@qi~w`b@*HlU^aWJ)-8B{~@k2r{U1!!`^A--S}B3K;KO00z2cff9r^_pMhn}{_f3E zm>(zicl3_|JQk=O88XI$4dYk9g8ahiwlgrDx8Bn$$_(I5>1|1a`NtILFo@ibnjFQ% zuY*4kq2_L>)!ty7mOTldWFtjt502&@A0dWYmg4E-QRX5`p6@_8-aj5gteOWID{aej z9Ti%uZe{n5;YjYyr{!Uk&8ci(DFDhW$@S& z(-mFqi|`TKSCML)`QUvQC~@?f6P!C&#uY&u$l6kaA_m94PE(|4Adbr2>%q~CriX|G zZsUAr^)i%+d=HIeJR8cH!#djVsd27~yxU3e&n?HAO)f5{;f^w;ka7V2)w;}*}7(LqXXi8L8ZKi%;WN>Th(Jbgc^4=ruObqrnD zb_N9B7ID}F3}39Vw!AH;%^$rOzZgUmhsV_7l)LX9MGiUsV1w3JV1f!W0*1vamH$22LTUFLgPr6f)qt2 zwpxh#@dPuSyTMs`>vx2*|5Y%ob6F8j1bKpq>9&(lSO3|gELzmo0yliONpmejQ=N&} zE!()!`TheHaXCB!%%0f;op5%UB0g!SL~NHW#Z0=FA`1jw=4Mr$%P{ z;Zl{466n##iMoMq-{6xMhES)o=zCW8GEwBpvK3%w>*-n&ljXpd;~7O#kJdnr-c}9aBO2RZObaA{?Q?;3KjQRl)r(G?6=^x% zJ5>vHYk9ng#ue)Pxo8~xbpHmJk;_%BoY5b?)Y*RzyEF{}JbvKN=4*($M~&k7+x0IT zs+cF?kKf^_8b>|U^80xJgQSC(NY_%;D$1mB*mA^R5 zrX5bibctX1nOw2cNW0mafwa{fAsA|YcK56Rssjm&8n#@t)}&)D-a9lMTLu6ps zBT>uMvi>y{Vy259ZoE#i&v|rK``$6*@VHxv>TSIp8xn-#ZdHJGWI$XXlfB43? z0knQ3qFK%}2MTUX2DmHu@~q%RmfO^dpZQiE1)to4H6AtKMjza%1}FUwGoER3gL7T| zs6fNGhcxaTxU$(uE-GVi&uItpZCVIl>vL`^EzeQDn;h31$N4H)~NvLcK0gGH03;@XE{T(5z! z$nOrDn4Efuf893uiv063#63QIdfY!jE&d;|vuj~2^s-|Fsk?#?s$Sbh*C9CS?O~Q{ z-8uyZRp6nLjkT#H#$}(;H*Rpf-{p2OqV*Ub^&N$hdVE3;&gm-Q)$dPZ6#4qL3x}+J zy;Sma8~0e)7nJWX6((~at0R3%?@)SO{RG|BA?C<7MHA5Vvga`G=)VlKxZZ_R8Dmd6 z|HEM2`>XA7z~o0-=Bilf;SoVVkl{L{7n3K76#Qe&t(^(D$k_54iBGu1kl02p^*p0c zk-*k&M7Al*op+cJu+Gl{%_cwQG`9oZ`k(ySu0~JfqCx!1mJ21QoCSTMWi=rfPu(rG z(rzs~8dP?Xp0hTf@Nrldkwb>aUdi3bfEnK-dFY@mAGG?`7CPw2`f3IJQ%l6i8icY} zM}T_>#%bual8)+Xbw+&mbNM4a`24_-FuIeI{jpz~4pE{pmMri2gqH_AWLsc1UMM7d zyjyUiqk|*0lK2t(r5ph$Oges7i*qiX&UbG>1uJ0oW5+0G3ZL~7DDl}dTKVB^1>M?@ z2N%}Fh+Us^40GVfEYQ|xi6Y1H<}yL@8XNfR;pXm6o#8ZpFH-&f;jJ&mQ(2#3GRk`x zF`kn}FgT7{tCip;?879Y4iBN%;DqDydhp&zAxWN8G;or=Q;1G?qmE3KJS4YVXGi1T zG8Q>7)Sp}ppgiT|U|7E~n5q84n_BUlPx-ViB)sdE_#iOp<;s(lP;q>pllEpyoU}3| z$P(B31#rN)<54~%M|is4M7&i$%UEwoV+J}uaCzGbIdu8wxP0Z=tbWMh+A2<#>!5~u zD9$p(-~vMpdJWVts5@LfhPy3tSWBkVv(d<~cs{76xy!7$O{pTCBKk3aWQvcv`W(Z4;vs^^k2xD-<+YUwe%Ee{7r?#plbxw zUl~t@9kGh*UC`@)R)FAvf-(;0COs2r{iRqd{;$n6vVZS1w69YIAkx7-9D+=ue3nMh zG<2;p5yoBX6xFW^bw6!t1CB!qSnh7)ZyI^>Zy1lWR$0QZ)_q`ja_>cIY1nrG$6c$5 zwGMVCm?roa0|yR_V~VSDWA+x1PUSocoT@qa#A^dMw5d$?9*?!}`dn`TrMc~p}CnP*oGYA`DaIiYYRQkYF7`8M2@JbDL^ zjn=Zhj*WnaWB(fc|9eNPmII7U*a8WgHIM~r`mnQ}j9Wl8x~v;{AqGj1bs_v-Js zarlRSj`IA|03OgdHwc0F)hQlLE;ko+y!Blr(ev@vJL@J;d!uhC>Kf8{V$0zOIBA1G z6}NwMUYkhCc0);sTWTUPbq_9Uzrf8|zPYbLAJ^1A0%rhJ`QC^E$Ec~rQ@x+Me7tfaP1%SAmv!v_(&omt6&gAiW~A2 zxwev@jeGPTyz}G*k?aX!BB=}K&<7-VbGCDv0P*VHgh|TaA_lkF$?;Yc7+4Vg~(2H_jsG#$EdH<7ca#zfth5pk6Kbv9J? zc0);$3OJz7O(U&bcIDH%d%WSh^CHz!vO5?JzD{3Gh?a5RZoaI*{?#i6+Fd&!r}hOh zp2zGbT|69cS*rv+$)Aq!F<`$&zTIKdUovr2jthUQ6Z0INt$*M{H#iQ`8_Nf6f?2pz zrvQW=18h(wkFeO5%FlB32S(QUI5gmHO$yLB_BO&INiAos?HSvTCQhGJ&7`C6>;ZbO zZj87*m=wy`%n9n*7c0<wveCM?VUp!b zD^x9?zOc7fQ}=VoZviki3p=5fOPBfd-rlBk`Fhfp*B2umdr^Z7sFX;j83V$p^7xwn zzUjhobzLU4b9OSex)WPvML`1!>!ng_tq7zR`x9_{Ae*Vse=hyZ=7%C%eDS4}UZ?Tg zC$!C_c+lZ}ZEDnVoD%&E`cd_E6QXGw*V~sFp_as|*!l9tLkyrh`O@?&ekj7R6G-CE zOXv+U_`U7=1E{+9yHl90SWCq=9eIh}4d5od(Hvx(hJaR@aeIyQjDZWpH2TGRnM@hP zc=csGOlB;$syYozp003@Y5$LYB#DO&boXubL)mt>R%JC6T$aY%;;4tY9XMAVax$UP|9%YXwXqr{LtH=_|?R3Ho-tyE|yBnxc zLx#X!D`4W^bx5IHgD)I09b_{}77_60V!rmQqB8>VF>K#8tTk-2&kH`}|bW1V&4vs_JA{up*#zm|A^noc9d`B<`}-wd`j+6)=8 zKa+(M9Kv{7aWoOzP0zR^9(3ZReK%d5q(Vj9lf7}OBJXz%B!K%MIgU0wOZ%TiWOp-F zGu}0XBHZ;VT-2^~K2v7h)*|GEvx0Uh$JJulfTx^;!^r)rEe?U%wudz`=qD?oR; zV~p9AN-^9cFbgH7(q`1!l6#8mTH{YASDT&tzXFCgRl|9??{|x zo=sOvGu>92?-i9P!WZ44YK7IwtqJk8P>afow0gz$JnYucy6F!I6ZV5#I|5@-4GOlR zTIqRg^Qrvus(Tw4h~34F+B%w0wpYytd_VJh1@p5MIXD3$F4j-rd~CgQ;VCP{rFUrENKptyO8Zk`4Gs*Iz|*elMAOBV^b&dWCF>Y$eFnW&onQl7!IpNf+=gS!sY@2Tv(taCQa&@YNbMZ}uwCwo{2BJDahLg%idx6$`JHH?#Mv>$yRFW_nAWtm>fV~aT~Z9x|m?i z%I-~#@3k6T;8GOjl|rF7+cL z`VIhDUazyb(SgEuw0%WX@q2NK1e>tcE;Xa6wF^kjg|)zn!oTq*}sxYmFJ!Mo&dyVxd7Sybo2q|`K_$T>fN8caHh zRux|gyS_PyfV+o3Hs>7SH21`5P9E1y$H|E}d2Gfq6vH0{%uHNZrjobU4G_}@V(k8v z29R5Gaq@Npf^foV>WAlzbToyXR-AY1r<%Sk!$PZ9Zqmwa)e6M3psMKsh9L%4=nmo*wGD4`kzPcbL`%J)J93~265iRPaROu4*~eRs9|oKUJr<@W-R z&8!YX*@=IvzomE$*T1mj>0MGtX+il6b|Z#NW7y!bJ|U3G-h3KmH4!Kc*@VUG*Q8yl z9mvyd zlHX5Au%o_l)Rc!75RvQQu%)R>)iUo0CugmzW3~H(`CxEiBbH{`n4OP(qDb4iF@(?4 zx%B6!N+1(~o>1|z+_H;)WPR-OB2`lYv-r4e!N{07j3;zwlOepMhF-?3GX>rd6YNcZ)>$+z%-YQjuyL&Ditd*jD z@O#HjMDb<)^BRxtm?%=*aRKn^V+T&Y{!CZyMxgIG)j};7tl56okm?}U6nn6w7~2nw z91T%l%hKG}eP!IZ8X0ghJAs#zT>lRi8AC=*cz|6xk4=R{FTqTILpQ2rVhI<$qpCn# zKNy$&yu=4jX4w+x4~h|;!bag~`wL9glp{&B;pmums=XqaHm@YiJhGVt)W73n&F~aL zO5e3ru*~69|7C5FrMN>_1^hKdA3hK9zsS zky=9n>1#zSdGy;XI-ATqYP{g2M>rT2ELd1{bv%=*y*0MN2uImvOzFa7g~ZBtWe^&6Tg zlKlyV#o+rONMMK&H(EcLrDe8eQg&1XaTSpWyS@U7o~vf8NJ))r8d=&h9%(WQSbAWa z4CaInpoufkP1;_1D(EpBHQRHrKqBwjY(YP$nmB$k+8d1R(HsS2kll_|PWk7Vq z9L%(4PAx?aIul_wzxcFE^Jiq^lo}W(k2rNo4MOSYpas&JyFna2Vf!kLYGC5Qo#5H+ z7cm}OgNW#B+ky_`{uc&CF8AlmdUX_$(}Czbc?Zt#Qp=NRG%EnK;_6g_VPyzeYyXnB z7`>(j{G5WkmHTeABIWw+gT4)&&o0*#i*%gQlsBhU#iozrV2sP0ITCklM#8#8_a{F4r%TUC%_mZ{p);y8y?uCC>1skG09B4<`77BBB3#5DNX_?HZZ@bS~ zk^f-MSeCQ>>$xC9gH7gu{%03XBu3zcVdJLg`)T0y``7u*WVK+c4@(!S<@!vvl~uHx zd4{g&L(*~v?v9KlVa=N|VA0zZDxUv|dFt=8DB#Ln`j7Lbv_b2*+pr6S-t?l{w2V8a zh?wi=;N{~*2-T%z!l!9>`pXprtA`Hd^I7IU9@HuHA`VQyF*$EHh(+#C;t*-)JKmRe z(36z(It|MhWkmekXPwUlH2u;sb^K&;2lbHxsMH^gkhTX7mY- z^y}0RGPdv-T}Sf-3P!{({GmVHZ2X@yuV&~tSR*wo$kj5ND*UmhA7R#%_&XXJz&nj| z18MN>X@gwPaDl^K&PYw!X5@4wQs~{#`iQbl6vJbah?n`l+cD-Bc}FW7pR>!>Yl=0p zzWxeM*XLorqc@4{inYVhb6%ir-kHc2ei@X}hi+Vp))Ll*HMfRd2F>B}*V_=(4Hxwk z@s1$=N>>k~wJc#(kDiimhgM7kK%?-b$_G~rYA~KM(Qy`oZN~Pb)r{_pn(2Er_j=sT zD+;jeedsla`P2xq)1e3$S$kL|KXUPJwvODdf3GK}n=V#J*|DGbJw4+d*7pt!d3m%} z9^I>pI@6G_t>RWmk$sz@kk$s?W)kp272e(3naKI1I>rf>)jUXa>1uX)X%MeBDhwe9 zs}h|L4%Fskeph+Y?-td?^fRH-E2yhV0-CXci#hmQ?SGB_$P>>T^G!!MI(0xRV{h6a zU?+b9M)ZTildgV%2yefEl4@H^k@}UnuM+p1uk{A5t@SGBPtO=?(l#}((5`Y! z(~rkiS6g7y;+c1NUfhU+afk^Hj^cYeOYzW=Jep$3e$N!VLksdr6tP?P7H)e5rMHoP zF30n=jB(GMLPeg{Xp2`5+*8ZlK(H>PJ9Eu5(%h+ZX_Pi&hg2}u2(M<0JI-+KKMKp> zk2O#ddTkR~F%ma6du>Ff9GS{QS;=#T>}K!b1xBM|6j`^=gpMG3s>rYk?8E*QFp{z4 zky@&JOQa8IL|Xm!9f4@vc&<)1hBacpi-t1j@CPAf|M92D340r{`uIB3!G{wR*|P9G z%7oc@&SrOF&bLieyx6V}TUc>!5AT7zc#q27@*vqhZxm$D-+p8$tvS6Ff&Z9W;`iS@**)&OJ7atcf5c#Iun@ko&u@k3zT zi>h+~)h3LqSe;kI`{HPL`zrqVIwqQ5E*eB&zQ9pmO)*&T4>wkSa60a3VXDaQ;!u^W zXb&*X+)-J-@cJ4#96g5tpSoS>^EQ?0twvb57a`B)>>kO`Pr_ahT|@Q^dOU#Y5`;;f zX{{Am-JeC;H=hq=+_0pan2`{}<2zHBN3haLS6V``?=7LGl&Kh|u%85ja!ygnnOebo z!y>qX82rN{LU9kQ~;5FE{Tox2XYXohs|^5}#TIIsV!Cl3531xu5MjIE!9>Ic*CdE=)?uXa7QolB z2a){p!Ja_%zFAW3*0s z?7(1OXKbW}dWrq2Ec(OS?xe-YUtrQ!cn+Qnfh;u!go)y~|erk#BXNBN0 zvun8fefCg5CYcbJl4^k@f3zL)aVKnVUfGepC*~Q$jHiAhnA&vX8Cm^HmWOoh$ENMD z+PUyIsFxuaHop1-8pRu=c=*T*XbXXz3Hz?7YkMkBM<5;;jTae&Rfc;4H1$%!-Y_B|AN z8Z?IBGNU$by~!4OeF7eeKU~pB-rp%CSf3>@fDi9bY}AH;%#1`h$P|WjhCd&Ltd#v& zk!`~<_B-e5iX8nxoOX?_smO)-e6S{&5M5rKO^+I%!LvaTT;O#xelMt@rL)9nI4GDl z3L{!4@w3l`XwA8E6X*lFThOQ2;LAmp!zt1IqtKCzx#;9peq>4;!g28WX7pP=80X52 zX*7zXZ))VI?iVQG(}*Kng!sc z*XBw7`fC*Fc)*1>KNzyr(dOLJWd%y${J-$_jy2~~%kl`@LG#Kf;yQjbylI*tCy((M z`=ix*CY_4-6^%nfn3h^`mfRfnVUpmilE!;k*2FCtOjlOMRtq|egAQ)ZeS59i4cSU5yk)Oy(_wANU86-NP>MQttdmaNun%Fi!3(&MPMB z)V#?Fo#t%AVJHMmhvUIbyWuZ&KX3?FXDLFNA;EQc?NWm9O$FYNGt`lDc4K0)Qe*CW zq$Oc-Zp#GNQkW|pX~hk^t7$TXMHyAVOq!4GcpGzo_8IjfF&9u+{0H{sbIgqohEY0P@A9O@ zw`IrFQad=6{N01>U+jJ!v;`QS4bxd0Mmj+EaZwjL72~wcU~w35|>5B)A#dfAt5nwLI~IVmK-secW_9 z+5-<2Nu-H8V?u_5I1_n&Sj5?!+E{a98vVlSx=<3m{8Yb%F`bt=QDSfTTO$|m*5~x! zA&|5m)k7!VJvTzs*AqE|Wj#;sF7Q-2xOjQ)wNCC7YV_%BWO-R#n1g>f6oBmp$Duto!-q#QjAxkpC@~9G<@l z$arE+d)Q^7T80!taSC=sz&ro57ujBP0bTwfIkR)1Ey`0fJHmTTKhkPD5pjG4-<@U$ zzU-rO1C;LpO^D)CjD2i# zZApsTRz~0OoPZ7fY^7~6iDmv}$YN))b6}BqE^d&bX8nk914U%eILuz>*e5jUg?pLp zo)S(8G#;apDhV^$$5XDS{`i3B?X9We!KRMR%p^1;%bo%cC7XZqzTrk01anSpP4Whg2uAeF?|3Rgao88@=B_gMqS`t*0lRl;;(D(s45Rs2fP(+FkfhtEA zLW%wUDiR$2gCMM#&$D0GVi5;c)kgf8S>h-go3DleoL|l`^5Qa;-0fS&WAHzo(j^!` zSJzl9MM(bfk7xB0=JRYuY;G2dl zY~FzH9=8Hn*W>Q~x18y>ES9L{s(uLdOxs2(v7U@ws&qP)FX6SLvE;E-s{JjJssEk@ zI@x@A5a;$TAz*PtZ-{#PN$9|yk(?USB}xa2&yV_bIWuHeP_&R(n5g-{4udRdCV0<_R4C7{UOO z+Vbg&1^lr!73(^k^8t(fxTwX)1!6%igJ^m8J^KkN&ZT z5X*V6x#lP7tc|hra))%}n9tN6n~D9Mr9~sPskY$gR>02_XvcX1R9e)vzU^%?6=tI|0p`|c&z>? zj+-UYlw^fe+Cvha?^PP2g{Xv5LR!ddC?P~vrLCpCxAi>Qdk<|b%^#(`%kO>v=|!IB z-upe@b3W&D#`j#|KMMGdy9jP%N<2aLR%HzEcok0slr{v7y}ljRXOD&U>jqes&1;T& z%K`q`V2v^{x;T*vuNDv)HpidGJWnrf9zL4(As%59a}Y23pAr_+1iVrIc?jA zE7u=3h60L8od(vL30&&TQFeM-FOrn0=$hqN8)q?je{Z~o=fP4D8;LX~U28`%Vi;no zNI&Q#9Ok2D_jbOeKWy|Ac5u@`b|J4ZsJ9JFjB4hI3Vdd%_qy~UIQxM7UbbyQ2#|XX zV*Qy->5`E(5;e8RZ+m?-yY3&r=&yziPEoW6M#kHcqPdPfr^mjQ zgqI(P^u9-ck{382x(Bnko@u2S8dkSN5hmKz_iAnnitE}~u zk{Hn06tkLLBZ-djaRk9bS)kkc`Cv(yc9~e1hD_tGQ+9HCok82jKx$((eXK!?*Ls}k zdbyi#R8}K8r=b{$^*|!Nu8nNdl>bgpiIT58!XmCXm=c+N-ibc;U$fQ7`*S%o3>I|?R z?W5c>KO-L}GMmRRnNXt;&sv?wz4yW!obdN76ZdVi*wC;>=;`K4NmzftFPQwzQ;Lj9 zAY7LgO!f>vkfStJnm2Y~FyoJVNa*-~JnD$XX z>ZRX1#2&YX`))tT0|g3c8Dq{r){t%`};-mK`dAFgAK0W`F# z4a~CpazxyiJi`?2<{T{4E+JN%zs1gcx+wu85yUB{8nVe%{~GXUeqNYbFueW0 z3~#>c+LV@DLw~%+;f*BmD^5^zu)nSlA?MK-U{rEkf&`eC6S%aKOgt;xOJIJIU(I{HCf5u$Ys@*yKogbL;ujHfCFxWZPA>5 zPq5V=y#T>eV0M=6VVb4}ql8&t%TSAqmIuys3 zG=-q1?J%l`wF{ZK_iry+r^HAK99dglJ1na7!9K!u2h=C1G*J=(T46+E@+7u9eJz~D zwtCz=qkm&El`pKzML-WEeuE!B#C|y=+tyvOU}3BA+pXN39mnecBTmO-4mB^ z0n4jf+!}YHKU5MC{uc?HQ4s4k92F{?ivu#IJtViNH)s0yB|tKEcp&k%Aj7F1e6CHuJDj=LiwsORpBCc9 zEzYsb4rFK6*EJ{JilUxkm9bJOMyPU8+Xo*6_M-#JSfHl`_~|2k#8u#5m8I3$#8j2qk0vflJxn2&0r&TMwRd zelRtRViSH{H&lp#S8pZJV=$bxdLsLKCr}gTIyZ~Z!~Y_4VdZM%slE9qQUlh}OCDt3 zDfKR}-l_x>A4@*M;LZT($5!^}r`}B5$#;!%vCPnl$B5idjXC%fy%35tMuY4rC1@}a zLfj}M?NH|RNF^FIZs{o2Y*+@iQ zGyg(1LDI(IP*c?$tXnfp5)<$D1dFdB-Jrsu_|PQ$+nj!2r}iQMU{U>lrQ$^DRqAhR z@4#NaV$RN~NvPgJl+Z@6g(L>+g7O=Np)dDuoB_CZ@Q0|sSI7`(Ou|dbMc|5aJhRL1 z`gGCA-43;XToG}HFr_G++Z(`}fHItyPf^4<-%b5gYA zBECnkwM&=rX!Gazz)FMT@emh+=_b`r=lSNeWY67XxY6R76^mn$OUY=;{nM8aftCc( z(bM%dLrXJKA!CgZ#DH&Tww^UR(|;2(9W*i;C0q@AbQCF4XtWG^SC3S=tCmtE(9{hqe795tuwES9vhM_<~(^n%|+e0)Wr3d1ib3c(D zhe7R7i*;l=?izK%87@KW8LiOg#iz`Pp2mhqqUxF!r6aj8m*=#XzO)W3E7v`qI&62O zrtH0l(-J$&SlfQQ)$egd3LzaqYT+9L;fV%_Gv^(Z5a|ZOS#_6t4Dw!0OZZ8&Q}118 z5bkkD0N^bO=X3ZjeUUqV!yXKot6N zat|nP%1?GCKNTXzn*OVV2SD!a-4}&W1d|UNUy(^dHyN6eZnK3JihJt;sFisf<4NIJ zOxFj)d^@d^#DnZ^&f>-2_e4qqQJ>$Vn}K>W$zMJ2Sx_!ILK>6Mvh`OJpjH8 zr&n@b*J2`$r4DWSGH@rJeX$igGjW(g_+4eo+?!Z3kj8O3_ejC4!uqnd_LEq`_bilu zuo)^}wc}E$ION7-c>dZZ3CB}td)mY{41t+31NoW1gjud#NqA#mjo0{Nk1Ib#dqedk z-7=Bhh)X@rvV_~lrIA*D!86bD5_D9|M|5d5q$eI;$icZDAB~R7P58eWbWjPsseK`- zdA$gS8*{1VQ3FVASo=~uy+HrVwZShKaHxNq#T;ZYKNZ|V$H9=oW-1T4eL0!C^L>*@ zd}t-nw6b20u;92CG`{0vvdPnV`p6xac>VGlfV4kcD(}+UQZc&y1oo|XGVONFS~03h zsVj*t8rVn64m}arsBDb$>_F&8rXwZEDdBSV_lHW%csiN#k34E=LLwr5IGHCk-o$9B zn}6M@5vZ0T#M%zvOPlwwhuAz?)e3z)l15`$dWluoy=;GM&D>1`|oMl?rXR|!uKcg}FkLC(%Q zMlzIa;#_JDD_aw)hOR(C)Dg}-dA{wdA}-&gAM)E|!814Az@hA#ra2rKEaFo3=YttL z5rj1suQQTFMSLt}tP6QaGBk{B{5qe=L4Ipb{aq|(&4Cr<3i76qaDK^p9Te!nc>_O8 z@(A3lX9lil^1E4Vw-$fUJ8yw8a+nJnTm<&`>W)DU3QofNGBe9={gi zVUuoe!Y^3gV~*F_L)4fraLcb7xY0=sMB?ymAwor<#t1#@;-?L~{X2ZNZkrp{uGx0#b@-l_$7;FXJ(tV&agaS`lW z+Lv^4xmIbQ&##4aVyV?92T&p55qq5_Iyq|PET+YbqOWgwF{pBN1NqafL9pR{iLl)9 z?4U(keKKQ*KotuIh|&eu>@qQC{SKN@es17+*i7Id@BnHNQw4a`zh+B~G{8p^8TE`f z;W1?u?(-;6u=HTHQmnFdcP1J7f-x4!ugJ8?uBcXh0a1*%1HJp-Gw{w$-!pvhcQ)4x z-A#h7dK^DBn?WQZ*t`&j-@Hdh$%@7eZ%_W}9vA4iPER2+yel~hyYd``=8q|oXt?AW za46&W$aM6%JdA3_soQM#zfZ)l&pMpJ`<+Xsmsk$i;wJs2SKNX`{NQ4<4;L_KPYhfvI5`Fd^kbAfKr)lTAW*G?o&?4MzrJF$R; zN5_JM2MO!1)km;%I5{ga`>~<+mmW)^QSDIN=NemQ;nfmQ=syJ0sEP7rQ!?@Kkrmu% zbEzF|_NVh882$H?*YlW84$4D8uIkKscHeLTKOO2v=<&H5*^j$gBq07AP>7PBeVyqB z%BJ!oY2yus19RK;A36!`{wR8hdlg~xsof-D{sYq9wM&B^jQ_%b`ggGKk-mIm*OvlP zwoTlL&|ViYp#9wyQn6KuFuV!R$%uq^C>H_63vrr%uzf8np6Xj?Er4h+4>@i>GlTnY zM_)F5CpGzVI*Xosb^*cn({Lz+ffiL?Z68v4_XsY`=4_XQWNSr~pLYj%xThmT@ZL-K z%aTcGVrB-R$AbUxbT?7 zYG~HofuNgzICK!9ltf@Fw0*eB7rj4_O44bIEu?4$AFfpZeQ#Z!@WMeazVWkNC`>iS zh$7c19&$~4gt&Bgef&`%CMopZkc4(!A&I9NiAwSB&O|MIr`I57;cCSnt|Y;}=JqLLsb|pQ zNxEk_7%Yc^o4ZXQC;f~6TRVOlEs;JF)7cIi6Bc+(hkmSKXG;GBqew^Dl!XyIMy3K4 zX#WrB7nZCuu=}y1&~(veMY-oGjrZg@&Ods*LW&1N&YGMWy_S$JP#1u zCK_*(#GNlXWD%=f2>%~PaH@9V#BvewSDSET-vu6WdOIL@>R9;XSV!_Xw$9F?xUwg# z>UkS-9znxsLGffm7w4glr)#pHbOwzGs>df&{f`59R!1cAxf~G5CrQA*9Xim~OSmYwq z_Ik!QNw{{Ni?L_M!?O<>@d}-&9D1nCxoDQ&O(N!5j0b4*5mI@nw6(K{dNYBin(>n{ z8#YIves9<2DB6+9Nl{59=5yN_)R&vz1Y>i2^b z%^rXjZ|gywE|3-lg9o-Mu}GfAdFB;Sf^?S*(6<)B=zRg(y4odj8f!w7N8iQ%+WEV?1YL*G@zgE>4}TT}keB9zVZ+K0z^v;}cCbLBx>=^ub5 zzu|gjr*I;!-!P5K`8p~QFwfgrJjv#6ud7{omg{HG95sZv=@4!rR1-MdcmITf`QDhC zTjFwf?BnaqL%xBsKC9y!)3?>9N%kNeM_*#Hai33s=GRdnl;YcGGa%@tC;Yj|9MG&k zbD|KC+&o|-^q%Nn$J<3nEPMxV8(xVA9Fcd zp?u`55^j}#GLQ{~VpoAkM|+@VGe3-_Yh0FYFJD`{pF98DHD_K%br>4)*&Fa!6a<4G za5)W{cN{bL@n8__`n2RIBK;Qv*Oe`)#k_n+?q);|htb}0fe-)YW1Lkp*}Rp85>5Tf zh+^FMwc7~3dva!LUI4T;6Q^VVgui~Drxe*8Y^cYdo`kcu0wZdo$e(7GPlQ@E1|#-V zomGfq^})oMm(+MQ$%!Te63aJID{?~7^Slzs%U5WlAo<92XnZ8ARA0dI^>EQ~yGXEC zrSzh~qWvL?78-}4M~bydp}U0bS-K$;%^44XM(!HS2&Lw`BoSl(fjsr^cxLl;yaeUy zP$@+6wLnlbwTUF$5|BugK$#n*crc$W>kOfJm}!1a%jBucWR&NC}EAax+J#9rvYbod4|Wn zvP3CPCTaqQTB!0Luj$aEg@Q)chs`-B@^=V4F>NWp4Gj~v;cRk7swJ;a=o*9`yvbBD zjWds4mw%fDE_y4p*3J$$HZcuObEz+}ZrEjVUj?oTq3dHxdZ%9sa|idbJ%4hNaJU84 z65~}D(M&M_&E7R7nU2+q{a^|Qr%0l>=paoYo%hi$wl0Gd$mlWP>8P_xkuSFhzN+CH zFE(RLM+WQ#sT)njjoEDG(ER``V2c}704JHB_Fpp?vUsB@A}L{$e?_v&{k#6b4<2on zgjv8370nO06W{wmpqZQqo&IbZC6ee|PJ7D3b?5mRE5)G|-b|q#!Z7I5zaUQS?Jlg@tX#N-) zwN8PUs&15u}v<~>Amx1lGrm9<~+R(u<2(Fg4}l$ z;@b5xx;8AYkp~%Nq!c%HWaFs%*faZX0?K+f=LwmK_v1mDT`1U)SI(YDHdMzkwp4_NMP9$K4Q2$nCi`^7=SF> z3@y=J0m$?+D}{OdlZ4GQw4}PO5iM@Vb0ra}6^l#VyGn>vRi+@9{YkRtyGGL1^DKwg znSJ|=ADljia9wDjVaqQl#o!~o5l*2MTIc3VX~A4}EXRpI)LxFGfLB@zseH7G2*~RR zCvw+britSgKBeaK7-z8|+yqV&GD;Gi3f3wJ{{f?f`GCjpO*??_TS2%*Cu922k2N6i z(FgVMD}`Q`n*)8Nik`&IUD$x2nt6n@d(r`gDFLP8=R4%rTN{A#^9jHS4?=4B2SzxH zV>=X>bK)+ts~uc%BFU)jOSv1jWWyy%{3+>@@b9jnB`XSKW(-!R8-#b*vRFPc% z?gW(PhaU>kLC+fsR(l&xQ!s+$RJad8=1SJ_>p!Hn?JK*r`$#A9qPNGBaRV_`2sP&HtD1R-K)vu|5Au^cu`_C>1)Vj`7wM`E|uwiJ+O@Wo#k3 z*$YWH{|W~@zJBMWN+12{owh*`K4n!9rP=j)6XrWK?B4v|P9o+SHP^L6NPvA^{!kLC zNsY0dM=q%M77Y9JL=EoN#tl%tg=rkkBz$e!tqsYV!AB`D{_r9`U-jKl{N7^21eMMy zXySd;(d@S;>Z7#7=Z!@zT-OXibTI>1W!D1Y!KlsZzlM6*nxVPo-S-8uoy3{ ze~CSh>dS788%gB#J{@L$*xXrEHknJ1d94xIidc4fVF%c-cZ&p01$ehC7qUcOe5b<5oT#q#m+wcq*QM!fz=UWF%4ti34_0&usFY7pTLUrHHNVG@EM%FvS9Vc7ZlHrD{M<80K$s1`h~ zmOfRAJ+?54)2MA;%3rdki+wqs6NeXyp7&ZMUKU1ziLaaR)|r$zp4qwqW3$YN&@$r< zV4>bo}-`M3&^M6}gA&E7;X!HokplaM!Cz1*c6kL&SS{G#hlQ<0zT?xiFtf3*f9SR)ug5O|cb~Ki!74 zMY3gTO^*P5Eo!Nis{$#OMBv|ada^Tq+Kzzv5C2l(6V?xh@prki7=Or>fyGmIGlZi# z5yty<>|598#hi=o=nluU0?4v%px)=dU1s*!OCndD2H0DRb~9<0sO(CBu+F?(B<9Tq zq<^=T#0#OR6b(#B@_zH}PXyT|Um?`?BHi&i*1s-BoVv~&gIZNh|4Tj(^rM9n zD4(zrHvE~bIOTqw*&_YesX1E~kOA^fBSU)dsYE}2LmE_^$6>$Qj!`oB%3lXG z5-98G&yx7B8&-BhiJf0*xs8*j(oF7Tikh8!$wv-kVM+|B?BY!`(bEA+&GS|h>clg9A5ke6ih#|iSkcafHMZnSqvc z&R65Xjks^cenhOkeq`<(pTynfG(gRSB^kb!Bp`YOjwHFV>@ocB0_^64W=~RF zanOaSZ=N$l$Y&bttKa~$Sz-dpg^LGEcvaN{YI^NHyzY$w-8+}3;2Uq=MrwxO>Bl{b zk-c|UNYQT8;!z3Z2FE8va(z7-f~<1FYX6{U#)WJ@O9x33>u6)14&ZHL8@unf1U%xB z;PU1@D7ok+$O!Yy)g5 zoAk^g+3)d?E_r)zYUQ`l_IVR7Q*bkHMcbu0M5OKl8~^c4K2`V)09lPZ=_02uSRA&$ z9HUDkF>~xBg8gR5hrM-;B=JPm6azcRRkS{Fwra{!So6Iu=y-&$l^hWOU$KLVDd>k8 z)5SHN?mO43EPv5Bdlady2Zh`Z$lj{OLFV7vV06JQOBhB!BaPhkE1u=ZCd{;@6G*Mu zwxd$0j}Kun-k8CsH_)=qw@j3@)F-gY4~h7cz%QiLCtYA>zb{ab==_+&CoA7cqFp+g z_-YP&{vy_xFxL_=8vDtfA(U0&sN)nrx=JeZh;c^g(<`2ZhSjYZ4X8H10H^j^CJ85b z!t=(EMih60ThPr?z~vu~f(7-yR?4ulqFyLhx0MWi9S})c?(8_4IJ$+gwU_qtUX+Ip zj9)jIOr5E7lv0e{qz|R@eM+}Y&@N6HY!6b2ZuvZ)?Xa7G+u>!jn%%?yMyB52fgE2s zk+J^7@WJp>ezl)VEM7rekr={7oA$>b{`Mh5-!7pY7kKxWOvjfpr8s;R*j%&LfDA$I zbFgI0S7uWF8Ab9ji&fV5!#j5m*n=anU#pQs?f;xmf8GeXCwxbs&yCV0VOxsk z9MTIc7ZWoZU@6w1UW>_VN%P4symSu(U(UJrpdf{W%mm5Pk-iR1txP67|DE?^Zi2xVRmiY7E~8_F51 zqwK=>zO|BQ+e(9U>b)pZVFx;K`Xa17{MiDloz~M0($Q_GGcVUd8g-j6XEldlXYp(V zzdkERR>?k3$vCuJM9bIsVR)SRK~&U}|$}sp#by?aY{=fHHA*IqR)0HzMLY zfY>KA?+jPomrY)NL{6#bI`k76@Q-ZhfF2$IcWWTrNW#v4kT(=lc36;WvE$^>xC`qz z_;U~WMJ!~0r^y6pgQgGV29xbVtos;-?FXnRa1ZK)gtoC2%dNX$=N)^}pQAsVxaZ~~ z_)D0l5I*vV==;vUVchxf2=97Z8PMEjB4OHL&r&g|@nMztvXBPRQ3F!Q!d{gKy6jhh zAPEb}+CP57kn|2yA<^qfXy5DT#?dW5FsJDvwlUJI8#$vqIEc!XU*~NpQi`|lx$^s= z$hq>DD+nFQ?M)W8kV7j-pfOMZ;$v#qBd%(vzS=%nhZ+~ zfoH{J{DPFysf?3XS2%F=7)d@niNtjrn?P8e_k&`$e?~JvHz;=Ql%a&k&DidlC-_{C z3Dg`SCsb052y$Tg)#@}C4D*JiX&2+HPo>iHndwWi%L2_V>o=Ab>5YJSk)JKuZY5@Q zHjDoYjs((fY6463$D*Ba5AZ$ra$dQE#evmfs~&)~XYMr==+dCci+_^H?PKR|yIP zSs0M(8;#q!vm2G_@03rAR(mT-dEZ@0Om{->SH^T^YG*_=$nQS{=~`a}H>zH8_{nY) zF5zk;B-sz+e7`aeskyf<6K8(Y@v$L32M}C69%twu!`kA8&}AFW%73QwxVGaAv((26V1`vU+YncY@zh97phD*~?fA_8++x(6Y?Y)LdxP!Flu z_kj7%Xb4Uw--jvmS^_yII`E zajD$=tura*)$uJsc~{h8#ISzO;`lE&wr30ayyDIj;>OR9s9)NRr)|NKj-HA0SCxso zp$MnUF&9U*6OowLa?zwL4B~Kbm-%My&)_q=WYiRvHhF2xY-hUxU-qu z-cXeGigZW86ue7&u<3w2vukZ|i6ksH+2A2Okx-SQz9izxhtnuGJqz@?hEuO+9|wi_ zfn1(h*U;f-Jd4a&x&u3XAen@L3WdAdpdXB92K@ADsWC9J%#ezXT-UWQgr2*$tj8Rd z;55kH{TcYij8pWup2QO?hK13}WsX@5Y&C%p#djh_qz^lt#IHOT(lJ(SRL?-vA>d7H1BB{tLQjwJjWHOB|Y zGbu;xL~22g0M-6Oo8nHE4wS?WBMk}9-L3Ce9&!9Ej)|eETAa zR|>$g?T{`|wMiaA9FX%|VPm_pn2Uqh>1k)mg!c#-=(?goR~;A%OZ%OL)rICq!W z9^jdg3USB)Mix)(Oa6W+H;-v+%hOjHLVACWk%aqj6r}lQZAqA{T7aIuo5+NwB^A`| zqfBx18l5o7wZ$Z-b~L5<(h0SAsP?N&bl(4hpt?98)3sTH*v)2>IZ-JgeB~tyVK?F- z@~is*(|@xH3wRDhj(WF}jA4;A&h-N;_cZ1n!Xk#6|9?xsU0Vw>R4Z6Vrc44WLr?R% z_C}~w<Pdh>b38OlN+cGc<3S_yGRAuC>LyIjO`PA z_q&C3sO_wB5@$al5`&Sr{93P7)Q+n+jTy1@ww|7Usn zL0-guE&Nu|a9@>3x&PQDA|MF>{W`V)G@IL+=7;wU6=K-{Px^RvvixlA&Y;hHmT>BW z!0V2NM)hiZnFgdIkEu9inPXdSc9Phr&KRy=&Z~(fCm-fThi<>&W)?z(_Y=G@?N&M^y!Sx?u3wiQbE{TvQKe5neHmKgxnXEU`6`!0- zm-6mjGL~c*(57(B@xp$QeX+$zupAVi_HmT zhWn5XeAG+ggerHNGGr(pwl$$^<6cs^*d2S1q@qC-AgwkPWVoaU{uQF4Hs6NQ2pK|{ zQO~3sw5JbNyZVR`%Nhbm54^zHhiWZcR^MQ?c>VyZw zSacBQFxI(QvA?fUs2}ym44&DopfRSB{;NwZ(4e6P`+4 zTxHL%8_V?o_Nd+?Y6L6$(0Vl?6U*!JDgtaD(uPv<%SCd#-CVNHJGo{2WlQ$$VpsBx z(K*yPvqw3LMUgnyA(eIv!Jp0sDC3`Ta{Mc5q4i%IDj~^4a;kcKci%-qP~Y!d!1CBx zN!(n{+FE|?1HaPcMkBSY*?_H`;Ki$PUfH*sv6pY7Au+?2<27vBlcAD}S1*6E3y!(F zncW-P7`lHJMY^hnVK->>1`Cj~B{A*m*ixZq#Ipn%G^aK(3u*lMg{fKATSe4y^E9sx z*b>3(aVLT~2`=bH*gdMlCtqjbnY?s4#&c}}X&}?bPQt5wg%fX1tw&T;4Xh6wIs=TA z)AV~=*s$`I!7^)JN1fP*>}u2V?PxBjZi#fQ29Rq$&sA<81?!e9TFd`E4}#X}@EFCW zf69c$d+xToSz~&^#@+*NG&684bzvMxsp0=dCHT|jbFw+S&JlN)T35mpt+u^r+&MCi z0@>|mMDO7qvgLMp^ zZ%xgxhE9a>@=?m`kU_R z5(;Yeb{2tyH7Mzxg0IE?;UTyA_9WA*w;P-^c_4|+at~=})Nz$~u?S%7y}pn#M^{W^ zWZOfyyFSP8M^2z^)^&_?^xrjfldiF6(SE%Ur#?c|P4CLom)`2=^TSOD=kzN~t=g7V z>e7U&+cA$r*&95|IbXJsqT}3YK<;OB=-9966h=}g; z3xwI211@j6qDV_DGbxdDVp;A@aE1d{h8v`NGx66lqQ;+2F}4hu#kbspqqy7Ly~X z0R^&-`3Gi{3-u5~l(i1T9RB*LBtFCg(noIcEE**((1T|&PNE_MP%s!c1rig82Ya{x z*$?Eq4w{ak4Tb)AeH%EsOF4I4G=X5gZz@IGU$D#h5 zKxsM?AwI`9`nDe>iJ3hx-H|%D9ph;jPFy2mmu30YD&f>`B9!y`O-WQ9TS5vmIt>gP zJDw&s+ZPJayC|PHKK-Oh^tBvDIO4&R4wHM&+k9ucmoEAVc^V8JTr>QSR__24u*7;G zD1Wa7q5gmY1cjX!NMc~4NkV-6&f5AmVFSL8%fg4M@53h-gEZOca)kS$EqE1aN%}Ll z3VoiGh1$mQ>$}ffs`FNiGk5CJRpU_qub4T#{RPb-9IC$UGS6+qhQgnt~^ zQgxF=!If6@=It;g9hi^%j0p8{5=HIer~-6@1=*$TR)}@-P}Sk){V>=W?-XL^XFr10 zlRK26b~3`L3&B>~T^p(tbK~<+$2&s+qc&)^|CLgPnr|X!X=#Q@Hu(G=ez1bxfG6_X z`kHO}g5%3Wsddipq)umpy%|LhfUcJI=*3@XM*GV`5jU@{Xm&$*Mn!#E3hWAZhM8U-TAsgtUa)kT*hP{+DvCB)0QHR z^J+Th^Z4YRO}Nzb6dGeP?dU5V`kHh3zqjDLI=WKBwXvjFTnV(?81GNl$g^HL(1<3te07+SgraZX!`%G?tj&BE+q2xIBT9V+o%~d9JypEZ z2I%Qaz$2<)4&kPp)7ly9Ac;2Nq~DAzmVr_kVFXFrkb%1V`m9O&QfSRKb|j*2np!Rb zCM-jd;G{`{rL3++Sb>TM-z6Dh z&bN5_w2uo(oU6w&duJLhVL{J#gyF+6_6eUL>RFA@@l#9DE7NdNKGjcj5JWWl5fFjx zD~Furh`;Ou2F~g(M8ZC>DM5o}sS32H2TUkbiT_R?r6j&ui$C<;#ysCFGf1yarVvlm zQ)yqGg%f$-0UdWS8tE+N1k=W(eWOkiZ~t?L(Owx((qvC08_;qPHS2S8oQ0aNF=V!X zF`;=Rd~MCaQl+q)fpV>$y%n%*J&{7t@dPSt5r%NHy2%)hUUT$iauJ*Nb11L<){duy z7-vCtVVgI0^eP`$)Y=SvZX68Po7O}U+vJXloA@dlj&hV2q>hqSQ|NnsI)x8vdtH z;DjSI5xd>dX`I*vR(q;*@fD$%9`)B%Q{Mb(g1`lqYDF zin}To@{ZSd+?m^%9+IS_Ev3@42j+LU4FkF4wvW2`HRMLx`j(2lO9O~LFTh5IL?>}b zui`x$zaC)J7L5Eo9hyzQ%F2HV(Qu&`ea#aM(Y4XUV2bRP=!-5n{r<%ol6c?O8sYq! zN9xbgNhOXLJ;$L%;&!$lQm5|xo0}((La%(>zM=OP{rN*u1r;Y}G@`PWsOW+`4aaiS zIfgcGVP|yIHj*FLU>&b~Tp6?LIFYPXgEoW!4N;oRm`I5AmI7zq5U)qBU=+T`y%dS} z4n#4NtDh;w{qhWwlsg|y>y2j5j2l7X!>%9i(Y~0B3Irni>u2Pz759-u;eHTv zeqCco(XY3}R&{+zlFPW;1i4b4Lhd&!8nIMQVHeJ zM>K2c91)_yVJ`oD&|3P^ZlO)z?WaO|b;?Uc)MG@_=>(VWy%OSJ9^Q=>&~~8D#0bP` z(^Y{@uL7VhMVep%at1B4j1*U8bC_1C>1@FA3Vvo%v{^X^B6z;Nvl%-P>u*QM7{t^+af5xwdcQ&cS?smTL zU0axRMs6Tj+{*zE5wMV}9Q~>gz3xENFFe~Nmt{ZDYafro6)W;!edEWFW{w5Tq*aLS zg!2iK66)yg%Gm(L_wM|9Y5)>%dIqJra%)&AN5PsZ#gf&ew-0VOqayF!1$QzXF+IM+ zsHz7t*7=S>4{kLcEQ!%lG!jyKK|ytqFWx1xDUDvSU0A9-jU?jO9;Rby=2Fuf*Oi)x z&RR^PbdDs7TMb6x&NoC=^mvSlXK8@%sDYr_i%b$Yy1(h6nuIrX8~6tDseMW%epzAm z*XoAS@OP20rMVFqpu>^42md5C^ zfqbs>Mtqc6WWRDzBEK7&H9^sqj z&SFd-Bg&|zf^5{7=&rODqyD1`OvTTiC_U1|%TPV$-P# znA_A(-Er35Xw$+*Hze_IAy!-63Y#(Poy0Al%|pFgoh%daHH9=eUGPD$a^e4UKq@t$ zg=ZC_%!Qv)>mXiD^{YxnUOrp#H0S`Q%0@LHk$3!+LZp0pM=`>DB<{)OBD=cdEUBjO zp2Sh-7nA4uNc?*=XB07~Ez25MRY86AMhFvQ4tS8{P{ZC*3{lZGA*h+2-6T|HsV<4K zr6YLe@)wfOxm=Gx`|(HsdG#?4+4eP&MAtqioW$lqAlzPq?tsD{)FP*0I$ay(HDoYm zET!rud6KGo#vhV{1`xu}b-*3F4tEyO#t{^PWD*6(|4n_ z2m&<65!P3M`gAaE#$MK}Ar$mXC*`9CsJ<;k+n4E`#1H=70jt`46PRoL7;Rd?cK`UV zNvRl~H-MhNEgMy$)!VO1k+uq39k6>e&-_K3gt+Z{l~|C`gA*eO=Q(ci;WIZMy_|z= zMXaN0w-Jr0Mxezc-PibvYL=kiu!L72^cjjb9elGy%)S7$1nfuUzZu_EF$cGR5cwU1 zrO*={AKtNqrak$LcEJZO^*6(UXd-JJxyW3&z|eE7W7bZdbk!fEJEoVtG#k|x_vk0Z;T+*c*4rd?Bs zS^Ad<_AdGn^5k!&6k40bY-=raXsg|I`jAH_a*sD?i9sd>#?tI>#1(~S2r@_T;LE&o zNZG!_)14VI0@Kj(M`?BqSBdN{KRE<^eit~T8%VOo^AWAZZE>@vmQRrQkY)6q-;Uxi z-|=%oSYN>>x7X;z1oUImDdibV=JZb`7VldGP9EuekLp|kfMT-B1cP0x&%xV=Ld9!; zI+u$S14lOR4^(KRCVq8$V^av)h*hYvWe<`eA@$IlYoLJfTz+zo=Ay4dUQ#O>YX;ih z>Pd>ajt>uXs3dDzj9zuv26udwd|x5{n>QSOx;I;h4vzQ1jX|%=M560r4kDBcCV;s= z7TTCGlPt-Y!7vY#pJl?{X$egsXP$7q9ZyQdqNhoKetTzNxU?}``OGNVoKKW63*C5} zvv|~QGR9sS2In7-cK*JxAH0g;!%u8a(M2eaNCu;xCv9bik8m<# zjKW!*xE(-9yW<%nVLyRQwHwJK?7dRX@T2bjK3g@M%k18{Qqk13Z#mA9&|Jrn3*5dNStit9-C)Yi{L5I19Tsr9-(VP2 z<7J$D>5T2)`VD+_eSvuYwFKR>Sw98#1iJisJH#2$gvP;*zG7(UR z3fS-Nh5iNdK&~cih3d!xIK%n}yqKmzG#Iuk3oH8qP7bliARYY_F->|*?xu5Y5QpyX z#FIZ&CPRt;TTPna0UH0lbcIUjf9p;(R@je_v3Davs5^#;=^XZvUuI54;y7A7GCTnm z6dcay)&Us?&x4@>A7>C;1lKU!zAs^wTYx#?`g}~>S`N}RpX#!K9TCSJg2rfV1 zsx7G3U@|Y+?Q2{n_AE&S<`g{Xh>0Ds?%}5i``YL7jXWo%SQ-Jo?$&!k)(L^!ZuFECS>V0 zJ!PCkO@B%B+O>e*w^5^LI&i0aK$Hu;>v z7)ZyO_X_do^$T`2m~Uw7TvrOSoOCM7F@W!~!+xb=vJwfc)j(=P%^K4ZJ}3@Xv@t~? zTBo}5>uDmTxn6xF@nro(V*8)~8u{k8fDk17aS~C72Vsaieb~_UR14A#qj({E*M+5` zaPMp~RLLOH$E(9=<^QST9gMShs=f}5iQYZ==l<6bgd>A8;g0vb%Eb<^$E0^Yv?~{T z2DPO!pAN4p9m7Q!WB80oee1r}fZ4bW02^|!$74C$Dv2tc(1_x(EnEj|)4nr-a8lEPe{63%3{ zW*6G7=_vPh8)2)(!Omj$ zY@CD>X|tMOYV!dW?G2YQSWX@1el`K%+GY7dZ27@AHia(XNz-)bq#U3ji80Y!^m$>X zB%b#>L@7l+yWZot84ZceT*}2It)&!Mb@=CUIKMjl+NTf!`*f6IQ5jgWbLVU)Q4=r? zZu`uaZM@x35?V7-NKDU|42`PZs}%pVFm{u6_xW{uHkp{SdsO0ISZAQXrmrO0EqjHF z8M2dj=Il$3TKzYHw7-)D99{0`nlX4D`I0&23XE$qi22T0C9WPk0OL8cKq<=o{kiDd zFwQg8z}IZ0A#`lbi4kIFm&FYJsb?dEd7cBT?~NehdsF5ltOB4oKRc%JZs-|UMdoIK zW67IcCQ=3=@rAD593U>jLxh;JQR|*i2s+zo1{0Z|WRM{}j9MfHBoPbUn1eG6(t!Y2 zWe~8<{t9rvzss8;SD@Z;qfB@uW9v-%$0J@6nkQp}4=kHdLNq^)3#@E}<$Z0>38=9| zB9=YB@dgO%Qi=J>n7!845kQN*A1i;}7Vo!~UC7?Efhi+XmAove&>u? zOH&eV@^P+FL3WUingIIQ#)@+WDaowAPTD&obZ0^)l~aQQHmZ zz$uDGJM*zYd+k?*D4S5J83kv^if^1t*zDJxiiD*$$AJf-yIXGEC=nY{*|+E?gbM9j zLg|_%c0{>$l1p5Mj~#Us)gBS}pLWFEW2(c{L@;rB;!7Ki5X%s|lOkzf$2?Wk`dl!MHMEx5kKIwA(t4=e+Dd?zON!Y~5Bt zPE~s)b;L%Vw5{5CaW*I(HWHA%jFif~M6wVGIlLU@1dh~g^}90h={dkSs+1MQ{y`mQ z_Q8mIoEQyzEpsBwXrYqC+~s|#k{#?%SWq1bdAc-*_JI}9mbn#^(}|Sz!QyN>pKurcF6cr;bp=qk4{QufJYZ| zdaZn{>0`8Rh1Z>qAzlj&puzD`A6}j@X$-9Seoq$I+6d1%Z2_T&K1Q4{5X~{&s>V{U zwZ*yq1IL>y(d>dYA$a?bZ^-e)m=Hm>sRPFkBBn$gI@r})Jc08sM!G|my`^F8{BWX^ zsq9wYol1_9d~(57^QYjRTw9Pe{qG8{+=nMf4@id5=3_2Xy$+D^GH6X~Ur6F|L!ucO zzJF$PL*5Rg^r1}($#p%eG@FY)4=8h_v8Xrp+xG4(E~*XWt}$cfmj*1tu-~)iGwLv= zF`0nElP5%I+dDXrc74zf9^uxPmPi+Fp80nREgna4K>dFbZ4Z2#E<|xm64308!gblT zkoSmrv);>V`oiFsd6v@wPk+H*SNz4DG%L&|8QcXuecbareLNny zDluoZE;Y@(m{Or`98}KiSzNx)X6VA!I{cAJ9-FG=WUUmTF)iiUSsp0*lP_eVr%UC+ z$2wFgwq3>1uer&_M{P|3xE%t8Xd6D9^74SoyzVrnKaqbNS8-I^O#rB$4S6@8%^U)G znyyE%ty1*p#nu&oOCzC2}Hzjg4M;7Px)Gl8k@$6!+qD=?wOIO|)jJV@!a zdciKF^#TQC_v!m5oYXkJPC@EV~paoFY^^deXH7R?bG?zXnBTQ4b~FGTa+`wMCMdA;Gs_DYC{XxNAugz@2_7$lb%T>w z(GLfFqetL87_H79lY(;_prdAZmyHIDLp>@~RU^>!T68$^Q6DsCsu zZkc~@xCWhAz7LT5EBlAQC!jek)t|#MoDkS{Cp7VBB8P@L*^eL#cB>laP@6+VF|rM< z{Ksp^MtuSWKJP0a19a>@8m5WiXpDA}(@JVWbbL9E0Y*o1@MTWPIFS-8>g-cXM=|eh zJm_;yp94ZMApe~a8dRGt5z}6mW{gZJTTAQTe!QgHLmvtwD^}C>_pd(ru=%D0Q_;52 zQ{3b_-{-lEFA;mv2a`@iO;V| zkboqs-=>=+*Hal|`<$3CFm z$V0X&p?;kGP%Cc9*BVYBUpHql?WoHl0IlwuPz&4HbV~RDX}j%iu_@6wQpp-Ytj#$< zc=+cn-s<`%`kQ*(aDJit41gk}#z~y}ZwmOb98kU2fmt+fXQdD=p27?k*BOVG3ERf6FwV;(K$;k9g6ebQoP~GMG^OZd%`+dW;={*#yFmEl zu}Wr3E|m!@n>>P$Sr%|=JAkM5K37irqE1`IaFp8P4CqsBpFq3RzP5OS`g}w)imU7# zfj;|I4X4&S^iv6M%I4R77tH{&ra<$!^wl6u%S1HH`g)0&c5)`*aVi>8xeL1-@q939 z@sq7Bt5lbSw+~upKjRW)b{J)jrYrs`M6frupXU0CIWc1~L|ylu#0JwrWuNcAR3c#O zPKCIbp0voxrnaaBuhYH4}^5uz9Srz?amRUYyBa|?e}s^+ie=~tF$V3Ne$YY<(YMx+mF?Zd3|BTLMEToHk2GX5GAJD6g?8@WTP94^`0h2w zP?W3dY+fSj20@#-PlFY`W|NoLuHpDW(^yghJ34Y&?C>b6v@5%SAS>NykqN?oxE;VC z_RL}laf?9yvmX}`OkJCV6Mps^o9+jv$yhyK5`Vw{q_2J^0HCwojhOD(X}+6bt`HiF z;F$jnaRmiZEJz7BEu^BT;3ut5$a!rAu6*?`6R5%F7c@jH=eu5s{dj3Y%{)+GDfhV7 z;R2aO-H9~tH{|9Hp?tSy-(K)Vi~UXX=*Dz5|14?=+W(Vu-f=a*?;lT*G71%iq^ybt z4e6ZwL@5bLB%&e;6-xGwhD1X}B85DZA1>sqpxXSU!Jd}p{b9J!q_#2pk%RvooZ=(qL+zaq!p$ z5>~Q$N(3v})d#6A=~1aDeYJ@grEwiPeGK3}^J@+BjhO@ZhB(SaVaGIV{8lsiG3yVb z!}T?Q00rWR^U_wq;ofV)bMEtiNhgcSsj) zKq?v8wuCF1=E=nM`R_^L-|c}K{22f!yz(an9kN~`{N7Ka95VDE@1C0ZnMpsBIf>xT zu%PkZ^~kqoA3`c=L$cCtHW1|dwk=7`Ya6ui;TMP>msp&`8RQzx_6>$cH3mR-EXKm% z17n>;on9rcpN)&+EYFY(4hdLVQ~J=Qwb)YTjFW8qE)yH}IAL{ZUrNQjP_me`Wkix5 zni7_z9olfm3KMqvv}dt!;6gUB@<QCkg6CTFKl zeB09i^85Wq-~aFTGBVtUTZAywd`|ZCsuQ@j@rG1c+I`t>)%;|*h{}-YVlV_`QqtbVtx6XpGG>Q3G2tBrjLhM*Hf}pu$yBsH3LISf8JGEF+ z3`eT@j@Bjbt)bAtXcr%*YZQ4xZ*TRRM zByxp~H!itk=w^s@0y}d*tF}b6Ujd9{9~s4(`V)mNRC`fyOT_JaPJcp-R~Da>h68RV zCa{R(U(AJgO(oprr2>c5!^fd5bu2FxCF}Ux6dxP3`W=j~mFZ&Mnq19r+fTa%P#oVw z)x$iM1Dr178QKeHpwycPAaONGWgcEkUbE z7f#>0KIX~V(?}m|e7Jx|{RLNpC>EBA*|y7+_=0k`TKcv`6fFe`T-vL0XOi;j#C>}= zl4*AAPk-@gjIfp244Kf=yvLqjOJyEkTv7doFQQfy$+V8tset#5r%6z4!SO8rLRLtE zb9T`K!oM7B0oOb7kf=70ojLH|0E#q8IS4am%%fUk34J{MnMb6T3ch+i0EMrHem$>= z(4%3NR;8lzYFikn(Fnx7qxi?Lz5vhnRbwSW)s7#mpG{PYP|RQh77U{Pn;MAwg`ec* zEsxE}0x$4WyDcz0_j?$_>-ioi+nV~Q_E9xtfn)fUKPlM#z73eDLE$*SJS-K*8PSb+ zekNQd0xi44TFN&f3um68x2LZwqWfZhxLME*3SUw1_WrMJx#E5C7a^`L9#br4^o>Ix z`SFYxpFWf&J{3u|e{m9QbB_^6sEVU7c@x&^mGT_RBCW+d{_Gk=_c@&vV%uu~)VpII zJu#>FKl^4{G`7tcL!ocqV4|r$R&q{;)VcNeN-978i43C?wlS@o0Udgc;(s@@C!{DD zFdy=Sxs^Jfp&2iXG`t{Yg-o>W#<#_d>d%3#o=h;~9cEVI|A;$27PMhhb=%-SPpV~P z)|GNG<5fKEymeUYg-$(?mG-vAB}X~p3$Lfq5!JR0{bq-{a*}#PN48OGG?0-E1Vw83 zphEm-1V^`vheBkp=S1WL`12+`2aNE<7`FS+I!e>k=%Ni?EK|T%W^QVR)xEFPr9YWft#8Es548iG(&Jc70a8X3PB4)BjU{2au*WRHp6+f##YR6sxjG# zo$`3t<_W(MA3HR_`ImN}|0Sh@_waU?@x1Kyi0*cfvG1mR30Y>SdH?Nkhs0R-DHh+~ zs>1$T|05T_)dHS#D+KNOAfsP6cqDLLp2bCA{oV;7H{3}q+sh8_`9^q3zJ8ONBy>od z8~X3!GPzAG=kMhGyn^VO4#MSy2iz8a;DuaRq1OssrI?iau`AW)yd5-P#3Kyz<<&SpgI0{;JaVUSgMgBXk zg2{NDF+r?;y_$fQpU&$JUKY#5p;DIf;or8baTA>jLI0cx>nx5=$iOCNx z0PT#&$0+*`=3iIkphW%$js-nqw}$5rq@&`&Fpl~iPbZ2u>rP4ccPl3`P4hE>zV$UK z(*-GD>@*Gf3Z6m|)bz}qME3||WTiYDr*`L%QgQnBafx{P0r$(V$e?84B%zr?nuiRu zZz>(hw~BZlr1Ajq;!i68%Xw=g;=^$k(W^@U!|2q6oG!Gb5R-4QAJYxGfMHsi3gLK~ zC5fHFd}k#k(*%8TAs1Qw!5q6h8%rF#j2paiL(|W;H3YBc5)>BiLok^Q zRW0DGjX;|B_*1;W#kv^+r)DF?u&`C=D(T@c%W`!_C5hlj(eJ-()IDP|&D-SrGlzdG z7B^MbF^s1FBw~550bpHz2MqWp>m1>}QwY-`%fPj|_i!48szU7Q>;;BxzFjKX9*Ku} z9C}S2)jOW9oQMRz!>1o|^a6DxThmR9s?ADRsR}`J(xXt^`Q{alhvi{3k!=yDgz}0- z7ySaM2>1vd^zsxrrQ3TwN$(gYsGiGQj>{+m!er0Pj!hf+FK_TvnS(V z>fL)FP8F~{)(?Dm@*`jBAI(|G+)Mum^h$mFzf-xiTy8ZyQ|L+ zOv{XSZtW=aPBp>o5%E$+fFjo*>w_;iu=d-3XN#%O^(aN>*8kI$ZV-mB2GrWfnN<@$s6oHu^->>27ygi82G#n zk(3Jqw$S^w28MiYoS%fQuGa`<&JQ^^(YYTHQCT(~KE5kOhUb|wQMl29%=#9t)^P1C zDp)51L0SAIsj#|0@2Zh?F7fCI%c(B&CV^I7eLtha8-$}cKIS#D78T-E8eHsrA{o%N z?J{xj7PeOZuN6Ms;ECXOUYb+|n z%RS1wVi#b4;x}#17aaNJc%pNgmex*UO1s$@>s2{77i6SK#F72!Fo1W@=tsJ9N-hp+ zPLv7X5JsP8ox%eyVneNZ#ekScx%%G6T2~=%-L)qZY1Ny%;M6eNa7S|FIRO|*%RvMA zay=NCldd5l`X*3y^uoCkv8`b5o@nu&!Ktin1W+~ zM9gioj$HhsKZTL(Hxi-o2MD%khze~eaZ-%=gF^UeMOMAG?#)mKOAKXJB zI;(O3!t2PMVsY(hFnH=$2ugKf9un8lh&h{g#sXxEASTOwqi5s9KL_5*G@Kd43LsVYBOfgeyxowJ)|;fzN1-wsl~{cu z5&KmLx=Q477DD;DjW0i0u%F#q(l+xbf%{Nuh`+7MG3waOgw!-uEkwJ=e9?~GaVU`g z{OCj3(L~0nUpQR9d${xaRE+R^BD?kLGz(Tz2TrE^nkK{`y9rR!26pxQ!ccxs6|B4Y zOh-Xpo5lqI?VB)q^?DPwl0oyRZv`OdO7fUeE!#0JABq*0R;nMO#1RG?CRO*sxJBy_b^{h3J2`4*W7?wfo^2R_lhR7eM4#ot!_Bj$NV$wYlT+{a?i60mOFUckJpAAHyHIe**9 zREL$C@Yy+nN`q#!Oaw^WAw}LTNe{Ir$i;%|i3(9LY%aVmJskOI9-rvyYeUZ2kIv=A z-WCw5&}OtN+MSS#h@EoEsZ=a( zffA!=WH}u^taTD+`(2?LxrSkEh-eOBzI+iDd5?|PRgIL3%bOX-*U{j8pFLQtpYnFV z?WQUv!ZLdl#_vGxyg0FtV*6`~rxBY`#y8v=yW7e%ydOetLlrvH;w<$sr5Q2UL#1 z%%+x8{a0pBKb7_U`E%9r!TLBMEX#V4+wU1hW4UJU67uBU99vpHg%<&AkVB*FIuJv< z^KC`zp0NwPo=Z9E_k}kpUxO%#eprdw{Pr?2s|-i{^=Ljx$o22s%+uHxdG@d&ZSloh zLDAe~nj}VMo)TNmwM0ic{Et$=dhB5RWpyaY-6pi*TxbpoRP(WnU)zXurwIvv2Y#jL zv61!rRL=A*-0|ssM-4fdXlsk+yQD9r8KV%~RH@C~+}D$6de9gxvMjDxtoReG5X<&s zjw7@$@y`H0t2jlPJ5FO5#;`kw)4Z>i0^uu8u-(cNTA@V=beh~4L#m(ui+365g5C%B zms468)P^+I*bkYs*H@_s(uBULw@(6cA2f3m{m1S=sce4|gucoV_W19LdxQivj|`Y^2GcVAhZeM;daqJH z@TAf|Y&BP2=8vK|{LLV^j~hT1c`QSS$ImgdPFb_a4Ho*#gqO7sV&S-%7;s@N3ESDZ z^oYFWpL51x5pz8`ksCWQ1P@r^1a%JD4W1e_lL)OZ{NLPYEuu@?uFUB0LwqLBo4TZF zcLK(B+|=kZ*3@-p9BJAsn#d>2V!@u7hRKBgP~7EsS$MH9Jnw-KZbgH4@(V*nTn{|t zZaBiKEpbJD56ndH+hnc~ixVQ)BfaUcTqoS+Qd&Paq0M;sOT+q7(X^4Uv)s&G#zhMO zfPTQ6V&QML0Qzxe50c{R(@4^pu$5g z^s7~oqjhhi>xE~?#GnD56e8d6<_Ehl?;&S9vB?MZh0r&Yw!wR5qRcMW z+eQTItxJEzhLsSJyAVyk5%-1I9`DO>??I2HqJ{T6P9lXnB0o9v<*OV!F^oa1-<9E@ z)PZhRFd4nsfXvtwg|H8H#U`&~8~0DLjXKNua?Mursk&`%K(Ri7$EWn)z+HM?I<#@l zP@#hLU=P~ic3)yZ+E8B4oQJ~>YhoxBF4=BGA;IGpta^y{Ukx)?9i2v(#cdOGt^zWG z|4f0Ao$ndiyAc{PF>HD)Wz?p4)bJxlWce!p!13NOP~!9Y@U{Ets8)J7PSuk>yik0( zlU&qQO{RJ7%1;vQ$$am}J}yo|W;6#WV%BOx^!~q4Y#sLUiOB%&CRog8-@8sD+wQlJ zQ@?A8U}1&2gjCffF!PiRq=&l*+it3$)RAc{;`r%|s<$WL=5}KirmVd9XI6**PKhQd zlQ^J}wF^I29gG{4VY_o*`p_#RVS5$@y{CtuVtuJ?%I!p!x9d4Kkq3{lVRAVtmxlS{BxKxI*;p;zMV8$Nv~^XBURsqLPc$CIN@m zp0M@lZp)D;9v-4_qva1MJX=k!(L5T%bk&3z<>pa}%It;+qc@kUOFpeB5yL)WJ~3L) zXh8n~3M@#QfRg&HEn%zq$(;=aKEWj{{$h z`tf20H*1_Tl~sGwaT?tdA*@Ss*W-A=>H|W2cL@T*|8^i~J_Hm-N@ufleQ1WSnf_iT z#y*t+;nFS8k1|Zk@FaBRw-JDx6^yg@JU}R_h`fUcm`FOJ8-c6sZ}0{BrZ#~TeW-%; z_N*xt{wLSa;B5m&G&vJTio5`LkoD*SdGEo%5B=b8uiHH23dozReRYO0LB0I0OlbZJ zREXZkhR}23HH5<*2Tf_g`&fuheUV_jVHb<@!*mFhhPFMZ0`!!iWB%F=%qg!QUKW{) znO)O|=S;vHUv{X*RFtXKlTG6}Y0(Q~P10~;3VzhQE~v8_4WDs?ALGzQ+#MJ2iNsid zQN_VYWYlT`f}cKUyVpr_ZGr(mG6rBH;}Ts z(I5-XQAL2KZHs0o#6c%YbiF$c0x`=m8fWL9r2jg<*)k^$_Se*e)<1Pebgq29GOJ~u z5?UTI(I{eh%Dshr+s5OB%JG@j*jmT0uu^|u>EhvY6hNC(wcKiVimdXP9HB976(Os( z2bPo9A3bqzJGyqKkC%#yZ}qre)dvvsW-CzTX+I9+H5f`nVF?R1|C}kOQOlgkm@j|e zOwwc2>485@+4u>~*zO~cZGRPhZ}gkG64CVd9rC=HJ+X)zy&)pMaYWa%t7!0^?#DYA ze@kV;UkRldTN23ml|3CbX4wRSI7>QBqT{e#O&H#L4_Aa~-?uR2Pjx~JP4c1Hqo5K! zcIYtBG4Uo%{abbdL29ZH*AG4DG1P^M|LvyDQ#9l89!UhUT%;!^ua9+Fx?P0b1joSs z-I7Tz=Gmj3e+gu3Lnb?kiY;|O+HZFM&rYmPWkzp~OI5SemRHQlXP&Cz_Pf&2q#e)- z{+;{@fvo#PKiqWIJ}C^iS+GAA1^3bb+VYePs++RWt8ZmuiRi9KMs%0*e?4!GBNB%( z!9Mdb+Xf2{I74t0XJuNFi{D5ZO6q&&p;TN;JB#9_Y;BJl)10_vSVdy&%1-M?GQMMT zQ9ndC8pnFp9HY@@b!&<}x&@+M;utN$^yK6*=OJxJ&T=6GY?ovvV=?mGtKLN69U%G-98 ziR1kb%f%t?ju3zPU6Z~_R^i_y0@yuwO&U&d>lTa%WS?jYnJyjaSl@+e+xz?1W zM72^HZNlzpb5`a^1igOg_Fd()2~OhBGB)Lj@?FI5418!zn9NxA*pPCsTH{LV zhCwFU+>35hs-KNU(EV71pgWyRb50FdXJ!CraPIK|Ij{`yXzO{8M6p`Hx%}IJC6y!j zy;)Pa7=IJsk$-RldZ{;;w&)oaaC%CgZj5iM*P?A+UPrcgb~1fX(Mx1vqC+YQ+&fHO z|2AaXJ7gcc$p~|toH`RdM}0h>2 z_a}+?tUV4kHyA%x+YtlH&}soP3}!6Xj2UFt8e8IT=mwgDzC9HpaMEsxI5sX7f3pO_ zt1=0sjZ<~$#qNrKeDjz`EX(K!F9`ulhPEV!{k@H0?DEFea^;|7O)E`hImCnhU0*qg z)6(C#v$85^^a{I*))`0dLRf!=(0GU>)#}A44$x^Ztqo!Kan6TJagv(@(bv@eg0_-; z^rqe*!#zWLzO5Y=`_;|`$Y`D{6E1g?(WNwQz~w#tFzU$=w3O3%$PUdn)23lP4Q;6o z%RXT>h$gI&C(uibDc2M~9m$bE)hcSy`6L&c9HEj`t$I=uHaCY`e7VGtw(N;AapB5g z;Lxgz5QEFNNW_(GbI5ESnZgBW@Q6cE$O!}3k9h;VD7|eR1|qF^$&9*& zF&TYhe8v??`B4Qw(ER(0B4+4xnCku*&YUUh=Y4ER=e(mO)W$S=If<&QE^sb2On%rR z>ZVVBg}^)a%qXt@_AI-i#%uBlOiIL-uqafuAgul1@o1v> zB0b1r&wpewk@H`-KN8{M5=}qDUmcmSh%kr49epGd8EY5N^*0G)EtL;Pwesgt z&QfZ7h;(3~n zQ0V>UD}>=GE15W5$3i6NSkU<+8OY0SYcC-a7-+*g1LH`$S*r7L#0-6G8GPG zxh8nBDyonxnfl3JD~Vh3Jv1iF%cL@|>x<8r4Wp2DiP<;q-y#>bxh&o4I~_oNP1e-m z^$Bj5upLkSd!{$?PQ*z%$qN^9yO?beq1S-T`>8fkCK7ZHad}EJCNnIn1ABC22xpRh zDQK6Fttb_Lt-AoZKjLZFJ#2zj|KK*6<`p?r-|TB#r7*Y~r0AQwRA|*kQr4-?kc!y0 z0A8%^X0FY8*aOXcz8|^x{-&_QPR=x&KPFhO*6ai8^P<{U>)RX<)T1dqBGI2_JZHk) z{FU!9$0Vj2oXU3Z^Jd>t9sGd9UZF%&V~oZj#giudQvd`M>} z?$_!NC_kYKTM>F>H3v~maGa}chjL9$lk-53K`sZiKiJSaqoKyYhx8#z{n}oiJ)e4w~;(HoiXiAr>}6 ziwpId;|9+0>Ug73OQO9a);XtTnvAPEx1q-8lIW~m=LrQnn^hvN$MA!1U28!-fA;)O zy@^zqU;W4>!R7>;UF*!agy=6uJ$EBCEpSOSHD0JO1 zklo7Y*C{oeCDs9GZ`{0sZdTQvE}z#t-Zo@|OxztnhE_3oDBTX%4sc+wSEN*&3W_fk zn{BFT;QFLW=%}sb-hkVCF|H!D649m;w)?B+ac)Ajxh@fQ?KY#XHlCtS(3R|S)LV&E z_$-@UDn^B{3kL&c$;9Ve4Omr8Fp+pIY|ieXH(_VOLLAH+qOM_~M@*h@1Ql@tTUKS& zz=3%CafIUu>~!||t8l%2qd5uuXcD)9eJMZ!={}L9wbN;KzrYpH3h&NQ&i7=;4h6)) z0MpJ?Zf60YX?IL$9+@x;lbT_M6m}R2JN-0^ST_oe-o<4k^{D3uNp1%`C3V{b3vbqn z`QA}$4}T7yDa82%c!{;lhpot1Lj%9^a)UON#muOm1g(A+uKRa%8|bB+1m;b82M$QO zrk0A1jz{R}=xRh0Q8DNv>4L$1*Zo>5g6s}}VgEGg$lJF^x%S#zRQ5O?H^pkjh$hPHhaM=(90OBJOy;Wr9kseCC8R1&_oj-27i3$r-?}eA}IV;V2&{nJ2>CASZoUbe2cH$m5PkLgLsob%k>=ke#{fdG++8iz=YSV4yy0W+QEHU!GCEolOya%#P_?F*Y%Tbo2RW7NWI* zRFqpeBNZ>eFGoZxrI$whJa1_)enn$FJR%nWxM(^BO<{F9l35F8Ipg|UAzB{BO3I5c z!iQV>a#6+O+0+peZ0TCtPWYUW2U4$$yhMsT--NZdUjrqMXTg5-CvEAGcY`j%1FTTl z!!oe*wK;m2xvxU(-UymqRlXLwx{(2y#PG4a;n?n#BTg^?X(IG;xE@@uPhYxOI$k{` zf(MNN&Au6vMUS}yEmMO*oqXjJ}U}AL%t2>l-xdADq4+0$QwU66E`qqTJs-_ zLMr{nnD^8ntq^S3mqZLi=`5j-VRmU z^p)~TE4iS5D2hLR7tExornx;ft~}KF)r(ls_`-^j=5!~djwE(VZb0NBuHpfawny=b zQ?uw4%V)6*zyIY#3wn_Ve!=*n7m<~>8@~xkGLgWXH!ejg9!bpUg*`H(SWJobAXuxg zWrscgL-u-Y%k?+U;weiArjXH%kkGyd%NZH;0K8gA1bgXufiAA6FJ!_b1f+?o23m%h zYb!*$@~!qu2PRSnYupx(E-*}3Zh8~52b}}^NDIt6!DGE`d=n98a zibGkoOM|fIF5kI0z3~V<=RcC_506SnTPoYqs=PZ9&ZT_sq4^#)&h=XAGb2@Nh=boo zC$Y?J2>QWbesEL4w>@{0pza%8DHbNSn5dy9icOjOPg+LS^+$$`+sc&{)d2*<1ML1l zuRxjbn@8-iNNa%_;PI7Gv_D{O~(mJoN(mn>W~zH8uSt7hdl-(K*$kJ;!tM z+z1I#U4hL0sdT0ro=!#Fn->S3 zUUQ(~xhF83(S9-VaitEY3`Vnq;csDm4cZfmMT;R*WTH${PE+-NOQF-d?+LN+TLa!* zHwCY#?0_UN0rP3Be8c)V4#nUuwaX z;b7C4rb9X6x``<`g{YJY&8K6Cd5ymKpaUCfVE|QgJzygdhaLMu-^y-~hPyfokrus@ zAQ$kaL}bQi!Ly6If%o_0snORYE5yU&$uPWqS0G;dM+4kr>nY#f98@e^Z}E8JA8gq> z*;LMgK8c4@FWgI^xzY|Mc)(DI=&q5}z?H9HbAHy0$f-Q0b#eAAN0FnH=@T!4CFZ#% z%07kP&@Fcfrw78N)P?MbGc`w}7)B}6cWuf@yF?*y7BAl`6@6Pw0~0H?U>?rt$f^C; zBS2IHOL?M~Xz9e2 z^y0WqCe`=Y%kfS<;Cf^MQbhhKJoKEAm6I@+18J*eP(;+e=`XpZRZ^YKu@2b zQLY;X+)zwp{~9uZ^C>+ri$8_kxecuJJHxfe0=WtUX?VWJuiU%3TzS^0N3n<)o5??Q zUP1ko@8v%JXCdM4BdEO00=W628pd(aM*k8J1bm4;x{=%Vl~=mtnk=Wcd+$D!lfT(pHOQ@KlY78sy z>r6PmbrHPU(sTs?YQQ=VSH9<4VmFbJ!Fdhb{u%}xQ)tHfD=LT3J8hA{lRFJ!iRW~{ zL)9L#y6eqY&M&3}5&dyUVdq@oAnT`6c^uEcdsM9E+_%zHLcEj6KR#6n5t@v_88uy0 zBG#`VU}&Bhj#?(x%EgLH7-o&Y2*2!5BdS%mgHcQZ!|c~ACE+LoUvd^xZ#2E!m&{+w zi0s7na;f-wxq;695;}Tv6S{!+qvKex9-E{hH;YL-eU~6K_MFXq3at5+kK?Mu~|J5i1LjbGTS#KV*B+;mp+=2E+y_FF`3Z=NpxSd5dI4Q z#$V<`nZlkFnJ}|$Lnp#cdt|wH<7icx9E&%;L_er{fPsX(H$-mJNKuGo>w_i2xr{+N zTpU1Pev-;Io`*HhS6Z=gM0bjM1^wAUZ+7cQCNX)sb0@TG#S)rAPU*_U$xA(GENWUI z6ZgZJ%s=-alJpC0kcE8?q7OwcfxkR*0*l>IG|!eU1&e=%NX4&4uw>pijA6o%Xv(cu znB{wYVr@gsKI+aY>{dUsv3Sb8R^;rl=#%^1RzdtvG9#lUU|48X1V^!*IU|v?WIq8Y z^9$4^(4Ezt%>++bFlNo!X)wkN0C{wrJ&B@UC~fQ+S(E{rVl+n%yU0XK1NL%P!Dxs> z+bTFh%Z}m|`q#d!&Wt6pphlN8|H?D%PoQ*}yEMsero{y$jve=7XcH(=p zlK8|@NBU4^KV$S&^odN{C$~^=}U$KVDS>`KjcOThHZyX$D(%Z5_@Trp@+rtUn36UX={XZ5==y{NO-e zhAz3m?RIRu=Ce#8npzJ;rVrdEMYcWxnrWz$ggj&e9ycLE%=~Z-l=1^^2CZ}A;FJX} z`D|fV`g4ldc-1TB+~#+TU+$7Vf?wH0CF#U{H^PoGGu)kIB!uA^bXJqS3|wnl7h1@a zhk+`KMp1N(!gZ&7Z4cm;l_8xT9>9@_N}kdXCPg;fR>A!OT|Z#nWpoj)Ki`KOJFFhB z$cMzFw2&c&ylmuP{}_JiS2&IIe;`BKd5)ca?e2~Mw%=1BdKTh-onthy_D(<1{!hBn zKV-@e@|Rmvu^VEA@)=`9#=P^QOl-4u=dy|G=Y)v+=0Ia=pUvbN-islNk1o?s^Pn>l z&AqTAA4oZW`WXCA)~otgWsR3!ITBZWVIAL3P5$mt(*LE`?eE0W4DX4I*h9j`hm z@80j+58Y=}sK4_ReeEt`^iL?%K91VRzxT4JXIm`uP{ zJnxX_4t9Sw_VQ8#Y+9l_LoS9mWl-pIPXZWQZ-Jb6#lsYwyK};KID54HOeOE&S>w%d zkgaP#kUUIa=5S)brgB}%g$G$giw-Kq;-^T3{z~6-Mz*4_LNtGo!P_?Xu^(@O=Fo}o z1=x(KRHayV){(=N%KLIR>r6ok+hMN|-pT^cIN2*XN233stDNmlyW$FMaPn(+^w_Kn z&ZgNXLa_(n;X-|mS3(Sp(M%*O{GtDUB={uY}4#rL0(2wO~Kw}w_C>HP;DByJ!| zRvitXminDmnkmW);V%CCD-)s`spQ3FFT$*|KPQ26wUy0tD@bYko`w4SYe!o^Ix9ZM zaxvA6fr0pM(LkE#!n;tV(8m6xzxF{`eqSH}bvVT#??GRQ#GV(>X)==_XmgswH%eID z*7_S^oBL2dYSgIr_*O>X>~2l~cQt5X>By$!mt=AS*Bt(@TLj{I3v34})2k7|f!!Eh|2|MKt1GI$jZc zlfBgc*#uk@dI0jS1X81c>~xjKbkYZTYiNpoF5Qbo{o&7(lG%#ch{nm@;CS_2mhSo> z2u4{T8(%l>3dV26%s)2Uj)EIE5mE6b<;?K#1tgT&l;UHmNG>i^XwdodbsmaWO)Rvc z|8Q;-UwMRWd^4QdtUZYS_EQ%=8&*rFY`!ZjvUv<8@w_Zh>bVA{VsVCi=3Wy@=l7e) zMNn*#5bf>KIa~Eo#tRW6%8`&%Bo#;`}H6G&i&rvaAHHgvbWH9@!C3i3BgSfLP^I#mRW zq0eA48UlGNm05Q1TE~IpAyYXP^iYRTv<(04I&=dFr>en+tbVR%4>1bnstKUx6# z1gtoQm6$P0iDU$l&q)NFkd3nxBG#Ax8zh6R+nF(i{~leX*C6ee5LRbDQOT5=QcqsS zfL1rhNydh>C=u^8`91Y2O$fnvk`TX9*i|bCk1)uXPgD!tEQDn#2zSYV|Lpk3gts^t zSP{FsSx|RQfzmym@`OVNwkwN8f;x}dV2ye-!w;Z6v2PSrMs@5@r)Uo5V+E7(&!!AB z?LIP}VVpkHrFjU1>gsHnxYGo$_%j~&TRdnQh~9;*c=n$g|8zutS`zh}8z+<(mi)EH!j9Tc0iec&Vm>2K-k*7Hpt|1An~gX4P7~$X zKxD{^{EA&!Dr(+70_3t1AZwZ=Nk;m^kds`?$DnRCtD<(dinQvqHSo|o_$PIe+HvSKE%(rvu#n{}b8+Oj zRO@O^j4W#EB-;43;HuZX1czBIe-KVa@#Iw}YlH~D1B~2zetf^*xYfZy75yD70RukWAmGaNTS2|tX3{hxq8cnV_NemA(npyP*y|@#7Yc5 zag?NRHffdHH!0T{GxLd|EJUw`rBZI58v|aoAq`)%IE5xLrw%gFpt~I5t>rv2pdQsy zk$7P~BOQVLb=&QYyuGOvW&9qUX@0$ryF63A65#&jKq2xr&j1dcuM^s?!u4|Qg%d9| zcT<7>$d-9Lj-upZ*q^0qjdPBf4>Rg@cpQ@+;#VTl%Gs#wOU-1WrU{w)h2IJIf+k~* zbz6*U9ALOTq!pY}>&A>m%nrqTS|!pP?k*#L)4om%c9947j?<0`27N+xl&RjbL@!42i?=V)V^N?g#QoAEj%?P`9Ql?twNy*fJ?&y$yrJ12~ zWtZ?q)YpazaiVGicbIl%q`Rva=?^cA)lS+$@Tv(yrL{Dg+_YC;Sa@zOBx}kkJa0Gd zqL@S#-ex5ZwkjFaOS#_{4>k3KkX~(p_%jvEF;E^ZcmJAFDmpo&;bj|}2r=|iQ_`<@ znBy*$IECn@wiWVpRv#c6gfDcom2v%C%0*y!NqbZ)Ws^zcJGgS~)+i3|^c#tAsq&G` zwfF!=7$!v&dq>WG`dt+q=_(F8UJ7rz{iY3p)c6(^#jY4bZ*w2Yw|~YXnHdz(R`E+f z?*2WOiB)P_k+&0lsoiO>#HYVOKcoRbuCuZ^(tFo@x+|~DK+A|sBj5TniR|fnB?9p@ zhL*j^4TXN54w3joKLAR(OkN@I`@KsEq|=vuD-jc)^uz-^+^Ou{?hWMLWk06xVKM(%SirNZ<|IXKzv1g!!C24R>g z>*+Kp;Crt(BiOWF)Di*FgK24RIs+F~zUS=XsqviEKY$?}-Blrku{0hQ6v_rH^}-Sh z!|>HCl^77N6o=@a^neQlRSu%ZAso7!Dun;Lmz*=yf#w`MN5a;2T{CsV5^CD|O+b&=}x#)_u0ZLizH(j&T54c)-U}kuRq-<8>>IJ1+*! z1pkhXr!X=&5Ti-I3BkyD%Ugh61(9j?et|?|H-=wHR^`g%936Pw%X!$d15Ouj?pY$z z_r^h(?*cq3GgFw+w=RV3ao?~FogM`1ZH1(weAS8C*QP+dSptqYu>xAA$yDF@e4ysq8QZ-Z&$K>vSVj&u zIDmH#1gC9PBpJb|jCYFP30TN>zzpGN~^)AmD{9k>|Zq!-JyT)h{!1uVrE1}4^` z-(RSpQRK@{N8z%H6yRxeA5z+~NpdlEHjirOb&4#;VmzVf!v;rTkj)4}{>_EaUU&m2 zoW4}b3!XA~it^I5x<8%@`Y$NYAGz3HAq9kda*D7 z_j5dN^FzY>TC>^IwjD`nm+p8&QJ}>Hx#)TZ?=HCsz-M&c0#520!;6n?rI7J>CDd=T zJypiP*2HOL%|GWLYg*%QjC`h23x4&O{Y@#ZB>m5jkYk^hz|C6MfR5Yv%7?91bBW2M zbOkp^sR3GN=E}q@IV3Q`!3MJ3;j~P+pCJa^x56f$do&R4cI5LewJR)Vp~Qr}vF|5xPvXAAfjd{8=nz~_ zVVL7vPoW^VfzgL=cLthgo6tGx4S9-R?TA-&cB4o=c{91jqW}o*UgW2$;9xr5YzS1J z-u9+T<%+v=-1)rmZ#d&_ti9sn)S0BTEa6g zBRD^nl?s<*-T**HEqWo6SJTchXb(E!_6)A)dDLAY+?49V!$zLGx}XUgx|4+CnjJqF z62hAL`^F>ZyD=8;vFfM9U|ptv*=++#v>IB=r#l`HpnuU&Y>S;-&VC%Pikd}0``%?Z z9XLjQ)P=gl@=ouWy-|tlSc8u_1L>piIfK>J{b0q*0-&ZjR^+;K-jHVW(FO{x&PSxw zB$j=s$K;Ew8QKev+eC;XjP%Y7(C2#jU<#3LdEATmHeMm@cASxlp%-`4La`dl**Yf^ zoSeyl{T++B@9Wn#T~H# z{yfdzPzgU0i^cc4v8%dedsUZL<198*R@};CAIvf0UP^ls|kyaa?N;uRP53 z#KE?@K!DEpV1EjX=JOj3i2Aynq`4RF(^3%K8T5(lqTn4oD~JL9xM|;QSlx>Tm|)^q zvax;{`5gF|6Haj5f_EF9Qo{MuoL_m~ zSs`p+-KE+*b27bPLs!#nqp^fG(;1rV!f8_Y1}ie~brm}33_S=jfIP9S2Di7rF2v{TB=XRABglmR4nzUkGMmKd zKZe^p`Ic0q={P7+DhQtAKAIkzvxx}ZZf8jKtzl^atBi2iCCE1RGx&~C&Df*d57zLU zf!~BMEcyoTjEO{zGT4KDY6v{kudtRuvVH-Z{qKM@iO#eh82Zq};VY0&cAP>kPh%cV znSN3lI+Gx{pRdt|{nCqwIDHl{vgZhx7!!+J)K~>xxeb;H|FcFkxo^gR*C-DGr)94p zrTu)4tMBX6NDGwjJb2xHAw8O@eW8*wwFz=<@R^?bSe$N3;r!kQ z0ykLXVHO(t-2hOP%@kfEB4wiGLE=J}O90Ad?^tC2ZWIr`n7J#&iaE<6%#Sqj_|q(y zPMZw z*|Oug`0wX2r%FZU>#4kr!UfD$7+^!%nXf^CLwxM&dVAjMyRj`*qel~2ztcUbJWe%2 zVo(;079NwLV{Ti{NPXGMJPn*!?-)=1@Qb4}+g$jzMOOx5_r9a~Y4BC@-^5jv{8o45 zW;ffWl*%emn#r!s=SdpKy`dmvDl0 z5y34lnPLw>b0vTgu zEJ3a+rew!3(jEN>pVFRBq#_`~3;-y*4Ik>dl(^rQrQ6W#J#h11Iy}POUQSDH zGs;BPEMm}=<;5cR;$S)&UE6VpKQE2Gj1l&<^l6RZsM_&r@KmYHwjBj+Tvode&aVW0 zLmxKp>7fwZd*1K%T3Np#E&@E z?{5LIY|6cKnfNdyTOusx{l(eOv4~&7a|o_C7Lz1R)TA+b*KWYqTb0%5u)<0B_@+`7 zoaRa`@cIahA)q(pE-jykC})#DZ}nG*%RK{R;^5hv)LeBy^j0_K5#E&z-yykdqxFMa znYdPBP7zMlw^-Emyg(QFOQe_3!|#MRk-D8z;)__d>Q%lpk}BVWU|P|ZI?3Vn6nv{m zjqH?fl4?2W0CDjCIR02UK_)Ib{pLG*vjP48@v%7{o*-ob4gZp<#r^& zPl%`9qkJV|DJ`sE^kVr~+?ANdp_SNKJUPYb4EFKzjiX3N%4s9I+w71K9bQA&OT z=GbmYV1=X*>uJf!GSR|*CAjuMkH%h05)Nv@FxrXJNsRSUXkb_pT_R@JL%f<6wPnHb zw2?K{oM<+3_$)+vJ`1t1HVIfC&CILv7~00Z)1+c;kC)VEJXg@g+Jsn> z(F`>-t)-aHi`^Z$zsUsGwOs3kCTPr)zo=8oQ@mFR`l66m%f{KD;$O8sKXSN=HdpU6QhLqabZ1YufJX6kjfH3-)F#U zj@W4QfNIdmBP5%;V8Hf&82Ir?+%gjsNHLX82J4~iKw2$$27;Srk`~?Bx~vBemLijX%uPpll+Vy zQArbJ{Xu?t3hS8m3L@W1@aZu7)-+8uLonzy;sC5U2mUwfpM*z^$>P52QISGCT(piB%Rg}x(rW4@ z;;yO%yZ>kcdQQ=B8V;Vk#hz6vs6%99Ie7^_3K8nq1MO8F;UvO?z~Z=;xbq4*p1jj~ zJ#(v4A;%6}g45XqG5UecWMYfbcC{XC0mF8w5dy1Eu#%Tq-4!Wpa)1|5Ft5EPQsQz_ ztrjQyf_lR=P!atY)m-IWYn5@BUf+%Q<&{@>MW5!Ki7rE!pyq2dk436dnMk^O5gZ>n zhacEX#71GO(!TeZBn{@(2o*c ztBCKXXW4Mjq&*88X1j;$$X`S0##%nYw?0>5IWrSVId8TTtu&F3{cOz_)p>D$Nwy0> z=2Z$3j`+`zM6v9wTs#=+DHYBym&nD1{bp1xwP6ZImZ2DzqZtnSYaIUZ`J5a-IwTVf zCyVJJ^(iAEng{dPnGZU~H?Kw4e`iHZZp=p6QDY4nJ7D*D%6xT8pAno%(&P39vpE|P zjutL}V(-@@RcJ`0OLSin0M$5}`99cyzR??&7IvpjE}GP?!$e<210!2~;dPs)pn_Fl zAWv`dWR(}Yxq#bpj7;=z>Vd$y@dy54StS=mfyJEVHszt0H@C+y1N)(&Wa1=I3;D_> z8#R%}9|5WXBSJv*HXVt{!4C-K%Cn`Z$Iao&Unp6HC!}JIy?$eQ-UM#y;Tum>FwDTB1+qBiM^Of1YHY`6Kc3Ce!nO(7<9Xbo@r zj$tnGNr0I<6bSM36lQj8z6m_>#Cj&^hrQfvoJJS$qrdcn^Z|Ek?QFoKo)k` zOr|v?D3l6YhB_Lp<}_NglsAH}e#?LgM>y~z1-&wkhDOh#7HF`76l&jlnaFSbL5Nf8 zo-`JzxN_B@22XJ@vn6hohjMCbHiFfG#ACe9EUYagp_E6Ry6i_-d|*cy(@aAuK1wp0 zFnEYUj5v->E-(kpuJ%q-2*;_!Rkby!3wLFhS%t?8x_gxelU~|fNAq2Ytwn^wbFNOU zptnMADv4}XYmUPm#hn-VW+2B{EM%6M6-f6R0+16fTEMuIe1Ybp?A9nBh|;YVM>&L< zGEE|i&Vu7A|NL>Q-GAWd#p6kl6)9vamw4XxvsLKD39Nm63rFg7fl{2rtYfk0-gX~a zZX{u%wgNb`nduJW4#b-DW6lBvtN6X&)$L?rNE6_CWP66uJ~^B-2ph1q*lVo4qB9E? zdm4YsXsg3cx4$cd{}nWu2*>4wo#||Va}Jwla2;=aQu1Cdmdf{*2;Y|Mpp8Zf1==0Y z;UIZ|^nMtIO1V@kh}WI|W&{D=o#0ZfhtZYz)}LLFCQ$Hb*$uEXb|I0dilhBUg`cJw z*Z^rC8GXf}{dk2WmUh`h5ZxdQpE<9dtf7rVo|F29 zr^rP?4P#FJ%*NZK&BsI&Zc?7#qs~t|t5C2!FsDQq-#5kh1=(Hs7-qiY0c-VL7bl*! zZYh11+sQc>Rm?^%{?e1nFiNJ%M0qeh(M|3tWTMs#ytgyTmkEm|`n0F-eu%^x)j}ec zUENDO_XP>Fw(4>z$^aHNum=T&ueS#Ce>c#*_vl^%Uu45%!oLf(tmR=_2_2mo|lIeFNp@03_}QG8zAbZ z<}n3#t2DW&{$MY}HG^GPN&YE%dtT229u9Pnp=zAu!r0F@IWMVo3TmI!2WhQl7)2@1 zOhm}Z5vKGo_wv7`V_=vP-nWqBybutBLxs{al~Qh5b-zEdOaS2eDowImmB zoY%nz^A;tPJ>yJ@MU5_l{4#1O9Qf!~?%O<{2L3IdOaUtD1ow?Bc?5A)-qv`b0_zNX zLSWgyL53do1l`v1cOngD%T}RTUcOCxQXDOe7q*kL7Z#gxd^eeVVYTwWQI<0p+qP>6 zrE|L&g66@6^d6nKB@=&tfh9xyhXR`h5fG~W&Ioyv2>zqTrgNldLL6yd`w}N{=@?db zWZYS{_OiKD{0zecl9~m9Lu1+QzgjGb!x*OjwM#tFWesBveAxgMy2FAkod#Rlw6_i8 zdqC6Ku1c1@#{&t5*Li zY*@?}d8z)7qw|id`EBF4ln|-3l$0isQW=eNpCqe6wjzq6MD~i%j-sV9N@iA~$f|P= zLT1@}Wb-2WW?=pUDp0@gOL={><$VAhE+eq4 zOUPe(d2Iz*#-FBqv~3b-b1QMm)`#(|nzB7CI_nAQT-R4F@?Rq8ugtMS%WBX7zuSb| zU&kGwPTJ5yB7CgppecgK{W>R(x{N*;UzwB$Z9qFjs`ai43|>(j0p;pmETVEU{M+P4 zs*tSX+=TZNbvpU$LF>gYn-Sw&n8CuX3L#RUr zU4nS+d6@O% zh+ePL*n`?vrlj|RrZ5Ms#X`nQd!|tQ+HnP`l+tvWusg{z8EwIy-i z&wqimyMA^!W!)wLkT512$f8^-LNB+Pz~9eZ0k2mBJkLLbgpG@RCq%_V6z8iETuWjh zYH(#Z8-M1AHoc|Yjj_dX$l8+~$)qIHPr>wlUcr4|DRrjsE~Iue`+LET4X|2@Mww-O z<9eHTL9ISc{Hz025tV1&umQ1qX>?Nk2?Ch?8`fZ3N8~RJlU8Bj2I#$vFz8rg9Unxa zwc8A?QBvP!FK|#Z9Ugd@zd|%iWbJ?SnopgF8S1xHSq*;O108JYjMN3SL}EWQJeP_u z2$(3g(ykQ#H+hd_gS&DOm4F_yFTiY*6@J7T#e(XIKd~T>Y8`4#Gp^&TYao8j4KNw!Wl{K)Fb7P_&pn{XBTZ-v zpI|Bz67$tq+whMvk^4heD)KU2v6!p7vqyP$s7sD1gj&^7g;+RGRS5mzeF+dw?}ock z{f^VzdypJy8y2yt;tUHbM{BJ%bpm&4^Rop{cb|vEZrI8CnZ9)- zPSH!@ZavMp$Lf}dN=zCVwmgi{K)2(Rz|THMz0Z_$R426dqM=$tBpp)_iSH2{k7-zvZ3Dx;?rD8=E`_cEQ2L(-2C$o~C2ymaT zTG;X9Jm3DG(*eg{chgqT1-ZIfJV_zEb;kk{hQDM?g!Trx81Ie@-C1&!VKKp@U}q)~ z6K7=W!S>YV&2W0Mpni(1(T+3%20~Bd^gd{xssHX^&9%Zw#)+2Ms$F%Dv?uJ zsMSO!^gXb8El>ZYFx6x){QY9K_DvLw!{jm3FwHqA*wi!i6fdm<7k~F%1XXOZiq%jK zHhz54nTIsS9jD|TfI6_L2921nC3Xq)fg}65gAUOC?6j8USh@IDLmR+{Sz$!I)-!3q zscH|x`__fvJH0tcsRMER-C4vHKgp7h=8hk&^yS=cv`)LhV&e%x>JtM`M!8 z7G0>g{3QW^D;bQgO-}$=zIszs6LJRc_xiKDxcn3q+B0SV8PwoyR2J@K+)Br`%OLHF zhgDEjj5f~d{v3)X-he#Lc~_Z`&(6jHO+mQ&j}3)8yf_b;RCaT`N=QJcuNp$P$^GzP z{lG}?T-c9aW3d9^Pl(GrH)Jp$E*ui!Zwgvb{D?e>M^lo3F@ccB10-BXYd${E`FvfWjFh_s!b&5up~<+YF8d* zqC@?$O0ivHgU@sNk6I?JS)`YrOyGnC{#r~uFkM@X(!kt6VPi(5A-tBo(QPT zOjOeRO*hV*+(u@;VM7NY{_gEkA=+7XrC`IDXt76VHZwE#q|)bLo=RII0})e;L0DDt{^k-q*fumJ7O8+YyQ&gwWpHMBboIZ zX_LrTB2r}HX*D(?%P)uQ<}&0eJeqsVpP)lm<3w9(r$?D0le>d3bE^=al6}?y>vm&c zi3woE#>~UyVhliY=ldW&PpWy0+`UT(dHhL^yOpunFGq0mEo7_I@MCd|MrmikvCCi6x(^gIQ;wDWlUjL#&=A z-hVrY2yLIT?Pf_dS`igAiQPYmBu+0YbQ86yoiT17c^Mt~P>8Z@dT^cguEOn1#;SaC ze1Jb6%_5qO+(7QL3gvtg2B)=jYZeqk-8sy^?=P7cw6s_%F3vear`|ahalh(3e*549 zMXfvblfct+feelCp@8Xhs{zOaJ$YHKL!7+kCKYsHI>4>tCuJO4sD|6oOM^gMb%5~8GD9NtkMc4bM_a+f zgiIwTVvE7sIm-gS_1K2QtNLVm^>=U&>0oYtGtZ9#V4KT8y0tUOdYEE-%PoczD$MJS zZGZe5^;3=qD9wXK{M~?sQ~QvO0o|KWDds!kX6LwcQ3#dlFA^b^&Sk;0x&t8^d71Jj z8<>DpZO3-kDEMBUmJqQDQ1i|qmkEs`he1WW!1qM>1(A@+>F6Qq{CIHvE?YRt@FVQU zi+?WTM%ELlQyT@YYbYno_tux6z)mJY9HYT6N zsc0Zf<@2nLD3l&bbAaTlFG+LC5liy01bQ-NdD zdxMx21Sy0?*?}Px$|RL#17oURF+9~pmhovB4e~7%`6=am=D=7@sA#% zM}H@3YXb)WaK%M>mpT|!h{G#*pwCH%gb03~h}UgnKz_O>um5gZ8rj!I#NytUCV0d> zyuSW<0)*s&uE2mKB9Z$yg2`2;Xj2K}xr=n`=@9Is+Z@huszeg451s}PEb?GA{^~)J zU*^7EUMbi=b0AguzMm4uJ06L(P6DrA` ziI0@Fy(TT4ytsNZ?A3l}42rS==iy-qU{M|Mnf{h-G?{ddlK)SH+};EGB7ePS^YmZX zP#=fud?hoOoYHPp$m*IF6s)aXf%zYuO7Q*lDTYx8onF=tzhGmWMK16HhT{Dp4e+y! z7i`u3U4|uj)!((4{tjU+m3gLyO#az5us9IM?f#f7353C1TuiFKmP-cw@I=E(Mddo_Ifd zf8sK)L9hXjTohv2#>G@Rh!XhtQbXo^{s2>uMfYLJZa& zW-K+2|NCe@QZ72Gwxyb{?`)jNS`2MuA?h;oOJ|N!n##WQyu#95{{DfvBr+J`b_P7| z=^0XN-CxAa+F=VpSK$Pr?X7iK`JT9FcWX~2OkOS(PD)63@A6Tqsrq4GG;UpDmi*R1 zh^_fx>_JEs6_OW6QTlfZOfw~rFR!1`N^o2v;`8X{N$6lRgp@D~ zq-+dCUNtF*l_^|V>-iFQu`rwsC@AbG6~<5GXw-iGmSo-^;#Yaei0vn9 z5WO$6Wmr+At3-6G;%7#G)}w0bV4pL$(3vLZ3A!YKyqnp&TO^=9Vh&?gt^z@w3kRQS z7!r<*>%rRZTu-%^DYW6PxVCc9X7E1}d;8~sBCBpdO?LSygmmLf+J_3b@8V8u#nx6? zq)nzHO8 zn(f0pghSsTw8#1d;mw`ptnS}qWQh8);xqLcB;u395vGisT?Fuo8BQEfR97L+ZmFky zxvv@P*YgPWz#RuJ9rBSd_sk@PD7@btUA0&TPCN#VP#b=P8mjARXl4sshr*qZjUsKRf=ML21s!^kq=zx^$=+0Gw?nM&z9nFDn@+}~%`Uw0oYLp3k z?#%~}l*l9HdOSr4hGxXX3t-Bp)EjZEqH>h#!y|h!U&^6h=iA*!Lq|WBi!R2=xYX)b zpdjH#%rs^^IOm`aR-h(UVp&c9#XN_v;a0m{TK1{TvB=M@2F#j19bst$M|Opd*a4`lm(cZ zA{n;*7m}DgR~y;zUxH9iCpdF_gfv~S{!T&DV^7|)VJy80Rz(Q^KyKvK=LH085we@t zjn`_MGE<0QSsP#i2kvDDwVSgGeU=j_#^7)VJYf-cbuR?aTeD@42W*C@K%j~vv4Qfqdkuqpdh!1F;8SA#DnxLjDK&RT<`Ai?#`4m)8X%`y zIub7wl%w%`F&;}>K)P%)p*+L-_4wMkq zk9UQ^&B46pJB^?Wwt{uBvLc(7*6g~wkaorQ%(Xs3%+$e}0HHrb<4*ONxRY}@g6gNb z6xW|b+1LNO1TW=r4qi&xEp}lF_bAob3v;42nu@KOHW=i2RY*xx4-WD1Q2~f}@)doD zw^Gqf{Q;E?S57dY_&$bPe@~b~ycii=DVkW0!tzH1v*%UpTV^zFC!oGR6x<p!0 z_jx1BN0@>KiFxi~v~E8uEvn=N>>kUd}BiOV;+ zD;0sgGv&-)+YYR#=;>;XB~#G`bFlzx_p znFd^Cc(5<#YbbL6-@~tz8<%#*`@L}{0~m=9EnhHzp6^9y&m^6vjCyEkH#90 zaWdig8xd&x_%Nx3U2O8C(lz7=thY-0rqWwLU^2D$kd)Rt6bNn0(q9zWo~7bGcNH7W$?ZY)>7}V$^mOY@SgUQjK?d zqGe8KO3YEz{`y~5$j2T*%07mSkDJW;`A8jP^n#{fhdP?mY`D;vT*43}XYiMrO3`B| zyU=!*rc8L%uyh+-z(b8gk0UAr?O;=)xIm*mVc+Z57_zkEVCqp7&xH_OPtZY|K zS%GkjPWohSt1Su5w|PJv^uxB#ZBqe;t6)PH)}wU00(pR-$`nRks-vO1#J=Kh@| zqLE2tV!uUS50T#AltgLUV4`wegnF3OMVYw2I~#0!!y9)ug{2Fbtpm&S6RyD7ECEL! z$$PkJy=1Z7R|7<%(CGs`6Tvhs|6(?ihmkPaU<0T;h8@~lunWe^|D{a0UuX?oSw9K$ z-wK;kT}4E2PUR_f<2?po!=MP9x+dCFa~UKf8Rc0iWP_8*VVGP*+B-}mobw>8*J{6l zP<3AjJyQYb%o*oJ3=L8qNtU>42ZblEaRi@T(I|V@7&xQGA=GU)d~_G}hAyxW^Y>A( z`-bhdwqFi*)Hy`8^<5Xf+=YaG)1$F0*fLcNRCXNlQiqMrjMJsYA*FMr(EJ&TQ19Z) zi;DIl!%olLjf_9lWhEss*RiaQJf!3K6f$i2Y^`Q|KSKEPeHG$w z+&CaaBI?{}NIs>QPCsShLM1=z(fl7CEUqIldlH7nE@2+U(rK;fVn35ciR$D#I2IH1 zW96Rf>~F4sC~G#KsPeZSOwn;ZP;6jpe^sbc5p@m-_Oh7g3kaP{o^$v|+J@&FlI)Zq zTu~YK@z`t0Le;GCg;xKHE)>MC<8&V%p6b_TFRuKj0iyd0Yqdbpk=YabiYvtBw%Ej( za&H9qemFQ=3N2D{koc(g9Cc{xI4=}O2l@N^OP$a>uph+lFV-q^#&(hi45kvk#yu-U za@bFaI8h75+QKW7=6u`E3b8bNGU#x7JS_G;cWNOXlgKsgheu4?p#iwl!wBxzwNQw> zbqIAlqaU~!1Fvz3 zjOQ>bjK{PMJXK;EeRm-z85!^~3wNi>ZXI-HHHwXPV#l`u1JVjC8AaQ&7lf4qcwhZ;*$XgL&|%ia-9#Ddi`QY z{Ly6WZs@)wLcvc*D@C09JD7<=kh+%NVjLhmu)8JNF(~+jEh$4L6`O_Ls4QM;)i5QN4bX z0Qd|fo)DMLBHpQ?iSWlJDt=Aax66@D`QCa*jG#D5-d<0lY$6=bW2^<%7MCFyeNQM~rhL+7@=-O`uv?{U zSwONb(v)`%LVP6IrJXS-PLqKk#`CtA{}#{i8r!$nlH*(Y1f7|qB^A-V+0Yg<*T5$x zbE9@f0TeL!yn~2O9|=JmcMXE%1%m056GC#R2c~M7lMy7jHIKVK07S8;aUhWMaSDhc z0a#m=%Q88C@4$-t=SYQ*e+C7jIlHMJ3PE)f<+jw$tO4m8<;rMGSMqQ@c66s6SlJEu z>|RHnG-5F6+m(?-ZLy;XQS`eJ2Q1=J&GYti!msjx)Q~IK?Dqe-x|bR%1J-VXoW8v}BIgj9g6a zU+}Z_ss_;4>dBPIbl@J-H&J+}2`_b(eAiTXkZnnj%SBx!qSy=zGXHmb@P@p(T>SCd#ks!mcUZcYc&4dOS~Bv( z;h$Wrb~dGV_{}=-bAc0-iguz@d>%X;xPNC1(n)&?(@hY#>6;A!!VdQkN84tUu}5}9 zv5k*m)`#)9cIimxjV>5-^)HaVrr|jXF+uxwrPycT0RAgPA=G9?5fmD*l792Oi9cG+ zD)Q`dz<5+;fhnnKXch?7W{%e)qEl&8e-sDn#cLbE$B?u@*mg2>HvMV?#-4Ua7m# z?5Iw@XJ{rx4K2DrPFZ~cg})#q(>$GuuecORxpvR03h_!3!Z~q&*#&pK#X#67ZL+2J zmqKDGX2Jk9+fvD?&hQpjrI8YG-!@hzhX3a2XULHpkJ-H7!f-@jw?$t9tUNq%(Q(w} zX=)7$X0{PWKQ)l}ZBM-rg{p{vrCB12^Q%NE^4&0&XX~pZqM17u*i%W9R=xGD6wQ`Q zg-*DICA6D7i-dl8e-geApGd@VBLjtaTXvHshTJz&VP7SC<9&Q1qxf6ld zD!U90ZCiwX97v?^ZvR24XtL!AMoU$LaOpz`$$KUFGekE7hV(e^u`;`zLhN6~yL~w~ zf~trIUNZ4IW+kz6?r53FzJaqowCKA`bnVD?Z?yxk2>B}+hXx`(im6=Q?bb!M;^Q?S z=d)bqk@?s&XxfVB`%iirZo^_0^vMiX+^C%tDe>OMwBI8|G<)SBFOKqHB&_p%g87~8 z5UC933)yw*!iHqPhq7y@UqN+>3kakWEVW z7rNlofPEg~I+FH-TOAbQxWKHpTHhR@>GfACwzVEXoLqKRD*XRWlZZFj7O2Z0^yvJR z!OB9--b_I1v|cJ6##rJ?MS&H_!qI(1SQ?e91lqb~yPbQAq6RzOwi>p!^O|X+*i>(-ppp&2wU4E%b#OlqS zysG$0*yjkSe5=kcGLQX7lrMK6iizYQ*K~a-#E7RKIe{r|C3xuF12km-g89v=2^ihi zTWNxZNJYR7$SJoR0Kqf0m2{cjvVu{sYm^Av7xhF>S#|h;Q&-6Fjw0YKe=r*7<$aEd z!AXPUVu7lIM7a76P@gT&$|Gg8)n)2Lm+d0wr52cN5^g6(lsx5rQa34Q7>3jhq#)ElKDy)+%oS=ylr+EQ8unA?AI> z)>SrTU2^-V0NKmO5!PGuV#`KlDmWW@9gXCZ_p<@BP}qjtU67+nCe@|ViLA69j``$< zF*G(T>`cye@Nevzbv1=@XIkO+hYdnbhvDf$H+eI@)Q{bI+y(9a`Wfu76E?g*Rx ze!mR{D$>q@LcR^)?6!Xq`A#h(Nj?XDAT0P*MSDbjDF)Uale1$Gh<_#*&h&OWKtJZUlahGKHVgnB_^=|gJ{EsbWeW){Kp^M3hq)rcZ7l(TyrF;>UO$Xt|qstN8Ew#78~=1w!OzYpKFiZ$atCsairPgT933 zYw*(=*{h@?(Nfc0w5-b@L^005a-C3t{yUK<#5;>dcagCb4Hz9?N@gmJ_3Qq0GiT9# z| z7d7D|1#9Lh7|<45Fshnk2@0#S$cZS+gjQxtkoys=(EH=)!}Yfq#$sJ`U;pPy236$F zA(%JV2Z{e@2PA4vPNk4G5)dUtYXei}sv$m3v#|mW!>IBeQ>rXAJ1!BvKR@BSA05XS zP0#@?IkBeh8__atWwZ7AP7*TY7g0a60Vco&O%=wJ974=Y6KzqoHduQ;4wX|ibA;ISU@2!*h0IrodL16aW?B(gGzZmi zX;?^2%sDo6b`U1xQk@GCUvvA)o9vG%)m~8{F0`$bLQAfKonG{aA%%Yf zK{Ds+I1~L6maFLinEaDdredVW6p`c_vygPsl^U`^sw}4@%81x+t^s^q@D3=I)>dTV zo}T1P`6^#@rmZ!cW$PQHl0V?0r#vTvu=$=I&A2n!%iQZMgoy;g^iwM=|IjB!(1wl? z@W9Q8r$3!rMTJ3xH@U#pUi5XG^&`0bnnjgpvsdoosueNV5#<#_?HU&32AUSBTX^*3yEu5$$ow;r|ZK?nw}QU?mu{J3<{e3w=xZj(KoeS}hSW+W?a76CEoV zZ;6!1msh)qH^K1eU-va5N3imiR5W`&o=k8Img~P!xy(?jn~cIPb|fkP3Ozs46d%8S zC6buw8c4Ts8#iK{Va1FW9G?NVo_Cofru+{v`xajMOS+6&)BPCL%Xuoa$;hn$i<<)| zwS7L8oZQ?-u*KjaCLxq_<@Gu*2u!q5p_i|sDR){h5xQg8V~7fqES_{v4@NL=e}H(` zJiH1oHXwve^RicrSS4bD>y6k$Rjo&YBg}H(@-MA<7nB3!|puuBrPG9&X2DY z*`q0Hc>KFVrP%*{9Z%pfic*H{Ec^Gx2`p3YFrv?{sBVwzc%cCeiD=n{E@a5po#xT1 zG5YGin=5%Ko^P-vR>1y)A(r9oRS2uvjUK`;EL_0LWr0OwaF8W0*s_Ppn&?7hYq!sW zTuNk6_xSbIj46bKLhH zThS_KIcm_06{;&wxq~anaI$ z?Azx%s>Do{X_%@=Z3;y$8N(=zMy=kj2McJrw&%-VOiA8Pio@+Z;6|g5=_6d{a&dC0 zPr3PkPH=dd`N;D(RySY=7yaatNabS}4;(>bc7-sGMx9MFsJ$FqWd$m5T92T&T1sO0 zL^gF~w@hKs&T*Bop{{tpWyt`q-8V>^Y+6VOXjwB@Q|sHfV?)HE?BOpQu5w&v_?PF5 z6#wol6^e*yj8N)*-%UK3jH!ysn8U%qTb2Iai`hwJ@m z)?XoPo_yk#&yjI?7tf0XEOQdEYqzf@#NPG(L`f0%Z9NDtpJ)yQGr9@H>5`$Kyw#^tD6Xu*7LR3D z{T~9YeB#@}nntQq8`XLX4tLU3k~C`2@7)s1nBbi}9CqP+2+Y_UbgM-kiW3_@9SYsd zk_#-(Lq8_$_7HDY_N2w|5wdY+Qm9mT91~z9sf$#U8)D_(_U}Z!h36{FVI!9^jo!un zF6)U)jZGFDam0 z2uY7467ld7CaC8a1U;q(hvE1vpOf3VE|UqfRb44SQjX6((RwPc;O>W+`}2;G5Q^cT za6dilWCwoMCZNBZI++k5UY%qID;BFO#Q6L}5JzRJS;S+bhzLT6P0RZ{rD(u=J9hHn zVue_Lz^hWkUekpTYBLF5Ae1NFar+=B{M#TD=WU#;_?&waXwU%zweiG!mfe^&eQ|6x zUBug-V0~)siKBvJsTDVLpvmzi8sBq}hD0=cJSRpp0wTgZXCR^ ztukml#T0kC@z-DFdp&SUUqUm$CDYKdn8|&K zW`6+HB8D#DQpP1DEQg2VYq!-i->O7AH=U4@DgeO%#SQGin~vC_e{5)_)_Iun7db-AcR?KOim#H9 za7ch8*MtdNm#xDzmuAV7#eXh_ZInjI#Na6E{uiv>O|kSc41l(SBh5fx8Rxli^m>_4 zm90S-l&<%3AkcJni#1sOgEN^;>dGrP?rRFK;>L~q8j+kA8ZF^FZ*Hp;Di0Ge9>3V> zHs@-fg;mQK`Wi8dhg_bF=p`0O#J)xBZ`%!*$h%Czy~p)h26*4sRXGdpEHv)69I22` zk0og_8@;Sk&Q00Tl9;%YjElB-4)om?V1YN#H{eL9TChcyd=gna(`aK?;8VU-772YI|&l}K)^z?St>54=KO(XzM`um7kkw4zlMhw!yl-Q<3>6f0QF@o zNv}Gd+2t&b;HVdP_m*<9rK>EH7_0#+U~5u}GCkb@t)x;w>^J`??sNGVci}%0dC@P! z5wtp02j=oJn?Yx3k*sAu6}OMaE?RXohBlYAM8qEuf5v4hf_muQx~-4KkT> zz|~9GlnqE&{k0WD2@B>C6k5I{=-(K^RDoX!fc)o0+~@%pebGIXzS-O(6p>%%E#K*# z;TVHErJ#rQxb1{&e{}VUs#K`UjiHLo=g@|7_!Fh_VdIElds;KASp9|&&S=rtJx>J~;IQNlfZ+UnpD`>sQL<|E3^9{Bw#qhPoKO_V7- zXeJrY`zW?_2Pzr*TMH)eX9P<;av59J4?#Lw`hr}R$!vm0Wv@)58*OB8_5 zVzCfal2w$sgfC*ajW2mmqAHRYtjPpy)5#-qiBmqWWr##Cu6%2vt3v!(PqKZPH!i`o zCW%36DQI#R^;#ZMITmPrIi||4Z)X`L1wbK*^4PBCLmJ`h`W$1AionlXl*cX`$;eepAioJg?_v~}4D zN@TWZP#zqt2adS&*Ih{LZ0S~91o>lFau3TDGMvh!`8V*ZgRpCr|CR%kemwzEbjcUO zW77$au3cYF4)@L~*pKz#-F+qd(ch8CZctZl`Fm0l!9eDcV6Wk87ILMqOjHV1`QW4>IiS%Xq1yw#mD*6QDaR_tm@ z4dLNJXKLScCBViP-lV(ys)b0CAZzhP$#QW+btR{KzGkOC4M1yqujYeWpDqA}KIY)8 zuQ}4X`XP)NbSc=9n2oDR)H{y`u#D2D%SxGSYTaUDr5JL!xRyL2(hdH_50oS3wf}E6A<8fp6cUkv@ByM zHny`5SN>N!mMZl2Eb)>FBftCPBcIRGnc&+YWg!3HI6~kT*sGHRg^d*U_VZs4b)kneW4d=H9b1d1+;F zhGCu`;bway!oD=}Jv;BjNJXEuZUhLAQb5Dwhe$+pV1Cj}f)jpJ|;Qlf=mV=JSZfl{JQ$9kej@k^5w#gDUcp?TsCmJxrE~v9I;0Nu8;L z`xUDwZ*7sxP><=`<>Kn789c_712QVq9!f+-zF-)i(Nwuu`Y45f^50Xr@I5gU1JxA~ zsCg=k~UQ`rZvgG<|L3!PALh{DR|2(|Z++4#`%Rv4ao3Zo^vim}f!OB|_{ zA!W6F(#X>VD3~hsa~{~jtr>tyzw(%9^iGx2T7jw3zQ*^4JGTS0 zT|7#+q;3)HObMVjHq{bq(Y!N-CowqEQH{;{bUs4kH8K!Cy#-fU(rGg4x5bdom#vFX zT^aJSwL4B&B@Ja-w+?IDJU)V&)W$jpKf42!qNIT9Si%8LF(yd_wXwXQzPx4@j4XORHKCo(2yAvSTA-kXT z5{d3gUFkDC!E&yNnkf~g6M5g`TJ02^JOQ&)S29x~u9h`{XRSfY_Q_8I^HMiTM7t4q zrrR;YDA*Vsr@YE!l*vw?`vz>LkR=@xIcCvC1l?kf5VP7^Fj*lwk_^l#2R_Jc3Q7y~ zlZp1Tu@-r=5bxV_O=wf_<)t@udPUh_a5`N*mBfRcB#T*+fQM3%+5p})`LfboXq{98 z+D{4x6m`YO47-QWMC+xg03DzA;3c2 zsTHcVR)`l5k4eSm3wbnlRTU|#36PvHS2xH#M?L)I<*`yRxHuGVzr%?dg7Inua9ieL zi|uh#N0+sP>a68`iw2ZX{8eIzn`naZ4NZH_ryBgW#AX?JM6+zc)NGu{^N;lO$E9~r zhz~v&NW+XlfPbFB;LTckQiz&`?}XU>BmoGK{|xjs#fz$vK(^M-2?V9TF&>)P#eu-- z=^TYv>vB&btPjV*Bn<9ED#|~Bnu*_7vsX(mN=4^15QSuZdtgruE3SUS7c9__O%>7% z88$H&K^p%#gZhJsq&}WjEF@=L%M+-%p@SO!mVks(jKYM2{UA*)y}`4u4Q3p#4;2Q3 z@|Pn`$`0hvsZdfg70Z$5i5^&Gg9rTK_Lcm?hA{x8Q6EShgBZxYy8@Egm%anI^)wb*vy&h7D!eTqCyr3}87gl~H|i4HMqxY%<))R^;lvrJ!0V zVjxuK&~Sxl=!hUq%c&w`=hs?@sctSfr8ao`KVkjI+lTXIvlXdS6s*O7+E+EjIwFXo z^syz>smmt0a8*txa!h#%@pdGMC&)z{dskXRM18;|e2viK-BvZn6s(#IKE2Z&BlrX5 zG{1{l9dXg42(=pq&sY^Getw>f5T06Sd`4OpJl{itmWy_{>^naXAK3BmCSSpJ%mEDonJN!*Tbn zm5Rz{k8w7e=2VFJ`mA&OZ$ifUEDx!eP;x+uxekK-`BTVQJujwu2$#7-iNW@Ax6o;b z^4Dg&c!KV1h31#`NKSb&p~Cn^xwz%c>$iA?WG8>^O*Cfm8aBBwk3iAyBfjwje)`eg zcO-3d-ePV>faWy*vVQGKj5zw&T1P7KXAY5x1J}~2B>MRhxBYFOt5{iVjG%8?k4J2L zgPwO7$vl~oWaYTbP97q!z7-gxDZ+a1Joh~+2QfY}M+e6*?8h`e?e+9r+(M&T>`PRL z^3o9KqP4%-UmZN+gOREbM-9m7vo5)J24L8a-s{B9FOl+h#9toBSurB*@d(Cyo9i>v}Nce z0`i-IEr!a|mD3u#ag^|T4TWe@yo3mC=oh#-!?`3Zf1e|_edJoDc)blbJNe-pxu|~4 z#y>s1jm4hni#HvQbWWezAQP=d9)USF;;a5rd=g@;HHp401<1z72rhMf!wmE- zy)V^NTMPhMUJ8QhOX>=-@7p{wsOFKF@ZMm7KX-q)30a#qq_B7K>BVzTg?RhE1BZ6x zNhu?l?20gGW2KBzhB6pSpM6{Eg&=kC;1@3jZH!R_?uh`BTr7==*VX=hSS)LjEEezMD*$@HIty=9$`P3MRIFMgRKYM5PceT$2 zaz!gwQ(|t*d;GXUI_W?k1haWaj!Y~(!i{Dh?T6--mQkm_izPOFg<>1zZlqM%382|f zqmAiP&KYx^2?`&V@m?+pjR_=l2BKS=RaN1TEA6QlIC+NB?2Ej<(U~WNefxAlzG3uq z<&5Al)JyiW;_Iy`+PjK-`tDmy&T!guCb!61fCTNAvveaDFgMg`b)~2qo(ef|VKv3M z51h#pClS=doo>S48el)pwq{*)t~`{8vC0GPK6m>=ebYIN$F=w;RJY}iLan?aQG??k zWX}jwvifr$N}0*a1^(+CK;zyU9~j7eOW|%d8T0ht=2ePL^_eW}u?kAyF?wQom=x=% zhRw+>{Ys8XYZ{ti~IPz|;7o7<4{@rsI=8M>#0}2hPFbdmB z5oL}iRifVh6&ypteKU3mO!L-25^46V^PXpCu{1>)DCfoGO7SQ8A~bk|69zdCEFc}l z#?L#cDHrp$q)=M-AQ9OexSL|+);lUWO$!e(=jdk)i zAs}+ajc*xwh~#d`5X{4#pF$+G>k5@q!Y9nU8^H??K%?IhRGrbI9s)8x~`^HR8=M_eJ^9Czu+@bU78JND1 z%<_6HX3gn$~W1p`+l66sAKrhE@ZCz@55a1qbz?Bb>|}6meixPKB6$n8c#M4rPzI=4fQ!sP}74t<^V4fLq=$NTZ6)#(921uZbHN_02PdH3Njkq2SCtK(H?qY zrYAwti#iUw&|OI`W+X5D@O2fz-Z?Ea<<}F)i^Y3j$^$5G=;I)PZ+eo7_w!-tT2u&3 z+CFY6eKk>t)mElhko&6C6_|WsT*$zOlwNfSgUHLdAjFC)p5@V$%@mCfI3pEz^EKIc z^NGCW+d^88c8-H^iO!@w$C*w36VaUgXo3{i<(}dA#b5T2t*5R=<6(gZeHFs}S8HT==IgM2h~FDGG699q)T3<2y5~qA;5|>6n{a zxv}_PX$HBmn;IN;p)3hc9q-Ew1LaBHuRoq9*lYB{v^3+>Bd408_Jgs6&oe6+O#VET zG*QPwT91@b>c@h=LOk~aq<(w(4>21yl`D6eL7%5OYns1eE>V{9l-`!{ZHPZ!!!zuB z5yV$sub@ard7|-e-Q_biZ1_+R#S{?NxX-#xhn%kGgu0Bsow zG*ASC&6EvM{cktOMOLfFP)H9?0{F%(0MJX@pzN3N*iGND-61*0urD23F_*aH5g__n z3V^^;mpyudlz4S31)+>}BD42WMJjAHS0hpo^KgWH1)@zBRj2Bsm}gKf?m>@g8nWQhfYCCQ?rV^GuKF0ED{}GJZ7xzc|h) zrGzKdmtKWDQ0d5{=Yc8r`%!s&Xd2M!Lo)tIn*#apAR}O7!XN;t$EQlsd`XBx)JQQ) zy*E%ekyHLuE`H1bkH^*WLHIKCd|o=se!g!nY9Q}n4mVV=jU5Z0L&rF^0Pl8RLIBh1 zk(+S!e2tv8a;gxEzPlnw=?mdY?%!g1!`r4<>dt@3J|v;%VHG)$Ce65 zfzF$(7)c*Trgz&L_=+f=U8gwXoR>>6e5fahbD2uR4(ib&7 zha&dO-Hf0sj|lnEmSxwvhoxDgq`X7wJYZdJU@{KGVMZkD(U0ER2dHQ5jyflY>BGJm z%_C@y?@kfcMg(MU1Zq|I3}yoVw@W156*pu!+tJVYYJw8DwQ(Fr_ z+sKjF(f%6dr0YQmV=aQz&iy$Dxkcbayw)1xNR_VF-Y#3K2Dwm%cIJ2$XzJWK#DuZ}j+kJ|;Xa7Hy0(pyi}Gp3>OIgNP-&F936$DuBLLcN}GB?>IpfD|^FRuCn3z z9(G3kbkxAlE$o1tYC441-Gb;=yfmm%jPkq;hTGGcT-N2y%(`leEpD2`t`6*)gW)-R zxl+sv(??EEMpFW6i}t*kuF9oC`cN$MUkGGPb`_r80xKFE=}qy-=+9_vUvyCR?k1U) z2X;^;71~nKzTq3zLTJBgNx1p6qY{?gr?BJl9HOF9c4py> zrbJ4C0+v$;J89$Ns1O^Hi0L+Iw?v)ayGg}zr@7bzM^!65DUi`i7432)&@^ChA})noC=K&1}KSDjt~!8cEutk zIRJ!XGdO0Zl)dyj^jIp&a^_&5ltl96ribAPJ0r!>i?N+!2X80)u<)W>oH1L38yohM z@jQ92NC#@)`1qHnekXY-=BCTM+A5e~yUgdv4hNU`NJ9oEGlmNxUJ z=+=uQ2Y2yk^Io|aFKv!dorfJy-=jyZ^QusHG3Ll@SnOJNm^Oo{X#5;+B8N!Q-#sGI z0N}k)mw%3f`Pod&T()8+MGd1|C}o(;s?}{EXW0Ja9l1Ds1Th=!zz0cLE$|D65%j}* zP`ZRr4PdAf!bk(sF!Z1zmnc$dF&VPQ+#7+B1%$YckPTD3IjcCgg9S z{bcm5B*sl>oNJ2O7qh?S-I4+7i5}F5Z1<$H=555eS!su1p;Mn*mW~2O4?zFOcq}0%(z$ z?%>!v_AMZFvWF=|ZomoB)y)IsBDi26LFTlt5}|uOffk#K@i5kVkC3iz1L|AqPxzmu za*@(bQ$ysGfJ$6f9yDC?Fp1pG?GqBQ%r!wGitg}e%P-|uhzFWha?!ulCaEa3R#k|? z5$s24MJQOHk@c&M9!&YvX4Ih3#*;>l&EaGaI>K!RTjnA|Z&yMGx~pOiQ%69ZDhZqr zdm0sOVvVu)L73c?j)Nd(+;nlrVT(OP&-8du%Sv;g+OBV8Z(`%efcDF zIx_Nz#>y>u^IwQS@zQxxabwIx3aG0B=&rHMB1n2iHR-w_KSHv1MVyu~e>nld;B5%a z5yY(24JW5&3`1H`u%S|fC~E^$zTreVX0$>-bam)t-Q-3J!Y)gB!pu(8;0E_Nevtau zh~e!B`}F-___PvWAi*_NPvL(!jQro#OqMx3nf$N& zJcy6JXybKBKdNnBJCajs(}W2ThMg#J(@~d+=WZV2I)_&TVB=~VZ zKE3G8(m76#^$_yf&h!ZnehT;6v>U!rm*SR&!kJLx%7&g|OOV3XU2Bl0ltWNqEAl+V zjc9ABFmuG*{PyH6=gp}iN2;8+zV7gQ)*zk@=-b$VU}f5R9%wic`(h*5V!XlyiQUWl z&eWg8OMi7@YgJgaxq6S`bNZrS{gbCD#HtrlQTszISid2?s5(_vg_WGLVBbogV>i;E zna5mOPLiwmJ~VwUX5>x?G8uVvB=+jM9ZfIAIF_AJ;-kBD0v^4!E)=?weBAyIDUpnJ1%h2fCJlDr zk8ZX?Hd@R9c|>m>166#E*IH_Rnvk)z6*W5w7gCoe+k!hyI!J|jw6|0&{M{P?cH{yV zp8lg)`sXTAQQhA&@~t_tn?Jli4)+b>qg&A$VBNVX+^g;^YMDljgQ|1g%mG`y76F87 za7DXvsPUTUjGrE`p&1T-EJpB;R(A-iIGN z&^2=jzm0cbBEhA2GI5LhlSMw?gK@H|82wV~8j4koS^I^`oTlV04;dSR=M+!+R*J37 zalKRb2LT{| z$IGN*(@x~z`&DCi5%`pwI}Rh8F+OCI5dNofs28v+!+h0*QBYECOQ?1070~K{1Twvx z#Yt2S9_V@z{rFtMr@6_jhNs^W=rOf$sW_z@ilyl`3B+w~4RY%ZemPbPPzvlG2F_9JzRLSOe9$j;om2$%498oYqMD$Imm3+`#@Rr% z=yQZJX6X5>b=|1D)Cbv^X#TT$|9co5bh!eMY z)v?<1fS12{%R_FzW#Z_r&Yb49V-e{ot!Y4}RrsE@yLtLwn*$)VYX(Zh#^Ke3Uq=zW zm+#G4=T(SG;5vBaua?klH~qF(keOox)|P4m-5Llo@GYxSlNb(K^&w)bvAMRFt>08wL6wa)Fdz8S&A@sXI8MYC1QUsI-C~fA$41 zHg*7Ne?Xh@=C@dT^AdI@{eKjld0dQZ6vvT-WQ`JOQKC{IQqwbORaugyL=hn&v`8UZ zluB8$Wh)V~Bszw^)iT+Gb-zRz>c@BGg1oaekVc-}87E)|K7 zk3x9f5BZFE`lpFpIr1N4G3q;#cRx5G7lAhnc?n@L!FqfZM!hj3LVQFu=w5cx&} z1!$;zB~+t&BArB=dPv0|ljDSr`bp>@-#cI>dN9?O2~z4&)mCybY3vYsgq`rMWa$PW zoO9Tog{KbD+Ii+UPqn8jcjfU6lCWtLJMGnrIIaDelVS64H9JXH96|-?TU@)Ev|i`3 zT-2KqXG}WGwHN*RIpH&7H7Wn}L)11+S|Sqx5n$))#8qU5v-71QxH}r{(A(IW+!eOI z#2^7bSHAk_#;XDR>nJ=gKP?e~WO5k}-@;1>y~3BgsD9LXTCdVr`|ZD@nUE8aL%Vhu z%(t@ZKiUj#;VJ&*`beE`G4!1eyHl?nz~a=~9zfdNB~U}B`j8Y_W^+2}WplD3zn`2d z^6y5auyO{ch(86Ps4JT(B2LXgV?6eXRHj#>5FJ*gQgU$xR8?LOo|Y@$gcMz2uAl`E zT3E1mL7>+gaZqqd{xo--38DE3nZjgWseYb>ab3Gqi)Dl z-DZG}ITm)}LZBm|GU7HtY0?bz@vS^o*kzt_SJU~$V(bHuaIP6kQr75D5PzvyI>*ai1f@=}h5-^9_F4i&$CcPdi07MI+ha0fQ~c$A2P4_KF< z9uizq>cknW2jr$M%8rW7?!y?vWi}p*t>wB2US7yRK0#7(bMQjy#QkRhzPaiAlv0sv zR)igN{C-p_{`-bQto@M%*K?~Z5hI?`GTd`C6insdegx+NY;Cyo61_rU>!|8qF=Ee` z?4dEC4HkBwhb`?Fh3_Te(v1q*2fRDe_7MZJ{=TeFC$B>^5=g%>oP0j~j)v114XLnR zTq%Ugm3gp3JJQ3**wOSe=ubgj9F#-VP1(gCF&M~Q|3v~=1{@<0Y_6n{^cg=tZB`Y= zIvHeD)J&9!hD>}WDWX^=E^U6xtr=XBi|g{1at6pM185L@kLTb z<2q((CeBC8=*E&H7Gug9ZY%7CXhDv1;scDQ$0c9Lc1!N>L23h*c#yL#VP~wEsy7{S zC(E*fF8r&eNhh92b%Zkl*uX(3Pk>z?ArvO%A97*3Sn_U~JJ(!xCXrjxnVB z8IaPhYe`V*q@XTTt%qfM6Qi`fFf$!x$E9n(GSYAtn9P&(Qd0PCV^NMB_`R;5@VBGI zvq(q2vj&FUr|>Iz3zc2K^yd`C3`30D-xe%cXH1!QgDI_7N!;^}h74HM30Dd-moVVQ zb@ARK$4382T zW0DTjCTZaggdgIGjN+3y;jxXs3)}dGEjzbMB4+IH7fDJ4V+$S{fj()stZR4 z&qdJky5l_~!S?qC#}x#*&F?$XW}w%dosI*f=Xy>A58{I9D=-g0*E_aKB0L7!g0Y|0 zqIlJjp*4O6JmkwjuGr6-EOu)GbG7aadQKL#BMo;Br$*2nv>j4-0l&=HE)^5K22xy0 z@gy~Rp$a}brLzVfR?0-D-Cn2$cSxJJsNBH34+JWN`yU|aaKlihc8+u>J2?T>TONhe zRcH1F9%QMIj^SzKF1OJ1lk3=&O`pfmp6MCsAOiYkf@|%^gETfM4hzSDyNV}?Qjw89 z7e%RJ2-VjgI>^!Axsc96FwwZ}I+`S^*6|7$n{g=C*4Tk(-A1V>HQ}K@{%i?tG|dJh zGIujFp!0orM5h!XYLBdx^4=;lxrkj~OY!e8_cviC+gS3G{oP%<4Wb!C$I(AUe?;R1 zqG_;05;ATr_E+%VdPdmHXDd!_Yeq+MHI{u%H=DQ1E0fl17dIo186ck|95crptJer| z#KIrCWnLl`9h>T741M~NTv)EAIr5o>R9xz6#n8ycIAs%zKgTSM2o535SnM9Q+ENjc zk1m@0J(^A;`Btg;7&(#z=8%GcFBXyPbO&92)XpB@X@#~loOaMs=h#IjnJX~7{L`eRuPeDWFkL0SD2jw@UE5@z4A zk|z(^K_wRhBZe*KQg>N*8*r12#iT}G;^hFhiKfQACl-rOQvi=!eg z^LT^;nLfW97eGB~{zFP?H*mEx$`fA^r$@sRlh~uC@tHEl8%-l^ISMk=_x*_H{qD@+ zBCW|34xPMF#%yQOk*ouv4|__CIzJue@$rcOOD1q3w^B6A107&S?KGz#UX=AD^HQJA zqq?+{in{MBnRz=m0cQ`!PVIgSAZfjzhZ6nO1z&BbmWqG?a^i7|{~{gK@{ym11)}Hr zd$c9L^<@-K`b89_Wxb{1aeD$^^TljW)DTPBgt`on3e!FcNY=34kc9RpDV}zvC}6ve zg$=JVCL#ZZt+nbtTPAKqPLztZOOnYoesC`#oaWQ5^d%GhYfomw~S9<4FqRlQ`z_6Gv2^(nW~!Son~?Yf}pP z-f0S9zQK`Ul_9|Jl>^-Kp-HEa%yz@WYLdaz*^yVl)1SDIN%4Ee)D@lrefqYA6dg=L z@XLUO8wCE~&|kQ(Ld@z(of!Y-AamY83W3JX0atWLdxp6J)+M3)L$2-0Dgw zJCo78t(2N;J|A}c$~)%LvG!(Ft+4T<-Vply7+w_}j@r}K7u&e(MG&s3tb=@dhr-}Z z`IS_01w8#w!t+ib!!Uf80!yozhdV!D%Tf#Dq2hbmNJaKDYhpl58ACV!>xHeAn%j#p zL)`3z&VD~8K2_~t#T}ng1A59jJ6|iOpZYG#u7AxOmux?WN7Wq%Wp|+pu*am3qCjFg zV#q!0%5-4|dz6ah#p2l_GpMOzC@<<;HwV^oaX&+d%0UYqtPuG za$M-X%MBSX*@dNr?qE}VgD=uip=|v#YfAYi_M!z|7&v;=kR01J^dlsNf1dZ2#h`hzdkL<#AH%k_ipr)(B z$4hylQ%tU*poQBPF1v3p0>2oNGS;M%Hov9?YRP`4aNpT>iL|8w#|a8)!GXMXqbViN zpUcR>SoTAICTrElIW)gNj-`yY;uHV5^y?@I9t%+H*&@Rq_OD(``4~&i@ zzjQaHb^HXB_|w$)biwud0-5j`Ozy1K8`e_&RVLnL*wR~}-vpWOl^hfBi{iV=spE@6 zTF6Ds{F7Kj(OQng>;^!~oXMjmp37jxW0%6ndWP{13ZD$N$9fo6cS(ndkOtpm;*YNp z{AIEu(Lfz@j9q3$mLGK5UX&?k4!kxqpxI-B3jIiWLkU32DP&d3w}Q=zqowL;Crr7t zHW*~M4VL(IA3-<9boMB_*)5uG59H7#+G98Z#09?l+SYh0Red^Xjy!% zIO-y0tkAu3VbN=Eu}D!0Gp@#5Jk-(*6(X%2BFvZPMWW|T7hI_H7TMwqjO)&uk3z)S zRG`fbV3T$7u%V>jG6p^uG@*A;PaU3fVleDY{713FR{J=-d{B=}exj z$L%T(y8F30i0z;6@+*5;oP~;!xZ1^3M6okItdPNRM9Qh>Ij%D3tG(!Nwg7eO+a$K^ z4oQ;Fl8z9OL^T-M-x{QQ#Z*}CDJ-JXFY@zM)@el8hif=fI2p(37$qwfBSVMNYj8A! z`Az$y89%pY872FVy%eJFX;{^&%8+8QqZ&gxyAlp^uA0a1S=1b(zGy(RR?{_{hgiT* zRc_^&uT`p?rAq@h8Y6O<)A4c;q+?e`v1mP+g;iv)V zSs|a((16$cov&=25KZ3VV10XHT)UlnAonWY7$SY($}TKQB_V&(z**m9O>zk9Lv$|& z1X3fk$PKroA>tEYxzTO_2>iks_>!^zG) zaU_|M*y#v29zXFnzM8Z>A8q|Au(Tna<8+S}#UB(bnyii?k{P0-1SZA!FX}}ZzIF>Sv z`ix3@j&W~e#Yd&lqH3r(kADmdgU6oX{@$6?!hM=yf4^lwWa+YV80Oa21io9iK}}x| z%HQ1&p{Pgn0EQLCND-g-snoGZ2l2`_$-L8G*eT`wocqaiHKPh|1n@Qb}V{g zE7;t5ryjIGH9HFN>ncv{1Gl{Ojt6YI^AdJ+6&ONRwxAzuf6Nh}ac3 z&=?cFh%>{gp|FAXga|w~j`L-$`Pw7Tm8kZYfsw2$&~zjE5LUNt)1^@mJ2c6wvrOIIsXtkoZq{n z4JQma1KgB#Gv^Rt`!(b}Z?-C>Vid2%?+M_8600~-@V18HpQRTPb>UO$W$l3f#tw

>_JKldXDgyd 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
+gPvR9#&h>D3bIK)+t5Kns*M)2A&4CqUCExAP^ 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%0A~ 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 MoXcigB5p3Sp2n?Nk_cXjGC@7ZP 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≪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

P{p;lPcQXi%R3E1 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 z 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 diff --git a/L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx b/L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx deleted file mode 100644 index 229085ac5fe75d53543513107cdf5045e11146a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118038 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 From d245a34a68c50494fa9131a461846f85b78b28a8 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Thu, 14 Nov 2024 17:43:01 +0100 Subject: [PATCH 22/36] Moving BDT to seperate PR in data directory --- .../python/DisplacedVertexProducer_cfi.py | 2 +- ...VertTaggerEmulationConiferShifted13p8.json | 8182 ----------------- 2 files changed, 1 insertion(+), 8183 deletions(-) delete mode 100644 L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index a449b507bbd7b..492a7b709f2df 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -6,7 +6,7 @@ l1TrackVertexCollectionName = cms.string("dispVertices"), l1TrackEmulationVertexCollectionName = cms.string("dispVerticesEmulation"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json"), + model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/data/dispVertTaggerEmulationConiferShifted13p8.json"), runEmulation = cms.bool(True), cutSet = cms.PSet( chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this diff --git a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json deleted file mode 100644 index 41e065eaefc1c..0000000000000 --- a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json +++ /dev/null @@ -1,8182 +0,0 @@ -{ - "n_classes": 2, - "n_features": 20, - "n_trees": 50, - "max_depth": 4, - "init_predict": [ - 0 - ], - "norm": 1, - "trees": [ - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 19, - 1, - 16, - 1, - 13, - 1, - 12, - 0, - 0, - 0, - 18, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0625, - 2.53125, - 0.125, - 3.03125, - 0.75, - 2.5, - 0.28125, - 2.59375, - 5.0, - 1.46875, - 5.0, - 2.78125, - 2.0625, - 2.8125, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 70841.0, - 411997.156, - 3962.0, - 66440.5234, - 120811.969, - 32994.4609, - 672.0, - 1982.04688, - 58223.332, - 43094.8125, - 8327.51953, - 2421.63281, - 37907.1328, - 6143.125, - 90.0, - -0.448011726, - 0.145486429, - 2.45269179, - -0.345332354, - 0.836405098, - 3.05361819, - 0.885370374, - -0.381489754, - -0.450645268, - -0.167820334, - -0.248041913, - 1.55043864, - -0.448916435, - -0.188456371, - -0.454373926, - -0.449658006 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 14, - 1, - 18, - 1, - 15, - 2, - 18, - 0, - 19, - -2, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.09375, - 1.875, - 0.28125, - 3.59375, - 0.875, - 2.625, - 1.0, - 2.21875, - 0.875, - 1.03125, - 0.96875, - 2.375, - 0.46875, - 0.0, - 3.09375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 24829.0, - 67561.7109, - 1488.5, - 6978.76562, - 26534.6523, - 11089.9688, - 125.0, - 386.359375, - 6423.18896, - 650.617188, - 15226.584, - 773.25, - 15916.3086, - -0.434434086, - 683.8125, - -0.432457209, - -0.298128337, - -0.544871807, - 0.327800304, - -0.507408202, - -0.0813440382, - -0.544091344, - 0.509072363, - -0.43318969, - -0.340579271, - 0.541179657, - -0.325568527, - -0.43248859, - -0.380737513 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - -1, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - -1, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 13, - 0, - 16, - 1, - 15, - 1, - 19, - 1, - 1, - 0, - 18, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.09375, - 1.71875, - 0.28125, - 3.75, - 20.0, - 2.53125, - 0.6875, - 2.21875, - 0.875, - 1.25, - 0.625, - 2.34375, - 1.90625, - 3.125, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 20380.5, - 41288.9297, - 1918.5, - 4096.71094, - 13724.3945, - 11360.125, - 180.5, - 344.953125, - 2992.36328, - 11503.7852, - 587.53418, - 608.21875, - 13685.0508, - 1141.85938, - 14.0, - -0.420145035, - -0.27957359, - -0.516295552, - 0.194030389, - -0.194665983, - 0.405224532, - -0.700002789, - -0.394189775, - -0.420301765, - -0.328045517, - -0.356376201, - 0.398222089, - -0.418180764, - -0.308144659, - -0.422234923, - -0.4190467 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 18, - 0, - 18, - 1, - 13, - 1, - 15, - 1, - 19, - 16, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.09375, - 1.46875, - 0.34375, - 4.25, - 1.0, - 2.1875, - 1.0, - 1.8125, - 2.25, - 1.9375, - 0.875, - 2.96875, - 0.71875, - 1.5, - 2.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 17949.75, - 27018.9316, - 2394.0, - 2027.71875, - 11347.8301, - 10654.7188, - 161.0, - 148.429688, - 1754.70374, - 205.98584, - 9493.66602, - 604.304688, - 13365.3477, - 3.5, - 810.578125, - -0.413591683, - -0.327788919, - 0.25488922, - -0.370085388, - -0.43288517, - -0.609881759, - -0.413685173, - 0.277415574, - -0.411589533, - -0.299200505, - 0.314502329, - -0.357517421, - -0.412835658, - -0.414538711, - -0.41244778, - -0.340539843 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 16, - 0, - 15, - 1, - 18, - 0, - 12, - 3, - 18, - 1, - 0, - 16, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.15625, - 1.84375, - 0.40625, - 3.46875, - 0.875, - 2.625, - 1.0, - 3.21875, - 5.0, - -1.0625, - 0.875, - 1.875, - 1.96875, - 2.40625, - 2.3125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 17607.0, - 26537.9844, - 1459.25, - 9441.03516, - 14605.1592, - 6933.125, - 148.25, - 112.398438, - 7734.86084, - 1625.11572, - 11831.0889, - 378.164062, - 8340.1748, - 4.875, - 675.21875, - -0.406835854, - -0.236287341, - 0.451444119, - -0.418989986, - 0.16407074, - -0.4713974, - -0.534249127, - 0.387679577, - -0.403666228, - -0.285680354, - -0.348884463, - 0.378431141, - -0.407746792, - -0.409595072, - -0.407251656, - -0.330261976 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 18, - 1, - 14, - 18, - 0, - 1, - 13, - 2, - 1, - -2, - 16, - 0, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.1875, - 1.5625, - 1.0, - 2.28125, - 0.875, - 0.9375, - 3.0, - 1.5625, - 3.5, - -1.09375, - 1.34375, - 0.0, - 1.25, - 2.0625, - 2.78125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16016.25, - 20420.9707, - 1336.375, - 1543.87891, - 10937.5039, - 10.125, - 4833.64844, - 31.0507812, - 1511.56519, - 1189.91064, - 7518.57812, - -0.406208098, - 51.5, - 463.578125, - 9158.40918, - -0.405019432, - -0.360443741, - -0.0068812035, - -0.381553978, - 0.151972324, - -0.425386906, - -0.15519473, - 0.315228432, - -0.381460845, - -0.405095547, - -0.399954081, - -0.299818367, - -0.333101034, - 0.36812222 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - -1, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - -1, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 18, - 1, - 18, - 16, - 0, - 1, - 18, - 1, - 19, - 0, - -2, - 1, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.25, - 1.40625, - 1.0, - 2.21875, - 0.9375, - 1.53125, - 2.3125, - 1.3125, - 1.0, - 2.5, - 1.1875, - 1.59375, - 0.0, - 2.34375, - 0.28125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16050.375, - 16410.7988, - 1041.75, - 998.800781, - 9915.53223, - 14.6875, - 3379.89453, - 15.3085938, - 962.849854, - 79.9667969, - 8086.71191, - 54.5625, - -0.403832018, - 98.6640625, - 7611.05371, - -0.40380916, - -0.377623051, - -0.449828058, - -0.115888789, - -0.412116051, - -0.503777683, - 0.217621952, - -0.263435811, - -0.402956098, - -0.377776116, - -0.40219903, - -0.358837575, - 0.524562657, - -0.29802379 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 16, - 0, - 13, - 1, - 18, - 0, - 12, - 7, - 3, - 0, - 13, - 16, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.34375, - 1.84375, - 0.75, - 3.96875, - 5.0, - 2.34375, - 1.0, - 3.21875, - 5.0, - 0.40625, - -1.09375, - 2.65625, - 5.0, - 2.40625, - 2.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16796.125, - 14647.2988, - 702.6875, - 6128.38086, - 11326.5879, - 2850.14844, - 69.875, - 445.222656, - 4968.03906, - 8031.99414, - 3557.02075, - 210.357422, - 5365.91602, - 10.625, - 270.703125, - -0.390525281, - -0.18525821, - 0.350239247, - -0.408031315, - 0.0204735287, - 0.654172182, - 0.830534577, - -0.249967128, - -0.399214894, - -0.289545178, - 0.87169981, - -0.249927804, - -0.397470266, - -0.402518332, - -0.400876135, - -0.316781133 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 18, - 0, - 16, - 16, - 1, - 13, - 1, - 17, - 0, - 0, - 1, - 13, - 1, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 0.9375, - 1.5, - 0.0625, - 0.8125, - 2.84375, - 20.0, - 3.375, - 3.78125, - 1.78125, - 1.59375, - 2.03125, - 3.5, - 1.8125, - -1.65625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 17725.0625, - 55.28125, - 14335.7422, - 40.5625, - 225.976562, - 1272.25195, - 10087.9961, - 64.1638184, - 7.4375, - 907.427002, - 35.5976562, - 81.9726562, - 2086.20557, - 9210.95801, - 545.329102, - -0.421223223, - -0.583991408, - -0.396048427, - -0.401720434, - -0.375963092, - 0.142587379, - -0.401386797, - -0.375197172, - -0.39695406, - -0.326334417, - 0.0851807594, - -0.375321239, - -0.151006222, - 0.305227369, - 2.85383987, - -0.382712275 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 18, - 19, - 16, - 16, - 1, - 19, - 1, - 17, - 1, - 0, - 0, - 12, - 16, - 7, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 0.9375, - 1.3125, - 0.0625, - 1.25, - 1.875, - 2.3125, - 3.40625, - 3.78125, - 1.65625, - 3.0, - 3.1875, - 20.0, - 0.59375, - -6.28125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 17643.0, - 76.71875, - 10293.4043, - 13.578125, - 301.794922, - 8541.17871, - 757.748047, - 18.362793, - 12.046875, - 953.657715, - 29.953125, - 4056.35156, - 8164.22461, - 784.629883, - 186.357422, - -0.415046513, - -0.520147502, - -0.392225087, - -0.400819123, - -0.37618202, - 0.0634178296, - -0.399255484, - -0.358261615, - -0.351903588, - 0.0734527782, - 0.295646131, - -0.411385506, - -0.146266431, - -0.385444552, - -0.127901092, - -0.396681905 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 17, - 0, - 18, - 0, - 0, - 1, - 1, - 16, - 0, - 1, - 14, - 12, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 3.0, - 8.34375, - 1.75, - 0.90625, - 1.1875, - 4.09375, - 1.75, - 1.5625, - 0.125, - 1.5625, - 4.21875, - 0.875, - 2.25, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16993.2344, - 108.890625, - 9343.72363, - 430.728516, - 23.03125, - 7687.97998, - 4799.55957, - 37.6005859, - 1211.1709, - 4.671875, - 72.1601562, - 590.717773, - 6395.23096, - 865.089844, - 2350.3938, - -0.398229182, - -0.344467849, - -0.350802928, - 0.314242244, - -0.426716089, - -0.399954081, - -0.399577677, - -0.352666616, - -0.350449353, - -0.0145886634, - -0.272682577, - 0.382313132, - -0.44167763, - -0.288458318, - 0.266828597, - -0.176757962 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 18, - 0, - 17, - 16, - 1, - 12, - 1, - -2, - 0, - 0, - 16, - 15, - 17, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 0.9375, - 1.375, - 3.78125, - 1.25, - 2.5625, - 20.0, - 1.59375, - 0.0, - 1.59375, - 3.0, - 0.125, - 0.875, - 14.90625, - -1.375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 15997.2891, - 154.140625, - 5664.18066, - 25.1484375, - 517.90918, - 1017.47461, - 5398.69922, - 61.0107422, - -0.399354786, - 1184.95642, - 60.7080078, - 65.3154297, - 1039.86841, - 5901.2002, - 564.255371, - -0.393829942, - -0.329824179, - -0.354955822, - 0.246784076, - -0.396110684, - -0.313306272, - -0.319410771, - -0.396514028, - -0.411578387, - 0.00553159323, - 0.168763012, - -0.313758433, - 2.85442519, - -0.391227573 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 16, - 19, - 18, - 16, - 6, - 17, - 18, - 1, - 0, - 16, - 12, - 6, - 6, - 7, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 1.53125, - 1.71875, - 0.84375, - 2.40625, - -0.40625, - 10.09375, - 0.5625, - 1.59375, - 1.96875, - 4.625, - 5.0, - 0.5625, - 3.53125, - -6.28125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 14939.7812, - 219.71875, - 4936.44189, - 530.978516, - 24.1875, - 5049.08545, - 402.72168, - 19.7353516, - 1096.83325, - 91.4335938, - 3.578125, - 7520.57812, - 5762.75781, - 413.492188, - 295.697754, - -0.392656118, - -0.329631478, - -0.349552125, - 0.145821765, - -0.393090397, - -0.26878345, - -0.39300856, - -0.400184155, - 0.548510849, - -0.0555744842, - -0.332573622, - 0.225860402, - -0.25319925, - 0.300261736, - 0.0236244928, - -0.399566233 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 7, - 16, - 7, - 13, - 1, - 0, - 18, - 17, - 11, - 7, - 5, - 3, - 17, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.75, - 0.875, - 1.5, - -0.53125, - 20.0, - 2.125, - 2.03125, - 0.90625, - 6.8125, - 1.5, - 5.6875, - -3.25, - 1.15625, - 3.78125, - 1.09375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 14064.1875, - 4480.18115, - 416.351562, - 3637.89062, - 4746.80566, - 946.775391, - 61.8046875, - 1939.50891, - 1883.24023, - 3127.14502, - 407.50647, - 375.36084, - 1618.20923, - 4.32421875, - 290.254883, - -0.39726752, - 0.179394692, - -0.174944296, - -0.478584766, - 0.407868475, - -0.0778594986, - -0.454913288, - -0.127423927, - 4.12060118, - -0.376662493, - -0.133288577, - 1.6262728, - -0.379744858, - -0.398902893, - -0.373623252, - 0.0629038289 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 0, - 0, - 15, - 16, - 12, - 9, - 14, - 3, - 14, - 1, - 17, - 16, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.75, - 1.09375, - 2.15625, - 4.78125, - 0.875, - 1.25, - 5.0, - -13.5625, - 0.875, - 1.09375, - 0.875, - 1.84375, - 3.78125, - 1.53125, - 1.15625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 11713.6035, - 4041.55981, - 524.773438, - 1370.70459, - 6141.42529, - 25.2910156, - 1263.74756, - 194.726562, - 975.070496, - 1574.79419, - 2594.51025, - 53.8515625, - 7.82226562, - 920.928955, - 1116.89502, - 0.0805579647, - -0.365796506, - -0.418466389, - 0.241349101, - -0.375867099, - 0.326299757, - -0.15192461, - 0.241942883, - -0.393568188, - -0.277249217, - -0.370059699, - -0.397068024, - 0.497744948, - -0.217089936, - -0.35669893, - 0.976177216 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 19, - 13, - 18, - 16, - 6, - 7, - 17, - 0, - 0, - -2, - 2, - 6, - 7, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 0.53125, - 20.0, - 0.90625, - 2.65625, - -1.375, - 6.625, - 3.78125, - 1.4375, - 1.71875, - 0.0, - -1.03125, - 0.65625, - -6.15625, - -0.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 9249.39453, - 561.308594, - 2834.56641, - 1333.06226, - 55.140625, - 2933.72363, - 266.203857, - 92.1054688, - 1735.42419, - 143.039551, - -0.396564692, - 4181.93066, - 2910.27295, - 228.211426, - 600.054993, - -0.256457537, - -0.387914389, - -0.293291569, - 0.759545565, - -0.386991739, - -0.250832945, - 1.08700383, - 0.116422914, - -0.175413728, - 0.229805231, - -0.0836402029, - -0.404975146, - 1.06139123, - -0.218971282 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - -1, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - -1, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 0, - 1, - 12, - 17, - 12, - 1, - 8, - 15, - 2, - 1, - 19, - 3, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.1875, - 1.09375, - 2.03125, - 2.21875, - 20.0, - 6.71875, - 5.0, - 1.625, - -6.125, - 0.875, - 1.03125, - 1.71875, - 0.0625, - -1.3125, - 3.375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 7543.53906, - 3120.57935, - 278.225586, - 390.463867, - 3055.09424, - 20.7001953, - 579.844482, - 7.48291016, - 271.59967, - 2386.146, - 320.208984, - 54.7709961, - 4.34277344, - 554.220764, - 305.038574, - -0.394232929, - -0.333212584, - 0.146878615, - -0.23333995, - -0.184548452, - 0.151777029, - -0.359007776, - 0.487123013, - -0.391518176, - -0.27122435, - -0.318697393, - -0.400089234, - 1.20661342, - -0.0560794882, - -0.37693581, - -0.0447394662 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 19, - 1, - 16, - 10, - 19, - 0, - 19, - 7, - -2, - 6, - 12, - 7, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.9375, - 3.78125, - 2.3125, - 1.46875, - 4.1875, - 1.5, - 4.53125, - 1.90625, - 0.15625, - 3.53125, - 0.0, - -0.625, - 5.0, - -1.6875, - 7.78125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 5669.26758, - 159.574219, - 2681.40405, - 278.322998, - 18.9453125, - 2132.34497, - 151.274902, - 44.9029541, - 516.742737, - 46.6276855, - -0.39869675, - 2399.58887, - 903.405273, - 190.124634, - 35.4073486, - -0.386071742, - -0.215113088, - 0.933545411, - -0.176487684, - -0.38020578, - -0.238458157, - 0.26409182, - -0.0367491059, - 0.00405531097, - -0.283150941, - -0.0393774025, - -0.308978289, - -0.39519617, - -0.604956865 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - -1, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - -1, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 14, - 0, - 2, - 0, - 17, - 2, - 2, - 6, - 1, - 12, - 1, - 19, - 2, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.1875, - 0.875, - 2.03125, - 1.03125, - 3.09375, - 6.71875, - -1.15625, - -1.09375, - -1.9375, - 1.28125, - 5.0, - 1.71875, - 0.0625, - -1.1875, - 1.1875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 4202.92871, - 1816.83691, - 390.505859, - 1350.13428, - 1959.15845, - 41.1479492, - 553.316833, - 1329.67236, - 1397.55322, - 1978.54053, - 1500.38989, - 83.8044434, - 8.11132812, - 1281.13635, - 463.393433, - 0.231266379, - -0.400751591, - 1.1744262, - -0.0723480582, - -0.320065707, - 0.0327815786, - 0.298754901, - -0.0365616865, - -0.382106811, - -0.184484944, - -0.260905623, - -0.399999559, - 0.480300337, - 10.1269417, - -0.301869482, - 0.164746761 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 2, - 0, - 13, - 2, - 9, - 9, - 16, - 7, - 3, - 3, - 16, - 3, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.03125, - 1.0, - -1.15625, - 4.875, - 5.0, - -1.1875, - -18.375, - -13.5625, - 0.0625, - 0.5625, - 1.15625, - -1.4375, - 2.15625, - 2.0, - 4.625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 7232.33203, - 1684.29639, - 3849.52246, - 499.516968, - 1972.77002, - 4871.30273, - 119.507568, - 215.040283, - 444.081818, - 3649.44507, - 4509.41162, - 120.848267, - 709.716797, - 914.640442, - 69.6311035, - 0.222714543, - -0.366485566, - 0.212992355, - -0.268354505, - -0.0451384448, - 0.428432852, - -0.162038043, - 1.15970922, - 0.390695751, - -0.399449021, - -4.75134897, - -1.81086862, - -0.236465976, - 4.72165871, - -0.297850758, - -0.396671832 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 17, - 2, - 12, - 1, - 2, - 19, - 0, - 6, - 9, - 7, - 19, - 16, - 1, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.1875, - 10.125, - -1.15625, - 20.0, - 3.28125, - -1.1875, - 0.0625, - 1.03125, - -5.71875, - 8.875, - -1.40625, - 0.71875, - 1.3125, - 2.0625, - 1.15625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3491.44385, - 1528.97119, - 606.285156, - 1621.62878, - 2023.27039, - 608.586426, - 376.064941, - 1458.33887, - 397.032104, - 1308.55835, - 940.21814, - 333.143799, - 3597.09546, - 624.204895, - 202.646729, - -0.219502762, - 0.151822791, - 0.11304877, - -0.447663784, - -0.426736832, - 0.13535957, - 0.620300472, - -0.00290271849, - 0.459672421, - -0.378495783, - -10.573535, - -0.705711842, - -0.395660132, - 1.32972109, - -0.333556265, - -0.0970301032 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 15, - 18, - 3, - 3, - 17, - 16, - 0, - 1, - 2, - 0, - 3, - 14, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.8125, - 3.78125, - 0.75, - 0.21875, - -1.34375, - -1.8125, - 14.90625, - 3.6875, - 1.25, - 1.78125, - -1.15625, - 4.375, - 1.03125, - 0.75, - 3.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2440.03418, - 96.6142578, - 1666.1842, - 138.502319, - 21.9174805, - 167.660889, - 1464.96094, - 39.644104, - 177.033447, - 210.517853, - 31.3222656, - 245.078644, - 130.708374, - 1187.90674, - 858.651123, - -0.351364881, - 1.15041888, - -0.274211437, - 0.362277448, - -0.406041294, - 0.741048276, - -0.486145884, - -0.383996785, - -0.308134466, - 1.03890467, - -0.411645502, - -0.14575319, - -0.281111687, - 0.0933002457, - -0.437471598, - -0.0264888909 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 6, - 19, - 12, - 7, - 8, - 2, - 7, - 2, - 6, - 17, - 6, - 4, - 9, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.40625, - -0.3125, - 0.71875, - 5.0, - -0.3125, - -9.53125, - -1.15625, - 0.15625, - 1.15625, - 0.21875, - 3.59375, - 7.09375, - -2.9375, - -16.5625, - 1.125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1648.46167, - 1076.45264, - 86.5756836, - 1748.49255, - 3237.19141, - 175.203949, - 31.4282227, - 1411.23145, - 2182.34082, - 1294.87378, - 1225.09741, - 1397.71375, - 107.569305, - 20.8468628, - 19.7840576, - -0.27743879, - 0.331442297, - -0.112088479, - 0.925697625, - -0.271123886, - 0.228509292, - -0.108905844, - -0.471708387, - -0.169274062, - 7.98294687, - 1.03153443, - -0.298913568, - 0.247258693, - -0.471199274, - -0.399524778, - -0.300676197 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 13, - 17, - 19, - 0, - 1, - 8, - 16, - 3, - 3, - 0, - 19, - 3, - 19, - 8, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.40625, - 20.0, - 6.71875, - 0.84375, - 4.5625, - 1.125, - 4.9375, - 0.28125, - -0.9375, - -1.65625, - 4.59375, - 0.375, - -1.4375, - 0.0625, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 6001.10645, - 1200.99475, - 125.288086, - 1122.7085, - 355.98938, - 66.1751251, - 46.6210938, - 1465.66138, - 790.216064, - 186.993408, - 561.477966, - 13.2811584, - 248.458969, - 18.3808594, - 270.851196, - 0.00855484698, - 0.318294168, - 0.159224316, - -0.169856757, - 0.882637918, - -0.411316395, - 2.55825067, - -0.122979932, - -0.0921786055, - -0.407533377, - 1.66539598, - -0.143302426, - -0.498892069, - -0.425629824, - 3.12373734, - -0.317782551 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 15, - 17, - 3, - 6, - 14, - 8, - 8, - 3, - 2, - 6, - 9, - 3, - 6, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.40625, - 0.875, - 6.71875, - -1.09375, - -1.1875, - 0.625, - 4.9375, - -4.9375, - 1.03125, - 0.8125, - 0.3125, - -3.25, - 2.21875, - -6.90625, - 6.71875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 4158.90234, - 1038.57886, - 115.680664, - 1471.19556, - 1037.04883, - 68.6671066, - 46.206543, - 995.886169, - 846.909912, - 1522.31653, - 1400.76282, - 93.6244354, - 55.860672, - 22.2514648, - 161.15036, - 1.02149153, - -0.0131843314, - -0.387815177, - 0.0934289172, - 0.0634957105, - 0.56597513, - -0.141872644, - 0.153857216, - 3.42898154, - -0.271820396, - -0.211440682, - 0.839971006, - -0.193849787, - -0.421071976, - -0.367404968, - 0.471097529 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 14, - 6, - 2, - 9, - 16, - 18, - 1, - 2, - 2, - 8, - 16, - 3, - -2, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.40625, - 0.875, - 7.25, - -1.1875, - -10.34375, - 4.625, - 0.96875, - 3.28125, - 1.0625, - -0.9375, - -8.0, - 4.59375, - -1.5625, - 0.0, - 10.03125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2830.45532, - 1032.02087, - 112.958984, - 455.198975, - 1133.29468, - 117.108459, - 6.57202148, - 394.870636, - 582.887939, - 1100.06885, - 958.058289, - 205.503662, - 7.40551758, - -0.415847629, - 9.01321411, - -0.155433983, - 0.537796438, - -0.341646641, - 0.0742186531, - 0.924057901, - 0.136271477, - 0.294457763, - -0.0328609534, - -0.192594141, - 1.12621522, - -0.248495802, - -0.408119172, - -0.894676507, - -0.477804482 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - -1, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - -1, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 17, - 1, - 3, - 19, - 9, - 6, - 18, - -2, - 7, - 12, - 12, - 2, - 6, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.8125, - 6.71875, - 6.25, - 1.1875, - 1.625, - 0.21875, - -12.84375, - -2.96875, - 0.5625, - 0.0, - 3.9375, - 5.0, - 20.0, - -0.9375, - -3.1875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1938.57275, - 161.857422, - 930.894287, - 126.434692, - 106.443604, - 1308.88342, - 994.516724, - 10.6691589, - 190.81662, - -0.409619629, - 2411.66016, - 515.015869, - 593.252258, - 490.539429, - 992.344604, - -0.119690195, - -0.378328174, - -0.173089102, - 0.486529559, - -0.393012851, - 13.1781836, - 0.418931216, - -0.0316400044, - 0.0225794315, - -0.50727129, - 0.812323511, - 0.144295782, - 0.0782104582, - -0.184037611 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - -1, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - -1, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 3, - 10, - 17, - 0, - 17, - 13, - 19, - -2, - 18, - 18, - 7, - 9, - 1, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.8125, - 1.625, - 2.0, - 6.71875, - 2.03125, - 18.34375, - 5.0, - 0.84375, - 0.0, - -0.96875, - -0.96875, - -1.125, - -15.75, - 1.53125, - -0.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 88869.3906, - 17150.3906, - 720.208557, - 185.463379, - 13574.5312, - 766.718506, - 443.139465, - 120.603088, - -0.406611592, - 3662.57812, - 7942.34766, - 762.766357, - 112.766235, - 301.023315, - 344.621216, - -0.00591707928, - -0.33688736, - -4.55268812, - -1.42045832, - -9.47763157, - -3.03402638, - 0.240766034, - 0.00403669896, - 0.329031497, - -0.438354701, - -0.284844518, - 0.135361746, - 0.216663718, - -0.393250197 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 11, - 17, - 2, - 7, - 0, - 3, - -2, - 3, - 0, - 7, - 3, - 17, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.8125, - 3.9375, - 1.5, - 6.71875, - -1.15625, - 0.53125, - 3.3125, - 1.75, - 0.0, - -1.4375, - 2.03125, - -0.3125, - -0.8125, - 14.1875, - 1.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 19542.4609, - 1229.875, - 729.626465, - 237.399597, - 146.210938, - 738.686707, - 353.644592, - 151.166519, - -0.404453516, - 91.0703125, - 90.7792969, - 1536.58362, - 985.675964, - 280.147766, - 394.245087, - -0.113988295, - 1.03065884, - 1.83609641, - -0.565231085, - -0.686919808, - -0.558306515, - 0.146760255, - -0.225612476, - 0.420667231, - 0.0560993925, - -0.168234766, - -0.514448345, - -0.0538102388, - 0.623136699 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 19, - 0, - 7, - 1, - 1, - 6, - 18, - 0, - 16, - 16, - 13, - 0, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.8125, - 6.71875, - 2.3125, - 1.1875, - 4.03125, - 0.9375, - 2.625, - -2.0625, - -0.6875, - 4.5625, - 2.34375, - 0.03125, - 5.0, - 2.78125, - -0.9375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 11190.2979, - 775.177734, - 721.389099, - 133.74382, - 82.9101562, - 670.136841, - 212.26709, - 45.7415237, - 213.077286, - 54.434021, - 92.0234375, - 260.171509, - 675.269409, - 274.795349, - 183.321228, - 0.381480902, - -0.29599458, - -0.277672261, - 0.393717438, - -0.444567293, - -0.123514287, - -0.819256604, - -0.534821987, - 0.113992013, - -0.301890492, - 0.119896114, - -0.0447804034, - -0.312576503, - 0.0703490749, - -0.0376119018, - -0.491324008 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 15, - 17, - 11, - 19, - 3, - 3, - 0, - 4, - 7, - 9, - 4, - 9, - 3, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 0.75, - 3.78125, - 2.0, - 4.53125, - 1.28125, - 1.625, - 4.1875, - 2.96875, - 2.03125, - -16.5625, - -0.28125, - -0.4375, - 1.59375, - 0.0625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 7236.15234, - 635.306091, - 189.144531, - 82.7787476, - 566.272034, - 145.657349, - 145.634766, - 109.224579, - 17.7885742, - 586.638855, - 41.4238892, - 190.922546, - 163.811798, - 289.834167, - 11.1767578, - -0.316507339, - -0.0359206535, - -0.444423735, - 0.0622012019, - -0.0267386716, - 0.132024214, - 0.164393976, - -0.451977789, - 2.94688582, - -0.221429184, - -0.227678329, - 5.37940502, - -0.323602527, - 3.33773351, - -0.706528127, - -0.481379807 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 12, - 3, - 6, - 1, - 6, - 3, - 7, - 2, - 2, - 17, - 6, - 7, - 8, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 20.0, - 1.625, - 0.65625, - 3.1875, - -6.90625, - 2.21875, - 0.25, - -1.0625, - 1.09375, - 6.71875, - -7.40625, - -3.21875, - 4.9375, - 0.3125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 5028.18848, - 467.271912, - 138.779297, - 499.673309, - 440.860016, - 147.079865, - 4.25878906, - 1264.98071, - 613.720886, - 64.9914551, - 329.363525, - 562.023315, - 58.5035095, - 3.47558594, - 19.9443169, - -0.195273206, - 0.0602804124, - 0.66797632, - 0.0960448906, - -0.419709772, - -1.29462445, - -0.493020922, - 0.0872437656, - -0.377701372, - 4.27532721, - -0.0737977996, - -0.353896201, - -0.446365565, - -0.47468397, - 0.438518852, - -0.39602989 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 17, - 3, - 19, - 9, - 7, - 7, - 12, - 19, - 1, - 3, - 1, - -2, - 2, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 2.3125, - -1.4375, - 0.4375, - 8.21875, - 6.28125, - -2.65625, - 5.0, - 1.03125, - 3.96875, - -1.28125, - 1.78125, - 0.0, - 0.8125, - 1.46875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3582.54541, - 480.392395, - 103.597168, - 1300.75769, - 405.830627, - 649.17572, - 65.1347656, - 302.089966, - 186.886993, - 554.18457, - 1063.229, - 183.656281, - 7.03710556, - 133.727325, - 17.0200195, - 0.395182341, - -0.168472752, - -0.0470530502, - -0.352712601, - -0.121755257, - 0.0547064804, - 0.69905889, - -0.0018285258, - -0.358994335, - 1.15407252, - -0.385471612, - 0.380142391, - -0.356005639, - -0.43420434 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 7, - 4, - 13, - 13, - 17, - 17, - 5, - 19, - 17, - 0, - -2, - 9, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 9.625, - -2.65625, - 0.125, - 2.25, - 20.0, - 6.40625, - 9.90625, - 0.09375, - 1.0, - 13.40625, - 1.1875, - 0.0, - -8.28125, - -2.3125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3152.19678, - 507.13031, - 103.214111, - 466.302582, - 650.880066, - 72.127449, - 37.7783203, - 419.539368, - 659.101807, - 240.923737, - 209.153931, - 77.8130188, - -0.414843172, - 112.890945, - 25.1450195, - 0.00900296308, - -0.195832998, - 0.169031113, - -0.0352492891, - 0.323532015, - -0.368428737, - -0.528401315, - -0.0971262231, - -0.39021939, - 0.362522304, - 1.3052839, - -0.303150862, - -0.708802044, - -0.426068217 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 19, - 7, - 2, - 9, - 4, - 16, - 9, - 8, - 8, - 5, - 3, - 17, - 1, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 3.0625, - -2.65625, - 0.46875, - -6.375, - 0.03125, - 4.1875, - 0.25, - 7.1875, - -2.375, - 2.78125, - -1.5, - 3.78125, - 1.90625, - -2.3125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2122.83691, - 401.147095, - 88.0668945, - 386.352234, - 133.292053, - 63.2747307, - 42.6791992, - 709.382446, - 1517.40051, - 445.560883, - 186.336487, - 189.712234, - 107.630188, - 94.401947, - 9.33618164, - 0.0568554178, - -0.144797996, - 0.0173856802, - 0.641202271, - 0.707317173, - -0.443047047, - -0.372361392, - 0.344796747, - 3.02502751, - 0.0548939966, - 1.88007033, - -0.353695989, - -0.382377088, - 0.125452265, - -0.632527888, - -0.423455626 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 14, - 16, - 1, - 0, - 19, - 7, - 4, - 18, - 1, - 16, - 14, - 9, - 7, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 2.875, - 0.875, - 4.625, - 2.59375, - 2.15625, - 1.59375, - -5.6875, - -3.15625, - 1.0, - 2.28125, - 1.34375, - 0.875, - -16.5625, - -5.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1421.98474, - 385.464447, - 78.3961182, - 361.30069, - 375.410248, - 136.551254, - 20.9790039, - 88.5514526, - 590.589905, - 842.550354, - 578.10791, - 101.909164, - 23.2577209, - 218.52681, - -0.419554532, - 1.64139938, - -0.319513351, - 0.991675019, - -0.0780170634, - -0.22021535, - 0.0764866397, - 0.0536552072, - 0.632621467, - -0.358032048, - 0.204405114, - 0.419142574, - -0.436244696, - -0.384358555, - 3.92350888 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 15, - 18, - 3, - 6, - 7, - 9, - 5, - 3, - 7, - 7, - 3, - -2, - -2, - 8, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 3.78125, - 0.875, - 0.90625, - -0.9375, - -0.15625, - -5.6875, - 4.46875, - 3.1875, - 1.03125, - 0.125, - -0.21875, - -1.5625, - 0.0, - 0.0, - -9.34375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 951.998962, - 477.542938, - 47.6682129, - 390.418823, - 424.316772, - 4.6126709, - 85.655571, - 590.79657, - 520.57251, - 669.368164, - 1217.05408, - 17.1895084, - -0.414614022, - -0.413376719, - 55.943264, - 0.0962378606, - 5.77774763, - -0.344044685, - 0.069485575, - -0.308199406, - 0.108872056, - 0.0910845548, - -0.26928252, - 0.148773223, - -0.399018586, - 0.563855112, - -0.373743564 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - -1, - 25, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - -1, - 26, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 13, - 16, - 17, - 1, - 19, - 18, - 1, - 1, - 0, - 17, - 16, - 19, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 3.625, - 5.0, - 0.875, - 10.09375, - 7.3125, - 4.0, - -0.9375, - 1.09375, - 2.90625, - 1.90625, - 12.21875, - 0.09375, - 4.53125, - 3.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 638.891357, - 388.462219, - 96.4562988, - 602.024597, - 688.93866, - 97.2865906, - 4.87567139, - 406.812012, - 713.226562, - 651.805664, - 186.489807, - 7.45814514, - 141.917053, - 10.8305206, - -0.414287329, - -0.0890545845, - 0.157590732, - -0.353650779, - 0.0941278562, - -0.246607617, - 0.0382260978, - -0.510551631, - -0.138667151, - -0.670339167, - -0.421167672, - 0.208399162, - -0.313870281, - -0.895547569, - -0.460493296 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 10, - 7, - 0, - 12, - 17, - -2, - 8, - 13, - 8, - 16, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 4.625, - 2.0, - -5.6875, - 0.96875, - 2.25, - 6.71875, - 0.0, - 9.625, - 20.0, - -7.25, - 0.125, - 6.65625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 460.751465, - 368.301178, - 7.38790894, - 378.61615, - 355.365601, - 16.5162964, - -0.407828659, - 266.224152, - 320.342041, - 356.20459, - 274.25769, - 19.44907, - -0.389388055, - -0.253149092, - 0.366638064, - 0.0519038104, - -0.165597126, - 1.10573328, - 0.00641213823, - -0.485698372, - -0.138245344, - -0.335447967, - 0.666598737 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - -1, - 13, - 15, - 17, - 19, - 21, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - -1, - 14, - 16, - 18, - 20, - 22, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 11, - 16, - 6, - 17, - 0, - -2, - 2, - 12, - 13, - 8, - 0, - 7, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 3.0625, - 2.0, - 1.40625, - -2.71875, - 10.40625, - 6.125, - 0.0, - 1.59375, - 5.0, - 1.0, - 6.1875, - 4.125, - -7.3125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 323.469971, - 301.018463, - 135.025787, - 274.567535, - 273.305634, - 142.973236, - -0.426186711, - 539.600342, - 689.283752, - 108.049927, - 306.283173, - 286.906525, - 25.4546204, - 0.0963997915, - 1.1773442, - 0.0539789088, - -0.170301601, - 0.0318085067, - -0.276405185, - -0.0746685117, - 0.565019608, - -0.191624597, - 0.524991333, - -1.23239887, - -0.439955235 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - -1, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - -1, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 7, - 12, - 6, - 0, - 0, - 7, - 6, - 2, - 9, - 2, - 17, - 16, - 2, - 0, - 4, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -1.5, - 2.25, - -0.15625, - 2.125, - 8.59375, - 0.125, - 0.1875, - 1.6875, - -12.21875, - 0.9375, - 17.90625, - 0.03125, - -0.90625, - 6.625, - -0.5625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 299.232056, - 461.914856, - 476.477661, - 301.091248, - 384.938293, - 351.941406, - 487.020691, - 44.1887054, - 148.152832, - 345.980286, - 449.917938, - 82.1405334, - 422.712646, - 338.562256, - 436.127319, - -0.368496329, - 0.397862196, - 1.0661931, - 0.446504444, - 0.0352570005, - 0.751688182, - -0.614289343, - 1.26511109, - 0.177371413, - -0.339354575, - 0.223086119, - -0.00458455505, - -0.329105377, - 0.104869246, - -0.423693866, - 0.075001426 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 2, - 8, - 0, - 19, - -2, - 0, - 12, - 3, - 16, - 17, - 8, - 19, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -2.0, - 15.375, - 10.21875, - 0.6875, - 0.0, - 5.03125, - 1.5, - -1.84375, - 0.0625, - 14.34375, - 11.625, - 1.8125, - 0.28125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 265.62973, - 122.652252, - 266.588074, - 74.6975098, - 1.63045812, - 369.74707, - 447.593628, - 137.495682, - 25.4131165, - 423.020721, - 436.661072, - 112.845055, - 209.16394, - -0.438713998, - 0.0712173656, - -0.639288068, - -0.362418145, - 0.0122845778, - -0.221620202, - 0.190017894, - -0.517887056, - 0.268592894, - -0.575053155, - -0.0660050213, - -0.470252424 - ], - "children_left": [ - 1, - 3, - 5, - 7, - -1, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - -1, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 1, - 18, - 16, - 7, - 18, - 7, - 5, - 17, - 16, - 0, - 3, - -2, - -2, - 9, - 13, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 31.96875, - -0.03125, - 0.03125, - 4.65625, - 1.0, - 0.5, - -0.25, - 16.5, - 2.34375, - 1.0625, - 2.1875, - 0.0, - 0.0, - -12.5625, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 246.666245, - 225.368347, - 216.675751, - 68.1656647, - 325.915741, - 403.999115, - 28.3178253, - 62.6919441, - 3.6865387, - 508.810547, - 285.781067, - -0.329122841, - -7.44685984, - 9.22970581, - 33.7750626, - -0.208317906, - 0.38631627, - -0.53870976, - -0.402635098, - -0.270012736, - 0.305808514, - -0.0050985557, - -0.429981232, - -0.842507064, - -0.443783492, - 0.266736835, - -0.355429679 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - -1, - -1, - 23, - 25, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - -1, - -1, - 24, - 26, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 14, - 1, - 2, - 17, - 3, - 3, - 9, - 9, - 16, - 6, - 2, - 2, - 8, - 17, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - 2.59375, - 2.15625, - 9.46875, - -1.03125, - 0.90625, - 10.125, - -4.0625, - 0.03125, - 5.59375, - 0.5, - 0.9375, - 1.625, - 3.40625, - 1.09375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 243.23909, - 231.141113, - 198.979858, - 73.556427, - 279.312958, - 219.461929, - 113.031128, - 74.3663483, - 9.6234436, - 159.513931, - 412.608307, - 677.347778, - 896.711121, - 49.274826, - 123.982864, - 0.0313342027, - -0.283480674, - -0.715989292, - -0.420233339, - 0.386652768, - 3.27674174, - -0.262171865, - 0.196921825, - -0.039071463, - 0.285722554, - -0.143008247, - 0.334407955, - -0.193068221, - -0.526385128, - 0.187929243, - 2.98178196 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 15, - 1, - 19, - 0, - 16, - 9, - 2, - 17, - 12, - 9, - 8, - 8, - 17, - 12, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - 2.65625, - 0.375, - 1.96875, - 0.125, - -8.0, - -0.78125, - 6.71875, - 1.0, - 6.1875, - 12.21875, - -1.96875, - 1.09375, - 5.0, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 257.060181, - 212.160004, - 207.286728, - 184.677902, - 263.540161, - 443.342896, - 338.568878, - 36.4823456, - 270.944855, - 54.6171875, - 229.450211, - 279.255493, - 507.070374, - 417.219208, - 440.842224, - -0.125006706, - -0.405997425, - 0.504505396, - -0.0302081201, - -0.626221836, - -0.291677982, - -0.193058118, - 0.404843718, - -0.00807972904, - 0.606006742, - 0.328308284, - -0.017173171, - -0.025610894, - 0.388695568, - 0.0464725979, - -0.177603126 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 6, - 3, - 7, - 8, - 3, - 6, - 9, - 11, - 2, - 2, - 0, - 16, - 13, - 17, - 13, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.90625, - -0.625, - -0.28125, - 0.21875, - 0.5625, - 0.15625, - 9.6875, - 1.5, - -1.0625, - 1.09375, - 2.40625, - 0.03125, - 5.0, - 6.34375, - 2.25, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 239.005264, - 537.457642, - 446.318665, - 847.768005, - 641.232971, - 283.414459, - 347.30426, - 222.219849, - 207.460968, - 312.856567, - 368.701477, - 103.537445, - 287.503601, - 493.758118, - 196.9599, - 0.535096467, - 0.0974690542, - 0.222340226, - -0.35722658, - -0.159519374, - 0.304017276, - -0.0161727164, - 0.342731476, - 0.222644836, - -0.323766828, - 0.231121182, - -0.00942122191, - -0.0691743046, - -0.349344909, - 0.597287774, - 0.00602016039 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 1, - 0, - 19, - 12, - 0, - 8, - 1, - 0, - 3, - 7, - 16, - 3, - 16, - 1, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.9375, - 5.3125, - 2.3125, - 2.25, - 5.625, - -9.125, - 2.40625, - 1.875, - 2.21875, - 8.0625, - 0.21875, - 0.09375, - 0.96875, - 2.28125, - 1.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 190.559875, - 219.151276, - 171.231949, - 77.7329102, - 163.176697, - 228.42984, - 126.342682, - 92.6225357, - 15.0655212, - 597.024658, - 120.241753, - 418.628479, - 265.355865, - 143.502762, - 174.836975, - -0.375292867, - -0.0408141427, - -0.418980569, - 0.173193201, - 0.300540924, - 5.48714304, - 0.187671229, - -0.375581503, - 0.295013756, - -0.218665123, - -0.0184970722, - 0.196099415, - -0.0742086396, - 0.658206046, - -0.0440622233, - -0.506188333 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 7, - 13, - 4, - 7, - 0, - 5, - 13, - 4, - 3, - 9, - 16, - 5, - -2, - 8, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 7.90625, - 20.0, - -2.96875, - 2.03125, - 4.84375, - -0.34375, - 20.0, - -0.46875, - 1.0625, - 8.40625, - 0.0625, - -2.0625, - 0.0, - 9.8125, - 0.5625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 171.607925, - 223.459381, - 281.924957, - 288.546753, - 231.152939, - 151.178467, - 246.83847, - 297.307343, - 353.789032, - 139.15036, - 127.887207, - 35.0379791, - 3.16371584, - 133.945068, - 270.592163, - -0.158300266, - 0.0125163989, - 0.0526237302, - 0.386634171, - -0.42865178, - 0.0731715187, - 0.337070137, - -0.124347821, - 0.938442528, - -0.332457572, - -0.444956869, - -1.20611215, - -0.276697755, - 0.88302201 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 15, - 7, - 19, - 9, - 7, - 7, - 18, - 8, - 8, - 17, - 7, - 6, - 7, - 2, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - -3.875, - 0.75, - -18.375, - 2.34375, - 0.25, - 0.84375, - 1.78125, - -9.53125, - 5.40625, - 7.65625, - 0.125, - 6.40625, - 1.96875, - 0.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 181.03212, - 181.682144, - 182.258575, - 258.917694, - 173.613373, - 305.033691, - 174.333603, - 246.178436, - 115.737061, - 50.191803, - 156.899567, - 331.145325, - 347.072723, - 46.0486603, - 233.544479, - 6.50271702, - -0.236078978, - -0.431451321, - 0.27766633, - -0.175008804, - -0.351514965, - 0.037917275, - -0.456022114, - -0.191477492, - 0.0628354475, - 0.149908245, - -0.267893404, - -0.397763938, - 0.227087051, - -0.0796295032, - 0.151942253 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 9, - 7, - 14, - 16, - 6, - 1, - 0, - -2, - 0, - 3, - 0, - 6, - 5, - 1, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -19.375, - -2.0, - 0.75, - 0.03125, - -1.1875, - 4.375, - 0.84375, - 0.0, - 2.65625, - 1.65625, - 2.5, - -7.53125, - -0.71875, - 5.96875, - 4.53125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 407.748352, - 131.435974, - 153.779678, - 11.6784668, - 142.852448, - 95.8456573, - 133.523636, - 0.258150041, - 7.64318848, - 31.9286575, - 51.5647812, - 97.2173004, - 123.659096, - 211.85556, - 134.392487, - -0.467319101, - -0.608620524, - -0.482001632, - 0.343444914, - -0.377666384, - 0.472878933, - -1.49831486, - -0.261014134, - -0.225051761, - 0.280223578, - -0.351637125, - 0.362261236, - 0.0164080262, - -0.355325937 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - -1, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - -1, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ] - ], - "config": { - "output_dir": "/nfs/data41/rmccarth/conifer/jsonTest", - "project_name": "my_prj", - "backend": "xilinxhls", - "input_precision": "ap_fixed<13,8>", - "threshold_precision": "ap_fixed<13,8>", - "score_precision": "ap_fixed<13,8>", - "xilinx_part": "xcvu13p-flga2577-2-e", - "clock_period": "5", - "unroll": true, - "accelerator_config": null - }, - "metadata": [ - { - "version": "1.5", - "host": "torreys.colorado.edu", - "user": "rmccarth", - "time": 1730381683.43149 - } - ] -} \ No newline at end of file From 1fe5509292a8575774626999cc0efb8dc78353ef Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 18 Nov 2024 12:52:24 +0100 Subject: [PATCH 23/36] Removing track selection producer changes and removing displaced track quality --- .../plugins/L1TrackSelectionProducer.cc | 173 ++---------------- .../L1TTrackMatch/plugins/L1TrackUnpacker.h | 3 +- .../python/l1tTrackSelectionProducer_cfi.py | 43 +---- .../test/L1TrackObjectNtupleMaker.cc | 30 --- .../test/L1TrackObjectNtupleMaker_cfg.py | 28 +-- .../plugins/L1FPGATrackProducer.cc | 7 +- .../python/Producer_cfi.py | 2 +- .../l1tTTTracksFromTrackletEmulation_cfi.py | 4 +- .../test/L1TrackNtupleMaker.cc | 13 -- .../TrackTrigger/interface/L1TrackQuality.h | 2 +- .../python/TrackQualityParams_cfi.py | 22 --- L1Trigger/TrackTrigger/src/L1TrackQuality.cc | 3 - 12 files changed, 28 insertions(+), 302 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc index 1bf15bde7cc6e..3c71f53073875 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc @@ -180,39 +180,6 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { private: double nStubsMin_; }; - struct TTTrackNStubsMinEtaOverlapSelector { - TTTrackNStubsMinEtaOverlapSelector(double nStubsMinEtaOverlap) : nStubsMinEtaOverlap_(nStubsMinEtaOverlap) {} - TTTrackNStubsMinEtaOverlapSelector(const edm::ParameterSet& cfg) - : nStubsMinEtaOverlap_(cfg.template getParameter("nStubsMinEtaOverlap")) {} - bool operator()(const L1Track& t) const { - if ((std::abs(t.momentum().eta()) < 1.7) && (std::abs(t.momentum().eta()) > 1.1)) { - return (t.getStubRefs().size() >= nStubsMinEtaOverlap_); - } else { - return true; - } - } - - private: - double nStubsMinEtaOverlap_; - }; - struct TTTrackWordNStubsMinEtaOverlapSelector { - TTTrackWordNStubsMinEtaOverlapSelector(double nStubsMinEtaOverlap) : nStubsMinEtaOverlap_(nStubsMinEtaOverlap) {} - TTTrackWordNStubsMinEtaOverlapSelector(const edm::ParameterSet& cfg) - : nStubsMinEtaOverlap_(cfg.template getParameter("nStubsMinEtaOverlap")) {} - bool operator()(const L1Track& t) const { - TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); - ap_fixed etaEmulation; - etaEmulation.V = etaEmulationBits.range(); - if ((std::abs(etaEmulation.to_double()) < 1.7) && (std::abs(etaEmulation.to_double()) > 1.1)) { - return (t.getNStubs() >= nStubsMinEtaOverlap_); - } else { - return true; - } - } - - private: - double nStubsMinEtaOverlap_; - }; struct TTTrackNPSStubsMinSelector { TTTrackNPSStubsMinSelector(double nStubsMin, const TrackerTopology& tTopo) : nPSStubsMin_(nStubsMin), tTopo_(tTopo) {} @@ -255,58 +222,6 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { private: double promptMVAMin_; }; - struct TTTrackPromptMVAMinD0Min1Selector { - TTTrackPromptMVAMinD0Min1Selector(double promptMVAMinD0Min1) : promptMVAMinD0Min1_(promptMVAMinD0Min1) {} - TTTrackPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) - : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} - bool operator()(const L1Track& t) const { - if (std::abs(t.d0()) > 1.0) { - return (t.trkMVA1() > promptMVAMinD0Min1_); - } else { - return true; - } - } - - private: - double promptMVAMinD0Min1_; - }; - struct TTTrackWordPromptMVAMinD0Min1Selector { - TTTrackWordPromptMVAMinD0Min1Selector(double promptMVAMinD0Min1) : promptMVAMinD0Min1_(promptMVAMinD0Min1) {} - TTTrackWordPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) - : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} - bool operator()(const L1Track& t) const { - double floatD0 = t.undigitizeSignedValue( - t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); - if (std::abs(floatD0) > 1.0) { - return t.trkMVA1() >= promptMVAMinD0Min1_; - } else { - return true; - } - } //change when mva bins in word are set - - private: - double promptMVAMinD0Min1_; - }; - struct TTTrackDisplacedMVAMinSelector { - TTTrackDisplacedMVAMinSelector(double displacedMVAMin) : displacedMVAMin_(displacedMVAMin) {} - TTTrackDisplacedMVAMinSelector(const edm::ParameterSet& cfg) - : displacedMVAMin_(cfg.template getParameter("displacedMVAMin")) {} - bool operator()(const L1Track& t) const { return t.trkMVA2() >= displacedMVAMin_; } - - private: - double displacedMVAMin_; - }; - struct TTTrackWordDisplacedMVAMinSelector { - TTTrackWordDisplacedMVAMinSelector(double displacedMVAMin) : displacedMVAMin_(displacedMVAMin) {} - TTTrackWordDisplacedMVAMinSelector(const edm::ParameterSet& cfg) - : displacedMVAMin_(cfg.template getParameter("displacedMVAMin")) {} - bool operator()(const L1Track& t) const { - return t.trkMVA2() >= displacedMVAMin_; - } //change when mva bins in word are set - - private: - double displacedMVAMin_; - }; struct TTTrackBendChi2MaxSelector { TTTrackBendChi2MaxSelector(double bendChi2Max) : bendChi2Max_(bendChi2Max) {} TTTrackBendChi2MaxSelector(const edm::ParameterSet& cfg) @@ -452,53 +367,12 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { double reducedBendChi2MaxNstub5_; }; - struct TTTrackAbsD0MinEtaSelector { - TTTrackAbsD0MinEtaSelector(double absD0MinEtaMin0p95, double absD0MinEtaMax0p95) - : absD0MinEtaMin0p95_(absD0MinEtaMin0p95), absD0MinEtaMax0p95_(absD0MinEtaMax0p95) {} - TTTrackAbsD0MinEtaSelector(const edm::ParameterSet& cfg) - : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), - absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} - bool operator()(const L1Track& t) const { - return (((std::abs(t.d0()) > absD0MinEtaMin0p95_) && (std::abs(t.momentum().eta()) > 0.95)) || - ((std::abs(t.d0()) > absD0MinEtaMax0p95_) && (std::abs(t.momentum().eta()) <= 0.95))); - } - - private: - double absD0MinEtaMin0p95_; - double absD0MinEtaMax0p95_; - }; - struct TTTrackWordAbsD0MinEtaSelector { - TTTrackWordAbsD0MinEtaSelector(double absD0MinEtaMin0p95, double absD0MinEtaMax0p95) - : absD0MinEtaMin0p95_(absD0MinEtaMin0p95), absD0MinEtaMax0p95_(absD0MinEtaMax0p95) {} - TTTrackWordAbsD0MinEtaSelector(const edm::ParameterSet& cfg) - : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), - absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} - bool operator()(const L1Track& t) const { - double floatD0 = t.undigitizeSignedValue( - t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); - TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); - ap_fixed etaEmulation; - etaEmulation.V = etaEmulationBits.range(); - return (((std::abs(floatD0) > absD0MinEtaMin0p95_) && (std::abs(etaEmulation.to_double()) > 0.95)) || - ((std::abs(floatD0) > absD0MinEtaMax0p95_) && (std::abs(etaEmulation.to_double()) <= 0.95))); - } - - private: - double absD0MinEtaMin0p95_; - double absD0MinEtaMax0p95_; - }; - - typedef AndSelector + typedef AndSelector TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector + TTTrackWordNStubsMinSelector> TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector TTTrackBendChi2Chi2RZChi2RPhiMaxSelector; @@ -510,23 +384,16 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordChi2RPhiMaxNstubSelector, TTTrackWordBendChi2MaxNstubSelector> TTTrackWordChi2MaxNstubSelector; - typedef AndSelector - TTTrackMVAMinSelector; - typedef AndSelector - TTTrackWordMVAMinSelector; // ----------member data --------------------------- const edm::EDGetTokenT l1TracksToken_; edm::ESGetToken tTopoToken_; const std::string outputCollectionName_; const edm::ParameterSet cutSet_; - const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_, bendChi2Max_, - reducedChi2RZMax_, reducedChi2RPhiMax_; + const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, - reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_, absD0MinEtaMin0p95_, absD0MinEtaMax0p95_; - const int nStubsMin_, nStubsMinEtaOverlap_, nPSStubsMin_; + reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_; + const int nStubsMin_, nPSStubsMin_; bool processSimulatedTracks_, processEmulatedTracks_; int debug_; }; @@ -544,8 +411,6 @@ L1TrackSelectionProducer::L1TrackSelectionProducer(const edm::ParameterSet& iCon absEtaMax_(cutSet_.getParameter("absEtaMax")), absZ0Max_(cutSet_.getParameter("absZ0Max")), promptMVAMin_(cutSet_.getParameter("promptMVAMin")), - promptMVAMinD0Min1_(cutSet_.getParameter("promptMVAMinD0Min1")), - displacedMVAMin_(cutSet_.getParameter("displacedMVAMin")), bendChi2Max_(cutSet_.getParameter("reducedBendChi2Max")), reducedChi2RZMax_(cutSet_.getParameter("reducedChi2RZMax")), reducedChi2RPhiMax_(cutSet_.getParameter("reducedChi2RPhiMax")), @@ -555,10 +420,7 @@ L1TrackSelectionProducer::L1TrackSelectionProducer(const edm::ParameterSet& iCon reducedChi2RPhiMaxNstub5_(cutSet_.getParameter("reducedChi2RPhiMaxNstub5")), reducedBendChi2MaxNstub4_(cutSet_.getParameter("reducedBendChi2MaxNstub4")), reducedBendChi2MaxNstub5_(cutSet_.getParameter("reducedBendChi2MaxNstub5")), - absD0MinEtaMin0p95_(cutSet_.getParameter("absD0MinEtaMin0p95")), - absD0MinEtaMax0p95_(cutSet_.getParameter("absD0MinEtaMax0p95")), nStubsMin_(cutSet_.getParameter("nStubsMin")), - nStubsMinEtaOverlap_(cutSet_.getParameter("nStubsMinEtaOverlap")), nPSStubsMin_(cutSet_.getParameter("nPSStubsMin")), processSimulatedTracks_(iConfig.getParameter("processSimulatedTracks")), processEmulatedTracks_(iConfig.getParameter("processEmulatedTracks")), @@ -676,35 +538,31 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const vTTTrackEmulationOutput->reserve(nOutputApproximate); } - TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector kinSel(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); - TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu( - ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); + TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector kinSel(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_); + TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_); TTTrackBendChi2Chi2RZChi2RPhiMaxSelector chi2Sel(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector chi2SelEmu(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackNPSStubsMinSelector nPSStubsSel(nPSStubsMin_, tTopo); - TTTrackMVAMinSelector mvaSel(promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_); - TTTrackWordMVAMinSelector mvaSelEmu(promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_); + TTTrackPromptMVAMinSelector mvaSel(promptMVAMin_); + TTTrackWordPromptMVAMinSelector mvaSelEmu(promptMVAMin_); TTTrackChi2MaxNstubSelector chi2NstubSel({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); TTTrackWordChi2MaxNstubSelector chi2NstubSelEmu({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); - TTTrackAbsD0MinEtaSelector d0Sel(absD0MinEtaMin0p95_, absD0MinEtaMax0p95_); - TTTrackWordAbsD0MinEtaSelector d0SelEmu(absD0MinEtaMin0p95_, absD0MinEtaMax0p95_); for (size_t i = 0; i < nOutputApproximate; i++) { const auto& track = l1TracksHandle->at(i); // Select tracks based on the floating point TTTrack if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && - d0Sel(track) && chi2NstubSel(track)) { + chi2NstubSel(track)) { vTTTrackOutput->push_back(TTTrackRef(l1TracksHandle, i)); } // Select tracks based on the bitwise accurate TTTrack_TrackWord - if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && d0SelEmu(track) && - chi2NstubSelEmu(track)) { + if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && chi2NstubSelEmu(track)) { vTTTrackEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i)); } } @@ -734,15 +592,10 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& descCutSet.add("absEtaMax", 2.4)->setComment("absolute value of eta must be less than this value"); descCutSet.add("absZ0Max", 15.0)->setComment("z0 must be less than this value, [cm]"); descCutSet.add("nStubsMin", 4)->setComment("number of stubs must be greater than or equal to this value"); - descCutSet.add("nStubsMinEtaOverlap", 4) - ->setComment("number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7"); descCutSet.add("nPSStubsMin", 0) ->setComment("number of stubs in the PS Modules must be greater than or equal to this value"); descCutSet.add("promptMVAMin", -1.0)->setComment("MVA must be greater than this value"); - descCutSet.add("promptMVAMinD0Min1", -1.0) - ->setComment("MVA for tracks with |d0|>1cm must be greater than this value"); - descCutSet.add("displacedMVAMin", -1.0)->setComment("Displaced MVA must be greater than this value"); descCutSet.add("reducedBendChi2Max", 2.25)->setComment("bend chi2 must be less than this value"); descCutSet.add("reducedChi2RZMax", 5.0)->setComment("chi2rz/dof must be less than this value"); descCutSet.add("reducedChi2RPhiMax", 20.0)->setComment("chi2rphi/dof must be less than this value"); @@ -758,10 +611,6 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& ->setComment("bend chi2 must be less than this value in nstub==4"); descCutSet.add("reducedBendChi2MaxNstub5", 999.9) ->setComment("bend chi2 must be less than this value in nstub>4"); - descCutSet.add("absD0MinEtaMin0p95", -1.0) - ->setComment("absolute value of d0 must be greater than this value for tracks with |eta|>0.95"); - descCutSet.add("absD0MinEtaMax0p95", -1.0) - ->setComment("absolute value of d0 must be greater than this value for tracks with |eta|<=0.95"); desc.add("cutSet", descCutSet); } diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h b/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h index 7f17e63561aae..0939320fad9a5 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h @@ -16,12 +16,11 @@ namespace l1trackunpacker { const unsigned int ETA_INTPART_BITS{3}; const unsigned int kExtraGlobalPhiBit{4}; - typedef ap_ufixed pt_intern; + typedef ap_ufixed pt_intern; typedef ap_fixed glbeta_intern; typedef ap_int glbphi_intern; typedef ap_int z0_intern; // 40cm / 0.1 typedef ap_int d0_intern; - typedef ap_int rinv_intern; inline const unsigned int DoubleToBit(double value, unsigned int maxBits, double step) { unsigned int digitized_value = std::floor(std::abs(value) / step); diff --git a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py index 3f3bc4417567c..d78ab75961480 100644 --- a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py @@ -8,12 +8,9 @@ absEtaMax = cms.double(2.4), # absolute value of eta must be less than this value absZ0Max = cms.double(15.0), # z0 must be less than this value, [cm] nStubsMin = cms.int32(4), # number of stubs must be greater than or equal to this value - nStubsMinEtaOverlap = cms.int32(4), # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 nPSStubsMin = cms.int32(0), # the number of stubs in the PS Modules must be greater than or equal to this value promptMVAMin = cms.double(-1.0), # MVA must be greater than this value - promptMVAMinD0Min1 = cms.double(-1.0), # MVA for tracks with |d0|>1cm must be greater than this value - displacedMVAMin = cms.double(-1.0), # Displaced MVA must be greater than this value reducedBendChi2Max = cms.double(2.25), # bend chi2 must be less than this value reducedChi2RZMax = cms.double(5.0), # chi2rz/dof must be less than this value reducedChi2RPhiMax = cms.double(20.0), # chi2rphi/dof must be less than this value @@ -23,8 +20,6 @@ reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value reducedBendChi2MaxNstub4 = cms.double(999.9), # bend chi2 with nstub==4 must be less than this value reducedBendChi2MaxNstub5 = cms.double(999.9), # bend chi2 with nstub>4 must be less than this value - absD0MinEtaMin0p95 = cms.double(-1.0), #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 - absD0MinEtaMax0p95 = cms.double(-1.0), #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 ), processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values processEmulatedTracks = cms.bool(True), # return selected tracks after cutting on the bitwise emulated values @@ -39,12 +34,9 @@ absEtaMax = 2.4, # absolute value of eta must be less than this value absZ0Max = 15.0, # z0 must be less than this value, [cm] nStubsMin = 4, # number of stubs must be greater than or equal to this value - nStubsMinEtaOverlap = 4, # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 nPSStubsMin = 0, # the number of stubs in the PS Modules must be greater than or equal to this value - promptMVAMin = -1.0, # MVA must be greater than this value - promptMVAMinD0Min1 = -1.0, # MVA for tracks with |d0|>1cm must be greater than this value - displacedMVAMin = -1.0, # Displaced MVA must be greater than this value + promptMVAMin = -1.0, # MVA must be greater than this value reducedBendChi2Max = 2.4, # bend chi2 must be less than this value reducedChi2RZMax = 10.0, # chi2rz/dof must be less than this value reducedChi2RPhiMax = 40.0, # chi2rphi/dof must be less than this value @@ -53,9 +45,7 @@ reducedChi2RPhiMaxNstub4 = cms.double(999.9), # chi2rphi/dof with nstub==4 must be less than this value reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value reducedBendChi2MaxNstub4 = 999.9, # bend chi2 with nstub==4 must be less than this value - reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value - absD0MinEtaMin0p95 = -1.0, #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 - absD0MinEtaMax0p95 = -1.0, #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 + reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value ), processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values processEmulatedTracks = cms.bool(True), # return selected tracks after cutting on the bitwise emulated values @@ -107,31 +97,4 @@ l1tTrackSelectionProducerExtendedForEtMiss = l1tTrackSelectionProducerExtended.clone() -l1tTrackSelectionProducerExtendedForDispVert = l1tTrackSelectionProducerExtended.clone( - l1TracksInputTag = ("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), - outputCollectionName = "Level1TTTracksSelected", - cutSet = dict( - ptMin = 3.0, # pt must be greater than this value, [GeV] - absEtaMax = 2.4, # absolute value of eta must be less than this value - absZ0Max = 999.9, # z0 must be less than this value, [cm] - nStubsMin = 0, # number of stubs must be greater than or equal to this value - nStubsMinEtaOverlap = 5, # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 - nPSStubsMin = 0, # the number of stubs in the PS Modules must be greater than or equal to this value - promptMVAMin = 0.2, # MVA must be greater than this value - promptMVAMinD0Min1 = 0.5, # MVA for tracks with |d0|>1cm must be greater than this value - displacedMVAMin = 0.2, # Displaced MVA must be greater than this value - reducedBendChi2Max = 999.9, # bend chi2 must be less than this value - reducedChi2RZMax = 3.0, # chi2rz/dof must be less than this value - reducedChi2RPhiMax = 999.9, # chi2rphi/dof must be less than this value - reducedChi2RZMaxNstub4 = cms.double(999.9), # chi2rz/dof with nstub==4 must be less than this value - reducedChi2RZMaxNstub5 = cms.double(999.9), # chi2rz/dof with nstub>4 must be less than this value - reducedChi2RPhiMaxNstub4 = cms.double(999.9), # chi2rphi/dof with nstub==4 must be less than this value - reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value - reducedBendChi2MaxNstub4 = 999.9, # bend chi2 with nstub==4 must be less than this value - reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value - absD0MinEtaMin0p95 = 0.08, #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 - absD0MinEtaMax0p95 = 0.06, #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 - ), - processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values - processEmulatedTracks = cms.bool(False), # return selected tracks after cutting on the bitwise emulated values - ) + diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index 43606dbe60a5d..a0a5181906491 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -383,7 +383,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trk_chi2rz; std::vector* m_trk_bendchi2; std::vector* m_trk_MVA1; - std::vector* m_trk_MVA2; std::vector* m_trk_nstub; std::vector* m_trk_lhits; std::vector* m_trk_dhits; @@ -433,7 +432,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_chi2rz; std::vector* m_trkExt_bendchi2; std::vector* m_trkExt_MVA; - std::vector* m_trkExt_MVA2; std::vector* m_trkExt_nstub; std::vector* m_trkExt_lhits; std::vector* m_trkExt_dhits; @@ -530,7 +528,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrk_chi2rz; std::vector* m_matchtrk_bendchi2; std::vector* m_matchtrk_MVA1; - std::vector* m_matchtrk_MVA2; std::vector* m_matchtrk_nstub; std::vector* m_matchtrk_lhits; std::vector* m_matchtrk_dhits; @@ -550,7 +547,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExt_chi2rz; std::vector* m_matchtrkExt_bendchi2; std::vector* m_matchtrkExt_MVA; - std::vector* m_matchtrkExt_MVA2; std::vector* m_matchtrkExt_nstub; std::vector* m_matchtrkExt_lhits; std::vector* m_matchtrkExt_dhits; @@ -918,7 +914,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trk_chi2rz; delete m_trk_bendchi2; delete m_trk_MVA1; - delete m_trk_MVA2; delete m_trk_nstub; delete m_trk_lhits; delete m_trk_dhits; @@ -967,7 +962,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_chi2rz; delete m_trkExt_bendchi2; delete m_trkExt_MVA; - delete m_trkExt_MVA2; delete m_trkExt_nstub; delete m_trkExt_lhits; delete m_trkExt_dhits; @@ -1103,7 +1097,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrk_chi2rz; delete m_matchtrk_bendchi2; delete m_matchtrk_MVA1; - delete m_matchtrk_MVA2; delete m_matchtrk_nstub; delete m_matchtrk_dhits; delete m_matchtrk_lhits; @@ -1122,7 +1115,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrkExt_chi2rz; delete m_matchtrkExt_bendchi2; delete m_matchtrkExt_MVA; - delete m_matchtrkExt_MVA2; delete m_matchtrkExt_nstub; delete m_matchtrkExt_dhits; delete m_matchtrkExt_lhits; @@ -1396,7 +1388,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trk_chi2rz = new std::vector; m_trk_bendchi2 = new std::vector; m_trk_MVA1 = new std::vector; - m_trk_MVA2 = new std::vector; m_trk_nstub = new std::vector; m_trk_lhits = new std::vector; m_trk_dhits = new std::vector; @@ -1445,7 +1436,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_chi2rz = new std::vector; m_trkExt_bendchi2 = new std::vector; m_trkExt_MVA = new std::vector; - m_trkExt_MVA2 = new std::vector; m_trkExt_nstub = new std::vector; m_trkExt_lhits = new std::vector; m_trkExt_dhits = new std::vector; @@ -1581,7 +1571,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrk_chi2rz = new std::vector; m_matchtrk_bendchi2 = new std::vector; m_matchtrk_MVA1 = new std::vector; - m_matchtrk_MVA2 = new std::vector; m_matchtrk_nstub = new std::vector; m_matchtrk_dhits = new std::vector; m_matchtrk_lhits = new std::vector; @@ -1600,7 +1589,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrkExt_chi2rz = new std::vector; m_matchtrkExt_bendchi2 = new std::vector; m_matchtrkExt_MVA = new std::vector; - m_matchtrkExt_MVA2 = new std::vector; m_matchtrkExt_nstub = new std::vector; m_matchtrkExt_dhits = new std::vector; m_matchtrkExt_lhits = new std::vector; @@ -1754,7 +1742,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trk_chi2rz", &m_trk_chi2rz); eventTree->Branch("trk_bendchi2", &m_trk_bendchi2); eventTree->Branch("trk_MVA1", &m_trk_MVA1); - eventTree->Branch("trk_MVA2", &m_trk_MVA2); eventTree->Branch("trk_nstub", &m_trk_nstub); eventTree->Branch("trk_lhits", &m_trk_lhits); eventTree->Branch("trk_dhits", &m_trk_dhits); @@ -1807,7 +1794,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_chi2rz", &m_trkExt_chi2rz); eventTree->Branch("trkExt_bendchi2", &m_trkExt_bendchi2); eventTree->Branch("trkExt_MVA", &m_trkExt_MVA); - eventTree->Branch("trkExt_MVA2", &m_trkExt_MVA2); eventTree->Branch("trkExt_nstub", &m_trkExt_nstub); eventTree->Branch("trkExt_lhits", &m_trkExt_lhits); eventTree->Branch("trkExt_dhits", &m_trkExt_dhits); @@ -1904,7 +1890,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrk_chi2rz", &m_matchtrk_chi2rz); eventTree->Branch("matchtrk_bendchi2", &m_matchtrk_bendchi2); eventTree->Branch("matchtrk_MVA1", &m_matchtrk_MVA1); - eventTree->Branch("matchtrk_MVA2", &m_matchtrk_MVA2); eventTree->Branch("matchtrk_nstub", &m_matchtrk_nstub); eventTree->Branch("matchtrk_lhits", &m_matchtrk_lhits); eventTree->Branch("matchtrk_dhits", &m_matchtrk_dhits); @@ -1925,7 +1910,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrkExt_chi2rz", &m_matchtrkExt_chi2rz); eventTree->Branch("matchtrkExt_bendchi2", &m_matchtrkExt_bendchi2); eventTree->Branch("matchtrkExt_MVA", &m_matchtrkExt_MVA); - eventTree->Branch("matchtrkExt_MVA2", &m_matchtrkExt_MVA2); eventTree->Branch("matchtrkExt_nstub", &m_matchtrkExt_nstub); eventTree->Branch("matchtrkExt_lhits", &m_matchtrkExt_lhits); eventTree->Branch("matchtrkExt_dhits", &m_matchtrkExt_dhits); @@ -2161,7 +2145,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_chi2rz->clear(); m_trk_bendchi2->clear(); m_trk_MVA1->clear(); - m_trk_MVA2->clear(); m_trk_nstub->clear(); m_trk_lhits->clear(); m_trk_dhits->clear(); @@ -2211,7 +2194,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_chi2rz->clear(); m_trkExt_bendchi2->clear(); m_trkExt_MVA->clear(); - m_trkExt_MVA2->clear(); m_trkExt_nstub->clear(); m_trkExt_lhits->clear(); m_trkExt_dhits->clear(); @@ -2348,7 +2330,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrk_chi2rz->clear(); m_matchtrk_bendchi2->clear(); m_matchtrk_MVA1->clear(); - m_matchtrk_MVA2->clear(); m_matchtrk_nstub->clear(); m_matchtrk_lhits->clear(); m_matchtrk_dhits->clear(); @@ -2369,7 +2350,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_chi2rz->clear(); m_matchtrkExt_bendchi2->clear(); m_matchtrkExt_MVA->clear(); - m_matchtrkExt_MVA2->clear(); m_matchtrkExt_nstub->clear(); m_matchtrkExt_lhits->clear(); m_matchtrkExt_dhits->clear(); @@ -2906,7 +2886,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trk_chi2rz = iterL1Track->chi2ZRed(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); - float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector>, TTStub>> stubRefs = iterL1Track->getStubRefs(); @@ -2995,7 +2974,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_chi2rz->push_back(tmp_trk_chi2rz); m_trk_bendchi2->push_back(tmp_trk_bendchi2); m_trk_MVA1->push_back(tmp_trk_MVA1); - m_trk_MVA2->push_back(tmp_trk_MVA2); m_trk_nstub->push_back(tmp_trk_nstub); m_trk_dhits->push_back(tmp_trk_dhits); m_trk_lhits->push_back(tmp_trk_lhits); @@ -3133,7 +3111,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trk_chi2rz = iterL1Track->chi2ZRed(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); - float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector>, TTStub>> stubRefs = iterL1Track->getStubRefs(); @@ -3243,7 +3220,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_chi2rz->push_back(tmp_trk_chi2rz); m_trkExt_bendchi2->push_back(tmp_trk_bendchi2); m_trkExt_MVA->push_back(tmp_trk_MVA1); - m_trkExt_MVA2->push_back(tmp_trk_MVA2); m_trkExt_nstub->push_back(tmp_trk_nstub); m_trkExt_dhits->push_back(tmp_trk_dhits); m_trkExt_lhits->push_back(tmp_trk_lhits); @@ -3669,7 +3645,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrk_chi2rz = -999; float tmp_matchtrk_bendchi2 = -999; float tmp_matchtrk_MVA1 = -999; - float tmp_matchtrk_MVA2 = -999; int tmp_matchtrk_nstub = -999; int tmp_matchtrk_dhits = -999; int tmp_matchtrk_lhits = -999; @@ -3700,7 +3675,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); - tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -3740,7 +3714,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrk_chi2rz->push_back(tmp_matchtrk_chi2rz); m_matchtrk_bendchi2->push_back(tmp_matchtrk_bendchi2); m_matchtrk_MVA1->push_back(tmp_matchtrk_MVA1); - m_matchtrk_MVA2->push_back(tmp_matchtrk_MVA2); m_matchtrk_nstub->push_back(tmp_matchtrk_nstub); m_matchtrk_dhits->push_back(tmp_matchtrk_dhits); m_matchtrk_lhits->push_back(tmp_matchtrk_lhits); @@ -3845,7 +3818,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrkExt_chi2rz = -999; float tmp_matchtrkExt_bendchi2 = -999; float tmp_matchtrkExt_MVA = -999; - float tmp_matchtrkExt_MVA2 = -999; int tmp_matchtrkExt_nstub = -999; int tmp_matchtrkExt_dhits = -999; int tmp_matchtrkExt_lhits = -999; @@ -3922,7 +3894,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_matchtrkExt_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrkExt_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrkExt_MVA = matchedTracks.at(i_track)->trkMVA1(); - tmp_matchtrkExt_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrkExt_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrkExt_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrkExt_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -3961,7 +3932,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_chi2rz->push_back(tmp_matchtrkExt_chi2rz); m_matchtrkExt_bendchi2->push_back(tmp_matchtrkExt_bendchi2); m_matchtrkExt_MVA->push_back(tmp_matchtrkExt_MVA); - m_matchtrkExt_MVA2->push_back(tmp_matchtrkExt_MVA2); m_matchtrkExt_nstub->push_back(tmp_matchtrkExt_nstub); m_matchtrkExt_dhits->push_back(tmp_matchtrkExt_dhits); m_matchtrkExt_lhits->push_back(tmp_matchtrkExt_lhits); diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py index 572a5bcd3c2c0..33ef24d49a8e1 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py @@ -156,17 +156,10 @@ elif (L1TRKALGO == 'HYBRID_DISPLACED'): process.TTTracksEmu = cms.Path(process.L1TExtendedHybridTracks) process.TTTracksEmuWithTruth = cms.Path(process.L1TExtendedHybridTracksWithAssociators) - if(runDispVert): - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * - process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerExtendedForEtMiss * - process.l1tTrackSelectionProducerExtendedForDispVert) - else: - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * - process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerExtendedForEtMiss) + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * + process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerExtendedForEtMiss) process.pL1TrackVertexAssociation = cms.Path(process.l1tTrackVertexAssociationProducerExtended * process.l1tTrackVertexAssociationProducerExtendedForJets * process.l1tTrackVertexAssociationProducerExtendedForEtMiss) @@ -185,15 +178,9 @@ elif (L1TRKALGO == 'HYBRID_PROMPTANDDISP'): process.TTTracksEmu = cms.Path(process.L1TPromptExtendedHybridTracks) process.TTTracksEmuWithTruth = cms.Path(process.L1TPromptExtendedHybridTracksWithAssociators) - if(runDispVert): - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss * - process.l1tTrackSelectionProducerExtendedForDispVert) - else: - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss) + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss) process.pL1TrackVertexAssociation = cms.Path(VertexAssociator * process.l1tTrackVertexAssociationProducerExtended * process.l1tTrackVertexAssociationProducerForJets * process.l1tTrackVertexAssociationProducerExtendedForJets * process.l1tTrackVertexAssociationProducerForEtMiss * process.l1tTrackVertexAssociationProducerExtendedForEtMiss) @@ -299,6 +286,7 @@ RecoVertexInputTag=cms.InputTag("l1tVertexFinder", "L1Vertices"), RecoVertexEmuInputTag=cms.InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation"), DisplacedVertexInputTag = cms.InputTag("DisplacedVertexProducer","dispVertices"), + DisplacedVertexEmulationInputTag = cms.InputTag("DisplacedVertexProducer","dispVerticesEmulation"), runDispVert = cms.bool(runDispVert) ) diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index 620ba2fe8242f..6bc9104b41764 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -182,7 +182,6 @@ class L1FPGATrackProducer : public edm::one::EDProducer { bool trackQuality_; std::unique_ptr trackQualityModel_; - std::unique_ptr trackQualityDispModel_; std::map> dtclayerdisk; @@ -328,7 +327,6 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) trackQuality_ = iConfig.getParameter("TrackQuality"); if (trackQuality_) { trackQualityModel_ = std::make_unique(iConfig.getParameter("TrackQualityPSet")); - trackQualityDispModel_ = std::make_unique(iConfig.getParameter("TrackQualityDispPSet")); } if (settings_.storeTrackBuilderOutput() && (settings_.doMultipleMatches() || !settings_.removalType().empty())) { cms::Exception exception("ConfigurationNotSupported."); @@ -750,10 +748,9 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe aTrack.setTrackWordBits(); if (trackQuality_) { - aTrack.settrkMVA1(trackQualityModel_->getL1TrackQuality(aTrack)); - if(extended_) - aTrack.settrkMVA2(trackQualityDispModel_->getL1TrackQuality(aTrack)); + trackQualityModel_->setL1TrackQuality(aTrack); } + // hph::HitPatternHelper hph(setupHPH_, tmp_hit, tmp_tanL, tmp_z0); // if (trackQuality_) { // trackQualityModel_->setBonusFeatures(hph.bonusFeatures()); diff --git a/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py b/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py index c0e1ab3d7dc23..3ca33e23bd4e0 100644 --- a/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/Producer_cfi.py @@ -21,6 +21,6 @@ PrintKFDebug = cms.bool ( False ), # print end job internal unused MSB UseTTStubResiduals = cms.bool ( False ), # stub residuals are recalculated from seed parameter and TTStub position TrackQualityPSet = cms.PSet ( TrackQualityParams ), - TrackQualityDispPSet = cms.PSet ( TrackQualityDispParams ), + ) diff --git a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py index da47cdc523908..d016500984777 100644 --- a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py @@ -22,7 +22,6 @@ # Quality Flag and Quality params TrackQuality = cms.bool(True), TrackQualityPSet = cms.PSet(TrackQualityParams), - TrackQualityDispPSet = cms.PSet(TrackQualityDispParams), Fakefit = cms.bool(False), # True causes Tracklet reco to output TTTracks before DR & KF StoreTrackBuilderOutput = cms.bool(False), # if True EDProducts for TrackBuilder tracks and stubs will be filled RemovalType = cms.string("merge"), # Duplicate track removal @@ -38,6 +37,5 @@ tableTREFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TRE/table_TRE_D1AD2A_1.txt'), # Quality Flag and Quality params TrackQuality = cms.bool(True), - TrackQualityPSet = cms.PSet(TrackQualityParams), - TrackQualityDispPSet = cms.PSet(TrackQualityDispParams) + TrackQualityPSet = cms.PSet(TrackQualityParams) ) diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc index 9a496192e3f6c..789a10020b25b 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker.cc @@ -186,7 +186,6 @@ class L1TrackNtupleMaker : public one::EDAnalyzer* m_trk_combinatoric; std::vector* m_trk_fake; //0 fake, 1 track from primary interaction, 2 secondary track std::vector* m_trk_MVA1; - std::vector* m_trk_MVA2; std::vector* m_trk_matchtp_pdgid; std::vector* m_trk_matchtp_pt; std::vector* m_trk_matchtp_eta; @@ -230,7 +229,6 @@ class L1TrackNtupleMaker : public one::EDAnalyzer* m_matchtrk_chi2rz_dof; std::vector* m_matchtrk_bendchi2; std::vector* m_matchtrk_MVA1; - std::vector* m_matchtrk_MVA2; std::vector* m_matchtrk_nstub; std::vector* m_matchtrk_lhits; std::vector* m_matchtrk_dhits; @@ -486,7 +484,6 @@ void L1TrackNtupleMaker::beginJob() { m_trk_combinatoric = new std::vector; m_trk_fake = new std::vector; m_trk_MVA1 = new std::vector; - m_trk_MVA2 = new std::vector; m_trk_matchtp_pdgid = new std::vector; m_trk_matchtp_pt = new std::vector; m_trk_matchtp_eta = new std::vector; @@ -528,7 +525,6 @@ void L1TrackNtupleMaker::beginJob() { m_matchtrk_chi2rz_dof = new std::vector; m_matchtrk_bendchi2 = new std::vector; m_matchtrk_MVA1 = new std::vector; - m_matchtrk_MVA2 = new std::vector; m_matchtrk_nstub = new std::vector; m_matchtrk_dhits = new std::vector; m_matchtrk_lhits = new std::vector; @@ -602,7 +598,6 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("trk_combinatoric", &m_trk_combinatoric); eventTree->Branch("trk_fake", &m_trk_fake); eventTree->Branch("trk_MVA1", &m_trk_MVA1); - eventTree->Branch("trk_MVA2", &m_trk_MVA2); eventTree->Branch("trk_matchtp_pdgid", &m_trk_matchtp_pdgid); eventTree->Branch("trk_matchtp_pt", &m_trk_matchtp_pt); eventTree->Branch("trk_matchtp_eta", &m_trk_matchtp_eta); @@ -649,7 +644,6 @@ void L1TrackNtupleMaker::beginJob() { eventTree->Branch("matchtrk_chi2rz_dof", &m_matchtrk_chi2rz_dof); eventTree->Branch("matchtrk_bendchi2", &m_matchtrk_bendchi2); eventTree->Branch("matchtrk_MVA1", &m_matchtrk_MVA1); - eventTree->Branch("matchtrk_MVA2", &m_matchtrk_MVA2); eventTree->Branch("matchtrk_nstub", &m_matchtrk_nstub); eventTree->Branch("matchtrk_lhits", &m_matchtrk_lhits); eventTree->Branch("matchtrk_dhits", &m_matchtrk_dhits); @@ -747,7 +741,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_combinatoric->clear(); m_trk_fake->clear(); m_trk_MVA1->clear(); - m_trk_MVA2->clear(); m_trk_matchtp_pdgid->clear(); m_trk_matchtp_pt->clear(); m_trk_matchtp_eta->clear(); @@ -790,7 +783,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rz_dof->clear(); m_matchtrk_bendchi2->clear(); m_matchtrk_MVA1->clear(); - m_matchtrk_MVA2->clear(); m_matchtrk_nstub->clear(); m_matchtrk_lhits->clear(); m_matchtrk_dhits->clear(); @@ -1102,7 +1094,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_trk_chi2rz = iterL1Track->chi2Z(); float tmp_trk_bendchi2 = iterL1Track->stubPtConsistency(); float tmp_trk_MVA1 = iterL1Track->trkMVA1(); - float tmp_trk_MVA2 = iterL1Track->trkMVA2(); std::vector >, TTStub > > stubRefs = iterL1Track->getStubRefs(); @@ -1203,7 +1194,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_trk_chi2rz_dof->push_back(tmp_trk_chi2rz_dof); m_trk_bendchi2->push_back(tmp_trk_bendchi2); m_trk_MVA1->push_back(tmp_trk_MVA1); - m_trk_MVA2->push_back(tmp_trk_MVA2); m_trk_nstub->push_back(tmp_trk_nstub); m_trk_dhits->push_back(tmp_trk_dhits); m_trk_lhits->push_back(tmp_trk_lhits); @@ -1612,7 +1602,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup float tmp_matchtrk_chi2rz_dof = -999; float tmp_matchtrk_bendchi2 = -999; float tmp_matchtrk_MVA1 = -999; - float tmp_matchtrk_MVA2 = -999; int tmp_matchtrk_nstub = -999; int tmp_matchtrk_dhits = -999; int tmp_matchtrk_lhits = -999; @@ -1639,7 +1628,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2Z(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); - tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -1707,7 +1695,6 @@ void L1TrackNtupleMaker::analyze(const edm::Event& iEvent, const edm::EventSetup m_matchtrk_chi2rz->push_back(tmp_matchtrk_chi2rz); m_matchtrk_bendchi2->push_back(tmp_matchtrk_bendchi2); m_matchtrk_MVA1->push_back(tmp_matchtrk_MVA1); - m_matchtrk_MVA2->push_back(tmp_matchtrk_MVA2); m_matchtrk_nstub->push_back(tmp_matchtrk_nstub); m_matchtrk_dhits->push_back(tmp_matchtrk_dhits); m_matchtrk_lhits->push_back(tmp_matchtrk_lhits); diff --git a/L1Trigger/TrackTrigger/interface/L1TrackQuality.h b/L1Trigger/TrackTrigger/interface/L1TrackQuality.h index b74f53ee7b392..1107ed3e74fbb 100644 --- a/L1Trigger/TrackTrigger/interface/L1TrackQuality.h +++ b/L1Trigger/TrackTrigger/interface/L1TrackQuality.h @@ -40,7 +40,7 @@ class L1TrackQuality { std::vector const& featureNames); // Passed by reference a track without MVA filled, method fills the track's MVA field - double getL1TrackQuality(TTTrack& aTrack); + void setL1TrackQuality(TTTrack& aTrack); // Function to run the BDT in isolation allowing a feature vector in the ap_fixed datatype to be passed // and a single output to be returned which is then used to fill the bits in the Track Word for situations // where a TTTrack datatype is unavailable to be passed to the track quality diff --git a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py index db8e828d17d6d..e1e8f6cdb5ec2 100644 --- a/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py +++ b/L1Trigger/TrackTrigger/python/TrackQualityParams_cfi.py @@ -9,25 +9,3 @@ tqemu_TanlScale = cms.double( 128.0), tqemu_Z0Scale = cms.double( 64.0 ), ) - -TrackQualityDispParams = cms.PSet(qualityAlgorithm = cms.string("GBDT"), #None, Cut, NN, GBDT, GBDT_cpp - ONNXmodel = cms.FileInPath("L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx"), - # The ONNX model should be found at this path, if you want a local version of the model: - # git clone https://github.com/cms-data/L1Trigger-TrackTrigger.git L1Trigger/TrackTrigger/data - ONNXInputName = cms.string("feature_input"), - #Vector of strings of training features, in the order that the model was trained with - featureNames = cms.vstring(["phi", "eta", "z0", "bendchi2_bin", "nstub", - "nlaymiss_interior", "chi2rphi_bin", "chi2rz_bin", - "d0" ]), - # Parameters for cut based classifier, optimized for L1 Track MET - # (Table 3.7 The Phase-2 Upgrade of the CMS Level-1 Trigger http://cds.cern.ch/record/2714892) - maxZ0 = cms.double ( 15. ) , # in cm - maxEta = cms.double ( 2.4 ) , - chi2dofMax = cms.double( 40. ), - bendchi2Max = cms.double( 2.4 ), - minPt = cms.double( 2. ), # in GeV - nStubsmin = cms.int32( 4 ), - tqemu_bins = cms.vint32( [-480, -62, -35, -16, 0, 16, 35, 62, 480] ), - tqemu_TanlScale = cms.double( 128.0), - tqemu_Z0Scale = cms.double( 64.0 ), - ) diff --git a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc index 40bd06df26f64..7296cb385e665 100644 --- a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc +++ b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc @@ -61,7 +61,6 @@ std::vector L1TrackQuality::featureTransform(TTTrack L1TrackQuality::featureTransform(TTTrack& aTrack) std::vector inputs = featureTransform(aTrack, this->featureNames_); std::vector output = bdt.decision_function(inputs); aTrack.settrkMVA1(1. / (1. + exp(-output.at(0)))); - } float L1TrackQuality::runEmulatedTQ(std::vector> inputFeatures) { From 07db5f585f3f41ecf07b139e31d6a719092b988a Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Sun, 23 Feb 2025 15:29:29 +0100 Subject: [PATCH 24/36] Correcting TTTrack include --- L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index f41f121aa104b..0bf5ffcad06ce 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -11,7 +11,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" +#include "SimDataFormats/Associations/interface/TTTrackAssociationMap.h" #include "TMath.h" #include #include From 8b860f267b4944ae4248df2a76558d7174b65bc2 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Sun, 23 Feb 2025 15:25:55 +0100 Subject: [PATCH 25/36] Removing repeated code in displaced vertex producer, removing unneeded branches from ntuple maker --- .../interface/DisplacedVertexProducer.h | 3 +- .../plugins/DisplacedVertexProducer.cc | 276 +++++-------- .../python/DisplacedVertexProducer_cfi.py | 3 +- .../test/L1TrackObjectNtupleMaker.cc | 367 +----------------- 4 files changed, 103 insertions(+), 546 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 0bf5ffcad06ce..17a2d4a1bd836 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -170,8 +170,7 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT> ttTrackMCTruthToken_; const edm::EDGetTokenT>> trackToken_; const edm::EDGetTokenT>> trackGTTToken_; - const std::string outputTrackCollectionName_; - const std::string outputTrackEmulationCollectionName_; + const std::string outputVertexCollectionName_; const std::string model_; const bool runEmulation_; const edm::ParameterSet cutSet_; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index f8676bbe20877..fe5d0584d56ac 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -168,8 +168,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi iConfig.getParameter("l1TracksInputTag"))), trackGTTToken_(consumes>>( iConfig.getParameter("l1TracksGTTInputTag"))), - outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), - outputTrackEmulationCollectionName_(iConfig.getParameter("l1TrackEmulationVertexCollectionName")), + outputVertexCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), model_(iConfig.getParameter("model")), runEmulation_(iConfig.getParameter("runEmulation")), cutSet_(iConfig.getParameter("cutSet")), @@ -188,8 +187,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi RTMin_(cutSet_.getParameter("RTMin")), RTMax_(cutSet_.getParameter("RTMax")) { //--- Define EDM output to be written to file (if required) - produces(outputTrackCollectionName_); - if(runEmulation_) produces(outputTrackEmulationCollectionName_); + produces(outputVertexCollectionName_); } void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { @@ -202,85 +200,47 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e std::vector>::const_iterator iterL1Track; int this_l1track = 0; std::vector>> selectedTracksWithTruth; - std::vector>> selectedTracksEmulationWithTruth; - //Simulation track selection loop + //track selection loop for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); + edm::Ptr> gtttrack_ptr(TTTrackGTTHandle, this_l1track); this_l1track++; - float pt = l1track_ptr->momentum().perp(); - float eta = l1track_ptr->momentum().eta(); - float phi = l1track_ptr->momentum().phi(); - float z0 = l1track_ptr->z0(); //cm - float x0 = l1track_ptr->POCA().x(); - float y0 = l1track_ptr->POCA().y(); - float d0 = -x0 * sin(phi) + y0 * cos(phi); - float rinv = l1track_ptr->rInv(); - float chi2rphi = l1track_ptr->chi2XYRed(); - float chi2rz = l1track_ptr->chi2ZRed(); - float bendchi2 = l1track_ptr->stubPtConsistency(); - float MVA1 = l1track_ptr->trkMVA1(); - - std::vector>, TTStub>> + float pt, eta, phi, z0, d0, rho, chi2rphi, chi2rz, bendchi2, MVA1; + int nstub; + + if(runEmulation_){ + pt = FloatPtFromBits(*gtttrack_ptr); + eta = FloatEtaFromBits(*gtttrack_ptr); + phi = FloatPhiFromBits(*gtttrack_ptr); + z0 = gtttrack_ptr->getZ0(); //cm + d0 = gtttrack_ptr->getD0(); + int charge = ChargeFromBits(*gtttrack_ptr); + rho = charge*convertPtToR(pt); + chi2rphi = gtttrack_ptr->getChi2RPhi(); + chi2rz = gtttrack_ptr->getChi2RZ(); + bendchi2 = gtttrack_ptr->getBendChi2(); + MVA1 = gtttrack_ptr->getMVAQuality(); + nstub = gtttrack_ptr->getNStubs(); + } + else{ + pt = l1track_ptr->momentum().perp(); + eta = l1track_ptr->momentum().eta(); + phi = l1track_ptr->momentum().phi(); + z0 = l1track_ptr->z0(); //cm + float x0 = l1track_ptr->POCA().x(); + float y0 = l1track_ptr->POCA().y(); + d0 = -x0 * sin(phi) + y0 * cos(phi); + rho = 1/l1track_ptr->rInv(); + chi2rphi = l1track_ptr->chi2XYRed(); + chi2rz = l1track_ptr->chi2ZRed(); + bendchi2 = l1track_ptr->stubPtConsistency(); + MVA1 = l1track_ptr->trkMVA1(); + std::vector>, TTStub>> stubRefs = l1track_ptr->getStubRefs(); - int nstub = (int)stubRefs.size(); - - if (chi2rz < chi2rzMax_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { - if (fabs(d0) > dispD0Min_) { - if (MVA1 <= promptMVADispTrackMin_) - continue; - } - if (fabs(eta) > overlapEtaMin_ && fabs(eta) < overlapEtaMax_) { - if (nstub <= overlapNStubsMin_) - continue; - } - if (fabs(eta) > diskEtaMin_) { - if (fabs(d0) <= diskD0Min_) - continue; - } - if (fabs(eta) <= diskEtaMin_) { - if (fabs(d0) <= barrelD0Min_) - continue; - } - - Track_Parameters track = Track_Parameters(pt, - -d0, - z0, - eta, - phi, - (1/rinv), - (this_l1track - 1), - nstub, - chi2rphi, - chi2rz, - bendchi2, - MVA1); - - edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); - selectedTracksWithTruth.push_back(std::make_pair(track, my_tp)); + nstub = (int)stubRefs.size(); } - } - - //Emulation track selection loop - this_l1track = 0; - for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { - edm::Ptr> l1track_ptr(TTTrackGTTHandle, this_l1track); - edm::Ptr> l1track_ref(TTTrackHandle, this_l1track); - this_l1track++; - - float pt = FloatPtFromBits(*l1track_ptr); - float eta = FloatEtaFromBits(*l1track_ptr); - float phi = FloatPhiFromBits(*l1track_ptr); - float z0 = l1track_ptr->getZ0(); //cm - float d0 = l1track_ptr->getD0(); - int charge = ChargeFromBits(*l1track_ptr); - float rho = charge*convertPtToR(pt); - float chi2rphi = l1track_ptr->getChi2RPhi(); - float chi2rz = l1track_ptr->getChi2RZ(); - float bendchi2 = l1track_ptr->getBendChi2(); - float MVA1 = l1track_ptr->getMVAQuality(); - int nstub = l1track_ptr->getNStubs(); if (chi2rz < chi2rzMax_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { if (fabs(d0) > dispD0Min_) { @@ -313,12 +273,12 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e bendchi2, MVA1); - edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ref); - selectedTracksEmulationWithTruth.push_back(std::make_pair(track, my_tp)); + edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); + selectedTracksWithTruth.push_back(std::make_pair(track, my_tp)); } } - //Simulation vertex loop + //vertex loop std::unique_ptr product(new std::vector()); for (int i = 0; i < int(selectedTracksWithTruth.size() - 1); i++) { for (int j = i + 1; j < int(selectedTracksWithTruth.size()); j++) { @@ -366,116 +326,66 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.openingAngle, vertex.p_mag, isReal); + + if(runEmulation_){ + std::vector> Transformed_features = {selectedTracksWithTruth[i].first.pt*0.25, + selectedTracksWithTruth[j].first.pt*0.25, + selectedTracksWithTruth[i].first.eta, + selectedTracksWithTruth[j].first.eta, + selectedTracksWithTruth[i].first.phi, + selectedTracksWithTruth[j].first.phi, + selectedTracksWithTruth[i].first.d0, + selectedTracksWithTruth[j].first.d0, + selectedTracksWithTruth[i].first.z0, + selectedTracksWithTruth[j].first.z0, + selectedTracksWithTruth[i].first.chi2rz+0.07, + selectedTracksWithTruth[j].first.chi2rz+0.07, + selectedTracksWithTruth[i].first.bendchi2+0.07, + selectedTracksWithTruth[j].first.bendchi2+0.07, + selectedTracksWithTruth[i].first.MVA1+0.07, + selectedTracksWithTruth[j].first.MVA1+0.07, + vertex.d_T, + vertex.R_T, + vertex.cos_T, + vertex.delta_z*0.125}; + conifer::BDT, ap_fixed<13,8,AP_RND_CONV, AP_SAT>> bdt(this->model_); + std::vector> output = bdt.decision_function(Transformed_features); + outputVertex.setScore(output.at(0).to_float()); + } + else{ + std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt*0.25), + float(selectedTracksWithTruth[j].first.pt*0.25), + selectedTracksWithTruth[i].first.eta, + selectedTracksWithTruth[j].first.eta, + selectedTracksWithTruth[i].first.phi, + selectedTracksWithTruth[j].first.phi, + selectedTracksWithTruth[i].first.d0, + selectedTracksWithTruth[j].first.d0, + selectedTracksWithTruth[i].first.z0, + selectedTracksWithTruth[j].first.z0, + float(selectedTracksWithTruth[i].first.chi2rz+0.07), + float(selectedTracksWithTruth[j].first.chi2rz+0.07), + float(selectedTracksWithTruth[i].first.bendchi2+0.07), + float(selectedTracksWithTruth[j].first.bendchi2+0.07), + float(selectedTracksWithTruth[i].first.MVA1+0.07), + float(selectedTracksWithTruth[j].first.MVA1+0.07), + vertex.d_T, + vertex.R_T, + vertex.cos_T, + float(vertex.delta_z*0.125)}; + conifer::BDT bdt(this->model_); + std::vector output = bdt.decision_function(Transformed_features); + outputVertex.setScore(output.at(0)); + } + - std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt*0.25), - float(selectedTracksWithTruth[j].first.pt*0.25), - selectedTracksWithTruth[i].first.eta, - selectedTracksWithTruth[j].first.eta, - selectedTracksWithTruth[i].first.phi, - selectedTracksWithTruth[j].first.phi, - selectedTracksWithTruth[i].first.d0, - selectedTracksWithTruth[j].first.d0, - selectedTracksWithTruth[i].first.z0, - selectedTracksWithTruth[j].first.z0, - float(selectedTracksWithTruth[i].first.chi2rz+0.07), - float(selectedTracksWithTruth[j].first.chi2rz+0.07), - float(selectedTracksWithTruth[i].first.bendchi2+0.07), - float(selectedTracksWithTruth[j].first.bendchi2+0.07), - float(selectedTracksWithTruth[i].first.MVA1+0.07), - float(selectedTracksWithTruth[j].first.MVA1+0.07), - vertex.d_T, - vertex.R_T, - vertex.cos_T, - float(vertex.delta_z*0.125)}; - - conifer::BDT bdt(this->model_); - std::vector output = bdt.decision_function(Transformed_features); - outputVertex.setScore(output.at(0)); product->emplace_back(outputVertex); } } // //=== Store output - iEvent.put(std::move(product), outputTrackCollectionName_); - if(!runEmulation_) return; - - //Emulation vertex loop - std::unique_ptr productEmulation(new std::vector()); - for (int i = 0; i < int(selectedTracksEmulationWithTruth.size() - 1); i++) { - for (int j = i + 1; j < int(selectedTracksEmulationWithTruth.size()); j++) { - if (dist_TPs(selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first) != 0) - continue; - Double_t x_dv_trk = -9999.0; - Double_t y_dv_trk = -9999.0; - Double_t z_dv_trk = -9999.0; - edm::Ptr tp_i = selectedTracksEmulationWithTruth[i].second; - edm::Ptr tp_j = selectedTracksEmulationWithTruth[j].second; - bool isReal = false; - if (!tp_i.isNull() && !tp_j.isNull()) { - bool isHard_i = false; - bool isHard_j = false; - if (!tp_i->genParticles().empty() && !tp_j->genParticles().empty()) { - isHard_i = tp_i->genParticles()[0]->isHardProcess() || tp_i->genParticles()[0]->fromHardProcessFinalState(); - isHard_j = tp_j->genParticles()[0]->isHardProcess() || tp_j->genParticles()[0]->fromHardProcessFinalState(); - } - - if (tp_i->eventId().event() == 0 && tp_j->eventId().event() == 0 && fabs(tp_i->vx() - tp_j->vx()) < 0.0001 && - fabs(tp_i->vy() - tp_j->vy()) < 0.0001 && fabs(tp_i->vz() - tp_j->vz()) < 0.0001 && isHard_i && isHard_j && - ((tp_i->charge() + tp_j->charge()) == 0)) { - isReal = true; - } - } - - int inTraj = - calcVertex(selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first, x_dv_trk, y_dv_trk, z_dv_trk); - Vertex_Parameters vertex = Vertex_Parameters( - x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first); - - if(vertex.R_T>RTMax_) continue; - if(vertex.R_T> Transformed_features = {selectedTracksEmulationWithTruth[i].first.pt*0.25, - selectedTracksEmulationWithTruth[j].first.pt*0.25, - selectedTracksEmulationWithTruth[i].first.eta, - selectedTracksEmulationWithTruth[j].first.eta, - selectedTracksEmulationWithTruth[i].first.phi, - selectedTracksEmulationWithTruth[j].first.phi, - selectedTracksEmulationWithTruth[i].first.d0, - selectedTracksEmulationWithTruth[j].first.d0, - selectedTracksEmulationWithTruth[i].first.z0, - selectedTracksEmulationWithTruth[j].first.z0, - selectedTracksEmulationWithTruth[i].first.chi2rz+0.07, - selectedTracksEmulationWithTruth[j].first.chi2rz+0.07, - selectedTracksEmulationWithTruth[i].first.bendchi2+0.07, - selectedTracksEmulationWithTruth[j].first.bendchi2+0.07, - selectedTracksEmulationWithTruth[i].first.MVA1+0.07, - selectedTracksEmulationWithTruth[j].first.MVA1+0.07, - vertex.d_T, - vertex.R_T, - vertex.cos_T, - vertex.delta_z*0.125}; - - conifer::BDT, ap_fixed<13,8,AP_RND_CONV, AP_SAT>> bdt(this->model_); - std::vector> output = bdt.decision_function(Transformed_features); - outputVertex.setScore(output.at(0).to_float()); - productEmulation->emplace_back(outputVertex); - } - } - iEvent.put(std::move(productEmulation), outputTrackEmulationCollectionName_); + iEvent.put(std::move(product), outputVertexCollectionName_); + } DEFINE_FWK_MODULE(DisplacedVertexProducer); diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 492a7b709f2df..bdbdac84386fa 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -4,10 +4,9 @@ l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), l1TracksGTTInputTag = cms.InputTag("l1tGTTInputProducerExtended","Level1TTTracksExtendedConverted"), l1TrackVertexCollectionName = cms.string("dispVertices"), - l1TrackEmulationVertexCollectionName = cms.string("dispVerticesEmulation"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/data/dispVertTaggerEmulationConiferShifted13p8.json"), - runEmulation = cms.bool(True), + runEmulation = cms.bool(False), cutSet = cms.PSet( chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this promptMVAMin = cms.double(0.2), # prompt track quality MVA score for all tracks must be greater than this diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index a0a5181906491..c2341624a231f 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -75,6 +75,7 @@ #include "L1Trigger/L1TTrackMatch/interface/L1TkEtMissEmuAlgo.h" #include "L1Trigger/L1TTrackMatch/interface/L1TkHTMissEmulatorProducer.h" #include "DataFormats/L1Trigger/interface/DisplacedVertex.h" +#include "L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h" /////////////// // ROOT HEADERS @@ -134,26 +135,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer digitized_maximum) - digitized_value = digitized_maximum; - if (value < 0) - digitized_value = (1 << maxBits) - digitized_value; // two's complement encoding - return digitized_value; - } - - inline const double BitToDouble(unsigned int bits, unsigned int maxBits, double step) const { - int isign = 1; - unsigned int digitized_maximum = (1 << maxBits) - 1; - if (bits & (1 << (maxBits - 1))) { // check the sign - isign = -1; - bits = (1 << (maxBits + 1)) - bits; - } - return (double(bits & digitized_maximum) + 0.5) * step * isign; - } // Mandatory methods void beginJob() override; @@ -289,7 +270,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer> GenParticleToken_; edm::EDGetTokenT> SimVertexToken_; edm::EDGetTokenT> DispVertToken_; - edm::EDGetTokenT> DispVertEmulationToken_; edm::EDGetTokenT L1VertexToken_; edm::EDGetTokenT L1VertexEmuToken_; @@ -339,35 +319,11 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_dv_x; std::vector* m_dv_y; std::vector* m_dv_z; - std::vector* m_dv_openingAngle; - std::vector* m_dv_parentPt; std::vector* m_dv_firstIndexTrk; std::vector* m_dv_secondIndexTrk; - std::vector* m_dv_inTraj; std::vector* m_dv_del_Z; std::vector* m_dv_isReal; std::vector* m_dv_score; - - //displaced vertices emulation - std::vector* m_dvEmu_d_T; - std::vector* m_dvEmu_R_T; - std::vector* m_dvEmu_cos_T; - std::vector* m_dvEmu_x; - std::vector* m_dvEmu_y; - std::vector* m_dvEmu_z; - std::vector* m_dvEmu_openingAngle; - std::vector* m_dvEmu_parentPt; - std::vector* m_dvEmu_firstIndexTrk; - std::vector* m_dvEmu_secondIndexTrk; - std::vector* m_dvEmu_inTraj; - std::vector* m_dvEmu_del_Z; - std::vector* m_dvEmu_isReal; - std::vector* m_dvEmu_score; - - std::vector* m_dvEmuFixed_d_T; - std::vector* m_dvEmuFixed_R_T; - std::vector* m_dvEmuFixed_cos_T; - std::vector* m_dvEmuFixed_del_Z; // all L1 tracks (prompt) std::vector* m_trk_pt; @@ -396,7 +352,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trk_fake; //0 fake, 1 track from primary interaction, 2 secondary track std::vector* m_trk_matchtp_pdgid; std::vector* m_trk_matchtp_mother_pdgid; - std::vector* m_trk_matchtp_pt; std::vector* m_trk_matchtp_eta; std::vector* m_trk_matchtp_phi; @@ -444,8 +399,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_combinatoric; std::vector* m_trkExt_fake; //0 fake, 1 track from primary interaction, 2 secondary track std::vector* m_trkExt_matchtp_pdgid; - std::vector* m_trkExt_matchtp_isHToMu; - std::vector* m_trkExt_matchtp_isHToB; std::vector* m_trkExt_matchtp_isHard; std::vector* m_trkExt_matchtp_pt; std::vector* m_trkExt_matchtp_eta; @@ -484,15 +437,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExtEmu_bendchi2; std::vector* m_trkExtEmu_MVA; std::vector* m_trkExtEmu_nstub; - - std::vector* m_trkExtEmuFixed_pt; - std::vector* m_trkExtEmuFixed_eta; - std::vector* m_trkExtEmuFixed_phi; - std::vector* m_trkExtEmuFixed_d0; // (filled if nFitPar==5, else 999) - std::vector* m_trkExtEmuFixed_z0; - std::vector* m_trkExtEmuFixed_chi2rz; - std::vector* m_trkExtEmuFixed_bendchi2; - std::vector* m_trkExtEmuFixed_MVA; // all tracking particles std::vector* m_tp_pt; @@ -507,8 +451,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_tp_d0_prod; std::vector* m_tp_z0_prod; std::vector* m_tp_pdgid; - std::vector* m_tp_isHToMu; - std::vector* m_tp_isHToB; std::vector* m_tp_isHard; std::vector* m_tp_nmatch; std::vector* m_tp_nstub; @@ -565,15 +507,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExtEmu_bendchi2; std::vector* m_matchtrkExtEmu_MVA; std::vector* m_matchtrkExtEmu_nstub; - - std::vector* m_matchtrkExtEmuFixed_pt; - std::vector* m_matchtrkExtEmuFixed_eta; - std::vector* m_matchtrkExtEmuFixed_phi; - std::vector* m_matchtrkExtEmuFixed_d0; // (filled if nFitPar==5, else 999) - std::vector* m_matchtrkExtEmuFixed_z0; - std::vector* m_matchtrkExtEmuFixed_chi2rz; - std::vector* m_matchtrkExtEmuFixed_bendchi2; - std::vector* m_matchtrkExtEmuFixed_MVA; // ALL stubs std::vector* m_allstub_x; @@ -881,7 +814,6 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon SimVertexToken_ = consumes>(SimVertexInputTag); if (runDispVert){ DispVertToken_ = consumes>(DisplacedVertexInputTag); - DispVertEmulationToken_ = consumes>(DisplacedVertexEmulationInputTag); } L1VertexToken_ = consumes(RecoVertexInputTag); L1VertexEmuToken_ = consumes(RecoVertexEmuInputTag); @@ -927,7 +859,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trk_fake; delete m_trk_matchtp_pdgid; delete m_trk_matchtp_mother_pdgid; - delete m_trk_matchtp_pt; delete m_trk_matchtp_eta; delete m_trk_matchtp_phi; @@ -974,8 +905,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_combinatoric; delete m_trkExt_fake; delete m_trkExt_matchtp_pdgid; - delete m_trkExt_matchtp_isHToMu; - delete m_trkExt_matchtp_isHToB; delete m_trkExt_matchtp_isHard; delete m_trkExt_matchtp_pt; delete m_trkExt_matchtp_eta; @@ -1013,15 +942,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExtEmu_bendchi2; delete m_trkExtEmu_MVA; delete m_trkExtEmu_nstub; - - delete m_trkExtEmuFixed_pt; - delete m_trkExtEmuFixed_eta; - delete m_trkExtEmuFixed_phi; - delete m_trkExtEmuFixed_d0; - delete m_trkExtEmuFixed_z0; - delete m_trkExtEmuFixed_chi2rz; - delete m_trkExtEmuFixed_bendchi2; - delete m_trkExtEmuFixed_MVA; delete m_tp_pt; delete m_tp_eta; @@ -1035,8 +955,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_tp_d0_prod; delete m_tp_z0_prod; delete m_tp_pdgid; - delete m_tp_isHToMu; - delete m_tp_isHToB; delete m_tp_isHard; delete m_tp_nmatch; delete m_tp_nstub; @@ -1056,34 +974,11 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_dv_x; delete m_dv_y; delete m_dv_z; - delete m_dv_openingAngle; - delete m_dv_parentPt; delete m_dv_firstIndexTrk; delete m_dv_secondIndexTrk; - delete m_dv_inTraj; delete m_dv_del_Z; delete m_dv_isReal; delete m_dv_score; - - delete m_dvEmu_d_T; - delete m_dvEmu_R_T; - delete m_dvEmu_cos_T; - delete m_dvEmu_x; - delete m_dvEmu_y; - delete m_dvEmu_z; - delete m_dvEmu_openingAngle; - delete m_dvEmu_parentPt; - delete m_dvEmu_firstIndexTrk; - delete m_dvEmu_secondIndexTrk; - delete m_dvEmu_inTraj; - delete m_dvEmu_del_Z; - delete m_dvEmu_isReal; - delete m_dvEmu_score; - - delete m_dvEmuFixed_d_T; - delete m_dvEmuFixed_R_T; - delete m_dvEmuFixed_cos_T; - delete m_dvEmuFixed_del_Z; delete m_matchtrk_pt; delete m_matchtrk_eta; @@ -1132,15 +1027,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrkExtEmu_bendchi2; delete m_matchtrkExtEmu_MVA; delete m_matchtrkExtEmu_nstub; - - delete m_matchtrkExtEmuFixed_pt; - delete m_matchtrkExtEmuFixed_eta; - delete m_matchtrkExtEmuFixed_phi; - delete m_matchtrkExtEmuFixed_d0; - delete m_matchtrkExtEmuFixed_z0; - delete m_matchtrkExtEmuFixed_chi2rz; - delete m_matchtrkExtEmuFixed_bendchi2; - delete m_matchtrkExtEmuFixed_MVA; delete m_allstub_x; delete m_allstub_y; @@ -1326,7 +1212,7 @@ double L1TrackObjectNtupleMaker::DoublePtFromBits(const L1Track &track) const { double L1TrackObjectNtupleMaker::DoubleEtaFromBits(const L1Track &track) const { TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord(); - glbeta_intern digieta; + l1trackunpacker::glbeta_intern digieta; digieta.V = etaBits.range(); return (double)digieta; } @@ -1339,16 +1225,16 @@ double L1TrackObjectNtupleMaker::DoublePhiFromBits(const L1Track &track) const { } else { sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0); } - glbphi_intern trkphiSector = DoubleToBit( + l1trackunpacker::glbphi_intern trkphiSector = l1trackunpacker::DoubleToBit( sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); - glbphi_intern local_phiBits = 0; + l1trackunpacker::glbphi_intern local_phiBits = 0; local_phiBits.V = track.getPhiWord(); - glbphi_intern local_phi = - DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), + l1trackunpacker::glbphi_intern local_phi = + l1trackunpacker::DoubleToBit(l1trackunpacker::BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); - glbphi_intern digiphi = local_phi + trkphiSector; - return BitToDouble( + l1trackunpacker::glbphi_intern digiphi = local_phi + trkphiSector; + return l1trackunpacker::BitToDouble( digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); } @@ -1401,7 +1287,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trk_fake = new std::vector; m_trk_matchtp_pdgid = new std::vector; m_trk_matchtp_mother_pdgid = new std::vector; - m_trk_matchtp_pt = new std::vector; m_trk_matchtp_eta = new std::vector; m_trk_matchtp_phi = new std::vector; @@ -1448,8 +1333,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_combinatoric = new std::vector; m_trkExt_fake = new std::vector; m_trkExt_matchtp_pdgid = new std::vector; - m_trkExt_matchtp_isHToMu = new std::vector; - m_trkExt_matchtp_isHToB = new std::vector; m_trkExt_matchtp_isHard = new std::vector; m_trkExt_matchtp_pt = new std::vector; m_trkExt_matchtp_eta = new std::vector; @@ -1488,15 +1371,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExtEmu_MVA = new std::vector; m_trkExtEmu_nstub = new std::vector; - m_trkExtEmuFixed_pt = new std::vector; - m_trkExtEmuFixed_eta = new std::vector; - m_trkExtEmuFixed_phi = new std::vector; - m_trkExtEmuFixed_d0 = new std::vector; - m_trkExtEmuFixed_z0 = new std::vector; - m_trkExtEmuFixed_chi2rz = new std::vector; - m_trkExtEmuFixed_bendchi2 = new std::vector; - m_trkExtEmuFixed_MVA = new std::vector; - m_tp_pt = new std::vector; m_tp_eta = new std::vector; m_tp_phi = new std::vector; @@ -1509,8 +1383,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_tp_d0_prod = new std::vector; m_tp_z0_prod = new std::vector; m_tp_pdgid = new std::vector; - m_tp_isHToMu = new std::vector; - m_tp_isHToB = new std::vector; m_tp_isHard = new std::vector; m_tp_nmatch = new std::vector; m_tp_nstub = new std::vector; @@ -1530,34 +1402,11 @@ void L1TrackObjectNtupleMaker::beginJob() { m_dv_x = new std::vector; m_dv_y = new std::vector; m_dv_z = new std::vector; - m_dv_openingAngle = new std::vector; - m_dv_parentPt = new std::vector; m_dv_firstIndexTrk = new std::vector; m_dv_secondIndexTrk = new std::vector; - m_dv_inTraj = new std::vector; m_dv_del_Z = new std::vector; m_dv_isReal = new std::vector; m_dv_score = new std::vector; - - m_dvEmu_d_T = new std::vector; - m_dvEmu_R_T = new std::vector; - m_dvEmu_cos_T = new std::vector; - m_dvEmu_x = new std::vector; - m_dvEmu_y = new std::vector; - m_dvEmu_z = new std::vector; - m_dvEmu_openingAngle = new std::vector; - m_dvEmu_parentPt = new std::vector; - m_dvEmu_firstIndexTrk = new std::vector; - m_dvEmu_secondIndexTrk = new std::vector; - m_dvEmu_inTraj = new std::vector; - m_dvEmu_del_Z = new std::vector; - m_dvEmu_isReal = new std::vector; - m_dvEmu_score = new std::vector; - - m_dvEmuFixed_d_T = new std::vector; - m_dvEmuFixed_R_T = new std::vector; - m_dvEmuFixed_cos_T = new std::vector; - m_dvEmuFixed_del_Z = new std::vector; m_matchtrk_pt = new std::vector; m_matchtrk_eta = new std::vector; @@ -1606,15 +1455,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrkExtEmu_bendchi2 = new std::vector; m_matchtrkExtEmu_MVA = new std::vector; m_matchtrkExtEmu_nstub = new std::vector; - - m_matchtrkExtEmuFixed_pt = new std::vector; - m_matchtrkExtEmuFixed_eta = new std::vector; - m_matchtrkExtEmuFixed_phi = new std::vector; - m_matchtrkExtEmuFixed_d0 = new std::vector; - m_matchtrkExtEmuFixed_z0 = new std::vector; - m_matchtrkExtEmuFixed_chi2rz = new std::vector; - m_matchtrkExtEmuFixed_bendchi2 = new std::vector; - m_matchtrkExtEmuFixed_MVA = new std::vector; m_allstub_x = new std::vector; m_allstub_y = new std::vector; @@ -1755,7 +1595,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trk_fake", &m_trk_fake); eventTree->Branch("trk_matchtp_pdgid", &m_trk_matchtp_pdgid); eventTree->Branch("trk_matchtp_mother_pdgid", &m_trk_matchtp_mother_pdgid); - eventTree->Branch("trk_matchtp_pt", &m_trk_matchtp_pt); eventTree->Branch("trk_matchtp_eta", &m_trk_matchtp_eta); eventTree->Branch("trk_matchtp_phi", &m_trk_matchtp_phi); @@ -1806,8 +1645,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_combinatoric", &m_trkExt_combinatoric); eventTree->Branch("trkExt_fake", &m_trkExt_fake); eventTree->Branch("trkExt_matchtp_pdgid", &m_trkExt_matchtp_pdgid); - eventTree->Branch("trkExt_matchtp_isHToMu", &m_trkExt_matchtp_isHToMu); - eventTree->Branch("trkExt_matchtp_isHToB", &m_trkExt_matchtp_isHToB); eventTree->Branch("trkExt_matchtp_isHard", &m_trkExt_matchtp_isHard); eventTree->Branch("trkExt_matchtp_pt", &m_trkExt_matchtp_pt); eventTree->Branch("trkExt_matchtp_eta", &m_trkExt_matchtp_eta); @@ -1847,15 +1684,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExtEmu_bendchi2", &m_trkExtEmu_bendchi2); eventTree->Branch("trkExtEmu_MVA", &m_trkExtEmu_MVA); eventTree->Branch("trkExtEmu_nstub", &m_trkExtEmu_nstub); - - eventTree->Branch("trkExtEmuFixed_pt", &m_trkExtEmuFixed_pt); - eventTree->Branch("trkExtEmuFixed_eta", &m_trkExtEmuFixed_eta); - eventTree->Branch("trkExtEmuFixed_phi", &m_trkExtEmuFixed_phi); - eventTree->Branch("trkExtEmuFixed_d0", &m_trkExtEmuFixed_d0); - eventTree->Branch("trkExtEmuFixed_z0", &m_trkExtEmuFixed_z0); - eventTree->Branch("trkExtEmuFixed_chi2rz", &m_trkExtEmuFixed_chi2rz); - eventTree->Branch("trkExtEmuFixed_bendchi2", &m_trkExtEmuFixed_bendchi2); - eventTree->Branch("trkExtEmuFixed_MVA", &m_trkExtEmuFixed_MVA); } eventTree->Branch("tp_pt", &m_tp_pt); eventTree->Branch("tp_eta", &m_tp_eta); @@ -1869,8 +1697,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("tp_d0_prod", &m_tp_d0_prod); eventTree->Branch("tp_z0_prod", &m_tp_z0_prod); eventTree->Branch("tp_pdgid", &m_tp_pdgid); - eventTree->Branch("tp_isHToMu", &m_tp_isHToMu); - eventTree->Branch("tp_isHToB", &m_tp_isHToB); eventTree->Branch("tp_isHard", &m_tp_isHard); eventTree->Branch("tp_nmatch", &m_tp_nmatch); eventTree->Branch("tp_nstub", &m_tp_nstub); @@ -1927,15 +1753,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrkExtEmu_bendchi2", &m_matchtrkExtEmu_bendchi2); eventTree->Branch("matchtrkExtEmu_MVA", &m_matchtrkExtEmu_MVA); eventTree->Branch("matchtrkExtEmu_nstub", &m_matchtrkExtEmu_nstub); - - eventTree->Branch("matchtrkExtEmuFixed_pt", &m_matchtrkExtEmuFixed_pt); - eventTree->Branch("matchtrkExtEmuFixed_eta", &m_matchtrkExtEmuFixed_eta); - eventTree->Branch("matchtrkExtEmuFixed_phi", &m_matchtrkExtEmuFixed_phi); - eventTree->Branch("matchtrkExtEmuFixed_d0", &m_matchtrkExtEmuFixed_d0); - eventTree->Branch("matchtrkExtEmuFixed_z0", &m_matchtrkExtEmuFixed_z0); - eventTree->Branch("matchtrkExtEmuFixed_chi2rz", &m_matchtrkExtEmuFixed_chi2rz); - eventTree->Branch("matchtrkExtEmuFixed_bendchi2", &m_matchtrkExtEmuFixed_bendchi2); - eventTree->Branch("matchtrkExtEmuFixed_MVA", &m_matchtrkExtEmuFixed_MVA); } if (SaveStubs) { @@ -1975,34 +1792,11 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("dv_x", &m_dv_x); eventTree->Branch("dv_y", &m_dv_y); eventTree->Branch("dv_z", &m_dv_z); - eventTree->Branch("dv_openingAngle", &m_dv_openingAngle); - eventTree->Branch("dv_parentPt", &m_dv_parentPt); eventTree->Branch("dv_firstIndexTrk", &m_dv_firstIndexTrk); eventTree->Branch("dv_secondIndexTrk", &m_dv_secondIndexTrk); - eventTree->Branch("dv_inTraj", &m_dv_inTraj); eventTree->Branch("dv_del_Z", &m_dv_del_Z); eventTree->Branch("dv_isReal", &m_dv_isReal); eventTree->Branch("dv_score", &m_dv_score); - - eventTree->Branch("dvEmu_d_T", &m_dvEmu_d_T); - eventTree->Branch("dvEmu_R_T", &m_dvEmu_R_T); - eventTree->Branch("dvEmu_cos_T", &m_dvEmu_cos_T); - eventTree->Branch("dvEmu_x", &m_dvEmu_x); - eventTree->Branch("dvEmu_y", &m_dvEmu_y); - eventTree->Branch("dvEmu_z", &m_dvEmu_z); - eventTree->Branch("dvEmu_openingAngle", &m_dvEmu_openingAngle); - eventTree->Branch("dvEmu_parentPt", &m_dvEmu_parentPt); - eventTree->Branch("dvEmu_firstIndexTrk", &m_dvEmu_firstIndexTrk); - eventTree->Branch("dvEmu_secondIndexTrk", &m_dvEmu_secondIndexTrk); - eventTree->Branch("dvEmu_inTraj", &m_dvEmu_inTraj); - eventTree->Branch("dvEmu_del_Z", &m_dvEmu_del_Z); - eventTree->Branch("dvEmu_isReal", &m_dvEmu_isReal); - eventTree->Branch("dvEmu_score", &m_dvEmu_score); - - eventTree->Branch("dvEmuFixed_d_T", &m_dvEmuFixed_d_T); - eventTree->Branch("dvEmuFixed_R_T", &m_dvEmuFixed_R_T); - eventTree->Branch("dvEmuFixed_cos_T", &m_dvEmuFixed_cos_T); - eventTree->Branch("dvEmuFixed_del_Z", &m_dvEmuFixed_del_Z); } if (SaveTrackJets) { eventTree->Branch("genjet_eta", &m_genjet_eta); @@ -2158,7 +1952,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_fake->clear(); m_trk_matchtp_pdgid->clear(); m_trk_matchtp_mother_pdgid->clear(); - m_trk_matchtp_pt->clear(); m_trk_matchtp_eta->clear(); m_trk_matchtp_phi->clear(); @@ -2206,8 +1999,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_combinatoric->clear(); m_trkExt_fake->clear(); m_trkExt_matchtp_pdgid->clear(); - m_trkExt_matchtp_isHToMu->clear(); - m_trkExt_matchtp_isHToB->clear(); m_trkExt_matchtp_isHard->clear(); m_trkExt_matchtp_pt->clear(); m_trkExt_matchtp_eta->clear(); @@ -2245,15 +2036,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExtEmu_bendchi2->clear(); m_trkExtEmu_MVA->clear(); m_trkExtEmu_nstub->clear(); - - m_trkExtEmuFixed_pt->clear(); - m_trkExtEmuFixed_eta->clear(); - m_trkExtEmuFixed_phi->clear(); - m_trkExtEmuFixed_d0->clear(); - m_trkExtEmuFixed_z0->clear(); - m_trkExtEmuFixed_chi2rz->clear(); - m_trkExtEmuFixed_bendchi2->clear(); - m_trkExtEmuFixed_MVA->clear(); } m_tp_pt->clear(); m_tp_eta->clear(); @@ -2267,8 +2049,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_d0_prod->clear(); m_tp_z0_prod->clear(); m_tp_pdgid->clear(); - m_tp_isHToMu->clear(); - m_tp_isHToB->clear(); m_tp_isHard->clear(); m_tp_nmatch->clear(); m_tp_nstub->clear(); @@ -2288,34 +2068,11 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dv_x->clear(); m_dv_y->clear(); m_dv_z->clear(); - m_dv_openingAngle->clear(); - m_dv_parentPt->clear(); m_dv_firstIndexTrk->clear(); m_dv_secondIndexTrk->clear(); - m_dv_inTraj->clear(); m_dv_del_Z->clear(); m_dv_isReal->clear(); m_dv_score->clear(); - - m_dvEmu_d_T->clear(); - m_dvEmu_R_T->clear(); - m_dvEmu_cos_T->clear(); - m_dvEmu_x->clear(); - m_dvEmu_y->clear(); - m_dvEmu_z->clear(); - m_dvEmu_openingAngle->clear(); - m_dvEmu_parentPt->clear(); - m_dvEmu_firstIndexTrk->clear(); - m_dvEmu_secondIndexTrk->clear(); - m_dvEmu_inTraj->clear(); - m_dvEmu_del_Z->clear(); - m_dvEmu_isReal->clear(); - m_dvEmu_score->clear(); - - m_dvEmuFixed_d_T->clear(); - m_dvEmuFixed_R_T->clear(); - m_dvEmuFixed_cos_T->clear(); - m_dvEmuFixed_del_Z->clear(); } if (Displaced == "Prompt" || Displaced == "Both") { m_matchtrk_pt->clear(); @@ -2367,15 +2124,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExtEmu_bendchi2->clear(); m_matchtrkExtEmu_MVA->clear(); m_matchtrkExtEmu_nstub->clear(); - - m_matchtrkExtEmuFixed_pt->clear(); - m_matchtrkExtEmuFixed_eta->clear(); - m_matchtrkExtEmuFixed_phi->clear(); - m_matchtrkExtEmuFixed_d0->clear(); - m_matchtrkExtEmuFixed_z0->clear(); - m_matchtrkExtEmuFixed_chi2rz->clear(); - m_matchtrkExtEmuFixed_bendchi2->clear(); - m_matchtrkExtEmuFixed_MVA->clear(); } if (SaveStubs) { @@ -2526,10 +2274,8 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even //Displaced vertices edm::Handle> DispVertHandle; - edm::Handle> DispVertEmulationHandle; if (runDispVert){ iEvent.getByToken(DispVertToken_, DispVertHandle); - iEvent.getByToken(DispVertEmulationToken_, DispVertEmulationHandle); } //Vertex @@ -2698,11 +2444,8 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dv_x->push_back(dispVertIter->x()); m_dv_y->push_back(dispVertIter->y()); m_dv_z->push_back(dispVertIter->z()); - m_dv_openingAngle->push_back(dispVertIter->openingAngle()); - m_dv_parentPt->push_back(dispVertIter->parentPt()); m_dv_firstIndexTrk->push_back(dispVertIter->firstIndexTrk()); m_dv_secondIndexTrk->push_back(dispVertIter->secondIndexTrk()); - m_dv_inTraj->push_back(dispVertIter->inTraj()); m_dv_del_Z->push_back(dispVertIter->del_Z()); m_dv_isReal->push_back(dispVertIter->isReal()); m_dv_score->push_back(dispVertIter->score()); @@ -2715,43 +2458,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } else { edm::LogWarning("DataNotFound") << "\nWarning: SimVertexHandle not found in the event" << std::endl; } - - // loop over emulated displaced vertices - if (DispVertEmulationHandle.isValid()) { - vector::const_iterator dispVertEmulationIter; - for (dispVertEmulationIter = DispVertEmulationHandle->begin(); dispVertEmulationIter != DispVertEmulationHandle->end(); ++dispVertEmulationIter) { - - float tmp_dvEmu_d_T = dispVertEmulationIter->d_T(); - float tmp_dvEmu_R_T = dispVertEmulationIter->R_T(); - float tmp_dvEmu_cos_T = dispVertEmulationIter->cos_T(); - float tmp_dvEmu_del_Z = dispVertEmulationIter->del_Z(); - - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_d_T = tmp_dvEmu_d_T; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_R_T = tmp_dvEmu_R_T; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_cos_T = tmp_dvEmu_cos_T; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_del_Z = tmp_dvEmu_del_Z; - - m_dvEmu_d_T->push_back(tmp_dvEmu_d_T); - m_dvEmu_R_T->push_back(tmp_dvEmu_R_T); - m_dvEmu_cos_T->push_back(tmp_dvEmu_cos_T); - m_dvEmu_x->push_back(dispVertEmulationIter->x()); - m_dvEmu_y->push_back(dispVertEmulationIter->y()); - m_dvEmu_z->push_back(dispVertEmulationIter->z()); - m_dvEmu_openingAngle->push_back(dispVertEmulationIter->openingAngle()); - m_dvEmu_parentPt->push_back(dispVertEmulationIter->parentPt()); - m_dvEmu_firstIndexTrk->push_back(dispVertEmulationIter->firstIndexTrk()); - m_dvEmu_secondIndexTrk->push_back(dispVertEmulationIter->secondIndexTrk()); - m_dvEmu_inTraj->push_back(dispVertEmulationIter->inTraj()); - m_dvEmu_del_Z->push_back(tmp_dvEmu_del_Z); - m_dvEmu_isReal->push_back(dispVertEmulationIter->isReal()); - m_dvEmu_score->push_back(dispVertEmulationIter->score()); - - m_dvEmuFixed_d_T->push_back(tmp_dvEmuFixed_d_T.to_float()); - m_dvEmuFixed_R_T->push_back(tmp_dvEmuFixed_R_T.to_float()); - m_dvEmuFixed_cos_T->push_back(tmp_dvEmuFixed_cos_T.to_float()); - m_dvEmuFixed_del_Z->push_back(tmp_dvEmuFixed_del_Z.to_float()); - } - } // ---------------------------------------------------------------------------------------------- // loop over L1 stubs @@ -2993,7 +2699,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int myFake = 0; int myTP_pdgid = -999; int myTP_mother_pdgid = -999; - float myTP_pt = -999; float myTP_eta = -999; float myTP_phi = -999; @@ -3033,7 +2738,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_fake->push_back(myFake); m_trk_matchtp_pdgid->push_back(myTP_pdgid); m_trk_matchtp_mother_pdgid->push_back(myTP_mother_pdgid); - m_trk_matchtp_pt->push_back(myTP_pt); m_trk_matchtp_eta->push_back(myTP_eta); m_trk_matchtp_phi->push_back(myTP_phi); @@ -3133,15 +2837,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trkEmu_MVA = l1track_ref->getMVAQuality(); int tmp_trkEmu_nstub = l1track_ref->getNStubs(); - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_pt = tmp_trkEmu_pt; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_eta = tmp_trkEmu_eta; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_phi = tmp_trkEmu_phi; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_z0 = tmp_trkEmu_z0; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_d0 = tmp_trkEmu_d0; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_chi2rz = tmp_trkEmu_chi2rz; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_bendchi2 = tmp_trkEmu_bendchi2; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_MVA = tmp_trkEmu_MVA; - // ---------------------------------------------------------------------------------------------- // loop over stubs on tracks int tmp_trk_dhits = 0; @@ -3242,15 +2937,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExtEmu_bendchi2->push_back(tmp_trkEmu_bendchi2); m_trkExtEmu_MVA->push_back(tmp_trkEmu_MVA); m_trkExtEmu_nstub->push_back(tmp_trkEmu_nstub); - - m_trkExtEmuFixed_pt->push_back(tmp_trkEmuFixed_pt.to_float()); - m_trkExtEmuFixed_eta->push_back(tmp_trkEmuFixed_eta.to_float()); - m_trkExtEmuFixed_phi->push_back(tmp_trkEmuFixed_phi.to_float()); - m_trkExtEmuFixed_d0->push_back(tmp_trkEmuFixed_d0.to_float()); - m_trkExtEmuFixed_z0->push_back(tmp_trkEmuFixed_z0.to_float()); - m_trkExtEmuFixed_chi2rz->push_back(tmp_trkEmuFixed_chi2rz.to_float()); - m_trkExtEmuFixed_bendchi2->push_back(tmp_trkEmuFixed_bendchi2.to_float()); - m_trkExtEmuFixed_MVA->push_back(tmp_trkEmuFixed_MVA.to_float()); // ---------------------------------------------------------------------------------------------- // for studying the fake rate // ---------------------------------------------------------------------------------------------- @@ -3258,8 +2944,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int myFake = 0; int myTP_pdgid = -999; - bool myTP_isHToMu = false; - bool myTP_isHToB = false; bool myTP_isHard = false; float myTP_pt = -999; float myTP_eta = -999; @@ -3281,8 +2965,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even myFake = 1; myTP_pdgid = my_tp->pdgId(); - myTP_isHToMu = findHiggsToMuAncestor(my_tp); - myTP_isHToB = findHiggsToBAncestor(my_tp); myTP_isHard = isHard(my_tp); myTP_pt = my_tp->p4().pt(); myTP_eta = my_tp->p4().eta(); @@ -3326,8 +3008,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_fake->push_back(myFake); m_trkExt_matchtp_pdgid->push_back(myTP_pdgid); - m_trkExt_matchtp_isHToMu->push_back(myTP_isHToMu); - m_trkExt_matchtp_isHToB->push_back(myTP_isHToB); m_trkExt_matchtp_isHard->push_back(myTP_isHard); m_trkExt_matchtp_pt->push_back(myTP_pt); m_trkExt_matchtp_eta->push_back(myTP_eta); @@ -3448,8 +3128,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even if (MyProcess == 6 && (dxy > 1.0)) continue; - bool tmp_tp_isHToMu = findHiggsToMuAncestor(iterTP); - bool tmp_tp_isHToB = findHiggsToBAncestor(iterTP); bool tmp_tp_isHard = isHard(iterTP); if (DebugMode && (Displaced == "Prompt" || Displaced == "Both")) @@ -3542,8 +3220,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_z0_prod->push_back(tmp_tp_z0_prod); m_tp_d0_prod->push_back(tmp_tp_d0_prod); m_tp_pdgid->push_back(tmp_tp_pdgid); - m_tp_isHToMu->push_back(tmp_tp_isHToMu); - m_tp_isHToB->push_back(tmp_tp_isHToB); m_tp_isHard->push_back(tmp_tp_isHard); m_tp_nstub->push_back(nStubTP); m_tp_eventid->push_back(tmp_eventid); @@ -3836,15 +3512,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrkExtEmu_bendchi2 = -999; float tmp_matchtrkExtEmu_MVA = -999; int tmp_matchtrkExtEmu_nstub = -999; - - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_pt = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_eta = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_phi = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_d0 = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_z0 = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_chi2rz = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_bendchi2 = -999; - ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_MVA = -999; if (nMatch > 1 && DebugMode) edm::LogVerbatim("Tracklet") << "WARNING *** 2 or more matches to genuine L1 tracks ***"; @@ -3863,15 +3530,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_matchtrkExtEmu_bendchi2 = l1track_ref->getBendChi2(); tmp_matchtrkExtEmu_MVA = l1track_ref->getMVAQuality(); tmp_matchtrkExtEmu_nstub = l1track_ref->getNStubs(); - - tmp_matchtrkExtEmuFixed_pt = tmp_matchtrkExtEmu_pt; - tmp_matchtrkExtEmuFixed_eta = tmp_matchtrkExtEmu_eta; - tmp_matchtrkExtEmuFixed_phi = tmp_matchtrkExtEmu_phi; - tmp_matchtrkExtEmuFixed_z0 = tmp_matchtrkExtEmu_z0; - tmp_matchtrkExtEmuFixed_d0 = tmp_matchtrkExtEmu_d0; - tmp_matchtrkExtEmuFixed_chi2rz = tmp_matchtrkExtEmu_chi2rz; - tmp_matchtrkExtEmuFixed_bendchi2 = tmp_matchtrkExtEmu_bendchi2; - tmp_matchtrkExtEmuFixed_MVA = tmp_matchtrkExtEmu_MVA; tmp_matchtrkExt_pt = matchedTracks.at(i_track)->momentum().perp(); tmp_matchtrkExt_eta = matchedTracks.at(i_track)->momentum().eta(); @@ -3949,15 +3607,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExtEmu_bendchi2->push_back(tmp_matchtrkExtEmu_bendchi2); m_matchtrkExtEmu_MVA->push_back(tmp_matchtrkExtEmu_MVA); m_matchtrkExtEmu_nstub->push_back(tmp_matchtrkExtEmu_nstub); - - m_matchtrkExtEmuFixed_pt->push_back(tmp_matchtrkExtEmuFixed_pt.to_float()); - m_matchtrkExtEmuFixed_eta->push_back(tmp_matchtrkExtEmuFixed_eta.to_float()); - m_matchtrkExtEmuFixed_phi->push_back(tmp_matchtrkExtEmuFixed_phi.to_float()); - m_matchtrkExtEmuFixed_d0->push_back(tmp_matchtrkExtEmuFixed_d0.to_float()); - m_matchtrkExtEmuFixed_z0->push_back(tmp_matchtrkExtEmuFixed_z0.to_float()); - m_matchtrkExtEmuFixed_chi2rz->push_back(tmp_matchtrkExtEmuFixed_chi2rz.to_float()); - m_matchtrkExtEmuFixed_bendchi2->push_back(tmp_matchtrkExtEmuFixed_bendchi2.to_float()); - m_matchtrkExtEmuFixed_MVA->push_back(tmp_matchtrkExtEmuFixed_MVA.to_float()); } } //end loop tracking particles trueTkMET = sqrt(trueTkMETx * trueTkMETx + trueTkMETy * trueTkMETy); From 0a0ddc04c518f004c596f61bef042e775b143287 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 24 Feb 2025 12:50:30 +0100 Subject: [PATCH 26/36] Flipping d0 sign due to sign difference in track word, adding conifer to build file --- L1Trigger/L1TTrackMatch/BuildFile.xml | 1 + L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/BuildFile.xml b/L1Trigger/L1TTrackMatch/BuildFile.xml index 2caaa0df5472c..355dc8cd5b60b 100644 --- a/L1Trigger/L1TTrackMatch/BuildFile.xml +++ b/L1Trigger/L1TTrackMatch/BuildFile.xml @@ -10,6 +10,7 @@ + diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index fe5d0584d56ac..f6885f1f2e034 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -231,7 +231,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e z0 = l1track_ptr->z0(); //cm float x0 = l1track_ptr->POCA().x(); float y0 = l1track_ptr->POCA().y(); - d0 = -x0 * sin(phi) + y0 * cos(phi); + d0 = x0 * sin(phi) - y0 * cos(phi); rho = 1/l1track_ptr->rInv(); chi2rphi = l1track_ptr->chi2XYRed(); chi2rz = l1track_ptr->chi2ZRed(); @@ -261,7 +261,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e } Track_Parameters track = Track_Parameters(pt, - -d0, + d0, z0, eta, phi, From b14318cfc1ba20fd58621f521698f4c60fb6d672 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 24 Feb 2025 21:43:30 +0100 Subject: [PATCH 27/36] Coding style changes --- .../L1Trigger/interface/DisplacedVertex.h | 1 - .../interface/DisplacedVertexProducer.h | 22 +-- .../plugins/DisplacedVertexProducer.cc | 174 +++++++++--------- .../test/L1TrackObjectNtupleMaker.cc | 116 ++++++------ 4 files changed, 150 insertions(+), 163 deletions(-) diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h index d80f8e17f4e21..f439607395990 100644 --- a/DataFormats/L1Trigger/interface/DisplacedVertex.h +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -36,7 +36,6 @@ namespace l1t { typedef std::vector DisplacedTrueVertexCollection; class DisplacedTrackVertex { - public: DisplacedTrackVertex(int firstIndexTrk, int secondIndexTrk, diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 17a2d4a1bd836..fb2432b7d3953 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -84,8 +84,8 @@ class Track_Parameters { bendchi2 = bendchi2_in; MVA1 = MVA1_in; } - Track_Parameters(){}; - ~Track_Parameters(){}; + Track_Parameters() {}; + ~Track_Parameters() {}; }; inline std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) { @@ -117,11 +117,7 @@ class Vertex_Parameters { float d_T; float delta_z; float phi; - Vertex_Parameters(Double_t x_dv_in, - Double_t y_dv_in, - Double_t z_dv_in, - Track_Parameters a_in, - Track_Parameters b_in) + Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in) : a(a_in), b(b_in) { x_dv = x_dv_in; y_dv = y_dv_in; @@ -147,18 +143,18 @@ class Vertex_Parameters { delta_z = fabs(a_in.z(x_dv_in, y_dv_in) - b_in.z(x_dv_in, y_dv_in)); } - Vertex_Parameters(){}; - ~Vertex_Parameters(){}; + Vertex_Parameters() {}; + ~Vertex_Parameters() {}; }; class DisplacedVertexProducer : public edm::global::EDProducer<> { public: - explicit DisplacedVertexProducer(const edm::ParameterSet&); + explicit DisplacedVertexProducer(const edm::ParameterSet &); ~DisplacedVertexProducer() override = default; typedef TTTrack L1TTTrackType; private: - void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; double FloatPtFromBits(const L1TTTrackType &) const; double FloatEtaFromBits(const L1TTTrackType &) const; double FloatPhiFromBits(const L1TTTrackType &) const; @@ -174,8 +170,8 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const std::string model_; const bool runEmulation_; const edm::ParameterSet cutSet_; - const double chi2rzMax_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, - overlapEtaMin_, overlapEtaMax_; + const double chi2rzMax_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, overlapEtaMin_, + overlapEtaMax_; const int overlapNStubsMin_; const double diskEtaMin_, diskD0Min_, barrelD0Min_, RTMin_, RTMax_; }; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index f6885f1f2e034..0d9e84d62cb14 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -3,21 +3,22 @@ using namespace l1trackunpacker; -double DisplacedVertexProducer::FloatPtFromBits(const L1TTTrackType &track) const { - ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, TTTrack_TrackWord::TrackBitLocations::kRinvLSB); +double DisplacedVertexProducer::FloatPtFromBits(const L1TTTrackType& track) const { + ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, + TTTrack_TrackWord::TrackBitLocations::kRinvLSB); ap_ufixed<14, 9> ptEmulation; ptEmulation.V = (ptEmulationBits.range()); return ptEmulation.to_double(); } -double DisplacedVertexProducer::FloatEtaFromBits(const L1TTTrackType &track) const { +double DisplacedVertexProducer::FloatEtaFromBits(const L1TTTrackType& track) const { TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord(); glbeta_intern digieta; digieta.V = etaBits.range(); return (double)digieta; } -double DisplacedVertexProducer::FloatPhiFromBits(const L1TTTrackType &track) const { +double DisplacedVertexProducer::FloatPhiFromBits(const L1TTTrackType& track) const { int Sector = track.phiSector(); double sector_phi_value = 0; if (Sector < 5) { @@ -26,36 +27,36 @@ double DisplacedVertexProducer::FloatPhiFromBits(const L1TTTrackType &track) con sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0); } glbphi_intern trkphiSector = DoubleToBit( - sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); + sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); glbphi_intern local_phiBits = 0; local_phiBits.V = track.getPhiWord(); - + glbphi_intern local_phi = - DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), - TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, - TTTrack_TrackWord::stepPhi0); + DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), + TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, + TTTrack_TrackWord::stepPhi0); glbphi_intern digiphi = local_phi + trkphiSector; return BitToDouble( - digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); + digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); } -double DisplacedVertexProducer::FloatZ0FromBits(const L1TTTrackType &track) const { +double DisplacedVertexProducer::FloatZ0FromBits(const L1TTTrackType& track) const { z0_intern trkZ = track.getZ0Word(); return BitToDouble(trkZ, TTTrack_TrackWord::TrackBitWidths::kZ0Size, TTTrack_TrackWord::stepZ0); } -double DisplacedVertexProducer::FloatD0FromBits(const L1TTTrackType &track) const { +double DisplacedVertexProducer::FloatD0FromBits(const L1TTTrackType& track) const { d0_intern trkD0 = track.getD0Word(); return BitToDouble(trkD0, TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0); } -int DisplacedVertexProducer::ChargeFromBits(const L1TTTrackType &track) const { +int DisplacedVertexProducer::ChargeFromBits(const L1TTTrackType& track) const { ap_uint<1> chargeBit = track.getTrackWord()[TTTrack_TrackWord::TrackBitLocations::kRinvMSB]; - return 1 - (2*chargeBit.to_uint()); + return 1 - (2 * chargeBit.to_uint()); } -double convertPtToR(double pt){ - return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm +double convertPtToR(double pt) { + return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm } bool ComparePtTrack(std::pair> a, @@ -210,21 +211,20 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float pt, eta, phi, z0, d0, rho, chi2rphi, chi2rz, bendchi2, MVA1; int nstub; - if(runEmulation_){ + if (runEmulation_) { pt = FloatPtFromBits(*gtttrack_ptr); eta = FloatEtaFromBits(*gtttrack_ptr); phi = FloatPhiFromBits(*gtttrack_ptr); - z0 = gtttrack_ptr->getZ0(); //cm + z0 = gtttrack_ptr->getZ0(); //cm d0 = gtttrack_ptr->getD0(); int charge = ChargeFromBits(*gtttrack_ptr); - rho = charge*convertPtToR(pt); + rho = charge * convertPtToR(pt); chi2rphi = gtttrack_ptr->getChi2RPhi(); chi2rz = gtttrack_ptr->getChi2RZ(); bendchi2 = gtttrack_ptr->getBendChi2(); MVA1 = gtttrack_ptr->getMVAQuality(); nstub = gtttrack_ptr->getNStubs(); - } - else{ + } else { pt = l1track_ptr->momentum().perp(); eta = l1track_ptr->momentum().eta(); phi = l1track_ptr->momentum().phi(); @@ -232,16 +232,16 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float x0 = l1track_ptr->POCA().x(); float y0 = l1track_ptr->POCA().y(); d0 = x0 * sin(phi) - y0 * cos(phi); - rho = 1/l1track_ptr->rInv(); + rho = 1 / l1track_ptr->rInv(); chi2rphi = l1track_ptr->chi2XYRed(); chi2rz = l1track_ptr->chi2ZRed(); bendchi2 = l1track_ptr->stubPtConsistency(); - MVA1 = l1track_ptr->trkMVA1(); + MVA1 = l1track_ptr->trkMVA1(); std::vector>, TTStub>> - stubRefs = l1track_ptr->getStubRefs(); + stubRefs = l1track_ptr->getStubRefs(); nstub = (int)stubRefs.size(); } - + if (chi2rz < chi2rzMax_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { if (fabs(d0) > dispD0Min_) { if (MVA1 <= promptMVADispTrackMin_) @@ -260,18 +260,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e continue; } - Track_Parameters track = Track_Parameters(pt, - d0, - z0, - eta, - phi, - rho, - (this_l1track - 1), - nstub, - chi2rphi, - chi2rz, - bendchi2, - MVA1); + Track_Parameters track = + Track_Parameters(pt, d0, z0, eta, phi, rho, (this_l1track - 1), nstub, chi2rphi, chi2rz, bendchi2, MVA1); edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); selectedTracksWithTruth.push_back(std::make_pair(track, my_tp)); @@ -310,9 +300,11 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e Vertex_Parameters vertex = Vertex_Parameters( x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first); - if(vertex.R_T>RTMax_) continue; - if(vertex.R_T RTMax_) + continue; + if (vertex.R_T < RTMin_) + continue; + l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracksWithTruth[i].first.index, selectedTracksWithTruth[j].first.index, inTraj, @@ -327,65 +319,63 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.p_mag, isReal); - if(runEmulation_){ - std::vector> Transformed_features = {selectedTracksWithTruth[i].first.pt*0.25, - selectedTracksWithTruth[j].first.pt*0.25, - selectedTracksWithTruth[i].first.eta, - selectedTracksWithTruth[j].first.eta, - selectedTracksWithTruth[i].first.phi, - selectedTracksWithTruth[j].first.phi, - selectedTracksWithTruth[i].first.d0, - selectedTracksWithTruth[j].first.d0, - selectedTracksWithTruth[i].first.z0, - selectedTracksWithTruth[j].first.z0, - selectedTracksWithTruth[i].first.chi2rz+0.07, - selectedTracksWithTruth[j].first.chi2rz+0.07, - selectedTracksWithTruth[i].first.bendchi2+0.07, - selectedTracksWithTruth[j].first.bendchi2+0.07, - selectedTracksWithTruth[i].first.MVA1+0.07, - selectedTracksWithTruth[j].first.MVA1+0.07, - vertex.d_T, - vertex.R_T, - vertex.cos_T, - vertex.delta_z*0.125}; - conifer::BDT, ap_fixed<13,8,AP_RND_CONV, AP_SAT>> bdt(this->model_); - std::vector> output = bdt.decision_function(Transformed_features); - outputVertex.setScore(output.at(0).to_float()); + if (runEmulation_) { + std::vector> Transformed_features = { + selectedTracksWithTruth[i].first.pt * 0.25, + selectedTracksWithTruth[j].first.pt * 0.25, + selectedTracksWithTruth[i].first.eta, + selectedTracksWithTruth[j].first.eta, + selectedTracksWithTruth[i].first.phi, + selectedTracksWithTruth[j].first.phi, + selectedTracksWithTruth[i].first.d0, + selectedTracksWithTruth[j].first.d0, + selectedTracksWithTruth[i].first.z0, + selectedTracksWithTruth[j].first.z0, + selectedTracksWithTruth[i].first.chi2rz + 0.07, + selectedTracksWithTruth[j].first.chi2rz + 0.07, + selectedTracksWithTruth[i].first.bendchi2 + 0.07, + selectedTracksWithTruth[j].first.bendchi2 + 0.07, + selectedTracksWithTruth[i].first.MVA1 + 0.07, + selectedTracksWithTruth[j].first.MVA1 + 0.07, + vertex.d_T, + vertex.R_T, + vertex.cos_T, + vertex.delta_z * 0.125}; + conifer::BDT, ap_fixed<13, 8, AP_RND_CONV, AP_SAT>> bdt(this->model_); + std::vector> output = bdt.decision_function(Transformed_features); + outputVertex.setScore(output.at(0).to_float()); + } else { + std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt * 0.25), + float(selectedTracksWithTruth[j].first.pt * 0.25), + selectedTracksWithTruth[i].first.eta, + selectedTracksWithTruth[j].first.eta, + selectedTracksWithTruth[i].first.phi, + selectedTracksWithTruth[j].first.phi, + selectedTracksWithTruth[i].first.d0, + selectedTracksWithTruth[j].first.d0, + selectedTracksWithTruth[i].first.z0, + selectedTracksWithTruth[j].first.z0, + float(selectedTracksWithTruth[i].first.chi2rz + 0.07), + float(selectedTracksWithTruth[j].first.chi2rz + 0.07), + float(selectedTracksWithTruth[i].first.bendchi2 + 0.07), + float(selectedTracksWithTruth[j].first.bendchi2 + 0.07), + float(selectedTracksWithTruth[i].first.MVA1 + 0.07), + float(selectedTracksWithTruth[j].first.MVA1 + 0.07), + vertex.d_T, + vertex.R_T, + vertex.cos_T, + float(vertex.delta_z * 0.125)}; + conifer::BDT bdt(this->model_); + std::vector output = bdt.decision_function(Transformed_features); + outputVertex.setScore(output.at(0)); } - else{ - std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt*0.25), - float(selectedTracksWithTruth[j].first.pt*0.25), - selectedTracksWithTruth[i].first.eta, - selectedTracksWithTruth[j].first.eta, - selectedTracksWithTruth[i].first.phi, - selectedTracksWithTruth[j].first.phi, - selectedTracksWithTruth[i].first.d0, - selectedTracksWithTruth[j].first.d0, - selectedTracksWithTruth[i].first.z0, - selectedTracksWithTruth[j].first.z0, - float(selectedTracksWithTruth[i].first.chi2rz+0.07), - float(selectedTracksWithTruth[j].first.chi2rz+0.07), - float(selectedTracksWithTruth[i].first.bendchi2+0.07), - float(selectedTracksWithTruth[j].first.bendchi2+0.07), - float(selectedTracksWithTruth[i].first.MVA1+0.07), - float(selectedTracksWithTruth[j].first.MVA1+0.07), - vertex.d_T, - vertex.R_T, - vertex.cos_T, - float(vertex.delta_z*0.125)}; - conifer::BDT bdt(this->model_); - std::vector output = bdt.decision_function(Transformed_features); - outputVertex.setScore(output.at(0)); - } - - + product->emplace_back(outputVertex); } } // //=== Store output iEvent.put(std::move(product), outputVertexCollectionName_); - } DEFINE_FWK_MODULE(DisplacedVertexProducer); diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index c2341624a231f..2e0dd14a92cdd 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -135,7 +135,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer& selectedTrackRefs) const; - int getSelectedTrackPtrIndex(const L1TrackPtr& trackPtr, - const edm::Handle& trackCollection) const; - + int getSelectedTrackPtrIndex(const L1TrackPtr& trackPtr, const edm::Handle& trackCollection) const; + private: //----------------------------------------------------------------------------------------------- // Containers of parameters passed by python configuration file @@ -324,7 +323,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_dv_del_Z; std::vector* m_dv_isReal; std::vector* m_dv_score; - + // all L1 tracks (prompt) std::vector* m_trk_pt; std::vector* m_trk_eta; @@ -437,7 +436,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExtEmu_bendchi2; std::vector* m_trkExtEmu_MVA; std::vector* m_trkExtEmu_nstub; - + // all tracking particles std::vector* m_tp_pt; std::vector* m_tp_eta; @@ -507,7 +506,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExtEmu_bendchi2; std::vector* m_matchtrkExtEmu_MVA; std::vector* m_matchtrkExtEmu_nstub; - + // ALL stubs std::vector* m_allstub_x; std::vector* m_allstub_y; @@ -812,7 +811,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenJetToken_ = consumes>(GenJetInputTag); GenParticleToken_ = consumes>(GenParticleInputTag); SimVertexToken_ = consumes>(SimVertexInputTag); - if (runDispVert){ + if (runDispVert) { DispVertToken_ = consumes>(DisplacedVertexInputTag); } L1VertexToken_ = consumes(RecoVertexInputTag); @@ -942,7 +941,7 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExtEmu_bendchi2; delete m_trkExtEmu_MVA; delete m_trkExtEmu_nstub; - + delete m_tp_pt; delete m_tp_eta; delete m_tp_phi; @@ -979,7 +978,7 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_dv_del_Z; delete m_dv_isReal; delete m_dv_score; - + delete m_matchtrk_pt; delete m_matchtrk_eta; delete m_matchtrk_phi; @@ -1027,7 +1026,7 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrkExtEmu_bendchi2; delete m_matchtrkExtEmu_MVA; delete m_matchtrkExtEmu_nstub; - + delete m_allstub_x; delete m_allstub_y; delete m_allstub_z; @@ -1194,30 +1193,31 @@ bool L1TrackObjectNtupleMaker::findHiggsToBAncestor(T particle) { template bool L1TrackObjectNtupleMaker::isHard(T particle) { reco::GenParticleRefVector genParts = particle->genParticles(); - if(genParts.size()==0){ + if (genParts.size() == 0) { return false; } - if(genParts[0]->isHardProcess() || genParts[0]->fromHardProcessFinalState()){ + if (genParts[0]->isHardProcess() || genParts[0]->fromHardProcessFinalState()) { return true; } return false; } -double L1TrackObjectNtupleMaker::DoublePtFromBits(const L1Track &track) const { - ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, TTTrack_TrackWord::TrackBitLocations::kRinvLSB); +double L1TrackObjectNtupleMaker::DoublePtFromBits(const L1Track& track) const { + ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, + TTTrack_TrackWord::TrackBitLocations::kRinvLSB); ap_ufixed<14, 9> ptEmulation; ptEmulation.V = (ptEmulationBits.range()); return ptEmulation.to_double(); } -double L1TrackObjectNtupleMaker::DoubleEtaFromBits(const L1Track &track) const { +double L1TrackObjectNtupleMaker::DoubleEtaFromBits(const L1Track& track) const { TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord(); l1trackunpacker::glbeta_intern digieta; digieta.V = etaBits.range(); return (double)digieta; } -double L1TrackObjectNtupleMaker::DoublePhiFromBits(const L1Track &track) const { +double L1TrackObjectNtupleMaker::DoublePhiFromBits(const L1Track& track) const { int Sector = track.phiSector(); double sector_phi_value = 0; if (Sector < 5) { @@ -1226,25 +1226,26 @@ double L1TrackObjectNtupleMaker::DoublePhiFromBits(const L1Track &track) const { sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0); } l1trackunpacker::glbphi_intern trkphiSector = l1trackunpacker::DoubleToBit( - sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); + sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); l1trackunpacker::glbphi_intern local_phiBits = 0; local_phiBits.V = track.getPhiWord(); - l1trackunpacker::glbphi_intern local_phi = - l1trackunpacker::DoubleToBit(l1trackunpacker::BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), - TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, - TTTrack_TrackWord::stepPhi0); + l1trackunpacker::glbphi_intern local_phi = l1trackunpacker::DoubleToBit( + l1trackunpacker::BitToDouble( + local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), + TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, + TTTrack_TrackWord::stepPhi0); l1trackunpacker::glbphi_intern digiphi = local_phi + trkphiSector; return l1trackunpacker::BitToDouble( - digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); + digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); } -int L1TrackObjectNtupleMaker::ChargeFromBits(const L1Track &track) const { +int L1TrackObjectNtupleMaker::ChargeFromBits(const L1Track& track) const { ap_uint<1> chargeBit = track.getTrackWord()[TTTrack_TrackWord::TrackBitLocations::kRinvMSB]; - return 1 - (2*chargeBit.to_uint()); + return 1 - (2 * chargeBit.to_uint()); } -double L1TrackObjectNtupleMaker::convertPtToR(double pt){ - return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm +double L1TrackObjectNtupleMaker::convertPtToR(double pt) { + return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm } //////////// @@ -1407,7 +1408,7 @@ void L1TrackObjectNtupleMaker::beginJob() { m_dv_del_Z = new std::vector; m_dv_isReal = new std::vector; m_dv_score = new std::vector; - + m_matchtrk_pt = new std::vector; m_matchtrk_eta = new std::vector; m_matchtrk_phi = new std::vector; @@ -1455,7 +1456,7 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrkExtEmu_bendchi2 = new std::vector; m_matchtrkExtEmu_MVA = new std::vector; m_matchtrkExtEmu_nstub = new std::vector; - + m_allstub_x = new std::vector; m_allstub_y = new std::vector; m_allstub_z = new std::vector; @@ -2274,10 +2275,10 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even //Displaced vertices edm::Handle> DispVertHandle; - if (runDispVert){ + if (runDispVert) { iEvent.getByToken(DispVertToken_, DispVertHandle); } - + //Vertex edm::Handle L1PrimaryVertexHandle; iEvent.getByToken(L1VertexToken_, L1PrimaryVertexHandle); @@ -2777,7 +2778,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even this_l1track++; } //end track loop - } //end if SaveAllTracks + } //end if SaveAllTracks // ---------------------------------------------------------------------------------------------- // loop over (extended) L1 tracks @@ -2830,7 +2831,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trkEmu_phi = DoublePhiFromBits(*l1track_ref); float tmp_trkEmu_z0 = l1track_ref->getZ0(); float tmp_trkEmu_d0 = l1track_ref->getD0(); - float tmp_trkEmu_rho = ChargeFromBits(*l1track_ref)*convertPtToR(tmp_trkEmu_pt); + float tmp_trkEmu_rho = ChargeFromBits(*l1track_ref) * convertPtToR(tmp_trkEmu_pt); float tmp_trkEmu_chi2rphi = l1track_ref->getChi2RPhi(); float tmp_trkEmu_chi2rz = l1track_ref->getChi2RZ(); float tmp_trkEmu_bendchi2 = l1track_ref->getBendChi2(); @@ -2965,7 +2966,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even myFake = 1; myTP_pdgid = my_tp->pdgId(); - myTP_isHard = isHard(my_tp); + myTP_isHard = isHard(my_tp); myTP_pt = my_tp->p4().pt(); myTP_eta = my_tp->p4().eta(); myTP_phi = my_tp->p4().phi(); @@ -3050,7 +3051,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_selected_associated_emulation_foretmiss_index->push_back(this_l1track); this_l1track++; } //end track loop - } //end if SaveAllTracks (displaced) + } //end if SaveAllTracks (displaced) // ---------------------------------------------------------------------------------------------- // loop over tracking particles @@ -3306,7 +3307,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } } // end loop over matched L1 tracks - } // end has at least 1 matched L1 track + } // end has at least 1 matched L1 track // ---------------------------------------------------------------------------------------------- float tmp_matchtrk_pt = -999; @@ -3396,7 +3397,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrk_seed->push_back(tmp_matchtrk_seed); m_matchtrk_hitpattern->push_back(tmp_matchtrk_hitpattern); } - + // ---------------------------------------------------------------------------------------------- // look for L1 tracks (extended) matched to the tracking particle if (Displaced == "Displaced" || Displaced == "Both") { @@ -3479,7 +3480,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } } // end loop over matched L1 tracks - } // end has at least 1 matched L1 track + } // end has at least 1 matched L1 track // ---------------------------------------------------------------------------------------------- float tmp_matchtrkExt_pt = -999; @@ -3512,25 +3513,25 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrkExtEmu_bendchi2 = -999; float tmp_matchtrkExtEmu_MVA = -999; int tmp_matchtrkExtEmu_nstub = -999; - + if (nMatch > 1 && DebugMode) edm::LogVerbatim("Tracklet") << "WARNING *** 2 or more matches to genuine L1 tracks ***"; if (nMatch > 0) { - int index = getSelectedTrackPtrIndex(matchedTracks.at(i_track),TTTrackExtendedHandle); - L1TrackRef l1track_ref(TTTrackExtendedGTTHandle, index); - tmp_matchtrkExtEmu_pt = DoublePtFromBits(*l1track_ref); - tmp_matchtrkExtEmu_eta = DoubleEtaFromBits(*l1track_ref); - tmp_matchtrkExtEmu_phi = DoublePhiFromBits(*l1track_ref); - tmp_matchtrkExtEmu_z0 = l1track_ref->getZ0(); - tmp_matchtrkExtEmu_d0 = l1track_ref->getD0(); - tmp_matchtrkExtEmu_rho = ChargeFromBits(*l1track_ref)*convertPtToR(tmp_matchtrkExtEmu_pt); - tmp_matchtrkExtEmu_chi2rphi = l1track_ref->getChi2RPhi(); - tmp_matchtrkExtEmu_chi2rz = l1track_ref->getChi2RZ(); - tmp_matchtrkExtEmu_bendchi2 = l1track_ref->getBendChi2(); - tmp_matchtrkExtEmu_MVA = l1track_ref->getMVAQuality(); - tmp_matchtrkExtEmu_nstub = l1track_ref->getNStubs(); - + int index = getSelectedTrackPtrIndex(matchedTracks.at(i_track), TTTrackExtendedHandle); + L1TrackRef l1track_ref(TTTrackExtendedGTTHandle, index); + tmp_matchtrkExtEmu_pt = DoublePtFromBits(*l1track_ref); + tmp_matchtrkExtEmu_eta = DoubleEtaFromBits(*l1track_ref); + tmp_matchtrkExtEmu_phi = DoublePhiFromBits(*l1track_ref); + tmp_matchtrkExtEmu_z0 = l1track_ref->getZ0(); + tmp_matchtrkExtEmu_d0 = l1track_ref->getD0(); + tmp_matchtrkExtEmu_rho = ChargeFromBits(*l1track_ref) * convertPtToR(tmp_matchtrkExtEmu_pt); + tmp_matchtrkExtEmu_chi2rphi = l1track_ref->getChi2RPhi(); + tmp_matchtrkExtEmu_chi2rz = l1track_ref->getChi2RZ(); + tmp_matchtrkExtEmu_bendchi2 = l1track_ref->getBendChi2(); + tmp_matchtrkExtEmu_MVA = l1track_ref->getMVAQuality(); + tmp_matchtrkExtEmu_nstub = l1track_ref->getNStubs(); + tmp_matchtrkExt_pt = matchedTracks.at(i_track)->momentum().perp(); tmp_matchtrkExt_eta = matchedTracks.at(i_track)->momentum().eta(); tmp_matchtrkExt_phi = matchedTracks.at(i_track)->momentum().phi(); @@ -3812,10 +3813,11 @@ int L1TrackObjectNtupleMaker::getSelectedTrackIndex(const L1TrackRef& trackRef, } int L1TrackObjectNtupleMaker::getSelectedTrackPtrIndex(const L1TrackPtr& trackPtr, - const edm::Handle& trackCollection) const { - for(uint i=0;isize();i++){ - L1TrackPtr l1track_ptr(trackCollection,i); - if(trackPtr==l1track_ptr) return (int)i; + const edm::Handle& trackCollection) const { + for (uint i = 0; i < trackCollection->size(); i++) { + L1TrackPtr l1track_ptr(trackCollection, i); + if (trackPtr == l1track_ptr) + return (int)i; } return -1; } From 00b95db15f9b30fdb0a7aeb39d95baeadac0cfe9 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 26 Feb 2025 10:26:38 +0100 Subject: [PATCH 28/36] Changing model location input from string to relative file path --- .../L1TTrackMatch/interface/DisplacedVertexProducer.h | 2 +- L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc | 7 ++++--- .../L1TTrackMatch/python/DisplacedVertexProducer_cfi.py | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index fb2432b7d3953..58e04f03ed0f2 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -167,7 +167,7 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT>> trackToken_; const edm::EDGetTokenT>> trackGTTToken_; const std::string outputVertexCollectionName_; - const std::string model_; + const edm::FileInPath model_; const bool runEmulation_; const edm::ParameterSet cutSet_; const double chi2rzMax_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, overlapEtaMin_, diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 0d9e84d62cb14..2b3dd51f18b23 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -170,7 +170,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi trackGTTToken_(consumes>>( iConfig.getParameter("l1TracksGTTInputTag"))), outputVertexCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), - model_(iConfig.getParameter("model")), + model_(iConfig.getParameter("model")), runEmulation_(iConfig.getParameter("runEmulation")), cutSet_(iConfig.getParameter("cutSet")), chi2rzMax_(cutSet_.getParameter("chi2rzMax")), @@ -341,7 +341,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.R_T, vertex.cos_T, vertex.delta_z * 0.125}; - conifer::BDT, ap_fixed<13, 8, AP_RND_CONV, AP_SAT>> bdt(this->model_); + conifer::BDT, ap_fixed<13, 8, AP_RND_CONV, AP_SAT>> bdt( + this->model_.fullPath()); std::vector> output = bdt.decision_function(Transformed_features); outputVertex.setScore(output.at(0).to_float()); } else { @@ -365,7 +366,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.R_T, vertex.cos_T, float(vertex.delta_z * 0.125)}; - conifer::BDT bdt(this->model_); + conifer::BDT bdt(this->model_.fullPath()); std::vector output = bdt.decision_function(Transformed_features); outputVertex.setScore(output.at(0)); } diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index bdbdac84386fa..aa33aad17082b 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -5,8 +5,8 @@ l1TracksGTTInputTag = cms.InputTag("l1tGTTInputProducerExtended","Level1TTTracksExtendedConverted"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/data/dispVertTaggerEmulationConiferShifted13p8.json"), - runEmulation = cms.bool(False), + model = cms.FileInPath("L1Trigger/L1TTrackMatch/data/dispVertTaggerEmulationConiferShifted13p8.json"), + runEmulation = cms.bool(True), cutSet = cms.PSet( chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this promptMVAMin = cms.double(0.2), # prompt track quality MVA score for all tracks must be greater than this From 9492234db176846a094da6109162fd78c6e5fa8d Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 26 Feb 2025 10:51:59 +0100 Subject: [PATCH 29/36] Removed unused ancestry functions --- .../test/L1TrackObjectNtupleMaker.cc | 63 ------------------- 1 file changed, 63 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index 2e0dd14a92cdd..215a34b0bb41a 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -124,10 +124,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer - bool findHiggsToMuAncestor(T particle); - template - bool findHiggsToBAncestor(T particle); template bool isHard(T particle); double DoublePtFromBits(const L1Track&) const; @@ -207,7 +203,6 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer("GenParticleInputTag"); SimVertexInputTag = iConfig.getParameter("SimVertexInputTag"); DisplacedVertexInputTag = iConfig.getParameter("DisplacedVertexInputTag"); - DisplacedVertexEmulationInputTag = iConfig.getParameter("DisplacedVertexEmulationInputTag"); if (Displaced == "Prompt" || Displaced == "Both") { L1TrackInputTag = iConfig.getParameter("L1TrackInputTag"); @@ -1133,63 +1127,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkfastjetExt_truetp_sumpt; } -template -bool L1TrackObjectNtupleMaker::findHiggsToMuAncestor(T particle) { - if ((particle->pdgId() == 13 || particle->pdgId() == -13) && particle->genParticles().size() > 0) { - reco::GenParticleRef genPart = particle->genParticles()[0]; - reco::GenParticleRefVector parentParts = genPart->motherRefVector(); - if (parentParts.size() > 0) { - while (parentParts[0]->pdgId() == 13 || parentParts[0]->pdgId() == -13) - parentParts = parentParts[0]->motherRefVector(); - reco::GenParticleRefVector daughters = parentParts[0]->daughterRefVector(); - bool hasMuon = false; - bool hasAntiMuon = false; - for (auto daughter : daughters) { - if (daughter->pdgId() == 13) - hasMuon = true; - if (daughter->pdgId() == -13) - hasAntiMuon = true; - } - if (hasMuon && hasAntiMuon) { - bool hAncestor = false; - while (parentParts.size() > 0) { - if (parentParts[0]->pdgId() == 25) - hAncestor = true; - parentParts = parentParts[0]->motherRefVector(); - } - if (hAncestor) { - return true; - } - } - } - } //mu or anti mu - return false; -} - -template -bool L1TrackObjectNtupleMaker::findHiggsToBAncestor(T particle) { - TrackingVertexRef parentVert = particle->parentVertex(); - TrackingParticle currentParticle = *particle; - while (currentParticle.genParticles().size() == 0 && parentVert->nSourceTracks() > 0) { - TrackingParticleRefVector sourceTPs = parentVert->sourceTracks(); - currentParticle = *sourceTPs[0]; - parentVert = currentParticle.parentVertex(); - } - bool bAncestor = false; - bool hAncestor = false; - reco::GenParticleRefVector genParticles = currentParticle.genParticles(); - while (genParticles.size() > 0) { - if (hAncestor == false && abs(genParticles[0]->pdgId()) == 5) - bAncestor = true; - if (genParticles[0]->pdgId() == 25) - hAncestor = true; - genParticles = genParticles[0]->motherRefVector(); - } - if (bAncestor && hAncestor) - return true; - return false; -} - template bool L1TrackObjectNtupleMaker::isHard(T particle) { reco::GenParticleRefVector genParts = particle->genParticles(); From 2e21915b3c4f19e2316079df63ff46bdd4caa9ef Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Sun, 2 Mar 2025 11:20:49 +0100 Subject: [PATCH 30/36] Adding hepmc to buildfile --- L1Trigger/L1TTrackMatch/BuildFile.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/L1Trigger/L1TTrackMatch/BuildFile.xml b/L1Trigger/L1TTrackMatch/BuildFile.xml index 355dc8cd5b60b..9ee417b0888d0 100644 --- a/L1Trigger/L1TTrackMatch/BuildFile.xml +++ b/L1Trigger/L1TTrackMatch/BuildFile.xml @@ -11,6 +11,7 @@ + From 49df2721780c4a3a9d41e2e17d6879f8690eeebc Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Fri, 28 Mar 2025 13:55:21 +0100 Subject: [PATCH 31/36] Removing shift in input parameters now that conifer bug is resolved, adding class version and checksum --- DataFormats/L1Trigger/src/classes_def.xml | 3 +- .../plugins/DisplacedVertexProducer.cc | 39 ++++++++++--------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/DataFormats/L1Trigger/src/classes_def.xml b/DataFormats/L1Trigger/src/classes_def.xml index 2652d58bf8014..b006364794683 100644 --- a/DataFormats/L1Trigger/src/classes_def.xml +++ b/DataFormats/L1Trigger/src/classes_def.xml @@ -335,7 +335,8 @@ - + + diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 2b3dd51f18b23..e26b39585314e 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -319,10 +319,13 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.p_mag, isReal); + //Rescaling input features so they all fall within [-20,20]. This reduces bits needed in emulation by 2. See this presentation for more information: https://indico.cern.ch/event/1476881/contributions/6219913/attachments/2964052/5214060/GTT%20Displaced%20Vertexing%20November%208%202024.pdf + float ptRescaling = 0.25; + float deltaZRescaling = 0.125; if (runEmulation_) { std::vector> Transformed_features = { - selectedTracksWithTruth[i].first.pt * 0.25, - selectedTracksWithTruth[j].first.pt * 0.25, + selectedTracksWithTruth[i].first.pt * ptRescaling, + selectedTracksWithTruth[j].first.pt * ptRescaling, selectedTracksWithTruth[i].first.eta, selectedTracksWithTruth[j].first.eta, selectedTracksWithTruth[i].first.phi, @@ -331,23 +334,23 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e selectedTracksWithTruth[j].first.d0, selectedTracksWithTruth[i].first.z0, selectedTracksWithTruth[j].first.z0, - selectedTracksWithTruth[i].first.chi2rz + 0.07, - selectedTracksWithTruth[j].first.chi2rz + 0.07, - selectedTracksWithTruth[i].first.bendchi2 + 0.07, - selectedTracksWithTruth[j].first.bendchi2 + 0.07, - selectedTracksWithTruth[i].first.MVA1 + 0.07, - selectedTracksWithTruth[j].first.MVA1 + 0.07, + selectedTracksWithTruth[i].first.chi2rz, + selectedTracksWithTruth[j].first.chi2rz, + selectedTracksWithTruth[i].first.bendchi2, + selectedTracksWithTruth[j].first.bendchi2, + selectedTracksWithTruth[i].first.MVA1, + selectedTracksWithTruth[j].first.MVA1, vertex.d_T, vertex.R_T, vertex.cos_T, - vertex.delta_z * 0.125}; + vertex.delta_z * deltaZRescaling}; conifer::BDT, ap_fixed<13, 8, AP_RND_CONV, AP_SAT>> bdt( this->model_.fullPath()); std::vector> output = bdt.decision_function(Transformed_features); outputVertex.setScore(output.at(0).to_float()); } else { - std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt * 0.25), - float(selectedTracksWithTruth[j].first.pt * 0.25), + std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt * ptRescaling), + float(selectedTracksWithTruth[j].first.pt * ptRescaling), selectedTracksWithTruth[i].first.eta, selectedTracksWithTruth[j].first.eta, selectedTracksWithTruth[i].first.phi, @@ -356,16 +359,16 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e selectedTracksWithTruth[j].first.d0, selectedTracksWithTruth[i].first.z0, selectedTracksWithTruth[j].first.z0, - float(selectedTracksWithTruth[i].first.chi2rz + 0.07), - float(selectedTracksWithTruth[j].first.chi2rz + 0.07), - float(selectedTracksWithTruth[i].first.bendchi2 + 0.07), - float(selectedTracksWithTruth[j].first.bendchi2 + 0.07), - float(selectedTracksWithTruth[i].first.MVA1 + 0.07), - float(selectedTracksWithTruth[j].first.MVA1 + 0.07), + float(selectedTracksWithTruth[i].first.chi2rz), + float(selectedTracksWithTruth[j].first.chi2rz), + float(selectedTracksWithTruth[i].first.bendchi2), + float(selectedTracksWithTruth[j].first.bendchi2), + float(selectedTracksWithTruth[i].first.MVA1), + float(selectedTracksWithTruth[j].first.MVA1), vertex.d_T, vertex.R_T, vertex.cos_T, - float(vertex.delta_z * 0.125)}; + float(vertex.delta_z * deltaZRescaling)}; conifer::BDT bdt(this->model_.fullPath()); std::vector output = bdt.decision_function(Transformed_features); outputVertex.setScore(output.at(0)); From 276ecb95fae3fd47e9d4eeb7ab7c722bd846d158 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Fri, 28 Mar 2025 16:27:42 +0100 Subject: [PATCH 32/36] Changed tmath functions to std equivalents. Reverted track quality parameter to default to false --- .../interface/DisplacedVertexProducer.h | 40 +++++++++---------- .../plugins/DisplacedVertexProducer.cc | 12 +++--- .../python/DisplacedVertexProducer_cfi.py | 3 ++ .../l1tTTTracksFromTrackletEmulation_cfi.py | 2 +- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 58e04f03ed0f2..ec344da4c528d 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -12,7 +12,6 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "SimDataFormats/Associations/interface/TTTrackAssociationMap.h" -#include "TMath.h" #include #include #include @@ -42,9 +41,9 @@ class Track_Parameters { float bendchi2; float MVA1; - float z(float x, float y) { - float t = std::sinh(eta); - float r = TMath::Sqrt(pow(x, 2) + pow(y, 2)); + float trackZAtVertex(float x, float y) { + float t = sinh(eta); + float r = sqrt(pow(x, 2) + pow(y, 2)); return (z0 + (t * r * (1 + (pow(d0, 2) / pow(r, 2)) + @@ -55,13 +54,13 @@ class Track_Parameters { float z0_in, float eta_in, float phi_in, - float rho_in = 0, - int index_in = -1, - int nstubs_in = 0, - float chi2rphi_in = 0, - float chi2rz_in = 0, - float bendchi2_in = 0, - float MVA1_in = 0) { + float rho_in, + int index_in, + int nstubs_in, + float chi2rphi_in, + float chi2rz_in, + float bendchi2_in, + float MVA1_in) { pt = pt_in; d0 = d0_in; z0 = z0_in; @@ -76,8 +75,8 @@ class Track_Parameters { } index = index_in; rho = fabs(rho_in); - x0 = (rho + charge * d0) * TMath::Cos(phi - (charge * TMath::Pi() / 2)); - y0 = (rho + charge * d0) * TMath::Sin(phi - (charge * TMath::Pi() / 2)); + x0 = (rho + charge * d0) * cos(phi - (charge * numbers::pi / 2)); + y0 = (rho + charge * d0) * sin(phi - (charge * numbers::pi / 2)); nstubs = nstubs_in; chi2rphi = chi2rphi_in; chi2rz = chi2rz_in; @@ -95,7 +94,7 @@ inline std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t p_vec *= -1; } if ((p_vec[0] != 0.0) || (p_vec[1] != 0.0)) { - p_vec /= TMath::Sqrt(pow(p_vec[0], 2) + pow(p_vec[1], 2)); + p_vec /= sqrt(pow(p_vec[0], 2) + pow(p_vec[1], 2)); } p_vec *= a.pt; return p_vec; @@ -127,20 +126,19 @@ class Vertex_Parameters { std::valarray p_trk_1 = calcPVec(a_in, x_dv_in, y_dv_in); std::valarray p_trk_2 = calcPVec(b_in, x_dv_in, y_dv_in); std::valarray p_tot = p_trk_1 + p_trk_2; - p_mag = TMath::Sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); + p_mag = sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); if (((p_trk_1[0] != 0.0) || (p_trk_2[1] != 0.0)) && ((p_trk_2[0] != 0.0) || (p_trk_2[1] != 0.0))) { - openingAngle = - (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / - (TMath::Sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * TMath::Sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); + openingAngle = (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / + (sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); } - R_T = TMath::Sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); + R_T = sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); if ((R_T != 0.0) && ((p_tot[0] != 0.0) || (p_tot[1] != 0.0))) { - cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * TMath::Sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); + cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); } phi = atan2(p_tot[1], p_tot[0]); d_T = fabs(cos(phi) * y_dv_in - sin(phi) * x_dv_in); p2_mag = pow(a_in.pt, 2) + pow(b_in.pt, 2); - delta_z = fabs(a_in.z(x_dv_in, y_dv_in) - b_in.z(x_dv_in, y_dv_in)); + delta_z = fabs(a_in.trackZAtVertex(x_dv_in, y_dv_in) - b_in.trackZAtVertex(x_dv_in, y_dv_in)); } Vertex_Parameters() {}; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index e26b39585314e..0a13780dbe96e 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -65,7 +65,7 @@ bool ComparePtTrack(std::pair> a, } Double_t dist(Double_t x1, Double_t y1, Double_t x2 = 0, Double_t y2 = 0) { // Distance between 2 points - return (TMath::Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); + return (sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); } Double_t dist_TPs(Track_Parameters a, Track_Parameters b) { @@ -99,16 +99,16 @@ Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t& x_vtx, Double float radicand = (2 / pow(R, 2)) * (pow(R1, 2) + pow(R2, 2)) - (pow(pow(R1, 2) - pow(R2, 2), 2) / pow(R, 4)) - 1; float co2 = 0; if (radicand > 0) - co2 = 0.5 * TMath::Sqrt(radicand); + co2 = 0.5 * sqrt(radicand); float ix1_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) + co2 * (y2 - y1); float ix2_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) - co2 * (y2 - y1); float ix1_y = 0.5 * (y1 + y2) + co1 * (y2 - y1) + co2 * (x1 - x2); float ix2_y = 0.5 * (y1 + y2) + co1 * (y2 - y1) - co2 * (x1 - x2); - float ix1_z1 = a.z(ix1_x, ix1_y); - float ix1_z2 = b.z(ix1_x, ix1_y); + float ix1_z1 = a.trackZAtVertex(ix1_x, ix1_y); + float ix1_z2 = b.trackZAtVertex(ix1_x, ix1_y); float ix1_delz = fabs(ix1_z1 - ix1_z2); - float ix2_z1 = a.z(ix2_x, ix2_y); - float ix2_z2 = b.z(ix2_x, ix2_y); + float ix2_z1 = a.trackZAtVertex(ix2_x, ix2_y); + float ix2_z2 = b.trackZAtVertex(ix2_x, ix2_y); float ix2_delz = fabs(ix2_z1 - ix2_z2); float trk1_POCA[2] = {a.d0 * sin(a.phi), -1 * a.d0 * cos(a.phi)}; float trk2_POCA[2] = {b.d0 * sin(b.phi), -1 * b.d0 * cos(b.phi)}; diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index aa33aad17082b..53ebf0807e408 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -29,4 +29,7 @@ Features for displaced vertex BDT: ['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) dv inputs are vertex quantities and trkExt is a displaced track property. The firstTrk suffix means the track quantity comes from the higher pt track associated to a vertex. If there's no firstTrk suffix, then the track property is from the lower pt track associated to a vertex. + +Note: TrackQuality parameter in L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py needs to be set to True to get MVA values needed for BDT + ''' diff --git a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py index d016500984777..e7fd99081761b 100644 --- a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py @@ -20,7 +20,7 @@ processingModulesFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/processingmodules_hourglassExtendedAllCombined.dat'), wiresFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/wires_hourglassExtendedAllCombined.dat'), # Quality Flag and Quality params - TrackQuality = cms.bool(True), + TrackQuality = cms.bool(False), TrackQualityPSet = cms.PSet(TrackQualityParams), Fakefit = cms.bool(False), # True causes Tracklet reco to output TTTracks before DR & KF StoreTrackBuilderOutput = cms.bool(False), # if True EDProducts for TrackBuilder tracks and stubs will be filled From b5b81150d6c082d4fdf8c43cabefe83643b55de4 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Fri, 28 Mar 2025 18:19:29 +0100 Subject: [PATCH 33/36] Fixed non-zero momentum check in opening angle calculation --- L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index ec344da4c528d..306590dd54722 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -127,7 +127,7 @@ class Vertex_Parameters { std::valarray p_trk_2 = calcPVec(b_in, x_dv_in, y_dv_in); std::valarray p_tot = p_trk_1 + p_trk_2; p_mag = sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); - if (((p_trk_1[0] != 0.0) || (p_trk_2[1] != 0.0)) && ((p_trk_2[0] != 0.0) || (p_trk_2[1] != 0.0))) { + if (((p_trk_1[0] != 0.0) || (p_trk_1[1] != 0.0)) && ((p_trk_2[0] != 0.0) || (p_trk_2[1] != 0.0))) { openingAngle = (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / (sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); } From f36f6162982a95dcd5b7acfa6609220e4855ac9b Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 1 Apr 2025 10:43:52 +0200 Subject: [PATCH 34/36] Removed using std namespace, corrected track quality default values, and removed unused functions --- .../interface/DisplacedVertexProducer.h | 25 +++++++++---------- .../plugins/DisplacedVertexProducer.cc | 24 ++++++------------ .../python/DisplacedVertexProducer_cfi.py | 2 +- .../l1tTTTracksFromTrackletEmulation_cfi.py | 4 +-- 4 files changed, 22 insertions(+), 33 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 306590dd54722..778994aee8dd5 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -21,8 +21,6 @@ #include #include "conifer.h" -using namespace std; - class Track_Parameters { public: float pt; @@ -42,8 +40,8 @@ class Track_Parameters { float MVA1; float trackZAtVertex(float x, float y) { - float t = sinh(eta); - float r = sqrt(pow(x, 2) + pow(y, 2)); + float t = std::sinh(eta); + float r = std::sqrt(pow(x, 2) + pow(y, 2)); return (z0 + (t * r * (1 + (pow(d0, 2) / pow(r, 2)) + @@ -75,8 +73,8 @@ class Track_Parameters { } index = index_in; rho = fabs(rho_in); - x0 = (rho + charge * d0) * cos(phi - (charge * numbers::pi / 2)); - y0 = (rho + charge * d0) * sin(phi - (charge * numbers::pi / 2)); + x0 = (rho + charge * d0) * std::cos(phi - (charge * std::numbers::pi / 2)); + y0 = (rho + charge * d0) * std::sin(phi - (charge * std::numbers::pi / 2)); nstubs = nstubs_in; chi2rphi = chi2rphi_in; chi2rz = chi2rz_in; @@ -94,7 +92,7 @@ inline std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t p_vec *= -1; } if ((p_vec[0] != 0.0) || (p_vec[1] != 0.0)) { - p_vec /= sqrt(pow(p_vec[0], 2) + pow(p_vec[1], 2)); + p_vec /= std::sqrt(pow(p_vec[0], 2) + pow(p_vec[1], 2)); } p_vec *= a.pt; return p_vec; @@ -126,17 +124,18 @@ class Vertex_Parameters { std::valarray p_trk_1 = calcPVec(a_in, x_dv_in, y_dv_in); std::valarray p_trk_2 = calcPVec(b_in, x_dv_in, y_dv_in); std::valarray p_tot = p_trk_1 + p_trk_2; - p_mag = sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); + p_mag = std::sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); if (((p_trk_1[0] != 0.0) || (p_trk_1[1] != 0.0)) && ((p_trk_2[0] != 0.0) || (p_trk_2[1] != 0.0))) { - openingAngle = (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / - (sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); + openingAngle = + (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / + (std::sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * std::sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); } - R_T = sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); + R_T = std::sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); if ((R_T != 0.0) && ((p_tot[0] != 0.0) || (p_tot[1] != 0.0))) { - cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); + cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * std::sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); } phi = atan2(p_tot[1], p_tot[0]); - d_T = fabs(cos(phi) * y_dv_in - sin(phi) * x_dv_in); + d_T = fabs(std::cos(phi) * y_dv_in - std::sin(phi) * x_dv_in); p2_mag = pow(a_in.pt, 2) + pow(b_in.pt, 2); delta_z = fabs(a_in.trackZAtVertex(x_dv_in, y_dv_in) - b_in.trackZAtVertex(x_dv_in, y_dv_in)); } diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 0a13780dbe96e..a6a3b07ba7d2d 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -40,16 +40,6 @@ double DisplacedVertexProducer::FloatPhiFromBits(const L1TTTrackType& track) con digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); } -double DisplacedVertexProducer::FloatZ0FromBits(const L1TTTrackType& track) const { - z0_intern trkZ = track.getZ0Word(); - return BitToDouble(trkZ, TTTrack_TrackWord::TrackBitWidths::kZ0Size, TTTrack_TrackWord::stepZ0); -} - -double DisplacedVertexProducer::FloatD0FromBits(const L1TTTrackType& track) const { - d0_intern trkD0 = track.getD0Word(); - return BitToDouble(trkD0, TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0); -} - int DisplacedVertexProducer::ChargeFromBits(const L1TTTrackType& track) const { ap_uint<1> chargeBit = track.getTrackWord()[TTTrack_TrackWord::TrackBitLocations::kRinvMSB]; return 1 - (2 * chargeBit.to_uint()); @@ -65,7 +55,7 @@ bool ComparePtTrack(std::pair> a, } Double_t dist(Double_t x1, Double_t y1, Double_t x2 = 0, Double_t y2 = 0) { // Distance between 2 points - return (sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); + return (std::sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); } Double_t dist_TPs(Track_Parameters a, Track_Parameters b) { @@ -99,7 +89,7 @@ Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t& x_vtx, Double float radicand = (2 / pow(R, 2)) * (pow(R1, 2) + pow(R2, 2)) - (pow(pow(R1, 2) - pow(R2, 2), 2) / pow(R, 4)) - 1; float co2 = 0; if (radicand > 0) - co2 = 0.5 * sqrt(radicand); + co2 = 0.5 * std::sqrt(radicand); float ix1_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) + co2 * (y2 - y1); float ix2_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) - co2 * (y2 - y1); float ix1_y = 0.5 * (y1 + y2) + co1 * (y2 - y1) + co2 * (x1 - x2); @@ -110,14 +100,14 @@ Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t& x_vtx, Double float ix2_z1 = a.trackZAtVertex(ix2_x, ix2_y); float ix2_z2 = b.trackZAtVertex(ix2_x, ix2_y); float ix2_delz = fabs(ix2_z1 - ix2_z2); - float trk1_POCA[2] = {a.d0 * sin(a.phi), -1 * a.d0 * cos(a.phi)}; - float trk2_POCA[2] = {b.d0 * sin(b.phi), -1 * b.d0 * cos(b.phi)}; + float trk1_POCA[2] = {a.d0 * std::sin(a.phi), -1 * a.d0 * std::cos(a.phi)}; + float trk2_POCA[2] = {b.d0 * std::sin(b.phi), -1 * b.d0 * std::cos(b.phi)}; float trk1_ix1_delxy[2] = {ix1_x - trk1_POCA[0], ix1_y - trk1_POCA[1]}; float trk1_ix2_delxy[2] = {ix2_x - trk1_POCA[0], ix2_y - trk1_POCA[1]}; float trk2_ix1_delxy[2] = {ix1_x - trk2_POCA[0], ix1_y - trk2_POCA[1]}; float trk2_ix2_delxy[2] = {ix2_x - trk2_POCA[0], ix2_y - trk2_POCA[1]}; - float trk1_traj[2] = {cos(a.phi), sin(a.phi)}; - float trk2_traj[2] = {cos(b.phi), sin(b.phi)}; + float trk1_traj[2] = {std::cos(a.phi), std::sin(a.phi)}; + float trk2_traj[2] = {std::cos(b.phi), std::sin(b.phi)}; bool trk1_ix1_inTraj = ((trk1_ix1_delxy[0] * trk1_traj[0] + trk1_ix1_delxy[1] * trk1_traj[1]) > 0) ? true : false; bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0] * trk1_traj[0] + trk1_ix2_delxy[1] * trk1_traj[1]) > 0) ? true : false; bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0] * trk2_traj[0] + trk2_ix1_delxy[1] * trk2_traj[1]) > 0) ? true : false; @@ -231,7 +221,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e z0 = l1track_ptr->z0(); //cm float x0 = l1track_ptr->POCA().x(); float y0 = l1track_ptr->POCA().y(); - d0 = x0 * sin(phi) - y0 * cos(phi); + d0 = x0 * std::sin(phi) - y0 * std::cos(phi); rho = 1 / l1track_ptr->rInv(); chi2rphi = l1track_ptr->chi2XYRed(); chi2rz = l1track_ptr->chi2ZRed(); diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 53ebf0807e408..f445948383fcf 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -30,6 +30,6 @@ dv inputs are vertex quantities and trkExt is a displaced track property. The firstTrk suffix means the track quantity comes from the higher pt track associated to a vertex. If there's no firstTrk suffix, then the track property is from the lower pt track associated to a vertex. -Note: TrackQuality parameter in L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py needs to be set to True to get MVA values needed for BDT +Note: TrackQuality parameter for l1tTTTracksFromExtendedTrackletEmulation in L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py needs to be set to True to get MVA values needed for BDT ''' diff --git a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py index e7fd99081761b..7515a7c089c62 100644 --- a/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/l1tTTTracksFromTrackletEmulation_cfi.py @@ -20,7 +20,7 @@ processingModulesFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/processingmodules_hourglassExtendedAllCombined.dat'), wiresFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/wires_hourglassExtendedAllCombined.dat'), # Quality Flag and Quality params - TrackQuality = cms.bool(False), + TrackQuality = cms.bool(True), TrackQualityPSet = cms.PSet(TrackQualityParams), Fakefit = cms.bool(False), # True causes Tracklet reco to output TTTracks before DR & KF StoreTrackBuilderOutput = cms.bool(False), # if True EDProducts for TrackBuilder tracks and stubs will be filled @@ -36,6 +36,6 @@ tableTEDFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TED/table_TED_D1PHIA1_D2PHIA1.txt'), tableTREFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TRE/table_TRE_D1AD2A_1.txt'), # Quality Flag and Quality params - TrackQuality = cms.bool(True), + TrackQuality = cms.bool(False), TrackQualityPSet = cms.PSet(TrackQualityParams) ) From ea1df8324de8c49811ec2106a20cfcd73e51675c Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 1 Apr 2025 22:12:29 +0200 Subject: [PATCH 35/36] Reverting d0 sign change in track unpacker and changing displaced vertex class version to 3 --- DataFormats/L1Trigger/src/classes_def.xml | 4 ++-- L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DataFormats/L1Trigger/src/classes_def.xml b/DataFormats/L1Trigger/src/classes_def.xml index b006364794683..ae574642ceb45 100644 --- a/DataFormats/L1Trigger/src/classes_def.xml +++ b/DataFormats/L1Trigger/src/classes_def.xml @@ -335,8 +335,8 @@ - - + + diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h b/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h index 0939320fad9a5..5d7f021116816 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackUnpacker.h @@ -20,7 +20,7 @@ namespace l1trackunpacker { typedef ap_fixed glbeta_intern; typedef ap_int glbphi_intern; typedef ap_int z0_intern; // 40cm / 0.1 - typedef ap_int d0_intern; + typedef ap_uint d0_intern; inline const unsigned int DoubleToBit(double value, unsigned int maxBits, double step) { unsigned int digitized_value = std::floor(std::abs(value) / step); From 7ec02ec205b8e6948beb397382e6bb7cb67cbec3 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 8 Apr 2025 14:56:58 +0200 Subject: [PATCH 36/36] Appending displaced vertexing to schedule in config --- .../L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py index 33ef24d49a8e1..34ddd5a71b531 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py @@ -308,7 +308,7 @@ # use this if cluster/stub associators not available # process.schedule = cms.Schedule(process.TTClusterStubTruth,process.TTTracksEmuWithTruth,process.ntuple) +process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator,process.ntuple) + if(runDispVert): - process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator, process.DispVert, process.ntuple) -else: - process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator,process.ntuple) + process.schedule.append(process.DispVert)

P{p;lPcQXi%R3E1 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 z z@IJ4-Q{^4r*&gL7zJMO7XU>-S8_yF~`+_lomq9-;k1%{PWG#`i>{(d-lH8FO(Nk0@iDy{*c$9;v(tPd)^wg`M1EcpsPO|%@|Z~ z9EP5FuGtLG6#)bT(*w?|nApT`dud&Tp1?S%mlfSRNQf`k;Ey&NztU>IAZ(Ed$8nj{ zQE92#DRw`_oLYIlnJM>o;bB9ih)rc%GNl`?PU$h`h>5M@D(kGtiN{eQz+ICl>iIRw__gvm5UOR~0$O2qJa0Vdj2fDL7*UpNF6)BO?QFA6 zti_?dnl0S#i3ervD*r-@Tr5OYjanfJZP0WB3z^ub^Y?LxK|a=;uSgvOJKwDX<*I~P zZq*1Va>svdr2{vD7}FA&!muzAUzsv#1CLdLU}Fty!%%iMO)bi)cX%G!9<4SvFtF&T zE3{76p5LO?pQVas&TNB+P*Q8kpN>j# zOfa*ASy5U|*4zR+*Or;sS8MV2fr)gLqaVvk2*e=}&Wk{`C5Nk#Rowtn-NqN`z^+RP zDwY6Qdu{{}G%ARp%2sUI!o~EPE?(+}wQ~3w=x^!%Qj*T&s?ub|ukar#Q|g|PotqnC zWS`?o;ds02VBq80jmvK6v4`&+!0E#0zg0r=*_3}2%j)`-wAvMFfXaTjhq zqX^ff@?@-uFt%rWt?Y7%UX+G2#ozY>>AQt?u_E|=A}<3n(8?LA=2BUNmzbih)fw8o zFJ6UdJEI1VdzK7y~zDo4v{Hl)r7_H z=oxOik=JUFTDdtfvDZ7zt2$taqTS?=7n1`FjVdqeWw%{6GOOadj zW^m9efRq`nRk5zWSkN1%tM={dJn5t+kp+a`$=cr;BDA}8!jru^b(S*OU<0NEozp_O zu&Pv3R{FKP$1Ng(AZWQ(nt4$wSQGFkD-K2=T_l9SN`sM z?W+(0Kg*-wMs#XDDgFsKGO{LMnKo+ZM+AR!MFNwCmoYKMV8~ zi^M@|Uix3FpW^tz%-s3(8I#LeO$|4+0xDCXId=n=ETE+q)JojNr;Vj!L;` zJZ5pdn23;gX2LG`3tWMQ>~>cgxs*m(Vp!{-C6v&G-McA1F}c3X9}oZ28p4QW?I7>2 z)}S3J*%@*abjJcvCocZo`|<}f-K=?@EVA2kgoj^vk@9ChYzEvm5d;p0S8LTS+(Y!~ zQ>XF7p$dXf_A20Mu_^pYPF5M)ZT<2LbMsP$a!pwT*|@KUj=+0*F`nh>)#hks`Q3Ot0?H2E{`?*Lp?ymp~ewK&J zns9{ZNI!#uB*+U?_hHxtINGHF=-LcSo9=FeQ_}SL^jsjDwvVzVXxzv%QR8Yyx&~H7 z&Lg)E>M-XU@JvQSrs(rK8$n!ftq*yf<+lWR2^d?28Cbfou!4 zM_WHoHY}H?71&8>jOP9&IzG!kzI3~G9~oEpT7ykpgpHP!87Z7_4kyJzv%?x?bTtuF z6IykmB^*4^PnDEZGn<{J9{qZL-Q^khSsvMKZn_orT35^>cT!Ak2$;Nu)<)j7QiWB0 zx(XZ3)pDBItS)mvBVi|Hs6>w-0~^~AW=)-%BC9jOr+*+<7()3~6UD|zhIl1HGBFJG zoMuHO$7;{?@~VMNdyGz~7|T-*1YHrsbVdFdRA@NO(}o(K&hy}d|WT9#LY3&Byw1-4hDE7o&>&; z#gl-vOl{g^SNXPyj^OUy=Q#4dy#f^>i+ql`UH_)I!dPf-9K9&}_}6#FhE+q)(NQ6~ zqDqpfyB-@^#wyrfxORKIk>%>HV!Go?)u9oXe=ElH1WC)8A1qd;q)0X+_`gu`uV-;I zvqkH+P-;p6Y2NR(5SW)1?&-$2j6<&7>W)o&LB)^q*9gG_1hI%o%c#K#Rl1*$QZ3ytc&#@&@hi} zm93(hOIZK$48*v(D*J zc2{L(7E6HvmB9NH8{YYB`DCic4 zo3f`|W0t5*I)V#)XFyMinB<9BThO}dduk9(hVcjtF?%Zcvcc#6(D)mvEz?j`&HF6Y z*vPd89OyKD)N}y8$KhtytDDti+v^dK1~)lP34QA$v&OBVcaAw4S$>l=%4hh}pQ2B> z)(*-3l3gXJ!A1(A^yHH(e(+pbh!|FPupF6LwhSfy>v?V3rFK1v!Vb~1y7a4E^sy-| z(S0FCvj<*$HsFU1)A~F5ux5RV8d*ZsI^OKb-Y{BM7UIUYFl@;qW~UgeEA+Y=SpOtW zMBcNj2rz!$&r_@2O?>ii=!}_3nBVoXZyenyyG^eFZgT%IlxG3_zFHhu`w^nDHlgq| zDLxg!{W|}kCh!JBkOb2+e|VnAi+3mlz3iR0)#qCqtu(& z1rk@>-Mw&97BgFYswJFr9q0Uqm(wNUQG%Zl!x6M-%h@2EA?0XS`Z)^$+uo2W@!8@P z6zLQ`2<{&`$%{RHfJM5Fs@CM3l(l?)tj)7k9!Ay1{LM14 zq3?UC)})o^M)7@6g3rIHm5To-x6OnY+>zVERT6>A`**nqT>5t8(a?Jb->0o0NS2?k z7}=n0-asGl54j#80Cqejp^}YQ(D(H#8g!Kr8>IrX&>1Xj;K_tF-Z>>bmC_+NB$@~#Vnmhd zlcZJq@G7G6ca&ppyw}7Hu!BJx)P~=ZyS|k zmq!jW>-XTSk$nmGr!9T=?^OynsWjxR)K~gUm2nyAxDl}lW){JfPxLyV3NEU$W~$`# z6zd`_$i?MBc}K#|px02}I)!OcalCG3jypyIU+-LI3*45jgJJmC_koIPL6A^`vHO** zV~&NFM%UnA!EL@t4W-T{a$N(`BBJIlYg<~dct}d%9d`r;HHr<2gz9E?v$b_f$oDCo z#*ir1@OC3y7*!M>tOX06P=JcjIRQ+z-0Jb#eFnEEh^m z_$+$d3ZYyHUMdE|p;H}N)rV!jlZ+C)3%oeeSS6e$<_xD?wVn9V#DrF*3nLCNktAoW zIrr#(a4ol)pMo`6@ZGt1fTAkg$Y^B0hf0&7@V3@bIrajU+I$CVICqiOGvZ~PT3k<% zBWDE)5@=4Q)JkT_h$HGJF;odGEgJ>mANNhxk&1swW2PZ^&wi*bdWQI{EJ^u#ppab{ z<{Uy{vAJ$`M+uj36EpKU<#>P}(5Dzwf<-ZZrpYC5n*#(t=3423_Rm5i4hzr7*;sR) zRMygrW!v7R4g&PJ0O z)`s_pDMmB0?g{f^lS;maMLiuv)l1www~vl>jV57jujkHh-P4n`{#u{bqIZ0hl)ZWSBpcmc?#&_9ngw_+8d)!PVt79<#%jTWoB9V0y1{)J2(=odqKm>6 zvqe>D#cU}i)Bx_PtOReQQ!+F0U|GC3tcW^D<{w5)1kuR-GnrLp+_{zV zr?fI@Afi~2B^-hA5%|N;^6)+sOpy-eM%kxb@o?{7RI3u@PkIBhTM&t>M06~7f8wGv zu_kH0DwuL$cUWoVpKPA&!k28cEsM!6089H-(0Fzjy#wd&PCS9_wOgdsHpdwsH2%7k zHJcorW`9R8rC%A$tl-c|@Rf{2sHJ9IPHUnzbJCSSAlP|+7p((_a<}39T67WGBVshI zu-elW(#kn=b)w3Wl9$qV`TISk@`_8s{Ci9TdVb&RL0MB3flc&U+qw~*X75o{w*JmJ zHj*YS_jDPvn^@#7X#r!IHEiNb$#x`+P9jVEH?#5KaRUaDG~5mYke3) zORHZ8V5HpTpo#jUn-roWd<}r@I$X57R4;l%#mdKcM8&pCnT*YLZdSG?PIqN){tWiS)ps(>e05X5(?IF9aCG$>W5mm^>)f9`TlSqn( z96}hns1-BMJ-H$V@xzSa24>Fr4c`J+dYAm@2a+}fA|`^K{PEPymvxZciFRceL`#TB zA<@O)r+OrV^jV>vY1L(F1I7Q)DoH~*lfMxKsTaP{z>ab^&e|ilf`;rstw)^D_-muF zu}bdzc~ki(c-Trf%r8gLr>gbfl9mS?6s`(O`O~*(w|)1XQvm}T zNMCXvemUc$ERan{8hHS%r6)(b<;DHjZ?PIXK6@pF>%TD%?N^GDN?Yq3*TZl|%)l;w znF5|2uT!LL7h;OhY1H9%y|o9iF4NzQ^Lj%WpSUIuu<*Eff*~Dl=^N+*dU8wyKH$m9 zvD3}Xl(jwg2O(~JZ`kFPh(=~h*@K1SD3-(|Ctp^0M*{cmHm7~dly=tkP!V;yA!3L$y3z{kl_i>j2#fVxK4b`n^s+far%{s4)^DIuTIRfkA`*1|rh!#R zZfk{;btz>M4hIf=XD}0n*3ZjKhoDQvu^=j7@Z}7}s0414Qp$={)CLcC(J=pD3Szfm zX)ZY(C0do@It`o!oq5EBtNb*+Yg;Hv`USW>6I)X8g}ifm1J1Oo4^IAN%0bx;kp2EE zh*dtf@9Nbg{w@AF3Oj&&0A-J6n^;J)8|A*-v@Mh*HoY|jQ)MUe#QXcb*pap*) z!H`a)S)m*h-z-d6EZ;1Qu{ubtizR4M34RvMl>EbRq+{bGYgyU3bVl+|t<&t_UAgMD z%2aZJc|&rdfwlP>28V<0qY;#%^$II0WV2c|8fpkEYy{6?%x9#`_<4MnI+JO~orYn|K=5;Z>e9fyTy&QdKU5`h@c$ zyoD7Uxoal#GO$wtT4HDEk2vvPNg92U8%(8K38dFkG9Wg61uRD6Dsc2ikKs^iqEb7$Io|54k~nP%r7jb_+;Hxqmbd>k7f& zin{==R{;Epr2aSoyNDh5VD;qGSYD?Q z9nIvO$ThAl09USS)3Nc&L29Li--z8;wy(~1%Bi?aqDqt96um$tMsM-&*0yD|#Gp}? z%q-xiwJD5uZfTs_Rp;S`m5j`f4+SrxpswoNi+_%7`{6wMP3db)o3S{xf{8&oWYi{X z(G_kA4*1oko$ic*slDJ2uxry*+-}2MDUgOYaH5=6>+}hC$IVJlhtgxGIw5L_sX3K* zZDCwotn=sew}6UBA(^!=uh!tcNaDwqDY;JSgz|NGY|Qt(Gc%$?;NJG-JSzDHLJR60S<7c#a8b9uChGW+f%OW+)ajN zEv~XOtN8)}Kg;8FvptAZQ>d3zjOSht{tH`6^#E8B_?@R4yMI*KlLz0xn#IAwiokAq zns_HS(97|Rnomukoc6ncP0`JPK6uB&X6d}xosco-#0>G=s~lz5GbUc*bj&&o>-8&f zgV0kG%RU1xEjqp(EB?^3%8RcsWlxc!>j>cYcQ8mICU#Qk2Uet!>wozU#2@rQN zk>W4AvV(u|{GWI*w@{AKFC)r(y(1noK~dMIs= z{GQm})8)ug2t83x)=C(o4dGKpf8#9!e~X#>q(GeI<&DEiR|Bn$=OPUyWC^z55S0%LQZYr?c_#y(Fqb#2u_s`Ks5h4vM;9m7o_Zefc)-gAA4| z<>ynMTL}S>9dd$S^NKv!vuRU&2+F#6nF)fvRjjQgkUD*Kq-8T3Vc@*?9wYVVp=GoT z4@Wp$6)WEgs5pA@C|@FwCOrm777+mw(#XY&RSA8jvZ^upFinh@Y;BYP_$cKJ?@JL_ zFh`Yz&-M%lZ#MMdQshQ4mDP1FP2pZ1NlQP(57lPD@Fv?HSW`)V2~U^B%+|=dqZpqB z$<)qstWAqFOT2GXS?^2_uuFCzLM8GFV4;Kj}GcGY92{veMLCV&0dag;#pTc+ zMQR@RVl$q`U=&E$i3X5Q@7=1=f>LW$m~R8xj_?UA55AYMwj0O1J2eZ&&H?b_LC6mi zArvaN!qaLPJ2Uba0Xi?<0bME287Dd;&Rwb_-th~Bj~4&&pL-NXR=G<{bl@I62Ysbz z3wA~#9GNgM#(m0bC=Rr2(-M->7WNCBOJ{9sF4)pmXT>m#kdkn?%J+o|E#P9VJ@sUE zXW}wnk|gqfQ4e3<=pZNyk@DP@wM^T0?smI#R}Co51O8swZ^x%K4yHJiROF2kA-{q|1>dA)q$> zKue0i?vrd+#tXR~1u$%${!07R*>8;~8;#9~p!_u3CW}Di%6iv*Hp<#=^p>p#mEBWexJoQ zn`$(6MO(P~SH7K*wdU4oO9r0o@^daU|0f>7BjKOecm@B?6CUBv(2D*ldp2Vj1yOoK zFBZT{{;n~SvWg=NwI@5)x4x5aZ$ES>E4q&y1JNP&2F2XqA?S8KF%1{yWm#s;;8A^a z{%SRsEYYb`aNPU8kT;^Rl`a=%X*(#SdNGCHpHg$Tv^RG3S7r(l9Len#jT*$TuRa4o zeA;5Oguu_l9`EmA<%-iNu|%52l;Fc~@%`v)X4PtOMTvumN6k)YXfcHMf&Z0!p?IaI ziz!H*ZPSr-d17MSFI#s;qqoebAWDKTvq)~gb_4RX6=>-y>#*&aC7)!*xOiRa0+u+R zvN_t$s3GNbveAQnR!+Wrp+BN&5xuM3rFvSszt$a$5^pcFu4pl{#_v zM;V|6T|7ZS(!Vccwt(1uTm9x>iq4gz11^!;-`Fap9MWL>-=WBeSIn&IuWDvyEP22R z2bx$cODiDnqXm34cOsF?AL=%#^*tM7b(i_X69e-*${nd}a7s^vDb|zj>7kLWk8sl% z*E7aWffwd4uGOzv>5AjAnO%&mN827$-W|SJ8R{igoP#kgC`w|Z>Jh0`i*lu71Ycxc zFIItaRpZGK6G8Q(2hOz#%?xY|EwvDIwiVhzI{#q?IvW30!Vq?yC2F<+`=%jhN7aBZDWlgxRka0y%D$)9z zn`lz-H+<_*)gqP{D5_nYNjcDJ@-&S2yt13|YI>4*6nhST4ny-O?__4B?_*xj;Lzs# zxT~_BbhzaO_s4V{sT01!jbb`T4rd_kKP$q>s&BYWQCULj0?-1S)3>78^3O7T+A_pA z?m8H=RonbPmHTXfB&Bc=wE+t+Rwd$viE!W`2bB8rx1$fcy=E^izW26G4je&H*^E@S z3KP%LWa=8MdY5#0L5VL9!l3HVdIJ3V_(1!hYX}t(I2HCT6~ja7FesWLDIO)4PNhjD zcCBj3-P`k*R&~GRPS~JH7_KQhxD&;=yr)Vpz|qw{-w->0URtfz1m;4wR#H{%NjE-% z1WWOol%t*$WTO#vs!YNhkW};@mCf#0+6$MpfJ<3H1>76Q%i?EwxVL$tvd&p=!BcG1 zWR0u#1>s?!gV=>GF6ag~-F4@;K~X9!Ek+%3N&Qq9AMGx~>J^J>*D; zG_Ed>V)&sm!S88zZ0>BE#%xHFtFO=T7tE%JI5<6YF2iz_LNEWF@F=^f8?>ir!D z`;(opzgjU0TWX7&!1{X%Hh}O~3pG?amT+?$8v=N3=oyw>WSttn-uhVcRF#0dUTr|q zoQ2A9gO9Q4x#e9))$o;MYMM0^%SgY5k@&dnTDSl)zS$P>uJJcTwqb z9vb>rzoj;hWWzn#IHy+{LvO2Ir(NL6i5--y&abl?nJYhp8Mna^a2^}Y%>StqtcbkF z)-LT!IS|6=Zs#5=0w}7&b+DrE_|6S6n1-F88Or9aQdcq0#gHa^C2bXZ^tfb0RywRV zvv$K~d$Lc3tY4X>Ci5M!qLTN3V&mayrz@^Y*7l-}Jm+;;FE)AOcv=w?I^CeMb!vdG zJM92ZPv*Y@+bd!Tuq=8hEs-$Xfr@qddv5L1U6HpB?KI-E-?{lTI1opFZBkl9F#1qn zpN_Lt=Ef)b#^J}o(5v^9D^cS7#B63Z&j$*X1p&wRV`K)(T8ZZQ;T3jwaWo6-TZ&44 zu$*+fu2qlXTDMsL@(N``ELOH~wM@;6t0ux4B5ulyC5e>e!Y4&(Qrwj%7;>s=UEDSc zm_fP1nPAF`66$1?E#Z*HhCr~5$G_iSpZiR3r}V~q(|EJ?6Zy#RaSg|=`GAst?rl0w ziehW`z?)S3(;orckfJB;OfO2Fd}j7OH`Eyc@?_?g`WBObG8>0Pr?P8DZ zexF%WKXe2)*&53IS~VZGLsBqMtT_9cws~McAIiq$D|}UipXCwI9@bhVPK+uCquEH_ zT2sPDda`b1d#bDu{|t2C@u#Kal)LzdM|PLqCCX#$!AqwR{kzFmibdcXoTU@=)4b`l zD*5Yv7`NL_ETs}^0xmPZSf#;h&}f_Vnf6_8*$&dTt}7L~S@dUI9$q~=@bPQZTyHjo za~eMopbJx^S~^Gs%+4lWC9<#D zw6W(XD)@OITKA`Xa7ynVgQI13OE++dZiZ1=jCwlHe!d-nS>%cbca1P-6mt~32uMc6 z4sRaaz-;L}~j(w6GT!dX2W@*$! zG0{+|>rDo>H0T_aQsmY+G7zc|pE@==J*34%u1ASU2KKki8WTJ8tn_~feSbgCz+T;s ziY8SjrcY5;JcJ>%_Un2od)o&lpDI1EBB;B0aXr?cRdyft>^anKVLi%QF}+q1qL|Z= z;wn4;`vN5?LYnHBT{3k*%uH9CPgcq-Ghsu(B}UGnNLQZ!sj`0eyCJmgRrKA1KcRkn z&W;17I#OW-)RPH!(J{xTlQy4scFRf$?c9UueaL3aA4f;Oq=RME){;K{vD6Xp67Yah zdr)Eu{RXeJclKq|3LV1u?2!%{@}F4R9+~f>p>)>7&4G5eCti5mmx2VHsbOYe+`IQa z9}h@bIXYz?rxJ_}zWkQ@^&PDwl}K{~UtZv#!A52`9dB~xi#_}-4|Cz@lWcbnEWggW z)Y38>KfX5F|P-^0m7}J zkDh*@_!b_NfWs<*u0XY8@mR|9r@~7#8l5Ldigi1Fql9}EOcQ>51M0z|G1g*oq?Mev z*5Ve|-8ZedqBgi^zo7QYT~;MUE;l8voe+V0P`RF6EfJ4G!FbdziKUS!CLZsf`cv^A zXR>|l0nRi7?oQ}>7C$$6TnjyJCivbB01bh8W|Pdct0`%JmQVF;bgKlU|`V1ueQ zl2HVmn!rN;O;%3Yg#=Snc3+R!-Bd2dV^D~4R+-&UDy-PLL<_S?iS)R)?ci`L(G1z7IfI`G)fa)xuO#lOr4Vwo2)8%S199D#1uO zYlk)NLi)RDX|YxbFL8-Qd}TWLW={G`ITg0K-V2~VSDpr&)|(a9)w>Wn%g?41xM$r+ zjrjWsOKHaa?YnVD%Y`D8`1elOTP*T?GJU5621984ERV0RkKk(TZ5UOeR1ZXNNZ5*C z6YsWRnaj`j%x}4n($I^Ah4URJGv=8bonmQi2#{o##zt0pC#qO4VQ~?((S7LO9c*yL zI$yU*2snPmn{xHOS!QkJAP@w3R>F|GIG*Bbv`Fgrbys3ZA$A2tiRcRs6yL|f9%l9- zRO&f@|5#TxqC_$u9ZSEcjTposrH!okkN^Z2ksU>%{m;@qlyZa%C4N7NH9OJp*GtQGu`?QE=2#|6s;_yy35{Zo3 z2alYzVCgVT>Rif?SE?oB$OdFM_`rBOmk*`Nyt$Oq^BrnXYW_V(A(_yV)}(_h%(LrR zFdggTePlZNB^&eY#=SRkgpDr`gDJ^-Gcldi9x@dBk{R!*EawdDx>?xZ?W;$EE}STJ zN6WMWshP3&S_6AmAdu1(wb9FA1eSua(z#hBY$~oJyfT_fxno^@nCVT@2Ucic7Amw@ zHb3|_6%pG?6{Tg9<6WsRqg?<}=jcq|aFZNxVO0vy9d?pI^z z)R}oB+d#y>oJ&$wY%FzD+2AwMj^gRndnDk5*(O%^4>wl^@1x&-`>9fEz28?%YMxea z%&cs;888fHNhUWAxUZ4F5mE=&2V`#N2DNoI8f^ScWwYbVETYC$$ z#)mtS$BeRMJ+0X89r$WTzQ^-mp?HdZeO=t$&}4IE+*LMd0_ugc7QX5$Br1>{k8$}l z#_jHq7I5MrhF7s{*556B-NPIHr`_Q&eq@o#hK@U?VHO}A_-LyGe>ao|2eTKO$h%$h zlBgVF!J%u-=h{uBxvyVTFtEA%q^URU>)d974^Dd^$vsDV-LI+f(&1Jz4$tm|)7gpw zrReEk!CFmcZv64sNC_3JHJ&mq;C!>Br64nu9&j;I*8%PaI=cD!A9(h!z%1T1q%+Ro z7qNaly7*6?V^IAy;h=$q-j?dc{;cXHV73%1a7Gisl8nracrAR!R{H1nvMhLY^mhL? z`R-8JU0Ffr6-s4-iBP+ZC~Ve z;>UasCHF@xsd-~mhAO7i5|=~8(Xlx2u_SFdTU!chDJ#qbM2WqE26%#Pi5;1i)3Qp! z0$QDG_gn|#wy@=bM&k}J%jwjfue)tz)B3JLQ2q7IX~yebk{|7ej*F<|qU(L*bExRC z7Fz)~{BHkYq*w$Y?4(DtMKgZWWxdD2(D_r0ZE;2-G}78y$gyyr zs&WO$_z0#K?l-5GaJp6<7myxBNB5j0b=&7I(o$x|;w4_}{IiWJDQg$VS={T9av$a* z9eu5i%!}E55LFM9(?GgjlG?I*JZziB$R1d@FTu)i*q#-b4Cu1OlX-H_kd!`Nw5$>U)0z%kt!Fb@cHSzK*qT%rCoSI3G!eKZwK3%C z#gwkA4eX?=#KwKDjOifGnQ^kS?;$9LA9q&NZb9pLMgpn4yf`g!w@bXqa)XPGMG3rQ zCP-hlh0$chRy_7LuSFSZy)-jLB@iTa3RhX{v{;>FKY^oG;$4mIU1@E+$ip`eTvk(2 zmENN%NRIR1S=hMS$abVyS(x}*E(j|pw~RxeLb*!(o7ac+;cHmo-mq!pSKK4POB{%d zp~5WOG?FG8OdbP<0tQm9&IngMh-4A#Zr`JxtbCCx2KIKu3|iK%*L|2GIRQqG8;za4 zUj;QLhqSde4-P=kj#;usCMt(w^PErQGuVZEs+7yQS{jqZ%=(JjScT&>Vy$th(>cbH z)=ov#jYZD?Dbc;qOuTEAOC`xDQTSv=Qb-GB=J1v4RxyoTq$=(?^O)fRKQ(#5m4q{}hwauhn#C6I-K=D|A{uay* zJJJ92cjDjOCMyvmAYC3a%Q?jX2yB5pv%E;4tW9g0j;~1N8-D_@RYCB*s^`U??1o;~ z?-0HyJ;SsY{OQTfjl5|R_xG6C@oZO6A~1_;--`!FKxNm&JVl9hUBibr-!+$`*VtVpRK6pJ8vk-_WAD347yH{_$3 zg|CKKme#I!IGS*E^qy2h<>Kxd*z@7iyS7_jP*fXTiXl+)pxa(7byH(AYc{+U%~g!q zX}?k;&*FHFNo>|x8&vRIXn!oWn0R~C9*2q*@5E#G=5!RFsiZ-}S8tePQ|R!ot~bjo z4uhA3ua(-e4AdDOKSxKkKy0)lOj<3YQ(S` z^`zt3mVh8YVB}NfmX2bHXmlc($_LziuQA(b>Lib z1m$Y}=~f0-oEtrL*?up;hpi_Su1S+54>_IvGul#}J{adP26$4jyf+8qCdUrg(Mg@c z4>RLud2HsxwcTeWa_5_ZGz2Z~>^A}UG=Er&l?vvHzb%QV&oP$d`nnsjkS`s zoQ$k!r#OjmTd^wx&mzMG-m?zIOo*+-XGC?5mlvybeh4iwGTU29Jb9VBM!a=QPK}V@ zWk%(yFz0*a)Vhz|h$%pF@v}k87B;{M#)yYhgn%qi5;|mn_9fuN!*o>ASOdPKB4a(X=XQ?ekv76727+8SEJS#qP5S6m`;OAg+D|X3r zh6ZrYBt5zH7Lx17Zlv!-?xM|5S2uZgGO}9jcYzoGf@YR&2gZ9lV`la*n6f(aE-q$Ms3K&VMPpYq}ga5$^Z9!*frs2-k|`&~AKBslDG=igd3TtIE_V7o%BX&DJ;q zbfySJDi9p=!D>wW%l30Ft;BH`XM;u*zMik17!L$Ua+;d|k)z`m=uJg?XH?n4m%sj# zD~gHun8p$PVE2xOHPma)bPX<$&n{sd_G;)mjl!~2lpqfgbA=!H*tUQh-tfaia-g=n zOF{>>^gj!TwXbzAIme4R1{6ctW!qvb2==bR%&tV9pw#a3wUCCMm-V=2#&8o3gWud~ zQmx6((vAK+lh67hurcSQ?(&9aR{w(}QD{_E^pbkmJGngz>m!(GqM3gbHtYK5 z-f62?NWQ%SBC@Kvgo#wAfNQiiH{x~|m&Vgn*99nnpZ4H!Tt)JPTsc>3po_Mb z-+6X{S)|mtQ~%*~ZvFk3_!fB}BNWOVg6J67_-E^B4Rzy_x=#1`*=)#-JItq(aau@0zd>9`EXWBX2|oK7mamSQoa7*OrD zeUhsmr6rG;)D3gs-tea?8d;|X#|ad}&+@qOVu@D8(??+t)H7-}LaW-@69=EFYhY!U zrUky>x}L09<@6L)VT0A@Nnja2xjW!&ggPC^UdO|TR~Trw6{5uiNa=-=_+b|ZVN+!r zBG+fku^Jbv41nD>pK$VSB1A<@wNO^lY7Y#({ru_7xjf!`<;<9 zkTjp8Ad5;>rXXdf7NN=P4=SP7T+pfyM+>j*KCH%z zv|6#oCGECg+ZgOWNxO@9wnu=M*}MUkJ-Wx$+VUp0ei`pHHj;_Y4pFW|*u`f}H_+ZR zLmuTt=(R<;mt)be?FlWLlr@8yV0Oxc4IV+Lm24@>!5I=XPMhGGxF@(Zt)_z?8&cvs z`0=@-)#L&=1c*ph50h{p9tqXc?@}yxD{VjJWMIB~@V`vV7`nLL0EEa&N*e$)m z)=*&vwT_lZihbAu*<*-+yJpyQWnP`xd7uE{7Fy%Zc!~F%jHMI~heH)Hs! z)@%y}DSOJBqVLxS;yVQ6VD-K35--*dqoD_vyD?>_pvA^$YxurT1U9UvYji84*(xZKp#RlELwk+W@C9R zFpGz%FePGz#F~70m3cWf$U1ly@M5|19E1nXjYL{QM|Mai>d-$kOl;Y*#S~xd4DD#L z@AW&80l!g*jNNYU3MCP3nw09FfOLhOY40P|J<$NfDA;pIqSpM~r5zzf$dLz46 z@)F=?uc7P)72}G30HZwXbp4;^M4ZJKX9J6jP5@k)Sd|_AI!CK3i>d)=O|})sj4b`M zx>i*E^T${+E_7;6YfYeUd=_$yc54HMbOik0=);BaE_P51+tO&F7fb3<(Th#|VRc=b z&o2znON{-pj$#&H-oQt^h5`m!*^to(mmS32*#9tQIp->0RWw9CoRD)g#tplxW)Jp} z^vRwRLG4VZGBAmT{Q_MZwbC*wMVS)KN`+ciECTMVJM=5PM9|%K*ryw?1_J(gr)nAe zu$%zt_iq-pD=R4}81SM?|5r*L-d9H|;w=sQ)W?f8--lMHIv?zQE`jhj6Yl5NYBFMb zDO!n}{-Lk6@hoZO0Jt=Kwi77+8v-fgxMUZ{*Jc2-XswWX_oZALg5>4gb1Fbu)1^(o zoT9T^np+`O=O}4rQ#`jIL$3%MmdYVGR3b`J)Gz5W@CQ9Va2txjq$WoeH@1@2BFH=x0OWFqtQpfu-NeE!)NoRG9GJ zdC|vTL%{9xmV>Sw!9oeZHcW*gk10bI4&t_fTJX|n!qt}cPzbs2+62&%( zU9BvqQI-el(S>>5qB@E#Ig0i4L{|-gp1bB4>OfB_X35rK&Hx*f2pj0XFvh?ZrvZW` zCs1Nb!BW;@F4BSh%1!p-R-6UWj`2x3;&x*B)7G*e%u00s4QD|f7tFl*x`91ARFvl4 z+I)<*@0I-!rt5*UTuN)lv|FYLM2e|5 zi(PXvQzb!+u{wy`wsO9#`}`(av9qE#+3*RtJJViyvfJKe&1~gMqqPA7pfKxLay}dY zPl<&EP2^p1+09CMj9KV=9jH<5isR&|UUv4+uC}^@93^FQ$K&Lj8p-0aIYC^^u%ra^ zKXIZeu}2ba^}G3=im&XdNSPEQZ@bq7@pjpbtVC*7jc&6yXiJg1GQ&t~iB_X&1Bl#0 zw_~V)B zgEIc-N_|S`v=593f`g&*>M7qz%(~A`9b)XcI-gczLfTVSIZ%%MY5&u}zTF%|-(6mm zpC$!*hZGlJF^@B`j%hK}Uk_`I@OT-dv9n?P7~BLr3(YM`=#ST}S9`LO(XUJ_jNyc@ zo}uKjx~GeGVoXf-ilXu=pb>B*e;Pii!V)r*zjX0OK?Uca5NXAfzt5(KA=(&{O)_7~VtTD#L4 zde}~yak_kM0R#aD4D3-Pr2KwyIwjq^b$N-BQj(Y6IvPdHOZGYU-`kDc_Dm|+EQ_XowOY*)Sgv}Dsf$7sg0QmxRc=Jqgr z1mmpl@%G*-Q<8d_2{lA-z&jfU;^K&<7x~VV?VazGHI$cI=^A>n>Z^miSjiInB)Sbw z4}2!xiP3R{ytjQxj+`q-vuE258Cd0X-#|mYNBcV~L;LB`V)-;S-Ww$;15LfLi+tER zt{LT(m*8c?r1m~6sC728#W=OI%?}N;eWP$;5;=ks&#}u>KNJ2bfhA}SU5$A`YeO8e z$mIM^0^w1v1zpR-=00^LFTNg8btIRQ6h3#a>$(6-V6d5#wYxQ{!CcAlxJ8j?2ppW_ z5B%j{h4#T_^K_@3HFyzLUe9XJ zq!PXIpG#5Y?U@zB@L+cvKr|!`2d9gtcO;dx%|$A$JW=(adG zU?L#Xg3i#2eNyHbMetlj2_v^kcDm*1#R7)H4y>bB^$OKE*FE+l6n`4Ha zok}@9>DW&~Wrh+MGj@fM?Z4C!H|}M=k9rYvnN1imq7&lE7EO-Z1-nsHqTBZ4oBTej zve1kOxr6xkL|`44#@M>lkw*4|a;GQH*EJZ}@4g}Qosu#Or_@GFR4s59j!4^6k*5yg z>cN8P%>+yH9T{nI%qB-ffUAj#KqoYGD6m}QT6k0$s}-W_4-kJ>cdQr7@vhN-l;gd3 zvS=LWST4qg`7k#%;6E9GJqA%~3co8)oS-dTYza<96@U`c%(FZWa@ayt3Zx4+FQ%Wy z{DKovr?GP>s@bK(D7CLUp(rhNfVFJ&tTQx239dkkJy-J@*@*}r`c9BMIXi)|h{dzC zvWWJJf86m{mr`*FqD?liCM;CdR>K$3!M82#VP!|0m5PPFw6=nL=}GHL;}PrcPK1F~ z8XbY4Zrd_y#05$5mG#PcpB_m_`x;-A&d}*q-w{8o3mWfAd>xu0K*VT~b6_OpS!AT< zt`8e>vwa8*$iELAU;Yx3-tPK&CCYltpqNKbE#<><o0x+Ao=NRms)QjC$wY^Hc@uNMvr%D`n#jFzsE;?h zEWWazsEvW^su-D>C(qWx3d4W5zsi2uMl(^O@73Y7UP`nnU}Pm*!knN}3qA@2da_3` zOzKL*ad3w@j)$HxCGhQ|qCM!SXDO9C2sO zgbk01lF~b?ajF*+=WBINv)`7sDJOBwJSqrm2=2!o*+2;?F5M~mJ9~e5vIZO4(_R;| z%*wN%k#pc`)iMmP{fRL`r+Zj-cC(8d*&^*^to>ZGnpw;EnJVk9N*d#{O3{?7b#u{V zrA$^^sbK}I7612sNnv3I3l=u6|6KvwoXw+b+?`QcQ{=jU6`IazpCM^A#&>77YRFgf zNOQ%2!@NPwpH(*1fm>nCO=+uUJ@pe#PTcQRN2>7qox^eu)8PEuJ5zH)-c^IOjO|0t zQ&E#^qh$n^dF^VM+5J4yK+*L9>OMoyHb9l|(L||np-*>pFk9ZayyBgozY~w}Q#-N9 ztc{WN;nv+I)**izP5iJf$Dumc$V_)&+RE*FPk1pzd^ItLfbCRh8qQdc7fUIp$7i*r$yH*E$W%0j5E3M#Dy@YH>2@BB z0=1mXEMnhq464TCwErCp!;(kmPnkVcWnsey&{j}FtR_MWoJR<3EotUU#khbmQ)VKr z+7W1Tr~8*g?*FNK@nH)rP4_OKbr9fPUzPT3X3^Yyt4zSh`xW6d?kuf?LFf14X!rW* z0LjGnST-&)BSij5Gdp@0%Iw0Mg^=V-ro6vGvDn$9Pc7`?$(9F6?cor-iuTym&G412 z-;mFTx$YThV0{Zi@xMAGnj%%OwjiADeT<1Yv4ezExhkzv;|GK1U5~12OuD_BLuC_; z`#uiB;`@>(2FCu8D(m*M2&Ci^iHCQe50r!Y&as%qhqtEh1l+kUU9g>bw*w}nG+8N) zgg9wf`gU;v(7UXrUAcp7zMGS{2nfvQR5s%2Kr5kOIOqvN&aU<8;NelzD*o^zm?i{> zF!5Xd;mKZnwStIuHE%V>dds;XJiu;@2m0PFpcagC>M{4n)@7acOThU&_F0i~RGIjE zi3_4pj3>pTjBINW?|z>C0`({kz`^s=!IdVeACO2p=Z2D%e=^zgve@Xqpc zp}9VBt!UY9+#_Y}T8TBgqa+INB@q=OXt5D@7J9PXi^5dGnqV^BvUgZy4tUD1RRq$` zT;oX)U4{Eg>2kbZ`kR)m#5bjSRd`3o>`YrE`>Epi0W}_gt)mxTyZ}?dr4Y#g0vKrrWAj9@f{F`>~wU33rD{3jQVas*Q z+Kwi(KiylOHL~lw!8xd?!CrH4zG4xIiCH)4X&dS<``Jl$R?NEFI5Bzv#MUXfG?^UCXvjzz`^Nr z`DoVG=M&(fvZ_QZK}dW;6Q{SNSoGSM+aZTN5?&`3; z3OMn2TzE14Dl8dM8EA>wnf4*c-COHj@l@aYf1^c@bF(P|PmMC}=YFi2qyB=cgE;GC2{eW_4$jrCg)gp5Uff&SHJY-TUU zV#??$eS;OkN~(k*Q6e>MK2H|JjaWy|4WYbbJ9mXPPsNqo>L;hISo&&#D}=5>Fr-e&jJL z_hE3~pdyf(tviZ$2SFGeZez+2Bg^&^E>&y80&(Q&%tDA2AZ?Kd;Nh#2tgLYwigHMk>{xUOIsc`4+?Z zErw9wXBD}fkh38kPyTKK`daHLNXu6F5EaB@FnuS0v-E<+X2a!NW_IOQ7_itbv54sK z8p%+8o|x})$Gc`Rv$!_>X$vM7UrDFCoc&H|$y0^g%!DEDH&AdzYo(d)ZXy|VV!Hvo zjd2m^Qcrq_pcDa^qAf>KJJ$+a2(_1Q_5;5Ay3QdA} z$1NQ+c%5hc-=e4`J}mriA{LL9U=#4S)pNx^(^%`We$Ss}6id_mG1vs*Q;c3>WQPG7 z2oBxj+rrQC*zSSaSloRAKPmqSLt1udf)_USqh-6KuR+o8oNCo={UavRjAmnDgBqEH zRera_`Bg&We{5ZKT$E1}KM)HGyRgN?ZefoDOf2j~5DOa{MFqPsuv_dxMMcHBJG&JN z8?nJees=MGcc16(nLXe8{FW!_Y2SFauwoHT%Uy6hs)Y#6q>O&LPT` zjZC=h#!M449BoHY36Yp^n#xx?5ix;ZotHmko>Zp+-OZ#}4wJy?_aRb0%`wV{=Ggb= z56p(2vtSGk=|SoK>SUIab-c~NC!ST|e=@L}LMX^WF% zY5(jSco9bT7-`A>VZuBv7#ELmB31Se>;7erS|R~5umb{ud?||2*kfg0TNSF8h_aotCLgg=YNG+0qkEDDs5R_5wkB_R;$fZA+n29?a{bs zMfeUjfuOl?k3Z->;-i*dj-r7q&sI~d7xArpu~=NT{MLbfL-cAh$sq!0T`FXzSZqQp zI(^B7gIE(J5lr(I**h^N7mTqNo?^lKTnh@>@;q?v_wNOn1sqUakhY;+6ON zoNLFZAcFCcx7*Oy{0FalunB!F=1&1q#QcSV1QpGMA{b&!ERQhr$w4hc%FUtU{M5x9 zo@}{mH0`HXYVy8|A9*a~&T~i3w8mu!yIwMkHhv4erS`-U`-i!+y5(VD}7* zDCV>`%P2@ke&Xi&Rv`7534^$n_wa+B^z{YzDYA*Ay}isd3ex=yQ2pR4+0Cj2&1}@@ zie`fEXYRc8wRtuOUT1GfwyO1f-$3Ia<@sb4l|ZT`JnJjDiyd6K6k8RKn$otTRrl0cgA%mvyW9r9abQIYDrrw2UoJ%T8D-!oWtf{#n= zPPtZ>Hig)l39tPap?EfZMND#IEn55*b#hbSn4?$qY>&L1X>;b*GrX6HO&j&n#B^(T z=fY2U95qd%uT9S{R9|zQ+W=rIoY?=k%dPC;d~~m>=!sPMK-BZNT@+Q{$epy%0@bih zYq{A0ZuSK8Kt82$Vf(#oU@uU1J;j&7pAV8*nNE_thi)&Xbzjr0H?xsGOAXBL6PPqV z`->d?4&&y#s<5bE&sUW)bnIp|PqygOR(xyb2&D2oI$s@YQ{WnVAh4{vE-j?n?n*5v zN>n$cv6=AacZ!3UhpN-R0I}yLnjL+1(6WhyL)^qw;fNzHqPSa9#j?U@8g5{!m5=h$ z!Mb_iyF}Wfnq+9JB6V&ukfP7FE)Q-s-O70p5mT)bO8w!}O@!Sw=lGtS98g}|v!b>OixJga^m^(#p;<3p+3xS3?S;Y)QO^lMbAnKZ|0cuc;z8y1{kEEj8pqVTGz15J~zpv1eDjl{av$}^3pAoi!Q+n%u2Qz zn}R4C_0qtB<9NxE&_7YC_WjR`nOK$Ekna%$LC=( zz4BIyBfOBurmxr+Q(E27{CZZmMK6l4rf+GS+HV1nK9LO6@KYW=mJ~3P*HZb08`#k> zCz>}r8hW0V!=BrBw*)~;sME9@66)8-WNF3c@YW(Qi*MCtZ#1!^Eg#UrgmvymIoPuq za;M+nos`Cp3}-1wvsdtcR%pbhnOR;QyF(-SKCOaTdA$=4#a&C#O|FA5&wYyXB?eBJ zcN=;mTOjWO<|;-uq@X$^3X*zwM$b;&hbmygbSh{Wm4&CBuABcZDKFB zNx&NxTh^^n^8VH$Syk=sa~19@OHsRpOF$v-%ul`?`&tQXyj_e_oX#*J>{$dYTBG)8 zz)AW#c#xOM{d+m!z1Zzr_z<<$B-*072`n~C;KgT{!mC|?prp|l_q+>zJ>v)()7sYu zA+tYXT{&RmK?ByA^BKwOvOB2k+wyAgb_R+?as;QCSwjvo^jJozI_FAo{rHlwI8!#Y zfC7Q97qn;%RrfX6+X;z-zrgl5&Q(Ze+A#&($r5|?tkF9ObB9OPz9zd=tqz*+&3<;e z36gxV(Usgp%O>zG9}2-bYpIX4MDs>U=ySb;0a16aI}r55Dygw6{(YSPR?li$^(ZCP z*GMa3;2bWL2k;T#h?T^D$^zi4gbfdyaT#kqP0?RiSr2fAMJ7UW|BtP7f)ZzqCRc-= zr;84!b+t9;cZy1gl1*#701iLpaa3NS-ETL>ZRSVv8`!|O4qn_*lhPI0Ue9Vm5yZak zY+$YjP8-<+`>bYyx!*YKm1~5u9KVWrJm4i|JS}np1u4|85a!|@zD5@I_lJ=c;8U|U z76dBS52+M^=qe&%#j6^$sNv<-s&MNH+atzhLCNUkx~Mm$3#UxRew@FfXM_1j9^6-I zc!h3?J91dVNhrk%mtvud4cec-+&LRq#uN}dS;nt?M~D9t5B~%S{Y`(2g=N()n3%&Z z7=Hb}Z8NarS>b&$N*-?-f@9wyFbgU7^>~XsX)oWbB!Jny)+UuMzvWItkot@-UM2S% z)o*+j)l!9QHaZI&hFoT%J(Prir4(e5*9l7klF_OqP-ue*VT-OyI`Pqn+iEKaEbn^b zpmxe-sraHC8u80j^psO&z~1YAl6717&6@?h9puUU9{FPozJr0}@EF)i#ieccN*E|Z z7q3e+mK3b)#e9sAxSh^DqHyArq()r)t8=F!BEFyc1seD%j~m0KRa_UIjIL~GNUKBv zF1a7&O)jpE!8`YYEyd?c{;U?>)R=-P`TpSi)U}GFDTW{t+ zPbu*92TN4ogWDS5mdb>g)Zgc8hE5dKyS@3mnH|51~k#IvElk(pOZF3p1E&&-gjOpWZ!Oc&Jv4}&Cc z*aWk&Z{@0IyK=Rl1x(%SL0xFG6+Maqeu7MMCW?1-Yq4yyo#tY)U+g1_YFr&@K2^K~ z_~hpMs}G`few>OD@k2CoiWfBz%&#Y;NJZuM(+RqDHb9luIMDIy!VdXV!|9&|p%g*& z7n0el;Ivja@-%%HMS7iEln5%WAKCG9R7NgKnf?o>LjHOtGka9z2watUSVNmJqciK&+R&(7KTsAI zT|dGG)aaM>(dPImkI*hZDdTAwJxt82-$KezXhX>ssmq7q=UTQoitoD@1$-x2aenOD zN*lnjQ8q7D!LAUkE1iwA;JpLr@&$yGAz5iiEwIxe1{{54Tc7@z1!vndF|-_s%V;|_A{batcs3ApH_``BKI_E%9QKb@gxx0e|y z$y|*sI#|*%XWCyXR)uOlH4($A)ObGxRDQMHz?#{0ryzpH{tcg`Z{ZMTyHyJ{uwi4t zl~&%_WuW|MufiysGfo0|c^uQf2J(aNCzo1{QPGYIRBppR{96%#R&%VLj(`>~3aT{R z%XdO;L`CUY<%|_6(yOimC>w%WvNNVvn;AG{*IEkaWH1=mtnK3wU-S?P=sE;beY4H) zaWB;CFq6W;*8$k(Xgy^s!sjL*0IxD8wV{9_BLR3)f2uA#%XC3Pt^ zk#H}29z8qP+cNURw*~i6SGqXq+J>v2?dVVwZrfcGMY5Z%fO7)p*u0H`$@1qtX7|4jl3>-$-rg zvvr!`Xrpt^Moa`&)UsVLO0gJXf3%0H-%1)OKi|DGk$Tqg-FhWXDi=Du5A$lmPkB6j zC`t7bQ;}MyVju;vIr4NT5g<7){GYk5S|(HpKaaQ|kt4NUbR(!$y$(4x!TvU_&Q>l- zlu(IKV4f4i`CItaz#0s=N`Vt+x23?PpEp!rSIY4n3vp?9iz61asKi0EjU1{%v(ZYf z3&$zWz7Cx!Qjxm*OE-ks=+z6+Jsq)hh;KRWzM*hAV>y$}7MPUOuYcyz)YIQ#qAqMF zdFuR3E=ikPC!CChrGtmOv}t6Un}xmC`-70pZ6k6xKye*c{|=21G`ECgSbd-O4J~x+ zBgCk<;?-1TT$C;JH+E^YdRaEMs(~%<`9RP17OCUOX842vL8@i$jK9L|m;vsp^>-bw zY%Q<&_k6M=zVS;5Hg1?qy?_0WHZLr=+-acsrGJ^cQTMW*`P5q~HA+&Tl{L%wm=sb1 z*BGpQYGeb(Ucs3DyIbNQdpDZn-nG`AY_12iER8F~F+_#oXL;ZTXZZD5rp+R z|EDYcW}{49dW>};$i0UL%NU%W!X>7amRcs^qJgEv*_jA`f>W`y{o!*&)(`prN%egW z2{dW4S7Y`jIX?~RHeuyMT21*|0>Nb0J(L4orA@T5Ki+^Ikkbi!uB*6V#&ZH5T3v~M z6+N$k1AaRpNf6Vf{tkqSy zD2bsV8y$gJI5=7h)1f(*Pc6sVqnT-sJ>URQ@>$ww50u8COp2d1m{>>CZI6fH%f81 zvX&@44EG@H;1NXx`cE;FDObkqOX!r*`+6RX6o*9hTh5u1NOF3L3$O(51_D0cyS{)o z{bnvLeO!Ujtrbf-w2dzd3$Wj_Z$Uv9TpQ~HP{hjoKitGbM7 z^Gs~t)4@j8zNOSq0%Tp4m1kv2j_hn@IC? z39n6COJJUUPU>so22+JA8(Rh!AdeKo2+(*I|MGj3$GugRq&Ze3*k2t0V6#7%jDe%W zvZ+&`p*`ph&Gljv9BF&d6}-51kQn0o>>B#SADxgYpJMth?>6hgi=lvA$S;^r>UyR2 z6r-4@&iwQk3^>Yxqdd zP7f(uP}`>_w&hnnTDEtGa#G?7<6^hjT+_%}Cu7k4{v-`V*P)UiZ2Ykc>(PR33+@Rk4!`_b07rk9;zs#A>4y`; zxnyCC$9Y$ZfF~PQF}In#>Jn}l*muY2IHMSi(fzU$=ENsISJ520h0c`8Tn-pB>E*3s zpCi4KYcA!q?v#d}tf((m?7FRU&;)1K^K?Mu*?maQS`3#o;d7NG6TjoeHQ+@Kf+`Br zV{RKy*2oPefjMK)C?@Z}5bd8}6Di{7GfG1M7i(Gpr+<3=Mx0q5icEYHk9cd?K=HaY z8KQ1rJ-LzN577!+m++mj+25IpC3hjqIw%lK{b~{NOUK8d#|kqaQWTOl9WH(SOe2f& zk20{=?N;bn+dn2T_n& zFV0K&z8CXkB8bzem~c9r7k-xZFLhmT3sAXty-ftYa;v?yCUy1s{(i_86C1cfTG{Pl zVPIP4o{mG4eV%%<2i1e6L7aStB3;)=QV&I8TFum2AN#sOVodu#;?dYbQ)qSSxKQ-G z#49};n{xytWbQtyb3)6+d>shKR3Yzj?r)UY232sx3zdzZi4jr_agZrHzNj7eXTW;O zuHbKGBn&;`Uq1gqpuuz0dX$M`SzBxxUJGFi>Z-Rfu}|FBMZk&2`-;%*jqPAb&E|;s zvEQf2LNCWB;QBOhRI|CYx<*?|q%PU_*1}p$93?J-l{=iu?9DEP7BYi_-)818rY_}R z*x7t$T>HqSTuv=%Fea2Gcm5SW-q(bN>$&ffS{tY3yc^ zx$Txt(CVCO(V~_g$@LU>$ZN;nqaSFfP%o6L#3tFW@%4EQ{U(6tKY~b?BM^dv&)Eyu z%MZJMf?%<6h&}0=W?)OxW}@Mf+FMY`N7XbA0^iT_WNU6?A7^zEDp5<&{<(^HjAHUN z574uV-PgnG)avgu)^EO4BIIKqzN~?Mnd)O9&cAKzxlcl0@(C^@%Cc4cHf0&_owrg< z3I~g8jig8)=G}=``G#MGKOP=sYoFEV#iL=;(|ER|BD9&u4Lut$RqEag8o#H!ydC%+ z`{H43DM^7K-G7e}<2S#F9e;3{q8}b2xiIRSHk(=3>F9cMc+i&As}(4EjjNCSFd^Rw z&#Dr_b*!{swW@pz>mc8^FI}t@<)vuu07^WSyORr7TMhH*sgl&!s5#WRf*}y7YDdBV z(Yj?Lvr;*xyW8E^ldqPk;8l0YL8>R;d=W$UFyA{l6>fnOghaFjjimUOrQCg}eO!g_ zST{T6S%DM#dDb9`;#;(=tRVP4Et>$DwSNe{@dF>@w@Lzrf|NS~MRI@ssWB3NB6Vty z3u@ixI&WDLx_$gcX}oHf4>2jHH~@}|ja}oRD)c+o#lS?QYJ~=#%<+rm3~zeaG$jt%UIBJ*48x&Gr{O-!h^qxN1e6){2M%AJ<3_?UL?FL1i?## z6aN;)6v7pmR{|TeL-!xRYF~0U?vDEfu`FNt+~Bm;y?=824Ktr$XWmPbZ&L0tl!Nu9 z7kMyWvEjkDS8Pa%*JHdoN8cVw(T})^vF|oVl7a+q*+xG-Sl`c46j&rIKX3_$4)}(p z&QKZkV#aPk?BqN6C%f8ClH-zGp3+a{>Lhns*7)1gH$Z*u!_S6m3F$mO&ADwk3~cv@ zth5C+kZ-P~FjD5tF|pZvX4uLH*o7omS2YmvuTd|Ejjz6(rOl{-a0yQs8tt=6c8d~eMiMW1;QX3>p4uw^KP z<~%Dijg|WeTOs8tz1aHg^>qV|3VncOR?Bub?KLgOrMLsI_3;MXe*=%z`~T45Kk;5j zXL()tZ+MXKF0bJ$H%M9=7q>GavXOl-OykdfP(mWd<~>+l{``4N6T$+I(_+;efVnfJ z7Yx{^ub^+}La>#0|D$9k82(4ntgC&t_hQ#vzfi9JOAe&3IqZ`?SU`@`aB<^OuEzb6 z_Gm5bHU2eH8?=!?L~4^VSrE>>cn?gVKl+%I9Ic0~qIo^1L3D1qt}*>4@}7&Hgge`L z&u$Y82M~?gz$p@;^Z`(zc3qb2@^N0ggW#t;idE&s;@3YlO2E{d^BGPJ+9hR8(Q~`(07ZcmI|0&JZC&(haYp4$9{Q-0D z1gQU_^Ph0O3VeJMq}PF0=%-6>7*V29dbVm%rGIEtUMp4ht%sIZ;pe8&2;*CRS$8kS z6@`y1AX=(ewqJ=!8Xwhi7~av^c-N-|qPFj8MGJGQ+;&SF@oWoHL*auFx!lMqEa*?+ zK30>CY-__Wop;+!o+iYF$kW?`%0@2cGu-VF4N)al)~23@o}#_t##RH%P$ z-|Lamt05F|$DMb)$Bw?@Wnfe8NflA|mY)cn)19cGqo~ouM2@nj2Q=4EG&(ySErNZ)S{Q^u2!S}hO0Ej zelO!jYNOGK*NvD6dNa_fmnKcnPYt?9Tac3o*n=v5YQz$kG4{V8I}k;L~>tqCIX zoKQw9WQ8!+xfLeqw5MAz6&zb@$-#mDb{I^vRVjW(?Q1=GXVCC<;UnPB?Q=#pcnh}( zTM2pp2h)M}TBJSf%IO}?mLALDrkJnO&QLCG21Ow9<_lPfiO2UX61a^!yx=!fEH?y* zYrwQov1m}~fAWf6TsLw9PEz|7GZS9EUX$Fw1fj6*=?JxS4hmZx?wzopaYu^JB{B~! zOi0Fy;6Rqm6gx04mcSbQ5b`vGhT zHOSfzyTf0#trVVvUxZiPZ6ckY1*#?oVS@WH743W30|P=sZ|56Ksfl&9(o?Bb72xn= zCzNcR+O<;=ESe_4ZJFNGz{GJvb8bl_5eS~$gvfMh2Sl9GL#i3sGVao_YMLNU;cNV{|whdHM~432Q~&ZrDomF8u6bV1HgsRP$!M zmjO`}++fcM@y~(H$#OVdn4Hsx=D^+^eJzy9I!Vj%y><8C@}SY3u_;CE=reZ}^-vOi zti)bh(W+SeG&uDi->t__dEEQ}{@i;0XJU3S-A!z#PISG~bl@yg0;=19Rf@3*#lJ$#*LH=_6G;T9+o^TT}>7D^`?j6Fh|aRJkg*4|9$#>Vgsa%uL#hx}-JuhM)4dQ+d26b6@hWu7N91 z%}N-vHlsd!vY4B2q}Q^Ee`l}dS21t@-G|cnG&;z{`gNU;t7ohQ6ggb3tO8f~DUb6d zrV+~jCtor0wK)YUB$5b&TL zTDJLHTF`8l_}t#OO%F;uJ$(}Goe^U(F?!ZN?#Y7vRsa>>caEEinSVxluH!7juEkhM z-eflu8b`M-Rq^$n5A+&w_J5_pkPv z0y%8lS@0rsXP#H!vo)swhH0q9bGhUkc)`k+a0NLB6PLJiNaPidos;WR-C)T`%q7ns zNgI~+3P>H~`GrIiyY&O^oyLS5W*Am+pP_~iSCY{--{^`>pXMb?n+b?G@}%V`;xh;* z6Nl8*D|3mKpli2|R!PDqZ0ao#cgO%n!B@1Ev>hTAmdlSJk6-`wLC;=(nS=`KlJz7Z zKFq;lp%R2zowLJ8R)Q{BkXE@J3tp@=bl)-mb-C$)5HX_utO?ET52iER=JwE?tM2Ph z`-_*u9$JJQ-wg&f*ecW9DN>07i^C4WH#z0*YMQX`{$+_FzKJfJJPDJ6D{fP*_Q@YQ z#BEC#IAb+j3gGPArPL|R&cG_Zv4~7QxvZVqS~dkUmu({#MB~gmLs*_)6L2E2gf$E~ciI{$Z&)fvQXaOaK|eAzIz2 z=4vMB6+-4*l%&t}+GrUOafb&8Pi}tNgxAq#cCtb{oDhuvjMs>wv_}YE2#seuf9!gc zEhlkm(;asWfe;fBS=fVpZZwagntlpGn}$kUR#>o=9p$7?fOzU+9XELy4{~_>K zsc?bT5X*%2(D3!XFdkP|1m&S!KHeVFk_MtPd+M1`e(Yn0&;%Rz0fke!B6LZTwKl94 zCggQ**CUo=jAm$pYq80urIFODryN7DiWS$mJB^_xRTx~OmARo_Z2X)AqGhu$-F6);(PMDr-2;| zmHO3)tpzBEG6hw)h^yO|2Gdzts4}@;Nxn=YGpwWtgb_9TS1gKOvJ4WUB8}|1&mz9@ zbz7dFQOdhP_tk3J)S@M=FvHM0?yPVkIE{>zT-WkWaHeqW*0sefFME=AXuFXz6gU;z zs5j1FDlM7Pn&w?}XE9#o^9CWZ3i>TE2T<`F3)gc`F|B24zS%@+L>rG3r2_I$ zmRgQ7>DAm>bX-dltLgaGlNq-6LYS-8n9MbhJpF`uFv=JZvW#Aln@7x5Uq3 zXq;wtm-ZV^&%jK$);*mTM(6v8<`Bn92ODr+L&I|Q<17z$a7<~OwVYhQgNd%JrHX&0 z^DrRg@_kaA)NMuT;!m?E&)aiDm6>}zM*X&ptF#juN(N4mZA##KxI;g+2x#%gr%YTbmj&Lyv}to@6XY%e#EQB`jz!uOfJ8L?Mcg$(sVJ zQnRZ3E#?l?f|_`I&R-d?@?0`^^=Ef>$;R9UXtwyq3jhbi85IOx_HanlP>Fw0$v}Va zcOE!6%D3kA8ZNZ4aKxAT(g9(|qH|JqbGH~rx!T{1bHzzsiC#**M33zLVp2&OoK-di z-0Vl2+*s!xW#Gp+a2G|@nwR6paJ0058)S^6bZs1M#FSBQCIs~}SKN?;9|INHw1?q0 zl)W~UVbs>X*=Y0ucLO}w#GchXSfNbYD4fWVd*>3$cpY;-J!_bVD$(%4fd)3|k#p2Z zu-Q~^S_cBIbrgz~?D^P(HT{u@BSr3|%q(QwFcnK6?>?sh7`^>D{cHn;-!Xr0@v@RDw-@Gs-Y!tzFd z-FMlayR&S)o~!8VnX5q=Xu4MF2OQYpSokp5Nv1<-xolio7;2F zak(iy4B=rxybWGp-UvJ@eakv9m&6s1(C#%EqubAB9y0TRh@bN4 z%8zV|S5F@5OG_A9t{J-W>ActlNW)dfuTDv+0`sn zVx8|yHxaIM&(QB%8U|4GsU^Z_{S~olnxZi4IDbQem&50C8gyqCWKmXZTHz)iJ?Z^s z;7o9K6UB#vg|uG0E3Hr&>Q+nYr((L+>QBr*>0yZ{6z-d5t4(=!=Un|tlC93X6<%IO zSnG@V=ON}iS7|F(%?<@Ccp(lk?8Zj84KL3AkkOSW&2q@;WwTuXf!&L^(65 z&X#AKQ6)v^SqjLP-crsz)B=jabSo$|w-U@cd@bLRHYIPtt0em24bX z2^%dY9{&2GeQ(N|@uRew9?!Fg5)!RCfp>n-HIV+}o4{~cp+{i@D_P(bwlugeyGAJM zYKMOr59e0hD2zc34%(PmedPzmv;>!6ceM0Hs3>;f8`Z9&q-w@*vn1T%Mi|I{PY-bw zUW)hi?VZHhv@=g>Gj?hR8DwfHEKeG7kIL6!g|OD&g;VWm4#W}wr`G#tB07Ghc~9}U zLK>+3FKas~fRm zr~V-FdWp&uvo`%Z&9jL1YSkh1mB!kU7(_nQal@sKpQ%}~+*2*(*S?ZjWYe-kYJ%|I z(Gb+1#OG&oag>+eA{TuY^}KaGuWakp1`4nodT4aliE4RkMoLCD=Rs!D!zMqnD?-&DX(Z zq~uk1JS`;OZu$Wl;TBgZg}8iy$mm^=piUHYF|o>img!o++5f0di&3c~R>UeVskMu35n%y7%b}1{J}j@vSJT{kJe`BS-2f$>m?6mkACY-;*|9 zgjklc35vdVnIE#Ka zos5Q0JYZrXn&h!kSefkj{S_K2@h`08V~#%cI7tXShgnL4>&N@O_u5M+TS$SEB;nXj zsiSwr4t# zW2fX!sjKi7{+K*|`!O$RT{!3#O-p&Akj02~?%E5Qkl$saiJjq^SBp9))P%8}B+GV} ztvmFr#0_a;oZ`z}uJKbIr7mK-A)MDx^PzKTf&f{ZR)!0j(wHfmF^D$k%`FT0A_Bv7 zjzbOLdNAxO1c$*#_54_so)FSG-9Waen?_dC2?~cmAMh0Me3zBTOX;?hZGz%@8~yRo zIIu5A1hP5w+QN1#}rzBI0`C%V+CfrCwZHS1j4|a7^k#6;q z>P3KDYCRH1#>PtG%(L+6@cQG_v{9ke?ghsYl!FXGST)WXeJSISZN^z%=b%-OrQlSG zh9IfAFpR z33e!$ICK1dzTbZ>}xl@}CVB5gIe+`b0Vc z9y+f_g>g5@c5h-#Z2lmN)kVvDy3B2rp~o@qwA$Ux8{y|0=HvOV-L`;{66cP+Xa0Vm z3{~BHhQ5w|g{j_wFBsqXsQ57(OG3(FZf`#a8SYUUJX|z}?Bo-<+c)jzCE7ws-kBuT zZtz5l+xe!EnAeJ~o^8|>au1G zznm0bl_h@>3?rZ9G7?ku7iCwR0LbyAA4rC;0D7)uiq%xZY_qT|9}6Q#?$GIs5ZCRm zqBfM0Evg@O`|fzF-=;q6E2V~{nv}dYg2UKA^wXl5(H`NCVF!smYflT)Vnh>)rA7*t z)SzRdD2Pq-h;HlP90(A;d}<|14_i!Ya+#P83st7Qb9nE;6tf7UH?7277`21;z;IOT z2;x=cMSpq!c`Su{7LZ08<<_+<;Q9Yt*CfK3*d2zv=E`S6jWzMl++MPZhn7kJQh|kE zB^0$gbX#A9i;x@?DmX#?|OxcUE_Oy!E)h+?L;m;|x z>}w^1!Stsmk;)@WSFi76A~Z<-t+LFqf`by_n{i!iFHEH~4?_F2nJqrc_qxS$*`o1L z#DCGa7yrs0gt8)bGQW?6&oN1rEr##yUShX}ucjKv?Lm@yXkOS8&K?gyDEt^624`q; z?SDg4FYm;gRz&wiW;SJ)q(J8$!Zk>qP_o%divH{~V2R7rfHq3i!9|QJ2ZqPAnmUd~ zoXS_%CYsos_D^X!vzg3@d@bcSLJzHJ~ z+dr581Akh!+Aq>US2k39t$z`w>=~BHR|6JzQ;uJQ$+u#c{VMU;2J`=Eo~tV^P}b7J zo}XZ&cw1&ktZQIVi!ntW4>qVE!V_li0(fKS;vFb!x`1&M%gY?WQfidZQl~uPoyKHK zKACqB=OzChHIoE!eT;w;_o6i7cfM%Z`g!f8uSx{~slo9PVYEbIaUOYh<=Q4P0KR4Vr(Bl|HK_;!aPUz<#qpg; ztRgYQzs)u-WNhM;S~Q{Fx;J{(?jlz+IEXkXq5KoC{85$8lkIMiRY-6 z)xsM8_KYJHAYbhZ(1dx_poD1rz0b9rrYg6Q$G^M~I+vX!n8Y($L>pB`)l`(lZNZ1LMY3xV}9PKJi zJQ1Smf{#l@0752udjyxR1$wu0gH#ZgxNfM%!siG+-PMmK#M+Id*?QFA20vbW@u)td241_{Y7YC{3> z-D@VmfWsl`KX&w3fqn2*ODU~L9Xen#zq5J22RnZFuNNCM@(38>VwsT#CRZ?X;5U5F zPsA?igJauXbIBea65&_r55UEC~4v_dK5Boz?uV5`v$ zT#O~be%pMSEhz(D(*_Kn-&*ADK%3Fw;sg^L%C|mJx?&~X*n9-$zf97=3B1FFXe-_7 zW{G=kE*4h?*_@yi*?d|xHM1^{{XN*>j8_rH+iwW%B?4s4c1#pwe+N<4L_+m`@gVNt zXJ8#=2Zj!#Hq&A?%~=Ys@eZg&{FKN2rn@M}>~eZNOL=`%CH`}9F{Fy6x1?kYA!p`i z=>B17??^5Um&|8ollWz*O66#wK@3@F*DMch?x2++8)y&+0r7i;&OfXFUOA5l1j8boU-p2%z;c$yOykH>Bb|KjkxJyCBFSJVfIhukbRM z7`Suz154Wt(3zAg0K3#ZNq8B(WC|_d*s(CJX`EKi{{=ENS0j6UGnz=k>7;J7DUyfP zz=b`fdm9Oe?QUQEYy+$Cr6fEg`&{P*ltL)=S?Njf-Q;~^(zTpsf^S~7$+YqA=XZdo zMA~g{R_)d#npbcy`fhMB6kjWhw! zZ`>b5B-DE)#v|f{`}k z^8CLjKA(>HpiOKBjnDfg(uBHSxa^Ie^7tyGw3q~17#j!vpKson*n$#)YRM1vK$U0+ z#C?XtAGL?mPZ_C1rKkQ>b11+iYnoZDQx*YSe9KiudNtl0;mPh6h2|CSm+Zl=-Cqr( z@sx#>+C?8pLCCy>n^8hma9tZ1@#(lfxuwRMS7Pn{9Y&u=+35=fB z-u(P84Dk=8ve_J*7YG(K14z$OAJsw^ceJN<`lVJA+%~scvcy1#waCxF!16j^hO6g_ zr7fWLJcza4*yI|)9qE@|y@5#IH(V&=f@IwokleQzj{vv#DqWjaxMRJfE=HEeOZSIF z>)RvFgI&o9k^-N2bdjA4lBYnM6$u5Z_n>gq3Xj7pzf{=f{xX-Wmbz+K3kFjSGj8QP z!J6HN{a*VP&7JmIH#|?jm3&yrq=3|kK1CDqcEaEk&iZ<8a(sQaCg6hBm{?QhLE#E4 zuy7y&Y{`#mQ$h>ZLK@x@AY~Is&sE2_Ewg*k0tN)a<1%dX zY5Gm$;B2tueHYXo4i^3H#p32qaYiTpxq;OjG1b5x7ewphQU}@z7qxjnktV(Krl|^z zs7huwRPIf4Jtfms&U3kO-uYL5c>MB}Q}pM(J1k`@nFaH>#%`|nOH8co&Z4w-b%sDX zOI0nf6Si>c@q^3jR@2nmT@Ha~`MzyMX95w0Py%0oj(>xd^AevEBe+JOabRK;oUoMF@i1T$C8?jzma zxFByAK90a@Ie&7dT8=KHm6+v(t#TD+ox)t>oU z&kmoe059rQ#b{9j_(4Tc1o7xnIhXpnXLLA)v%dhiYE>;}g28_!0dm|b%lfMvG6OCZ zX;PqpMSH=prO;@7%*-r6EmNIKf~hse0jH`8o1R+Pjy#xgT*F~ z;{b{Z_d;0+@oZuY3Ivsgga9rg5`;7lD-JSe=VUnKq)3Fq_*JALn|MrEl^4qH zB$RJxFcG+p&G&h*g3C(Kyt=rH6eNLLAa%YFTt9~8F|sYkpihsyR|Cz>d6^w1nJ{%u zPLR0w#!>{OswUC`>ds6u}S)uI1|G5Q^?w%vo8^q*AT~ zT#NpC1Iyf&p$?)Uy}C3jh#*sZwh)iu=ML*xE*>Yk-fGJ(K)KY$0JhS2FjDHLB4U28 zQNQ)MmF%(IP`i#re6#VH5Wphp!L2iV z(;Xlh8=q>mq9yX+23WmYDVjq7FI+H{u{FCr46Mp<7cASU0O|98c3^}JSwlbK;$}*% zeE%ng(1l5gLd@CvkZ=64A zi3dx}jfa*){1XQdV{bv060h}pacL7jHsn=0op?5sR2hK{LmPSYpJ!eY2G+ zma=D|MF&(}K}XcIM-M3D6T-MCZsy}xW0L<9io4U!kCamZ(wkS)nYN{kY*q$;nk{Ce zH2d`8=lHTMgMM!2lR^z{8C!MDvSc+`kd?9_od2C=txZtNDN4i{3R+zm5oq|0vLZoy zbmsm@%4@(lGi$Q9qUDum6SG;81G=r2L;VNu%IH+d;4*?is(QZCijN}@z^}5`_F`pg z`s>-8pE=CTJl_NOoU%})hfA!bue#K9IQI=eFKOUk00}%s#oLOIi7)fqA!j=L<~&2py*w+hKyK(i1(yi)oUdnDMoap_`pk(Y!c}p0AB3W0 zSKy>N7WBMPQgUN%vWpLbxBA(ol&d?xB!xrV9CPJHH;TUVI;o1qtyZJ*Q;{I-^k{Pt{Nh_A=v#0UpW`0#*9m$)Hvr^2>-m)i5Mu`kGiKyQQ8iyJv(a>lf6SR-!_j zW3JlXqA{P@5vzjq_c&{!wPC2PXP>w@t!1kqYn38lR0KerUuU76Va%?IYQ>5uMjC>| zL%j`bo*!E4RXS|B{=@Akdb^lm^mY2HFxqXW6-_$$}ggF6au4QJW{Yc_T9`7N3c7HIW}5PjA!C zMCwH=AnsKFF!u^G_M3t0sd!9O7k&aDY9xf1pS`6?Ci`wn-3tWYGWg+gh07a^1oO4i zXn2CY@IvLX zUn-n}fM2bv-To}TO}sA+A@MD^Q)V*@Z5@Oi+2r050wlBL1G?hE!48NE_T)$uZH3a- zbyZ;LRd$hDq6T>v&^ma`Wsn9{!Fax>met_J@G)vB7e%Ac0)coGkL<_yt>7N_*02FYP#QhAQiwxj@yTKQ3UBvuz@Eu|NL!WyEz+lpCZsz_o2WxH%t#dJisn9&fE6!=# zeQr3rB#dHKEbZst*0YoKCCMXGydy<0>`e>Cj?BrX^7m-QVw&32Gq*vFzHCK`KROon zJ&&19`_dl=J~)5>f3uxeodN6q&LKy<+3$G~diEp(vIzv@(YXckYOmtoucB>mOf~lp zPv%nzV_!=>eQ_66;*u}$48vk1lZd2gC9}Q-6c^p6G z@nZ8l+BbZspd$_OyhuUje(6RDy*csO#O#+!+z)HQ{rZ~KqZ6Y-!_dXZim!l=h!}6H zMqyxU#1qa$(AOe)u|hnx#{#K=jLE*5g6Ir&jBHO(1wAv4pGo0%?)5N}Y$8O5D>wFQ zsFuGgXdA>I}~ahs4Gou)4fIN6VY| z^Ba|iYP<9_uxP4zv0fKDGf~P2wit)rJhyI<3iEL)$&H45mYqsu3C#W(Rw1SoF-G_vC(v|fBZmsp)Yur(X;^lxM~lk(@vAe zE0dWGl>4*DF+K%5HQ8444FE$a^b(HViQBpQ9R9Z=78R)h{ z<7?Ed1HWhy?2;ByHpCznz~WIP_h2h0 z>esF(ZDb8|x2hKIyN8BShF%-y(7GzZ9b*(@+;)ePEO+jl5Eh%vMUD_7A}_Vi_z!xm zjV`UZqb{VSV~0~3!%o3YbHFZu5<4nrdc2HRl;wmYZ*}&~p&+=-Ra) zg?oG9jR%|C7wWnOA_A3ZuiGx5X&(sJdmf0h@41{5*zo%%EywD@(9i3A^rUrQo^_b! z*qa$b$4~pFxY?EKwHl%9bBEDaT#v!nm9r;k-k@9!DYfZA(7Rn@(@kuuS5e%j^eT^u z%g=b=$3nTKS3`f~Q6aPPI%v0LyGx|@UI`_=>vgOtlRsvXIN(_7Zv_^g-FsA|A_to+ zVb;YBKFM+vMEfT9uS-cbm?RAYHZ;zpj51wJRSG9sLF4q-Rc{np4)8i(mS05B@Nz4{ z!L9)|g+cY)flu5O%6S&3MvkzjJd1DXIiYZ9gmP4ZYl(A56ec#jzlk}^LHm+oGZ}J3&sj%kUS)p)xDnYc6%kbGKSukW zz6Eteh_Q_~9FSJ)6zze(&b2G)I#XutpIM{yfCqPH1i%I#}yT;Tqk?%r%hj45av4 zMNVE3?(1LCo?ZVTKs0>f-@3mRA9e8>%lDqdr7^Rc@FvGdvfuH&amyR|H=j&~|Bnxv9&q9>H z1YR#$PEJ6ZkIXRI?}wA_A;y z>{jXHtY^>GLP*uV%^$du@>i=za|G)!RlqkJ8yPQj-IT%x=CKuk1sWyD&OW=y_$GCo6w=Eah1s&73P6yr0Im#3oVzJT$~N z@kq{djM~x~EXZhPY3J9{66tCKsg^^;oe>@VOgZQ{J+=;`>mhVeTOJZ^3ltX(*xDA2~_E=i^D1uwTUt*Mz_XL8{Y)Jm3)@5LlKP)jBUJu zWmdibXw_jPXgOZGV>Zit2fORqx7B+~&{Eok17BUf?vHfm(g=RaBeC>J%HOqY%RN|X z-c>ZOO|Z}9MZ01pZVyzZRaFr1)Lq(E%w?~qtR?N=iEeRFn#_GZ8z=|3K*Y@U^tVH{ z@M%WEaT@|Z@E|BiwN4r4I-`su`^Vv)ox;l}|lRSs|XouPj_u=2R zz#)h4T)5`?23u|*{^{aS*@#sPq{1Fy%~oarSL>~>>c4crB?X#U=F5#KjaOp!wgOM6 z?+RlfKmBcsz_$SWHs4_p8Co;J$m&0yPq9>MU6#J4mq-CM-vTCrrC6~hD6f@}13&ul z<*q;A__vJ9(HXSVmn;VQ?~s4x-7VLG4J>bYXqo~zZ|(}}Kk=%URf^|v)3JHLr+>3q z2mY)#tNT0g2_8RYZ>vY)+u)YcK7?_#G*%z4w!@5W)dvNZ2dlW?&!c?(<;u#mBOxX> zB*wDIe`r`CTAg-LS8)}e`5eY2=RiDWX0WIAm&Q9>4OURiR%g8E0v6!7ipwalUD7N) z3y8+rQ;HiFl&g=dm~C!_5bOERB6hUay2*9$pky7O7qOb;c*r&a_~cwTRC01P+CwXc z&1}1Cg-(TEh72nDdE6!Fb-_qAn?Nu0^9o^|=r@rt>@t+IVf#^h@%l36v{W`Z;$nq-k=XC) zybB$!f@QZaef?>bu0S9j?L94q?g^D|N%(kF@2-U%8?m=TB8;rrqz+&lKW5}@Ui_96 zcPs2mHnWl{Kvow_P`juIqjxWHuw0lh+JWCXgd_0nK1;C#0`Um1Qq9a_OLDpan52cU zBN9rAyT9>QCCTTUm)o;g`inK8d%0eStkB<}HqV0V5{=lK5J}4a%s_b&=zpH6hqE{F zsO+ez*+ASdnATd`1(j$uHA-}Y@nZi&3evMZ^g)42JSt{Ex42Zhje*&$jW##S*%#dE z!8)ywB-NThumEYO!h>>~*}j9^*t&2HYCQO|nZ%k@tga{$vx-;Zxz6mppmQDG` z4}QOu59kJOd7@`t8Mt7GA9+-sKGVqhuiQ_Idbw^P^uHH_>9;(5y4l_v2{s6dlzrgM zzKzd-U`kP6jO<%CsN5^BE*YP{PsWXo38qMymD_5?c4GYDcgo+Sq*GO*g}&6a=T(OWp~tP zSU>vIwTvj;|2eikm>bSTmE04Zn(s(x)WpAH#~}u2-`vmd!=~Q1W-1{Vp(%d~oNqM~ zGbM0;Bj+@w^Y|=1QF!S9xA;^i>c?;Z8L-?tW z;03tIJbo;#*yd9)8f|)5T6wsS9+XvSf#o}&Ehe2spUmwwjzJyW`0X(MEEpHZ5 zXE6v>UkueK=O+A6SbC!C{IfW&BDRCg zj3rPV+i752MsHqchC+AA?9|f0+I@5bA)A>{Zurc%9zm`vd%(nUf3i4# zMNPIiS_^yy$D3f>8#l|s5U+#8RLgM{to3K`JW1;v~mfP2C z;A$S5sD4`_$C)@(qa5xX@qn-+a)i}<0X?OoD^9)DktTDIdgla$3GuIA^$wKA6Mpn^ z;>H}AO)$LBnoaGT|?>p1v*6}we7r}146)~AF@zJ1U4*%zN6Efds33P3UU(lH*7b{k!> zNAoSUjxiw=728vlzN!`5&d6SWIfnDed!!Q-B2~1Oc8#P>oZc3X7fSe2Z=y5s?Qaz` zYI0uvEjU-63AbH~Z+79&X*qB%5X$2y)P_jS{m7rr0^$DtN#e8?w2z4^=h_L_iAC7!pPp?Nu0!Uw=D@ z+UU{5%zkx%wJ~)k*Y5a<3=Qs0*P)cj0=GfD3P1axffy5|*T#!1u{H*5*0aJtrOi_vSNb*Jzuc5F=s!th+B60p zej3Pt2w_@FH?lsr7D$yNMmG@~T z_M|F|fE|2h(-H{;QGKu@@pM2@s3YA<(Ns)Tl-=JMPN@ZqxFc0@*#(&4ST#@BBA@qE z%kei%3L!lDm7j@)6~(MGwfn---Z7`n0VpoujMfUvC^Fj+P~YGNDW@1h(cDnBp~EV^cnCzaP$uUk{}!V_Om>wjL7LBvHFt5fD6kmLm{ zca!D^tJ&JuI}I9E^qaRpkH64o9AX4)v#!KE^|O2tKxyC3=+xG1&b6Trj`_7(8pJ&A z;I`*o>9>0FvC_fku;-v*$=?#~v5QB?pL!hDZo7rmO>9p@CpcS)bM zJV1hXW2eDIGM`jG_LZ?!Tq8)zmg^rZ+x>6QZ!-d+WhK}zG!cf@H+cegm_}{X=6TyT z4;s%}Xd&0x$&UH$91BpShr(e>ObP$PTiTGWNkd~A{Cwrwdq4UT$Kzk-QVTQj?I7& zgeDDfM3wl$>gSUM(*L$?rSXcN@`%nDjCd&Wn6`rtmKQRs zR=}-;rJWGXr9gnJy4cmggr<~jMLsi|zN0V2H$K-#sj|6`lE}7>k7SL;u90>gOaO;p z|4FMUlL-Q@2G`|QBM;WWQ*!HR?pT}B5Osj72hD8o=@yiRF5rNkIn8Z{HsY3|nloG} z<}$4Znh2p{Yq!w60gnsNR9*G!X69GNSuKp?=Cu?!-wc%Pc+bk%L~8S0&6ZOx@BQLX z3v}jsl!M%#r0GV{M4n;O`)}{(6wapSTn^S_F!5uA9FU`iMy?gi&w zz7wo2y!#Xz!skCu*ZY_w}10-wmIqzg&QSi_}Fa*9q#o;=nVIK4u+>bti$D}-& z)CO=VCW(jw_^O>zP1WE;!p#Slam>va14pkR-4X7m6s+vJ>Kox@aS*oBcU-9K$4wC$ z$?c6@X?c$|#pv!k`X;TgHBhid z5V^vU(m-?s`s%kDrcRry_~s3gRDky@q?z#D;Oty?fy^JL2OGh|XX}~sy=jz5=nHgJ z+gj=w6rzbzcieY>B&~?$83R=Woi|?x;}xV;C|5>Is#+Z!<)Qu`Y;yzxzB@PT^)nMm zUAZzBeGM@{Y|M1%BxNXPsa6zUdE-kQsq8!oOdhvXte}?YC#j|Tk73Gvler+xTeF*F zsPOF%O)0~&r#OGv0e80JK2i#-6`|nh!UpD?01K|J0!~G3>I;j*d*KEK7^N^;Hxt=1 zT!rxN>414n!y^7={XUnkF4DHKNMLIr4Obq9!FfrKF*9XfGn)5SIceFskibjM-B&d9 zqvcRgVpTrMJ`@Q89ob}b(0JtBAO*@d}$0}ns)_#D%LBmMURO%1L! zbQNbHxc;)ArqhVHp{p|GpskQ~s;h}09aps&EG+Gyh)8Omea&!6;vPigNo$R-3As`wtRm| z+*~q5&w|y3C!Dlt-O_xDGP8(fWpE!skG@*jc@bYIh%R|LJWM~{qL>}em~j6W3y**Q z->i{lA`*FhmXN`f_d0~U9IGrOx?NDFS>Y%=!8x6gwV1QZgUwvk5>?2th9aGwx-T8{ zJ=!ibFz-hbsWkGoG1H{ZcbAgXp$o`H3F!(A;7KYs4|c6wK^!?A+eDk+T26v3yzr<= zC~L`y7{uz{jzDl|g%{+K1QWHy7uDn6F4a|d1o+GZaOF~FRxJd^xYnzo^onA4uPPg$ zV&Dl5fOSD4O?wKROD1&@uTAX0w4r*|@<0blJYR2&rxMQHbBTfd{dkm?-FhI0g@F9b zk10#HIma<|{Tz z0|{!fiUQ}zrT1iSEN-~^GxOMCCj=OZ&u5;7{%?qF%wF_4oK~iIBBblr z{I-F8d>Ce6=OZv>g`X;pU|th2)>%nPr0SI(I_?`^VbFJNzbCrGK8kr*7uacf@XMwo zmhha44ZyX?dD{9n7nZ=ad&_DAOXVpRQcMJ>5?CA#?_A<;M=|F+Q@RNo@J;|*r&K%l z`}j(@HGg>XNA|TL^)Q!N7;Bbz5O)y|$KW=$;5suaed;ix@3omsSrhogS%7z{0;w~0 zGZ9W#90un2v6zlUiLms$%_O%9pJGIY^}&_x?Cmg#$akeqZ_tuKK0#D;xe#eeA0?^8mQ=%bw%E~iz{#fPJW>e=t0c6V-96vr)iD{Q!rhn2V=Hix7j z3@1A))5O@q1{ORX97qtkQ!U<|4ZnhOhOHCofxov@?QxjKcC5>d<4Eobs_JXkQOuF2 zkvlS73Jl_h@$YU2zL3Dr`f#cdKqcfBwiOPd)f9XK{FL$KWvwjmlQ{#$L8r!NxKv;n zMRk2&ZLA!Q@^Q#cZTZz#lr>?sGJQOOGxK-+(2Ij?{zI}vYqf9GY+4f=ed8hL&9fWp zSsKR8B6jq;0BBz_S$y4UJ&Ufoiq=;bkcNU-fqhMgan3ES8B1d@(zy@8U0{!9!(?Ux zA*_V)Rfrq5?1bv`=9Yv?^F_5tUcNa-p%#jxoJS7r(Pr@>Zh2`x5J-cU&Q?lTiYYa6 zjl#TNNe2(?_IWAEYAFM7{!#_FF?KfVu}id#MhS2Z}&=zkuou}`ZMKUzs# z$Iosi76FrP2WQ!2AmSAO#)^t998Zx}OP>R0<~wp*scPunS2h++W-q4G;UjU_K#8os znpP`5__LmQgnZQK&gQ+YY0n-8mO%}Un2zrrQp{j&O9Q@D8&SZ5ZxsjBWbT36716ZZ z!$rQc{^MKD@?Fgd-?d_YN@A%mHV*slhh1f)+Rdyb_}MD)?|VaDR^)E_lhtS(j>c(M!aASP=> zdizFwa;HE|h+kiB!E{_39mHCqV@()!R+mL<@v`!9vQtxy-94E{Qr2FbYG7pR8p5h} zWXoze+FZ(yTz)*;b?+pNU4g~n(@1r?g@&)as&q&LyOp?WCfxf_4^`0d5E%2yL+zGa zMIXk9B$M)A_UY&rtuB@X4ZndF_9gm+R>5m?YET4Dd1K71n6VAT^6{QOW&B!Jn@QmL zjta1xtZ|{h8+>ikr8~}9K;MyHUhqGA827LrHfTNtJ~uOtCXdw3W?{m#i;YNl?}TL6L{ei?YbqQazvE#* zmb&!aXlF%<*2RA`vbyC%^{iMbMFkU+uoR;B*DQNhc#rX@KIJ+#);?X4ajtbogu?rp zhY}L8N+g2T{GNsp4WZ0B9JbN9wlWi$cH5N!#tW_~$g+jr<)_s@`0XxEo4DQ4P8+vd z3uDOeCna#W?MEDZimDYsS$+a}@E}hkTVK|NmYt@0Md-z6V9ZWiwRKv2d6M{mBU9{E zh3mb8TAS|pU5dW{SJ;QF7jFQA70b|J=d>?HAYE|!Ib*+Sr?FUb%dJKq8s^M2l0JVF z9YmBEyW3gMBEDqSKHuIp`D|zCX73RQ+I;RK-Levd zgcpdecHl8qE*V^jcj6IzVIN$K_&(j^&0NE?`z%V33-e&o+dKRqEq06>q9lkoqAB1S z1uvo*I^A^I0AsI>g1_iid^oaf#azlZuWVcuZgn<1HWO5>qHmd5>V4N} z^9b~B+)l#n=rq3W&VTu?r8|ZU|H-(8d8UOK5lRqCHwT7fvhs%&s8Pf|O;+XCuE$sV zqB^amuCm2K5LEx3-iy8Wh3F96o{AVw7Zgqx+MjZ7o{uf7+|PE?5`vACa&3+5%PHF; zJ?FihATC!YfYFHaP$=hkCu~)<7pm3pC0uR>D@u&O_c?HoR^L{omAPBwo{rB61pgyL zxV>d>IUM(g21jVk)Pwm?`C!$!5JDVsfSpqJC6oJV2n=gZz6)09o&;DG(F{q9{S&b~HS!PVQ z-4YO~@GkJJ?F4&HD6Rj$kJbCVnfz-TBHmp9&WOp^PPV1bFtfm-!Tr<(KM+QgG5(3Nf+9hxt zZj7xS!ayQrAo}x&wu%k;QTBWq2Li6z+}?0u4AbMH`rDYXH>!IgDTWrb!#P><>Dh)e z%GWdLp%N@wtfM-&<9f0C8gv!>$RnZ9JKCU~=j1h7?{hspJ07cvH^-sJ-bZCN2f!MY z!BP+L7*{-{m0p^Vn{r>BpGN)rZXjjyTMaC*DBX})_HZ))0t7Fi^=$t{Qr*Md`yA%k z)_I%j*-$gsDA7t?JM$9f$9=^prS2!UZ+?s-oe>02#a*LdlyJR2g|a59Wo1JU=Z~7T z_hX6j!V@NRZY~m65Va_7Yfu4v;!QM_nh0nc+D_3x_qzTylS)T-YJnRdnnFJ)79UJm z>ruTNWoYRhV0jXUMTq3;-cqb@gHx-d2&Hf7w@J7K2|D|JY6ZK&eOUnRgJ7=`FgN)#GJ-Q9Mwm|;!$n} z#Zsx}1|<2(@tk|>Qziw;62Dqt?yaTSzGekekewLaA7x5;-)QbJd%W<}CH*kUcQqwyy*DSKzsMJV|-57QC? zX{rGaVchF_0D(w0eK)dPQ#NZgx00N%*uM6kM_;?WCR*W2hkZ`T(wg4>%h_Me;7iaD*@}!fgDRS^_2{huhod-=@TKv&yKE@r{Ds@`NULyEd}0 z*cw#u+&^rwI_E{H ziocHEfAqhUZ9}mMW;S3{H4y55&urzT;ksn)pCI|%xeV@3I-!m#q2cy5BC1efM;d$v zd;^cfUFCJ_;Gy{8EvlBoxbP-EUh?i?`t@0&lJ#>|!Z64t}5~*gN^R@?W zn$;ht#*~PgYhi!h4OHOxcA;cryWb2C_P)q=R5fWB9{e)OE35w%&hIttG z@-k-w)^0&txSw(LNMa68<&4P9^CLWP`3;l=nc?uy$yh_r_OB@F$pUNJ_EN?9ioCBC ze4^OZW_>jpCoj#V)b{3z1q~6f7=Tu41HPN}Y|FC6{}8{r5C*Unv(P8S>FNW!OCd(o zdZ>9;*7*IQ{Yn=$|4*KG-pWWb9=UDOGoNP_J=lK*TESYzNtPUg{chd02s|uR71`Ta zJ7|X8r}&_LaHUaCxLq5ygI3EB(?;nL@!<4znNe7$Y=|}DaC^K?2dTM4T3*()Ga2E1& zSrTrRZyJ8QI1ha%w#p<(PHt1^_7qzmo(0?yx#a`Sc+OfFN7<0TfqXu4ZQjhtww}ko zX*-}J$y`JNq*c|;e{N)J>bIe&hTon=lb4$VOP+*M7EGj*DU-U;xpep+k!m?^5T6i0 z(O-&1SwdU{pSDymv7E2!S=i+zO73S~%M`;f+66?}o%>)(h*~;Ht4I5hnDJ-d;?`og$7{Ul2eft_pOy!9Gn_v-oPSLgv!;; z?`LNFCk&>TPcDVRCt|yH4e3rZA}@5)nnz-GxVKMi$mpVPf_Ug6Dq53~J2{jHZqIgV**^J0b{5-^-?E{Q#Th#rv$H!(Z$*+K^@!>EIRu@;6 zJUI4c13@{~G;q9;H5kX&Q9LOg&0OFJDU(H}9Wk@s&P6=gh#6R8x4KpVces7T`nTK; z+vF;MMXXL)OgNP6+-s)%rSw=!d&Ku+28^*YDu8(M3Ce-M^8PktZ|V1&mMC7~F2$F% z|EE|sMz~bfnoTnVf+LgAZDkO#Th$dByDjfb)>;NXQdZ0_M{a`p)-R2Pm5FZ%LGT@I zPgV7MSJ&1V1fet;W*S-4;Xo=ikr90y%bRcK4OHTp%k$;yZP#NacZSGZrZ$il8Q z1&uH1pdXAalZDD4=BGk@T8Rvr=*~?CH9^<-YMXwf13=SlgS@=ET3RVEh)^zhGv49YG)3<#wlIk7;9P%>lcYM_c#nA z;))ROiUTP3RgWo?NFP3Whi1m7Cd*EZnn6pHPE*yw&RWLlS?RByv>xY28ZGSIBxTK6 zdyRd|lvn1(!2<{bQVV-ADNhusjZjtl2cIA-V-Y9>k_`vvmS1C^!^e8uA?yUN3`a{x zufSbuBD5$cB#JewuYPK6J7R}zsxlQh=xYxKtpUDsw)OPv1y513l_y({B+q z(M~eykf>H}oW@$&+sF>*Rt!Q9vc95%7575vcyw)9%hq{z$CBi>1mJ6XtBa9kYmFT- z2`Bzt5J#9dUpJGCMH%?P3;eVPU$~dwd&0!VzJS@fez|kBMhL3K*!<7FM&>6Yf7uH z$nuFf*=@X*n`5@ZxPZIP-AqqLxoRM-BHx$@_X0%N`b3`;il*qS(^tWN*P4qb6pX>N z*qK;Z7j8DHLuGm~eHqH+Sf2odBI9;eT$pl9L8Z(ZPR1-ImN_@3J4x-9{yRmb3%wu9 zMm9YH5V13=8lA2b#K$Dd8l0dC{jFr1YehyS=iU_LVXx&_z9v1Yhl`pOfqmwuIV7rn zm#*L_Y>jJX@=gR*kRaa+bcgFC_pMmz{u3uzlM8Dj*Pb_#BHSazCyP0^$J+VM>qc5< zcv-rgnQc%9{R?^O(6Z0p-mlNz{LQYtd)HO5pX!8vcIX}Y`6UL{pa_I|+2FsK;E#JD z;p#Hlc=G1n7Hi7UF6yq^re}|TS)j;$@uT=W>J*`H;isIazxinMXWe;|aP^}%M$ zr6p4O-7~P`9V@~?v@G zuYtMW&+-q*7q^U<yy;=Qo17YOTCo(9?H_Uj zmboY+rg~h;!6g!QegxXOkB2~2s8xOqX}4Zj>ZkmCOPj( z^=S(LnC}}1xWgvNA3)??lCckF(6ae?4EAsyDQV;)rNoI+W}M!;Fo(*@%E8VL8oRCX zVo9;7RW>uJz7?du_c8V+3Idq)l`%9Ap?J@e~fOWdS6(@>MAWdC2E#zWZu1Gu-ntr}TO5Lig?@!C_ z>emGKlC=rc4#8z?@=MRc%>$^2PySg3Rm0BJp1aCSEUt#oxh84#7=H08?eZt%2HH{O zrWwckr}bueha|%NXZ->wfgdr-OB&>#Utubt30!$<`u+r_gei-?SiUK4T0@;Jo?U}$ zoA806x}rOYz@xifnF;zjwI@@T^^fCH;o8DKuo&)lfvgs*VXhKi!Td=W;(};BGT6YJ zYjJC>Zo0;S0NH=5AAe_S=>h9u_%PIbO>6#L4Vy4!>JA$MzV>_DuM=Zyk17_CMdM;& zEZmi!Rzc8sJR!5jTHRUYXpIt^w8sv|*LaPWJY6rtPRJLTqS)VTPzN(+S*?9};$4}S zJ#l2aHPjT5ln)p}5XpUpD@8AIkF?HfVV|}~>ly5m2=^mq2;^81RA{dZ8RDDydf(N^ zoTos476^))3j9NDaIejXzIVG9&6woViZ;Ogi1)TjJJMr+zuC<72$)m7Diyo#`(r9A z5m?({cYt)P0GiDL+jq1S{WNZKSLR+eUrBHDLGGnjGyVHAjA<482SQs{ejYp#nR3 z9}2F-?0qx6ktMFdn0W0*E5>HL!$yYi%RT=3mziDJ!M8K<(;lilyJbWp1N&L2yorDW zw)TNbRRjz(qS&@6r740BkDtM#vB?C~w{jJlQGP@|+Kdf8n9Ky}wcTG)h0qs_o%%N1 zn?+@Zd7E&>`HPylRl~QVtD+~aY}SeG3RYEE`#PPB?ppnKlDHpwr^$bsOq!zto5Rn;F%wSJ7&oac8jBXU%Hclekos9 zDGTz@u*$Y-MQuDr@O|W8&s}$n_xbq>yqP-ftZSr;;2a}#0-BBRU4(iV3!2#5^!@aV?Kp~?do67> zq{okf4OuN+^cIUXnPm+;=Viw2QY~R}T>giO1WO)VN?MHD`Zyu^xE8@z{-JQOJiiw6 zk<7@M=%S&|`MM4*R+UTlW6V|fRPs?kmJnKyOr9Tx>12kdGA)W+=h3J~n6V!Yf$)3l zS8zkXfU83(s;0q3X!3K_hKMyeIW;)NPkV4LIGN14X9&9TywqUrhoX7t+!s?p6fK55 z>ut#&DXO0LT9^r{lwJYIopBx$&_|5QPW(WvB-AvoKP`)(syvxOX;hwXJM(BQX8eW9 zgieWNVF8N3O8F=?I#&<6@>@d&x;PUE*4M>$wYaP7#X{_rR|#*RXPF)Y)#PMo50bUR zl^WBe2vv|$;}PY4@a2&>5;)=&_Gi`{q9XoVk8f+^XMNP0IY|@Ah8zmdIg%=AaF$fI zP-OEyGzDF2&~+Pv@u48(FnqO2yH$~M=vrKRI|ed{JPaB!_iT!TWJCO`zgckbP^-tQ zxp^p-pDk?KLm>auWZ9AXk-VA77skgI7&favf@w(RP90?f_ALR0s&J}!TGk3TI-Lg- zVaF!)zK;sx2iw;cDo%;ddaznOAQ{eMVG@wq{2UNR+BY5c#_Fa|#vj%iU^Q_=| zpZHlHnWp*!m>W#RyP5kZ(cCjHFw(qC>89ZmAhqj9QsTAy=CoMLTEj{3FeSRtvr&Ry z>NU}o_b@xP!zD3J$|U=CRm+X+*@#}8S3$pO3v8QkR|4O**xs;dUQ9l zkmNwh)oAxQR1o`1zXwUasoXFE?&SA}?8dRfxX~1!IIJYmKaYcOE`?brNa1XwDUAxt zi&nK&qKq4(OU$Ij7SvBNvlu?HNc7@X9GUE2qby9%b)a(gxRl5_%}6CwvAVLF zD8Bci9``pMGZTC%Yq#2@2CVGRx$gKv!$5M_CuJAZ-{&C3obN$F`0BbTT7iSscd$$# zqV%0Dfm1zCLdU<{lP_L{>9L{p@&5w`Cy2+)^p?TDkB{g<0 zL_GZtUbJ}}V!H3o(aX%Pa{dq|QLE9QZ=;kFT%ibt^wSO8wX3ALx|nFh3n#fACf za@Akg_3R-(%pyyi2vhX6N2_2U)`i}obgjVr^m3(K3QQ@DL@Kv>#C*vK#E>u zj7^Txm^_u?U@Y6WSUH25+)H8T<s^s z4~Ns$-T6|hnB}F3?Z`cr7Ax3lt-_!COg($&urdTz>tWJmL7o|mf_|i zM0(t=N3MN-69|kh>uHG%Wp){v`DZT5Rp+ctD9Gvh=!tpS`)lnHI9*Y)p7Qutsgifo zp5t4fE=3?#(Q9^L28-g{kLKU`kbQXQxWXsg(`yv%XJ)=SY#7P!5`^8o$-ILVdu*-%(}HViPbgTviW!X946 z%8UCu`nl-*cABhA8r9pRQ|;ZrSk{Fp8cB!SuFL#{Nc`uQrwom`fs4##eMj`e@Gp`+ z+`dtBCmhE_vht527IyU|G)oEGC2|CH;zhto4cK8k7`Lq`wia@8ozCB zM}`YHd)Vs}u88Z>8c5agW&JmNjSh9QCdoMwOh95(5wV3O@RTZXRO~XN_dIOFtXcpa zPTmV}sDBd;IJLTf7R7ds*@Df}G3buT_p1HFP?uZjEQHCsN3oj4B{H%|KPa9AKb=HHmkDJ<4x&kGc^DsmP5kvjkSF zV;Qw#5eCc{NpWekB%Y%ohL-y0P(k@_%cI*gsq;1(*^L1P59{V`5mg8FR>k?~CLfz3 z_&z&++9MJ6Y?++Dx;do5ufUQq;zjQHyIZND@ln<_D3-L1imvh4y%bemesC(t!c`JJ z1bG#!q%q#0+ItOdi?gyeaFqj!u`v`^`K@wxqege7HLuw%1_AII^BVD7eF|1Z;-7d_ z>-pVmP5%010}&Y_oUB6-N(V@ZHH&-eS$Tn0Szq#L-&% zz3HMeL4D({?INzromoEkcbjQQQ_P*I=o-8_jnENAUr>C4-4A>!O1ORA%z6}guW=wU zHqI~c5Agg-wT&$1N+S^BcWeqc@%S&M9bCdwc~O#9_itod;lw@5+1E^>GwkaqbXz%c z2~=fbxTbF}CawxhQyOOGqIEl&SxeR1D^sWIV3LQ}ktN#oRkXu?gW`aXyK?;sRxD%I z5}`9_J$|Q64dB$d%~pJG)_12eSb%$QS+xIg9K8Lhd~cqomQpzD?Mxi4G=}8H;~Yk?i}@1r6VIoyMf7M^HAU6V5%6 z)`KN3#%c1omf;jm0B@MN)WofM-|p%Rkh9_(G|fZV^zkm;8Sx&HN*ma-7kqgw@ri$& z$xrv-o0iFc(+XKRz)MFD>x`K_BHI!POT}@3N@8Y+etpF4Q$!SYDSj2 zzfBk2=daxPGW$kzjQ4M*Dc=^aVCfZU%q;T|H2lCGibXErr_vcjkB!+=m410q+07JR z%q_HFu}+y73wZb#>Y#amo@IRuO-o8r{HuOpL4C}Zzv(w4GA?BN#j6i5knatSD#Zf* zXfisbBx2RwSH7Ngzr-~uwt-@?Sbz9+v9KBz)Z=l~9Ecb{>qBgw%4BlgoV;2aOa!E2 zNoD%X&8I98!a*#EWZAh+`;{gOfH*_zl%?zrn~ww2vc$W7F4&trT?n4W9PY_iV6McS z+!NBIrqaFhU@XOaZ|M*O0QihKS)ytfeUg?CH%N-yOYdxvQADy-ss(!X-)+!XBjkdY z1WTnukF;iVS_O?Zv_*-3_EUzMuiy%uC)qXPH-7+C@t5OK%g_U~Zjv>3&sfT7R6A$@ zF#Um$_1YTjZPyx!xmMf&+y1!)vgbkYC4zCCvS?h1clqvvBpfS^Y;r~WVkKEmOUSan zi*sQ7*y&Cm5F=pMW{N64$dwk`-M_I0Y(;R!*@Kx{mdAo-BH>dO(ip0tXRwoHd3TlrZ+_lusj3I8lfaO!B~%_soqppHX{1cvK#bK zH~`B(#IKc;;8;FwjmjSwH|12^Ty#7#H-)#9=fB> zy$6a}ilJZeMfKRN74eR5vR1gpoF(-$+dTOY9G7G-lc#9BzQ_RIG;uAUw| zm%dw;vY000N|(U^Wl2M+{mJ2pIBh$G;$Z8OiM7LMv3Va|Ezk+QE$m)gT3d#gr@0IS z2i*o?!);^CB3mxcXfQ7WmGj=OX@RA8PYav8w1Tnk%%{2PuecKLre5WQHqPo+=FVrE6oJ;urB zel;noxiu8cBPyvJa@9*V4Br&xxa`S(2q|s?$qyU8Q&bMi@Y!66(bgKaT8gS}ws%a2 zI|NGwq2cf9AVjYVSdI*H$z@=P|6>FxwPCo{S|J;4H5ZtTi=g(1f4G+itf{BAKJ`R0Na>Tn!0;PmW{+e9pWPM4t^WbdnJ=I)u?yxGWTheaF^7_y!7Vh1|p z!l`KZ@uhcU=C~+!9I;`da_?z)7=VU#`UUa6_a!;MsV$Drh*inmzEP-)o($eVo??suUR z9;^YLkG0RJ=yja9j(gc=nx|A|=p<$L;dcGyh@U+iTd> zqphm$WAg?28gFy&7LbdqN6NPYv>(*`stmr*^W%`k);bk&3f3PUYPors16g*dX}5-I z(>G_R1|i(0rCx9>fzzFFwyX?LJeea0b1y8Q2FL`b9HzNiinYzF23i?EEY? zM|D9`R6oH!nu&MThw&bzCeEZgwQWc-f8{o#%~huv*%7|LUpLA=(*c9E1tq?keB~fQ zHOqHBR70M)gF;OCAGeL7oko<%v*-wjtM{O;e*BX%X;n0nh9S;uV{GZNqBn3oK?=0+ z=i2!VK1vRt2(Yn9lN(dlpvj#ZT;P{Byf2F3#|!~?wSOWR&i93~XP<&AY45G0 z+}BuYqHv-C235#QC0RNNGpE2J9{P#cG8lB(Qv*qPaFPNSaoR_LMWEUVT|==MQLA=7|RDp)JY`7st2zjA>_XpDNn)6?>^aX6KW zSn}6`yKKs&@G7Z&4;yn4zZWw$ak$OTLx8+ovJd1~zb!Boy8QUJclX@Yx0Lhse z>i`jdw;$JsTGz>H!TfEjdpIt!$moLW z7@oMpGd;gQ1#ubFiwgU3TxmE?c-5v~ROddWDadBt?_BYbGCfUDd~*~=OpUX&s&a=u7FIJKvjLv>9_bCnsX?DZ3@t~d_8dO|> ziA5Ew3I0CYsvs`#ivD(tQfpUR8L4%*=bPD^l`Amys$)s%bxMa5@tgc}DH^i8Tt+Y+ zbvhT6S?(n;;$RSbNC)ktf(RX@8fJI^%Y4O~P>_iU&}gL$o~Eu1AEjGxEt%Q!nu%oO zzp0oUb>6GdvwdGv`3WrLS0$R*asFYiEqBJiB3Hmr(Py(_o(+32k#ZnxugT#b{y|mz z$7;YO)v&OONq;CW8RtPOl{{PKVp;mY;f5$=vjrb|AhL|ZAd|e$!X|Ysj+6ZP=g^+L zy%$!v5~DN z(ThD<$KILXgI2T`{KNcPqpO6vnek9O<5rznjCc5vM`VCEmC(`L_=sCBYwN-O>@5r( zbBxU%=1@!|ccyyc1yj4?^*6e`A|_o6u9VN5Yq65-G!+)5*Z@p1+YeRKWFS!GT6){S zYV(gXsibm&oXE}H8yWwLgN&xS$cX-IVUP1N#hzNSSngm7SAH4R?D3tUo{z{2V}tP3c)8MnKjmyonwqO%^=tf+ z_Nz=c^3zS4hmF&MN&KJ{V3~HLsxM|j~_*lrDbOW%j?O7!y`dU%pQU{7SY#2LDVVwNIZ6Lg3c=F&-f28YbChB zbWp|9l(@irZf$!0E#R6Dacb~a40t&{s*nN~-_nK!MSzd*)HpZ@@SDse_iM%tguSEz zEL7gd6%C-P3G^{tqJ-Y51uO&-cU1sj$VF~|szlPx_J*8I8{*~hb| z;VCh<4lO3}O`9-Q6Ks`lLn%o7-X=ihn+TPO4>GZ0;%kQKsqctJwqv=;SK+Mckkpt&B!~RJ7B^=oJgCp5$lRS50u=>krbbfH*J;eerAfm9!o$VEz%I< zc!Wn+4NH*y=)&b$ndwI|_*6YJa|#`;p*rcROol#{xFZ#3?cA%hlv>=3>n0|=K<<`H z!D6%%NmGS1>@09a&yO(6Owd zstIvs)HnBLr~WKE>R7k_yjz_1FNdz;HxLhFV|0G}tdF*LBWNw*vqPDb9(3trj!?Ki zyu-cP2K~A7*8;Ju(d~1Z)CA^NcmIP+Rr7FKV$3E!P1xy*or_NW^#-QrUQIINzme#> zBDt?8Ht@`wl-$eWsxdp3BPTNJS$kC*vHYo|A^6qty7o=a$Yr7Y)ji__QO2s3Eo?@BFkN9~efuru^YWft$x>r0HB@_(IIxiShV2aC&xiQz`}B#V#2ri) zcmL+Y@RhU*7kTvdrEm@!*@fECM%G)cs^Gpxqg3AP+f&KNWFtPe+SKydi zK}@9Uocw8}ostxV^l^Gj1Rr`-w-C7usE@_>$Fe(=#uE)-*=%N!X}tj)`Wudc9o4r$0__fDyC(OfYY48*%F>lHR;mFEjKeich%g=G|rRh)LDe(D(Z zu??p3a!sM^oD}^a;){t*KUIMuXi{h{W!%9oFFy8qF^>&w{K`ps*7stVneFyEY9@>y z+W(c}yIAlc?hc-oO_R8&jBDkhG^w+o+una01qXozQz`K;M}|_k%Xya~GDSXRL>KsO z|0tl5Ji|wo?2}>7d1Aat*~s|mHpRTH&Q3k6>c5qumtju?()pS57+IRJWl_w}372Ko z!pZR!88B=nEy_&mD}YNbgA(oBegMVSx!Q8d!ITm)u(e#l*Ym#H6>9x>9onl|JkCPi^;RPiRLF&O zqtJq8-wmWZBTzg|9={S~X66ZJY4ykdO-Dz)dYS6LuX#W!BP;QrtATBe2r{zGMaNSt zrzU=)$v(+#5b`6`LY1csPti|F6?kPFK9~4k>%3T4M4<-EtQCZ?0Y>HERe;z~QH zZy9`HvgKB=lY>JMhN0~_if_639ZmkKgnbgRHAqMrQ&AyqYPj5t@9hNkr&aHXU4Ik@ zq+Q!HSXkpuZ7F))i~7e%Wg-H=RknUmiY5tl>#L%WmilS?;sr0egW=S0W%hm$=Q0qF z#)C>K=y}{SLAS0t$ovyNs2;xBA3E9(=H&H6->_pYkchqQ;)`K8N(oV%Y64&9HL{iI zpJ4Cqlx;~NiuE4TU*UzT=jpZ-qVEp#h;5Qa(+GS_H%DXl|I=5<3dh^cB)7}&G?c&c zKe1x=caC$OOF zNeV(T`Lv}XtHka|E_jQHx#4wuQ4(%%S9eOhYjcbOlUFJ;ga8(+Xz@??{;@_&IYk0?lwm4*n;%u7KRDcu?&7)8YxF_Ok*l~|#wotMfi>R(3(Ls4b2anS4M;rCdu5=4g;zZI)BP;10O@W2)o5YvRb&`Pvr#gudJs&okWJb=R%1kF3pw^=1 zs8Jw3SP9o6&H`cM$3jwXF|ZbO<7uTGE)rZi8qK)%vk4~0ln3?LUZ0kfHK+0=DP~DS zHy;a$v$2?o$Bx_%YCJeys+Sm>4tIuMOG=3C%6eI1Tj9$H@j0p>mAJ^Q%U3MLuVb39 z0;~7!9P}ShubZLU%0IKan%z+97j)#e?Zae zLV3V7uHC%3_FTyT8Wz99hqmCh7kkX?dEgX?o#(Du8KOz3ch)xAJCSi=X9*({18w(} zPH0sg&gsb&tf)k;d=zbJTRG(GrWo#X_FIux@ec{r1>b|1~G zgZ~{k-*kj8?7=xTC_~*`6hWNdGXr-kE*VWhw%i#*In8z+L-QqWzY@_JCEYr?>QI5r z-41nd!BUJ25+o&!5mmrXdxY|XQ+%gY#9$&B9Axous6FD{;jj3_We_n5_uIgy#rZL~ zThT4Af|(-Yclp^j%=8=MKY*lB87AI z%w=XJ!X|3c=)l(tve=KkkjoXr5c&>huNj+{st|pbcTPVuDHeRNjD_{?0=+$;QwJ*N z4I4hAm_4Rv&r{1yq?n)^n`07!`}KOKXHoB9ubX@GEhQv;^9Hg1ly|(AqSpmI>qgo5 zy!pBYmp`*@v=B71zKMiz_@>X>N2qW0@bpyTx92M|5Z}4~S4&w2i<{~FXg+PT@{ezdC&E1W4yPX6)O7QKO&LEUY>x`X1!AxFExCApG^d_ zyv^6zE$nd5GcGf*GOq89EN${GY-GeJ2S~6fO8L9>%-_harb~-;${QP}o$e^x^Mb3# zThJ8xv zhTy=#<5#lgc6uW&lTBy)5JiT^Vyqk_NRJXxdN#lJHw3EXipbX}Q*=4&KGP z{G*oB5)pBVSGGX)GHp%Dq<9y{4<+WkIvLll@c3}MIJ+-;*R-(T6FUH3WjBgcl-M)( zmxkqbq4rQjP8cc3ylaZiDoRWbgaVX57M{1_n%ZTJ;22n^^bz_&6!XINo&Xk)FVR2D zBw1m986#UhIsu0)+;>p81$ArCAf~q@celz+GF{fx!OiC-`hVyr=^=wm}NN>ag zu*t9RTbsdI^4E4U6snXf5f-*;FuIh?*i$K;nIuI<|6y6oEU?8QD%h#H3)qY0HjxrS zEfdAQ_xnW`kJj_L$YEh4zkr7E5+x)Q5m78}Kz=)B0E_$W-ELr{&ffvM!)eO)MQdF_ z=PEp-D#Y0zrkBM&;#gHDtyr0w80G{j@#tuVORo4gDYQ7vu!01v(Q-xXCtdpc7?uluPRqJvWdA4XoOlUR7}rV275s9TI>l2hQ!;nmXWIi zP#OHJkC{npjjWvaVal$9>+|%A%`kZtC~stKl9zb1Ax$zXJX^BTvQDA!x>|B+2_-2m z{E#HwyS1XZSKg%YX6eL|hdU(Rs>nMW5AISt=_19vl8vLqghg0)M%hXcG)BiX#OXb* z?uXXpnwGt)A1^5rv+xdd4sL2DAOcv#(-MAe?Y0azv$5lq4|e)-^azRcWIGVb8?cgc zx>;R$Ez^C#`m$0jTQU0)5rHM=btnYeZo-r!k#;Txq%wKZWgAUeXO#DPRkW#uZ&fyAeNEKvMl?DhHKmv8$;Y}|74@Hwj^iGp(mcJ-V#^q zn#x*m;!GfqZ!E^eCk zu0(^f6pQGI5A3Rj5UdDyEB=Yc@3Jj4nJ&6_hl*sW1r3^^GFrjHZI-(9bIn9x!@4LR zlM_E%dL@W|E=iM3?D3-IdN$X5gmU`KE1sg?y!L~p*tD_71hm@udAkYLmUE}p&lmA% zvfjze{&;Mmbrbzc)?-0jdM&rj+Da5IaxCt`9@TaY%pylG(~R}YAbW}6Mq*KT)v2p| zk-NgbGD5F4^u}@9Vdx;oqCV1UZCUL_v9RG-iG=>NaZpw4TmTIrbUm;>Es>ss{N*B! zbU`G$XgYfDFFr%oJ~f3F8Gq4j9BW{cL6B#mbHOO<Hhxo7gpSAA`#ac7Vw+wQijPVA_ynC;u#}XWIs3 zq$C}s%P)3p+_{LEy?O$Cvg}cHeL4O5a}U;i^eZa0+Bb*Lvje<8z8TgScNsF@g&t-yl?}xdR4J$q#o}%y@n|>hP<+FbuRuD@eJ$udd z-ICYeQ>~?_Dnuu-K@q=+%3y>`3x#nD%&xDxp<8q`zR>tIh})6e-hy-Z;ONI1sfwGI_k& zno;Y$hsIFV9J?rMTU|zA6Z0s(bBSO})O1c#v1p3i$L>iW!~@Oz{#8@s%EdB`^7l6c zE^e?UYjj1iR&5th{)8jOhqe0+%;6J19}n}GWJ9Qu-+W;jm+!K4I%6Wq3;c_p#vc!! zLi0d8c&NIW;GOUE8Sg#@)wXEBNpHZxi+37VE4Ngk42|Kyf<}3cN>VHFygp*C9Bg3Y zfLq^WZod{-T#!;!uevp~?e zS{5?_ak$g*##{t=m{Q3JJR9>+R1;1pU8?_yEU1DX)&Y_spGwLe^DjPnw;H=q&tkJR zF|bi@`IaeuY+-$6@F*~;02HrMVN^_0H`*p#QNk%X$jmlAg68(U)&@E#G(M$p^|tD0 z4>qWkf*h#>11@J#1rax|{dCy9w@t`SIe6a~T96e)0P_=;O9!Gq%Xj+2Cus@e zaCm(Dy2ZDD_$;(*-X0r*fCLLECIVVqYIV|<%h5YrzEp8=MFjJ&w~tcu&x6HGr@-Vc)XZ0PD77FOV)(m^Kn#)@S^lph7o$(`6_WhT$Vl1#t_o}EcE1c+1UZpL;x zXQ3Gd@+&Gy({sBFEcbbT1M}HY9hY;r;>t0vn|O#Nz><+@x0=qm5Q-;*ht?k5@B7dm zJ9`v%Z(OG|qpfvqv-07HL#KWrA-I`zvC_Rus7I`I{D$efot1CU%24RXST@zKBjrzw zP2Z=sH4~nN+qv~(YI{8d0xW=*CRS{#vNCukbf3nx+&L_T4nf_n|uqbJ0`pJ@9_|X8SJRPIlI_e31~7X(QA!Xm* zJ4H0 z^NxIXwD%#(q)@g+?x#^jjck(TGOgtsld=ML*#Av2*Eg}#*&dr&!nV!|QXbS?EK99) z)jbUH&dHL`#B|eVQq~6d8isqsUOU{u55N_!?iQ5b zfxtv8R#KupUsUr$Vd7n8)i^rRdmrMZtxzU)0hjk_X4;_Q-S?T@a1(2`T?p=C*O5{} z;63(q2UhR35;wy*8itmZ#G9r#(^dX?A6xFBTU~LIVY{;U5yb)~stYl^WKX%D+omS| zdRA?=4S}TLVC(yk1fP?870?}Vr65G|LU&AKD53ylz{4OxZ)dEUSZ44A@1`vZ(!>v7 zO`;E~YSfx1uyi?1h}K*lA@NR!_Ig&}mTk_H#S*f?pFhHfk2LsMAEDzEtsWkiu}nlu z79hg%^n2EEXc_hr;@`95;IHT3UuJ8@dHXaWa=WJ7HNkVHZeJ*hjBSrg zQv?H^qi0)7;K>gE`fYaH|ETt89b6da2P1=nh(~!I4lC1@x%8dLDCsHm&Kw5Ts~A{o zJOJjCunMpW6`HgMbd4=QO^ul;ig|OZUz>XeJXlxNTrP6OBl{&tD8Cp`_>slh)uvOO z0awRc2!EksnoUv+LTU2+2M+MFKF;rrz~byvO|6(yfG@4g&UNDv;cC?;TB5J2vY+Wb z2)X=hVA(BLqrpmM!mr~lo+@&rhxJu^V!saTrfy~Zn_Rjd6CGld z9uR)?aR!mTb;(yP)_0c&{(B(hC5zNZMw~9A)o4=v0-j92AB&X*zwm{o%o}N@NI8u> z%iKJe!*IBEd7FPY@EHKsD)hiZ5IS@L|HSC?J*Xh!B2HFzsvAY|df2Nl=w+mVT|2Op zzDxeBERsS~L074oY9-uE_hhAT-^wXVfbx5b=-E;A_}UqD@aS@PH?;K*MNx(MXK`85 z(EGG~qr&*jZFbh$y5$A;7e>-|nSLLn=Mg){-q7Zc$-diZt4^Gz7^lPr=#(loDagfU z2>L3i>3Dd?OU)ph9=maCz>gbww5nPMJUdsSM9%i(fNFHI*@|EqU*Sqr;*ev#+cqgg?p9i}K=2-pAOUp|&%@BG*A@&?V-^L5{oGaS=+!>bUOj`F_gZ-r0)r z?0NefxJ#|?S_)z%$p!W;!4KC799DJ;9gbRk=+@tZEiR&H6e}-cFF`Wit`8iLR*NkI z9?ovk(`$^?t8t%_4BO^@1S(xsTJxvlTT+mjJW5NSW!M04&|d_hr94-XeB2Sq7O&@P z@6x`;EE(0tW^mrpA<1k7UKG3+Udj!x)3Oqa^`x>GZt&7tV%vzp9;|KAk{)cnOA3x{ zay!?Bsu+AH8)j21>lZ8A-&OiVVCqP+bss^a;{@9%FOr$>0M(GiUvTcp3yVz2hWIB| z){X)Gc}N!rI2}LA9&NBS*+TA_i-ut>JL zG6T8zvEJ9_Y5%Nn9TBT8{%C4MX!3QXgti<{t)U7F--baUXV3qQS$DNIV=puPFtM{q ze}Nz(2yg-O_@k`=i=abocH8sGP zpO2M5F*~PcUGP=l(n>nsC)F=QOWgg2&#&2J|toO zmC2+b5k@v=$_*-0k=ufceZe!>^@QuBEKz4`eX6~_*a{<7=?G^tL8|jBY$3^7HM_&k zx?(AvG%qI}N3jy;wPN=g4X0cQYCC6-!=3kheeM?C#>lFd=#Hw2K%rtg4lq_4QSFf{ z`SW;QPa__A(}j|(*z&uX^$u5zSVvzkG_yiE-6-*)H-=Dr2M>iC*zZ)sD2SjI5_t@U z-`BP!g?RTa07^72dOc=kXhh`$8Y)k9LD}O?4@%?y<+6H~w5$@==LXcbqJM9k5~{a> zf&}qJwX9{|{z$$YWuWhp!!W3pTmp8VkHONTS-B%-QbL3r{2JvCk=V~nNqm?10zoF% zd_}VEGn*tu#swe6j9dPovTW8RPY1iklIUv@_|)dztBo1Q!l!aRu`K@$Gr{@c3XMk3 zl>IjZEYbR@#iFB(Gne&nL*%D_>aN~~2h z_~?8?;lr0RHI+Srej({Mh7yu3BYd&fX2tS#$rPKI;-Z&Rfr)E>j(>;jGiS9qdX0Fi z$X>@c9-=~a7}(GDz35mh2sN*YUVJYB-k*|gl^1{1F#^GGn-BBFT_g<`*<`@aImi;< zYhKj2+A%1AR_oBUwWHo3W>m#agYh>QrcnTdi6z`!}T}#B4Qm0wyI6xFY z5bXyV99kbLSS*wM`S(IhW5o}DgNuxBGui;&V>~HC0>Qq-sv5h`(``1B8i||bI!=U% zAwHxWEmqA%sg}SZ0z}rX0LA}Cckuk; z{?gb^=YGQ?S3csNW4G$>m9u7ctH8J#ViDKXQLYN! z;5!mLwn(AlJ{lWk=crR45BZDBn<=#ewW?4oZ!&SkhF3;BoQ&JetOZ|a%Xi}6xH7N< zS1XKlp5=!#&iYQ%;q<^NKZ_Nv>(lJozsVgcXuLS=R|qWA^I%h1{96(nM@4t*Ub3&m$b9M5LzF&hV>n z1smd##Jh6O2@lQIt!|ky%Qp=U?|gYrfo~?{)2b@qHoKqGhCZ<^=Kof8ivkSWH4RsqfD;5%#}eLKkFk64_vq8J{)_Es;eWCn+4JP!-pw4SH4o|W7*JK&CR5k6#(lp z8CinGSsAqWrBsrdxLPtL1fgx^yMl+)QU1iPwExzVdN$AhDs5kjMG4L7Q4UMSA6s`* z^c(spQqzUPc4L^|9m2tnJWK<3>)F^*04|mvGh*GDP}-(tt%(&u!|N2EDE2e=Oq{&G zs%Q@rRB!c?O!_JG_yghI(Z2)hF;r*~wFqYj*Io)_E zfXc;*I~n^AUPj+#+5!X;{gr{KaPiQIUwSrjOa%%jP9sRT#~V@e z|GRS!4@rE)5hW>1~4xCCi71XI3DTF=e$vjDvl z6hdR3C|g_N1h>OZ%{8yn6qOjhZdF;RXU=6G>DjP}vG9cUx@%^6wieakrv4vWR~_Hv z&%`@)_|V~u0mIpFTiVWGxVsH^8167^I1GmC@Zs*PPjQD~!^hAc&Txjl-=t5QOL_ap z^J$*kUG9=R$>nmn^bRz#JYni#!N>ku<#t1!%v#sj2=YG?cro1pSN;CpTDZ~mtb@Zw$dLC|+40n@&@Cf4nxyO}-OgDG&i_?X;M zq3Wik!ubHFd#{0K!~NN9jFBx0UO@+sG+`-mOtp7<%7)J&<%_>{6#Yes}uQY(M&{3`-Mls9?E6&x=dvF>s?g7R1xL1%SQGXgV6a@N}q>jH( zI^61)c};A_ljIcGR;;>0E?DMhR{{Sz~1CyCV z>-M~=#;TQtnQBSB7KqB)1m%icG5Uyq5msgK-K~MeUJ$Y|yVQg*{NKlTeAv=L>Z;Bk z2=Pg~%FPVeIa~R3oQ|9Fa4cijGh@j8oH2uy@Yi`g*W5%w{IP|1fejaPQV!l0S2h?s z{)omYjdsH*h#*ii2RwP7&U>t}*PU_Va1UQ!dR&9Ufyj**2xl$vPdrYwQfy!1-RB=^ z5G4Hq%sb-43A$C!F44|ScAk0A0!hUs%pPOrcC`0D3>iX>TUdo}P!T1D2pOM)`!aR@ z41J@~GVJ`w+*d`{Q1T+f^?XW=T}~FNQ}L+? z=F7Km81Hfb!ti~o{?#zMB<5~O3)=_;MqwP;o5H=<#tnO^Oltci*OzHA6Ny==n_b^Rr!OK$zsEc@=}1RJDACb5?xB@L%FXi%QO*A zhtz?%?Ta7zH27S>v5}P#zASmG3Y6&fMroB~`9^xO@oB~NPfXEHADt*j>>6qQA1IaG z3zf|rmry_Ca;vU)#qJvBcvmB9x(*sV;S_(_x<*(r@2b9uN*Oj4x}#T}*ARh&kOz-j z`D7$Y4DYN*lV%2Ew3qI|9N!Smrdbl5Bdw$kt z>~op&8XFdP9A=i+C(xF{d7a;pCd;Uv2sD}8F$_K@Rn$%D;=6)$kT~`7G=pyiSc#|i zq&yqy+86VMCuh>pZsqx^kurXzcNFQ^ek{^4Sf|o=oc;9Kv1!UI?s;Y$2Wf1vosf|{ zr&v2lFQ`=O^9WF{-T)!sBDlHDy)TrVR#ormz-`oZCN$N!h&;6GO{K=F*!(FsdU)h@$DM9F(=;n6;d?#nY@>r-gOh(PEEY6gj9y7 zb_GbFU2cbQsN^UB%hFQMP?Cm-+cT+C3s z*I>%2&;_5ehvX;lRde>_#*5zR}N~ zpQO67 z%pI5#CIN}Dzsz1U%QMB_%%*?DN?m3ctjb5Ct4H`WB*?UR;TlO=*9L2>P5x0j6+u}T zyCeoXtLU9c+*CKM>p~+FKEe_%+vej`teC-=z;S;MO_sr3@t{HlQTC^J>oxV6RT>rXY<| zD2mOK=4hFWUlR2CGZo&W*{ZH+Pe##fL__{q_$rz)*A)f~pt(9~EX)5HE$ZfhRZUuT z2Zc3(tJ$zT|In*a3q!`U<7=t-hL($U4h$ZO2LJm57U|ztD?X`@UgV>=kGeJBJsU0~ zt0JK9A{w@ZrRH~7`tUj4>A0gfTa~$CF3MGj17~SRl4hj_T3Q7596Xwq_FMg2R$aIR zT(?Hx-lHFayX**|O(w3_lr1wMeWa0HS)g>4&GG3d`E)xVOqUtujI3bbHpSg8YA#v< zKii{LP%1cdrfW^#T~_ap>NRLR)?neV5XkxR=9sHg)UN~k;A{r3riKmH(ToB?_*P|U z;*%7~=;M27hM1xQ%iHxj0V2L5iM#X_n)^Z(lu^D&7g{+zhdo8;rh*NzN05Yt_W5L9 zlmp*7g{_2xKYSh9Cs^sly?%2OKYsdyF927su4rZlg2HK?+Ca?nz=7v}G?W9QPC8{4 zib)$`V&i6w$MQAVD@wWenU+-OQwJVH;mbK0XNSMcp!&Uc^l1tw3hMt9i}}b9e6V7N z*OyoJ*9`4VY|8gWw2aI%VRop}1bdp2Kk-kfbUnvTp&6Bm^Er=uggOD2csUuDlg&#@ zd(P`=pP`X8vv1`IjKdw^Qo8<>qRE_pJ)d&FBnmTFxu6dLtUz@SjLLa2SeB@bwvKXX`BwKDO9sN+Y=TwBUL9QBezOvNeWg*KDTB%ool{#)|pF)0YQnP}z z-1z2xlq+#TVB{|&uIF0|+iRa+!|b_yPg7F1eaTjJZOYw4B*=l1Pfbj01&DW9)+!Qp zZemyS&hl23Xu?}W1h1&ZM+^AzsJZB|1;WwIBu0g!;6!)!Cb@Z_~bk`X_mlH zwq+59(i(}=HNvEgU9LiG{@ssKj<|h{cDUkM_?Uy~GYVJBA`>=|1P*toepP-Dsdk2|HnC_KMp0ISdz8&#+JC?itN34A3dH^M{V z5Fs$+-o(}WLg3I`D$s6d1UyEyO%jgOTJ+)sfd5wn=jLB z@4nr$m{{L7U7<^r9!N_g7^A(cY*cPLFYC^RQF<sW=4*T&TFpyLASL4VZT`(NK~~y+^3Tiv{c;BI8WQ zwfay$q-G5htFzaIlAk1c2>@+GpY!JV?A`)Pw=om^S@oP7%xrI0XtV`WD@1*3_tvTS zUpec?HiauI@K(2m(lXepzD9OFr~JiBb)jlLnCc{f(hZ*2tC-8-`X)W%ya#1h8kA>*aoN_oykRVYcU!T&C#g6k4Hd9b zil1h8&alCSY^R-OeJbdQ!t)|};5Ev@;%rMOf5M~3;FFbtbT|&HxGdb@v&+g7XK4Dn zsVy`e_*Ble3LKBgo26@@{_aE}`>y%tT^RZ#y~y=vbQ`T9aiNuD2$15zL(sFiO;BQp zf0bK(w6F_eAA%n`=zbbz_1S!en0p2_KI3|v&XoY3a1I%SfE#w=c0E+zA)7r;)&(`0 z#6L-%j4YjumfM!kGd`zk({~1sFbkpF=cB)w{ffh~W$v7bnAL)hQQ%g0kt^BA{JtHM zT&I@roTKLO1GOaABO4shxgS|$F6#GkH=xdRhM%PbNt2~Jl|1NET@w?r!6nF&#fsh; zzHFn3?c=*B2A>p^l)yMX|A78({?hz3x6YEchzsHC=Eq7DIf1LAmitoKL^vH;q!{W& zQhZ=C<9*Isw1!&FgVW=lQHPDJX1>2hmYeTP&AEfe<*!R99DGf!L})>8{OR^Of4TPB zt@c8rm8A&}*r$)d^N^gmHCDnmxk5!8tOm4B*{uMTci0R}Ps=tJg@-urC6egCObaQT zEsVDskXisAu7HKfkowT(Y~AAj9MsNVItwK=vtl+}g5;CIpLOn>0`}}+m_KE?Pv<1j zD#_>$-$BoQis@yt`w9vY7dneG4r`B7z}++3JSd#O+RVrPg^=N6$jt{aD5K4jqXT5E&bLrSM~~I+oMr7*oBRF1Z+5eiwZODILJ#U%(I; za0ZlLrm?>!A1aKHt2R@1Jy$Ej82Bmn4b3Vj1x1M7X|LVD7mg(bm`2~|1Oa)d zLn)>0A0G(u8Yyr>aHyUgA@j?u{d_)zCbGp>GlCF%|_!IZn@{B&2F{Ihv@#K!SH86G-N=4hP zV2ySZM1(WBw0#zeObA3vXLN-eb6gO3#jPYd(otohIMBF{R%e;*kr)rMouTi>4$DMK zOSK7~?(`bD%8 zRcdRjc*lX1XxK%C-sVS0Ha^saf)stEn5k~Z7RDi!ul_iEBDPWlYy6Q`)kU8SilJ0a zx(IXlPH7FYOD4uaKW#KQBuvzAlCgVZ9Q$vKPN6zkn&Stb6Z>b zqLEd1#R|xLq!-OK3=cR)I33*YB|wBR*unjmQD3OMKU$CHrNQf^)5gO~pIcl^8a)=yKF9H%OLQ;=$NbM~@IemTe&*IYSG&E46`F223%z zENs)K3|5vuX$ah9hn$Cid~e5=%R$aI#N;oNgI=%033$FNknaY+-b|Bi`Ha|T`3{X) zf1ISG1jb;&Ul;;-NCF2NOyTvy8RCy8mC$2j-~2JME(w__WsxiGlOpL7^;fUSuD@V4 z7?<-mP90@!Mf>j2aBK+)VEITKbr=_jWHD*X#Ut9t&U~M(H|?h3V^N(Us{vjQTu7e z=TVJtAJFaji2Z&;srJyfg)T4- zpUbujc2XP4shx|5-VpwYyCk@{fln3_0eYq|m31k@KVq}MN!-X+Y>r5MEK>r@NjC@mT3M|kb+?FzfK;(qk5mGt@Zco5lXNBXlUzyuRu3jzaIT%V7E+&Ihv~m#n=@-jbh|m z@)2gku#c2eQDpls5wPxSzi39rY-1^|u#HIm;t!)D>Sj8Q&Dfe=1wLXu^Jcg* z?uy*>d}Ou#Tb?D56%FEg4!;a=fB&2o(win+Q(9})f80i!Fcp6AJ(OjxAoacE1v7h9 zZaS^!>udaJvh7uD)QFj-ShZiz zNG#IB%nD`oGqWkN^XPzLqNPZ*yqgMvacgA?GBs~2T^JkO)KofG`Ntig8B5|Y+qZDNO>sS5bfF*($A@Er zJYeq;vfLs)0yXw9A<)RgB$sl@9bK$qrw$?X{a#=+X$6zF#BlmIE3bWtlFo#lU24w> z%7%fT6!;UBLKk(?DrFHTNQuRFirgn{Hf!>tzm|X5O`QSUo7sLOF-Y|nNZV!q9lrQVI zbzDfRxNu~h{~ual&~E&W?z89<4{wa?7rVp>ckuaa*?Lj1PZ)ib3ypJjC)DxIl0P*n;n~G{9Y(okW1J%rt4DCPc&!8%0FTS4rm+3 zCjahmi$67mvL*sXNP1t+LsJkg3Z>o{D3c}HDhjyJzLx(%6-(Sl^&Zn?{8M~j**E4x ztiKi9*ng7iARc!u%yb^=heYd~GnOVrh6o=iygTL|YN6ydtf~=Qgfze{*1OBmDiJL$ z$v23qi9Mx~oy@ET@7ag)yHI+?X8)i(8xHn4#wuPwkCghKuPGei<4KT4QhwCFsl^B*l#zv~+BxQsv@hA-LSeuoKh)VN=wnC+Mr;IGc zycAfC`Jr+oLzz0;+fux9X$V#FpxYe^^1iU55M<$t>cj=`TiTSoBZX_5Wx0hF*{|9* zJ)i-E=Fj+#o7&ZFxi!K@4Q@zeEp$@pUQV%MCM(?ylTz=or6Vf@LRD~*m3 z)}}bk6>y;?U2&7>%+nTvCNj3pD9O2k3%m%BChULF4MuD1aCs9#-(N1K6U~1YzV>wn z)&OO`qL+owcZvnfBW^n#Oqy9z*^y|xB{^485vCJICjQ~n&~E}_G@i!@;&gfB!<)E;)`}IKmpOR`l2$zf)5tH)gHx#{zoVon`iYF3gyV=uO~* z@N#taHJyV*GdHU{auX8%ZClPC28)Jv~YFn31t##EGEW2Vm2e9BiM5iA5%b+qqmIG|$ux zFGGSNLm3T}=zuKGj0M0n2QO1{7{aaFc0{6g%VVX_oLv3O9 z@AoPQNgnZOd7M>ON&a6M>3MLMJHdE-8R17ire#aN(lTb7`=CyF5O+zX>in8YJ#(I` zX9Ot`MPW+5#n4(lOKDNC0DNaA10+UHMI@GcA|$NLQbs}T_rk~q7Zaq+O;3PMM6+EL^Y zyd_Be`0lVB4&jRx2bx$mU+Vz7fOvNxG?AKe#Jl{p>zmo@F_Un&@rS%dHgyT+t$mgL zRcvw=MdKM7rq|e>&L1disa|?1qr7!Gm1AIZV-sUrQs{PXQRHKFMilR^mg2@e?l&?g zSqLR>@c4HDy}t$exQn`(eV%V&i!hzhXJf!YF#lljvpu{YDdrfNv8P~Fv}M>Y49Fqy zTv_=r-eSX8y*0T`VC2STX6Ce(%*F%ANGjp=a_ChoD?58hd>TE+$I-4*!21bBTh>af z{HHM%wr`|8g9rLJadrx7!@<4yH>lgb>TFF{Pn_v@*oGxY(PDOnKJrCKwiTo7^c+-D z+z!S@`0MGqfC6`2+7W2;>~lM+`uWOhKdDTqFp;P)BfQ^O#zeUi3l1LZ5K5@pIV`idTAcrraN=L+xpzj^c^kHqk{+E$m!Gu;e#pCE zQ=L~2O66~_HI#}ldO8sh5xnKQaL+V|>DlHEt(+bs3Y*vs>3FBEVb9G$dpvYMO)&($ zK~EdwF3IAbY2|E>hy5jWbR){u&sVQBwyQo?sRAuqjz--D3a4kk^FqO z@A_l5cSkn|<7&E6@V0@i-pbw_9Op8yv8_ctk-sw^kX>-TU*o4FM5722` znm3~vK|EfwM4Q0vwn3>CA9aHpDoldx=L1R){%9*6JF{Au)5vvsRVMwjx1qVcx3Zxg z+yM?h+hcasCX{IEHn2g7iMewAlr-b;s|89^xS&DH@hxIW3Mc=Rq+whP^Su#dW_@!( zp&Ea;7tQ_Qk41yTZFk5|WB%FC(08T$$5V_YlPa3omx=I1-RPr?od$C)iYAoG@Y5() zl5cq!L!?ZKsE*Yf}ri4 zCvSif-<}w89o#A-^J{PxjE9V%7_xBTBjbMVGwD<)p;ph}Z|?RU+So-cgb(ACIlhz8%JRFF`V0hSG+u zc>2!3mv|E76?c%j?mr94-KiG=tiKpM_}qAz8;M4#r<1;_vv`+_DbXHkSSru&%ISe> z7clpH?mH%cjTv!`R@l{CiW~dfE$88Dppt*4ZnShwY5-yQ5dLP$Nm>zx5bQVpzc8X- zyF!Fhx9oQ60e=E1THB0maJaX-vi@DY>MUK#WP6`HkWDxPD(_1F!bz@LCp25tIfW(7 znivS{k$V1U*zr!Zp2b-AX(06HgnFrHMa(Y_^0GbRHef``=RJT9WZBQz_p$_B_{XWh zh^mUZ$B)GdHH!Ze$-0}A&lHP>qp;?6va-69deDNxz4qz+mAVh&_TEEzCxG9L%>tjr*cvAG^SYOb9lr^+v2|xnuP^~39%&}O!mg2EGVDmq z{}my!EOZ8mA^zoGQxZ{C)Gy$^v}1-LdWaLo+i}}X?8A^%Cg$BOmx+xuVlc0e%Ybg? zn zHEIW&pe>0ft5!>at6Hq0iEa48-*MlqDAoVjogWC0xMI_>k{gx}Qzb_@VA@g`_kS!dfmzM33oBq$ggIy~XZ1gL8 z6UQwsg42(oijp955AIV$n3o|CRK!`M5YUUT~Omla%9CoDT}BJ2#!F|7=6&aMf%q*z(N!M$7%MF9S_38+RY>I^E*v zyNB(v($bbBe}|+8l!Q&iG18 zA2E(X^J}(x*-~*4R!{iZ9=*raqNH-??Pg?J1lAvyHU`mJb6P=eDLTx|-fg#^__EPc z4@dv#+`!Ck3X_?mv=L)bLx!+BxLxX|$}=dul-g-J2E5DhVS0m8ysHLNMPU#`(%5Gt1e}qOl51 z?`SNW^70a=_UCRFg3rJGk6 zcBxZ+;7YSqaqzyD(>_{U{{ycuC$zx7Q0Q;e2a{9zgwbK%7`?Qp^kyR)7K~jtiQ!p( zE27Pms6pASF-jRgr#7;$Vg%ZOZ!n+i9rGB+uDLVb(|2DiY+$xlaEM*WcUtiykC@wK zc^vg!G31>98M_MxgHp@yTUg_gZz)50Hu7tP98~h3jYjCJ?zw1_`6R?s3~?u%O@HQr zVE1^~TSiiOe!xBm_WtN-RbGbi#d@7ow}qH-B!;+CeuG#(L}LO-ozG7SGvIXQdnHTM}(FkOKX=R38RI$%7!1Y78w&VJk+2auEqmD^6*-WUCT+Y zP-K%)%{kE*dhPD!+Q_mnsE8;2-v0+p9+P1=+5yc$R5%v>8lZ?UriF=u2s^7d#&dIC z9msZIj!u4e)z%bl)&qr#2*WQ6>VK14FdXHIb7*3(&9L*JF7$Z*(VbQIH3Y`6o%X2m z>1Hj_TcQ15#oIsauLHi!n)8;%b~+iq!-mmvogDtM@J6m%aVUuTyv1XFQN){@h2cv^ zF`AUt?gJ!v`OG!i>dn65La>^Ax^qbMkAR4D<~%$IV4pQ+R_{+alu;q<7)z{c-+U3I zvVY7?zksN>oBY^^A0{fo__N?ZmTRz^O4x^MLMPrbv$Q?z-^`#Vael0N4W-EG?G-c;|4)3*CkpST95}U+!OdS|=W{3) zhqF`dwm!jz2rno`>K?gb^pEp1SHLBcPd@pW*x($6=sSbQ64U{Hw#UZdwGoG)+(?+q zmnjPFR6Z$5IB|Po$UTf3^4<68PwCwK^l&vq^}h8=W8!v@Dz0|PU8XOhr1EW67K+ws z*bdo!brW2v2f|*Lv&kf?QOr+kAHqes3kP9`a_u(7J|4P&-|mB-?Xm8|Y%u9Kh|vAB zBFE0SNV^Edf+^a(T!V4^@6088QDNJ3 z$m_oni)u;Uv+`&&Ti-;fwfJuH5oT?^QW2Jmu>MN4ySHnCO2U6wea1yVqA;s66?sgy z5a0nk8rY^xy{Y7aRLzL~P!h^P>suDdM+W?CkDIr`Xi^+D?EU#HeJ6nH@ULRcOWCwM85e^?Ecz zbk<`w#=HGpPNf{u!an7v2*rpVI33!*lrmXlHk!OY4?B+$Q&z)rw+MC%q2@*VKfpI5 zu3~Xi&h}x9N{OpdVQ}dTlZvEVeBfeUnaE1Y;|nGSnlqh?O;nv)Ad76X?&9sPA25M011g^zA=1 zR&cg`^=1eUz8t5%DL&P5&IXL}4B zx!lBZEPO^s+jn!*(9#T-fcs$!|LC|0N$kb2M_9fNnhiEO@Q0-56lieNcPO7SSL`l{ zlU=N8eR^dNrX*B8IAy!lHR9nz^%3;Is9l-MCllFxl2&Hhf0M_ zP_>bMRb1g-cm#~s9O44WdEgaERQy}dzwXR;Qqa1()?qRgH7LM}SW>*9vTTghJB`3S z*L)vE%ihU8Vs_#xtSsnR5xBw?k5-&5Mec0w7qs-v5x9X_p|ciw9)-Il;-GWg%+(R0 z;qDHkR6axxp~-=p?K4>86GAi-OC~p2OLcvMFEj532Qzjm zUq#xFuy5E%ae4)Ip3;;5RV+8}411Wxc(N8`(7=sO>| z8NtbK^~rz;gtPm?8@v;iWU|~EYWL~VX&I$bdp}H~oyLQ_=*r^bMAQw9?Vbv|qoh)- z1=IkU^!T3F%Gy}#6AvPUl(tVU5}g)xLo1{_2z-Xkivw zu9xvVEtr(#t2|GJ?VmA|U|oH6%P6RntKxz0fH{+Tu z%CIEZ;E&74I01eg(xR#Z&9-xklA%l;chefm)tYb82=7V%hrFM?9Yb{5cQ4}te ziA+nIQeLVyYwE|GPA3WAaeLOIAfHKA!g!vxS7_m7LhorXw!VSVwzV}p&iO!bvTHet zk@gr@qZ|^!HxFw3B>P5Co@I8GSb!8wVW7AMD?XP;FNb3aJZ+}cB!F|N3-YKo7c}hK zLjx7LGxB2o75{7xpL{eIF`OX>53N$Y`aJx@&-t<7q?aF?avc&`xzTfJF^yK|`XWsf zw1zv7R87Ee=u|+&ePi6B9^xOMvbKi8rRc|XAK@k`xpM4Z3QoIyMdapPm0{Qyr>APJ z`GY|}*LMggG59}mt+9BQWxyme6Tv=R2VbUezhikb5M zO@ehsq8UOqSxB<*%bZ3w^OBui0oPCc0=}Pap|Nu7rXkQ}VJySLzO2_+)|N`e9z2N+ zcv(iba)YpcG)_4X@T?+CjuNCndk-TU->jjLmE78mR_E45r)l!+9(V~9PMey_R{yuM z%&pI_e64c@B5d987gZ8+oEGF{>+ARnbK~OU`Dm3aobZws`Bp4t_^n$Zua%R)IV-~N zON!9`)mjs~lszTIb<$~YUd_t#_6mf-v|Jce;<&m9%{2`DN>WMM(?%y+v95)ZM_dRi zf!mO_kj5VD!pxNYmLk55l*dZ6YGPxEkDu-FJ@qF#?aV0q7zg{qAEIz`Czx1Y-^bY;uZ%UIH~VLWxwKa-qo}fdLQ&Kv8zu| z_mWhFLGLt@H11Sr6=WV6*42B%E$WK)UgM4gl zY-w;wbID4s(Lx;C0UU6qLq~sV|mS01oiW5Z8x0tP?sLkc%%pkf`kozBW; z*2$xnYlGWaSHZwbw*4TA?C=3o%r6i4ANa4iL8-LJsqAz1-BbbNxYcDSPNV8?ur4$$`2Pxy)0e>FcfbYNAIOVL3erfmo5$<+J-}Z8lxA)!V&!KN5 ze0gYO9r(V%tl*6(!{JoDXk-amWUZVJG>nA7N|hA$rywcrV&|fOizh9pPzx^{CCOMu z7dos?G{vx88N}HYj2ne=>=q8E>I^4w5k);r^nb_UREiX9MJJ6CXnhZiw>*P0D-z^Z zO1o78`wPtm zJfwg!ZrI@X`RSZ}H$uxu%m_HHxPH7ehc?e%)!Czd;wLCOu7zlkeSY`#V*@K)r|$&$ zzIo6c#rD9!i@&gxsrH+K)SZNCBJ7%>xYp(-dHJs74nLa2?N=HLx~hyr0{GJ|juwW9 z2?x`!$3N~PH?eqgiYu>)5*Wv(4b9b9;C*zR3BKAYqh17SR?&KN?rsyI=Z_XTiI{}l--!!lA)GnjJI&}+lf)l3N(cBX$2FfH%eoMkY>ZlGpYCjEs>9ICBkMFk`ueZe+odRujkO5a#Q+7|Zs)LB-URFIqyPU`{~V-d1w>dtiEg~u2h{`l)?!$WlEcAv_0;ORfeU!g&xrvCyOu@ zhegtNYtPltd5KI>ijo?!qoRo+oP>ofYJ)MtR)2Wf{t45Ic(=$mKqtRqJ5YHhfY`R8yCk$Jo>Ms2oChH1vbsB@WY$`Juo#Gy7cS1g%(s@sV4J zMI`qpskp`yeS?zfy=4zg&J((Y8Yi{o!si+(eE4M0o0RkxLF|foSV@K<@dQmCzfwta zjtYFHEi^_Vhua?9(9<2q%s=|afejv@^i_UW%Fv9b!)VgG0<{0QTyv?EPmblMAWM^9 zF|t{yvSTVg5B-^xhQBO-uX8xG8>Tqqlpd3yQMjp%j)9lW7V_>=83=v*@dTZo*TVV~ zOQqE1bu>~6=7A*X|E9I6G?Huyn>&b`zkX9S#&0eCWXPJ{L#ulGY8TZ6uk7@tPCg@ zw&ydl=A4%f*H_YyT>$6g<4e?g7|JestI-f&iljN&H3 zze8?lws+;bub{c3%J8*4ek>;6GD@ZM;A$rJlC3dA1yj~85;#*C*wG{Sc;$5kH`bj-tbP{ubVMZzCl1950=7r72|BwXnOMJwAB(L3bxHemhB>ulHzfVdt=C?!F893b$U8Zv%SkU43-m_n|jx4 z3VdwMEhL3G!JOB^hW6V^E6l*d{YYGK>t)EB4wT;3JO?SgNkbJ)@Im(MG`HZTZV0Wn z9_)U(7sA*3chFGy*&Z`JG4Id*d|2VYmit$E=k^B^0gnyz(9+Y)+`B-Jy*IOnku5FC zT@)Pj#J>w~ejo%(x5<=ek&(LgRLWW$Z{M*!u;4v1^c{xR6a_R&D)jq51PaIJfCJ`I zWj=R0fmhyTl$lMu)6-rM*VaYhVz?=N7^9g;iih7u*z08S`J>K^1@H)j@19~9Ir?GO zKO8i0X-PlR12L^}?YBA@eU3(Nx^wt0rR-jK6(u$BF(g039R!3o72~l3cO`W)vk~0r z-f<-!;au@wR}>G)U!JHmR+4;wGFmUALm8#R35*|oZZr0FOKaLZ*2%XhSL?170axMJ z^^Jdlg05b6L20U;>)J7NAIZTJ9y5LB?zvPLCnt9a{5Xtv0qz?$t3-%SrDI$d{oi6= zp6m10O2`Y`Z*{#*Y@=%?jg`%dc~#PT)%T^IOq^@?=@7XK9(KSfNngbjk^amAJL6%9 zcP*(z7-yJS=T?>U+$G-Eb)umz1}fH}{gGzYk#9N*h2H5Bvq$xOHA3|J%XT`h_i(Jx zWNAwe1R=wtpDrb?cBZ@-Trp<+a?vs6~L<1#llW( z>v(c|Y!}sKNl=N4nMOH4>@1C4IiS&Zm6|uBMcO>YI0x6Web>cGHCXY0cvZs+0*MPL zT84L*aA9bxv$Tx_2f3fQXe^%ZYKf%n5w?P{OyB>bw%6e2btydocQceb^;hAs1b9T! z;;!ZKuRXfx;4>rb1%;*r<(-?%tku&>X7-zZDWo9${U>SusllG;j;*Z~Lrg4`+hYaB z^8ffhzQaKX#O4FAN@Zj8K?`~J#O075EByTtjs;mTxz4Jg^wa(~hS3%jmvI!fKqdaO zI#MrJkguR_%oRUppMXSewX=M}<87I38hkTVsm@FaGoFTheUP1|JB%| z9NdBt;$mgFQee;$x4tiz8q(xQK2rO5JC=;vc|RtuL#wBr6mzS>!&|xW|&ieQ(Gt%yhk?c~oWm^hd)e zS|z6Qg=lWI3|Kc7wxEL)T_isH#x!?FBy1VN7go|cdjydIWKvx7>mNFem(kclGHgMi z9Bd3(mR$dmAE#5k-#1fEo7sm)&`U}!%8oeim0!@B%%N7(sxg@TUYMWKx^fz63{AbP z%vj=#AFJCvE0w&lr-d@!>QM_6lvqL|JUd;*(&-4SJqC|x3wwL20ZuHAI6i@NW_JF9F^Z+;hvOeS*8 zT+F}n-CFOt6r*nT|BP%?AwDmJ6ri|WRIRUrSg|<9c1f@0{0T<3@OEoTROG%}zs$n= zxi9x+7dfdP{k#4HVhB;zYOOnz(j}i%_Y~!2+={I;^E-hj--Avg`LprTJOPJT`{RR<8GkjL=#xqDFLwh>`LnJ2l%_=v)LqZy z?WRm7W(yR69JW!7bycbf3P1J?oA+ruMe0Naf#o@{XT8q_tD+7MIDZ^hJc709w2U+1 z3I9a(`S|KHB^7lARH_w^)~Sr?(3jFXHpMrFZ8@_>-;X~zd=$+UMIIlQ4IwJI9e6O` zsMTjv#-2^~r!bfy_E}BJEB4Rz*;H&-u>i z-6LI5ntJ@S`E#?INvG$!s;P9E75l)10QlZmbx!7aXI9xbxy z%e5d7(uRtk{()WZ6h%Jd$0$Us#1M55TvN9IC6zG&pRR}nCpi_JOD3zHK!r8F*Bfa3 zm~`iY21-DhZ3ITKYcQT=eD?@M@v}Y3A66E7hR`}V+_s3Tm+JAWqGi6~oda#oy^Ofz z^k;v)8AZlkp`|%M;&#^wV#m7~VeJX4g5$+=H#1uZzB=6L=bbm!h%M(LLlQmP1#`g5 zgD}VJ;ih((QFGunnq2xe!I!nm$Mq&hX)pJVrL(iR@pkx7Oz#5ZXawjbx_f8@Lu9ny z?+y@t6Vgd_%I{exJ8i+G6<6TyxYo6(ymh>u)1-)?cY3nI_`4IZfG^Kq1|iGtH!`wQ z%aq*l(M>3U^D9jV&Dw4$eRt>XF`8UAyO0%w8;_o;-Uwqb=cV2D$E)SAm*hweU`Gu- z`8%JE-eUjv=x-Q9GUmQ%Vv!g2(dravXHOyb@{EOkY4$7ZTAX^7Y70`M;hkm+l$0AzV^sON#mcMR2BMVcfK!XT->?nN0i;Q|1O>@U- zls{{JBl8%0RnPqvm_nB~!-0%e3dczWZ!Ms|+t|_tmdZ?HD5wQ zJQYUr++i56CS_R#Coz6Prr6x7Fd>PXg&mx3_y4H#Vk3}m%4nz< zm@I8NSy-9C?k2YSM^T+}$hXp170p+4!ji*((Q*r(fF1Z~Fq9bgeTVf)*hXFr5^TJ3 zQ7`vmvB$Jyiks;@cY?{Dsqh)RY>~>&AIM-P9$_U_GL*XjtZI{_aKN=7S!>I0K{=^% zu7e-*zR?fWB&ev5;7mcVV!s`O6P7E`|8{O4Y-SJI2T&@pqtLIyuQvJTgGkZdu4fC% zVjdL#_C^gevrWfS=Ew-2wau|el2 zQ`{*$x|k$Y_cWT~M)w{#m&NCJaoe2CJ?e_C_vBesa2op3E;+IZfkDX%WAfrt>eXI~ zQl$BA*KBY@bC#yfn7w*SorB9KFfE=et(+_tg)dKsa<}qjy&+^fTEQ)y#$qN1Q^sXT zY=I#-75iXKTvfH3vpe&z-P$dHtKIMEFle zuZA`v(QGbm4k{V*D!N`W{w-WLO$%W8m!`pWG#QhdS*;R@CYJp8TSRVNiY0tlrFx9r zT@AQ&3mldNPVdq-WvX1x&+Tj-Ww+G}4r~i2N8tteXe-WAWJ$Cewgg;_e9E*FpZqL* z^Y$v73b@McTjSQj&8bbS>#WlnJM&};t)Ys!l;QP5E0iYCys~n)Jp62rT=B@Tg#OfQ z$&Qz%(_8_!a{`tCo(&7=1f0TJ8*(4FvUB;HC9<&?FcGG(!%fSc^Zs_1AD?8STXzq+MFNodo&-EWkKSfI2s!MXB5r&-AAd2 z_0J2#5M}%ex2-Gx5*YUDs>Z6^tw0IPtoj_C8b8~^GC5-mYrTD*{hc+fk<|+QmsD^` z1TpD4W|%%(h28%b#3e6Am0i_&1~)!t?UloiwOt)b3m4_S+S!O#o!uO5<7FmB70Fdn zS@=;HqTyyxK!mYyuq!}vx!Bu0$6db8Be`~?aZ5jCL?3er2m2?UfHP?3zsdbr(~4K1 zrM>qzGp*THXl^q6AtzOQL|Zz&@9qeDqSH+|J9a4IhZU}9Wn!;a^0H_mKA{PL%0S!R zuMMSqro>Yt`>+9|md943r`-jWt4TOMSv$osBP;At#@;-fzd9o_(YmUg^d75;gj489 zJXbtcY&uLqY;lv-6Wr52V%&XT`9aYHZVxYfgD#imVPxfT%f!2@<*hip*aE7(NRo&3 zCf=z=m{m9UJN($Q+4glnVoW~D(C!V3C=Z>=cU}Goi|`XHOctB5(mWJ%2p7^#g@D@j^g5@#n}q#SI|uC4n>%KV>;Sa6t| z7}*~$-T;o=)MKCq$mG|S*Wi2f85XbGx1Uk|D!ZnkZ~|lGkD5A2*7CT6QM_vzZ)Ygo zr`vjU9;!5&E^`~b@i4QXQVn4rZ*~bM!fQ7+v4S2G%xuT2${O?OgsJjtMTj~pT=_m; z`6}~P`eHRGLz4|h(C{ZNnAw?BduStHYns+d1T^rAP&)2CL{ApqcPOqx1Xq{U&~i^f zNxhYfTRvN+q5S}tU(<4zzi7i)o3p(%QpS(g$0-Mb=)xCs^-(V&|7u#XA~*9hGuGm7 zn`>-9xgp5q8&x7hKK@(kV_}}NkJ60xvz5W9Mb!jcDE{oKk+t(uM}Eg$d4gV|kXH?G zb30EtDwg6_b~wk|Lw0Kij!Kvp-uu+5S}w zDEb9dBF^EVh69vnJ=ZGVbnz~M2yGjUce+iQ-wn-Gp>Dn%6gD_7^Tt4%JE$%w2eg|? zKefE(gZ`}4O#Aw%Oxp-uEWyFV855C=Izc<@xC$#NNHaI|rW;qM>md6>FpEp>_x{(y z%*w7PVb$MRQ_|jA8Ho64;p62lPo(Xr%)2yW$EG-m2Gj}lFnR7YbwYP3?&xV(m( z)$AXl+X58H_YDZ;``&mb;P^wBZKm@@S9|_A;^}H-$I|(jS({OfG}a`!3$Ew;9);@& zoAyEBD&vAmeQ*9DI_T}#o&n@z7t=CCu1{93OYyaR5AKy1`6nku8|JBsFFJ#RXt9vA zFxpwUy3ZGOvb2KZRWu&u@cmjwtK`mU#lTr~4=_sRC=U?z3Ze?3_U`?=!z@}xw`|X7 z{pH&TOUI=Rm<@s*-h4ezV9*bL>}rSO^M_kEuvQnEa9rM(9sHxrF6kc3qj3Luw!z-wj9>KK%D?tSwV)Rh zYPMHIaIRxa7*Wsk=}s{O+@dK^h0@hN4Cl?05a!1?xXKTX8Ae52>9|lsVC0YvSL%se zksHuv2I9tBam^c|qgq+T#|J5?Y!9DmL|(Cf{@`E{%GJudIcd_P%5eC7b?t#keNH#K zL@3F*vJLl@52wa+m@CB`TA~Y@N3d4r2;5AwS9z>6^rOjcTF|?v5MP`)6u{zfv?}ae zGAaDRcbu$kWM5)9Fn+ejwM9y@do`$ZZoYh=aDY6!-Ppt?WKE5F;g@F&8&yOjxf4$+ zbx_I2-@=N2s>y-vWx%3DF(y~Q%yj=@7X95MKDbF>)(W~$w^524UHf`HY5hHHdeX>} z+`fPSk7$$b_#@piCa4tMqR>m8#^S7C(~bnH?~R$Yfk0aP_wX97*Ln`Ojzh4mcK7tFH@PsN^>jyRaBM z2M=@0?;Ze%~L03#d#WWe9_px6`$rE8i>Y+HU=^gl|{}s{~12{7cL0 zKGPly!_nc&wvL25*cf*Qe-&-S-E}g2%#IVj+j$lHM8frS3T93ZLwU;hx0}dq7Ry2K zvpuFytw3w&=%gzamgd@K3NnS8SdZ-)M&IeKTy`pdOD=+SW?NbK3OOQdq)l9;k%9_j z997KFlMmU4VWFy;E1X`N(pA^6mtNI(+q`i<$;tuvu^zq99ifm%~v_x8| zbL7)oH)2@Q`6&pY)Eizjk`(#p290}Q*m)D%-}5F8I9Fb$F{iIK;Wg%Di6Op}@Rcw? z#81a~ATz|j#=Xbu6>&B>v;vvCJYycKE$NeO7o}&2Xrke67%og$brXxZI$B2);ie=3 z`OkkCfW^|I-{Te>O*w)q;KU8*ZdV6stafArrL>)AC|6s@2k6N(J(cP#Bu>)sPHos( zSc5LG8V~$z4>3B*q`}%6Hy3q<1G;>7a{W4*6wwezj>KHy9fehqgxh&pDfer|CT8|% z^lggUC(lUAa|>g*g*^`ari1j$aMr@SxVB!6tFV7^rJ0r8?`U=Yp<_EU^2wgog$Y-p!q7aLjSE}RPY z2mbo79Hp1~Zy8F@8smxk+Ri9N9xXMLVpJ-}N4*~I$C&3UrH36T1_x2e>5}7$@p0z; zi;NZRqKw%u{$o6#Hq1X76?JIElqToK-WD-~GaP&O02zuhR^%@}> zl?@j9l9!7q?Y1+{N2br;O-*=62 zKW>TA6xI2vsL^iB3zEstnHN*mKGp_Em(Squ_H`H~BwS;4om?qb5nL~)+P+S?2h)n! zl{t--<;!{x*X@2kXJL6CjH2|CTGgb$;u@m+9+Mka7XjAaulGgiGJm8#_r}m`-Le^wT$O6HP2xMf(RarN~4R zYkt{2{-v;3a)A%8(nF> z#$JuA3^X2sMG_VN;`q0EVSo=f#g9COrt1Zw4nF{K;$i(CW!M~32fkpR-Lp~LjNj~= z{5K~keQ2T;CW{5PPwJd{My}KUiE?v4-C|}1&T>1P2&L-aC0FGb6Pw+`zFN$suHyx6 z&X@M8>pEtTUOBV6ax0jF%HGR8G?wLkJ2M;l_#4XL@g4hQ*luQH^Qnep2SymLmqIR> z7e?lqPg~VSH1?F4^*FyCB5~y-g&5w1yo&;bAlj7g*@8DE8$wrRFKaV0AD7%;b&o1b~beXJ#%Cro9&8)Ql zcm(x54FZDbygvSSyAo!?($bBhho2&n{)(PzDKKy752Hk9W%Kd}gDlLP)1 z!DH;D*(3@B8l0;rJzMQMCvvu8n zz#0|h#h4h|M}7-2vg&_MQ`}q6JJD8H%!h(svz}9sX``!Bi4bfN4!e6AXzbQ;MIxUk zgDI&G6}r;o-*NCxH8yuqA$?cel<=8AH!^EIsa#5*RA#X&LkD-$ZGfZMIA zQD+aK&7(HfF|q)4m`mf?nU*1r6IP$sjn?kqQ^hD(*11pvY!^cCI*4`XbDIXT$|D%PNM;aIrW`a<@8AP^&#}^ zB)bMs;fsSmez&m%M)b27wpHeGQh9s0Q;@NTVcIC(KpoN?+rg8bf%37$;eL#m994#d z-E2|iFf&W!=cj)~)7ksobq~~m z7jegT2~xWH4D3Svwu>(^oEGGsVkVCGPj8QW{)K4EOuZS4mhIb`ViRU?!IsWmIz z^wQ?2UfGpbf{odJUKC^IxlgpmzG=-Bdh=ymOF0_j?)kLnNaaS(F|x%=GEp>9&}_ad zE&gqG8?XNpNv#vC5H1l)LoKxIG80a{Yjnir*E?ruER%~DaIK#d@~S6bhylDf1%>Zc z3Ts4Bns`i0fpvUSZHt|X>Y}>A{UR<}?>Nw&3ltmf@e*A7;x@*l1zdGD@1!6?+jP28 zT9nqKd_0cOugC)oK`Qhm<;C_cp%eDS%T4fOACqIsx4jdV<%l@1Afs7nv;8zXM|Eu6}J{`zv&%8EqRWaKhihvttbX2A%J@<*nM84+Xwk z!!)QkPxUb@bKWpYSrnc&(F5x;KB%4wP?lO}hCT%@ezr&6g=bAHeX3Wa4&@46JjU{G#oG=$EvvOM?DL7sPrLwK?ib185yl_3M)u^SUxhKeOh``QRY zp&&c=q6a_03G z9FdEIOO+%q_KIZk>wjr+V(!&*EDHGvOPTS}E857)mG#wG>%#4IGS`rREsehcrFbxF z1iI{S1Ggs2+;?2hk;!#s3ecoWbR;4!wqUfSYt2PukHfnZG#i1~_Sk+jCAY9$gYCIa zlV+unLAWjL1dJxKNb)brVqvlGUgJ8^W65=43gy{J8Pb8_B+;YeRb=ps%tdIf8pgvE zZeW)Kw4ox-L1#7e&;a6^(T}Yjq4ZtC0sgWBBd}PJ?~dM`tbgL7GrZzo=s}_T@O|<8 zj7JmVXtqaKd<^sB7A5&^(PLLy<08Z9n?AnWPcQQOrqos&u2a=DJWzH>8LSztzGW^y|9mL?EtUZ0DT^ zN;z)Vn@!Qi4T7A>KSlR}P_m+%p%3gX?T;Uz2cpFIrcn0;Upko3gAZoJ2Ts}v$M1NEvzlSQSo~$TEy+U${x$Q8)IpU5O+!b_gN`U zD6KDuHYj2{t$mOFT(yQre+A+47N=)JlyV7DZXpQU zm&JmmQ2`DD8h8K1as+vB=T#wfvQZBZ3mO4JA!Pogmw|DWGOq1ShCtwPVu?bWv*wm` zP;Xb#A)&x08h_8Pu$XBu8(WRypLqFi+o7lE#MeUS`AIVwduLESWC4%$m6*l|Ysdr8 zU_@G))?;l~*u(_^60x)~Whi4bP@Pr}l*t|-Quu#OrLlpUo;I_sC7o+8 zrO5=fz#=x^F;DGAaVv);7+H&<5E~^!;>)i{DU|LLGqCX8*V0>I?ry00{vSBGuNyTg z$3G;8T)?6__%au^6SmUUDQKMX&FIO3r!7Ri@%IcmB2>B%% zSBeH#z2nDN_I%+=Z19Xi7n-t+Pbc=YlaIRT%~AaGJ@ad}#umzIt>J=o{V z7*!-)gKKfhslkkmk%G6CLVV9v0@b-M2A{pn!J0h_d(}?2qI^?a#>Q2m5+nusb)C3o zJ1DEh(zn5!Qg>kp%}k0Vt+;W1NK!qXqMU+Mb$uG1Vsy0oVV*SsyohaR$xsH@M@E(u zq%fI6QrJ7al#xvua1{#O$Y-%kC{`tcq?(hJ0^_C8v^<2T{t0z7t9R5_X(woGO~(Zu z?8~H}e}G41fEBRBC%(2^an@MKPmCp>3Thgg+U~QF{hWvKMZ{*l>dIo2WN8sEmI*4a4csqEbD zy*3$Ffj3)(^PGH;E|X5lpg7hd5CqK5q-2#7@{B~|630qk^}#YXt}qZ(WMy=&L^AQ3 z&%5*ZZkRCSziOpDY4B(Y|A z)f?DHeDJO!-1pss)s@GMs<6Q*5sqE+Fn{Pu>wnkFuUENfUBXL~N2yRja&ww=7DC)u z7MVWtyQ`iyz-5Y&SrXGjtmWPs36uELg9!jB`Le2xWx=hTM)pxv3oq+-UCE$<8>QP3 zF8TI9#VkC)m!EcFjyNFi7{s?hTKva$54>ov(m*9e8N<3d4qOz%(?aE zgVLJ#^%xHJW4^i8E0b4`?CEfw@;RlV-bHflxt(WonY8G6f!%06jxTtov4zEt8Clb- zJt;6;7}BEqv}u{f+67}7B=Kd5t3dht>zx;lI4h%*_{;(u=aZ+#vZk$fYmg&gnYq$? z9lq?mh_8KpFj`c-qR1dQTTG@j(!E7nb9UjgxT?WDy1y}ngYP_@mqMoul<`7;j+xon zmzX9#JVsXU=2Rp>$HX2AmKj}WT4A=oa341f<5o11`v(`ZQn>oJ;F2lzhhU1T<}jry zvLDV3?}c2^DCDbT?tAuZdQ3nP>Bg7@8XOig99H}zZp0E00sOjDelzP+4~v?7+xyb? zGN40Y%GGqC5-^XWb+jN|7^RVmD^Xj$!va-czO-23S^RsyX8>aP5lur>6^tP7)5CWE z*+?@BE_Y5(Cg8TsR`%M0Tp=OX5|>jTnqHf595l4KK;1-_%j&<>8O zUg7ln)ol1&zt_bKaT7=BlHJ>2^`8gJoCBkycP|bDpQ_6{zM_(;V%QX&z>_6TSo&+VRlZp3`>3C zbDj`)S7eZZ9kHW0;qp{UsMfAybWqLS>NH|U?}X;g>6}LL@u;z)p=Uv_!IgRkUY>+k z6!YEs5XHyyKVt1nAqz^Xo*W}J8JCOi&Yu{994W(OQ5fl zB#*XeP5GOc8+XioI$_iPTH(xVDae0&OPHA`cA;DH+xnBn?uy66C(%1jNo{6A=#c+l z=1f6eH+DrXJs_HRkrYhfalOLB6Z?u7kB+OlDWLu>WaY)qfQi@YfteShYqNR7WAnVFF{;0ifPXoOmmN;7D(O!KS8GGh}T zT8)tt(om3J{+TFdF^9Sp3(!G!SRh}Gzv`j~!$j}4XEpkiok>28MNP$=7e5yRsLa0n z%5dES^E7urA^v%F->MO~lUrt>Meu^yZIz3U(*`23w7riG`|C;(m>_ewotG8)Px_UV zDUxsAq1m7A+Rey1mK=#YJbwG=yf{P^ro8;!nF>V`u-d|^co)%Y#ytYot`cddaa?$^ zyKd^SY@wONnvU<*twqwWQwIw5JYBZL4N5M#o8kx4Vcom>&m^58$3101h|dO>N7+=T zRyO<~mk1BQlB-3L{*;YJ?d#xFJUpyxCJv?D-xfPdq z`>cWi^F>_5(?Qc*lRQ|phi*#-#E{jBbHIK!vhxiKF?x)0Bvcbh{ z!uEek1E(|1Z2q_#I?1VdAs7;*e13bD{t9hZ2K92r8+X9Q!e>zTz8F^0h)Z5R<-7e)_Akvo3^|eeNi{TT;K78OL`htH4Gvw2SnkL5cw&3K zm_$VP+TSS2u|__LT%2to+^3kGU%gG`!Fo*ZPBUn5MYdWz+C_^v#XR$BBD(3F<7g!T z3oN=XDY2mnvrCHV$q8&tOYXa+b22l_@l5nz?e|8S;?sjsP(Hf7HnNA^I@1VLveID# z=2I+&7Y49vcaWP9T@~u0v*|TLy!mXUbxvBUNIZqsC2MS*8^-5vuhK&KlV_YQt!hI1 z)}aRF>U3|2GY{^gG^YQD&MvbW;JJVX<2OLsym{{|O)G%K^kjI`-(v0T2^%2sNGz9T zJ+QHXpKMO)Iz6`}A6rjx1tm0S zdbte!>qUXHZS#fTkc<`mytf#J2``-5-@HXltX3Qvt2KiASC$~z9%DF6VbNnq=)o%m zX~io!d14In9)}WNUJL_@kSNxKVR9|~%$>p&cELhhCKF$^&Tp~N<@n?+1e=>~LWI*X znnJW^f*=I4ZPSlaH1vq=dy)~)1Cy5@581Wk{xNi z!_j*tZL~Ew_naER7as}LM%CEV`oGdyTq#2m-}(8__VhZD3t0GV3YPRvCf2E)ve}e8 zTT6fs@^0l-6EHM797M*i!`Z9jx_N%>EFZ7+NWr{d>q zFfuQ3g=YtB(beae?+;$D&{fs0B5k)JCC$vl4Fo=h7S{;1%9Vq%&8zh!p%KW?~t1@LP`T``HAqIWyK#Le2Np z!YIn^Ut|jLm6sRE-6ME?@xrivWvESob9B&OO09QqH|#jYFQBZ|SrtKPG-!F(i?zS6 z%yfdrK)!j^J_IjG{OkfnLNR=Y9N{>Fuf}*wyfh!Pv#<*)du2K*`D`zEhc4*}j~%%m z>l{@16{=J>?;0tFxnq<2QIY{0F{-rT<_I3=o6v}e69fP0A943lV3OTD*OYM*4iAp7 zro4gp-Yo=OY2|9rl}4VV1vZW$w)dps^xrMD4EER9Yi0$WjDpkpT2o;M*2NaBVW z#g8(FYdt8c(17wZ#k6JooDv@E%V}gOT$#~nF}wo?D#{B1lEs4ko)b^~uEN7%pr@LOhQ?f`>~?U27ID}HRrutkkuhgEi?yPv z4TnJQ(=sa^Xp0WJM@ubTaA6E1CPiWYTa}Beu7`nM-uK8>wgBirCF8xXDJ$X9Mb6n& zn0_&ohM`$kOvg{$7+ZSO4R-o$Ii zJ@6ufHS$ARlEE=9jtFumCND=7L@nU4zRb@aQn(4x2VmR7%SwW@?#$1o*;9;+SDL87 z8zOA-PRxk#K5As4r*9Zp;3E$+`Y*)u8zfbn;Ca=_?2J(O{h`w8jhQg-*`udnlR zVTGcduKlQ$#ui=dgHsS^bHNd8&D<7(an(Mm1wWDT=kF|iB0|B6c{ae)nONE!WJOB4PHRgmfQJ?21ie48kYqu%+UxFtxHvF zXxuG0{&B{|YgPzkW$~5u8azUd;*}y}tzUdS_-err?30XCigar_6vAdp2v5_-4Ljn~@ z#cN`|vL@DbOJVx2SsZLhBnYfiP3-dc)EbLbuljU-Hi0JlITBLKUUl<+PCf->=glc* zcDn+U5>L`YaJ`smDJ7JWt~}1AmfGiwXaYI*9*5#hRWD{#_tYaxtk&ny^0gdjnGUOX zO=CjU^feQ%q7ojX8=QfYMQ7yGAO>v&HF>M5IsJXk$qo=?S9uZM%wBG z@SB#ujI5XMLtOUFvYFZSI5Wn-fo*Wowu3jEH1tGONc5g(PE*XVL#6{jibnlBx-l|n zsjQH+8`Q#W)Xp?<2#zxtuZ+k3@6~9UViTADB>K4FnC=Y1O|Q@R2{(_iW6_K)H8fTPT}_;Vv$$^8@7 z=!S_(z-5}1HP-rdU^*hIiGGe4l8+vf6#2B_v&Tqre(q70*!>B7B=?0jK%f$@O1umv ztAmz^_%QsLnbkcQtPx-laX5O8k?p(b0fy|_l-G9$QKTI&jr3rvb2wU3rnUNUQ1!qG zsUeh?%rwGAs9AA6nNSc5k`4p;DhrSGb?$l^T6=j1V#EoLk z&^Vn3JH)m7IVUU9$lNI>XyG`lo@rqz>L@qg(3jNi2SK|f?hn22r*2)Ab_S+$8QZ&D zE(&bm?#T?{NtFBKY-K1&o)Op!eEWM0{`o1VIUG``RCxPyP-U7bjTIfE;X9@YL!;Fg z>c`!Kfjlq7YXcRFH_vkoXm9kHJsp|hMzS&suDh{vmBFD0h5>09Jm^*KJefuqUX-W9 zQq!Tuc@`>AkU~ckasT##5gshggfXJI`5A!munu3ZQ!F!kK-@p)e2il0+FDua5BxaO zlX;9lpSe2cGcDMWOPp!4^m~~N&z*7;c{dTJ!Uk$g=2 zvzKR@^Cw?LJ?`KdaXyh+|8X-(8N27paU<(J4AO)A*RcI68Z0n33;crh3ZP61;7;eT zDD1Tx4YOrS6GbXwxA^=)hbVMFFQ$^Cl#>=#SM_}BT+$U^Wjn1mvK2pY=xS;uuDr06 zH?k@_Z);Y#@MIU-_hs6Ulf!iop>~bPeo5cOvs|zD594)fqBI6~8m%$!*jQUt@Qt*y z>iu9(QYh1xW8C$qiFOL7xfE$VcV(e1ynS@*c8<1KgL+WpO>$SxkWpH=aGd(vG%zEl>KyOTO+St8ah5GDa+IhBI z+EH1H&f5nkP=0^$WMfBvf-~z;!Jcf@$i|fM=%~WTuRWPCGd(GWT>HO;-dAX8ls}Qq zo}=JcOd?!}wgac|LA+!ymJcD^dxJOuPvGn+5_9H-2GX1s70>CmxP(6K+GnDIlmp++ z(1EgHMdbv2leo@ef!9ggH+CHe-u3B2;c6yyr@?)O9?-}3?@BW*Td_b|JP}xqb>0`t z%FSp**%;D`4~Lu=`3mGbPvuHfw}Vx%^;@vB0%Gx2YR3H%-{nzUhY3_sP7qzXW=jCD z{V2PY2CqR$O?*Z3*}nSstx%lv_AIWCSsYi=13E@1Yvz3Mr1`y=?HomL_EkC!BWpEF zN~G`*5yQTx-2h?2S&{T#jfN^ma?p6BGeFb^GJUeDI|MYE#W%)=4hn~<50@>{PHGCe zJYwMeITWAx*G$FtQC)iEX@J7%exU%($Jf?t;Zrdb*%t`LP41=`0P!VWE%>sz;^3|LXQ>OMc&x95AC%SSkcYF-7u3=SyX>nMok&*74b7|? zzp^>9e0n&P+7dxyR~G3-(I0M|UoV&POX8H$5W5PNY&x*GBV2MNM!1qUa?&hh%#)P{ zQ?G$Z{gj;$ac-Gl;8=D3ej^(=6FO;v#axZ@@+DDqCF72U^e7zVvMC zdiMID7i=6-E#oZ$kN)CUmCN8vb2x(h>WX1pq$}23(S3bN^}@&;>$K6(VU+`U8w>Fn z$Bwj6XXrsvsVg86d*#Ju=m5@S)PY|$J`Pzb=TVy0kd#ETV6dP3n;N(d=PS;lg@ulAg&Jf41=c9G6?NisjeO2;NM+<%~p?8z#@EWVGVqA{4p~-3o*py-;?G{!7shklvtZe4NuKxX? zGjxb=mK11%^Hy2H(02FK$Y>#KNQP24mxO6&42A1-9#>Enf&BNdMkWjE(Yln*Rqwjn zD1X2Bu9ievphj8?`>~+3iRJ#RL}dTuM$wy3rlwUEQTQ<&s?6V^qk5iGQDA4_nxg$5 z?jx4F6?qwiW4V&#pszzI2W9R8xI|@`m`f1xLrFr@j8oo8lEj@VX)u6dqmtn1*D z6th4IJ9BIezQf>VrJ+hy71k*w`G*hEv%YPhBwbYrPwdY){K0le|7|%;tlrv{M)qGE zR-ZBpz6(OJl6!Cw+RLndX4dLxHVcUra3?oZwxv)Rn$rYJfX^2?fer4!NFrT6`ll@m z_{s9NhKkjC)P)DFaONCFl49XhWX3@pBIGm9?@W6T>-U$IP_Z66X^QSYcENDsX#-04 zW$x3Iu7TV1UVT~`S8AzKD%@hwWDb_mMwX(jW&F{UqUtrI0(xkFXy1~DLmI|?HX7mn z-o=Uvz60?PiViEyF){2T#aH%3K^OpUoT>kNw@6`pSlQ*!znp7Jk**RdbbI-ou2B(b z-QVKoqImluEQ;&$AhyY$J%kvM@bYu5dG)=Fc%SOU%=whf!1_ zLTs+(xHMVkAf$*l&1IjPK^iM}dT%VUpNpcp`sI^GFn2lxS#;%eWd^Hu`6nn~ zpzv<|%sHnXe6|jvfn+l4atu5&czk{V5EuF(enDF@SF`k*kw`%#@VqirbSACnx%HTg zJ=LKy4nHLxqG{VDqT)N1P#6#PRc6FvTd_urZU`yEA;s0sK#gNOH{d(f(vV*y{f_3N zoe)>kK%ABwh_6$1n$UkCeUYO!fst4N37s@wgsi-$bckFf>ghbk@_pwORiJfFfz;d{ zOBDIgn7B=O=8zUROA6R}qz#8Y%8cd6Q8X!2r9m9WUkUwSI z^LT$6T>K!C1`{$MmzA#8F)=SyD608IS%PjI)Y`=U3#>%vOqK!MDq+A&H(M{xhfUE$MeN4bHFeCVIj1LPDDzLdRi7`v4Y z#EKwt2?ciBu#ILR`$vdY$&(bD#e)UQT1cA|HPhjm($N2GTZR*_y}MA%2|4!Dk~DA* z+IAQPXP<>kD2RYN6xd-9pEdAUUs+ybQFtoXNeW`{D{LVk;!xPuvAHk=*^{|^38q+{ zaV?Ip&1=B*W?KS6psTuBgtn_`86hM{1QTYoK=xIA@wM{fz^>b|WWW_fZ(hS_nYZz=yui9l ze}cd3Y`ZR-r2DZ#Kk27QhTE5$u@@%rZD=T`!ob zsA-#CQW}@Mpl#Pftl34{q~0Dn(xIKxQ1r0lu~kcx68>T<_Tg;PPdz%1Sfxn_2&dabdDO`c?lVRQQ!VfgMi6(_S-VmNG&{|_w} znR7V)!5OitW`%o1vpUae(tq=Z17FXoP*hBwk{&y}Uobk>4K(p?3iHw8{ma0xat#D) z-$Ns?>9|VadB~4=ifYWDeHhy}C?H~zBV2I~4CdObkh?B0_dwCMWXX-SKz+KGwS zZRTFvC(ZfyyvE^F(a==|TVuSZ0nH`n&SO(v1>BCi` zdtVHx%hsQtNI^sfWs0HBY0d0t8ccWc-|7P0Oe7e!4XA$SakQ|4TZhqz6gq%;J+U*Y zeRQYUfBzt!HU{BDJGsCuBdeJcLjE*w3?q{63NJ7&gD2LMra=*LIZKp@6}r1oV~4w7 z4j3{ZGZyoCMrhV#3r>5}rtEag9Y!^i9|B9ln^=N*%PE_Amz7%7Y%{yihF26G@|rh3 zH!{O5CA^(6JdoI^<&^P~bueX#Y`rb{h>8_;9Fu6WT*c17rE}Zrv`CUwDe~@Jbg+d7 z!OKr~sNnp*$9b~oEXbuK?((%PMIdgWA3U@${g=O|AKgAHIjKDM3`=a$pjfy~`CERm zA$$SsR z$#Y3wmbOOr#~%|$+DV;}Y!tL9E`5}V<>|3~bbu0jMHwQ&sl@WBlCox>R(UsE{qwQd zZNPI{3z^kz?b#hLRUVzZl%gsmL}xpbQxBxW__E7Rjk}hwvoM4r^_T_$SMrkF@**as z@tAv>ts6-r>hCU2i+wa7xT~(NPX8@+$HHBra+zG*#Kb@WTL?4TIB6`FTGi15I)rTn z9KQ%E%gfp{g-HAM&4XChFuTH}h}iQKjUhtK;5)v}`}ko4iba&4WTWC?fE*8Sv2``| zWVRKKU%~tMeIdPEX4K$14?L{WIxN>Es@Y*cHFT)~&Oc6b-601NuM{fz!E={s)`-Wq zno!nE6QC!wq{?R@X{}iJS%90l`aoZ&7GjrPO7&d41nDblf+^ODp#BqXVq|B-!R&5i zPdp(kwjP=rH6zq4QGPlv0`5-jYzlE<%D`uf5OHMCU_GGg6U$P_W|y0O)7cQf zKlsM5Ocq*sqM1b(Xb(2{uF>f@C04-Q_-Udk;JnPlUd6tIrOvb$bg~h^V=mp-OFRXC zlUhTWG*~Qi{i3lY$pyZ5wKh}M(r-LV39Zb9K2t9h^tJ-?6K*Uc8Lv>GpC~%mDNI_7 zFFfRxVm>!meBs}0laU^g>o-^_mt!py^rHLi%Z9D^&_uhY%{{_mr7`GId|j4!#+Nc= zXawOd1si?#=g?RSK4yy^C1c%Ysk5o@b|kXkIzgw=_f9vA-WB3Cf;3snsF#L7)n@lf z#Pa4N&fZwPyaqMV*z)DsaZ8cM7C71pO|9b-Df)az@0M)Ly9L%#%rn+l?ne0|@5E0- z$I}#(S7W^(5%kL&VP^kTu&tS71l&EE+4vUFwWPWp0h=-RuV#{L>!>_5D5kc0lNCbd zR%s|9aYVREBP=u0rp-qq*6jh4l5VG*@Z2Zhl)D)9-HrT-w!&-e2h4#4YP_#eu~q9#8yLStg8OcoM6F}J*hjSPEF+fX+x zz{ExsZj9HJG8Fi~dq6MQ4eN#3uf0I#pQZ=cibXDAax zi8rqupr>eXANv~R6Yf$%8ejKFe5}q6oGPnY!pH(%+%Q?&i)aFSiywfKuJ4^GA(8B1 z{$h}UCn*b^L%vg~7%C)>$@#G0*sm6ZK#=}uHa`0ur@36;u_mqGye3`&L3K2?{ox@G zR>8e6&BE}vVN@kh_D`h7`l}M7kXdCe1-tVX*cD*v8N~t_UCpe@XH=+6(e`n9N;09+ zeB4Gcbr3wKHNi|`@at@0TT}~E!(L@A=~@Tl8mt2;mOAgw(XzL?3Qhp_< z&zs)LzvvAbVKPm?DkJ-}JOS;w9EPRB1r@iw8@m}O@Vy2w=a5%#UA~)xpM}ER+9@u| zs4{&zC3$08buad1bSC;wv{=w!qaKt`l+#1s~v6Rwrj*)*<~ zfwIE%`*xhmo5J!)ZmmFa>ICKr7qQLtKRxQok(45@f7lW_h?D zC0S~DR+?zgzhDhqIoGwIncd)8L;>gDxhl;^(fl^U%A9jheiBtIUp&rU6QKWVnPUaz zug3E$>VW&5YcNG9=}J!?oXT3Jp$eP|y%Ah(OFc+62ptgwV_yTeWbu zW<@$ZeilV9j>Jf6eP3fINd|{JOvFaetrHr1*3$=K{OlWy6}ya{Cqd-bR8tnpOKjS4 zAUUJeQ38DD`4ZR=JYL9qZ39ZE(vQbFe-rA5)BL6wRX*~&=$fQ=2M7Evuz_KPC@(iF zm~||ItGJe)V2Jzil1xs%IUT~z*=g_{{lN(H%v@a8g2(#Wy$DqygW(pK7uHHBLH{`f zUDM}e0rz`ieH?^7hsmLJ#p4t%O|3|ZdDf-_MwV+gsySfmKJtyzb`pW7)-R|~sM{7MI-_vxV^xscw4@{>=>m3QQC)5=vU(`A zGt9(Y6vgk86+>xSae$=ZNu^virp`h^wnal}(vthN675B1P<)Aeh_55p6f7loH85Fw z_x|U_Eu>sp@l~%#(X0X1&QZzAppdLJq=jfbZ5*kr97Nidc}|;I;CM`O`8}L1tPj_m z;7Sj@)!ps`5iEu2fk<|Jzim=K@(^seHXf=G)`V$$uzL&e$FI8|`LedsSb@O`oNs1N z+^%xLmJflst^YhdTNxLB*1trAHY%+d7mZwpED(hhS(_F&vadf%crgEX1cN7pQs7_N zO45!~yRovjlcB_8tvxcl1 zjO=!dl9{S07CH%D*auTL1TO?-{-q-AAPgfP=iM~26Fn7qGKF=5L;u+p zcKgT~TIZF%45md=Jb zgoDW6xZrriHbt%EU?~<$@CgHIgHxo1{BtVNn{qnd<*J#Lxw{`urMr}-5tS1lf=SjQ z-&MkGM#;(sN^W1HQhudToM#)t{yAaPcbyF}6dcG9q*raZUpY}*c&x92VXbu<=^EUn zjK^j4G_&Vj(Tb;J@S`PUO&f5ICrjo?mA$7L6*EwtcRpyUQ|mJwnj%S8i+9i&693|d zmyKclI<1Oj)?*aHA(9^hDt`I!g%9gt1KG1MW&HlmF%+M03L5xAsmqKj=hGbhtlEvH z_%k{mrWh^~NB!tw<9P-QxFnMXdE+fNks%TIgnLkwkoY%Z%w>vs>cAjmal+ZD- zj+yvtDYB~GZ4wriLr?2*v?OJ+zF#sNG;hqQ<9oU%4Ioa)(n*9@Pnu>*9vSq_#r zvLQ)IVGB6HpLoTbN9+SWC6rNZj?bw5EoQuJRIb^-s)ZDBmA$Yhl=$W^Yi4F+jBV&Y zYiv}sg(dR6i6hTWgTGt2mThUYP5f{=q3EDQiZOu-;~7VL=t!@&8c7QgWkBRq>)$p4OQu9&j;5-o9YGqW(xkhxrRcMz@G znx7&08dqM#Szm6G|9C<_%3q#y$_z0ft{2h!lZg>sW=r^VlEH}7*}T}L0}51lQH$vA!;vZN)DB31@9R zuf@`a*&)DcexbYj7#tO1R)~i zkcEv|t`uEL19a}2baG2YGD>kSwdz$&hGJv0|EG$SNy9qZv?#c`c(*M!u450<8ti`d zteNJLyWJVw6sw7~y?E`1*P^kmE2_|-_i1#=h>s4mD)yb^>rg!U%iUsOd9QdtV^e=6 zjd<7Zyhh;yj$p&>(I^UHc#_6KKpfwF1GVm`D69S|!I8#_tBNKkH#M@jmr8M3y}j8P zdK@{I(hcMq!}}9j!2s_0Jls#Ryavro@S2H~p+?;PukYBo^dAn@Q8wNr8qC&1iJhPE zRfnCfU+>ejW<)>we61G+5x_ZLqQfS2fIR-DAap41f7gJTdb}k3MhH#zJ2TYz2O8K$ zIDy3>DLu{QpETH>4=!It=fF!{xr&>fMY8hy-Dy)6p6hElRsaVfWTfK<}N37EZ#212kB%(qa_x7!=~JAuH+ZH|0M52@b5Upj9y#X>5lL#lN;DMKHY0 zXQu4D<2-7K6?4z+n>q1t%HK<$4ftm%4<_w*W(!nlM|PmpPOlzkV&(fOwoxZ$+r(9o zqO1oNKclOKV*Fe41^Do!ykOfY-_3gLWzSrc0|6KOcP`lADTXcj^w0YDPzNr=@L2H@ zt>o0eJ}_J?(3(c%=lZbV_|~*~L<-R>ru{@2NGvU9WvR=maY4A#{y#Lr3X;SHhXhDG zGKDY{mcifOAo&hf{3qM2hvc6t~_!}t5_e{z#;V4=qW=!<#LA)6C|e~9%%u};60Hb&&QA?fkcoMWY;C6t zG_6C>3C4@*!sISKEOoAY{=X(ylqT*j=(7&uH@Mg0o{-KPE%iU@Z z0ULQ2H^yxRd?k0+2QQf-@WoFW+*R+0iLt8~1SN=&pJlLWz*u-(9ATTSuDj-?z~anB zNlzcj#`pHMX;3WFe1!ROz#WT~(D;!_6pNsiV-@cy;ZR7rHL6X^dA+)*t~lZh;MCro z!hnC$R1-SW_-(+#CAVS&=HN6r*ZB&sB}td|VJx1bOz&}Pp_h`GzQg5+WPTOB{AU$E z5Vrn1o4zpa=bTvepL_&w!=_4!zp?spkU~>|N@5XTVP@>p$$yQCLpBpZA{CgUGy)>T zl!X^3(`0Q7y(#8&$FTWg;5r`XRO|GJ?4814wmNB}k&Wo}FB^j7+b^m0!d`e0AYKdG z+K{ULEgJB4U`RMaYepb=xmy|1oCjlxYzXr>%GxAN#5#cAK3;zIOB+%ov1aStkyCKJ zv2_TII23z>X0Y3V76^)at1M46YqHz#u(%L(#VgOFjF7qN-8QlGugx^Vpo)kUMk?7a zHFY`82GxKDd{(8Lkp7KIZ07r26;ym{CaK1L+87!SNunUuYhZ;l*AynXu77AUm_g8F z*JtiP_6vfz|5g-J#VtQ=BPMs(UnQLYh_#&i8v?6KwpShryl`N(X zyz$?;*ArF;7wWgZ(@q6TzoKe?Ll{bT z|JP|qfyeqP!goSsFwC4Es=q1qE#%+R3imYlNL?Y=YGZscG954m2L^1NELbkh4rGA%Vf zK9NeyTG%He3+gxnmWnaQD5{cY6}Soe5&StpnSTwQk+d`pU+r&XGe7mG=pX)B2lLyf zX>rcKa{-Eez+$MzB^%=Fef#@d0Rdw-?}v3vY{`^cMixF-X~jO1m8Js6nMP)4v5K-W zcsPzY5X{`XM(jPMFl+4Ni>X(_oxBJ+=V1{=i&(Wx8_KiL#1lZ7u9DC&2U0> zTW+kuZn-POFYckmezt0VRH&0eEh1tOO|dd+33AErv&mohJ&mxQ<>8%JmX-J#(C7$+ z?QNLf{13LLB~&_Inc1z$_{Gn6oB!3USXO1k*x7itqLdI_JgZn-APHM@P-)`=3tZuY zwV+FkEwOlG80iAl%f)hEbfg00&C?^4ml5;c!So>W0m^-=_y;r?=Zb434Ezq?$v+g5 zx2}zV(93xduLnu+tLrqVBQ2cfe|%}pyenJ}uAi@C=qt7ns1o@RQi(u*#r{OBODjx) z)pKFUkP)K}ouW%~q515rZhidbGmcDQz4)M;vF zOApMa)Xp?VxyTf+_!3!^{lcBMu{UPl^Ln#I(e+(F)e)l z>V{|ksRq|i4HA-=&8xyOsQ4jaSNrNX80RryaF|3(n3hS3$ zx>?m)S#sZc*2BymfA+!j`OVRT9SM3%scp)um^u#MT@b6g8-GCUG}y?p<}__hor<`} z61pSK_?cOzKTz?f;N?-rY&xd}?%Oi6F1Q;lY!@@SWUe_T{Nv_lG5bqutXM@w`!Qwq z6w2wvTtL;9-}f%5om`gILW0GQpj|a_!zeJf_72L`WG)WMWa6uMSC}=H{8-k=f`#~D zzx7ST1|^=-NQxU=*H=6I8pTra+F)85!UJJXuFf)qD|2YyMv8(-&i3;oI4~aTOW4;< zD1d((yW*9f3xVF%u`9FDe=p!Rz15iiP?TE!-KS|86V_7>{L2h!(w(YC{rt$)9xQyXvKA5}x&-;{1GzZV2faf4OMC-yU&eYlV<-JUuHzJ`!2s>d zs<=Q3CsOp=$CX6lVo~=r8rvcq0wabQ_;C0#a5c@5NRjF1Q`EUrJXSHQtI`b48y!SR zItSFn=0?;A`cDW&lG9ci7TUw-fzW{;PCB986>?If=QnhL6^LrZdTs6&$`xzXn9|t9 z1xUka7{-WV5=TVFO{uQr-1{C49`!|&TIQ+hJ8Ko8AXc7(w%O($`{jKiA}zO)8aJ&q zB=g|1Anw=S!XE6w?EH877@gC1)i9vQoTt68$H*4&rKSA$eaIG#1iPid@(`OUG3*H6 z`jv1UXMCf6~n%qQ1IQ2C{2rV+n1kw4=oj~ z1@}7NX=w~gi&?Ve-7z?Ra6ca<)MTcDxlTGi=%6Mqq#)k>Jg3Y|GanCZciAPuhXIK+ z_Ro$NCbsQQ6YLQ2!wxc8?T0gQ%(BBSjrjY44$dAST87kxWmKToy5&bo97McSd{ zIE}50Uk_QpPH5l`g|!c#vqB$HF#_y*yV4xZsjbYgnU=2B*o5q#D2O2-h%z}KG$*!= zcRtsty=ayd9>=opr77T%g{C;{5TLQa=iD{cP1QEm9EY(^@;rx+2cM&{oh1LIFxB&O za@Lqw7VP*M0JDWU>*43b7o&hkQPZb5P3t)Cn9j!dyH9C^!Q3^L6>vDIClhJQ9G_te zs?x(EH&o;2Q<&7Z$K}(p_*Q60GiV6b^WkHgS%=Ys~(oc#u|^9)2R~;wrhl;Wh!5#A`-;KOLb^b z=QE^X%oT8*_*c>JJ--u-W6fM7x)$l8R!d_08?^K+lgn$%uQZdHV46Sc%*@ z;z?)8>glUdR2U~M7}gW;;^#0VD(ly^8i>FHOW8rV1#%>o{{_^O{3(1~3Sc;CWo*WZ z0eW-v>JKXcD;9yuU=tF`{#8ooU|=C|TDsOzR-{iZ*f_L;6nS%)!NvhkyPa?UNK`{w zVM-lP68{=MUKC3r1W3)Mh{#Zmw_WbsO81yxuMdtd_qmbKfZwbP1CYrX;JxPCd5vHZ zu398DgD^{0O(zY0uV^a{7>eFgZ^#q9B$xXnXJNCNVi+F8FA(|dgZ?JCmrN#4il8kb{eXfRGmmqnBv)Kg#Hit$ ze$v=|eTHKqc+AV$6=Fb9brwo-^mlL>h$Qtlz_3ViaPYzfif?cDDD2^`83sd)c0Fmt z^;rXG@LDSL-<6pZF(7b%0Sc1kNvOugWv*{#?iDe(HFQH45|>{~;^ON_$Oo8Qmx|U1 zS4CVW>y;uvSZo(FyAwJUjGNtP9bNvSw6Olqa{z?z!%7-XjTMlD-?`C5!`tJ#+ zZolrqR?3Fy8|>1`9d1YqOz8O~`Wpcl$3=U7z3e{C{+x6EGz)O5#hB?wHHv=F@U}EF zhQ64DD^;t5WQ{ff&aoW20Ul$4$k|F4-_RXF1B)w!CK6Cm;3#Nd!l5 zaiSC4d(2-%hZcj=dz1l>6)y+Zbx0P1<;^IwQebHcHsm7%cZz2R_V0n(mqD@9|Ly$- z%Fs4d(b#i2#9xP~-pCfm@_RH?=vD+tj}%lqc0+$Gur`@Dz_h8@Dl^+M9xLX$Q_9&= zBuvpWSiNCynxhuZyLFJ`+z@T`9c%(yX>g<|zWnZu)niZOwQJwFOeoMVedWId%9ofqFGk_Zf8-bby$F|8_^ zneejoiys5Hd~2efLIUT1ZB){7HjZ4v(Bd`z0=Bw&k19Xg63bF*-*R~WlT3`5KUc2e z1?KY)Awe?A-jE#o^~EA28I!f-MSLyHw!p~z_U32oLSGbEXfFu)HJ+#$C&Tf=De zPjlnLA2VCD>$OHu9cs20`jR|02}NMuzoi4E_TyI&9a_X`XmN@psy=KNX06VmR=lm= zem;QKUfjza#plp0o|SQM&*dl0@6`xMHz~3ugQW^%<_z0Z4Cf^?%t12l(faz|U>vFJ zb(&`(Pb_<{imM{6*f{hz{zZl2A+P4kLX>}80p?%e8&IjL|UT>S?m)VDrmNbI6W8vc1;<}&A$GiGOhG+-G)zQhLJ z<&E%=$Q6FemYia&>OvO^JSP$kfoon;Cdet{6Z8>t><&fw^YN5zJu^;tPE+^UeU~WR zpyoHU=V!b5fM@;%=j??rjuY1KiMb4oU;gvX0(nEMH0$i=Wgj)$LShYmd^<@b%$ zdt&p&T#cfif5=3E1FJ=12P^CdJPaMlq;qLW zi*e2x+g+lQiR}!Xk9-KO`0HHzg0wV}GnGa#)n)px=rdd~FH=k~x3VEfLidvqZU6It zF(WU@@qDGZGF35(#rJb5T0;Gk#^`NBAV?}c%gpXQ7^ktH>eOopI!uYjC9E*BqUyoh z!+&!sW6q0n8f)GelGeUNuwn3yrA+2Nje&bl*w5IM=Y<3tr9Rl0d|k%2-8Cs}4XvI^ zn?i8=%P6Rj_HK03SQW>d8p|~h8hY7J_9~W0)4#@>ocl*{6bv z0`p{U3;N)dKSKX;?V`xHnrv2=XSdv}2^BS)D% zSkupDibdq8x%+GrTYJTcavC^x8qNN_BF}Z6fB)Wig#D+gcK26kMS*K@(~=sq;f$}b zswryx*-YUC@h1zG7}?Wh>9FTD{5Cwx{61}DxArRg5DDk=gEiG;GsTJK866$XEWU~# zZVS(Si)JviUmPtGLGsZ{6y1Z}>1clcp6sf#_NNwhcw6VkT0;O^U*?OH@rZj+@w-Ik z!KF$aCU`J03W(a5DW>iWq$y5Z1xaxitOWVMjW}dbv{(_mFl9B3aA{)G;^5dOwyV9e z>9NCiC>nZ^wop_oc9w^AG_zP<@lGQfK?8nM5zhtOhkGw+Bm6TGs~B-{(~u@y1Bpj@ zdPC^kI1# zVQ^K{;9?8Rc``hVORfY5GAN8`6H{T`-RWzA7}ox97zIw@MDYffbD9iPHphdL@lWEr zy$6~TpWY!xR(Z7&k>U*2=+sz))g4xl=Ca-xEOaEQeEwCi>k*Av{6JA>(D0cB4;GIG z#uAVWr}97$q(L};Kn;O7bfuNFZTx)8VpN&l!?K}^>H`G z(pmy2-BZtT@6F)%zx03iW7MliInrOenKk4mg2qNW;$)bE52dzZ>XleRO>~W%zdF&T z{O4VNT1+83d^NW3d3%b*-|_=uN)RmAWj@+-{gn(FLT*{~`7H<{M3U>rSXROR7sc!~ zu@X&j)P$j`Nc~Nezl-%0q-joJl!{=Oe+eOe2=jN5O!QxhL9oq@x`=g6i*j~aY+?19 zDE+cXHdmTA9Mgvm>c%*VPwbsYk_#ev58&BK#m^7Q2m^P-DT4=AO!r`(?y90f7{vj` z3YXt0I}ix-v!uP)9DmWy%ucR)U}TM2{q$f7)pncNfL_oBNTkoRLb3lTgzM^6*>=Vc zgOU$BjptQ7kaHe%*qd4ZI-4pNjOTI`f*;b43ux_|XDiO4MY1IWurn31^cMV@G7Ij3 zUe^0rbhminy!FYj~s7GbChK(GXzNOX_I|z zD|PX2>4l-#7t(N^Q-VzE;YCxd^PCRi{KSL*a$mrycRNKExIuya%e41kpgHABV-1_vN zl~70y2rZT3fva3p7M8lRVGK!3&Y=K`y4piQ$ET z5YQ4ct)=-8z~5J5*7%#xOV7;XuDd9D!w#fKVf-MHZ8?X=Z>l{O=8rEQ!xAA_(XVwr zu#yrQ7kCKXO=6Yqa?bg>PKf13(~^wOxL|{8zpSsuJi^96zoFXLNZ@dfE;v-u1WK&6 zk6yssJ-MRI%dqO$SfrRduLeDfcYmc5tf+fU#ZB@xcm*6k9)o6EqHQ zex9ein1;sMh=T}AYKgHaVGFqO@vJ~2y1u(WlZ`qsp2l{&UY!Q(6aj)|9@)&S*66Jm z1^C)tIJK1d*!&Lil?)!vUl1Vt;IjPpF~0jD60Bv{HH&7^B}(Zt)@0nt?Yc7A|JBP z2n5yR51_GzPp0TagrE_<34_9bNszhL`@x9gFP~xm2x(3@0C4r74gIvJX--HWh)+EM zM^nybr|qTbD|AE=YkdW+V$AmgnB4Tloi2=xqQvc}8m%}0CDAH%_T$&05>&s_LIYX( z2HdanefzDq6`hQL``LNAMpFp%TnYVd>QguntOHs8;SX>4@jshYWm0i1&}ex$v~SCl zi8PoWfF-=}D^L%|m(j~~T=&jOET{WUs7kzF>&t?+-WV(i0>K)835$Ih;ZxAX%vODX zMqS*SR=AnHIQd~$2{&j+YA-gvM;5*84~GAHLtdZ{#*KafLd9>ZGO@gF-T0fv9u32E zEb&eIsi2=Zu8)3zQ-WO0iykF|XDUDRV4163G_zY5M&i&xNi=2GX8CC@&1!pznpD`6 zz5S4eVo5$+hXx(El;NCjIkFnBOq!Ce?k(AtqkS7|!2!>yolq9W@jALZ)65blj)9!$ zGF|5-O4WiHqMo85om8YMf!--o8{DAbh8LkGH;G0*6RF|A0VtXGK6AM`T9NwJmlS3xE=ZuA|=Te3|kBp!s3-o?wVs9L{ z(1wR?DWfdiS~bq@!Q2)mQUn4{xcZuZ03-ib$9SZjG4ZGsL5)NgI`C{7ctgi*O~z>q zbgJUP+;^kcQ}|9W@5rW?xX+!s7QI|*=BM~vYp;QUV=8QhNqp;?zo$W$re!@@<8=%X=bMOAG=PY*Wq zqk_KS`brcZyM)*yhcH8&YXo&FVME=w+OTj99N-;*kR?HKtB&$cUz!5DAnsy2VFaX> zJQIpoFzsMwk}2N5nML^%5sv(%O47(s1#<<+&%M-gIlTF(!r$c#CN{7H`rGmW2aW7Y zb7dq9n}U4}N!R_?DkE!i5y0|a^37AUASR7N{d#bh5Qe=aY;6e8?7x$3X)@u>pp7s! zh`0dG*20M=eq{BD+$jT9P$WYtNT1@Uv5eT@%QCO$E zT#gd|yyG&B9Ts+v1~>8hlXnhKMo}-9tW+X1_)U*xW$GM>#dwova>g zqvx1^I1nks;P&SMFD72y*88VjVfxbc=^I+z{d(3!ter-q%frA>)MkY%?mA3@e0mPM z|5I5`nAwA`&1l-yL5lfLsahD)0_!V9*Z)4}#ZFCJglC9?xL+lxg%QKLVm4zqeUkzQ zh^pXe!&TV=-e4K4>*S&{DGudG8v8l|%OS%fjnEx?^1YHle%sQ^#>cV4#@D*nxVk6ilVmVUM!o1IgHT1 zNPM$uDkF_0Ls~P-m9Uqxmat(U%}k+o;ToIjHjq~G;}zUkfqT;sm^(Y#kk-x3D5`;H zF@G5Ny-;bnN=g8)zAy@=K6`LtPI6Uz>1`^|i-?$)u>A=9H5IeL3}t~OVw>_wP9iYW ztqL>U9}q+HuiJzMdx@#Xw2_@Yl`pOVx=Uz^3|Q; z)@;f~MgMU$_%W?XW5=7#ri2V}6LFWukVX`9x`;ItF!c*>FL=o7`4yxUDa!9VNRbM-7v?9lRy)a(+7m5hiY-(4oSYC9%fvMmnFkNhId%Kg5ssYy!@MeKtS+%9ifF%K2Ju-IpB_|5p{7DBK*6do6{wumx@xg?(hMBc9LElu_ zw=m7BcP0}p`w}}RYs{Ayj-)pHHMR_7@M`HB8Z&b9!iQJ55Xg5%y$bO!JSks`E=TB$ z&pc3F|8iNgkK$_)a240UI$O-l$#R+IGGoobXs1zgDCPqmscCR;8%&S|x+s=O^X5*2 zI(n5dsVAPnpdk6{5|G8hPB!6PS6t?9E*VQ=kEnBF?4+)UP3U1}!zy5Zrf7L(FHj&o zn{k+CMUXrKaFP(biXyFfp&o0E;Fd&M6b1khJU22Gm2#c-XppMRIf&=m*?A)o8pKkZWBe2oZJ$n=0_%V0ka=jT~ZVd#8n3#-xbBkb1K#DQAKR|_E- zv=xm|a?pSqnY>xojplNhuR`2vJBh zGc$Gz#1Wuc8JuaXXMc>EUQ~Jw(nD+ndtkkZiW86d(+hLYD{d6>?)4tEG9_oik4-&U^Q;OE}0n?9-+`1bzgsMEP={4jWf z_Kr$c)f-6P?uW&AfBng{0zr1{(5?B9egylTR^iat~!>e3QtErAG_}{>g;W1alI>B&?Va=_ymN`?Cyn?;dU&DBpW!xL5pchhOe46_T*}=j=^Jn^$G<7|ClP+ z=u4#zGM6!bNI0e~go3WSLL+1qbK-E`9V2GR9{_RnrG$i621!>K`}W*Wg$`*6QP*tyE&#;Ha>{P0SUg9?rqb{^j3U6NPRybbcC8WQPu>OR+ZM#qAR%{ zBWsE^=NT?o_vzjUlTA&f3FLjY%gDrXI0ZxHuS`UL^$b z^UC%^gq*Gb-sIiGgT=bl)l+o7SjNmgtm&x{8j&YDQ#K5XupGJG0K=g`AYX#Uli%1j z@w*Lbt*4tQ8-~7Db)*pkF#Gx4&qHGuyzr$#L&#P$`*k}nKZS@5ipE9VXzar0(_#qm zka6u{yR|jvKMWZzU&B9h>R2|j7Pd1br{XJTl__v1yRRvYICZTY#Zru|!jY^2n1C7t z49B9MU%V#Lrs#v>Ux|TfVy!M+nh)zwk^Wew)UR-%DN+m$RrXTLMrF5H(eIp5)P}&X zFkBkE?P?1m9ZTC-;n{!P|Jb_fxG0`Bejo;jh>8jrV0X7LcL&(r9oUT+*a|i_b}J$_ zD#lMt_ApWGZV?L`yXF1P+}`ao=X-zb=XU3*d3JW@nP;AP21`utLk1#3@-BM*9pC>Q zQcY2RjBG|3-f{x%Ol)z1KX8j2m;4|?Ako4`)t*SX)jyw6`hK|ty<7qjX26}JmExBB zu}hWfsd}lmI*sC*ga0{(ATKVxxU*lo^^RVGSj3f$k^GH^cJ}Iwi}_?5zKwRvO3Tba z!^oVmH3)c1zAxL(gD?4AGh*54eWM~r2{+e$u#h!U;-B7XF%IuGi%Rd7$)smX+$Srn zPIv6`)6i13a`O#8^JUCCXhU}yUIXpf(E_`SEWa^?_A~{Tj-epBNlT4vmQn&)EZ?uA z9catJ_<9~Ko`%efJJ8cq>avBREnK{s-nQ)}jV@UZVU16S@qLAKEXS#jcr(sl*2C3q z^&<(mLV3GTdO@!m)8TGn%0<+?^Fw5}JKN5WmCQN|gMZ_!I41N{7%I(|IM+P$D!bNJQ|k=jh-A^wdI zmMk)TA{@0Mc0WEB#u)+}hSR0ATl?speoW!kQspvvso-{Ue2KsieMHxe85BZ57g^fG zx=o*B;lZPZ%)n2jom_T72>{`V@ipd^`hu^xjgdE(i>wy)<~4vfp3fZib6cv=oG2q3 zkzu8gm3Ry@RHNeh{RM5=Cw;yAn9VyEz+rOu%C$dVpdtB)5CP{L+)UN8eUF-GdJoV# zCrA5JmUdzDsS@+T@4%X$^JC<6CvW244u!HDsesxEnOhrZR-r>i34&UVR|ZOolr zB9o#Z8uU;y2gNg8MQG!x2RiPD?feubzC0~in*g~{1iMI<%28`)Q>H6Kb;1I;;vWK; zjn(2w!Ok#rrDjIBvSO3a6VB~*gyMEOEPccqy|GrF^v=njW$%dSP_r;f-3Yrv<`_)Znya;79uQpbE>e1H;%$zEnHYF_OMeq2~*UPA2xQyl{ky z=3}|U^EUK)L=t6b<`&7@0pB4LwU>YPrqdLpZO?eDtL>949-VFz7edjle9-*WJMn}&t3cLMxZ2)^xWF=y#Wc_*0PoVRenvYkY z+cf4x6Tr`Wc{=nNQU&po-}A4{_x}ZYunTU7XAkC~SAGP+U(O$gfsZp9G^~;;nxHq= zYD|dRW~o>)9(n-NO^w^$hiho3n#!GV!Yr%jke@a#o22yviiV-)^0!cb3&uu`@^hEt zu>V%+ec2MHH$JRNF-{pj^Cibu$*ybK1A*ms4Z;)xa`+024h^IJnFt8Z-|x~AxoH&= zuS;=Za*iK>1#^RtVqOZ7g5Kx-{M^bAj%^ zmew_dvfCAbjV?-KCwD-lIh^^z>!#f*Ee{%*@8W|P2>AZ3ul+_-MU?P@Uc?!AAKa0f zPeXeAl=%;`=;uV+5EzaR&e6u2ldn5#q^6yj=Ep{4hyMkmm4S(nO|7(j zR>Vmk7%VN3ILjaB_SNtd35+A<@oF_(oh$mu#3!z*{zgu>SN{o+kwY=GRTv4r2OsUD z@`=(l`+Ts*+~X;vlFw+?$Oo6_<8*_132eS`Fx=`J`{Q)m6%QEuU1p7*J=%zPi{-V8 zfB=5xOHla<^wusph3a%g`TTxt?8AZ-#PIe!cm!^XCsZ_g=A7R=JDWHa!p5sXSM0b1 zu`Ly*>#zbBt3bMwP2fqG7zAh1`6*yzE!aQZo5DGsLQg&SM8Zq-)^h$Cj4PWg_Ht z-=%=7`8&|KCiISi2W<=fMaE(@9Xk^1#CIFIAn8pLjE!0?b*3Veyvqjw+niC_tlLBi zB62LuT{eSKDO(cOoX3DO^x1&|ed%q(26+%VetriA`d6?RSJmboL#wiLE`#SuyWNtZ z4%drxDAlmsuPMD_cQAc@_pu=olz#a^3o3USNMB=Yzb>>?d?~-1%~xxbt3Y-HX}_1g z#+BzRqxi2M4wTg4itm8NEu+C(F$Q=fNN9sLAC;;wxHOXO?3ebA=mH}oO>+O=67H{4 z4oIX#T$-j09gh>#b?HQ9iA#dRKm+;JZ3bhP4-LS!b#6;(1>&DrHDA6ORYk5?YR+OtHK?eje)dr^i9V0U7M#6T%EV%tsUFLGFs)` zD>)X{$AHI@gp5?a_j`)?vNhabnc1xvEr@P~4p|e!{I4eetoRb$wovp8=i4;LjsmZ# z$bjC}k>ZN?jToj5FxQxQb3 zP2f}l%hSqa-YB*EzKalWl~68^AM-f!RnMkZ>!=WcW-jI4EqRyo&>KONUXp)+AN!S3 z6?xQ)ZJ@d@e5MqYx!f4Jswdl-SjgEEh+N)S#lSXiMLV@ogcv?Yzo|+;QvtGg`Z+xd z?Vkck<-~>O!;`6KAKqf^z0>cSR4Sb=Okz|Si|vgY@4}R)=>!AIo#=05qc4`FR8H<# zs$y)pDH%3MUvHV-Sm(8R(@#i+pZQXBVr4YA@ypa_UHmP6xUW-sQaIt1Xyq~rjNH5_ z^Sx(=;+d6R;aDi~TFh*!l0{7iQILV$u+bNrh)hY7t6-$#;d^d9#!(PKZ&%jwpwfcJ z8d%ATfBy1L*2%B!fcx&$KX7wC9|wU91`{jzIy*{RT);XfU%V1qQ~DcDVVm2e)`&H| zd02e``*+((^9t@;kJ%(Q3ogsPjWGsRJi?@yMXNj!?cg><)4ZYvjehtWMZ2s%rsvzD4|Fb~yxUDpx2m#u=EDf5sKjYsF&t*|hB!$|pFb}U10 zkGCy| z7A(O80vuKvmYcvmr`4B}s`~dBBHejxqefY0Y^Z0G{*V5~Ov1uuS#Cg1T8oZRVBpXq zikr1MI?MFXf8%$%AM1^YL~Z${@DnpR7Ge6#J@j-AzE0LE2LN1Lz*4On;i0A%4yZ~2xv zs32$mC{#Xi#-@(%@f1RuFZ>jBavS+rt^Tw(uy;uT{<2x6(8qSkiTRdrrfa2JPkX3u zP&~8aCoza~JdfSx@5r=LVfS`oF+#%#=&?f~x1ylvw>9zX5}QK{{<9mdim@xjp#BrU zJ2G}PvT58?exH9)v4iJIJtklfSp!Y3IlGOb3EaO^dO$A`bx>d(k3>QBl;%`n;WaT~ zv&k!@lN*gUZ`s){w@}zgzhG2wnj7rm+!s}re)o1#dVewX0bdpTWg$AmE-q!S)SS`3gk{(M|** z*i!s6U#yEc3+_Q-q`T$Di3@7OnycpaWuop%xB{Wyn-F~P-O5_3H7_fMM1eM=`89pm^4>WM@wDmOB9 zpt$ZIB->(SVORP-Hh3rygXheQD|$VivW(1UVqGs33}E}c+fYe`RM|W&CRn|IClu}b zfk0a6SJ`2jVh1-i0!}nyO)1Hsa6b~<^q%n+A$i1%R@DxdBzyeVg@AbWjBi;qgP3Mh zSu)MOg#xj)ho9-V$-k)ujxW?}MD4;XF(TsGm$&@OJ7`E?`TMT6V4#F;yYz@Er{8si z^&D!NL_t1H=QZNM;v#lCRbMqiG2d<(Q3`QEw|SZfD~R@Q^BZhna^;~{y0pyLboy*R zVu@c)qczfibzzO*5#Hr3m0BCCfNT5vxgWcj2eDv65h31_)k+84aZ}L}en^9BRQfzB z+S83#7+E{>k&%fEyR3pAt?JyfpJ-JBLqm;hS6AsHne@oPM5_An=?Eixkm8~~>l(M6 z(#siYox>X6CZp5*SQM6)nCI1Zg{61DqBa4WrhF}P7VI5fvj-=6Kf$X0wk?m~m6St$9?26~ zp91{bl0O`6+k=p~--vqH>vnUiDrEi6Qri&GSz_ZnsbKIrs*B=@6T>E-`2q3;a0n8^aJvEG*|cE0B^Oh;<|=FH(x zyS_Vxit#F!7uEC8_5o<<^3>x&*@vlu@QxkMykk zX$L*qS#miNaC07yJ$g|BHj6%PF6ZM}M0h3o)w(Y&L5V8PSV_t_-K`E=oZw`#ZB0dw zqLZ;nWppHBB4wF6mFHmM$=XB|LuOZDTUgqas7(Lcmhq_9!%h@ex9F9LB|X@HoGZ@K z1U3E<{1KWWbZ_P)u*$75!P1_6?^c77s9oGW z`>Ro@dcfjlsXB8#edl8JMr3o*fX%_uxL3v4im=Oqt&$bi@5Nk9xw~P8L4XBZa$XZ# zQMf6UG^X}lNgxhaYe7a6%Tx>IQ5AnXl=9f_s0!^UTzcHAV}yLsfw@gAUp>iDtIq;w z1CfBQjINx&0DDy{SEZ`^`ExZDNO;}{Ek(bk;jZeNi;^;bh$3LT1>9}(drFR;N%s&G zqTy}{!K<)|R<}7tDJF?WRHWHMzB#ZgHC%HFL)@#+BH$(YQT+u4(WSMgl@W2d1H0~l z?oB#9v!A_PZ%*P~`&n{4^ZJN4WB;-o4mZExZX%2d4usd|*Vn?5L+qZvvJ?rIlm$umL%}-K{#J5MWWAkqpM3oGk!r1jVsju7nd@-%yxE&vG ztk}up@r31r($e_xZqsqKt@$~oBYV;-zBNkInjBBv@M$JJYjGTwLhF&E;#vBIPseb0 z7Y$bH5jDe}md@fkLE?D;btO+k zaHB)Djv@7za~Q=|vxzh-Vm z#qy8W=-#*)Sh+O~q|eOUO2xq$;tzMn>4uA;u!?)YgWIBO8%SADbi5JjW=NG8J8eCs zSK~@WgB7rV^;-fo|mnSG`gJGJ_?y{W;;_!Q^KZGqArc`h0a>M8nT!^Q8>ZZ z;}FK~XJzM7jMtweMcf!VQ_r?@$NrblFbaoAKogO^Lk%c<9d8l${CRRKYqi9`9A_$8 zfaP;ho`f3oY*^LL6eHcxRnLY@hbN(Xq4%oV3(7-&H)n+P2+FVb8ECcMx5b;$;?f?? z$O*&ibTS1QIj1IV*=5%9X{o#u*iVl>LaRdm-Egtq4@pB7qc`1=qI}LWEV)?MS>TaC7cpZSuwVx+1y5r>R};AvGia%F$>c>>SQ$A4c>U+$w2q^2a_RH=yDw42;W z;920~*2dw8OwSG|P2NEHzKNbhtI&K7Na=4%GXk->T$6O`EG$$xg_nds+ulykzBiam z3H+A35ubIDv~<6co$EB6HhDq$$LfQMxe8sf=0z%~36>g(QgLj^p_wmK5b^A7ra3BQ z=a+iQqh}$^G<|z~hH}dqkgxU%D>fB;D{ya~Cd;jF9uzmF zx`%;}uhK-0Hnt zK+2Ro-fSz|eQb?+MKNhqyP0h~6)627oLwbTWTzA7tE-sHz=G^CFDs|iqZkgaC9RpI zidbW0MIWA~LiP=O6i5PpGTkBywz&|q4yD1hB4Kj^4&i|veK@%L4d%`xl%k$(KDEwp5ymd| z{%auQUvhCt0uf8X564?F*HJ3q$(~sAr*JApzSgsM^4lWx@Yg*4PUP_ibBkfzx2ssu zQvF1GI_ABQlhKb3hNHHDJLU^E^u%qkbw~V|q1y`sYc?NU?oqx5DNbG8I(!8%w!-pl z-V_a__~)z0iSKomQu!|DV*POgxTYwJp3U6C=Fl~a+>g{D8T2Lwdp2AjFbEePCIlH!AN5a49&lFo%Se=_$ETpXDCq<*xIi`67m_Iu* z1D&Awr(Is3!AhasXAAB-ZFDv{(KdPMiI3jwFR3{n&Ve}BJ`hcI(P%_hmHok3yW-iX z^bPaKI_25&?#z1R!_o~|^lU4WOXUPICHX?jJZ{!%JdX3F5AAks{hTm5)>}4rM1@yW zNU4Au)hH{@n`klyi-aZ*OGm~7mCi0NsFHd-v8eiQ%yV>`8hP<=_O71_8-AYimG?__ zl5K&2Z}4x3H3IXOY?Ij+v{=*F(wIET7KQEpL4KC*R(?Lov6c5}_~c3G)!Pi%*^wx|KaTvSjOI0wjlLfHW5p(Voc5QKb`IjYv0MGu&cEQfk$bXX;;JtZx z4UX!iy>h*2(zGS(*f9VRO~txGsnHv>Uh-Ad+vx{~)6eCQ>tQZE(j`6pG(}<=*_Uz) zy2I5epZU^qx@23N&wkp#J`Cf|U_P}h_4p_4=7d0Ln_#7#c66tdLymL(S;hVIVgv~A z1=<@MpHfL17idh;`qcsRO^@@?XF+cFD5=MD(7B1;+b(i$Jgd0LUeBuC*+MaN+@Yp1 z&swXvO5pg;7F2q{O@r%^*&hKB8&1GG$P*8AP2Nb`WRuBxDUSv>QR)2`7gN!8%WX&( zc}v}p7gje)Ap+S%T(;^91KfPVs#Rfk`biiA>b1mnxH+(C;!2;yo`J_$hAwj#Zu-K3 zZK(vJGM@%wFVvTOmQV7ElN4J~d~q~=0oV2>sRRx_%|$CXH5#@>%T-W>_>N}WE>27H zCnqBWBAT&y*^#PqnwOZy8KFaciiGg(VRyw0+J~ zN?DZ78a3U(3Ko{eH(lVqctYwTx4Fjm#zoOh#qRmxA1yWi8UYK%#s--r8L3BHwjvSE z$&7`~xJI9MNCFag!rxLG;(Y6jzXnj>W6h z$iL~tCrW#^3adHa2$vocz-a6>=B(72hN-pOLeL<#Zk1-*A9N{zn#@g zDycM>?1@Kkx}!!}{Ilb!i`($gPk1>$Za_a?VAUS_RoGw*YW7;8R9tfd*N9-t=|@Kx zSkLwiF_FD6UIo$o8^TvQIf!>M_(>NWTJ-kiE)`<}mt|U?9Uv;hm0WmD#kCn{uKHpv z->wDv;(aBnDy&DSALeSyTr4%$sPMfCF}WqmHb*ws$sGhSYM-Kt?K`k6C3V-mKbqNl zbm3nf?@?tIlFsZ|NR@fo-d&QOjTPfbWk!v@f!y2Yr7SIiz==nw!n(6fR4PLsA$sD< zryKm69PB(Np4IHSA87e=8kn)Elr8zts4tkh z$qv{RwFXh57hfjDv$Ae?)%WWw0}s!`c$0Fb7%!fni_~QK^yd)FP}l8ns4+MoUU9=; zE44Z6&12jx#%%WN3E(^HeKGZ|^7Egq`$~Ck2H>Y&L>8XQ*J-nO7nn*x9z4ED>=E-0zpL_%ce_htTNZR{#ErC7?1N!@7_hF`@cYI*I4cfsYvC^ zu&#_6KpmGQ6NM8P4+fnIU|m-hh2h|#!?~c%hGASt{nuaev*KBm=(H@wRS9NHZm(9l zT0YA>MG)P51-+KAL>mKYu=kiraPC^al6r&V+!v%!#+>2g`!~KklZi z`LJr#86W{`|5MmHVS6XC;9;eM%Mv6iMMFzzn+Kk}i3jk@$7FhppM zb%WokxA~}=65d&GyA8mamnK2k5LN8wQ<&=tqCds zz;%6(O<|2Jy3$Iue@Qod0LQaaj=9qs!||?Ph)KAN;O0LQz0|4-;9?nJ254yFU(mZ( zjBV=3*KAC_RK=oHr182P2g%Lk#bl*VXQa6w zu`MsjP&^=mAvv`-9oQ4LgOwEA-nj);k;?f-rxq z#k4MMnLP~44mM*nt^J34_TVbjNu5S>}k{3HGY}u@M%KR;N zS8BL{)ufSA952_o?i3>{Vud@WYeLD}$87A97;OJ<6@ zsr7jJdR)@rfxP`8iOQ#m_9M4~^@@kE*Tk-wG^^PoK=y8WLhI49>=rEloZCr_n3k=2 zQ4s9(#&9wf%VL7Swz8I?T-=h}4mN&t@!`aDH<{7;Wie54ogJ(Cv%0Sk$8#XsK)K!X z{11LYIsb-OE!8R*oD~Cx`Id*acNf1lsL(UsXpTD=*`przMwX$v&d6>} zh&8b4pEgk7KVLf0TOF^F!w|GOjrpI!FbK5U{-4v43-d8wY{HMRa{jafZNo#o8#Vr8 z5toBFl#?v;&(-f>gDH1xO{#|rc95wG6ZBe@8y!!$#ra_hAPW4y^rBK#SbauenR|I+ zzsu$KR6Y@@BQV6p!@s$LE)CzH_N?M>sgDr(cvkSuPZJk8LKbV<)MKnCW$Dx(y{Mq# z^g%MGFOKM-4zm;5aBlcnE+^oqeS$fxc=qK#XcCFZDF|93^({GUE5g{|EHi!C{6}0l z8Ywv|O~^6yS6K=LQ$3Gy?n)_tTYN`hL+j1=V++p~#+iCA=NQ@gdlsVRl;>9R@p`Er zsxlsM@8AEW)kvXV*Fr#uR`~30Sx6sxyQ9xh5_S0|LMmc{rlu-%nEjtMRtf`Dd zJ(hV(<6vY#f1LT;Caa!B4tPQNR_=@!pB{;xxNA3yc7VhMOeqN!-lp1-e0`7Rw;*1)Rnf`-QM567pKWCPc(Z?nW{ zp?od$4W@WGRzNxYg!4C*$M~^nT`+gHIqlV_(Il=vjuv=^iuU4|B^FGS?wN55N%mrJ zj9s93?w3b7Io++f#M^{epV`1Mg)gLnt zZnR_DElz~u?w=`-pDV^F?CY)kR71WAl7m=?JNycCRlRc{4m>Ja4$hT1I=VsQR6qkt z)YA_`%xOGRnQA+4F87sCoY0$#>?{*=8&g0l|_`M9&8O@d4YDwwlY+L8WXt3 zI^P5%PFz7xt#i$)u%o}HS~O(x)3d>Y&=Li``)=hW9^dzi^|}qULxVEy5F!b zHlg$LCPcwc=Z;9)XI;Y9fYVQ8H8E3VOySMXtn)l^D_Wf}4UPuqv4Eh2a4WHo%a@8S zEkoi21DpQ+Uw?$|GTeN9tS55lvJ_D3CU`u2jZtXU@@oH(zsx<`N!N~mvSWZ+D)eWT zREWX%S$|k2X~-t#PUNRqv>&$0xOO)wk4(+Rs>%`c68@`!^G@VxsZ9zm)5}mJJGUZ( zO685O#P@?e<`65mQ{r2fo&e#Yu~m78Y!@i45wK(lE!|K?&yIXYNxmh|U009~ zWwwOY`Wa8)%NM0IZ8UgxfL74sq=SL^-z$WDvn~F09k}l*LoF1suJP(XR^)%_gU+q~ z-U`@s5I)!P(Q#!@F2qL&{!d)qXX&SBZn9CC%dHdz*`NOls>M$YJy+KL9rBusY1>f@yzKs{Gx;&7xH8PqMGImku3dj!zB5# zhuR^TT)6;M_a!@-s04yu#Jy^M2sS_9&m6YsP0Z63UA_J=AJ8hAOq6Ad`zG7W$TJl|DYBO6|KgcUs@dzJ3d`4O8c4-tRDsh&EqVRg=FdfmW=X`@Xmd2(Bc6DV z5WPJI>4!}Paf$vnPD^BO?e6l360Lu@j>^}ZAH*tOzl=U82%82CnFgTy+Q;V#lJEI&FTE9#mJM&9u#vK2pA>Y$EV^EH#OZsk`Um5l zUpIw)jJ{6!?snTsUw{ZBX;<@-!U~2YVzwQ{`)q4vZV&Lb+=l(8UuaPiZ@_cWja14q zQliIkZ{Fmk^5$(pG~!z%-@OdifyP7pi{;(TIFEXIHk^kSPP-9_{A*d~;b5-tmXy5k zOc31IjmWEO_1u{YF1ss)e0bZB3VVMM@oSHsEwoeyfB`mFHNS+p|O3OONn>VPlD5Tz{D zGW@o*#Xpk*&&0m^cPOd!?n^1D;O*WfW`4CIy;j9(CbKM6+gGD-LPMjrmVqL87`7*q zdcq%Vw^I$>xHVSAtt=-M?6_ks(k%xY;k)s|AoBX`E{TU6i~afD6~?j+eosNRoyeie zXMSao_v6`t@ShYU?9@2*HeKBYqUqg} zp&`DoG_l5Ph_(c#%K@K_s@9TTWwz9uQ+av;ql+fX4H16k4F~b~4Fe=0Iq=ymW2qgR zAIE=(X;ccXipH&ca=E#*#S|mE(x@F`Axa<9vqfwF-E5d=hLoY*<`9); zo$}&Tp*`Q!N{59?-BOmbl43(@M4-~)MRA&C5jPWSF$txA24P+%WO-H=0Sx2&RiWCb zd&s)V&FiZRJHlA<+@c6B%|4XsxteY+CPew#Afp#Ic3OXy_zLoU3RDH|X}aV$ zRO9A-7-nw$;U06TtjgE+tu$JR1Kt}nm7JafXImye-{rNU9s?0~?cQ*YFYC^y;UWZi z$IWI&w)mN}=|Gp4zbL`ndhsbe)WF7eL5;+e;{V0B`<|QO%Yx2KQYh}B>XejN|2X)5 z6ZIqrMt!-(DE_(e2qEzgkyCUKDG+Q@*pjiy3cK+TAPqL8fsx5W&)$^pYQeCIyJ|nW z8$o5Xy=2Xq1C_!ag0j`KW9DYXJ;m26?7W|M-R)PnOV_vfmh<$fX|(EDcsE8sRi_n`zbmhPy6 z{CJcft(a30m*~EBnETy_eEGSMU+O9b_F|6_85lNhGqR=*pVhjxm$P?GO53N_G9~Z; zyojSaP;M1p#!wx69<Bk1@Jygmn>X|)|In0NG_!P4&bua0Hj70Z z#s(&?m##q5!0FPKnb@jhBdNH16ktT(#~7g1ckzixRf0xsF2|Ds-zI-? z0>oC#AT{87S8sEWG#X~QYL=7*YEBDo{qwZK{my{f#?)B85dkCOcXy=0tU38IWnT0{ z1Qk5AvV+3Pbd|oD?-RaL2@Hv_*XlP}Pu1?&&l5z`oGIm*=~d}%LQ%LiKaR+UbD+5q z=vE+!@~y)CDq1aV5>(ypUj#8RA#f6%-fZa^1aKu^eC!(9VKHBoBYwLd-K-FhMMpTJ z*gm-YM$)gWHJ>7_Lmmv}8kL|%&d?uzwwJceFm29ehcWc@_x6;pGWVORA-{B34;n7= z6rmRlgK6KW4EzUL!Bij1*C?LpyJkbca|w*o8i@E;EOr0_aU(EziPM&@?T7R|-=dB0 z?-WSs31H`+9dLH0>_V^18=OW|EGIRO>Wn0D1=~>q{}p~f;f77zr(ozfjSGI}%lx$x zDf0m=JQ>RqzKpOt>>{Nn(ApM4|MGmU^!@6B+fqg~y1y~9+1GdYv5BR7QUac*CF`c~ z@GNSBOOj_c6%&plMPR2z2*(=5J&VELai-&zL-Z|l-!9J^<K&h$x zdbW~QrqqM0@L;@ON8izLuU+wkeC?q5dgkN8snqF48M&5Dp`^ag!sx={c<*CXwtqAD zfwkN0-!LIB+z+98bvB&E`cXsl-Zg5LrXZoazbgbo+re}8eLAHqh@Scik3;>wUlisQ zCiOlIAM#t9e5zckhkglqw!RA-Gl(Ojww_tYvegh8A)BzGVE!h)e#8^6>{{LY2oupj zn|rTDdnvkyN?){CGb&_@K~Yq(*aK}c*DcSU8G5!cqq|hf#ea_d(Sg{}Dy|2}WPaH4@2x5QA4(QmM?W1dqg1+h7aLEyTNfXhsH=-sX6%#TW~ zEMjoxC${In7auDvg7h7XvwAe<;@@y?$2J>n7jIs@KIw(qB0ae^lH~vu<5Us8ql!}& z7rP#-P#WAFj?nLYXchkE9Zu1bdQCK#U!I10rjrzIGPKeS1)b$eg~fi~ppx32Cj+gF zcWQ5(Q#j*VJdq&Jmt_yX8$Ispl6kIRyt~=-HH$AxTl|_2%aiZ1G)9R zn2BZBGT+F0^+711DA2On=KnF7*7t~WfJ**DOl1?H!Yaemcw~o;Y#tBRUsBsL*AVo2 zTcnNMRgKmG9SxBW<%H^gNTvo^rJ6cNXDaihG zS6V^y1}iJ&`3-mNSDbI>u4;C$2U|di`Tti-CKo}3b>YsVDQay7)Q|@jzP#j zZbkgq&x@C-t^~%d28jrpSqNvG#z_3@bzK`+~_Al^!JrO zuXitTB;_V>3z)`A^pbm;kQMVaF8G-*Ezd6mNb)bW4GpNk2S|C5UjWy?^vTl6m`$OX zwAHm5HHI=;Q4+2FRM{v$Ho0pZT43fYhsNrxTj}h%7e~{sCghfx@VbSz3X4QiyxD zGF39R1<32nfqtyYiI#O)PW~P3N=`ShhfQ80?PB}qoC+-I2>(hrkYvwwHJgD(*~YId z+)CJAp%CVm>hXCkXKucvhAFH8ui(lWsH#>ls3R<2?N*%ce7CiM)*~c6D-CyF_SS)^ zPGc+i9y~xYPOnFA)#YVAM-mMQDI}Z($ulg>3 zFPVsQt03M&t90fUMUCuC$U7hAmQ|Y6RH&MRzQ%=oD&seOB7J5!*pc35Ssew_bUB~G zixY`V-Ral3;b#dd_~sj+_gnrxlKI9$O*Api{N5Vt$82h8Ur6fukP6huGVy>C4R_?c zd$g8f)9IY2E3oS*W(u~o1Z<|F*_j#xSghHA0-=&KCpJ`QL<35KN1ksy4lixLiB*>^ z8Jmnsv$73=a*P|ORIe_%QH7OU4c(v1h84xm!*~y8WiFOmwcFm@P`~UaS(fXkOZAO8 z7>pX3c+eyNAjY}yF*&TGf?l+^iRshpQodQZ9ifpQW&Enx4rq7RxS9xvmfl>T&AeFK zLLki_SVu(sDc&5Zgc=DQ@mjv zW_P&~Wh6lIeZ~A-14iB`_^J-{#_^T%n{oI3tgw(F@M%T$|4pT`i7E1VjZf`$fs>Tc zhj~1kvsECmx+!i;CImue5w#mJPbLa&R9S*?y72eu)OlgfM{6bZ`|ZmB_9)K!;^ho= zqUYK$I|-BE!+2ZaYjBx7(#6CI$)`W}8lDvgdvB49qUtf7B!R;4QnV^mEp-8T8*{_Y zpgnuf2aE!LjvLvv@L!Tn<<;RQYw99U^TG>?Ym?(r$Pz3sQ+D^Xrx+LCWJHRSHyJTC zDjKS14-fP*vQ3pOZPMqx<)2wT?h!@|A0;3PTqeDul0H0_RjqW*cK0Z-xs{0N2v47( zRl51rtrTvNXf&>TwK**x3OdYE2(Uo2*&OraL`e)|#++0Pm!+5#YCJ~mfU)z%>k1OZ z^K{zHPx|1@gXcvRc56)xWiBur_P_wwaBJ>{6GpqeQedT?ImXwfQibz)y^RxKeQ9t# zyS?^f-isblTv0l|Mm~S$QfMs#?;66dqG2RFm6j=AuWhQT>BP5Obbu@}Dp1ej3Sw=d zX{HJ|)?_(vyZm?z)6?m26%Ws#D&mCRLM|Rgm$e;RsEOi!idTcdTCk z0Etw)7uex!m>)pXBxP$>OO!8nQ`olUOQ^;p;tX(C7A;)58u-$@8eCm+qms; z_IFuMTM4oQQhMtiV6641*^A-|Dh;-QK){x_6t}~mF)D7u27#2yh7ZtW^AEtN!jGQm z*uzBWosD{e)%r1?R8p}#_FR)x{PPSQ4N!8mBCbDh00)NbFlabl|YvIy(vbt`0ROX%EN14^~{}5_HG?0 zKqdGcWu&)aoEf#fIOP#^i(3U;FXjsmez;oP6W{)9s9h^);a#6v6e5?vx+EBZ8VC|2 zDCAb0tUmO^eM&_DSL&EW&zc{AxWXElG)4ToYQngW<;=fB2Gd$*_yC>$&M^8PD*LaZ z(d12>L|K;4Sxmi659NU@_?a)6=YWSvo(_v>`f@9{)?U}A*Be;O z1SzbdP|2QDC1c~@W8C&ZN{+oO16QK8zIj4UAQc`bFM6rOAU9+^XaeK2MeZ(?)S@sq zsNIV8sJLQeHZlIis=lR^CkKI1Lf9!Nj4!NfxOJLlpm5n*VkuxIx0N-JW1m-0<<#u+ zE`Vh{iXCLez16WJa^-i00Ncb=ma6p#+~nDIm4z;pUgnMCkqwN$WO10W#y7(!9i6o$ z8PWNQ(qOR|fxqV4p>8E{Om}=!BP$f!hPH^P$>{Gjdbjt?u}JFO-DEDm(imMUl?@f-dd`u6j<)u0P`Q-Cr`(qhsC)(Rxs+*m zhM)QJi2H)7XZ~Ulk{3L`hi4kd)`Q>TnGM>-@&hPHKbQY-YsA>2YY~Zb&X?Q(hveQf-Hk->Vdo@kvthAg z*d>1W2^B*yYTkE|o}K5dNyNOtA898fRqU@P|P;UvoeI zNA;}^8?c1NhMLjBMk{F4*fSrTBN@qIPjxa9dIBVIgoU};9fOBvkiVCt3E-Ao=ml7f zvIr-7h6&cuLkMSE_RxxJMVqr`3ikU=Ic#9RMwLOTo5PPO%ha#`VhAzH6jU(5KmG@H zc5h1`R=LJ_3?iK!=&L<3hgr1CS=y{Vw7Y91Z(M|$bC59!OVvgrZp9@rWVpf}I(Ed@ z1O>2OW$5E*vrMHVvSqhBpQ+Fe7 zvl_fJ`_4*{64BOWHZytdWj}XgJjE3S{cN=B{VpCSW6Z=#NHn~hqw)Y_LP{MfRU1Aj zG!w;@^*NFd&-(POPoJf)$7D|f(Ivxt8}Q_fp4IY^NNFH-3xC7cZJLNL!1cX}<(FNe z?c^O4I%5aG$qANvx6ef-5J`D96c~vktC9ny0v_3~@$E1!(vQ_RU73QE4Bx5{5W5a| zQSK)qFf}S8+2e^(Qa_|i^iIImnFLBo^v?}D=Tx6H@WOU~>yoi{*RU_Xyg43IsRSZUtLv;8Rx}HvdJWebSl8#4 zcR6`$YYBu;1;?#OrIKEsTZ>Zu9Na?1&@Xc}nWbOVWHVB^W%E?wdX1<|i7xv*AMedt z)vG-^AokKZKei5XKgiNXh(h{ylM7_}q!73pGbQO~xwpV5e$|!Aq6^-sN+8HL?t&p< zVh=17h+CH|FK9h7t!ZUsqI=b3(G6Kn=@sJV=k5M65cw!py<;rr4ar#4rJbPM#1V=o zcYmfl5G+lrFt-6;9O8yU(e_bPB_DSzqbd=hLzCR~jIc0!rBM%$_cGr6v zS^14uP?{$7=r->y%hF(#z@{c&sE~VR^<!#)zLH9jZGrN2eozl##KWf0TIymvAd6Lko28!mux}f& zeBtiGFa6OGaw}YQnk)@Z)U?W+hYIO4c!|RD^9_iFR^k%*ZZfT^ zO~MF~ukS+HWwZ(+nonb-i$!Y>*@t@Ex}NmmmB6(VyyIRL*r2uF1xude)#NLni3$F*p;hOgaUQ^N<`-f@uHniEwaQ z6Zr)$f-^*`(hIxfKAx)N9RF<1zyQ!H%LbO&$r@l4gwm_Nx3`XWX^BU!5AB)DIF>hnd?D4#d zWX>E~b^(I(&_7+o4pdd7@Zy^_HQd`zP-*Q}SFt~U@ncI*A{&!d5M6gW7JL(ZRp7H7 zrTLaeg>ZPS zY8YY%&yl$Yu%;R9L`j`0m`ZQ=)@y2Doj%v2q}GSkPzZCe26Sgn6inxw3sfIPzRl<8 zJ2&$U!}`b5X$2{HQSdnZC9Jvj%l^gauo#a21a7%2e7y`y@-GFLUNeMv(aZTXBXKxO`|PF zeuJ=IKr`BhJIjoR?}b>f%|k<#&#;=BqHhfj8MgSiCT4h#MTWe(RpOjT=t`(U7@yr>zu5L&IR{bphl<|N41dq`&^>$tJAo;8x!adgR8y-D}4s7lab%_tmA5;+o7WMfC; zQRZkyBP-^BH={i>|Ks!SCYfM)bgR~pYN%X7Pn?EV6$W$2B@->cai{7l8=GS(6?|yf z%?N#Y2*DS&lY=eg?MP2OG2E4pltz+Ye$6P44-fZuVjS#+7e6l1 zUVV1b$sbM~|BsMV5a5@hamKo~t_V?Tc27i{HDPX*Y-C9xVMg;JhzHl2M&M16qV)FG zE(h9i*Gvzh0!8wf!`dxy^5(w{M@3@bUp*n^#0@Hq^7yK2(CG(YH-h%;kK1nwVlD`K z0+5JoiW%uUM}A|j=C1oso(pd9F+OOuo%_O5SF0$P>^ow?a)Vl4g?R)T&S zFPEiTQBatBvc|1Efo$j9q|!g0?dkh{u+xjyX!`+PRbH8%9fGLp#Or?N@(TJh716Vc zsn1n7O^ka(gw?VVAe?|s9*+==%-Ez%=a4b_vt=)UfLl^QM=K+qz2jDk_!s#!1StdF zKcKCB7w;$67MH3efE`DqBmTav5r?-Juv+E1n6J4Srz&i~LBwo7x+eJwJ}iXkY?xRQ zCz!s$0)QZ(UFLX!igv5hVZ!k)ozDpHW3jzks!D7T-qE5?*%YtjSPsD6aeB7<5R7dz zsfdOOA$p;aG@yOW5QkHp`Ij89PAU+%&lWzVxGVgVEqu8^;s4Dtvb!Jf0=|d+XW_;R z7Pkhy3JWI09U;G8G-+XCa`+f9G%JQ=VKsvRS-a=uH zrm^%3$zn3!{%x>J<<`APb2K>o%one_V;D0zpf5f@1j|@rk1Uz6i8OUq;0D{;Do|Y# zR)=R6qEyWE0uRPxXlq0zuvxWSJ}VyC&+8I>fXM*Lnen3?5BO=y{?Yf ztzBN);-I^{Mdcwx8~QtkMT~*R5BDDE3t<8sWRH7fV%AXQ?j4{{TP%M+~mSK3mH&n3Eo)Q=}PJdGQ7 zcaANjjKslBV-8r?XE^hP6)=bh!Oa(*CQrleOVfCqjxVyeT}?l;OT4$_4-loIw5CNC2DE?%~H5Tx2Rc^=&SDl&gA#; zA5v4-pgRVDP_>p!Q=U!!^^oH|q`mNs;NwAKr;)(>yci;UApzkiT!>x zF{L%7ZlTH^`!bB)*5T%K9)8hCoof1nf?SB(gM>7r0g`p@cZk9F8EU|GVQ-I-+pdLS z>uCp&YH*mzLC@mMQ*Hrh1=@gNewJ1X8<<|CQ-NA$Xh<=xoQ4xC=P!(4+3FO8$L8EB zDv+SkX!ks9$K*1V%AH$IL||6NU_bV7 z>|WmgVImvB^Z#iz68}PzVI3mFvr2wMRK!0ZgL%8R%Z(-2+sS=UDsMHtk8q%^6 zCm8WGPf9pZsc_^B7G2TeTt;Z@F`1&omT zc2UskT2@qMS``!P$L&~+!0jsdT&l&)r5&DwJfvO-yp7Pct&R#CeX~5pO*a&xZQMiI zY+yI4H&Y1tclL-9(74SoChFPJPWU*BbIW&I%5CHe@`SVS$RBCHmB0|b&Dq` zGTW{JxklrF%2`9GXu~o|rb|eMAS~NWhBJNqbjzpP|3o(We(Ts-JTaQM)2{zTUs4%H zV9(oy;KIxipjPI!e9T~pj9+lv_|Ab;0ylY}(j{AFayarq)zEX<`d>5+wQN;Nic4G2 zdI;VOUocAHa|2B@^6x&T(#aJ$^T;Xjtd-p}wG9ancgJ6<%sD@mp-pdMYfPLpDpl@t z!=`^;KlVXXHolDc(;r5MGjP-Z%xSYAT>=}Z(X}3DpDh5`wyu?zJ&Ytv0&-Rs% zi6$Tfe z_c6!$5QFwNiZ6~|U2fq!@_ARPPGK3j_PS$WEw05-0yfk7&1WqH%slw^=a2kLS^4*^ z!iv1IqvBRtBpJP8XJ@oL5+59gH=~JLp%C0Q$9wFx=w5apmgZ4r*^kQ-$T^7Pvuyyb zwdo1U(Wg2anW)Fi6@w|a%8StPjBl`;J`)(l+aIORGOih*s6x74F%faaIRj3`D??%4 zm=HZ)0@12?mDIDWd79yK<_1C9*Ostj-D?@xp$_P&wW{jcNi`Q^&#}^y!=?PhWGaSs z^y>DmC*oC7V=_yhOaHtH=7N6z!J=@@h{f1(yC9mzxBYf0>fVm~uE+UGI(0nWl@j%M ziplNJo>d{eX(A>K^A5w3c3MtFGky-IJVd(8$HS%1{&k%V6r|w!j(R3e)nyf=#$WSz zTS{5vM93re#rZ<9prF;LOE$E+ocdSsY|yCO;1My8mS(Sdobqj%6gk+gSRua&@-F1R;8FEkeObv4yXEMs(`i;)?Xn!;%{ZAEO*^NL7+I zt(MI+LuAK4eY`c$!Xqf|yAzG6eB$;*Z`k~r!o;$yb}M9A8Z^m|EnoT!VK}+Yfu3mS zJPLSsNK=X{(DZImzO068FlE%C-$*J(f%T~1l~PEms*^Jk2m&kmVV&tiSDq#tKl8;V zhwk%C_mQ!@`%nYBGh#IMn8=>WO8KOY$79(BRmeN7z*i%>VM8@4qzKwejgfkRxX=mM zE#@1EBOexxRe{qDIq6#+y^b3qT+)usTF_dGXYMc1^T$4$g;zFt0N(0MNN}M7yndqe zr!zvX#XoV$^aCOFIg8dXk!Qa~KBO}1jBq^*4dK`Zifhx`I@Rl~%F?IY2r8A>d2sjW zS)P{|9_#msl1f@;s7o7q?(YxON*nuQh}I;XFimn^_`GmdNE*VNf36tVM4m=Z!#F=7 zybe1bo-An`#W9` z_WdiENPPvP{gGJW6#vW@`TR1Um(?N0$lO5V!?w=&3(J5jrXmn`BW4qx_b1R-VUq#) zFdz6DPnin>_?a(agw<}{9MQNO_%ZRity0*+-CmOZ#>`7qUzF{s3lTeDR$RNmd9=d0 zf)&@PaAqE{lGCZ5TSHnpuGltA8THqweAnNX@nhd&qz+k-NXm}Dx|973wRtU)uTgeDT?c(7rZ2+Uu83}EhWZKF$7Bt^vBHfc4U-dycT$* z=~i3zGWhvwZeN{!g4jLO$3?8u`h!-Aw8&&q{r_Bi}q5oTNURdcqC6U{~g+ zdeLyj5OXT1fPuZ6dkyZ{oLv>R!)3SxeE9&5b8Nhevb1qFtaY-)kY4yRlqS+Rv~9au zH=nUNEd=<9g_;Bbxr;$zx={7)i-OU)&f-wbN?5`P=$h4nh7uNVIg#G_%TuFccayP> zJr#SK*CZ}cSZZlZBimM4<;T7*@mE>8-bJ51y4f>IB`N@2izd*U+`XxML--25S5c_M z!yWT@CA1wPIZh8#2u5r}%=~k?XQgO@-m53TEuQrzETcD4`_q}WN(AIB{@3_BzdZB; zys&3@$dVVn8BIQ&iTeuhGhfb)w?u}xR6ta_Rv`Yl^l~&Y`)^ROI3*@vMzG4)*{0cY zddY1uMR^mj48bE4CDSTa)^pjEZrIo=Tl#m?#?e-MU~XL_>s=QY(P!6|2~=^3m1@M9 zcPnrM8*sY9T;0sAO;QiO-bik}lk_a-t(sKXtG3jmAnW-G>ef5BG_Cvud9gomUr^wA zRcp_<=P5npI>iv=3q||TDr_2xZ)SA{0JoZU5=pw|Or>gv{YP7Dz|kHG>=MZU*QHtd z2tj^8ORPbPoV+Dno>J!Njf0^yd%3acDh2sz>OpV!Y=)8Qvu%SfE6Tgv!t&J!?)UK{RglC#t10l22pvw$>=%aZB~E*ke_?S zQ%0jRg&6M^ zXr+r)<+d3I5f{JlL%^knVh{B8Wz}hAL_y@v z`5?tlAQ_x2=}#j+?8Xo5St&ck$aq@!Dn@9v z1xU$mknFI;@vo@hZC-_78k8N2a5`hfcv7SCGcp_5*Hvo`tYN9F^zCbv)`b;N*v^JW zDLtKh2zuqg>lxcu7B#|w#E{e)%h|Fwo^5W3kG;YlX@SB_{_=HL=(#1S65 z&pV21F}MhBp3bS#OTj~y-J^$|6>Eg)=GjXYI03x9ODQVk|LD5vxG10Jf7prGg^Ga% zDt7L1h+->tD}L<84phKy5W6w30~K5D&ThqS#V%A-?BMs_eV)6WJ-@&E<9XdaJ3BKQ z&+hE(?99{hlZ~v3r)^EvxOZtxK}<9H!@;XxKkye&2;F_}w2_&U@}pBmV}NKS_%=Lc z_SKXPizN@lqw6OT>+Q=VnjuQm;NqZG7Ed;uYd_|F>V+7zWxg^tX-_knTliux7(%LE zXi3aTj^OxBAjnpcFStA@A2ECY3$0%WZ?$s=+fa}KrR&gUcQVy5vd|XA=$Ndpa{9XJ zK5UkQae5f#1)ZQIB>%Ns25s4qAPfuN6j;#KZ|_3k?v25GpEL{NOd>z#ki`tbUaDS-TW&Tl___phSO@79mR9Vn3dgmm;`5vKCFk zKdTkTlu(~YlApO@mP{t|*r@%ujhyS#cl1JXr)irl1kR8c1yt%q=<@1Pxk{||;U2hI zT=J5U4QkoR#MZSzf2?|m8w!61mZNlqV>`*l#2!2J_S zL#C>4D1YZd4(quOwzsCktXekI_wR`7um_n?98Mn9NP2>U-`s}z@DybdY_+!&i7GEyT(wkF~PSn zt-0{UdNcP^O3e^ioq~kr+MrijY$RlJo-+WIm^Ut^e&EfjPQoH5bCb z4!orG{afM~1@V6d#)SiqQ>xNL?9?UZi^H#2*hgn|^P~DDeqHte&i$71s&ezGRXJ>@ z8R8UAqB3xc%Xeev=v)bZWHLAN?1R{n3Aqk0wYn|d`ZYp&SC4{W=#}NBk&XPJ z%wa2Hks>I=KR*%`7>LSB51m8hb`^x*%KmW4xkO0A{10?v0a zb2opZWi>3^GU@a^1!)?t?DD-h&&)dau-gIfns4Cuo+NSc@A968`0{4pI}-QV#q1Mx zP1$1$xQx?Z=v)=)y&q?@krxzRRFlZ-gUxh+#Lq!sc?ajeZ_nd)>l40UY}i^&ufAr5 z#24Wu3kNFbIroB%sjF@BB;SB_mm&%Y-KMxMp0A~8gSD;{PgV?|0j}(U#?)Refa=SQyDSQ{xTGUo8sEo0%VTI zUTyHNr(qPNcUVkQpmZ;fq0-{u*F=f`TSk}bPCT(`unwGkJOUhjp6OU>=8=m1gt+WVawBmLjSef}j@nPWML<_E%_SF7!raYL17bb-hp)ion4cLFbmQEX*ljGv%QE^8K`yXL`We zA>&qjZ<39EH?QDe_=3vYF&m{HtCRDvPY=Tbo#!GKCR&htH?^ z+s1*0jMp20S~?VC_2$E~Rtu;rV;kZiXnCb^v|R`=KhF~%U85t)4T?6gIcbSk&R7R8 z9ok9X2`n(bU~GzNBmw7~s4srn<6}nDZIh)IR2Ezd>prrS-a?Vbur-%(>2d`7u;kUV z^<0@D{9dl}@qs-J*O85Ty^MCKLxhTiekn~Xb~E53MHtZ&Jq2vP0e-p#Jo6mVsBjz;jvB@nVEMR0>U{Io}8>1!Zq zPj*XD3xw3zQw~$J@WL&$jqg5xHnL5BZcqf;y=Xf=LnOBUdoJyyAcC6F`qP_51TwB1 zunh~zhW{z-rt}mGJLiUZq6eTagr>;XulxY;djX z6zRi@$^@^41mG?!es#}J;m)Ltq@3P6+ug+8mrYC2FKK+2mMHbBHKHeaOr^!r+#HPa znGYXKY=XK|x^`kNg>xGVTjH|KP%Tn@)$i)eJzgdjeh|(f9>3&@c)PL3mht>M$4`5R z8~-8#r+nvD2?|}A%=#%6lq)x2f^ze>(ter#DoI1!ComKkLb%hQOh=nLJTw-3rT2oaL!6uLrD(JoiNtc|^)yMq@uNI>q zTcjCL0G6Ifn_@}bp1xD6(1CBhAAC~Y343(e8dmON`*hy7a44Wgo>-K0k0;Y_3k2!jnrKy*3fD;7?6)GfAdxhdcEEC%E3qvFev)MsO;#lsE<%fn{*m)ZF3hIN40-3Jx;yq4)O$Ch4&7QxxC!j_Iug*pvG>>c+hd zO2#|xUqP8PM7}k%MKhrl3bG#LsDc%l73E;xq|65fQv%>bWKxmKABQ?10-fMq5)%I! zI0wO(l=EhtgI&T&L%=dxqptO!dXdHEot+5TEV`p!qSFR^Zz5M*VU}=}uEEfM)l0F+ zO{4e($jKggYq3vJLY<|^G){?7_ew0?qL0vItJb`e2jS>)%a(RHQJk6E%GRANV`bID z$HH&f;UD-+Luy)}>Wsz%Kkd=#S9OY|QYWw`b5HzPTuV!S%aH4TpO(J50x2zEa5^g~ zW}MmBh9&xdiA^7T4aDsvSHJ&3NuDtujAhr}VC$Rip{t1rS91cmq^pZgTqMWUyklfb zM?bM)=J;mMZc4uj0k_iy4Iwhp*DZrw)eq^9sA-h=v+{7`I3=_qeRuNr4oc(k-7yw$ z59y(?^WcA|u{xmEHW)Tug1C6RyY`YI_>%)2HDrrTvzXX>2Y|V^5BKE1796>pqf^E- zGbR*?>T!cRNT$QoBHxu-QjLO$)*_I%5c*?C-G7gMx0HK?ucAjK z6N{*TJz~#QP#wt1%-U9m?)VlR9EMGB-Z+Inj`{m!$cZsov8`GX0^3lDK>W+sFcz}e zd~}7(IMQ_wO}c$w2uVNdN!TY23&90RqdT;h+BXRFqF8}^X=#aP^V(72l(;`*sE*HM>Pa!zsqzr_fL?c_w}?fF?)x61t%@&zC2A-}N%bLN zKCI^2Ep+H*iM4FrxOI9`a@r%?ZQ8KnCXyIj5=6x6dHG%$j)uq)wAikL zP?Z>5{#uzQmw{`{Pitj=l7nlIK{IP5){ma!p8)Pmr=wcN(7tK^S>zt%!&f1Qi%W?a z!+fBNoS9yK_hHR=N*6}%RzgF_goJVHe%cGajzG(PvH>`49)jaX0VhmKn>SL7Ej0uI zE);X^sX=h;UIt~CZO3s^uKcNKN4@Od!kguM2&)&fdIRNg?pbJYYhT*z@xA|0u5gFa z%D${RNIiMPD^g{vzy2lFI52YnoN=A=?DSH!BYEs)%CQhq1VAnx#^01 zc1b@>k(tkSr&TR8PEinx?wM634^Z*bn`6&XQ>4kk%He6TZ*yz1@GJi|$?gVRyyWx7 zla)3_h3M(=U&@+DJBM?zR$TPd#sP26K3?r9NulA3+<(`XJ!yFmr&X2b!Glym1GX2LtwrQfl6vndC{sp_Xe#o;`@gTh*J@Ey8#FB@_czKVlW)5htf>gAj4aIaB#9sbFn{61fQ}X!fGo6hYRLag>)b-`25T5%VddHwaWY>#)jyaUdYf>&kel;L z1ma&?vnvID-mR{QjcB~n$g;ZD#%l0r9Aanwz~jb4a5Y9%QVIkM_^^2T4(sa4aQu_# zgSSH3lt~c?K9_e1Djtbkw{WaSE%*eG`TZWO2C8|cgPF_Z1tS%tz`z!UE%0H2+NK#1 z5Mdj`Iz~iSA;dYHA+oJiV`zao-AFiJUQ6%T14gzt^apMGGPCg+46NT6L6Gvo7j>_h z{1wpFuogwGtjt%{mq0K6k<8t(k0L!(f1u8v zAavy(KyH45M)SW!Ot1e-$`Etn>s+uLkgQGK)rKa2J3$r|Y?uoyr(FxbDYOmpoyZC9 zLsrt+VzMgced>UDs0>#jmGfAOAjOZi-;3<0VGUCqdF@}yYq?A_{&NQAEpi`tqu<0yOxD6Eo<0m zA9k@1K5SVwMPy~#V3{YUMMH!ar|-JQV%C!-1S)YC@4QDwD|^SxP(?g}@D!2$afL7E{`!Noeu&3ut9DTPDt=DB(6v zIcAFr&4W2&#z6Qk%C?L0cljwloU|7!eYLu6Mz_CP(tR-{bcxT2PuF6xNuD_t6PYQ< z%mM~sCe$pt1E4N{P;v|wv>%ss%oDl%B56D{D#J0!t_SuH+Cq5|x}}&$)h%pp?ogT` z{I{>~u$Lk=1WYv(8qTGa5}mv6H?psLGg=6UgHz;ZqrSp`b-)vRWoK3yS>;1vaBa)Y zdh&BSP|3Z4&kQnoFA=#7f}<(OfxSwJ8(pA?YVd0UqKKqAMB%pP98RnCeB>u1i~ApP z;{3P6Fb+gOaqd{BbJ;xwj)jC1g*iR2u+ zjaX;~3cRTispc!*x`sA2u?L}LtxSZDzq{%-ZAp<^AoDZ0@lH5IGoGejM0Imouqi;ZZ>*$Q=Y`L3lB*p; zoi8jJxhH<Wj}bDu9DWWwVlEbNtUCBy!9$_^st1;<}SctXfe*3`~tsfHHAs_|b@R zAV9>YX4sVdD65pM8g5^d?xeSdaEYT~!IK%jH#`b9_^nW`!VC^`r(9`p->+Mka|gxM zSI{0l4g>=J7<3#G-i#XS;fS+!ZOTjifsjunobWdIqoGn(F+W>6%r~-j zU7!p(csw<e~MejNsJ7!+9&jndH?IZN0!V3U|6mL2|dMq|Xt9mzqpku|ws&Xa&WM z@Pt}mC~iHf(0Si{is15^lr(8r4*C8=a5g$XPN#RLAZ34L_hvJ5vH2GN#3Qg!XF_iap(PzAKU?Y9ARvlj4BZD-v?M0Qql{;(ny!{ThtjU0zEm0YEmhSv1(-TIVst z%HyB#7;R@mpjv%8oEA%4+SA0WX3z%+X#&p;Apkap_ zF$!x`fnO6Ts+y-e&=Ro^V{jxMg_>_k$5%S_l-uDPQJn1ct>KN&z)nMpgKAG^Dhze1 zm_^rd_ahRn)82wKdHVoJy7IV!5@g1=o;3N>2#}8(QA|WzDwO^%LbfUc|dUv%!6%<&Z`^*WjO1zqVOA7xX_{BYlHj#gVTdER z6$Y_l$9@kBS%0&P2OAQ7vIY0IM6y5++vvQ%7rie*zKD2tF2gO_yM+2ZF!iZBFQ=xf z=)P?5!9WxH$%QuIb5x=d|DKrY>*(vhpGpb+_*n)H@J8Q2ebtL`-5O`b`LEhmY1)*4 zp0#6PTIq55KIu$qB)PZq^?UQ`G*WLo?9EoGhrnV6mi(2?zl1h++KA=YpU?h-cL9y9 zOc?RTjc}nnKP&QC(4>qcDyY@tGRV=Ru#u}c4Yuboc7as#BBHZy z{rvxEc7|@kS?__{*P+6^HV6?K4*{PrPnQVpY`ae@V>yRWoI-8H0cvvUi|JffP#Pl) zKYdtaK8nj7<8AvWEyLtRF&p9r;*RHpoZhUIX@!w#YH&M((Zw#(h8VTnuB=w=6LaP4 ztIMpCxcGNKY^u5Sc7ey^ec08s)FJy6jT%HueRz+Bv4A0SVMV-*q^2lFe( zrU$ z(})NJPm31H`%n!%N7eJ;B43tG^vvTU7WSr6YaRGwp2tju9a{=wlGz(!!D79r9h)qNE zTp!AdgN6@t1SB5r7Cfnnvbi|BrZ(kt=k}q|(B=!}8se zvK!RkyNM<9U7&1@u$rl8F-|!JH zDSAWrAPly^x#k$2Zr`mgP^NuP1H1aLtKia@+{aG%|Um9OODglQFZb&TS}blev|Tg!{-%SqGF= z-sO9?m6os`&j_EWHI&0m}h#tfMU8 zbN$Ym32WQCEi$o{DZfxu2>e2mRU6`>@s3V*4jiHo2vH**i6tuZI zrVI&^oc5`OWh>GjqHd=_wE6X8zqygn<;Blu|=4gE3E3R(-6~o zu}ZaRwF+&qDP{zggnf6~C(%w& zHmF)PO>GSrjr-_4nAgTcMb-lO)*Fd?f z5-=AMg(NQi^&QPaU~yfV%wVGD2)u^vTE>la=JGz7#I^(kxb%gYQ!$K0~}s z&8NNN*JNU<`O#uO&IaPZSM9CA-IUMjaQlWR5t9NN_ae}Mzlz01qHs9{WO~(?6zQ8A zV6xWu5>y3u@UgN#GMrcd#Zk-jv{+P!Fq-V(i-r|OcGCi}56#eD*%-TLR$4OuU`!c> za;H?P&rO!CY-Hot zqDkf-_A)WyD=hOWelCfh_UIe!XVLzVhDeOD5)cV|JAQ+arCWr~b9aYPL;cOX8|@BW zr$s12{(_%sC@<@07_SdjYF;s-A8m+tpC?#Y2K#yFMh8PLZVGbR8I!pPb1Atx4%oX>?aUoNqE6#Fw*FpEy;CImJHxB!><0P&r}vS_75?oc@a$UM=`4#KRU! z1P}V58#|?*MS(@`_$(RW`lldOB&ynp!)mdv3u@_C zoli&MXn)nsg}$uO_{zA@m}8xV)kqIRwAMqEP2uudHY^o4eyBFZ{*GNFK#?~=M=Jo{VS^%Ch;8uWhxq*eP+4EfF9 zDK(FEwP^DGZcHu9)idkPr#l!~MXm^ygsvBu09G}f=h^_wq z;SBzoi%q5^d-97R4S&M8z)^X@QLRl~5LHkw{LX1Kls5O0rwFlN6Dpfd;bBBSZZ6@M^4zRqyNtp zItmA*4fmn_a@SJ?C5LE&(rmx$SQu_=2<*nqA~~$Q2mdP0@!1jg{h(N7tY&x2qD|bO zhiiG@o6cXsOla5ur&zQLe%hnLD!h})9BHefr&E`vH4-y$$3O8@LUHJsz|)DiWy;t6 zU)k=UEDupFk#08qrZis98w>;Q9X04Xhg+997&htRhOfhhLm)l0=`V)uOpC2GcxAS( zRD@I$pVtyHLgwGp)3(-1hQzTxALPkK5;D&g;L<=_h% zH!cvq>i#ax>CHlpIS=n~k6}h9P>DynY`rZc`8o!^_(!fv^kKq8TEfYH zdD3j8CCbgm3j6KLS)9IB;cdYEJpByLKxq^%f0vfPDCSA!CeomFV^J1A?Ge)Tw^AYz zi{V>~?JPf{p^x4|88h(PEB0arf0$n!X>055_Y+1?EV+7szrj&|D52x3o6a&-BpZoG zSoo(q==~<;n4PURzkP!O(-qccltK z1(GViGv29wCJJ)Jf`rRaVU3YZd2H9Ia(tyiu2YaqSD+FYksoqcx4!Ri&C_svG#&FOuuJm0cTocp>)-Y68+<_y!UL^ma_J_`3R*0_(+_R zZ3cwT3@<4hqLs!H%mwE`FwA%q3xVX>K_1$%VQ(GQv-}OF1=5mmAEU>kST)6cq@Vu| z3qdvFAy)|TGiC>&s7mRIbOV@S@ovgNy^YH(tok;{u?@#zaEXg1!aO9Rgu(I zoXNZlDdSQPq zY2=7e@D-Q@N3c)05OY=iq5|(IaGkpxVXUH45Jlx+F`c%>Ficgut3Z%zpRo?h7>Zqj z!Ob5J(*x8zey^Dot=1n#!4Lb#vOu*Pmt<3fEZ5mk{@km~Pv-H{9+yJW(6)z57c*PZ zFW#4h_G(EpM2X<9xT5J~wP`;zECDvVAdyV=4l=WefoV)^J(sG^sCvTnAvGbN;-^2P z8x{U8sn=d3%l=F-ewUYVKrluJW5$>gF3*6!iQrNxe;)(&s;lv~Nx{46b|Hnqr z^+-Ppf!j8v6a1fcedEpQg)U_5`)jUYwmze*34B?}5dJ?x}^H)!`3itFo$Xshv(?<2(EazweFh zoJ1x6#d4<)HAdCcF^@Ssg~Ih}4Nen3?9^?ZWUihisu%${2@@I%6*CGWIw3P}+2s1EsMglAkASHZ3x&w8=_I$ba0ohii1~bb6tU~5f`%R zvaD$AyuEcMwOk$_Tf&X?ZtujBM&F?0RL*SKVG^A;~se2JXnmX_k7UOzgyHMsv?N z-=)dr10gQNs8aLFX^&`C&(;59VXOGCeP+QHPtyH%&lUXPr#-5S8J=B!)?_hN2I|fEr?_nf7SujBgzzLeXz7gY;h|e|FbR66Gqdw9 zaF>3p)L-ty#Y@pz37)whkyJ;bEi8D+FRD&0qMEL)4L%RzUXyhW1htP()CS{XUUH#l z=(hkID~<|sr(7lMQqJQ)yn1Y8y?m7FYtdQ+SNw6_qa_S663}mbZYsK#Bi9wWH*X^O zOx@JL8={3YiE!vWrDA6bn_qjIg>AcK(!1h*h=OXxCM9WzzKPgfkMXW#r$V&mj`OqN znOjo{uWLQuysE_-a$T-yCizIUdmGH`cg0dv(^ST1Wq+bGK6Z7ow_~RWR5h=p#wUKI zqK^K>%I1*&_?I_7MOHYzQoLBP{Tcoi}^TZRY!2XIy*dwbsfq7gmmhwvYKn zLEMXb;*L{+MmF^Pi+98VT+8Pj5&kw+BDk&?%kAjYayQ!) z3&A3KrkzT6;?_A7Rqi@dacJRJ0@m9d(Ph<6bb}bLPC31#$agbikLrbidmfWUggNhiflt062n{VUcfN=HuS}ZkLbUddi+-D{@Ks3laJ8O? z9gxM2nIOKcOnDK6@Y5gMftE~eIX53`&&b`h*og0ZR#7$dStej_WlaS=jVv2%<0w3vv(gG zA^VJ4@ek&6Z_*$dcV9#rD*cD|xhk$^I=zsV*c#9uj+fK-qc!rYzLkE?KhvZ$vNqkY zU78k)ExfEp zVs7s#a9ql4w^+7ydjRbZLnJoeUULRQFY1n7kj2EmL+a|RpZO;kHyb%S2t z7xUJdHU5&hCnBei`LwLSm&o-}_xYn!>s$1iO+FQAT*-U(iEV-}7I&C}jI0|;ldaFELtueznGug~ z3^b|hLjLGg5U65RmA42bEMjJBgz(hr+afI_w~wx$;L#?zIPK|%cb#Zo3fsZN+)XG4 zrq{}0`{EkuaDO2xO!AJJIV&cQq1Q=F$g7`n63{;RG_@1_nAsT7V(~5 zFajUqhIuYNEbVPSTrPhOwZm5~vr1I=3e}@n3~u9bjZq!hi>nW%AQkWBK|B_|sx8Xd zlQJogx~0EM(U-hsF|ra*(wo`fA87lOixuLoi_TEs*Ip*vD~iD3q~tH*2{c7ADJ~c^ zdRqswGOwV_IA+a8KcOcdC)%)#E={?2;cf4{ zhllEod0 z%au2jdN>KQL3^b0M-u+lfll6{4 z))Vn&t+hAODme68bnf3c1*r0#mfh1_;k3i)B_@_)`43>>5&T3*#sgMmT`kl4B&CsJ z?lU6`_^x0PEi^2eZ^=Z5a`lsJHHSMZxr$bY{yC&M1xdZuw%ZoP<~Z$VZ2IlLW>$=E zLBqG617`fR$L{A>X^q_YeT_jCZkh>5P={8OXYFW#D@eq+m#DflI6zT7GebD3n(r5V z=MXD-Zpk4Ch&>0!H?MA0z)ZvSgrc2|9~6yns|sUj1?5cG#y5_l7t^(cf6jYbLhT?~ z6aOl7%4U1Vukpy-EiWK*W$KCZnF{28Gk=UoRF-`ZFKPxW8-%$Aua~Z?S_j@%*Q+l;c}|y_hzrp?4*QVby8}1CSaF0 zt9%U%$ts9{Pk(j9U9z1EOzhCwRkVU4_r$Pp*sArnFYla}&AmQRLWaadD@0i5qpWAv zuRxy7@G9m zW?FK21n8EZ|KC3dtXyAmcalxojJvakf^?WO+N`1SYE|BrA)^;_;$pE$_23s;GO?G1 zeelGJ6BWNeFD4q|P-K#cE!}+sGRV;u(9X2PGAlB~qvvF`r@0QG$+9D$R)495z!}u2 zB*M#xFb|ffo^XFbGP$X&f>{_i?&bG|4xYqg)?vs^^PZps9G3i8QznXK;)X1+X4#>j z8p1EeNkaW@u z4yM38@0uaU+BN>BmK3SD5vVW|TiTkW2ij@ePx$fG&z9(pf>kLfS&6=??u zkXEnITa{NUEhG#p8^v#jD~hd(0KRJSM}-64YRg{DXl9)1R_XxPG&EPK*o*zu?N;pPN@`|gpgcuu;LGaFh zBAQs0i$xp>NlnDo_OR=qL`GA!gqXBW%$=$?ah)OP1&Kh6y4@=k@%LPMfBWZxW?$H} zBF^%CO!~Vk?T7j>W9NBvg>805*-M^XcHNr^`O2ZEV+?5!WMlM2+7*qm!&Qr9Nc(Bk&3hEnaN{;o?opf@S~Bk|IHHt4)9|c)czPf zvMNgO6A9l_qbX}b`zuO_NAzcO)bvNZw=}(33LT#YqK5jE#k_a=V6PDsfnt34$PCvn zBfMFMqft7R2`4`(bxWFx68zk>>+7;KLn7$n19@X6pOyFe+my=#rz(3>0bJvaGQ!&C z$qr)*UhL3U>}$Wjtz==rQCaJQgh>3Cvxd^ z`~LO^9ZkO17)+$^;bdx^OB>WEa20KX=FhOSJyBOgL1X3d2ue-!$AcUuEcsl&pYP4lOAJX_NvFH;zZA5@ywYEdY|$LPRS4me8^7W&@d*iDCWCLmTlWql zgk$+`#oGMzlk}S%hmjrUjLU7WqiI8Adu01kMA=*8VQO)Hy$b~yzo|V<8fF#nVS+yx z@tWAo%;+c*DGX>>gQc%1FYFBTCB65>&}J&58i0sNrbc)i7J5yGV(X};wUxOz>%e00 z2$|7H8G4?)hhpx!rmPQ(s@(+k%6yL_Y*%HwEWW8M^smSBEkOJeieN|c1vFXK{iKCW z`~`8Y&xbSj!)7$h%_N)p59<}jREcRuxmg3*49?;^*cXzxi8`*`EOW{>7_6s&* z+y%z!bVDgfvL%C2`_92QT^uBq7=OsIT2c!?rbyu;qvU1qhb!f=EL)wnHelpv#gbp9 zq$GcGWpE?@n27i??1qn_4m-E_qA&Bki+2@HZK};WE>+y73UB+8Au+hBZqH&RRh{l~ zkka_VHt4>shxEoeD9ajF628Npgbf)mF<8Y;gM=Ydlm)AC@n)kP@=2lc}AV&G>|=CA1rcx6GKr z<*P=GFPX_ZL&-A~%g{*x5eF1$H@&7zu3J!qqFTU>n@=Bdqaf1hwIDg-9zYg`rHB9G zZ0@ko;GLId-_ck$u<%@pN&vs)xh5loEXnTYp*V??$#(}a2p8VPxyIxfarB;lk;-i; z9F`bwR-_&9$+F^Ke*fjLW#{&0(pK`^!1A>0=7^m5J{-=$#2yD2G<^4S+=DabT@Zhh zIM0$s-{}i!Qp9rcEM1&dwQe3o6H~$35ewuNVClx7G3>}adW~2Lc}OA+xi?Muz<5~M z*H5xgLM>A&G{iB!^#M-Uw)a=UW{!w5P+qKassoFvcidMCM%9w|6JvSoG`X@SfmhXm z`|ycrtOR&pR%}N!t0sF}ol+-hA+SVd>B88a{+($RgeF1K6&}XNdd5)@r}|fEGAg~< zmtDGy9j+*L_-}S}qwof%y4V)Et#T>{hr_E)#64zSqk~2Nn6%)Vi!Y9WW7L;vspKIJ zf+Sb@_^FmNmu}=chcGGr5qy4@B924!M3iGyxvXbCfk&6?SW+v;-=;%Z7=KChpJKx} zzEPB9nA0a^MDX3oAD2>ARx=`;e%QSiH>1Vs^@M!T^3F>O;a+Ps&Xpi3co9eOGw-hpQipWu>n2Q37*3V;(kLqSy-y`Q02Vdl!r1js5peclBdoY zS?2|7;cey>)B7X+dZlif(!`FhL2O5z_}9;C;rs4~B31~JLYMo)u5GNa`?-m=U!!~w z-}eR3wh~^=U{qsawU;TxquN)a6P|V!qh6R63L!yPJbcTi_GUo~57%ZxiyZ@}+>hbh z<3PH2neq|mETPB|Lf04Ys|;hbd>ox>i7MRIZf4thF!m1S1BY1CBK}9O{NF5u?w2-GC|8Lw)4W;J zfs^qrpe*=vnF{-%{@qa{t{M`Awm0}p5tN?Q3$scbI8F6V8BGr1y=s;Cz*wd{H7PZZ z&x(rX%OPMXb{#5^jLU8M_T=vaXo;t}hxxEO&IRc^!PSCYZ{hZd`wSLI^5D)$BStGN zX|VcX0CU&l8PC2(NNI-&PfZH0B2`%>X`(`?dkkjQh{2epTBv2e$FhGo{e2c&o>5#& zEVM3!Q~YJF{+L?E{n}28IXGJs2C>4`SM`oFamyuSGGn=?-o{)K46Rksn|zbRQHjUb zo)H-OLgVomv(vppll4p&fAAf88X_1DS2x`lvf*OBamDlNuZR$>g~ z1K0R?Y@7^G2nibEAylF=nTE?vhU9wmGZncPkM_WE>!mBGw+TP94oZXFIU?Ct~%K?1Q;|&!Y?(Of_gySP`DjH4|4;JpNLW#SU=vcFZmjT;*s_ zzTJa;R0vlqb<0}RhA-r#vY-iI)!nV%U(6B5`MK`PWM9Nzn3W3M69U`)P0csK_?3%g z!Y|WpFNNnZeOlOP*f|j5w1J=TJu0|`vKD?|1qFV3I1OS@r~|Xet%LN#X&`PMaBHCQ zQ8{ta+DWOosPve;8z>Di+cs+eRm7H#UbOceCeWb&GF#cUBU5SF>c_Al7fAI-E+b3h znSu+r*uNzQ!*9y^DvAuEMKrP3e944!I=;;7i&M4m{yd zEUmsP*E5Xcm+DevJ%roep-T13_jjT+-k14p*0}ffP30h({%`Vw-Q7@#l$>M6gRSw9qZYs zsgu#!DmVB_vJ37hCZ*Qf^kqr3i)76(I_*&{IXp{$+Uz$vKDV%W?^965wJllnY5Gn> zWnF6HfLFSGJ@k2TzI-~1wU+N;U2ZG2T-O=N;`ae3dHEAC;UCPWA3_x?K^ml2)_^YD z^TY5dV!%OTBMy}SYLpR;)}@rc?99e2&bIPX5Z<{1U<<2s8bML=-} zSIC9|RVb>?YdO38v}y`>rP}MmDl;J@sEOuGSr$V1dsS$gu*cS+0xr)(2&CfQr=r&^ z6idJrBlBI9N@+R(G9i2CEZ5n>e!o&$t-%<4rmhE}0v7nP4zP_Ek-RC+z*VEiih=WR z{F7VJehAgeJYAU$LOe#$AY0jJ4fjmo0F!{Dg05%r7gf@p8t*p$n z-M%cjD8FdZ4&HDKF;LhqID_7Q>y#HILadApRL8-sj}R+l-OjXkuFbx_^`z89Zm0RE z@4`ozmU3SVqQph+xzxz*oz7|@s9-^CCdq0geQ2?C-%;WZH}mUKZ$9PV&=5tC6IW*> ze|_8Lg)Kx5WquL4)|SqC>n5%44P#Z4GV1cr%H_kZbV*kEJ5Foa_{uai*z|y->|q;l z+Igu5xaW7~qpEGPu>O8uXxZj&{6HT+?NO)OR#*@}KxO2+(_8lWu-{HIXx*OV=}tki z?pq0q{cR`~!aHSQl!D+*d8Lzga6MPtrY#hopw?)ppZ;!y3$)V?#+C=BKcppsy~l!s zHp{H+F7xzZvFo!@h6KKXSIbzndPHS|ez%R6?MoK94t{pTyJFW8acQ?DpChW3I?6U! zz-j$I_#nLV|D;3Ud%!x%OH3qGNQh`mMJxAK%@u}(=@kzslx9;C3u)a#>P#)%mOH3B z;+9lYP({zOvediztt~D;3&zEx%9Z_;t3kESm^5!fe#7cg1f?^bq~qn?awwdGnm~Ib zQH|&B$YnD6@lS7dywzw}^Gz`6G~zn%uo36}ZY1!QeiI?-8*S6@{@}F~l`t{ybg-@R zP8b{jgNCJh)`G|#y$BC+(9F&3CHj#~FHr6cEz-c%b%vA{0^*hAOVKajW3ofJAVkMh zr;H*?aNs5}SD(=Vgj91>2R*R&C9qcMT498S;0L)LRUq%)D%C@$=J9w4r7QGO6216W zxhQ1E-jBGvA;X1*&*8rG5L?y(xIi9g7p8{tqbR!rRRMBh?jcHOb57a>RjsV-&?8g^k-)XtRU>;;!qv<=%sp%&2&yG3Vr|q7R2rN4LjPxOx5qraiF@&|Q9u+CM&O3bm6p$mL<9)BF03y%?n zYP0knMJVx&p?uE4PkV^)Xe%35vXFOmQ)i?lw*QXxX2DgtG{=ioxlo#N+N~ZIO^L5P z_e>`4uD|S26)O3Y*tOl+xzfy5&Phq(@=r^FU3ACsl&*$_AG2xytb=H$h#m8$mX|Cr zJW&LK4wr40KSeRGU!W%btsjJj&`{y2U8$_s2s*(&hjUw5c=5m>M;ptDY%AWNxWDSN$$m02fOtR$d%fsfoGvCk z=-Lep1%g5Ip|X{z(q_&BESrk>u<>;xQMM%PMylLCjNnG6uo6ej78_4=!1yr-;W5xX zo{l;_>bZ^6B{%TJTNf#6-1Y7)DYbk}aONP0=N=lUqq-Qhkk+k2r4W?h5!BM(J%|{1 zV!wqVTCtQrURVhC*&daKTBMVGsBpLo-^x;a^a^;gk?pLmw2*^e*sgwSREqHTKnOc#ni?*3u3#?aM9%V<>_oHX(qRooIa#F_Fes(tF}1ru5=Bk+TX?S(TefLxl}k6 ztxUvza~*ax8mFZaMEqOVB(s(MzL}9C-TJnbnP=U6Sgj|E5piIBAT5DNdX&kN$Cv8pa};!=aBsfeLDD+j%#H@y1a(2u z`Rgvsg_@J_eQeKo zm&7@+Ck-xF5R*YQj{K2DnHj{#^z$|jK_;k7#5 z*e}=he;Npn0V@6l6vg^0i+xFgC?t|?iaP243?-w0S@p*wKq_7s>BELK#(AF8aIQ#c zH^YKW;Ta1{Tihm23%I_Ai&EB}@T1xieNxhf*mz6nl-4OmVYR>Y6_?RcH=}SRK9-=U zI-mQ3q^j(4xLMMx4>0HS$3uMLm8X2C2;#f_rENd23|~#vyJ?1M>+udh?Q!;SYbZF+ zkFl`81Hm-ItHc9}xls0EKCJe@w3PeoTy-i@3BPpO!7z{Us%3=0QfKb$X$qWM2<@ZW z-h8*s!ylKlD%<+F0DPemeb|Vs6pJ9#HUaxkvG6rB^`XF`*tNt8^xbtX9`zlH@96fr ziWY*|@ai+gJoRBt$j_VL5=;{R<_#M@nKY!>4hio~3m?`a40L_k53=Q|t=sD$|8Vfr z9+Nge%4lR)Xo#cVBV0qU$3xkZhyyZNO#2t&Y0=yxuZ>G#W%Vj4!d;UzXKfsCYJc0g zS_s|tJ3zzx_J2Oi;o{@^;KQ_-n4A2@&!O*<=A5Lc%H|0{joe@wapS>f7=7=aOq*Ep zoH(ip#Zsg9MF=AP69LSx(_9$86NbX)z*XJoUpo4W<#y8&*Y;%9Gg6)M)-#%=FNU!0 z3t!RUBic{WeR=FmO*TawSM!GG{SY)n?wQgpD0<@t4DVr?5{#@M4=wb3V{MAGS@J{* zT#Zlld$)c;93nMXoWPu5UkHu_=Ay-9-2~kHF|$qVc5r2^0lb8Byf-B&KrTEUP7#>- zQF70&?PwEsJZ!6xC}H521H0_PX}Ivf-~KQcqVXdSaUa{7W&yBpEA(+5!{G<5lc$-0 zIF!&aL**?q7Im%-x3heXsPG8J6f$E;3>b>ugvaU|sWBq>!FnqGxG~TJl~LWJESfoj zRz|~OeP+?{30ui7XZBFm;;V5T8GhPBoQTQfCRM+dn69^x{VIpLb=Wc-Sh$mhqQeqU z4RSzO2ZafwTm6xK={EZA2-=h3ePAqG=)O{&!DDwd{}bAx7q~NdRGOM(F4TL+cAP zz-r*_WoG%*)-agT(U!bW15>>rqd#rVC%+p|#+UO;YvmhHfs@veYbeis(%z-Xi#>f! zEXIfiZQduI~h8q?n5m@R``oa94ZRF(q{(xc*&(RylymOR! za@alv)s%S=sNg2IWLbadk6(1ZF4cd~6~mIi`^(Tn!*+L_(YS4a?D4p@+HUARa`uEA5&H*?)NFkhmGD6#(fUJoI?`NlH#3_7msgOe?6LB)AEEa6@8EfEiKoPKK-{18aY6OM|XhH|h zec;$C$W`qMM)qkj%vjm4qCSEA7x^dIzcLsts5M6)`z*?RTdy`UtSsfv%I?)QkO_~e-=KiYS04vA_a=2VGtYX^hyCRs!mXii-?loZIrBXMs!fXNizq7} z3tR87X%g)5%O*TGSV;vJJ%+SCu?1$)L3}$W;&*?$nAMwIKU&$=BtXbImBd$ed?&_G zNmWItQB##Gm5*UYl5CtSP{^CT8!Z;OAlKJ%Uc^Iu z)6pH$G8S-jpPB90YMbCK;W&*HAh;Du**Mm`qnW)s#y?`~Ot>!2z1zYPi_NqlRoyOL z+?s@5H7%j>vb0NFb`Ekc#WgZP$cb;w#Xs@L`}n7cjjgQckhNSZrfdIxWvn`I_-!j2 zcaL*mHvpDcUgn30D3f(RVb_)%meNAr1%~q77=FylF0_f{!FC^U3uoXeRDrwdGbApu zvLXJ}81sya)_G1Yv7DkZ)IDZo?@R@Bd;-hM!b_Erz3C(ZX&uS{KO&c2Q@Hp(&?kx# z;t|>%V^{o}Utt2Rg3vAq=R$r{&Umwrx$@KQ!Sw^0G>YXoWTmb5fsm#B+Mg1FPfwWA z2D@R{8}blCH1#N@EU!%9@NO0jcxva>G`Bzq&JhKc z4r#$q-n{%yjW}QB#U%Rp0}+rI8`h#s3jatFmtof3vhu61-^hpo(v zB3p3FIh~2JA+Y$(g~V-mGsjBkt}X_VN#riP9}ZUlH5L8KP%r4YBnRy-PeE9~VopA+ zT9=6?R=&Bfo0EshBjTW6Q~`%+#DeM%1Lp{Lkg@#*{**ImykSK@W>s5 z^;&k|Dt^hIQ+RF*Ny?0uszD)z{t$odMYJqVc#Q*iGPE6gtEPh_$y zv3si9DyO?+5%7HAiQ%N|L0c+07@f(Cw(Qp@F0?j+oz zj1_b^C>H3rM|30;%P|QXRN-ykuWA=uTl&d~^H6OP!I2Bg>5aZD>tKR{8B<3p;M!~$ zO_Snkcb~(Jm%it2hpb3j;2?KX9?DZQfjzM#|Z~Od&PC*u1UwSt#6MR)Vz)4;54J9#` zoON9bcH=gh*tE~DjV!i+Qo_M%a@gNnaO{-bN8#_;0Gc#d^CCDv`~y5xo2(*_JJWiI zrrUhuI(;X&H%z&TvSa0>RYX9oBt4K43bjD^y!0j)Z*@q#(iJ26u zUvfJI_WBXeS-Znn!pIUvR&#SH%&b3c0Gpa(SN8UoJMwMd&Ztoe(K zEub_62ifUjYtBJU`GB*K&yX9cJ5j%9;-- z$u|w0q(j6TU3P~yh&32-o_^39LIP9{s21v z#hL$`>N6SvO5x*5P(8w}9+-YL(A1SJ^IZOEIHGcYo2TYlhG1Q06ZG_FJ z$Y}g#3FS%xSI*ZGHBzN(k^8NtO=;KC4{h(X00*0Q>W-jT+H6T@A#`VLzpl@YLk#wv zrl}6u*%SsLm)U)lH|*%ajR3Jrh#T>P;&bq;`(gox z=#@sf^oA8>$8bqTay5OmK#;RAX3=?fm1e54 zEeJ6VJ3*e5JU2dlni4vHr;46ieSuPTb~z-+)P#C*N%UCS#IP2j#JA0M!q**HkkS}- zV~>T&E_*UvSsU;3K60=X7l*cz$yo!j&?k1T2^Gk5d>RQMSUzjZYi`6S4xeNOkHd%! z)4sdT!S&YFDK9Ud$LZYT{DXGNv}<7F;~Zxk1M(rzt$A76E{1Sr|5kDFcZ6H}tw{Cz zBac#9C3$rs0#t?+*NMNlr!;4mslJq}Zrw{;*e-6y*(-BHi`G3O)*aD7R*O9onnUlm ztvDKV5Ef5uNiZ?%4Fl!b!9Hh}t218_5eHBsErm>3krr(#--gTXMm(owc6#SQ$k2Y6~4 zypR&ga=Q&>=zR8C$mRF43|^j=e@@c9QsJE)m0;IpKP2h(>0pF#e)WE!;+hy)kHu;e zivS%mH}f1n`au}@H8PLwktSAs%ofU|DB<3)g@ttw%3g;R2)qF8k-)6RrESo+DXok_ zRXz$Va4=$FGXo(-4k%=6wKeYe#3fha-_n^E;8vKcvmUy)r=w}$*cb|Ye(rgiE1Y}_ zM~Ef=qHOp?KP%gs1p=Bt`sn(aShgg`B85rhuy^qQ7FWRI57@X8C05>4tUKE7-icTh zs=+woC@PJ}J=c3Qj0Tf|t8m%6f9-#$3C#TuVoqFo4C~Rj4A(J0I2+m{eiFrZVg?xc z^IqXfz^&YT2$2|mqodC9&FDyfPuwT*wn-xbaR_WT=#9rseqP|;b7VRZOa?ZvN|DZAiOx3xc(I3^{@cIu0SuxK1qB!zoGRfpywfkXU|3($YPzdKx4Se{X9CgXwLBaT3f}HZ>+(IZYxW)OCCk( z3V%tN>)*?4AS;niS8YZiU0P#@V`7K_h9`U8Q4YjO5fXvCE6Vp_eXXNK3U8cNCU$?9 zmxYD)?gL|mJNb+(&pF5-vP2bC1)}rIW??ZN4JgRT23T;&67G$UnwihfI&fzB4`RH` zXmr1gnItm@8FBt}<{7kX`Db-31f=Db)h1Tk#~a%#f`&;M*2A{CQ_Z#*1q8J_>y}bN zVc|~@1R*Y`kzFv|rqqm0$5S|+?f^8~zjUf+i83;X`Qu=3$iN~x(aWO!umR=Lo+8cA z7wpPPKdgI%x3ldV6l%GW%QwJtGPetbvw|2Q?kBolQ8H9Fo}UY+qc!R7--O99R zH!^gOyMbsV)6m1j7ys}O*AA-7v_a=E|0b&<$>F>+X%!Od+SC(u>%y@xrIeyXm@pwX z9l3;X7yfq+7#FUluDd8I!Mz`!r zHAF^y@M1F?)V79!<=OE}YdVMjGlc5}aZ6S`!Tg$4p@f`w`W$D&JN?1<7nje>4%Ikd zWYMe#NdBK7fcy97)u;(JgmG2Bon5f^G*`!IgwQsyb9J8fw3t@*;g1&-ZpemZ6zR=X zuHY{S$6K#CI8CWJ7c{4NJV7pgSZ*$%xtV8nf!m?l*aB`(^iqo6ZN`2m)VkI-vM@s$ zEu-_DtlHhHOz21hKGdNNCa^Rg408mnmbNcS7_Vp0^S-7!-&y(NOx`WD7!EF+E1_OQ zAa_hzS>yge->-C8jRSF(vqX?MiHAVrsH_(un`PT?K?}``X2I&=C>^u=&?f0t$b;5g zgsdI)3%p2tdvm*+S%9i0atyWGN{(5n%9Qj4@mEgE@?}0?qha-p>MU{lovMf!#5VbL0enH{oq$- z%0cby6Ewyvlv#i~V-{NdADOucBgZT*`L~|dfWs_1C>9|OzV50_nm4jyttQJ_?OKFw znPmkmQA;<)`aG_vg{|-O8D9VoYpC-(Ya%6jHn1t^1eVfV)NNCWuQ2elUb@t6LD>*C z>h6ncnc15{r)b8~)jt$oID(5SMjKd%Xq#wY?BHqCF!POiNkcd`#6@H_GN)udf}|3+ z`#9e}nakK}zGNgI9C(>w3!ZVap0ype+t^4R3BBlm6*iI_Zf)txl&;vOe9DDrUEyGw zG1)5Y*xF#!%i5kSgxiYS(H;KcE2xe6qVZfJT^TqBs_!kXY7H&dS~l#wkr@_2v?r$+ za@M?$dDDKN>z5Hp9#%w>%u{MLJfqM<9B42G8W9OB?v}NW#fh!i!XPyZp)w~gJ;`1FU(^^&!e1wggjG<-%60^(K_K9;|Lfe(KXt{i+ z+QN045?{(>HMU{+96bvPSW%BnPKSxA=L4lp#Xu{|24=;eZ>Og*sxQUk7QT;fT? zA{40Z`yu*FAQh;7o~i*uYgY50+)WPXgkpiZBjO~&;a_y5?P6!gD0aj$*C}PIId6!@ zJ@V7!`$JH+W?h3f<8k>oeR*N^+fvMpd@$R)epAc>8r0NNR4tn4HL_0A(N7D_%#N4G z+u(eNBSM)wLVrImEI)Kc86W{HJY11twzedX?LX(mZ8Lc(B4boyV?;B^T^~!Cm}#^% z=4T&C*0Ay>n*Mq)R!>8f``>a(hgbF%$%XCSx9xpluA!uefPh zsd4qw6)p?>tfow)9(;>fF7~Q@>_w55H4UJnia;e=ysjC=3I(6z^~LHgdf*CLbGyLq zE*G(c@;55)ymu>Zx{IInB1~TbmfPfe_t3v|kntFbg=eoof7RfS@uO=S%LPwX>#NF>p5X;Qfx|-Oi?ZKRTE>+=Yy?k)GYG(D0VKFbCO{sN| zg6J$~%*F zu7nGET*8y(yL=7)5UnbjNrnUwgWH1Z*%8*zF`AYYA4%m<%yd8b;_-ObYf94r1HqSb z4nPL)y$b{hwiT7j?>R>1_vSH0D(OBtYwJyk`r z{EQ85iIL`a&wK{<^c0^QxWVb0x(b4yT_&J21lhI~1)(yHv(sKYdFm7|mb7K%KUIBk zryzEI`_WK!7l(&{bu&t?4cfvGFI0#Wl384b~iq z!#s1RB5jR?7YeX$LN%x&GVBDQ?{xsjzmFnL7zHxa{tYk0tKX4(HXQD(>Ky+q!KUyN zBm*Y)00QGeGpUh%sN8;Yq0Hn$k>Bap6t02F(8lu(fC@iWaFsFvHLQZs_E5&_X0|eV z9-Mp{LT(pu;?iP;t*t~dz6Sbzjz48-Of0)oTupJuQD5UIJ=?6-?VKvSpNQ+H5gKov zMf=d%_DxN!N6w?#v%{{FXtna!?1^HoH%-_Hsbgm4Ut!TD*%f!)=f`LzqQA|exl?Lj z6c8ZI+#pAYyM=DWwL6jA=Zw)?I75Csdlyz$9TP29IB~pOj!)&ZJ|uvTTu{Rj{9FT6 zoU07y4^g@T*m{XPqTv(CKHOy%%RY=bALd1|aXtFdVvp}$(Af3P*^M%}V8C8v@bk|J zX52F0zl*dIBBNLihGHF_;*{R;B@Aq0ahuHlp$PV@W!b(_SIi`N>!^#FJ%0k$8s&Yi z(e*CltWmqV3m&<$thj4edNX=NY7jtq;ID)$v$hpZQogzjC&Z6K6AKT#(z(YP*pQc% zC@->vZzM#uiZjq1cNP0cs}(r~QoV!|i~djBr&18%=PyCF88;hQfmOF*V$^ma7RH_V zcZnap@GxQW+4~y5A-Ro)lDx?;Ckx4#959TQeS7tik!7&Dm)P*-^dCo2{VH@7r_D9E zU|>6<|HIxamqAY6!i7-d-eNMT>wq4SqvRY4k|!PZ#s~;**@Dl&lKdV)y0)dciEf(~ z+s1Yvop;}Y<-gy5dA-=&XecToLOIXj zih4&Ny%V?|?}MwABq8fvzJmyLo$)Dh@gtXGjv-NOY&XaoLEo_^4)1c7R(1O^Re{LM zmY9wul)w^u&$gtvS}Rqjz(MvchXHHrt7$!%Tf0meN%Q~Fu8N32nRwH|oIIMPy|Pqk z4dZ$<;j~gk^p`ZdZ&3a!Y_v@_f}ujapaTehs}%EkiP1KEi7T!7>@{gA7VG;p{?e$; zd*h8jTvX8Ck?%XcvTmo`l<7X%!_o@jgDaDAfe{PQnn% zMuEj%=pg*i?P@za(X!$TkeJ8bbU+}3X$R;_p1&xPme9q`)RKSp-qh|kjEL1LXhr1; z(K*GydpnP8ZWyo-aK^kqYAI}DXN%*d)bzoOy}+-fk)1d8r)BkPs?!(cSP-A{r{&9N zWpvqmXo(zSfe+InR*-L@V3L*js!m0tTtV%d`bj2@*e0O5@r_lw4{Mmzlk0p zGb*)$s>vFHJ{366rg4;7&^(A>qt;fpSc^^Qb&?_w(vrlNrHL3{@}R1G-v77-+wPBF z*Pt~|Jf^ricCUplFA=19!QTTT$`ROd{=B54(bW&tQCB-pNI)uQgY-qktNmvAZ4N2QJILQN;y> z@iAFnN=TP_I9GZw)_G%e*!^F-LRpZnU(lCwAn+~Azuc1@ZN%r9?=#JWhOVFTnU=d# z8VeIOV$6i$Eh#?n0=l<4iW6p@oHw&(@!_;hcPto4fs36yM%zzkam1@I_AoK;mN)`N zR&|wX10*t%YhH#MK=S}Jv0o8j;p5Pm>*Z;SPmV7`8_ai^P5)epPu3EB-714k?6Bhk zJmVqvWri*_JcW411`dK-!93ewX@%p93t8fP4Q#13$WvE)=DT{2nZ@>BPHUOj2`;I! z#P~@HFC`0dwU_S#%#v@MjjZd&hMqX68C_45*wXeJ=9vJjKO_RXJqHnA^kJ{7w1NWI zy+?oAIHT9Dhc)TTv;ti$@R!p??7lJ6<>{u+m>#YgIl=?F*V=Gd- za$En4wB~~&*Fs|$`^HRY=qzn1R~4`9ffeDh1rYp;U;vf8h&wO0B?h+s?+;qS3c~H% ztA5*QX169iqs4ko;WbLmPT584S_tOR<4Ym}T=Yf-1Xx+zO)QNrG!e^xBwIG)-v`gg zQan9ud!89RS*Q4dl$zMjvogft#NF2Yt&D7VEAA{3wgZ=-D|mVQ7=uXu{Z=Z`n9`LZ zr^Mn{qc9G`+6sMV4_|zKGQ<1H6ooiHI<$4eXa6=%5KKjdBqPiA$a{jKYElw4`orx! zdJWK77!DDzKy+!33x4EM_G~*N;`%9S+_dk0P*jZ{D}885Tqz?HejO6kzQje8@r9Rz zxjpMn#`^O^q&~Z3fjXLxlbK?=(l5o>?ldJN@I9W2rR4}dJr!uMj^^%gRCL#~yKJMm z+hPuwVe){{QDAY}lo1iuPR*lSeM@$r)vws27tGV0=R~n8-xO(h{K+k5(n6knb7_Qz z1a+q*SJlW4eBArYGBQykw6e{53c`X$(WI_JrW01o1$Tcnv*KHnDy+MYO6%0%jn^9} zb~3XH7Y7J$$vMAFW@a7rs_Kla!!Oir>7{Fwn%(Ro+C_X7g`PBm4QXg*t*t_8V-X_X zjtGV0Azmk zQgu*)h5u=xPOI?w34BfkVD0d}E_9I+{flfx4D8&MsW?<=N;M60hRanc$b{b5_^%nM zR0b-uXo5xHJK3xeig6}4U+WI_yBh|8O7$Rqw96fDW^E%C1-8phNUxHO_tmjiS$Okm zGh0|Uff5%-DM>irgdCo%Tm8%wM5kK83AdmSckG0SVh)eH7}*Ce?43v~;;w8pMKTxj zbdT&@9f+Ux63$2Tefx2c(f9-IHg;9BUjbZLwH-_+r0Z~@E)St}*MvL*79PDz(s-$E z+2f!aBdhE7pNVZwM9-FRhq>xmCfRL0O^U-`$4m!EdA|SQ?-ZeDrwg>E#D(AX!{@_{ zOib?*mADIERtOa+>Ncn5y!tZ*5bjw*f!S1 zH&!@65zIo)7D6ND&`6DBhx+ZH7EU?_onYmde~a<5!i8#wCtheB7t}KF4ldt@8%(TX zgwh(Tw6)Bu}GZJoSAjZ0BI_MANvy_6xD7C7E zpysgqg}4@MEEv>yFH%XD4`Q z6~UUg9R8-velJ$Jd9tP%i+HkulU_!%yU!+21Z#>KXxY#foy;uLufJx3FU35OmMD7U zFuu?a>GjO+gh8)@t`yb4D~VVO9a30x;Oi*KDZ)Ks6Qt=a1AF0!wL!Y$7&ea_QihCW zdlUl@ooaaUIs&;L2jg9qR*#0T)6MyDkBp_gr%?XlSGJ`+QAC71?cd$N+MUPzOp0n=N)pYj5|a)|ZusfNr?xQFs?P5Gs9Ag_ z(IsEAke8PdGK_vv)7w?SDMe+bda^g!b5OdXan2V?4^8TT>NMl<)Zx@2`N*sc$Tenx zQT2Ak_B?2$Z42>nqx6&mOrP-i;UD5clNU~}TV0fXV7>$T=~?gciX0YIV2B2i^0OdC zwK}4hkqxZ@>3_G!Xy_9k&8M7-DmdqBu04CuH55%J-Z{U(p_X>)u|gVW~-#&n4ec>xudOPrpBZ^xfXMoz&DV4 zD~daDiR=l1zNjVAY(4oiUvb{V_-Pk)PxE}O{RZ~+$W;V=uv0(r5<&oyWyMYn_Fc4^ zj~=tmWJUV2UlYnf*oOT$8K|ReD=$X_Ww%9Vtfmz^mY?^qRMti&LPD-qFgxA(7P(?5 z@b10`z+8B0R-v^gbLz*XO=AuXm4MR+ywS5kW@n1D?K2D`l7_r1sm9E7OX5an;k8hY z@MOfH&zqgrD0=`jf$4V*FtDBfrh9{F zl)qOklqNYo1C5xns-cmM*_p?}R?lYtSV@T*-CO&Oepc36E=S1Ajn%VxGp8n)am2Gb zhttvT*Wdh5%aH97wGlftLRWBs4-fGjwwqbO!tb!he6p7T8~=l`QJ>RjCT%+EO(}}> zc|8;x;rxcanY(usy^2eOG8XR>vIP%Yp48L@jy0#0Hb9hX`l+S7&jbF{2=bA+A}I$V zfcXlq1QWZyP0H4oaxH+G%d^(L1c4Qp?MGB53y+x$6}SJHlXpFhx`7DI{xT4TdNf2ShAVQ;mn|BG_=R#q42bVd+2uOToEMV!X-GD?}UbV-UjKh4HRdUp6a z*2%eZ?xtm(Hx;6_%vZ`8M}lUmKwn-fmr=At%49@65Z;t?W0M(skgO^i#~^x$82%-H z;x3Eo58I)I4oHI#e&k|TR4{!rtgU2;gB^F%WXj|STj}n_Qp+f}!mYdwhs1Dbe?7kdfBI>WZD5 zLZ1y;`ibHzcrldbierA;UIx!1UhZm_2cGP8lgqTk(ZdRYj=wQR=u%zP1TUqZd0Plq z;-JVThj{nF&w2^_a$igSD%+fL@N&Nyg2)~SR8O1L#nR|KrU_YWa)a6wGdb3sV}98S zvv}1^Sa*vO$*osXlG#6%qc1P$Z#-kd3wz%|)c5l%T+$BWFC}oTg&pno(7Q_s*{{rW(cOknq=J{2#N8(L zL2()}0gGf~h2s?)NjxO#XfejF%ZoAg zM(7+3bMAlHqZ-JCR&< zz^Jua+f5h_#j`Z^`q3(6Sm#57iDeLl%I?RGqQocegrPM~5oYW_5q*7@5)uLTreQ^Cjl@yWjkkL!4Poaa3tVij z&t?-VJrC>s9_qexpR+bj%dfsqyIz&9-yn+?{!X7oUqWZ-R7g>h!&QTVORrjgUg{eJ?}3?%X|=p3PNGORjlm+gN~Zw`{BwLXg?rJV zDP9k+ptyLf2eo$(TG6sw2mYjQwL;5u(8zTIYsPZ`&US7(MIh{-CBEx-u}84IE#zJK z>=X~~B9mEH1Iyznf$)Jop-B3r-M>=I`(IClecgaG6jjA zvwN3D8rh7r6DXly?fB9IKQ`dmRN9E*+2Je@=%;OhrLowXaCZBoXO=5@v=WntV8Re^ z;&QDx-<{)Dm}S)s8NZA8tR&p{aW-#+JHP!Y$=-2Y5FMIM(p10$v&&PdQl=lh+r1% z3KAN)Ww}E#qr=@p*}SzBN#Cft57lbh#*@9Po0c}BKviPYb2AI#gT8Ey!MPNVmb5O5 zP)j3rx+L)tp0BW`R)S-OG!N4MFmx2wFM~V zTA6kWI}h_0C4CHR1783}2J4GdeA4??1vT|0HL!q4iK8DeA*$$9aU zXhx?#2%fTGStBE>eGd97Sz_}w5Zcr7i&=ZdcZ_9jLfA?Zx7=eaEaD^%Uvh3{VCI{O zC@z7;otW*}k^G8ICI}Kh%qAxPiSsbIv0vhXQ`}b4d!Q}`0NfZ*!1`=W0^g_(?*iDakT*j^T{Hc)*2nvybm*FyP7hiaRk#H?7d^pNtuEv0`=`4bz+o z&M0eVG`e^V#vF;NZd5GK-QKqO&&(>!U#Rhy&|@k^Anar!E=3N+QgMV_b4_?gf z;-aeg+VX{LuR*vBYjc8E28$^%6UQ!Hk2AhJ_-vqJnSA~RHn`I%;;)@qqv7i!BU@d6 zzL`zkS(PGi>`;UzOZxG*<*}DGqTO+rq9Hacp2L{qDWIybtT{y>SgZ882114Nu42b& z@PtZGCvfA3@>`WLu|OY;of5d=pk4@-s}5_C~R` z|E0lZai(}PK`PL@Zv^ox4Q^A`aI}!g9!|8?kL92d^CW}z;>BCYJ835N#=0xg*WK!v zlO^}*c4AHu>J$0QPK6n^{i2@b%~VKZLz-3eIHt7P@$e}i9(M>Pc(2+}8t%0e4s;8T zz`ScyPFk%WtB%m>2Sf$)B&-v1)j48hB4pnBxZ4!uSb4=5K_e-5EIyWev-%G zZA$H{$DXyr@MS!Qc|m4a?~IpWx;9o3x6XY$M=Mxv4R052HgiP>fxf<*B7C+;Q=E3L z%6v5@X=It@qGubsf1n^EPC_P>Ai7Y9gXT8}(O_Hx#VpR)g2dDH*j9I?Av_D_pqT5| zE^A@kpLtMDb=me)5D^{}akpTJa2qDql4PAwWgODiZf|7YyB7fm_*pNp7mw3qwm0BK z*r3(mCg#W5-Jwc4f~LP;=ZL)_goW(S_pb^?24UDn;;$+gPzlTiGxPm5?g^1 z5+FSjY;MvsPGew{Jik2;J4>gh5#FrggSmS4G^mK4H7~y#2zWRm2`BDkd^mY##0zew zE8)!fF-`OmOQ<+L^l?iQk!wHd;h|Q{QrScheDxhfxi8b&%feosr~(?{3-oOKxcUY* zH*KIsvYUGxXb4kkiI3myz1I-q>se$!^U_TteWibdcPTlVK&58FnNBZ_B9u8si)R?YYHKkr;vR7||j8!`1nu^-oz zDNvwKxiJrhRB2WkS)W?Uw>q-gYppc|oCq{yym|c}LPcxb0^E0~4cm9Y@OAwoM%KpH z4ls5~UGVOkSB~O)aTU|a4QI5yKySSSsS-tCelyc~L!NxH6|YCaxg<}d$p!t;H!i6! z<^5m}+LBfMzXKHylqaxUTz%8loJd2X83ElxUra@}Qq~& z(nGZK13nd%zm7{%&ie+0P%5cW6IkwE`ASP<+dCd^OIxs(6uIK^L$$y;@ELOUg@!k= z)!jUWmbKGaMpbhI7Cv@LR7v4rLng%}Ji{@w_RM=!F-kY%o^)6capCFw00_9W7#gQy z$4VNoyFo!JmI}wNcR>j*uHM=)#LOmk#i&=f#}CGCr^OZU#tlrAd6jpIX`Hf%|FibVxn%`|k$j1$3%?3gPl@Kp`%oNJ|<%74(R8ka$X~ugKW+Rw=Q4*(Ea@!{zMGQ%h6+ zjxAN-9ByFuMyKwCwEZtw>vaP2qR-6@tPiVZdlq-d!U96k;*y~$>&H^VVdBbdMDi^;CLGHtFtVqSu+?8{RpLR*`wvc4V?U9HK zRYGB-sB17S(bZ?DflWMeUgMxbUksoUU*^JJ|JJiS50tU< z;&nx~IKoHKOl6d3>D6V`rl1{W_PuBb)c&GcvPK>oD7!!X)?w}U5N}#C`EZuH91e`K zu;4{tDEQSX;LH9)L$ERKk(m@Lk$h3Zl06`dX55UgL%V3dlw9bYTgMt$;pNB8ETkwT z^P{(H??|%IYvxyt(2lC_DS!2MCL%WT&TvFwbR9x7uH2nRlh^Ieeb_w3VrBRCxR;E* zYM_$5eiwc~4Y8t<97K%iMDaPT#~0Nsc#S8kv_A&@l=~>^x!x!J1}K+BvFqx7loOw4 zB)-C@XX#mfzUZH^%#{-Q=!EZ5!ihbvRcETwXO|MuuO!G;2S;cE|DHooG9K}GV)#O2BQoi+XIGi{2y=tPWG^ zw)_;v=h-U@dNI!yE;hKhry7>#;|kiI0fQBb9Yd4(uq5Kf%k1U@f{Xq>QvtRg7%+NXUs7>ldY1#Mz^=3gRx!B~g#Zdg~%C$q7S&9mwfO z=ySxIw#yL7`$<4BD>AEv?fMyuFy0+42DW{5dJ{Vuz6m>GW06}s@B-z&_lSvRLSs=n zh-I(F@blI1(=O`4_g4>Z0#~UH_Huj?B^pk8qP^}~n=zUZEF9l$FE@?N8Z$&@EL{P7G8wf6>f@Y4iYg2lp<$7qC zoQN^g6*ZC|;;wJ`;wDy?cV&^x^I|3iX`eBkelu1tNq&s|jAF;kti<3TOsSHqxvC-Q{-iYU^?m%74wjWxDf0N=D_9#G ztcp)#{To;b+#1by&hWEde#X|*v*Ami^-E}G+vyUy4yrSAdA<=DW9+N6DL>_1qN?7b zI1iik5H(7!XJ$9{-Ho?8`!n*@gdV zvf{Tl`@z>j$A|XyWS8Aipuxb8g&liO8{3LcoUrAZOKV+8L#|S-&$u+~QLGvm$_y{v zBK0q$9^nVz%)&=KS?u+)8I)69*m(`}yh+LyM3w-I-m;jCLnWR)&r(~@I{rmOO|f%f zeV5smP$svEjT=B)vDlpny!YjlXy!N>^|z>KWz!Oh?$ z=wE+2QDVbDII`^-{g%E}k&)gF%R?cHO3Zcv4|Em`1)sZh(=+##kfk=hXhr*EJ7*X) z$!(olS=Le}6Q|kC8t3fornQw_T*UsxE?|SZ*9rbA+GD?l%f$~^5N+5as?@UVL^%r^ zQHrl(@Uvbrb4`&=r7lDpZ+$GJxMpd#v&r67B!n4?V$DfIr31*F2Zx^3| z%=MZN{^q-mHL~K}ADRhk>4Gup3Ah5cJ+-nTIlA6&6F*AS!d7@<&XcH!w0UMQ+`I)f%T(YX>}JPu~`%Z?NRx zyf#$)Xkw>_iVjpb=+-akiP4AeW6$qj>mM4y3BJlpQIECD`2ouZoetl5&zp*nHRItH z*u!-=u4h+fJ)}qnPHSmnh_maVYLC{W?ka3*dlHdW_@0BcAvmzOd-$y`7>b)|VS!;l zFEqy=bB{E$Qzi^3($eX9yk0AN`Q#*uMI5Ts%JFMm)*`cler59{`r^I+j5ibFg`Ytw zdwkVOgFus4=o$BuR2XeXM}{@b;(pS`?>Hq zz6ap^nMM&Zkrc%1j%|nfAs9nZ%@jV$xT@@ z_MQgdl*|n*gsyIejjq6)E1hF7@; zojI2`NG@)fGZ#Nf4DSC=#-?AP2DUEmKE#hbrXaO90OnC?bgo+|LlGtMHBv&T$D=n} zF$x5IW6UQ#A}jQmjq&BY1!gG}4h)H;S3@7hZXTVkRED$rq*6=F72Z&q2)OQZ9r$^; z==}N(d`jRTT73l@-j265M#H$}&PQQS>%@X0ikf$%L2OPyH$g^HvKp*}^&-Raj*z8Qh*fsnZEIDIfgl?!4zVy}ve48UomDSA7_;wnB^l$5~r{rzk=T zsG4Ya>-Ql+=8&=*Gyn)6!z9*D&`lNaV0Q3FdTfLPGQSANbX100^TV^3hKbGAE z-{BLzG*lgwE8D z797{~eS*>u9X8k)0&3=b72T}-!`-xD%Z*3l$V%&y`yi6yF|0&l+o%~FLDr2J`D?0u zx6|+s3dy9xC)mxixomW6`kY`%>cCjz+7_imwyPEd(VhjB@`$Ijs=Yj+^OdX_9WXMq z`!=1HoprPleR%J0dl0zNHf7#Vnz-N zRz=XXJ^7-%iq9{b&~_2VGGTZ2)3Vk@dMay2a(jBRY>SS;Iw7?uhKa5$HV#wa2IlKV z89$tirn}FjzQn?c?m@5{9N4&$UHf6TPOSPRg_1&8-YqX}zx~6SvF>JsK zRN^A%0QpRJD9FN+8!baww+q}qMbY+@-T6f$BucnV=DrUzHd|P~p;=OC;N{(}z<7gA zrqo1hE@}||e7a-o;m{#10%Yx?HDV7_j@9}!H;uqz`ziE%j zP!_AGpA^lq9ZY?{$YF`W>nX@1_bhrg`}a=z?C_}=6UKvy=#z5|l#SpsD=1vo^FLsM z+{uqJF3zu&97LwcVrIkM-~)@wiM3xZmlG6U;e`F3Y;gIJ6oK?p7st~}R3n{o!|E#c z9smbzKyT-I8kuW2g<(@BpUoeyamsp4qv+4K8G@F4F-ikI+)`<0F@^~&*CK4HPLZq| zd*8%;piL}(QU~BmJ$2zYw*ZrL4}9bM75G^%Un)VNwq#Q)?b*y%+@2vdSKQtDv0Bg4 ze*0>+W-R0zMiS&l^1Wkh?|Q7&Fgz%qxNC7*t?pc!TUbsBLjGO#w;IwpyTuyMBb18< zeS~}vco$f>*aHGlfp1W794LdM1;cFT4$wF%+KnCQ7>R!j!Gc0x> zeaT07OE$^ZgQB{6v?vAX5vG_|N0jS`*Ub-0GImo0r8nMuo=Ih>b>)?K=lpE#0sHDx zh6bNqW=nD}Az7ly`(I;TKmi6xHH{#HCTH(k`mTcG@`ND9z|Q$|^8r z@`h;kws#lolHFZOu?SSNs?V`89^_)Xdwc)C4iCNs;kB0yxc6kPF zQUxW|H?qGcklHyrWXm~?;%oYYYqwNCpgofy+Dnq#UFVyv$-J+I^SDRCs!q%cwz}O` z*LgM5Mru7`TdE%J`Ea=TN~FS@eBbrQW;XF4DrkQuIsmOl3d)ToF-D9~t+JzjEuoyQ z6ivsEqLPHf-LJ8EDO?L(J`3}haTu1Fyu?%eBg)!`EJ~X`{DGmMMC)hTix2a`F3-~o ze+(?asiuas@cTN^_9VXzenH3BYb94}2*hwxb*+x(TG`Fm@dVT58+C#eE}Z~x{Aatc zOL4?qvjW!Td!oGsS+|pSutKZ2eCj{-9hn=7tt%(zn4m1YOlw|i>wAi2abrxbx^NDM zpY`(2tc8+ zdlY;cdIFz>o3~f3QRosg`#bd_PzAYw5I0J{d>I3>)BepA{mbAk{QCDV5sTq=kz=qa`qRT*i|1?6kBhVlr`I&c&c)hBwy;b-VBy;hA&C%h<3g6v3Oe}u(<7+#kYCJ&lYp6@ zZu|LMjFAmlVKg$=4-m1%S>2w)Z&R)W$uzZ~XNVZA(4Ceh1FhDb8;kHUt>m*+ctN1Y z&w5$WY{`+ky|yc;N2kTbRR*Yg@v|BW5j9kknT=>3$U9U^d z{mpFUU~;87*i+&z)}nEKdRC=Ke}`tF$!8rxv|Re%~on5-=@-`xm4tP zpb~*DxstNUlXMoA+sz;N!s2n^7VN?-Iqb{`gi#5^8?@tDCcRcF?HqA+ih<=W>0n}C z`detRa5fpy3x9T}{PmodT9%(lEs^fvcG86n=_$|FT)qI@aSyo@3qTaQF*So$?64^n z6#%W8u^K&^0fCGR$}^6AOQ2khj6t!n(TXZ(^9ygv%ZN)}M%MM+9@;m8_dmBKg?Oau zix<7gXd#tJ-1r}FY~gA4*u)}cmo!^*Pp`b9-HE#0n2$bWXV+Iib)U>>gaM|tAw(^? zGu1*%A7F_rqM6thWLvrwUOK$^VNSt$)hmZ30Ubfe>lKwXRTJ%c9-1F60MX~!y>1W|0v&|wroFRnCcA7!F+hh@4!-&d`^f$nEtkk5A##NU+5~9M(y}H#RDh zCu40|7}>0D&ft_Q+0x}v=NVLvHNNYhy~_@67%^otwTQlkky^wz3lFBOi4~-TOOpb+ zj7JD?F{SE)5K~N6u!O1~ z&oSKqgB(3pUJ~Tjy*o5%jeTbN2uxc#yv z)p#}2Ykpv$k?rJu4y(TuHLxK5)qb8`1xKP(g%71<^8ej!;Di3Y92K-K zaJ|c7%1g#?em3GL%)$pa(aOYH(qNBy=4%{EW%+4ldm3P7pZq-shJw35DydxaiRN-b{l-DWZd#}br6%x|-pF?@IEXYO9#s1)MbLR|ek0qv2liJZ zqrpbY^tM4-1RAuK6$tocbFB}QwNGIQ(UceC8#6PPe~QZR!%@<>=SDoi@X@gIc&t{5sol9xuShnP{UBW390Wo3bX;AR}gt15fo*5_J^!iB&4k0ymCuuQ;f z+PU1yD1-TQf3!y7%?03gxNebwiFKpomLn)IHO*|i9T6l zdm!cN0ACtOkh>GdW1-_yOwTTC9zh#hXURpmA9w}sC8F5b8Wm~Hy>_65toZoCGxXO5 zcs@HqbdfZ|)(oVW@AHkc+bhS}iUAPIn@to%$deGe8Qa5KEu{lqUVFabVbv^(68thJ zR9R1pj=A-~Y6UZg8&YGefi*~m_IEiS6Y&Tn`Nb|Qnh0&?kzRSVc7|w?+o9lG%T*Ro zq8izm%gW52vIkOuM8EPzq*5(GmxotPSvehY*qt2kh02qSg1r0)%pKlAWRh5hErlbw zOy({MG3x4qorq6Uth$9{ND!R}fx!)Y-tsN5>q7Js#Q7!H_xfg1tl4c`VQin^{ucG!`W9nYbAXU)rBn77giB?XX(bhqphA?P;X5(e2-AC= z2NZb(6>o@VjSeETqw0b&aUfobggaLQ(!;=8`=KTn1TDK=V5ho#VwS+G3arGYKxHoR zaP;Eh!h5?+#=buexoI-ow5t1CXh!|3%A6whYsC=_vTWb4VYEbv4c~EePpal=h~HE* zE2~ZzWjf7;hVN)L+DnRLYDoEebm=UTT;q_k58dL6*J#?;dW~#PNxq$p%1q1kfP&aD zDWWnA?+&=_YR#K8b*HE*KiP|<5j@KZ<}LsSXPJz-QXS2{1gIR6;xxFV#rX|v#gE%q zeyK;|)jZymqKBTEV!k@^lY!MghBzHbr53_0Ks^wr-eY0(5R#lH-^VwcyBy9hr2}N*ib|xIi`KuJ2FHfoC zRWNVUo0Tv;?0K(@5f>(%qx@a}uO3=s@Ei+i&QY`4)7BMBvM&!XT)!%}pe}1(yE{c- z*Bzbttg&mMvbiB%RL5%j46KDi2ZS>gV;b;Be#~A}F6m`nX zl6WmMukxm?A<#cH%)xOqzk8vqYjF!}dn&JjMLkJnUhUU#=1bK=$d1&uh9kV3?}Nr3 zu3M5Br@vy%k;!J&yV;U)TPQCXY6Y0BaNpHEb;cLk(t>?^UTAD2K5>^gpfsc^=T7Lw ztsN0TCH)m(c0FOT!ioKv1xppByC^1>5B`Px-kL4p1zT)2r)Z89TEvmsS~( z@$J%AOiwQ=(PvX~an%MlYPjQ_Dxq+O_AXMYuz<_=aR~z{wd}`=(4_d1#W@#mT5N{# z&6HQb9KKY~sx8@wJ2ecAXEtRb?U2@FX6N{-O;(|dw-5agb){>aV6$)TG+RM3{HbUn zz`Ep;$guM^4nIdh#4!+w{PXLa)d0+D0ENthgXlhqE)1X0hKXJ2$vb`KPon&Zfjep2 zRwL`u4a;1~_${simdW=eAc&;hVx;dr47W< zeq0+M%dS@EkH|vv5NvFHC<0FI#dj{@v^$J1DF*(|@v~lf=UYbMLU=@soH-m2Zou-+ zYz0~1j(sp$;!m~>II(ppghlzx%`%84hw!r&KJphDmkp>STrQVOCXy82Ofk9G<6QZu zix9IT=CZvVo1^{w#v*dx=xG$6I7=;59sUKi4_rk2o*kTay6ItHKW^zL-EF%jP%Qol z)%8|88OiBVx2*I_IVG6%H9=eE_kez;))Kzq08UT@uXlTt1JyRaD*;Cx2I+e8jC*F% z2K`g8b35yqlZ_!^gTWg@VBTN6DP`Qcb#6I~J!?-W0Uzy4Eyha>O8bZQ*!UxTG(yh# z+S$-^xD&4jV|sUo7JFCcOlVmCOkDoBar3y;B%3)82ixXtPs_q^n}U44Z`;62*?v~f z43i*BU3dz`jQ>JE0~=IxE&5ujVoP8)CV5c=;+c@h%0}TuU9FWtYh61>=&Wt|kilKM zPdQG|s%7O=)d~&wIE0YrBk=aExwx`$b=F@e55N66;1+JKO>?c(EHyON@|BFD4cpCUG8WKt(e?hM#r!K-vl~E# zP1{Lz6cui&vP6p6SC7-5VT2{0@w;$`^koY*pdUx+XIB?{M94=1I869$DbV`%a0slNbaymH%`1j}?ki*F- nW5x_Q((#NQC>1ztNDu!W{R8@s=-+#|U8yu)E>47vY!3eeW+bc8 literal 0 HcmV?d00001 From ee300dad5cf26e44afe07e8503325e6c9adcc044 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Fri, 17 May 2024 15:12:27 +0200 Subject: [PATCH 05/36] Adding back tanL to prompt MVA and adding check for extended tracking when setting track quality score --- .../plugins/L1FPGATrackProducer.cc | 13 +++++++++++-- L1Trigger/TrackTrigger/interface/L1TrackQuality.h | 2 +- L1Trigger/TrackTrigger/src/L1TrackQuality.cc | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index af24bd542548e..fd15dc6f0ca31 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -750,8 +750,17 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe aTrack.setTrackWordBits(); if (trackQuality_) { - trackQualityModel_->setL1TrackQuality(aTrack); - trackQualityDispModel_->setL1TrackQuality(aTrack); + double qualityScore = trackQualityModel_->getL1TrackQuality(aTrack); + aTrack.settrkMVA1(qualityScore); + if(extended_){ + qualityScore = trackQualityDispModel_->getL1TrackQuality(aTrack); + if(trackQualityDispModel_->getQualityAlgorithm()==L1TrackQuality::QualityAlgorithm::GBDT){ + aTrack.settrkMVA2(qualityScore); + } + else{ + aTrack.settrkMVA1(qualityScore); + } + } } // hph::HitPatternHelper hph(setupHPH_, tmp_hit, tmp_tanL, tmp_z0); diff --git a/L1Trigger/TrackTrigger/interface/L1TrackQuality.h b/L1Trigger/TrackTrigger/interface/L1TrackQuality.h index 1107ed3e74fbb..b74f53ee7b392 100644 --- a/L1Trigger/TrackTrigger/interface/L1TrackQuality.h +++ b/L1Trigger/TrackTrigger/interface/L1TrackQuality.h @@ -40,7 +40,7 @@ class L1TrackQuality { std::vector const& featureNames); // Passed by reference a track without MVA filled, method fills the track's MVA field - void setL1TrackQuality(TTTrack& aTrack); + double getL1TrackQuality(TTTrack& aTrack); // Function to run the BDT in isolation allowing a feature vector in the ap_fixed datatype to be passed // and a single output to be returned which is then used to fill the bits in the Track Word for situations // where a TTTrack datatype is unavailable to be passed to the track quality diff --git a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc index 2a1bb5cadc079..d43ac48a2d268 100644 --- a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc +++ b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc @@ -60,6 +60,7 @@ std::vector L1TrackQuality::featureTransform(TTTrack L1TrackQuality::featureTransform(TTTrack Date: Sun, 19 May 2024 14:02:43 +0200 Subject: [PATCH 06/36] Adding option to run displaced vertexing in ntupler maker, reverting changes to ntuple maker params, removing BDT requirement on displaced track quality --- .../test/L1TrackObjectNtupleMaker.cc | 84 ++++++++++--------- .../test/L1TrackObjectNtupleMaker_cfg.py | 12 ++- .../plugins/L1FPGATrackProducer.cc | 15 +--- 3 files changed, 54 insertions(+), 57 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index a74d1054ff32b..32ef5c5d2e796 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -144,6 +144,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer= minNStub (this is mostly for tracklet purposes) bool SaveTrackJets; bool SaveTrackSums; + bool runDispVert; edm::InputTag L1TrackInputTag; // L1 track collection edm::InputTag MCTruthTrackInputTag; // MC truth collection @@ -621,7 +622,8 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon SaveTrackJets = iConfig.getParameter("SaveTrackJets"); SaveTrackSums = iConfig.getParameter("SaveTrackSums"); - + runDispVert = iConfig.getParameter("runDispVert"); + L1StubInputTag = iConfig.getParameter("L1StubInputTag"); MCTruthClusterInputTag = iConfig.getParameter("MCTruthClusterInputTag"); MCTruthStubInputTag = iConfig.getParameter("MCTruthStubInputTag"); @@ -770,7 +772,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenJetToken_ = consumes>(GenJetInputTag); GenParticleToken_ = consumes>(GenParticleInputTag); SimVertexToken_ = consumes>(SimVertexInputTag); - DispVertToken_ = consumes>(DisplacedVertexInputTag); + if(runDispVert) DispVertToken_ = consumes>(DisplacedVertexInputTag); L1VertexToken_ = consumes(RecoVertexInputTag); L1VertexEmuToken_ = consumes(RecoVertexEmuInputTag); tTopoToken_ = esConsumes(edm::ESInputTag("", "")); @@ -1577,25 +1579,25 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("gen_mother_pdgid", &m_gen_mother_pdgid); eventTree->Branch("gen_z0", &m_gen_z0); - - eventTree->Branch("dv_d_T", &m_dv_d_T); - eventTree->Branch("dv_R_T", &m_dv_R_T); - eventTree->Branch("dv_cos_T", &m_dv_cos_T); - eventTree->Branch("dv_x", &m_dv_x); - eventTree->Branch("dv_y", &m_dv_y); - eventTree->Branch("dv_z", &m_dv_z); - eventTree->Branch("dv_openingAngle", &m_dv_openingAngle); - eventTree->Branch("dv_parentPt", &m_dv_parentPt); - eventTree->Branch("dv_firstIndexTrk", &m_dv_firstIndexTrk); - eventTree->Branch("dv_secondIndexTrk", &m_dv_secondIndexTrk); - eventTree->Branch("dv_firstIndexPt", &m_dv_firstIndexPt); - eventTree->Branch("dv_secondIndexPt", &m_dv_secondIndexPt); - eventTree->Branch("dv_inTraj", &m_dv_inTraj); - eventTree->Branch("dv_del_Z", &m_dv_del_Z); - eventTree->Branch("dv_delIndexPt", &m_dv_delIndexPt); - eventTree->Branch("dv_isReal", &m_dv_isReal); - eventTree->Branch("dv_score", &m_dv_score); - + if(runDispVert){ + eventTree->Branch("dv_d_T", &m_dv_d_T); + eventTree->Branch("dv_R_T", &m_dv_R_T); + eventTree->Branch("dv_cos_T", &m_dv_cos_T); + eventTree->Branch("dv_x", &m_dv_x); + eventTree->Branch("dv_y", &m_dv_y); + eventTree->Branch("dv_z", &m_dv_z); + eventTree->Branch("dv_openingAngle", &m_dv_openingAngle); + eventTree->Branch("dv_parentPt", &m_dv_parentPt); + eventTree->Branch("dv_firstIndexTrk", &m_dv_firstIndexTrk); + eventTree->Branch("dv_secondIndexTrk", &m_dv_secondIndexTrk); + eventTree->Branch("dv_firstIndexPt", &m_dv_firstIndexPt); + eventTree->Branch("dv_secondIndexPt", &m_dv_secondIndexPt); + eventTree->Branch("dv_inTraj", &m_dv_inTraj); + eventTree->Branch("dv_del_Z", &m_dv_del_Z); + eventTree->Branch("dv_delIndexPt", &m_dv_delIndexPt); + eventTree->Branch("dv_isReal", &m_dv_isReal); + eventTree->Branch("dv_score", &m_dv_score); + } if (SaveTrackJets) { eventTree->Branch("genjet_eta", &m_genjet_eta); eventTree->Branch("genjet_p", &m_genjet_p); @@ -1848,25 +1850,25 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_gen_mother_pdgid->clear(); m_gen_z0->clear(); - - m_dv_d_T->clear(); - m_dv_R_T->clear(); - m_dv_cos_T->clear(); - m_dv_x->clear(); - m_dv_y->clear(); - m_dv_z->clear(); - m_dv_openingAngle->clear(); - m_dv_parentPt->clear(); - m_dv_firstIndexTrk->clear(); - m_dv_secondIndexTrk->clear(); - m_dv_firstIndexPt->clear(); - m_dv_secondIndexPt->clear(); - m_dv_inTraj->clear(); - m_dv_del_Z->clear(); - m_dv_delIndexPt->clear(); - m_dv_isReal->clear(); - m_dv_score->clear(); - + if(runDispVert){ + m_dv_d_T->clear(); + m_dv_R_T->clear(); + m_dv_cos_T->clear(); + m_dv_x->clear(); + m_dv_y->clear(); + m_dv_z->clear(); + m_dv_openingAngle->clear(); + m_dv_parentPt->clear(); + m_dv_firstIndexTrk->clear(); + m_dv_secondIndexTrk->clear(); + m_dv_firstIndexPt->clear(); + m_dv_secondIndexPt->clear(); + m_dv_inTraj->clear(); + m_dv_del_Z->clear(); + m_dv_delIndexPt->clear(); + m_dv_isReal->clear(); + m_dv_score->clear(); + } if (Displaced == "Prompt" || Displaced == "Both") { m_matchtrk_pt->clear(); m_matchtrk_eta->clear(); @@ -2057,7 +2059,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even //Displaced vertices edm::Handle> DispVertHandle; - iEvent.getByToken(DispVertToken_, DispVertHandle); + if(runDispVert) iEvent.getByToken(DispVertToken_, DispVertHandle); //Vertex edm::Handle L1PrimaryVertexHandle; diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py index c9822c72955bc..aa80c33be81ee 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py @@ -20,6 +20,7 @@ runVtxNN = True +runDispVert = False ############################################################ # import standard configurations ############################################################ @@ -42,7 +43,6 @@ # input and output ############################################################ - process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(20)) readFiles = cms.untracked.vstring( @@ -170,7 +170,7 @@ process.pTkMET = cms.Path(process.l1tTrackerEtMissExtended) process.pTkMHT = cms.Path(process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMissExtended) - process.DispVert = cms.Path(process.DisplacedVertexProducer) + if(runDispVert): process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Displaced'# # HYBRID: extended tracking @@ -192,7 +192,7 @@ process.pTkMHT = cms.Path(process.l1tTrackerHTMiss*process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMiss*process.l1tTrackerEmuHTMissExtended) process.pL1TrackTripletEmulator = cms.Path(process.l1tTrackTripletEmulation) - process.DispVert = cms.Path(process.DisplacedVertexProducer) + if(runDispVert): process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Both' @@ -284,6 +284,7 @@ RecoVertexInputTag=cms.InputTag("l1tVertexFinder", "L1Vertices"), RecoVertexEmuInputTag=cms.InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation"), DisplacedVertexInputTag = cms.InputTag("DisplacedVertexProducer","dispVertices"), + runDispVert = cms.bool(runDispVert) ) process.ntuple = cms.Path(process.L1TrackNtuple) @@ -304,4 +305,7 @@ # use this if cluster/stub associators not available # process.schedule = cms.Schedule(process.TTClusterStubTruth,process.TTTracksEmuWithTruth,process.ntuple) -process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator, process.DispVert, process.ntuple) +if(runDispVert): + process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator, process.DispVert, process.ntuple) +else: + process.schedule = cms.Schedule(process.TTClusterStub, process.TTClusterStubTruth, process.dtc, process.TTTracksEmuWithTruth, process.pL1GTTInput, process.pL1TrackSelection, process.pPV, process.pPVemu,process.pL1TrackVertexAssociation, process.pL1TrackJets, process.pL1TrackJetsEmu,process.pL1TrackFastJets, process.pTkMET, process.pTkMETEmu, process.pTkMHT, process.pTkMHTEmulator,process.pL1TrackTripletEmulator,process.ntuple) diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index fd15dc6f0ca31..620ba2fe8242f 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -750,19 +750,10 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe aTrack.setTrackWordBits(); if (trackQuality_) { - double qualityScore = trackQualityModel_->getL1TrackQuality(aTrack); - aTrack.settrkMVA1(qualityScore); - if(extended_){ - qualityScore = trackQualityDispModel_->getL1TrackQuality(aTrack); - if(trackQualityDispModel_->getQualityAlgorithm()==L1TrackQuality::QualityAlgorithm::GBDT){ - aTrack.settrkMVA2(qualityScore); - } - else{ - aTrack.settrkMVA1(qualityScore); - } - } + aTrack.settrkMVA1(trackQualityModel_->getL1TrackQuality(aTrack)); + if(extended_) + aTrack.settrkMVA2(trackQualityDispModel_->getL1TrackQuality(aTrack)); } - // hph::HitPatternHelper hph(setupHPH_, tmp_hit, tmp_tanL, tmp_z0); // if (trackQuality_) { // trackQualityModel_->setBonusFeatures(hph.bonusFeatures()); From 89bdbb0aaa3ed01b3b7018bd5165babdcf0a740d Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 28 May 2024 13:21:47 +0200 Subject: [PATCH 07/36] Removing Displaced Vertexing Analyzer macro --- .../test/Analyzer_DisplacedMuon.C | 3526 ----------------- 1 file changed, 3526 deletions(-) delete mode 100644 L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C deleted file mode 100644 index 24ac4179b9974..0000000000000 --- a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C +++ /dev/null @@ -1,3526 +0,0 @@ - -// // ---------------------------------------------------------------------------------------------------------------- -// // Feasibility study of using L1 Tracks to identify Displaced Vertex -// // -// // By Bharadwaj Harikrishnan, May 2021 -// // Edited by Ryan McCarthy, Sept 2021 -// // ---------------------------------------------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include "TFile.h" -#include "TTree.h" -#include "TChain.h" -#include "TBranch.h" -#include "TLeaf.h" -#include -#include "TLegend.h" -#include "TH1.h" -#include "TH2.h" -#include "TF1.h" -#include "TGraph.h" -#include "TMath.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -bool detailedPlots = false; -float d0_res = 0.02152; //cm - -void SetPlotStyle(); -void mySmallText(Double_t x, Double_t y, Color_t color, char *text); -void removeFlows(TH1F* h); -void removeFlows(TH2F* h); - -class Track_Parameters -{ -public: - float pt; - float d0; - float dxy = -99999; - float z0; - float eta; - float phi; - float charge; - float rho; - int index; - int pdgid = -99999; - float vx; - float vy; - float vz; - Track_Parameters* tp; - float x0; - float y0; - int nstubs; - float chi2rphi; - float chi2rz; - float bendchi2; - float MVA1; - float MVA2; - - float dist_calc(float x_dv, float y_dv, float x, float y){ - dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); - return dxy; - } - float x(float phi_T=0){ - return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); - } - float y(float phi_T=0){ - return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); - } - float z(float phi_T=0){ - float theta = 2 * TMath::ATan(TMath::Exp(-eta)); - return (z0 + rho*phi_T/TMath::Tan(theta)); - } - float deltaPhi_T(Double_t phi1, Double_t phi2) - { - Double_t dPhi = phi1 - phi2; - if (dPhi >= TMath::Pi()) - dPhi -= 2. * TMath::Pi(); - if (dPhi <= -TMath::Pi()) - dPhi += 2. * TMath::Pi(); - return dPhi; - } - float phi_T(float x, float y){ - float num = x - (d0 + charge * rho) * TMath::Sin(phi); - float den = y + (d0 + charge * rho) * TMath::Cos(phi); - return ((phi-TMath::ATan2(num,-den))/charge); - } - float z(float x, float y){ - float t = std::sinh(eta); - float r = TMath::Sqrt(pow(x,2)+pow(y,2)); - return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math - } - Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0, float MVA2_in=0) - { - pt = pt_in; - d0 = d0_in; - z0 = z0_in; - eta = eta_in; - phi = phi_in; - if(charge_in > 0){ - charge = 1; - } - else if (charge_in < 0){ - charge = -1; - } - else{ - charge = 0; - } - index = index_in; - pdgid = pdgid_in; - vx = vx_in; - vy = vy_in; - vz = vz_in; - tp = tp_in; - rho = fabs(1/charge_in); - x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); - y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); - nstubs = nstubs_in; - chi2rphi = chi2rphi_in; - chi2rz = chi2rz_in; - bendchi2 = bendchi2_in; - MVA1 = MVA1_in; - MVA2 = MVA2_in; - } - Track_Parameters(){}; - ~Track_Parameters(){}; -}; - -constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) -{ - return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) -{ - return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) -{ - return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); -} - -std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) -{ - std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; - std::valarray p_vec = {-r_vec[1],r_vec[0]}; - if(a.charge>0){ - p_vec *= -1; - } - p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); - p_vec *= a.pt; - return p_vec; -} - -class Vertex_Parameters -{ -public: - Double_t x_dv; - Double_t y_dv; - Double_t z_dv; - float score; - Track_Parameters a; - Track_Parameters b; - int inTraj; - bool matched = false; - std::vector tracks = {}; - float p_mag; - float p2_mag; - float openingAngle; - float R_T; - float cos_T; - float alpha_T; - float d_T; - float chi2rphidofSum; - float chi2rzdofSum; - float bendchi2Sum; - float MVA1Sum; - float MVA2Sum; - int numStubsSum; - float delta_z; - float delta_eta; - float phi; - Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): - a(a_in), - b(b_in) - { - x_dv = x_dv_in; - y_dv = y_dv_in; - z_dv = z_dv_in; - score = score_in; - tracks.push_back(a_in); - tracks.push_back(b_in); - inTraj = inTraj_in; - std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); - std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); - std::valarray p_tot = p_trk_1+p_trk_2; - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); - R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); - cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); - float chi2rphidof_1 = a_in.chi2rphi; - float chi2rzdof_1 = a_in.chi2rz; - float bendchi2_1 = a_in.bendchi2; - float chi2rphidof_2 = b_in.chi2rphi; - float chi2rzdof_2 = b_in.chi2rz; - float bendchi2_2 = b_in.bendchi2; - chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; - chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; - bendchi2Sum = bendchi2_1 + bendchi2_2; - MVA1Sum = a_in.MVA1 + b_in.MVA1; - MVA2Sum = a_in.MVA2 + b_in.MVA2; - numStubsSum = a_in.nstubs + b_in.nstubs; - p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); - delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); - delta_eta = fabs(a_in.eta-b_in.eta); - } - - void addTrack(Track_Parameters trk){ - tracks.push_back(trk); - std::valarray p_tot = {0,0}; - for(auto track : tracks){ - p_tot+= calcPVec(track,x_dv,y_dv); - } - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); - float chi2rphidof = trk.chi2rphi; - float chi2rzdof = trk.chi2rz; - float bendchi2 = trk.bendchi2; - chi2rphidofSum+= chi2rphidof; - chi2rzdofSum+= chi2rzdof; - bendchi2Sum+= bendchi2; - numStubsSum+= trk.nstubs; - p2_mag+= pow(trk.pt,2); - MVA1Sum+= trk.MVA1; - MVA2Sum+= trk.MVA2; - } - - Vertex_Parameters(){}; - ~Vertex_Parameters(){}; -}; - -constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) -{ - return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); -} - -class Cut { -public: - virtual ~Cut() = default; - virtual TString getCutName() const = 0; - virtual TString getCutLabel() const = 0; - virtual float getParam(int it) const = 0; - virtual float getCutValue() const = 0; - virtual float getDoPlot() const = 0; -}; - -template -class TypedCut : public Cut -{ -public: - TString cutName; - TString cutLabel; - std::vector** params; - T cutValue; - bool doPlot; - - TypedCut(TString cutName_in, TString cutLabel_in, std::vector** params_in, T cutValue_in, bool doPlot_in): cutName(cutName_in), cutLabel(cutLabel_in), params(params_in), cutValue(cutValue_in), doPlot(doPlot_in) {} - TypedCut(){}; - ~TypedCut(){}; - TString getCutName() const - { - return cutName; - } - TString getCutLabel() const - { - return cutLabel; - } - float getParam(int it) const - { - T param = (*params)->at(it); - return float(param); - } - float getCutValue() const - { - return float(cutValue); - } - float getDoPlot() const - { - return doPlot; - } -}; - -class Plot { -public: - virtual ~Plot() = default; - virtual TString getVarName() const = 0; - virtual TString getUnit() const = 0; - virtual float getParam(int it) const = 0; - virtual int getNumBins() const = 0; - virtual float getMinBin() const = 0; - virtual float getMaxBin() const = 0; - virtual std::vector getBins() const = 0; - virtual bool getBool() const = 0; -}; - -template -class TypedPlot : public Plot -{ -public: - TString varName; - TString unit; - std::vector** params; - int numBins; - float minBin; - float maxBin; - std::vector bins; - bool variableBins; - - TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, float minBin_in, float maxBin_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), minBin(minBin_in), maxBin(maxBin_in){ - variableBins = false; - } - TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, std::vector bins_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), bins(bins_in) { - variableBins = true; - } - TypedPlot(){}; - ~TypedPlot(){}; - TString getVarName() const - { - return varName; - } - TString getUnit() const - { - return unit; - } - float getParam(int it) const - { - T param = (*params)->at(it); - return float(param); - } - int getNumBins() const - { - return numBins; - } - float getMinBin() const - { - return minBin; - } - float getMaxBin() const - { - return maxBin; - } - std::vector getBins() const - { - return bins; - } - bool getBool() const - { - return variableBins; - } -}; - -void displayProgress(long current, long max) -{ - using std::cerr; - if (max < 2500) - return; - if (current % (max / 2500) != 0 && current < max - 1) - return; - - int width = 52; // Hope the terminal is at least that wide. - int barWidth = width - 2; - cerr << "\x1B[2K"; // Clear line - cerr << "\x1B[2000D"; // Cursor left - cerr << '['; - for (int i = 0; i < barWidth; ++i) - { - if (i < barWidth * current / max) - { - cerr << '='; - } - else - { - cerr << ' '; - } - } - cerr << ']'; - cerr << " " << Form("%8d/%8d (%5.2f%%)", (int)current, (int)max, 100.0 * current / max); - cerr.flush(); -} - -template -void raiseMax(T *hist1, S *hist2=nullptr, T *hist3=nullptr, T *hist4=nullptr) -{ - Double_t max = hist1->GetBinContent(hist1->GetMaximumBin()); - if(hist2!=nullptr){ - Double_t max2 = hist2->GetBinContent(hist2->GetMaximumBin()); - if(max2>max) max = max2; - } - if(hist3!=nullptr){ - Double_t max3 = hist3->GetBinContent(hist3->GetMaximumBin()); - if(max3>max) max = max3; - } - if(hist4!=nullptr){ - Double_t max4 = hist4->GetBinContent(hist4->GetMaximumBin()); - if(max4>max) max = max4; - } - if(max>0.0){ - hist1->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist2!=nullptr) hist2->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist3!=nullptr) hist3->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist4!=nullptr) hist4->GetYaxis()->SetRangeUser(0.,1.2*max); - } -} - -void raiseMaxStack(TH1F* hist, THStack* stack) -{ - Double_t max = hist->GetMaximum(); - Double_t max2 = stack->GetMaximum(); - if(max2>max) max = max2; - - if(max>0.0){ - hist->GetYaxis()->SetRangeUser(0.,1.2*max); - stack->GetYaxis()->SetRangeUser(0.,1.2*max); - } - -} - -template -void drawSame(T *hist1, S *hist2, T *hist3=nullptr, T *hist4=nullptr) -{ - if(hist1->GetBinContent(hist1->GetMaximumBin())!=0.0){ - hist1->Draw("HIST"); - hist2->Draw("HIST,SAME"); - if(hist3!=nullptr) hist3->Draw("HIST,SAME"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - else if(hist2->GetBinContent(hist2->GetMaximumBin())!=0.0){ - hist2->Draw("HIST"); - if(hist3!=nullptr) hist3->Draw("HIST,SAME"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - else if(hist3!=nullptr){ - if(hist3->GetBinContent(hist3->GetMaximumBin())!=0.0){ - hist3->Draw("HIST"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - } - else if(hist4!=nullptr){ - if(hist4->GetBinContent(hist4->GetMaximumBin())!=0.0){ - hist4->Draw("HIST"); - } - } - else{ - hist1->Draw("HIST"); - } -} - -void drawSameStack(TH1F* hist, THStack* stack) -{ - if(hist->GetMaximum()!=0.0){ - hist->Draw("HIST"); - stack->Draw("HIST,SAME"); - } - else if(stack->GetMaximum()!=0.0){ - stack->Draw("HIST"); - } - else{ - hist->Draw("HIST"); - } -} - -bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } -bool CompareZ0Track(Track_Parameters a, Track_Parameters b) { return a.z0 > b.z0; } -bool CompareD0Track(Track_Parameters a, Track_Parameters b) { return a.d0 > b.d0; } -bool ComparePtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.a.pt > v2.a.pt; } -bool CompareDelzVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.delta_z > v2.delta_z; } -bool CompareDtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.d_T > v2.d_T; } -bool CompareChi2rphidofSumVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.chi2rphidofSum > v2.chi2rphidofSum; } -bool CompareRtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.R_T > v2.R_T; } - -template -std::vector linspace(T start, T end, int num){ - std::vector out; - T delta = (end - start) / (num-1); - for(int i=0; i logspace(const float &a, const float &b, const int &k) -{ - std::vector bins; - float delta = (log10(b) - log10(a)) / k; - for (int i = 0; i < (k+1); i++) - { - bins.push_back(pow(10, log10(a) + (i * delta))); - } - //std::cout<<"logspace bins: "; - for(uint j=0; j TMath::Pi()) - dPhi -= 2. * TMath::Pi(); - if (dPhi < -TMath::Pi()) - dPhi += 2. * TMath::Pi(); - return dPhi; -} - -Double_t deltaR(Double_t eta1, Double_t phi1, Double_t eta2, Double_t phi2) -{ - Double_t dEta, dPhi; - dEta = eta1 - eta2; - dPhi = deltaPhi(phi1, phi2); - return sqrt(dEta * dEta + dPhi * dPhi); -} - -Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points - return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); -} - -Double_t dist_Vertex(Double_t x_vtx, Double_t y_vtx, Track_Parameters a){ // Distance between track and displaced vertex - float R = dist(x_vtx,y_vtx,a.x0,a.y0); - return (fabs(R-(a.rho))); -} - -Double_t dist_TPs(Track_Parameters* a, Track_Parameters* b); // Closest distance between 2 tracks -Double_t dist_TPs(Track_Parameters a, Track_Parameters b); // Closest distance between 2 tracks -bool CompareDeltaXY(Vertex_Parameters v1, Vertex_Parameters v2) {return dist_TPs(v1.a,v1.b) < dist_TPs(v2.a,v2.b); } - -Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx); -// Identify the displaced vertex (x_vtx,y_vtx,z_vtx) and return the status -//-2 = Circles with same center. No Intersection -//-1 = Circles don't Intersect. A point on the line connecting the centers is chosen. -// 0 = Only 1 Intersection not satisfying Z cutoff -// 1 = Only 1 Intersection satisfying Z cutoff -// 2 = Only 1 Intersection detectable dist(x,y)<20 -// 3 = 2 Intersections - -void Analyzer_DisplacedMuon(TString inputFilePath, - TString outputDir, - float TP_maxD0 = 1.9, - float TP_minD0 = 0.0004196) -{ - TChain *tree = new TChain("L1TrackNtuple/eventTree"); - tree->Add(inputFilePath); - //TChain *vertTree = new TChain("L1TrackNtuple/dispVertTree"); - //vertTree->Add(inputFilePath); - std::string inputFileString(inputFilePath.Data()); - inputFileString = inputFileString.substr(inputFileString.find_last_of("/")+1); - TString inputFile(inputFileString); - std::cout<<"input: "<SetBatch(); - gErrorIgnoreLevel = kWarning; - - SetPlotStyle(); - float barrelEta = 0.95; - - //Vertex parameter vectors - vector *trkVert_firstIndexTrk; - vector *trkVert_secondIndexTrk; - vector *trkVert_firstIndexPt; - vector *trkVert_secondIndexPt; - vector *trkVert_inTraj; - vector *trkVert_d_T; - vector *trkVert_R_T; - vector *trkVert_cos_T; - vector *trkVert_del_Z; - vector *trkVert_x; - vector *trkVert_y; - vector *trkVert_z; - vector *trkVert_openingAngle; - vector *trkVert_parentPt; - vector *trkVert_delIndexPt; - vector *trkVert_isReal; - vector *trkVert_score; - - vector *tpVert_d_T; - vector *tpVert_R_T; - vector *tpVert_cos_T; - vector *tpVert_x; - vector *tpVert_y; - vector *tpVert_z; - vector *tpVert_openingAngle; - vector *tpVert_parentPt; - - vector *trk_pt; - vector *trk_eta; - vector *trk_phi; - vector *trk_d0; - vector *trk_rinv; - vector *trk_z0; - vector *trk_chi2; - vector *trk_chi2rphi; - vector *trk_chi2rz; - vector *trk_bendchi2; - vector *trk_nstub; - vector *trk_lhits; - vector *trk_dhits; - vector *trk_seed; - vector *trk_hitpattern; - vector *trk_phiSector; - vector *trk_genuine; - vector *trk_loose; - vector *trk_unknown; - vector *trk_combinatoric; - vector *trkExt_fake; - vector *trk_MVA1; - vector *trk_MVA2; - vector *trk_matchtp_pdgid; - vector *trk_matchtp_isHToMu; - vector *trk_matchtp_isHToB; - vector *trk_matchtp_pt; - vector *trk_matchtp_eta; - vector *trk_matchtp_phi; - vector *trk_matchtp_z0; - vector *trk_matchtp_dxy; - vector *trk_matchtp_d0; - vector *trk_matchtp_x; - vector *trk_matchtp_y; - vector *trk_matchtp_z; - vector *tp_pt; - vector *tp_eta; - vector *tp_phi; - vector *tp_dxy; - vector *tp_d0; - vector *tp_z0; - vector *tp_x; - vector *tp_y; - vector *tp_z; - vector *tp_d0_prod; - vector *tp_z0_prod; - vector *tp_pdgid; - vector *tp_isHToMu; - vector *tp_isHToB; - vector *tp_nmatch; - vector *tp_nstub; - vector *tp_eventid; - vector *tp_charge; - vector *matchtrk_pt; - vector *matchtrk_eta; - vector *matchtrk_phi; - vector *matchtrk_z0; - vector *matchtrk_d0; - vector *matchtrk_rinv; - vector *matchtrk_chi2; - vector *matchtrk_chi2rphi; - vector *matchtrk_chi2rz; - vector *matchtrk_bendchi2; - vector *matchtrk_MVA1; - vector *matchtrk_MVA2; - vector *matchtrk_nstub; - vector *matchtrk_lhits; - vector *matchtrk_dhits; - vector *matchtrk_seed; - vector *matchtrk_hitpattern; - - TBranch *b_trkVert_firstIndexTrk; - TBranch *b_trkVert_secondIndexTrk; - TBranch *b_trkVert_firstIndexPt; - TBranch *b_trkVert_secondIndexPt; - TBranch *b_trkVert_inTraj; - TBranch *b_trkVert_d_T; - TBranch *b_trkVert_R_T; - TBranch *b_trkVert_cos_T; - TBranch *b_trkVert_del_Z; - TBranch *b_trkVert_x; - TBranch *b_trkVert_y; - TBranch *b_trkVert_z; - TBranch *b_trkVert_openingAngle; - TBranch *b_trkVert_parentPt; - TBranch *b_trkVert_delIndexPt; - TBranch *b_trkVert_isReal; - TBranch *b_trkVert_score; - TBranch *b_trk_pt; - TBranch *b_trk_eta; - TBranch *b_trk_phi; - TBranch *b_trk_d0; - TBranch *b_trk_rinv; - TBranch *b_trk_z0; - TBranch *b_trk_chi2; - TBranch *b_trk_chi2rphi; - TBranch *b_trk_chi2rz; - TBranch *b_trk_bendchi2; - TBranch *b_trk_nstub; - TBranch *b_trk_lhits; - TBranch *b_trk_dhits; - TBranch *b_trk_seed; - TBranch *b_trk_hitpattern; - TBranch *b_trk_phiSector; - TBranch *b_trk_genuine; - TBranch *b_trk_loose; - TBranch *b_trk_unknown; - TBranch *b_trk_combinatoric; - TBranch *b_trkExt_fake; - TBranch *b_trk_MVA1; - TBranch *b_trk_MVA2; - TBranch *b_trk_matchtp_pdgid; - TBranch *b_trk_matchtp_isHToMu; - TBranch *b_trk_matchtp_isHToB; - TBranch *b_trk_matchtp_pt; - TBranch *b_trk_matchtp_eta; - TBranch *b_trk_matchtp_phi; - TBranch *b_trk_matchtp_z0; - TBranch *b_trk_matchtp_dxy; - TBranch *b_trk_matchtp_d0; - TBranch *b_trk_matchtp_x; - TBranch *b_trk_matchtp_y; - TBranch *b_trk_matchtp_z; - TBranch *b_tp_pt; - TBranch *b_tp_eta; - TBranch *b_tp_phi; - TBranch *b_tp_dxy; - TBranch *b_tp_d0; - TBranch *b_tp_z0; - TBranch *b_tp_x; - TBranch *b_tp_y; - TBranch *b_tp_z; - TBranch *b_tp_d0_prod; - TBranch *b_tp_z0_prod; - TBranch *b_tp_pdgid; - TBranch *b_tp_isHToMu; - TBranch *b_tp_isHToB; - TBranch *b_tp_nmatch; - TBranch *b_tp_nstub; - TBranch *b_tp_eventid; - TBranch *b_tp_charge; - TBranch *b_matchtrk_pt; - TBranch *b_matchtrk_eta; - TBranch *b_matchtrk_phi; - TBranch *b_matchtrk_z0; - TBranch *b_matchtrk_d0; - TBranch *b_matchtrk_rinv; - TBranch *b_matchtrk_chi2; - TBranch *b_matchtrk_chi2rphi; - TBranch *b_matchtrk_chi2rz; - TBranch *b_matchtrk_bendchi2; - TBranch *b_matchtrk_MVA1; - TBranch *b_matchtrk_MVA2; - TBranch *b_matchtrk_nstub; - TBranch *b_matchtrk_lhits; - TBranch *b_matchtrk_dhits; - TBranch *b_matchtrk_seed; - TBranch *b_matchtrk_hitpattern; - - trkVert_firstIndexTrk = 0; - trkVert_secondIndexTrk = 0; - trkVert_firstIndexPt = 0; - trkVert_secondIndexPt = 0; - trkVert_inTraj = 0; - trkVert_d_T = 0; - trkVert_R_T = 0; - trkVert_cos_T = 0; - trkVert_del_Z = 0; - trkVert_x = 0; - trkVert_y = 0; - trkVert_z = 0; - trkVert_openingAngle = 0; - trkVert_parentPt = 0; - trkVert_delIndexPt = 0; - trkVert_isReal = 0; - trkVert_score = 0; - trk_pt = 0; - trk_eta = 0; - trk_phi = 0; - trk_d0 = 0; - trk_rinv = 0; - trk_z0 = 0; - trk_chi2 = 0; - trk_chi2rphi = 0; - trk_chi2rz = 0; - trk_bendchi2 = 0; - trk_nstub = 0; - trk_lhits = 0; - trk_dhits = 0; - trk_seed = 0; - trk_hitpattern = 0; - trk_phiSector = 0; - trk_genuine = 0; - trk_loose = 0; - trk_unknown = 0; - trk_combinatoric = 0; - trkExt_fake = 0; - trk_MVA1 = 0; - trk_MVA2 = 0; - trk_matchtp_pdgid = 0; - trk_matchtp_isHToMu = 0; - trk_matchtp_isHToB = 0; - trk_matchtp_pt = 0; - trk_matchtp_eta = 0; - trk_matchtp_phi = 0; - trk_matchtp_z0 = 0; - trk_matchtp_dxy = 0; - trk_matchtp_d0 = 0; - trk_matchtp_x = 0; - trk_matchtp_y = 0; - trk_matchtp_z = 0; - tp_pt = 0; - tp_eta = 0; - tp_phi = 0; - tp_dxy = 0; - tp_d0 = 0; - tp_z0 = 0; - tp_x = 0; - tp_y = 0; - tp_z = 0; - tp_d0_prod = 0; - tp_z0_prod = 0; - tp_pdgid = 0; - tp_isHToMu = 0; - tp_isHToB = 0; - tp_nmatch = 0; - tp_nstub = 0; - tp_eventid = 0; - tp_charge = 0; - matchtrk_pt = 0; - matchtrk_eta = 0; - matchtrk_phi = 0; - matchtrk_z0 = 0; - matchtrk_d0 = 0; - matchtrk_rinv = 0; - matchtrk_chi2 = 0; - matchtrk_chi2rphi = 0; - matchtrk_chi2rz = 0; - matchtrk_bendchi2 = 0; - matchtrk_MVA1 = 0; - matchtrk_MVA2 = 0; - matchtrk_nstub = 0; - matchtrk_lhits = 0; - matchtrk_dhits = 0; - matchtrk_seed = 0; - matchtrk_hitpattern = 0; - - //tree->SetMakeClass(1); - tree->SetBranchAddress("dv_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); - tree->SetBranchAddress("dv_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); - tree->SetBranchAddress("dv_firstIndexPt", &trkVert_firstIndexPt, &b_trkVert_firstIndexPt); - tree->SetBranchAddress("dv_secondIndexPt", &trkVert_secondIndexPt, &b_trkVert_secondIndexPt); - tree->SetBranchAddress("dv_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); - tree->SetBranchAddress("dv_d_T", &trkVert_d_T, &b_trkVert_d_T); - tree->SetBranchAddress("dv_R_T", &trkVert_R_T, &b_trkVert_R_T); - tree->SetBranchAddress("dv_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); - tree->SetBranchAddress("dv_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); - tree->SetBranchAddress("dv_x", &trkVert_x, &b_trkVert_x); - tree->SetBranchAddress("dv_y", &trkVert_y, &b_trkVert_y); - tree->SetBranchAddress("dv_z", &trkVert_z, &b_trkVert_z); - tree->SetBranchAddress("dv_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); - tree->SetBranchAddress("dv_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); - tree->SetBranchAddress("dv_delIndexPt", &trkVert_delIndexPt, &b_trkVert_delIndexPt); - tree->SetBranchAddress("dv_isReal", &trkVert_isReal, &b_trkVert_isReal); - tree->SetBranchAddress("dv_score", &trkVert_score, &b_trkVert_score); - tree->SetBranchAddress("trkExt_pt", &trk_pt, &b_trk_pt); - tree->SetBranchAddress("trkExt_eta", &trk_eta, &b_trk_eta); - tree->SetBranchAddress("trkExt_phi", &trk_phi, &b_trk_phi); - tree->SetBranchAddress("trkExt_d0", &trk_d0, &b_trk_d0); - tree->SetBranchAddress("trkExt_rinv", &trk_rinv, &b_trk_rinv); - tree->SetBranchAddress("trkExt_z0", &trk_z0, &b_trk_z0); - tree->SetBranchAddress("trkExt_chi2", &trk_chi2, &b_trk_chi2); - tree->SetBranchAddress("trkExt_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); - tree->SetBranchAddress("trkExt_chi2rz", &trk_chi2rz, &b_trk_chi2rz); - tree->SetBranchAddress("trkExt_bendchi2", &trk_bendchi2, &b_trk_bendchi2); - tree->SetBranchAddress("trkExt_nstub", &trk_nstub, &b_trk_nstub); - tree->SetBranchAddress("trkExt_lhits", &trk_lhits, &b_trk_lhits); - tree->SetBranchAddress("trkExt_dhits", &trk_dhits, &b_trk_dhits); - tree->SetBranchAddress("trkExt_seed", &trk_seed, &b_trk_seed); - tree->SetBranchAddress("trkExt_hitpattern", &trk_hitpattern, &b_trk_hitpattern); - tree->SetBranchAddress("trkExt_phiSector", &trk_phiSector, &b_trk_phiSector); - tree->SetBranchAddress("trkExt_genuine", &trk_genuine, &b_trk_genuine); - tree->SetBranchAddress("trkExt_loose", &trk_loose, &b_trk_loose); - tree->SetBranchAddress("trkExt_unknown", &trk_unknown, &b_trk_unknown); - tree->SetBranchAddress("trkExt_combinatoric", &trk_combinatoric, &b_trk_combinatoric); - tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); - tree->SetBranchAddress("trkExt_MVA", &trk_MVA1, &b_trk_MVA1); - tree->SetBranchAddress("trkExt_MVA2", &trk_MVA2, &b_trk_MVA2); - tree->SetBranchAddress("trkExt_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid); - tree->SetBranchAddress("trkExt_matchtp_isHToMu", &trk_matchtp_isHToMu, &b_trk_matchtp_isHToMu); - tree->SetBranchAddress("trkExt_matchtp_isHToB", &trk_matchtp_isHToB, &b_trk_matchtp_isHToB); - tree->SetBranchAddress("trkExt_matchtp_pt", &trk_matchtp_pt, &b_trk_matchtp_pt); - tree->SetBranchAddress("trkExt_matchtp_eta", &trk_matchtp_eta, &b_trk_matchtp_eta); - tree->SetBranchAddress("trkExt_matchtp_phi", &trk_matchtp_phi, &b_trk_matchtp_phi); - tree->SetBranchAddress("trkExt_matchtp_z0", &trk_matchtp_z0, &b_trk_matchtp_z0); - tree->SetBranchAddress("trkExt_matchtp_dxy", &trk_matchtp_dxy, &b_trk_matchtp_dxy); - tree->SetBranchAddress("trkExt_matchtp_d0", &trk_matchtp_d0, &b_trk_matchtp_d0); - tree->SetBranchAddress("trkExt_matchtp_x", &trk_matchtp_x, &b_trk_matchtp_x); - tree->SetBranchAddress("trkExt_matchtp_y", &trk_matchtp_y, &b_trk_matchtp_y); - tree->SetBranchAddress("trkExt_matchtp_z", &trk_matchtp_z, &b_trk_matchtp_z); - tree->SetBranchAddress("tp_pt", &tp_pt, &b_tp_pt); - tree->SetBranchAddress("tp_eta", &tp_eta, &b_tp_eta); - tree->SetBranchAddress("tp_phi", &tp_phi, &b_tp_phi); - tree->SetBranchAddress("tp_dxy", &tp_dxy, &b_tp_dxy); - tree->SetBranchAddress("tp_d0", &tp_d0, &b_tp_d0); - tree->SetBranchAddress("tp_z0", &tp_z0, &b_tp_z0); - tree->SetBranchAddress("tp_x", &tp_x, &b_tp_x); - tree->SetBranchAddress("tp_y", &tp_y, &b_tp_y); - tree->SetBranchAddress("tp_z", &tp_z, &b_tp_z); - tree->SetBranchAddress("tp_d0_prod", &tp_d0_prod, &b_tp_d0_prod); - tree->SetBranchAddress("tp_z0_prod", &tp_z0_prod, &b_tp_z0_prod); - tree->SetBranchAddress("tp_pdgid", &tp_pdgid, &b_tp_pdgid); - tree->SetBranchAddress("tp_isHToMu", &tp_isHToMu, &b_tp_isHToMu); - tree->SetBranchAddress("tp_isHToB", &tp_isHToB, &b_tp_isHToB); - tree->SetBranchAddress("tp_nmatch", &tp_nmatch, &b_tp_nmatch); - tree->SetBranchAddress("tp_nstub", &tp_nstub, &b_tp_nstub); - tree->SetBranchAddress("tp_eventid", &tp_eventid, &b_tp_eventid); - tree->SetBranchAddress("tp_charge", &tp_charge, &b_tp_charge); - tree->SetBranchAddress("matchtrkExt_pt", &matchtrk_pt, &b_matchtrk_pt); - tree->SetBranchAddress("matchtrkExt_eta", &matchtrk_eta, &b_matchtrk_eta); - tree->SetBranchAddress("matchtrkExt_phi", &matchtrk_phi, &b_matchtrk_phi); - tree->SetBranchAddress("matchtrkExt_z0", &matchtrk_z0, &b_matchtrk_z0); - tree->SetBranchAddress("matchtrkExt_d0", &matchtrk_d0, &b_matchtrk_d0); - tree->SetBranchAddress("matchtrkExt_rinv", &matchtrk_rinv, &b_matchtrk_rinv); - tree->SetBranchAddress("matchtrkExt_chi2", &matchtrk_chi2, &b_matchtrk_chi2); - tree->SetBranchAddress("matchtrkExt_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); - tree->SetBranchAddress("matchtrkExt_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); - tree->SetBranchAddress("matchtrkExt_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); - tree->SetBranchAddress("matchtrkExt_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); - tree->SetBranchAddress("matchtrkExt_MVA2", &matchtrk_MVA2, &b_matchtrk_MVA2); - tree->SetBranchAddress("matchtrkExt_nstub", &matchtrk_nstub, &b_matchtrk_nstub); - tree->SetBranchAddress("matchtrkExt_lhits", &matchtrk_lhits, &b_matchtrk_lhits); - tree->SetBranchAddress("matchtrkExt_dhits", &matchtrk_dhits, &b_matchtrk_dhits); - tree->SetBranchAddress("matchtrkExt_seed", &matchtrk_seed, &b_matchtrk_seed); - tree->SetBranchAddress("matchtrkExt_hitpattern", &matchtrk_hitpattern, &b_matchtrk_hitpattern); - - //preselection cuts and plots definitions - // Cut assumptions: first cut is maxEta - std::vector> preselCuts; - std::unique_ptr> cut0(new TypedCut("maxEta","max #eta",&trk_eta,2.4,true)); - preselCuts.push_back(std::move(cut0)); - std::unique_ptr> cut1(new TypedCut("maxChi2rzdof","max #chi^{2}_{rz}",&trk_chi2rz,3.0,false)); - preselCuts.push_back(std::move(cut1)); - std::unique_ptr> cut3(new TypedCut("minMVA2","min MVA2",&trk_MVA2,0.2,false)); - preselCuts.push_back(std::move(cut3)); - std::unique_ptr> cut4(new TypedCut("minMVA1","min MVA1",&trk_MVA1,0.2,false)); - preselCuts.push_back(std::move(cut4)); - std::unique_ptr> cut5(new TypedCut("minMVA1_D","min MVA1 D",&trk_MVA1,0.5,false)); - preselCuts.push_back(std::move(cut5)); - std::unique_ptr> cut6(new TypedCut("minNumStub_overlap","Quality",&trk_nstub,5,true)); - preselCuts.push_back(std::move(cut6)); - std::unique_ptr> cut7(new TypedCut("minPt","min p_{T}",&trk_pt,3.0,true)); - preselCuts.push_back(std::move(cut7)); - std::unique_ptr> cut8(new TypedCut("minD0_barrel","min d_{0} Bar",&trk_d0,0.06,false)); - preselCuts.push_back(std::move(cut8)); - std::unique_ptr> cut9(new TypedCut("minD0_disk","min d_{0}",&trk_d0,0.08,true)); - preselCuts.push_back(std::move(cut9)); - - std::vector> preselCutsTP; - std::unique_ptr> tpCut0(new TypedCut("maxEta","max #eta",&tp_eta,2.4,true)); - preselCutsTP.push_back(std::move(tpCut0)); - std::unique_ptr> tpCut1(new TypedCut("minPt","min p_{T}",&tp_pt,3.0,true)); - preselCutsTP.push_back(std::move(tpCut1)); - std::unique_ptr> tpCut2(new TypedCut("minD0_barrel","min d_{0} Barrel",&tp_d0,0.06,true)); - preselCutsTP.push_back(std::move(tpCut2)); - std::unique_ptr> tpCut3(new TypedCut("minD0_disk","min d_{0} Disk",&tp_d0,0.08,true)); - preselCutsTP.push_back(std::move(tpCut3)); - - std::vector> varCutFlows; - std::unique_ptr> plot0(new TypedPlot("d0","cm",&trk_d0,20,logspace(0.01,10.0,20))); - varCutFlows.push_back(std::move(plot0)); - std::unique_ptr> plot1(new TypedPlot("pt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); - varCutFlows.push_back(std::move(plot1)); - std::unique_ptr> plot2(new TypedPlot("eta","",&trk_eta,50,-2.5,2.5)); - varCutFlows.push_back(std::move(plot2)); - std::unique_ptr> plot3(new TypedPlot("z0","cm",&trk_z0,100,-20.0,20.0)); - varCutFlows.push_back(std::move(plot3)); - std::unique_ptr> plot4(new TypedPlot("phi","",&trk_phi,100,-2*TMath::Pi(),2*TMath::Pi())); - varCutFlows.push_back(std::move(plot4)); - std::unique_ptr> plot6(new TypedPlot("MVA1","",&trk_MVA1,100,0.0,1.0)); - varCutFlows.push_back(std::move(plot6)); - std::unique_ptr> plot7(new TypedPlot("MVA2","",&trk_MVA2,100,0.0,1.0)); - varCutFlows.push_back(std::move(plot7)); - std::unique_ptr> plot8(new TypedPlot("chi2rphidof","",&trk_chi2rphi,100,0.0,6.0)); - varCutFlows.push_back(std::move(plot8)); - std::unique_ptr> plot9(new TypedPlot("chi2rzdof","",&trk_chi2rz,100,0.0,6.0)); - varCutFlows.push_back(std::move(plot9)); - std::unique_ptr> plot10(new TypedPlot("bendchi2","",&trk_bendchi2,100,0.0,10.0)); - varCutFlows.push_back(std::move(plot10)); - - std::vector> varCutFlowsTP; - std::unique_ptr> tpPlot0(new TypedPlot("d0","cm",&tp_d0,20,logspace(0.01,10.0,20))); - varCutFlowsTP.push_back(std::move(tpPlot0)); - std::unique_ptr> tpPlot1(new TypedPlot("pt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); - varCutFlowsTP.push_back(std::move(tpPlot1)); - std::unique_ptr> tpPlot2(new TypedPlot("eta","",&tp_eta,50,-2.5,2.5)); - varCutFlowsTP.push_back(std::move(tpPlot2)); - std::unique_ptr> tpPlot3(new TypedPlot("z0","cm",&tp_z0,100,-20.0,20.0)); - varCutFlowsTP.push_back(std::move(tpPlot3)); - std::unique_ptr> tpPlot4(new TypedPlot("phi","",&tp_phi,100,-2*TMath::Pi(),2*TMath::Pi())); - varCutFlowsTP.push_back(std::move(tpPlot4)); - std::unique_ptr> tpPlot6(new TypedPlot("dxy","cm",&tp_dxy,50,-2.0,2.0)); - varCutFlowsTP.push_back(std::move(tpPlot6)); - - std::vector,std::unique_ptr > > varCutFlows2D; - std::unique_ptr> plot0X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); - std::unique_ptr> plot0Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); - varCutFlows2D.push_back({std::move(plot0X),std::move(plot0Y)}); - std::unique_ptr> plot1X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - std::unique_ptr> plot1Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); - varCutFlows2D.push_back({std::move(plot1X),std::move(plot1Y)}); - std::unique_ptr> plot2X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); - std::unique_ptr> plot2Y(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - varCutFlows2D.push_back({std::move(plot2X),std::move(plot2Y)}); - std::unique_ptr> plot3X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - std::unique_ptr> plot3Y(new TypedPlot("nstub","",&trk_nstub,7,0.0,7.0)); - varCutFlows2D.push_back({std::move(plot3X),std::move(plot3Y)}); - - std::vector,std::unique_ptr > > varCutFlowsTP2D; - std::unique_ptr> tpPlot0X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); - std::unique_ptr> tpPlot0Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot0X),std::move(tpPlot0Y)}); - std::unique_ptr> tpPlot1X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - std::unique_ptr> tpPlot1Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot1X),std::move(tpPlot1Y)}); - std::unique_ptr> tpPlot2X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); - std::unique_ptr> tpPlot2Y(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - varCutFlowsTP2D.push_back({std::move(tpPlot2X),std::move(tpPlot2Y)}); - std::unique_ptr> tpPlot3X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - std::unique_ptr> tpPlot3Y(new TypedPlot("nstub","",&tp_nstub,7,0.0,7.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot3X),std::move(tpPlot3Y)}); - - //std::vector trackType = {"primary","np","fake","PU","notHiggs"}; - std::vector trackType = {"primary","np"}; - //std::vector tpType = {"primary","np","PU","notHiggs","match",""}; - std::vector tpType = {"primary","np","match",""}; - std::vector plotModifiers = {"","_H","_L","_P","_D","_barrel","_disk"}; - if(!detailedPlots) plotModifiers = {""}; - uint preselCutsSize = 0; - for(uint i=0; igetDoPlot()) preselCutsSize++; - } - TH1F* preselCutFlows[varCutFlows.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; - TH2F* preselCutFlows2D[varCutFlows2D.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; - TH1F* preselCutFlowsTP[varCutFlowsTP.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; - TH2F* preselCutFlowsTP2D[varCutFlowsTP2D.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; - //std::map numPartCutFlows[trackType.size()][preselCuts.size()]; - //std::map numPartCutFlowsTP[tpType.size()][preselCutsTP.size()]; - - for(uint it=0; itgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; - //std::cout<<"name: "<getBool()){ - //std::cout<<"setting bins"<getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events "; - std::vector bins = varCutFlows[it]->getBins(); - TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),bins.data()); - preselCutFlows[it][i][i_plot][j] = hist; - TString varString = varCutFlows[it]->getVarName(); - if(varString.Contains("d0") || varString.Contains("pt")){ - //std::cout<<"labels: "<GetNbinsX()+1); ibin++){ - binValues+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinContent(ibin)) + ", "; - binWidths+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinWidth(ibin)) + ", "; - - } - binValues+="]"; - binWidths+="]"; - - //std::cout<<"binValues: "<getMaxBin() - varCutFlows[it]->getMinBin()) / varCutFlows[it]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Track "+varCutFlows[it]->getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlows[it]->getUnit(); - TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),varCutFlows[it]->getMinBin(),varCutFlows[it]->getMaxBin()); - preselCutFlows[it][i][i_plot][j] = hist; - } - } - } - } - } - - for(uint it=0; itgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetVarName()+"_vs_"+varCutFlows2D[it].first->getVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; - TString labels = name+"; Track "+varCutFlows2D[it].first->getVarName()+" ("+varCutFlows2D[it].first->getUnit()+") ; Track "+varCutFlows2D[it].second->getVarName()+" ("+varCutFlows2D[it].second->getUnit()+")"; - TH2F* hist = new TH2F(name,labels,varCutFlows2D[it].first->getNumBins(),varCutFlows2D[it].first->getMinBin(),varCutFlows2D[it].first->getMaxBin(),varCutFlows2D[it].second->getNumBins(),varCutFlows2D[it].second->getMinBin(),varCutFlows2D[it].second->getMaxBin()); - preselCutFlows2D[it][i][i_plot][j] = hist; - } - } - } - } - - for(uint it=0; itgetVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; - if(varCutFlowsTP[it]->getMaxBin()==varCutFlowsTP[it]->getMinBin()){ - TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events "; - std::vector bins = varCutFlowsTP[it]->getBins(); - TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),bins.data()); - preselCutFlowsTP[it][i][jt][j] = hist; - } - else{ - float binWidth = (varCutFlowsTP[it]->getMaxBin() - varCutFlowsTP[it]->getMinBin()) / varCutFlowsTP[it]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlowsTP[it]->getUnit(); - TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),varCutFlowsTP[it]->getMinBin(),varCutFlowsTP[it]->getMaxBin()); - preselCutFlowsTP[it][i][jt][j] = hist; - } - } - } - } - } - - for(uint it=0; itgetVarName()+"_vs_"+varCutFlowsTP2D[it].first->getVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; - TString labels = name+"; Tp "+varCutFlowsTP2D[it].first->getVarName()+" ("+varCutFlowsTP2D[it].first->getUnit()+") ; Tp "+varCutFlowsTP2D[it].second->getVarName()+" ("+varCutFlowsTP2D[it].second->getUnit()+")"; - TH2F* hist = new TH2F(name,labels,varCutFlowsTP2D[it].first->getNumBins(),varCutFlowsTP2D[it].first->getMinBin(),varCutFlowsTP2D[it].first->getMaxBin(),varCutFlowsTP2D[it].second->getNumBins(),varCutFlowsTP2D[it].second->getMinBin(),varCutFlowsTP2D[it].second->getMaxBin()); - preselCutFlowsTP2D[it][i][jt][j] = hist; - } - } - } - } - - //vertex cuts and plots definitions - std::vector> vertCuts; - std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,true)); - vertCuts.push_back(std::move(vertCut0)); - std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,true)); - vertCuts.push_back(std::move(vertCut1)); - std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,true)); - vertCuts.push_back(std::move(vertCut2)); - std::unique_ptr> vertCut3(new TypedCut("min_trk_sumCharge","min #Sigma q",&trk_rinv,0,true)); - vertCuts.push_back(std::move(vertCut3)); -#if 0 - std::unique_ptr> vertCut4(new TypedCut("max_trk_sumBendChi2","max #Sigma #chi^{2}_{bend}",&trk_bendchi2,14.0,true)); - vertCuts.push_back(std::move(vertCut4)); - std::unique_ptr> vertCut5(new TypedCut("minCos_T","min cos_{T}",&trkVert_cos_T,0.96,true)); - vertCuts.push_back(std::move(vertCut5)); - std::unique_ptr> vertCut6(new TypedCut("max_trk_deltaEta","max #Delta #eta",&trk_eta,2.0,true)); - vertCuts.push_back(std::move(vertCut6)); - std::unique_ptr> vertCut7(new TypedCut("max_delZ","max #Delta z",&trkVert_del_Z,0.5,true)); - vertCuts.push_back(std::move(vertCut7)); - std::unique_ptr> vertCut8(new TypedCut("minR_T","min R_{T}",&trkVert_R_T,0.25,true)); - vertCuts.push_back(std::move(vertCut8)); - std::unique_ptr> vertCut9(new TypedCut("min_trk_highPt","min lead p_{T}",&trk_pt,13.0,true)); - vertCuts.push_back(std::move(vertCut9)); - std::unique_ptr> vertCut10(new TypedCut("max_trk_sumChi2rphidof","max #Sigma #chi^{2}_{r#phi}",&trk_chi2rphi,6.0,true)); - vertCuts.push_back(std::move(vertCut10)); - std::unique_ptr> vertCut11(new TypedCut("min_trk_sumNumStubs","min #Sigma n_{stub}",&trk_nstub,11,true)); - vertCuts.push_back(std::move(vertCut11)); - std::unique_ptr> vertCut12(new TypedCut("min_trk_highD0","min d_{0}",&trk_d0,0.3,true)); - vertCuts.push_back(std::move(vertCut12)); -#endif - std::unique_ptr> vertCut4(new TypedCut("min_score0p8","score>0.8",&trkVert_score,0.8,true)); - vertCuts.push_back(std::move(vertCut4)); - std::unique_ptr> vertCut5(new TypedCut("min_score0p9","score>0.9",&trkVert_score,0.9,true)); - vertCuts.push_back(std::move(vertCut5)); - std::unique_ptr> vertCut6(new TypedCut("min_score0p95","score>0.95",&trkVert_score,0.95,true)); - vertCuts.push_back(std::move(vertCut6)); - std::unique_ptr> vertCut7(new TypedCut("min_score0p96","score>0.96",&trkVert_score,0.96,true)); - vertCuts.push_back(std::move(vertCut7)); - std::unique_ptr> vertCut8(new TypedCut("min_score0p97","score>0.97",&trkVert_score,0.97,true)); - vertCuts.push_back(std::move(vertCut8)); - std::unique_ptr> vertCut9(new TypedCut("min_score0p98","score>0.98",&trkVert_score,0.98,true)); - vertCuts.push_back(std::move(vertCut9)); - std::unique_ptr> vertCut10(new TypedCut("min_score0p99","score>0.99",&trkVert_score,0.99,true)); - vertCuts.push_back(std::move(vertCut10)); - std::unique_ptr> vertCut11(new TypedCut("min_score0p992","score>0.992",&trkVert_score,0.992,true)); - vertCuts.push_back(std::move(vertCut11)); - std::unique_ptr> vertCut12(new TypedCut("min_score0p994","score>0.994",&trkVert_score,0.994,true)); - vertCuts.push_back(std::move(vertCut12)); - std::unique_ptr> vertCut13(new TypedCut("min_score0p996","score>0.996",&trkVert_score,0.996,true)); - vertCuts.push_back(std::move(vertCut13)); - std::unique_ptr> vertCut14(new TypedCut("min_score0p998","score>0.998",&trkVert_score,0.998,true)); - vertCuts.push_back(std::move(vertCut14)); - - std::vector> vertCutFlows; - std::unique_ptr> vertPlot0(new TypedPlot("x","cm",&trkVert_x,100,-5.0,5.0)); - vertCutFlows.push_back(std::move(vertPlot0)); - std::unique_ptr> vertPlot1(new TypedPlot("y","cm",&trkVert_y,100,-5.0,5.0)); - vertCutFlows.push_back(std::move(vertPlot1)); - std::unique_ptr> vertPlot2(new TypedPlot("z","cm",&trkVert_z,100,-50.0,50.0)); - vertCutFlows.push_back(std::move(vertPlot2)); - std::unique_ptr> vertPlot3(new TypedPlot("firstIndexPt","",&trkVert_firstIndexPt,50,0.0,50.0)); - vertCutFlows.push_back(std::move(vertPlot3)); - std::unique_ptr> vertPlot4(new TypedPlot("secondIndexPt","",&trkVert_secondIndexPt,50,0.0,50.0)); - vertCutFlows.push_back(std::move(vertPlot4)); - std::unique_ptr> vertPlot5(new TypedPlot("cos_T","",&trkVert_cos_T,40,-1.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot5)); - std::unique_ptr> vertPlot6(new TypedPlot("openingAngle","",&trkVert_openingAngle,40,-3.14,3.14)); - vertCutFlows.push_back(std::move(vertPlot6)); - std::unique_ptr> vertPlot7(new TypedPlot("parentPt","GeV",&trkVert_parentPt,200,0.0,200.0)); - vertCutFlows.push_back(std::move(vertPlot7)); - std::unique_ptr> vertPlot8(new TypedPlot("d_T","cm",&trkVert_d_T,40,0.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot8)); - std::unique_ptr> vertPlot9(new TypedPlot("R_T","cm",&trkVert_R_T,20,logspace(0.1,20.0,20))); - vertCutFlows.push_back(std::move(vertPlot9)); - std::unique_ptr> vertPlot10(new TypedPlot("highPt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); - vertCutFlows.push_back(std::move(vertPlot10)); - std::unique_ptr> vertPlot11(new TypedPlot("lowPt","GeV",&trk_pt,100,0.0,100.0)); - vertCutFlows.push_back(std::move(vertPlot11)); - std::unique_ptr> vertPlot12(new TypedPlot("highD0","cm",&trk_d0,80,-2.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot12)); - std::unique_ptr> vertPlot13(new TypedPlot("lowD0","cm",&trk_d0,80,-2.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot13)); - std::unique_ptr> vertPlot14(new TypedPlot("delZ","cm",&trkVert_del_Z,100,0.0,1.5)); - vertCutFlows.push_back(std::move(vertPlot14)); - std::unique_ptr> vertPlot15(new TypedPlot("deltaZ0","cm",&trk_z0,100,0.0,10.0)); - vertCutFlows.push_back(std::move(vertPlot15)); - std::unique_ptr> vertPlot16(new TypedPlot("deltaEta","",&trk_eta,100,0.0,2.4)); - vertCutFlows.push_back(std::move(vertPlot16)); - std::unique_ptr> vertPlot17(new TypedPlot("deltaD0","cm",&trk_d0,100,0.0,10.0)); - vertCutFlows.push_back(std::move(vertPlot17)); - std::unique_ptr> vertPlot18(new TypedPlot("deltaPhi","",&trk_phi,100,0.0,6.3)); - vertCutFlows.push_back(std::move(vertPlot18)); - std::unique_ptr> vertPlot19(new TypedPlot("delIndexPt","",&trkVert_delIndexPt,20,0.0,20.0)); - vertCutFlows.push_back(std::move(vertPlot19)); - std::unique_ptr> vertPlot20(new TypedPlot("sumNumStubs","",&trk_nstub,12,0.0,12.0)); - vertCutFlows.push_back(std::move(vertPlot20)); - std::unique_ptr> vertPlot21(new TypedPlot("sumChi2rphidof","",&trk_chi2rphi,200,0.0,8.0)); - vertCutFlows.push_back(std::move(vertPlot21)); - std::unique_ptr> vertPlot22(new TypedPlot("sumChi2rzdof","",&trk_chi2rz,200,0.0,3.0)); - vertCutFlows.push_back(std::move(vertPlot22)); - std::unique_ptr> vertPlot23(new TypedPlot("sumBendChi2","",&trk_bendchi2,200,0.0,14.0)); - vertCutFlows.push_back(std::move(vertPlot23)); - std::unique_ptr> vertPlot24(new TypedPlot("sumMVA1","",&trk_MVA1,100,0.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot24)); - std::unique_ptr> vertPlot25(new TypedPlot("sumMVA2","",&trk_MVA2,100,0.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot25)); - std::unique_ptr> vertPlot26(new TypedPlot("leadEta","",&trk_eta,50,-2.4,2.4)); - vertCutFlows.push_back(std::move(vertPlot26)); - std::unique_ptr> vertPlot27(new TypedPlot("score","",&trkVert_score,50,0.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot27)); - - std::vector> vertCutFlowsTP; - std::unique_ptr> vertPlotTP0(new TypedPlot("x","cm",&tpVert_x,100,-5.0,5.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP0)); - std::unique_ptr> vertPlotTP1(new TypedPlot("y","cm",&tpVert_y,100,-5.0,5.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP1)); - std::unique_ptr> vertPlotTP2(new TypedPlot("z","cm",&tpVert_z,100,-50.0,50.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP2)); - std::unique_ptr> vertPlotTP4(new TypedPlot("cos_T","",&tpVert_cos_T,40,-1.0,1.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP4)); - std::unique_ptr> vertPlotTP5(new TypedPlot("openingAngle","",&tpVert_openingAngle,40,-3.14,3.14)); - vertCutFlowsTP.push_back(std::move(vertPlotTP5)); - std::unique_ptr> vertPlotTP6(new TypedPlot("parentPt","GeV",&tpVert_parentPt,200,0.0,200.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP6)); - std::unique_ptr> vertPlotTP7(new TypedPlot("d_T","cm",&tpVert_d_T,40,0.0,0.2)); - vertCutFlowsTP.push_back(std::move(vertPlotTP7)); - std::unique_ptr> vertPlotTP8(new TypedPlot("R_T","cm",&tpVert_R_T,20,logspace(0.1,20.0,20))); - vertCutFlowsTP.push_back(std::move(vertPlotTP8)); - std::unique_ptr> vertPlotTP9(new TypedPlot("highPt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); - vertCutFlowsTP.push_back(std::move(vertPlotTP9)); - std::unique_ptr> vertPlotTP10(new TypedPlot("lowPt","GeV",&tp_pt,100,0.0,100.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP10)); - std::unique_ptr> vertPlotTP11(new TypedPlot("highD0","cm",&tp_d0,80,-2.0,2.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP11)); - std::unique_ptr> vertPlotTP12(new TypedPlot("lowD0","cm",&tp_d0,80,-2.0,2.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP12)); - std::unique_ptr> vertPlotTP13(new TypedPlot("deltaZ0","cm",&tp_z0,100,0.0,10.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP13)); - std::unique_ptr> vertPlotTP14(new TypedPlot("deltaEta","",&tp_eta,100,0.0,2.4)); - vertCutFlowsTP.push_back(std::move(vertPlotTP14)); - std::unique_ptr> vertPlotTP15(new TypedPlot("deltaD0","cm",&tp_d0,100,0.0,10.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP15)); - std::unique_ptr> vertPlotTP16(new TypedPlot("deltaPhi","",&tp_phi,100,0.0,6.3)); - vertCutFlowsTP.push_back(std::move(vertPlotTP16)); - std::unique_ptr> vertPlotTP17(new TypedPlot("leadEta","",&tp_eta,50,-2.4,2.4)); - vertCutFlowsTP.push_back(std::move(vertPlotTP17)); - - std::vector vertType = {"matched","unmatched"}; - std::vector vertTypeTP = {"matched","all"}; - std::vector vertPlotTPModifiers = {"","_oneMatch"}; - - TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCuts.size()]; - TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCuts.size()][vertPlotTPModifiers.size()]; - TH1F* vertexCutFlowsTP[vertCutFlowsTP.size()][vertPlotTPModifiers.size()]; - TH1F* vertexNumVertices[vertCuts.size()]; - - for(uint i=0; igetVarName()+"_"+vertType[j]+"_"+vertCuts[k]->getCutName()+"Cut"; - if(vertCutFlows[i]->getMaxBin()==vertCutFlows[i]->getMinBin()){ - TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlows[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),bins.data()); - vertexCutFlows[i][j][k] = hist; - } - else{ - float binWidth = (vertCutFlows[i]->getMaxBin() - vertCutFlows[i]->getMinBin()) / vertCutFlows[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlows[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),vertCutFlows[i]->getMinBin(),vertCutFlows[i]->getMaxBin()); - vertexCutFlows[i][j][k] = hist; - } - } - } - } - - for(uint i=0; igetVarName()+"_"+vertTypeTP[0]+"_"+vertCuts[k]->getCutName()+"Cut"+vertPlotTPModifiers[m]; - if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlowsTP[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); - vertexCutFlowsMatchTP[i][k][m] = hist; - } - else{ - float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); - vertexCutFlowsMatchTP[i][k][m] = hist; - } - } - } - } - - for(uint i=0; igetVarName()+"_"+vertTypeTP[1]+vertPlotTPModifiers[k]; - if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlowsTP[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); - vertexCutFlowsTP[i][k] = hist; - } - else{ - float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); - vertexCutFlowsTP[i][k] = hist; - } - } - } - - for(uint k=0; kgetCutName()+"Cut"; - TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; - TH1F* hist = new TH1F(name,labels,40,0,40); - vertexNumVertices[k] = hist; - } - - - TH1F *h_numSelectedTrks = new TH1F("h_numSelectedTrks","h_numSelectedTrks; Number of Selected Tracks; Events / 1.0",100,0,100); - TH1F *h_numSelectedTrks_zoomOut = new TH1F("h_numSelectedTrks_zoomOut","h_numSelectedTrks_zoomOut; Number of Selected Tracks; Events / 10.0",100,0,1000); - TH1F *h_trk_H_T = new TH1F("h_trk_H_T","h_trk_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_trk_MET = new TH1F("h_trk_MET","h_trk_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_trk_oneMatch_H_T = new TH1F("h_trk_oneMatch_H_T","h_trk_oneMatch_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_trk_oneMatch_MET = new TH1F("h_trk_oneMatch_MET","h_trk_oneMatch_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_tp_H_T = new TH1F("h_tp_H_T","h_tp_H_T; Event TP Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_tp_MET = new TH1F("h_tp_MET","h_tp_MET; Event TP Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_trueVertex_numAllCuts = new TH1F("h_trueVertex_numAllCuts","h_trueVertex_numAllCuts; TP Vertices; Events / 1.0",40,0,40); - TH1F *h_trueVertex_numTPs = new TH1F("h_trueVertex_numTPs","h_trueVertex_numTPs; TPs Associated with Vertex; Events / 1.0",6,0,6); - TH1F *h_trackVertexBranch_numAllCuts = new TH1F("h_trackVertexBranch_numAllCuts","h_trackVertexBranch_numAllCuts; Track Vertices; Events / 1.0",40,0,40); - - // Displaced Vertex Plots - TH1F *h_res_tp_trk_x = new TH1F("h_res_tp_trk_x","h_res_tp_trk_x; x residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); - TH1F *h_res_tp_trk_y = new TH1F("h_res_tp_trk_y","h_res_tp_trk_y; y residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); - TH1F *h_res_tp_trk_x_zoomOut = new TH1F("h_res_tp_trk_x_zoomOut","h_res_tp_trk_x_zoomOut; x residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); - TH1F *h_res_tp_trk_y_zoomOut = new TH1F("h_res_tp_trk_y_zoomOut","h_res_tp_trk_y_zoomOut; y residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); - TH1F *h_res_tp_trk_z = new TH1F("h_res_tp_trk_z","h_res_tp_trk_z; z residual of vertex (cm) ; Events / 0.05 cm",400,-10,10); - TH1F *h_res_tp_trk_r = new TH1F("h_res_tp_trk_r","h_res_tp_trk_r; r residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); - TH1F *h_res_tp_trk_phi = new TH1F("h_res_tp_trk_phi","h_res_tp_trk_phi; phi residual of vertex ; Events / 0.02",100,-1,1); - - TH2F *h_trueVertex_charge_vs_numTPs = new TH2F("h_trueVertex_charge_vs_numTPs","h_trueVertex_charge_vs_numTPs; TPs Associated with Vertex; Net Charge",6,0,6,12,-6,6); - TH2F *h_correct_trackVertex_charge_vs_numTracks = new TH2F("h_correct_trackVertex_charge_vs_numTracks","h_correct_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); - TH2F *h_false_trackVertex_charge_vs_numTracks = new TH2F("h_false_trackVertex_charge_vs_numTracks","h_false_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); - - std::string binVariable = ""; - std::vector> track_bins = {{-1,1}}; - std::vector> z0_bins; - double z0_bin_min = -20.0; - double z0_bin_width = 4.0; - double z0_bin_max = z0_bin_min+z0_bin_width; - while(z0_bin_max<20.0){ - z0_bins.push_back({z0_bin_min,z0_bin_max}); - z0_bin_min += (z0_bin_width/2); - z0_bin_max += (z0_bin_width/2); - } - std::vector> phi_bins; - double phi_bin_min = -TMath::Pi(); - double phi_bin_width = 0.6; - double phi_bin_max = phi_bin_min+phi_bin_width; - while(phi_bin_max numPart_primary_noCuts{}; - std::map numPart_primary_chi2rzdofCuts{}; - std::map numPart_primary_bendchi2Cuts{}; - std::map numPart_primary_chi2rphidofCuts{}; - std::map numPart_primary_nstubCuts{}; - std::map numPart_primary_ptCuts{}; - std::map numPart_primary_d0Cuts{}; - std::map numPart_primary_z0Cuts{}; - std::map numPart_np_noCuts{}; - std::map numPart_np_chi2rzdofCuts{}; - std::map numPart_np_bendchi2Cuts{}; - std::map numPart_np_chi2rphidofCuts{}; - std::map numPart_np_nstubCuts{}; - std::map numPart_np_ptCuts{}; - std::map numPart_np_d0Cuts{}; - std::map numPart_np_z0Cuts{}; - - if (tree == 0) return; - Long64_t nevt = tree->GetEntries(); - //nevt = 100; - Vertex_Parameters geomTrackVertex; - Vertex_Parameters geomTrueVertex; - auto trackLoopTime = 0.; - auto tpLoopTime = 0.; - auto trueVertLoopTime = 0.; - auto trueVertPlotLoopTime = 0.; - auto trackVertLoopTime = 0.; - auto matchLoopTime = 0.; - auto trackVertPlotLoopTime = 0.; - //std::cout<<"before event loop"<GetEntry(i_evnt); - displayProgress(i_evnt, nevt); - std::vector> binnedSelectedTracks; - for(uint i=0; i selectedTracks; // Tracks - std::deque selectedTPs; // Tracking particles - std::vector trueVertices; - int maxPT_i = 0; - bool oneMatch = false; - std::valarray trkMET = {0.0,0.0}; - float trkH_T = 0.0; - - vector> tpVert_indexTPs; - vector trkVert_indexMatch; - tpVert_d_T = new vector (); - tpVert_R_T = new vector (); - tpVert_cos_T = new vector (); - tpVert_x = new vector (); - tpVert_y = new vector (); - tpVert_z = new vector (); - tpVert_openingAngle = new vector (); - tpVert_parentPt = new vector (); - - // ---------------------------------------------------------------------------------------------------------------- - // track loop - //std::cout<<"starting track loop"<size(); ++it){ - bool isPrimary = true; - if(inputFile.Contains("DarkPhoton")){ - isPrimary = trk_matchtp_isHToMu->at(it); - } - if(inputFile.Contains("DisplacedTrackJet")){ - isPrimary = trk_matchtp_isHToB->at(it); - } - //std::cout<<"track pt: "<at(it)<<" eta: "<at(it)<<" d0 : "<at(it)<<" phi: "<at(it)<<" z0: "<at(it)<<" nstub: "<getDoPlot()){ - i_plot++; - } - bool mods = true; - TString cutName = preselCuts[icut]->getCutName(); - float cutValue = preselCuts[icut]->getCutValue(); - float param = preselCuts[icut]->getParam(it); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; - if(cutName.Contains("disk") && fabs(trk_eta->at(it))<=barrelEta) mods = false; - if(cutName.Contains("_H") && trk_pt->at(it)<=10) mods = false; - if(cutName.Contains("_L") && trk_pt->at(it)>10) mods = false; - if(cutName.Contains("_P") && fabs(trk_d0->at(it))>1) mods = false; - if(cutName.Contains("_D") && fabs(trk_d0->at(it))<=1 ) mods = false; - if(cutName.Contains("overlap") && (fabs(trk_eta->at(it))<=1.1 || fabs(trk_eta->at(it))>=1.7)) mods = false; - if(mods){ - if(cutName.Contains("max") && param>cutValue) break; - if(cutName.Contains("min") && paramgetDoPlot()) continue; - for(uint i=0; iat(it)==1 && isPrimary; - if(trackType[i]=="primary" && !primary) continue; - if(trackType[i]=="np" && primary) continue; - if(trackType[i]=="fake" && trkExt_fake->at(it)!=0) continue; - if(trackType[i]=="PU" && trkExt_fake->at(it)!=2) continue; - if(trackType[i]=="notHiggs" && !(trkExt_fake->at(it)==1 && !isPrimary)) continue; - string partId = to_string(trk_matchtp_pdgid->at(it)); - //numPartCutFlows[i][icut][partId]++; - for(uint j=0; jat(it)<=10) continue; - if(plotModifiers[j]=="_L" && trk_pt->at(it)>10) continue; - if(plotModifiers[j]=="_P" && fabs(trk_d0->at(it))>1) continue; - if(plotModifiers[j]=="_D" && fabs(trk_d0->at(it))<=1) continue; - if(plotModifiers[j]=="_barrel" && fabs(trk_eta->at(it))>barrelEta) continue; - if(plotModifiers[j]=="_disk" && fabs(trk_eta->at(it))<=barrelEta) continue; - for(uint ivar=0; ivargetParam(it); - TString varName = varCutFlows[ivar]->getVarName(); - if(varName.Contains("sector")){ - while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); - while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); - while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; - } - if(varName.Contains("d0")){ - param = fabs(param); - } - preselCutFlows[ivar][i][i_plot][j]->Fill(param); - } - for(uint ivar2D=0; ivar2DgetParam(it); - float param2 = varCutFlows2D[ivar2D].second->getParam(it); - TString varName1 = varCutFlows2D[ivar2D].first->getVarName(); - TString varName2 = varCutFlows2D[ivar2D].second->getVarName(); - if(varName1.Contains("sector")){ - while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); - while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); - while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; - } - if(varName2.Contains("sector")){ - while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); - while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); - while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; - } - preselCutFlows2D[ivar2D][i][i_plot][j]->Fill(param1,param2); - } - } - } - } - if(icut==preselCuts.size()){ - Track_Parameters* tp_params = new Track_Parameters(trk_matchtp_pt->at(it), trk_matchtp_d0->at(it), trk_matchtp_z0->at(it), trk_matchtp_eta->at(it), trk_matchtp_phi->at(it), trk_matchtp_pdgid->at(it), trk_matchtp_x->at(it), trk_matchtp_y->at(it), trk_matchtp_z->at(it)); - for(uint i=0; iat(it); - if (binVariable=="z0") trkVariable = fabs(trk_z0->at(it)); - if(trkVariabletrack_bins[i][0] ){ - binnedSelectedTracks[i].push_back(Track_Parameters(trk_pt->at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it), trk_MVA2->at(it))); - } - } - - - //std::cout<<"track params: "<at(it)<<" "<<-trk_d0->at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it), trk_MVA2->at(it) )); - trkH_T += trk_pt->at(it); - std::valarray trackPtVec = {trk_pt->at(it)*cos(trk_phi->at(it)),trk_pt->at(it)*sin(trk_phi->at(it))}; - trkMET -= trackPtVec; - } - } - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - trackLoopTime += std::chrono::duration_cast(end - begin).count(); - h_trk_H_T->Fill(trkH_T); - h_trk_MET->Fill(TMath::Sqrt(pow(trkMET[0],2)+pow(trkMET[1],2))); - h_numSelectedTrks->Fill(selectedTracks.size()); - //std::cout<<"num selected tracks: "<Fill(selectedTracks.size()); - - // ---------------------------------------------------------------------------------------------------------------- - // tracking particle loop - float tpH_T = 0.0; - std::valarray tpMET = {0.0,0.0}; - //std::cout<<"tp_pt size: "<size()<size(); it++){ - - float tmp_d0 = tp_d0->at(it); // Sign difference in the NTupleMaker - float tmp_z0 = tp_z0->at(it); - - bool isPrimary = true; - if(inputFile.Contains("DarkPhoton")) isPrimary = tp_isHToMu->at(it); - if(inputFile.Contains("DisplacedTrackJet")) isPrimary = tp_isHToB->at(it); - - uint icut=0; - for(icut=0; icutgetParam(it); - TString cutName = preselCutsTP[icut]->getCutName(); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - float cutValue = preselCutsTP[icut]->getCutValue(); - //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; - if(cutName.Contains("disk") && fabs(tp_eta->at(it))<=barrelEta) mods = false; - if(cutName.Contains("_H") && tp_pt->at(it)<=10) mods = false; - if(cutName.Contains("_L") && tp_pt->at(it)>10) mods = false; - if(cutName.Contains("_P") && fabs(tp_d0->at(it))>1) mods = false; - if(cutName.Contains("_D") && fabs(tp_d0->at(it))<=1 ) mods = false; - if(cutName.Contains("overlap") && (fabs(tp_eta->at(it))<=1.1 || fabs(tp_eta->at(it))>=1.7)) mods = false; - if(mods){ - if(cutName.Contains("max") && param>cutValue) break; - if(cutName.Contains("min") && paramat(it)==0 && isPrimary; - if(tpType[i]=="primary" && !primary) continue; - if(tpType[i]=="np" && primary) continue; - if(tpType[i]=="PU" && tp_eventid->at(it)==0) continue; - if(tpType[i]=="notHiggs" && !(tp_eventid->at(it)==0 && !isPrimary)) continue; - if(tpType[i]=="match" && tp_nmatch->at(it)==0) continue; - string partId = to_string(tp_pdgid->at(it)); - //numPartCutFlowsTP[i][icut][partId]++; - for(uint j=0; jat(it)<=10) continue; - if(plotModifiers[j]=="_L" && tp_pt->at(it)>10) continue; - if(plotModifiers[j]=="_P" && fabs(tp_d0->at(it))>1) continue; - if(plotModifiers[j]=="_D" && fabs(tp_d0->at(it))<=1) continue; - if(plotModifiers[j]=="_barrel" && fabs(tp_eta->at(it))>barrelEta) continue; - if(plotModifiers[j]=="_disk" && fabs(tp_eta->at(it))<=barrelEta) continue; - for(uint ivar=0; ivargetParam(it); - TString varName = varCutFlowsTP[ivar]->getVarName(); - if(varName.Contains("sector")){ - while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); - while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); - while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; - } - if(varName.Contains("d0")){ - param = fabs(param); - } - preselCutFlowsTP[ivar][i][icut][j]->Fill(param); - } - for(uint ivar2D=0; ivar2DgetParam(it); - float param2 = varCutFlowsTP2D[ivar2D].second->getParam(it); - TString varName1 = varCutFlowsTP2D[ivar2D].first->getVarName(); - TString varName2 = varCutFlowsTP2D[ivar2D].second->getVarName(); - if(varName1.Contains("sector")){ - while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); - while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); - while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; - } - if(varName2.Contains("sector")){ - while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); - while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); - while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; - } - preselCutFlowsTP2D[ivar2D][i][icut][j]->Fill(param1,param2); - } - } - } - } - if(icut==preselCutsTP.size() && tp_eventid->at(it)==0 && isPrimary==true){ - selectedTPs.push_back(Track_Parameters(tp_pt->at(it), tmp_d0, tmp_z0, tp_eta->at(it), tp_phi->at(it), tp_pdgid->at(it), tp_x->at(it), tp_y->at(it), tp_z->at(it), tp_charge->at(it), it)); - if (tp_eventid->at(it)>0){ - tpH_T += tp_pt->at(it); - std::valarray tpPtVec = {tp_pt->at(it)*cos(tp_phi->at(it)),tp_pt->at(it)*sin(tp_phi->at(it))}; - tpMET -= tpPtVec; - } - } - } - end = std::chrono::steady_clock::now(); - tpLoopTime += std::chrono::duration_cast(end - begin).count(); - h_tp_H_T->Fill(tpH_T); - h_tp_MET->Fill(TMath::Sqrt(pow(tpMET[0],2)+pow(tpMET[1],2))); - - // -------------------------------------------------------------------------------------------- - // Vertex finding in Tracking Particles - // -------------------------------------------------------------------------------------------- - if (!(selectedTracks.size() >= 2)) continue; - double_t x_dv = -9999.0;// (tp_x->at((*selectedTPs)[0]->index));//+tp_x->at((*selectedTPs)[1]->index))/2.0; - double_t y_dv = -9999.0;// (tp_y->at((*selectedTPs)[0]->index));//+tp_y->at((*selectedTPs)[1]->index))/2.0; - double_t z_dv = -9999.0;// (tp_z->at((*selectedTPs)[0]->index));//+tp_z->at((*selectedTPs)[1]->index))/2.0; - - if(selectedTPs.size()>=2){ - begin = std::chrono::steady_clock::now(); - //std::cout<<"vertex finding in TPs"<1){ - bool foundTrueVertex = false; - for( uint i=1; iat(index0)-tp_x->at(index1))<0.0001 && fabs(tp_y->at(index0)-tp_y->at(index1))<0.0001 && fabs(tp_z->at(index0)-tp_z->at(index1))<0.0001 ){ - x_dv = tp_x->at(index0); - y_dv = tp_y->at(index0); - z_dv = tp_z->at(index0); - if(dist(x_dv,y_dv)>d0_res && dist(x_dv,y_dv)<20){ - //std::cout<<"true vertex: "<at(selectedTPs[0].index)<<" "<at(selectedTPs[i].index)<Fill(trueVertices.size()); - float maxPT = 0.0; - // loop through trueVertices and fill ntuple branches - for(uint i=0; imaxPT){ - maxPT = trueVertices[i].a.pt; - maxPT_i = i; - } - - std::vector itps; - for(uint itrack=0; itrackpush_back(trueVertices[i].d_T); - tpVert_cos_T->push_back(trueVertices[i].cos_T); - tpVert_R_T->push_back(trueVertices[i].R_T); - tpVert_x->push_back(trueVertices[i].x_dv); - tpVert_y->push_back(trueVertices[i].y_dv); - tpVert_z->push_back(trueVertices[i].z_dv); - tpVert_openingAngle->push_back(trueVertices[i].openingAngle); - tpVert_parentPt->push_back(trueVertices[i].p_mag); - - float netCharge = 0; - for(uint itrack=0; itrackFill(trueVertices[i].tracks.size()); - h_trueVertex_charge_vs_numTPs->Fill(trueVertices[i].tracks.size(),netCharge); - } - end = std::chrono::steady_clock::now(); - trueVertLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - // fill true vertex plots using ntuple branches - for (int it = 0; it < (int)tpVert_d_T->size(); it++){ - for(uint i=0; igetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - param = fabs(param1 - param2); - vertexCutFlowsTP[i][k]->Fill(param); - } - continue; - } - else if(varName.Contains("high")){ - param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - if(fabs(param2)>fabs(param)) param = param2; - } - } - else if(varName.Contains("low")){ - param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - if(fabs(param2)getParam(tpVert_indexTPs[it][0]); - } - else{ - param = vertCutFlowsTP[i]->getParam(it); - } - vertexCutFlowsTP[i][k]->Fill(param); - } - } - } - end = std::chrono::steady_clock::now(); - trueVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); - - } - - // -------------------------------------------------------------------------------------------- - // Vertex finding in Tracks - // -------------------------------------------------------------------------------------------- - //std::cout<<"vertex finding in tracks"< lastBinVertices; - for(auto trackBin : binnedSelectedTracks){ - std::vector binVertices; - if(trackBin.size()<2) continue; - sort(trackBin.begin(), trackBin.end(), ComparePtTrack); - for(uint i=0; ipush_back(trackBin[i].index); - //trkVert_secondIndexTrk->push_back(trackBin[j].index); - //trkVert_firstIndexPt->push_back(i); - //trkVert_secondIndexPt->push_back(j); - //trkVert_inTraj->push_back(inTraj); - //trkVert_d_T->push_back(vertex.d_T); - //trkVert_R_T->push_back(vertex.R_T); - //trkVert_cos_T->push_back(vertex.cos_T); - //trkVert_del_Z->push_back(vertex.delta_z); - //trkVert_x->push_back(vertex.x_dv); - //trkVert_y->push_back(vertex.y_dv); - //trkVert_z->push_back(vertex.z_dv); - //trkVert_openingAngle->push_back(vertex.openingAngle); - //trkVert_parentPt->push_back(vertex.p_mag); - //trkVert_delIndexPt->push_back(fabs(i-j)); - //std::cout<<"found vertex"<push_back(x_trk_alt); - //trkVert_alt_y->push_back(y_trk_alt); - //trkVert_leadingCharge->push_back(vertex.a.charge); - //trkVert_subleadingCharge->push_back(vertex.b.charge); - } - } - } - lastBinVertices = binVertices; - } - end = std::chrono::steady_clock::now(); - trackVertLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - //std::cout<<"match track and true vertices"<size(); it++){ - int itp = trkVert_firstIndexTrk->at(it); - //std::cout<<"match vertices first track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); - //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 1 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<at(it); - //std::cout<<"match vertices second track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); - //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 2 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<=2){ - trkVert_indexMatch.push_back(i); - foundMatch = true; - break; - } - } - if(!foundMatch) trkVert_indexMatch.push_back(-1); - } - end = std::chrono::steady_clock::now(); - matchLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - bool filledOneMatch[vertCuts.size()]; - bool isMatchedVec[trueVertices.size()][vertCuts.size()]; - uint numVertices[vertCuts.size()]; - for(uint i = 0; isize(); it++){ - for(uint i=0; igetCutName(); - float cutValue = vertCuts[i]->getCutValue(); - //std::cout<<"cutName: "<at(it)<<" "<at(it)<getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - param = fabs(param1 - param2); - } - else if(cutName.Contains("sum")){ - float param1 = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(cutName.Contains("Charge")){ - if(param1>0.0) param1 = 1.0; - if(param1<0.0) param1 = -1.0; - if(param2>0.0) param2 = 1.0; - if(param2<0.0) param2 = -1.0; - } - param = param1 + param2; - } - else if(cutName.Contains("high")){ - param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)>fabs(param)) param = param2; - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - } - else if(cutName.Contains("low")){ - param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - } - else{ - param = vertCuts[i]->getParam(it); - } - //std::cout<<"trackVert cutName: "<cutValue) break; - if(cutName.Contains("min") && paramgetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - param = fabs(param1 - param2); - } - else if(varName.Contains("sum")){ - float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(varName.Contains("charge")){ - if(param1>0.0) param1 = 1.0; - if(param1<0.0) param1 = -1.0; - if(param2>0.0) param2 = 1.0; - if(param2<0.0) param2 = -1.0; - } - param = param1 + param2; - } - else if(varName.Contains("high")){ - param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)>fabs(param)) param = param2; - } - else if(varName.Contains("low")){ - param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); - } - else{ - param = vertCutFlows[k]->getParam(it); - } - vertexCutFlows[k][j][i]->Fill(param); - } - if(vertType[j]=="matched"){ - for(uint k=0; kFill(tpVert_x->at(jt)-trkVert_x->at(it)); - h_res_tp_trk_x_zoomOut->Fill(tpVert_x->at(jt)-trkVert_x->at(it)); - h_res_tp_trk_y->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); - h_res_tp_trk_y_zoomOut->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); - h_res_tp_trk_z->Fill(tpVert_z->at(jt)-trkVert_z->at(it)); - } - - for(uint m=0; mgetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - param = fabs(param1 - param2); - vertexCutFlowsMatchTP[m][i][k]->Fill(param); - } - continue; - } - else if(varName.Contains("high")){ - param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - if(fabs(param2)>fabs(param)) param = param2; - } - } - else if(varName.Contains("low")){ - param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - if(fabs(param2)getParam(tpVert_indexTPs[jt][0]); - } - else{ - param = vertCutFlowsTP[m]->getParam(jt); - } - vertexCutFlowsMatchTP[m][i][k]->Fill(param); - } - } - break; - } - } - } - } - end = std::chrono::steady_clock::now(); - trackVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); - - h_trackVertexBranch_numAllCuts->Fill(numVertices[vertCuts.size()-1]); - //std::cout<<"num vertices: "<Fill(numVertices[i]); - } - - delete tpVert_d_T; - delete tpVert_R_T; - delete tpVert_cos_T; - delete tpVert_x; - delete tpVert_y; - delete tpVert_z; - delete tpVert_openingAngle; - delete tpVert_parentPt; -#if 0 - delete trkVert_firstIndexTrk; - delete trkVert_secondIndexTrk; - delete trkVert_firstIndexPt; - delete trkVert_secondIndexPt; - delete trkVert_inTraj; - delete trkVert_d_T; - delete trkVert_R_T; - delete trkVert_cos_T; - delete trkVert_del_Z; - delete trkVert_x; - delete trkVert_y; - delete trkVert_z; - delete trkVert_openingAngle; - delete trkVert_parentPt; - delete trkVert_delIndexPt; -#endif - - - } // End of Event Loop - - std::cout<<"nevt: "<Exec(mkDIR); - TString PRESELDIR = DIR + "/PreselectionPlots"; - TString makedirPreSel = "mkdir -p " + PRESELDIR; - const char *mkDIRPRESEL = makedirPreSel.Data(); - gSystem->Exec(mkDIRPRESEL); - TString VERTDIR = DIR + "/VertexPlots"; - TString makedirVert = "mkdir -p " + VERTDIR; - const char *mkDIRVERT = makedirVert.Data(); - gSystem->Exec(mkDIRVERT); - - TFile *fout; - fout = new TFile(outputDir + "output_" + inputFile, "recreate"); - TLegend* l = new TLegend(0.82,0.3,0.98,0.7); - l->SetFillColor(0); - l->SetLineColor(0); - l->SetTextSize(0.04); - l->SetTextFont(42); - - std::cout<<"trkEffOverlay"<Clear(); - TH1F* h_trkEff[preselCutsSize]; - uint i_plot = 0; - for(uint mcut=1; mcutgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - //std::cout<<"trkEffOverlay i j m k: "<Clone(); - h_trkEff[i_plot]->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trkEff[i_plot]); - h_trkEff[i_plot]->SetStats(0); - removeFlows(preselCutFlows[ivar][j][i_plot][k]); - TString cutLabel = preselCuts[mcut]->getCutLabel(); - TString varString = varCutFlows[ivar]->getVarName(); - h_trkEff[i_plot]->Divide(preselCutFlows[ivar][j][i_plot][k],h_trkEff[i_plot],1.0,1.0,"B"); - if(i_plot!=10){ - h_trkEff[i_plot]->SetLineColor(i_plot); - h_trkEff[i_plot]->SetMarkerColor(i_plot); - } - else{ - h_trkEff[i_plot]->SetLineColor(40); - h_trkEff[i_plot]->SetMarkerColor(40); - } - //TString cutLabel = preselCuts[mcut]->getCutLabel(); - //std::cout<<"cutName: "<AddEntry(h_trkEff[i_plot],cutLabel,"lp"); - //TString varString = varCutFlows[ivar]->getVarName(); - if(varString.Contains("d0") || varString.Contains("pt")){ - //std::cout<<"h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_trkEff[i_plot]->GetBinContent(ibin)) + ", "; - binWidths+=to_string(h_trkEff[i_plot]->GetBinWidth(ibin)) + ", "; - binErrors+=to_string(h_trkEff[i_plot]->GetBinError(ibin)) + ", "; - binCenters+=to_string(h_trkEff[i_plot]->GetBinCenter(ibin)) + ", "; - } - binValues+="]"; - binWidths+="]"; - binErrors+="]"; - binCenters+="]"; - //std::cout<<"binValues: "<Draw(); - } - else{ - h_trkEff[i_plot]->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - /* - TString label_cms="CMS"; - TLatex* Label_cms = new TLatex(0.15,0.92,label_cms); - Label_cms->SetNDC(); - Label_cms->SetTextFont(61); - Label_cms->SetTextSize(0.065); - Label_cms->Draw(); - TString label_cms1="Simulation Phase-2 Preliminary"; - TLatex* Label_cms1 = new TLatex(0.232,0.92,label_cms1); - Label_cms1->SetNDC(); - Label_cms1->SetTextSize(0.051); - Label_cms1->SetTextFont(52); - Label_cms1->Draw();*/ - c.SaveAs(PRESELDIR + "/h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"); - /*std::cout << "trkEffOverlay took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n";*/ - } - } - } - - std::cout<<"signalvsbg"<getDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetCutName(); - auto h_stack = new THStack("hs_"+varCutFlows[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j],"Stacked BG histograms"); - float integralSum = 0; - l->Clear(); - for(uint m=0; mGetYaxis()->SetNoExponent(kTRUE); - removeFlows(preselCutFlows[kvar][m][i_plot][j]); - if(detailedPlots){ - raiseMax(preselCutFlows[kvar][m][i_plot][j]); - preselCutFlows[kvar][m][i_plot][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - //preselCutFlows[kvar][m][icut][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/"+ preselCutFlows[kvar][m][i_plot][j]->GetName() + ".pdf"); - } - if(m!=9){ - preselCutFlows[kvar][m][i_plot][j]->SetLineColor(m+1); - preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(m+1); - } - else{ - preselCutFlows[kvar][m][i_plot][j]->SetLineColor(40); - preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(40); - } - if(trackType[m]=="fake" || trackType[m]=="PU" || trackType[m]=="notHiggs"){ - integralSum+=preselCutFlows[kvar][m][i_plot][j]->Integral(); - } - /*std::cout << "preselCutFlows took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n";*/ - } - for(uint m=0; mScale(1./integralSum); - h_stack->Add(preselCutFlows[kvar][m][i_plot][j]); - } - } - - //h_stack->Draw("HIST"); - preselCutFlows[kvar][m_primary][i_plot][j]->Scale(1./preselCutFlows[kvar][m_primary][i_plot][j]->Integral()); - /* - raiseMaxStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); - drawSameStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); - mySmallText(0.3, 0.9, 1, ctxt); - l->Clear(); - l->AddEntry(preselCutFlows[kvar][m_primary][icut][j],"Primary","l"); - l->AddEntry(preselCutFlows[kvar][m_fake][icut][j],"Fake","l"); - l->AddEntry(preselCutFlows[kvar][m_PU][icut][j],"PU","l"); - l->AddEntry(preselCutFlows[kvar][m_notHiggs][icut][j],"notHiggs","l"); - l->Draw(); - c.SaveAs(PRESELDIR + "/h_signalVsBGStack_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - */ - delete h_stack; - for(uint m=0; mScale(1./preselCutFlows[kvar][m][i_plot][j]->Integral()); - preselCutFlows[kvar][m][i_plot][j]->SetStats(0); - } - /* - raiseMax(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); - drawSame(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - //std::cout<<"signalvsBGOverlay primary fake PU notHiggs: "<getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - std::cout << "signalVsBGOverlay took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n"; - */ - raiseMax(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); - drawSame(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); - mySmallText(0.3, 0.9, 1, ctxt); - l->Clear(); - l->AddEntry(preselCutFlows[kvar][m_primary][i_plot][j],"Primary","l"); - l->AddEntry(preselCutFlows[kvar][m_np][i_plot][j],"NP","l"); - l->Draw(); - preselCutFlows[kvar][m_primary][i_plot][j]->Write("", TObject::kOverwrite); - preselCutFlows[kvar][m_np][i_plot][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/h_signalVsBG_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - } - } - } - std::cout<<"trackFindingEff"<getCutName(); - for(uint j=0; jGetYaxis()->SetNoExponent(kTRUE); - removeFlows(preselCutFlowsTP[kvar][m][icut][j]); - if(detailedPlots){ - raiseMax(preselCutFlowsTP[kvar][m][icut][j]); - preselCutFlowsTP[kvar][m][icut][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - //preselCutFlowsTP[kvar][m][icut][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP[kvar][m][icut][j]->GetName() + ".pdf"); - } - } - preselCutFlowsTP[kvar][m_match][icut][j]->Divide(preselCutFlowsTP[kvar][m_match][icut][j],preselCutFlowsTP[kvar][m_tp][icut][j]); - raiseMax(preselCutFlowsTP[kvar][m_match][icut][j]); - preselCutFlowsTP[kvar][m_match][icut][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/h_trackFindingEff_"+varCutFlowsTP[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j]+".pdf"); - } - } - } - - i_plot = -1; - for(uint icut=0; icutgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - TString cutName = preselCuts[icut]->getCutName(); - for(uint j=0; jDraw("COLZ"); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/"+ preselCutFlows2D[kvar][m][i_plot][j]->GetName() + ".pdf"); - } - } - } - } - std::cout<<"preselCutFlowsTP2D"<getCutName(); - for(uint j=0; jDraw("COLZ"); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP2D[kvar][m][icut][j]->GetName() + ".pdf"); - } - } - } - } - } - std::cout<<"eff_trueVertex"<getVarName().Contains("highPt")) std::cout<<"onematch entries: "<GetEntries()<<" "<GetEntries()<Clone(); - h_eff->Divide(vertexCutFlowsMatchTP[j][vertCuts.size()-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); - raiseMax(h_eff); - h_eff->SetStats(0); - h_eff->SetAxisRange(0, 1.1, "Y"); - h_eff->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(VERTDIR + "/h_eff_trueVertex_" + vertCutFlowsTP[j]->getVarName() + "_" + vertPlotTPModifiers[i] + ".pdf"); - } - } - std::cout<<"findEff_trueVertex"<Clear(); - for(uint j=0; jClone(); - h_findEff->Divide(vertexCutFlowsMatchTP[i][j][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); - h_findEff->SetStats(0); - if(j!=9){ - h_findEff->SetLineColor(j+1); - h_findEff->SetMarkerColor(j+1); - } - else{ - h_findEff->SetLineColor(40); - h_findEff->SetMarkerColor(40); - } - l->AddEntry(h_findEff,vertCuts[j]->getCutLabel(),"lp"); - TString varString = vertCutFlowsTP[i]->getVarName(); - if(varString.Contains("R_T") || varString.Contains("highPt")){ - //std::cout<<"/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"<getCutLabel()<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_findEff->GetBinContent(ibin)) + ", "; - binWidths+=to_string(h_findEff->GetBinWidth(ibin)) + ", "; - binErrors+=to_string(h_findEff->GetBinError(ibin)) + ", "; - binCenters+=to_string(h_findEff->GetBinCenter(ibin)) + ", "; - } - binValues+="]"; - binWidths+="]"; - binErrors+="]"; - binCenters+="]"; - //std::cout<<"binValues: "<SetAxisRange(0, 1.1, "Y"); - h_findEff->Draw(); - } - else{ - h_findEff->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - c.SaveAs(VERTDIR + "/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"); - } - std::cout<<"fakeEff_trackVertex"<Clear(); - for(uint j=1; jClone(); - h_fakeEff->Divide(vertexCutFlows[i][1][j],vertexCutFlows[i][1][0],1.0,1.0,"B"); - h_fakeEff->SetStats(0); - if(j!=10){ - h_fakeEff->SetLineColor(j); - h_fakeEff->SetMarkerColor(j); - } - else{ - h_fakeEff->SetLineColor(40); - h_fakeEff->SetMarkerColor(40); - } - l->AddEntry(h_fakeEff,vertCuts[j]->getCutLabel(),"lp"); - if(j==1){ - raiseMax(h_fakeEff); - h_fakeEff->Draw(); - } - else{ - h_fakeEff->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - c.SaveAs(VERTDIR + "/h_fakeEff_trackVertex_" + vertCutFlows[i]->getVarName() + ".pdf"); - } - std::cout<<"correctVsFalse"<Clear(); - for(uint k=0; kSetStats(0); - vertexCutFlows[i][k][j]->Scale(1./vertexCutFlows[i][k][j]->Integral()); - TString varString = vertCutFlows[i]->getVarName(); - if(varString.Contains("score")){ - //std::cout<<"/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"<GetNbinsX()+1); ibin++){ - binValues+=to_string(vertexCutFlows[i][k][j]->GetBinContent(ibin)) + ", "; - } - binValues+="]"; - //std::cout<<"binValues: "<SetLineColor(k+1); - vertexCutFlows[i][k][j]->SetMarkerColor(k+1); - } - else{ - vertexCutFlows[i][k][j]->SetLineColor(40); - vertexCutFlows[i][k][j]->SetMarkerColor(40); - } - l->AddEntry(vertexCutFlows[i][k][j],vertType[k],"l"); - if(k==0){ - removeFlows(vertexCutFlows[i][k+1][j]); - vertexCutFlows[i][k+1][j]->Scale(1./vertexCutFlows[i][k+1][j]->Integral()); - raiseMax(vertexCutFlows[i][k][j],vertexCutFlows[i][k+1][j]); - vertexCutFlows[i][k][j]->Draw("HIST"); - } - else{ - vertexCutFlows[i][k][j]->Draw("HIST,SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - c.SaveAs(VERTDIR + "/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"); - } - } - std::cout<<"trueVertex_charge_vs_numTPs"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trueVertex_charge_vs_numTPs); - h_trueVertex_charge_vs_numTPs->SetStats(0); - c.SetLogz(); - h_trueVertex_charge_vs_numTPs->Draw("COLZ"); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/h_trueVertex_charge_vs_numTPs.pdf"); - delete h_trueVertex_charge_vs_numTPs; - c.SetLogz(0); - - std::cout<<"numSelectedTrks"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numSelectedTrks); - h_numSelectedTrks->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_numSelectedTrks->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + ".pdf"); - h_numSelectedTrks->SetStats(0); - h_numSelectedTrks->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + "_noStatBox.pdf"); - delete h_numSelectedTrks; - - h_numSelectedTrks_zoomOut->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numSelectedTrks_zoomOut); - h_numSelectedTrks_zoomOut->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_numSelectedTrks_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + ".pdf"); - h_numSelectedTrks_zoomOut->SetStats(0); - h_numSelectedTrks_zoomOut->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + "_noStatBox.pdf"); - delete h_numSelectedTrks_zoomOut; - - std::cout<<"trk H_T"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_H_T); - h_trk_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_H_T->GetName() + ".pdf"); - delete h_trk_H_T; - - h_trk_oneMatch_H_T->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_oneMatch_H_T); - h_trk_oneMatch_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_oneMatch_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_oneMatch_H_T->GetName() + ".pdf"); - delete h_trk_oneMatch_H_T; - - std::cout<<"trkMET"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_MET); - h_trk_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_MET->GetName() + ".pdf"); - delete h_trk_MET; - - h_trk_oneMatch_MET->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_oneMatch_MET); - h_trk_oneMatch_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_oneMatch_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_oneMatch_MET->GetName() + ".pdf"); - delete h_trk_oneMatch_MET; - - std::cout<<"tp HT"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_tp_H_T); - h_tp_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_tp_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_tp_H_T->GetName() + ".pdf"); - delete h_tp_H_T; - std::cout<<"tp MET"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_tp_MET); - h_tp_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_tp_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_tp_MET->GetName() + ".pdf"); - delete h_tp_MET; -#if 0 - int numPart = numPart_primary_noCuts.size(); - TH1F *h_numPart_primary_noCuts = new TH1F("h_numPart_primary_noCuts","h_numPart_primary_noCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_chi2rzdofCuts = new TH1F("h_numPart_primary_chi2rzdofCuts","h_numPart_primary_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_bendchi2Cuts = new TH1F("h_numPart_primary_bendchi2Cuts","h_numPart_primary_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_chi2rphidofCuts = new TH1F("h_numPart_primary_chi2rphidofCuts","h_numPart_primary_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_nstubCuts = new TH1F("h_numPart_primary_nstubCuts","h_numPart_primary_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_ptCuts = new TH1F("h_numPart_primary_ptCuts","h_numPart_primary_ptCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_d0Cuts = new TH1F("h_numPart_primary_d0Cuts","h_numPart_primary_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_z0Cuts = new TH1F("h_numPart_primary_z0Cuts","h_numPart_primary_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); - - int binNum = 1; - for(const auto & [key, value] : numPart_primary_noCuts){ - h_numPart_primary_noCuts->SetBinContent(binNum,value); - h_numPart_primary_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_noCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_noCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_ptCuts){ - h_numPart_primary_ptCuts->SetBinContent(binNum,value); - h_numPart_primary_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_ptCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_ptCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_d0Cuts){ - h_numPart_primary_d0Cuts->SetBinContent(binNum,value); - h_numPart_primary_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_d0Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_chi2rzdofCuts){ - h_numPart_primary_chi2rzdofCuts->SetBinContent(binNum,value); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_chi2rzdofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_bendchi2Cuts){ - h_numPart_primary_bendchi2Cuts->SetBinContent(binNum,value); - h_numPart_primary_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_bendchi2Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_chi2rphidofCuts){ - h_numPart_primary_chi2rphidofCuts->SetBinContent(binNum,value); - h_numPart_primary_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_chi2rphidofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_nstubCuts){ - h_numPart_primary_nstubCuts->SetBinContent(binNum,value); - h_numPart_primary_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_nstubCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_z0Cuts){ - h_numPart_primary_z0Cuts->SetBinContent(binNum,value); - h_numPart_primary_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_z0Cuts); - h_numPart_primary_chi2rzdofCuts->SetName("partEff_pt_primary"); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); - h_numPart_primary_chi2rzdofCuts->Divide(h_numPart_primary_chi2rzdofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_chi2rzdofCuts->SetLineColor(1); - h_numPart_primary_chi2rzdofCuts->SetMarkerColor(1); - h_numPart_primary_chi2rzdofCuts->SetStats(0); - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); - h_numPart_primary_chi2rzdofCuts->Draw(); - h_numPart_primary_bendchi2Cuts->Divide(h_numPart_primary_bendchi2Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_bendchi2Cuts->SetLineColor(2); - h_numPart_primary_bendchi2Cuts->SetMarkerColor(2); - h_numPart_primary_bendchi2Cuts->SetStats(0); - h_numPart_primary_bendchi2Cuts->Draw("SAME"); - h_numPart_primary_chi2rphidofCuts->Divide(h_numPart_primary_chi2rphidofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_chi2rphidofCuts->SetLineColor(3); - h_numPart_primary_chi2rphidofCuts->SetMarkerColor(3); - h_numPart_primary_chi2rphidofCuts->SetStats(0); - h_numPart_primary_chi2rphidofCuts->Draw("SAME"); - h_numPart_primary_nstubCuts->Divide(h_numPart_primary_nstubCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_nstubCuts->SetLineColor(4); - h_numPart_primary_nstubCuts->SetMarkerColor(4); - h_numPart_primary_nstubCuts->SetStats(0); - h_numPart_primary_nstubCuts->Draw("SAME"); - h_numPart_primary_ptCuts->Divide(h_numPart_primary_ptCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_ptCuts->SetLineColor(5); - h_numPart_primary_ptCuts->SetMarkerColor(5); - h_numPart_primary_ptCuts->SetStats(0); - h_numPart_primary_ptCuts->Draw("SAME"); - h_numPart_primary_d0Cuts->Divide(h_numPart_primary_d0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_d0Cuts->SetLineColor(6); - h_numPart_primary_d0Cuts->SetMarkerColor(6); - h_numPart_primary_d0Cuts->SetStats(0); - h_numPart_primary_d0Cuts->Draw("SAME"); - h_numPart_primary_z0Cuts->Divide(h_numPart_primary_z0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_z0Cuts->SetLineColor(7); - h_numPart_primary_z0Cuts->SetMarkerColor(7); - h_numPart_primary_z0Cuts->SetStats(0); - h_numPart_primary_z0Cuts->Draw("SAME"); - mySmallText(0.4, 0.82, 1, ctxt); - l->Clear(); - l->AddEntry(h_numPart_primary_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_primary_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); - l->AddEntry(h_numPart_primary_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_primary_nstubCuts,"n_{stub} Cut","lp"); - l->AddEntry(h_numPart_primary_ptCuts,"p_{T} Cut","lp"); - l->AddEntry(h_numPart_primary_d0Cuts,"d_{0} Cut","lp"); - l->AddEntry(h_numPart_primary_z0Cuts,"z_{0} Cut","lp"); - l->Draw(); - c.SaveAs(DIR + "/h_partEffOverlay_pt_primary.pdf"); - delete h_numPart_primary_noCuts; - delete h_numPart_primary_ptCuts; - delete h_numPart_primary_d0Cuts; - delete h_numPart_primary_chi2rzdofCuts; - delete h_numPart_primary_bendchi2Cuts; - delete h_numPart_primary_chi2rphidofCuts; - delete h_numPart_primary_nstubCuts; - delete h_numPart_primary_z0Cuts; - - numPart = numPart_np_noCuts.size(); - TH1F *h_numPart_np_noCuts = new TH1F("h_numPart_np_noCuts","h_numPart_np_noCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_chi2rzdofCuts = new TH1F("h_numPart_np_chi2rzdofCuts","h_numPart_np_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_bendchi2Cuts = new TH1F("h_numPart_np_bendchi2Cuts","h_numPart_np_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_chi2rphidofCuts = new TH1F("h_numPart_np_chi2rphidofCuts","h_numPart_np_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_nstubCuts = new TH1F("h_numPart_np_nstubCuts","h_numPart_np_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_ptCuts = new TH1F("h_numPart_np_ptCuts","h_numPart_np_ptCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_d0Cuts = new TH1F("h_numPart_np_d0Cuts","h_numPart_np_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_z0Cuts = new TH1F("h_numPart_np_z0Cuts","h_numPart_np_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); - - binNum = 1; - for(const auto & [key, value] : numPart_np_noCuts){ - h_numPart_np_noCuts->SetBinContent(binNum,value); - h_numPart_np_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_noCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_noCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_ptCuts){ - h_numPart_np_ptCuts->SetBinContent(binNum,value); - h_numPart_np_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_ptCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_ptCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_d0Cuts){ - h_numPart_np_d0Cuts->SetBinContent(binNum,value); - h_numPart_np_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_d0Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_chi2rzdofCuts){ - h_numPart_np_chi2rzdofCuts->SetBinContent(binNum,value); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_chi2rzdofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_bendchi2Cuts){ - h_numPart_np_bendchi2Cuts->SetBinContent(binNum,value); - h_numPart_np_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_bendchi2Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_chi2rphidofCuts){ - h_numPart_np_chi2rphidofCuts->SetBinContent(binNum,value); - h_numPart_np_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_chi2rphidofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_nstubCuts){ - h_numPart_np_nstubCuts->SetBinContent(binNum,value); - h_numPart_np_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_nstubCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_z0Cuts){ - h_numPart_np_z0Cuts->SetBinContent(binNum,value); - h_numPart_np_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_z0Cuts); - h_numPart_np_chi2rzdofCuts->SetName("partEff_pt_np"); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); - h_numPart_np_chi2rzdofCuts->Divide(h_numPart_np_chi2rzdofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_chi2rzdofCuts->SetLineColor(1); - h_numPart_np_chi2rzdofCuts->SetMarkerColor(1); - h_numPart_np_chi2rzdofCuts->SetStats(0); - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); - h_numPart_np_chi2rzdofCuts->Draw(); - h_numPart_np_bendchi2Cuts->Divide(h_numPart_np_bendchi2Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_bendchi2Cuts->SetLineColor(2); - h_numPart_np_bendchi2Cuts->SetMarkerColor(2); - h_numPart_np_bendchi2Cuts->SetStats(0); - h_numPart_np_bendchi2Cuts->Draw("SAME"); - h_numPart_np_chi2rphidofCuts->Divide(h_numPart_np_chi2rphidofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_chi2rphidofCuts->SetLineColor(3); - h_numPart_np_chi2rphidofCuts->SetMarkerColor(3); - h_numPart_np_chi2rphidofCuts->SetStats(0); - h_numPart_np_chi2rphidofCuts->Draw("SAME"); - h_numPart_np_nstubCuts->Divide(h_numPart_np_nstubCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_nstubCuts->SetLineColor(4); - h_numPart_np_nstubCuts->SetMarkerColor(4); - h_numPart_np_nstubCuts->SetStats(0); - h_numPart_np_nstubCuts->Draw("SAME"); - h_numPart_np_ptCuts->Divide(h_numPart_np_ptCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_ptCuts->SetLineColor(5); - h_numPart_np_ptCuts->SetMarkerColor(5); - h_numPart_np_ptCuts->SetStats(0); - h_numPart_np_ptCuts->Draw("SAME"); - h_numPart_np_d0Cuts->Divide(h_numPart_np_d0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_d0Cuts->SetLineColor(6); - h_numPart_np_d0Cuts->SetMarkerColor(6); - h_numPart_np_d0Cuts->SetStats(0); - h_numPart_np_d0Cuts->Draw("SAME"); - h_numPart_np_z0Cuts->Divide(h_numPart_np_z0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_z0Cuts->SetLineColor(7); - h_numPart_np_z0Cuts->SetMarkerColor(7); - h_numPart_np_z0Cuts->SetStats(0); - h_numPart_np_z0Cuts->Draw("SAME"); - mySmallText(0.4, 0.82, 1, ctxt); - l->Clear(); - l->AddEntry(h_numPart_np_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_np_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); - l->AddEntry(h_numPart_np_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_np_nstubCuts,"n_{stub} Cut","lp"); - l->AddEntry(h_numPart_np_ptCuts,"p_{T} Cut","lp"); - l->AddEntry(h_numPart_np_d0Cuts,"d_{0} Cut","lp"); - l->AddEntry(h_numPart_np_z0Cuts,"z_{0} Cut","lp"); - l->Draw(); - c.SaveAs(DIR + "/h_partEffOverlay_pt_np.pdf"); - delete h_numPart_np_noCuts; - delete h_numPart_np_ptCuts; - delete h_numPart_np_d0Cuts; - delete h_numPart_np_chi2rzdofCuts; - delete h_numPart_np_bendchi2Cuts; - delete h_numPart_np_chi2rphidofCuts; - delete h_numPart_np_nstubCuts; - delete h_numPart_np_z0Cuts; -#endif - h_trueVertex_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trueVertex_numAllCuts); - h_trueVertex_numAllCuts->SetStats(0); - h_trueVertex_numAllCuts->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trueVertex_numAllCuts->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trueVertex_numAllCuts->GetName() + ".pdf"); - delete h_trueVertex_numAllCuts; - - h_trackVertexBranch_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trackVertexBranch_numAllCuts); - c.SetLogy(); - h_trackVertexBranch_numAllCuts->SetStats(0); - h_trackVertexBranch_numAllCuts->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trackVertexBranch_numAllCuts->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trackVertexBranch_numAllCuts->GetName() + ".pdf"); - delete h_trackVertexBranch_numAllCuts; - c.SetLogy(0); - std::cout<<"triggerEff"<GetNbinsX()+1); j++){ - numTriggers += vertexNumVertices[i]->GetBinContent(j); - } - std::cout<<"i cut: "<SetBinContent(i,numTriggers/nevt); - h_triggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); - } - raiseMax(h_triggerEff); - h_triggerEff->SetStats(0); - h_triggerEff->Draw("HIST, TEXT"); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_triggerEff->GetName() + ".pdf"); - delete h_triggerEff; - for(uint i=0; iFit("fit","R"); - h_res_tp_trk_x->SetStats(0); - h_res_tp_trk_x->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_x->Write("", TObject::kOverwrite); - - std::cout<<"h_res_tp_trk_x"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_x->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_x->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_x->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - //std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_x; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_x_zoomOut); - h_res_tp_trk_x_zoomOut->Fit("fit","R"); - h_res_tp_trk_x_zoomOut->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_x_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_x_zoomOut->GetName() + ".pdf"); - delete h_res_tp_trk_x_zoomOut; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_y); - h_res_tp_trk_y->Fit("fit","R"); - h_res_tp_trk_y->SetStats(0); - h_res_tp_trk_y->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_y->Write("", TObject::kOverwrite); - std::cout<<"h_res_tp_trk_y"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_y->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_y->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_y->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - //std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_y; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_y_zoomOut); - h_res_tp_trk_y_zoomOut->Fit("fit","R"); - h_res_tp_trk_y_zoomOut->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_y_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_y_zoomOut->GetName() + ".pdf"); - delete h_res_tp_trk_y_zoomOut; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_r); - h_res_tp_trk_r->Fit("fit"); - h_res_tp_trk_r->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_r->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_r->GetName() + ".pdf"); - delete h_res_tp_trk_r; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_phi); - h_res_tp_trk_phi->Fit("fit"); - h_res_tp_trk_phi->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_phi->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_phi->GetName() + ".pdf"); - delete h_res_tp_trk_phi; - delete fit; - - fit = new TF1("fit", "gaus", -10, 10); - removeFlows(h_res_tp_trk_z); - h_res_tp_trk_z->Fit("fit"); - h_res_tp_trk_z->SetStats(0); - h_res_tp_trk_z->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_z->Write("", TObject::kOverwrite); - std::cout<<"h_res_tp_trk_z"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_z->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_z->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_z->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - //std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_z; - delete fit; - - //Geometric plot of circle projections and vertex locations - /*Double_t x_min=0; - Double_t x_max=0; - Double_t y_min=0; - Double_t y_max=0; - Double_t x_values[6] = {geomTrackVertex.a.x0-geomTrackVertex.a.rho,geomTrackVertex.a.x0+geomTrackVertex.a.rho,geomTrackVertex.b.x0-geomTrackVertex.b.rho,geomTrackVertex.b.x0+geomTrackVertex.b.rho,geomTrackVertex.x_dv,geomTrueVertex.x_dv}; - Double_t y_values[6] = {geomTrackVertex.a.y0-geomTrackVertex.a.rho,geomTrackVertex.a.y0+geomTrackVertex.a.rho,geomTrackVertex.b.y0-geomTrackVertex.b.rho,geomTrackVertex.b.y0+geomTrackVertex.b.rho,geomTrackVertex.y_dv,geomTrueVertex.y_dv}; - for(uint i=0;i<6;i++){ - if(x_values[i]x_max) x_max = x_values[i]; - if(y_values[i]y_max) y_max = y_values[i]; - } - x_min*=1.1; - x_max*=1.1; - y_min*=1.1; - y_max*=1.1; - c.DrawFrame(x_min,y_min,x_max,y_max); - float trk1_POCA_x = geomTrackVertex.a.d0*sin(geomTrackVertex.a.phi); - float trk1_POCA_y = -1*geomTrackVertex.a.d0*cos(geomTrackVertex.a.phi); - float trk2_POCA_x = geomTrackVertex.b.d0*sin(geomTrackVertex.b.phi); - float trk2_POCA_y = -1*geomTrackVertex.b.d0*cos(geomTrackVertex.b.phi); - TEllipse *circleTrk1 = new TEllipse(geomTrackVertex.a.x0,geomTrackVertex.a.y0,geomTrackVertex.a.rho,geomTrackVertex.a.rho); - circleTrk1->SetLineColor(kGreen); - circleTrk1->SetFillStyle(0); - TEllipse *circleTrk2 = new TEllipse(geomTrackVertex.b.x0,geomTrackVertex.b.y0,geomTrackVertex.b.rho,geomTrackVertex.b.rho); - circleTrk2->SetLineColor(kBlack); - circleTrk2->SetFillStyle(0); - auto trackTraj1 = new TF1("trackTraj1","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); - trackTraj1->SetParameters(geomTrackVertex.a.phi,trk1_POCA_x,trk1_POCA_y); - trackTraj1->SetLineColor(kGreen); - auto trackTraj2 = new TF1("trackTraj2","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); - trackTraj2->SetParameters(geomTrackVertex.b.phi,trk2_POCA_x,trk2_POCA_y); - trackTraj2->SetLineColor(kBlack); - TMarker m1(geomTrackVertex.x_dv,geomTrackVertex.y_dv,8); - TMarker m2(geomTrueVertex.x_dv,geomTrueVertex.y_dv,8); - TMarker m3(trk1_POCA_x,trk1_POCA_y,5); - TMarker m4(trk2_POCA_x,trk2_POCA_y,5); - //std::cout<<"trk1 POCA: "<Draw("SAME"); - circleTrk2->Draw("SAME"); - trackTraj1->Draw("SAME"); - trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeom.pdf"); - c.SaveAs(DIR + "/h_circleFitGeom.pdf"); - x_min = geomTrackVertex.x_dv; - x_max = geomTrueVertex.x_dv; - y_min = geomTrackVertex.y_dv; - y_max = geomTrueVertex.y_dv; - if(geomTrueVertex.x_dvDraw("SAME"); - circleTrk2->Draw("SAME"); - //trackTraj1->Draw("SAME"); - //trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); - c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); - x_min=geomTrackVertex.x_dv; - x_max=geomTrackVertex.x_dv; - y_min=geomTrackVertex.y_dv; - y_max=geomTrackVertex.y_dv; - Double_t x_values_POCA[4] = {geomTrackVertex.x_dv,geomTrueVertex.x_dv,trk1_POCA_x,trk2_POCA_x}; - Double_t y_values_POCA[4] = {geomTrackVertex.y_dv,geomTrueVertex.y_dv,trk1_POCA_y,trk2_POCA_y}; - for(uint i=0;i<4;i++){ - if(x_values_POCA[i]x_max) x_max = x_values_POCA[i]; - if(y_values_POCA[i]y_max) y_max = y_values_POCA[i]; - } - x_min-=1; - x_max+=1; - y_min-=1; - y_max+=1; - c.DrawFrame(x_min,y_min,x_max,y_max); - circleTrk1->Draw("SAME"); - circleTrk2->Draw("SAME"); - trackTraj1->Draw("SAME"); - trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); - c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); - fout->Close()*/; - - for(uint i=0; ix0; // Centers of the circles - float y1 = a->y0; // - float x2 = b->x0; // - float y2 = b->y0; // - float R1 = a->rho; // Radii of the circles - float R2 = b->rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if((R>=(R1-R2)) && (R<=(R1+R2))){ - return (0); - } - else if(R==0){ - return (-99999.0); - } - else{ - - return(R-R1-R2); - } -} - -Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho; // Radii of the circles - float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if((R>=(R1-R2)) && (R<=(R1+R2))){ - return (0); - } - else if(R==0){ - return (-99999.0); - } - else{ - - return(R-R1-R2); - } -} - -Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho; // Radii of the circles - float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if(R==0) return -1; - float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); - float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; - float co2 = 0; - if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); - float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); - float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); - float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); - float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); - float ix1_z1 = a.z(ix1_x,ix1_y); - float ix1_z2 = b.z(ix1_x,ix1_y); - float ix1_delz = fabs(ix1_z1-ix1_z2); - float ix2_z1 = a.z(ix2_x,ix2_y); - float ix2_z2 = b.z(ix2_x,ix2_y); - float ix2_delz = fabs(ix2_z1-ix2_z2); - //std::cout<<"R: "<0) ? true : false; - bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; - bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; - bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; - //std::cout<<"ix1 inTraj: "<SetFrameBorderMode(0); - gStyle->SetFrameFillColor(0); - gStyle->SetCanvasBorderMode(0); - gStyle->SetCanvasColor(0); - gStyle->SetPadBorderMode(0); - gStyle->SetPadColor(0); - gStyle->SetStatColor(0); - gStyle->SetHistLineColor(1); - - gStyle->SetPalette(1); - - // set the paper & margin sizes - gStyle->SetPaperSize(20, 26); - gStyle->SetPadTopMargin(0.05); - gStyle->SetPadRightMargin(0.19); - gStyle->SetPadBottomMargin(0.16); - gStyle->SetPadLeftMargin(0.12); - - // set title offsets (for axis label) - gStyle->SetTitleXOffset(1.4); - gStyle->SetTitleYOffset(1.0); - - // use large fonts - gStyle->SetTextFont(42); - gStyle->SetTextSize(0.05); - gStyle->SetLabelFont(42, "x"); - gStyle->SetTitleFont(42, "x"); - gStyle->SetLabelFont(42, "y"); - gStyle->SetTitleFont(42, "y"); - gStyle->SetLabelFont(42, "z"); - gStyle->SetTitleFont(42, "z"); - gStyle->SetLabelSize(0.05, "x"); - gStyle->SetTitleSize(0.05, "x"); - gStyle->SetLabelSize(0.05, "y"); - gStyle->SetTitleSize(0.05, "y"); - gStyle->SetLabelSize(0.05, "z"); - gStyle->SetTitleSize(0.05, "z"); - - // use bold lines and markers - gStyle->SetMarkerStyle(20); - gStyle->SetMarkerSize(1.2); - gStyle->SetHistLineWidth(2.); - gStyle->SetLineStyleString(2, "[12 12]"); - - // get rid of error bar caps - gStyle->SetEndErrorSize(0.); - - // do not display any of the standard histogram decorations - gStyle->SetOptTitle(0); - //gStyle->SetOptStat(0); - gStyle->SetOptFit(0); - - // put tick marks on top and RHS of plots - gStyle->SetPadTickX(1); - gStyle->SetPadTickY(1); -} - -void mySmallText(Double_t x, Double_t y, Color_t color, char *text) -{ - Double_t tsize = 0.044; - TLatex l; - l.SetTextSize(tsize); - l.SetNDC(); - l.SetTextColor(color); - l.DrawLatex(x, y, text); -} - -void removeFlows(TH1F* h) -{ - int nbins = h->GetNbinsX(); - double underflow = h->GetBinContent(0); - double overflow = h->GetBinContent(nbins+1); - h->AddBinContent(1,underflow); - h->AddBinContent(nbins,overflow); - h->SetBinContent(0,0); - h->SetBinContent(nbins+1,0); -} - -void removeFlows(TH2F* h) -{ -} From be063e64591f3a7fc6ecda55e42a5a7833698807 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 1 Jul 2024 14:20:37 +0200 Subject: [PATCH 08/36] Changing BDT model to slimmed version, moved track selection to track selection producer, and added divide by 0 checks --- .../interface/DisplacedVertexProducer.h | 54 +++--- .../plugins/DisplacedVertexProducer.cc | 66 +++---- .../plugins/L1TrackSelectionProducer.cc | 167 ++++++++++++++++-- .../python/DisplacedVertexProducer_cfi.py | 13 +- .../python/l1tTrackSelectionProducer_cfi.py | 41 ++++- 5 files changed, 243 insertions(+), 98 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index c1109fed15cec..6599cd8011720 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -136,7 +136,9 @@ std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) if(a.charge>0){ p_vec *= -1; } - p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + if((p_vec[0]!=0.0) || (p_vec[1]!=0.0)){ + p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + } p_vec *= a.pt; return p_vec; } @@ -155,10 +157,10 @@ class Vertex_Parameters std::vector tracks = {}; float p_mag; float p2_mag; - float openingAngle; + float openingAngle = -999.0; float R_T; - float cos_T; - float alpha_T; + float cos_T = -999.0; + float alpha_T = -999.0; float d_T; float chi2rphidofSum; float chi2rzdofSum; @@ -184,10 +186,14 @@ class Vertex_Parameters std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); std::valarray p_tot = p_trk_1+p_trk_2; p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + if(((p_trk_1[0]!=0.0) || (p_trk_2[1]!=0.0)) && ((p_trk_2[0]!=0.0) || (p_trk_2[1]!=0.0))){ + openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + } R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); - cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); + if((R_T!=0.0) && ((p_tot[0]!=0.0) || (p_tot[1]!=0.0))){ + cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + } phi = atan2(p_tot[1],p_tot[0]); d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); int ndof_1 = 2 * a_in.nstubs - 5; @@ -209,30 +215,6 @@ class Vertex_Parameters delta_eta = fabs(a_in.eta-b_in.eta); } - void addTrack(Track_Parameters trk){ - tracks.push_back(trk); - std::valarray p_tot = {0,0}; - for(auto track : tracks){ - p_tot+= calcPVec(track,x_dv,y_dv); - } - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); - int ndof = 2 * trk.nstubs - 5; - float chi2rphidof = trk.chi2rphi / ndof; - float chi2rzdof = trk.chi2rz / ndof; - float bendchi2 = trk.bendchi2; - chi2rphidofSum+= chi2rphidof; - chi2rzdofSum+= chi2rzdof; - bendchi2Sum+= bendchi2; - numStubsSum+= trk.nstubs; - p2_mag+= pow(trk.pt,2); - MVA1Sum+= trk.MVA1; - MVA2Sum+= trk.MVA2; - } - Vertex_Parameters(){}; ~Vertex_Parameters(){}; }; @@ -245,20 +227,24 @@ constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& class DisplacedVertexProducer : public edm::global::EDProducer<> { public: explicit DisplacedVertexProducer(const edm::ParameterSet&); - ~DisplacedVertexProducer() override {} + ~DisplacedVertexProducer() override = default; private: void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: + typedef TTTrack L1Track; + typedef std::vector TTTrackCollection; + typedef edm::Ref TTTrackRef; + typedef edm::RefVector TTTrackRefCollection; const edm::EDGetTokenT> ttTrackMCTruthToken_; - const edm::EDGetTokenT >> trackToken_; + const edm::EDGetTokenT trackToken_; const std::string outputTrackCollectionName_; const std::string qualityAlgorithm_; const std::string ONNXmodel_; const std::string ONNXInputName_; - const std::vector featureNames_; std::unique_ptr runTime_; + }; #endif diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index d5a0223fe0fd4..5aa719d08ace5 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -105,11 +105,10 @@ Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfig) : ttTrackMCTruthToken_(consumes >(iConfig.getParameter("mcTruthTrackInputTag"))), - trackToken_(consumes > >(iConfig.getParameter("l1TracksInputTag"))), + trackToken_(consumes(iConfig.getParameter("l1TracksInputTag"))), outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), ONNXmodel_(iConfig.getParameter("ONNXmodel")), - ONNXInputName_(iConfig.getParameter("ONNXInputName")), - featureNames_(iConfig.getParameter>("featureNames")) + ONNXInputName_(iConfig.getParameter("ONNXInputName")) { //--- Define EDM output to be written to file (if required) produces(outputTrackCollectionName_); @@ -119,9 +118,9 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { edm::Handle > MCTruthTTTrackHandle; iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle); - edm::Handle > > TTTrackHandle; + edm::Handle TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); - std::vector >::const_iterator iterL1Track; + TTTrackRefCollection::const_iterator iterL1Track; int this_l1track = 0; std::vector selectedTracks; std::vector> selectedTPs; @@ -129,44 +128,29 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr > l1track_ptr(TTTrackHandle, this_l1track); this_l1track++; - float pt = iterL1Track->momentum().perp(); - float eta = iterL1Track->momentum().eta(); - float phi = iterL1Track->momentum().phi(); - float z0 = iterL1Track->z0(); //cm - float x0 = iterL1Track->POCA().x(); - float y0 = iterL1Track->POCA().y(); + float pt = l1track_ptr->momentum().perp(); + float eta = l1track_ptr->momentum().eta(); + float phi = l1track_ptr->momentum().phi(); + float z0 = l1track_ptr->z0(); //cm + float x0 = l1track_ptr->POCA().x(); + float y0 = l1track_ptr->POCA().y(); float d0 = -x0 * sin(phi) + y0 * cos(phi); - float rinv = iterL1Track->rInv(); - float chi2 = iterL1Track->chi2Red(); - float chi2rphi = iterL1Track->chi2XYRed(); - float chi2rz = iterL1Track->chi2ZRed(); - float bendchi2 = iterL1Track->stubPtConsistency(); - float MVA1 = iterL1Track->trkMVA1(); - float MVA2 = iterL1Track->trkMVA2(); - std::vector >, TTStub > > stubRefs = iterL1Track->getStubRefs(); + float rinv = l1track_ptr->rInv(); + float chi2 = l1track_ptr->chi2Red(); + float chi2rphi = l1track_ptr->chi2XYRed(); + float chi2rz = l1track_ptr->chi2ZRed(); + float bendchi2 = l1track_ptr->stubPtConsistency(); + float MVA1 = l1track_ptr->trkMVA1(); + float MVA2 = l1track_ptr->trkMVA2(); + std::vector >, TTStub > > stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); - if( chi2rz<3.0 && MVA2>0.2 && MVA1>0.2 && pt>3.0 && fabs(eta)<2.4){ - - if(fabs(d0)>1.0){ - if(MVA1<=0.5) continue; - } - if(fabs(eta)>1.1 && fabs(eta)<1.7){ - if(nstub<=4) continue; - } - if(fabs(eta)>0.95){ - if(fabs(d0)<=0.08) continue; - } - if(fabs(eta)<=0.95){ - if(fabs(d0)<=0.06) continue; - } - - //std::cout<<"track params: "< my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); - selectedTPs.push_back(my_tp); - } + //std::cout<<"track params: "< my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); + selectedTPs.push_back(my_tp); } + //std::cout<<"num selected tracks: "< product(new std::vector()); @@ -201,9 +185,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e cms::Ort::FloatArrays ortoutputs; float minD0 = vertex.a.d0; if(fabs(vertex.b.d0) Transformed_features = {vertex.delta_z, vertex.R_T, vertex.cos_T, vertex.d_T, vertex.chi2rzdofSum, float(vertex.numStubsSum), vertex.chi2rphidofSum, minD0, vertex.a.pt+vertex.b.pt}; std::vector Transformed_features = {selectedTracks[i].pt, selectedTracks[j].pt, selectedTracks[i].eta, selectedTracks[j].eta, selectedTracks[i].phi, selectedTracks[j].phi, selectedTracks[i].d0, selectedTracks[j].d0, selectedTracks[i].z0, selectedTracks[j].z0, selectedTracks[i].chi2rz, selectedTracks[j].chi2rz, selectedTracks[i].bendchi2, selectedTracks[j].bendchi2, selectedTracks[i].MVA1, selectedTracks[j].MVA1, selectedTracks[i].MVA2, selectedTracks[j].MVA2, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z}; - //cms::Ort::ONNXRuntime Runtime(this->ONNXmodel_); //Setup ONNX runtime ortinput_names.push_back(this->ONNXInputName_); ortoutput_names = runTime_->getOutputNames(); ortinput.push_back(Transformed_features); diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc index 3c71f53073875..b6c1a588c1e38 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc @@ -180,6 +180,41 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { private: double nStubsMin_; }; + struct TTTrackNStubsMinEtaOverlapSelector { + TTTrackNStubsMinEtaOverlapSelector(double nStubsMinEtaOverlap) : nStubsMinEtaOverlap_(nStubsMinEtaOverlap) {} + TTTrackNStubsMinEtaOverlapSelector(const edm::ParameterSet& cfg) + : nStubsMinEtaOverlap_(cfg.template getParameter("nStubsMinEtaOverlap")) {} + bool operator()(const L1Track& t) const { + if((std::abs(t.momentum().eta())<1.7) && (std::abs(t.momentum().eta())>1.1)){ + return (t.getStubRefs().size() >= nStubsMinEtaOverlap_); + } + else{ + return true; + } + } + + private: + double nStubsMinEtaOverlap_; + }; + struct TTTrackWordNStubsMinEtaOverlapSelector { + TTTrackWordNStubsMinEtaOverlapSelector(double nStubsMinEtaOverlap) : nStubsMinEtaOverlap_(nStubsMinEtaOverlap) {} + TTTrackWordNStubsMinEtaOverlapSelector(const edm::ParameterSet& cfg) + : nStubsMinEtaOverlap_(cfg.template getParameter("nStubsMinEtaOverlap")) {} + bool operator()(const L1Track& t) const { + TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); + ap_fixed etaEmulation; + etaEmulation.V = etaEmulationBits.range(); + if((std::abs(etaEmulation.to_double())<1.7) && (std::abs(etaEmulation.to_double())>1.1)){ + return (t.getNStubs() >= nStubsMinEtaOverlap_); + } + else{ + return true; + } + } + + private: + double nStubsMinEtaOverlap_; + }; struct TTTrackNPSStubsMinSelector { TTTrackNPSStubsMinSelector(double nStubsMin, const TrackerTopology& tTopo) : nPSStubsMin_(nStubsMin), tTopo_(tTopo) {} @@ -215,12 +250,61 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordPromptMVAMinSelector(double promptMVAMin) : promptMVAMin_(promptMVAMin) {} TTTrackWordPromptMVAMinSelector(const edm::ParameterSet& cfg) : promptMVAMin_(cfg.template getParameter("promptMVAMin")) {} + bool operator()(const L1Track& t) const { return t.trkMVA1() >= promptMVAMin_; } //change when mva bins in word are set + + private: + double promptMVAMin_; + }; + struct TTTrackPromptMVAMinD0Min1Selector { + TTTrackPromptMVAMinD0Min1Selector(double promptMVAMinD0Min1) : promptMVAMinD0Min1_(promptMVAMinD0Min1) {} + TTTrackPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) + : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} + bool operator()(const L1Track& t) const { + if(std::abs(t.d0())>1.0){ + return (t.trkMVA1() > promptMVAMinD0Min1_); + } + else{ + return true; + } + } + + private: + double promptMVAMinD0Min1_; + }; + struct TTTrackWordPromptMVAMinD0Min1Selector { + TTTrackWordPromptMVAMinD0Min1Selector(double promptMVAMinD0Min1) : promptMVAMinD0Min1_(promptMVAMinD0Min1) {} + TTTrackWordPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) + : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} bool operator()(const L1Track& t) const { - return t.trkMVA1() >= promptMVAMin_; + double floatD0 = t.undigitizeSignedValue(t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); + if(std::abs(floatD0)>1.0){ + return t.trkMVA1() >= promptMVAMinD0Min1_; + } + else{ + return true; + } } //change when mva bins in word are set private: - double promptMVAMin_; + double promptMVAMinD0Min1_; + }; + struct TTTrackDisplacedMVAMinSelector { + TTTrackDisplacedMVAMinSelector(double displacedMVAMin) : displacedMVAMin_(displacedMVAMin) {} + TTTrackDisplacedMVAMinSelector(const edm::ParameterSet& cfg) + : displacedMVAMin_(cfg.template getParameter("displacedMVAMin")) {} + bool operator()(const L1Track& t) const { return t.trkMVA2() >= displacedMVAMin_; } + + private: + double displacedMVAMin_; + }; + struct TTTrackWordDisplacedMVAMinSelector { + TTTrackWordDisplacedMVAMinSelector(double displacedMVAMin) : displacedMVAMin_(displacedMVAMin) {} + TTTrackWordDisplacedMVAMinSelector(const edm::ParameterSet& cfg) + : displacedMVAMin_(cfg.template getParameter("displacedMVAMin")) {} + bool operator()(const L1Track& t) const { return t.trkMVA2() >= displacedMVAMin_; } //change when mva bins in word are set + + private: + double displacedMVAMin_; }; struct TTTrackBendChi2MaxSelector { TTTrackBendChi2MaxSelector(double bendChi2Max) : bendChi2Max_(bendChi2Max) {} @@ -367,12 +451,46 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { double reducedBendChi2MaxNstub5_; }; - typedef AndSelector + struct TTTrackAbsD0MinEtaSelector { + TTTrackAbsD0MinEtaSelector(double absD0MinEtaMin0p95, double absD0MinEtaMax0p95) + : absD0MinEtaMin0p95_(absD0MinEtaMin0p95), absD0MinEtaMax0p95_(absD0MinEtaMax0p95) {} + TTTrackAbsD0MinEtaSelector(const edm::ParameterSet& cfg) + : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), + absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} + bool operator()(const L1Track& t) const { + return (((std::abs(t.d0())>absD0MinEtaMin0p95_) && (std::abs(t.momentum().eta())>0.95)) || ((std::abs(t.d0())>absD0MinEtaMax0p95_) && (std::abs(t.momentum().eta())<=0.95))); + } + + private: + double absD0MinEtaMin0p95_; + double absD0MinEtaMax0p95_; + }; + struct TTTrackWordAbsD0MinEtaSelector { + TTTrackWordAbsD0MinEtaSelector(double absD0MinEtaMin0p95, double absD0MinEtaMax0p95) + : absD0MinEtaMin0p95_(absD0MinEtaMin0p95), absD0MinEtaMax0p95_(absD0MinEtaMax0p95) {} + TTTrackWordAbsD0MinEtaSelector(const edm::ParameterSet& cfg) + : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), + absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} + bool operator()(const L1Track& t) const { + double floatD0 = t.undigitizeSignedValue(t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); + TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); + ap_fixed etaEmulation; + etaEmulation.V = etaEmulationBits.range(); + return (((std::abs(floatD0)>absD0MinEtaMin0p95_) && (std::abs(etaEmulation.to_double())>0.95)) || ((std::abs(floatD0)>absD0MinEtaMax0p95_) && (std::abs(etaEmulation.to_double())<=0.95))); + } + + private: + double absD0MinEtaMin0p95_; + double absD0MinEtaMax0p95_; + }; + + typedef AndSelector TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector + TTTrackWordNStubsMinSelector, + TTTrackWordNStubsMinEtaOverlapSelector> TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector TTTrackBendChi2Chi2RZChi2RPhiMaxSelector; @@ -384,16 +502,23 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordChi2RPhiMaxNstubSelector, TTTrackWordBendChi2MaxNstubSelector> TTTrackWordChi2MaxNstubSelector; - + typedef AndSelector + TTTrackMVAMinSelector; + typedef AndSelector + TTTrackWordMVAMinSelector; + // ----------member data --------------------------- const edm::EDGetTokenT l1TracksToken_; edm::ESGetToken tTopoToken_; const std::string outputCollectionName_; const edm::ParameterSet cutSet_; - const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; - const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, - reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_; - const int nStubsMin_, nPSStubsMin_; + const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; + const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_, absD0MinEtaMin0p95_, absD0MinEtaMax0p95_; + const int nStubsMin_, nStubsMinEtaOverlap_, nPSStubsMin_; bool processSimulatedTracks_, processEmulatedTracks_; int debug_; }; @@ -411,6 +536,8 @@ L1TrackSelectionProducer::L1TrackSelectionProducer(const edm::ParameterSet& iCon absEtaMax_(cutSet_.getParameter("absEtaMax")), absZ0Max_(cutSet_.getParameter("absZ0Max")), promptMVAMin_(cutSet_.getParameter("promptMVAMin")), + promptMVAMinD0Min1_(cutSet_.getParameter("promptMVAMinD0Min1")), + displacedMVAMin_(cutSet_.getParameter("displacedMVAMin")), bendChi2Max_(cutSet_.getParameter("reducedBendChi2Max")), reducedChi2RZMax_(cutSet_.getParameter("reducedChi2RZMax")), reducedChi2RPhiMax_(cutSet_.getParameter("reducedChi2RPhiMax")), @@ -420,7 +547,10 @@ L1TrackSelectionProducer::L1TrackSelectionProducer(const edm::ParameterSet& iCon reducedChi2RPhiMaxNstub5_(cutSet_.getParameter("reducedChi2RPhiMaxNstub5")), reducedBendChi2MaxNstub4_(cutSet_.getParameter("reducedBendChi2MaxNstub4")), reducedBendChi2MaxNstub5_(cutSet_.getParameter("reducedBendChi2MaxNstub5")), + absD0MinEtaMin0p95_(cutSet_.getParameter("absD0MinEtaMin0p95")), + absD0MinEtaMax0p95_(cutSet_.getParameter("absD0MinEtaMax0p95")), nStubsMin_(cutSet_.getParameter("nStubsMin")), + nStubsMinEtaOverlap_(cutSet_.getParameter("nStubsMinEtaOverlap")), nPSStubsMin_(cutSet_.getParameter("nPSStubsMin")), processSimulatedTracks_(iConfig.getParameter("processSimulatedTracks")), processEmulatedTracks_(iConfig.getParameter("processEmulatedTracks")), @@ -538,31 +668,33 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const vTTTrackEmulationOutput->reserve(nOutputApproximate); } - TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector kinSel(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_); - TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_); + TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector kinSel(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); + TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); TTTrackBendChi2Chi2RZChi2RPhiMaxSelector chi2Sel(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector chi2SelEmu(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackNPSStubsMinSelector nPSStubsSel(nPSStubsMin_, tTopo); - TTTrackPromptMVAMinSelector mvaSel(promptMVAMin_); - TTTrackWordPromptMVAMinSelector mvaSelEmu(promptMVAMin_); + TTTrackMVAMinSelector mvaSel(promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_); + TTTrackWordMVAMinSelector mvaSelEmu(promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_); TTTrackChi2MaxNstubSelector chi2NstubSel({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); TTTrackWordChi2MaxNstubSelector chi2NstubSelEmu({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); + TTTrackAbsD0MinEtaSelector d0Sel(absD0MinEtaMin0p95_,absD0MinEtaMax0p95_); + TTTrackWordAbsD0MinEtaSelector d0SelEmu(absD0MinEtaMin0p95_,absD0MinEtaMax0p95_); for (size_t i = 0; i < nOutputApproximate; i++) { const auto& track = l1TracksHandle->at(i); // Select tracks based on the floating point TTTrack - if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && + if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && d0Sel(track) && chi2NstubSel(track)) { vTTTrackOutput->push_back(TTTrackRef(l1TracksHandle, i)); } // Select tracks based on the bitwise accurate TTTrack_TrackWord - if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && chi2NstubSelEmu(track)) { + if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && d0SelEmu(track) && chi2NstubSelEmu(track)) { vTTTrackEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i)); } } @@ -592,10 +724,13 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& descCutSet.add("absEtaMax", 2.4)->setComment("absolute value of eta must be less than this value"); descCutSet.add("absZ0Max", 15.0)->setComment("z0 must be less than this value, [cm]"); descCutSet.add("nStubsMin", 4)->setComment("number of stubs must be greater than or equal to this value"); + descCutSet.add("nStubsMinEtaOverlap", 4)->setComment("number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7"); descCutSet.add("nPSStubsMin", 0) ->setComment("number of stubs in the PS Modules must be greater than or equal to this value"); descCutSet.add("promptMVAMin", -1.0)->setComment("MVA must be greater than this value"); + descCutSet.add("promptMVAMinD0Min1", -1.0)->setComment("MVA for tracks with |d0|>1cm must be greater than this value"); + descCutSet.add("displacedMVAMin", -1.0)->setComment("Displaced MVA must be greater than this value"); descCutSet.add("reducedBendChi2Max", 2.25)->setComment("bend chi2 must be less than this value"); descCutSet.add("reducedChi2RZMax", 5.0)->setComment("chi2rz/dof must be less than this value"); descCutSet.add("reducedChi2RPhiMax", 20.0)->setComment("chi2rphi/dof must be less than this value"); @@ -611,6 +746,8 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& ->setComment("bend chi2 must be less than this value in nstub==4"); descCutSet.add("reducedBendChi2MaxNstub5", 999.9) ->setComment("bend chi2 must be less than this value in nstub>4"); + descCutSet.add("absD0MinEtaMin0p95", -1.0)->setComment("absolute value of d0 must be greater than this value for tracks with |eta|>0.95"); + descCutSet.add("absD0MinEtaMax0p95", -1.0)->setComment("absolute value of d0 must be greater than this value for tracks with |eta|<=0.95"); desc.add("cutSet", descCutSet); } diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index c5706688157fd..7e737ae509ffe 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -1,10 +1,15 @@ import FWCore.ParameterSet.Config as cms DisplacedVertexProducer = cms.EDProducer('DisplacedVertexProducer', - l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), + l1TracksInputTag = cms.InputTag("l1tTrackSelectionProducerExtendedForDispVert", "Level1TTTracksExtendedSelected"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx"), - ONNXInputName = cms.string("feature_input"), - featureNames = cms.vstring(['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) + ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertSlim_model.onnx"), + ONNXInputName = cms.string("feature_input") ) + +''' +Features for displaced vertex BDT: ['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) + +dv inputs are vertex quantities and trkExt is a displaced track property. The firstTrk suffix means the track quantity comes from the higher pt track associated to a vertex. If there's no firstTrk suffix, then the track property is from the lower pt track associated to a vertex. +''' diff --git a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py index d78ab75961480..0e0c78a20eefc 100644 --- a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py @@ -8,9 +8,12 @@ absEtaMax = cms.double(2.4), # absolute value of eta must be less than this value absZ0Max = cms.double(15.0), # z0 must be less than this value, [cm] nStubsMin = cms.int32(4), # number of stubs must be greater than or equal to this value + nStubsMinEtaOverlap = cms.int32(4), # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 nPSStubsMin = cms.int32(0), # the number of stubs in the PS Modules must be greater than or equal to this value promptMVAMin = cms.double(-1.0), # MVA must be greater than this value + promptMVAMinD0Min1 = cms.double(-1.0), # MVA for tracks with |d0|>1cm must be greater than this value + displacedMVAMin = cms.double(-1.0), # Displaced MVA must be greater than this value reducedBendChi2Max = cms.double(2.25), # bend chi2 must be less than this value reducedChi2RZMax = cms.double(5.0), # chi2rz/dof must be less than this value reducedChi2RPhiMax = cms.double(20.0), # chi2rphi/dof must be less than this value @@ -20,6 +23,8 @@ reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value reducedBendChi2MaxNstub4 = cms.double(999.9), # bend chi2 with nstub==4 must be less than this value reducedBendChi2MaxNstub5 = cms.double(999.9), # bend chi2 with nstub>4 must be less than this value + absD0MinEtaMin0p95 = cms.double(-1.0), #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 + absD0MinEtaMax0p95 = cms.double(-1.0), #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 ), processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values processEmulatedTracks = cms.bool(True), # return selected tracks after cutting on the bitwise emulated values @@ -34,9 +39,12 @@ absEtaMax = 2.4, # absolute value of eta must be less than this value absZ0Max = 15.0, # z0 must be less than this value, [cm] nStubsMin = 4, # number of stubs must be greater than or equal to this value + nStubsMinEtaOverlap = 4, # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 nPSStubsMin = 0, # the number of stubs in the PS Modules must be greater than or equal to this value - promptMVAMin = -1.0, # MVA must be greater than this value + promptMVAMin = -1.0, # MVA must be greater than this value + promptMVAMinD0Min1 = -1.0, # MVA for tracks with |d0|>1cm must be greater than this value + displacedMVAMin = -1.0, # Displaced MVA must be greater than this value reducedBendChi2Max = 2.4, # bend chi2 must be less than this value reducedChi2RZMax = 10.0, # chi2rz/dof must be less than this value reducedChi2RPhiMax = 40.0, # chi2rphi/dof must be less than this value @@ -45,7 +53,9 @@ reducedChi2RPhiMaxNstub4 = cms.double(999.9), # chi2rphi/dof with nstub==4 must be less than this value reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value reducedBendChi2MaxNstub4 = 999.9, # bend chi2 with nstub==4 must be less than this value - reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value + reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value + absD0MinEtaMin0p95 = -1.0, #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 + absD0MinEtaMax0p95 = -1.0, #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 ), processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values processEmulatedTracks = cms.bool(True), # return selected tracks after cutting on the bitwise emulated values @@ -97,4 +107,29 @@ l1tTrackSelectionProducerExtendedForEtMiss = l1tTrackSelectionProducerExtended.clone() - +l1tTrackSelectionProducerExtendedForDispVert = l1tTrackSelectionProducerExtended.clone( + cutSet = dict( + ptMin = 3.0, # pt must be greater than this value, [GeV] + absEtaMax = 2.4, # absolute value of eta must be less than this value + absZ0Max = 999.9, # z0 must be less than this value, [cm] + nStubsMin = 0, # number of stubs must be greater than or equal to this value + nStubsMinEtaOverlap = 5, # number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7 + nPSStubsMin = 0, # the number of stubs in the PS Modules must be greater than or equal to this value + promptMVAMin = 0.2, # MVA must be greater than this value + promptMVAMinD0Min1 = 0.5, # MVA for tracks with |d0|>1cm must be greater than this value + displacedMVAMin = 0.2, # Displaced MVA must be greater than this value + reducedBendChi2Max = 999.9, # bend chi2 must be less than this value + reducedChi2RZMax = 3.0, # chi2rz/dof must be less than this value + reducedChi2RPhiMax = 999.9, # chi2rphi/dof must be less than this value + reducedChi2RZMaxNstub4 = cms.double(999.9), # chi2rz/dof with nstub==4 must be less than this value + reducedChi2RZMaxNstub5 = cms.double(999.9), # chi2rz/dof with nstub>4 must be less than this value + reducedChi2RPhiMaxNstub4 = cms.double(999.9), # chi2rphi/dof with nstub==4 must be less than this value + reducedChi2RPhiMaxNstub5 = cms.double(999.9), # chi2rphi/dof with nstub>4 must be less than this value + reducedBendChi2MaxNstub4 = 999.9, # bend chi2 with nstub==4 must be less than this value + reducedBendChi2MaxNstub5 = 999.9, # bend chi2 with nstub>4 must be less than this value + absD0MinEtaMin0p95 = 0.08, #absolute value of d0 must be greater than this value for tracks with |eta|>0.95 + absD0MinEtaMax0p95 = 0.06, #absolute value of d0 must be greater than this value for tracks with |eta|<=0.95 + ), + processSimulatedTracks = cms.bool(True), # return selected tracks after cutting on the floating point values + processEmulatedTracks = cms.bool(False), # return selected tracks after cutting on the bitwise emulated values + ) From 794bc0d52e4936fa84f0eb1e31e3146c62f184d2 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 1 Jul 2024 16:06:51 +0200 Subject: [PATCH 09/36] Adding check for number of mother partucles in ntuple maker and fixed code formatting --- .../L1Trigger/interface/DisplacedVertex.h | 49 +++- .../interface/DisplacedVertexProducer.h | 158 ++++++----- .../plugins/DisplacedVertexProducer.cc | 250 +++++++++++------- .../plugins/L1TrackSelectionProducer.cc | 106 ++++---- .../test/L1TrackObjectNtupleMaker.cc | 87 +++--- L1Trigger/TrackTrigger/src/L1TrackQuality.cc | 1 + 6 files changed, 383 insertions(+), 268 deletions(-) diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h index 6e4a80b0c921a..4853dddcb0957 100644 --- a/DataFormats/L1Trigger/interface/DisplacedVertex.h +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -9,9 +9,10 @@ namespace l1t { class DisplacedTrueVertex { public: - DisplacedTrueVertex(float d_T, float R_T, float cos_T, float x, float y, float z, float openingAngle, float parentPt): d_T_(d_T), R_T_(R_T), cos_T_(cos_T), x_(x), y_(y), z_(z), openingAngle_(openingAngle), parentPt_(parentPt){} - DisplacedTrueVertex(){} - ~DisplacedTrueVertex(){} + DisplacedTrueVertex(float d_T, float R_T, float cos_T, float x, float y, float z, float openingAngle, float parentPt) + : d_T_(d_T), R_T_(R_T), cos_T_(cos_T), x_(x), y_(y), z_(z), openingAngle_(openingAngle), parentPt_(parentPt) {} + DisplacedTrueVertex() {} + ~DisplacedTrueVertex() {} float d_T() const { return d_T_; } float R_T() const { return R_T_; } float cos_T() const { return cos_T_; } @@ -35,10 +36,41 @@ namespace l1t { class DisplacedTrackVertex { public: - DisplacedTrackVertex(int firstIndexTrk, int secondIndexTrk, int firstIndexPt, int secondIndexPt, int inTraj, float d_T, float R_T, float cos_T, float del_Z, float x, float y, float z, float openingAngle, float parentPt, int delIndexPt, bool isReal): firstIndexTrk_(firstIndexTrk), secondIndexTrk_(secondIndexTrk), firstIndexPt_(firstIndexPt), secondIndexPt_(secondIndexPt), inTraj_(inTraj), d_T_(d_T), R_T_(R_T), cos_T_(cos_T), del_Z_(del_Z), x_(x), y_(y), z_(z), openingAngle_(openingAngle), parentPt_(parentPt), delIndexPt_(delIndexPt), isReal_(isReal){} - DisplacedTrackVertex(){} - ~DisplacedTrackVertex(){} - void setScore(float score){ score_ = score; } + DisplacedTrackVertex(int firstIndexTrk, + int secondIndexTrk, + int firstIndexPt, + int secondIndexPt, + int inTraj, + float d_T, + float R_T, + float cos_T, + float del_Z, + float x, + float y, + float z, + float openingAngle, + float parentPt, + int delIndexPt, + bool isReal) + : firstIndexTrk_(firstIndexTrk), + secondIndexTrk_(secondIndexTrk), + firstIndexPt_(firstIndexPt), + secondIndexPt_(secondIndexPt), + inTraj_(inTraj), + d_T_(d_T), + R_T_(R_T), + cos_T_(cos_T), + del_Z_(del_Z), + x_(x), + y_(y), + z_(z), + openingAngle_(openingAngle), + parentPt_(parentPt), + delIndexPt_(delIndexPt), + isReal_(isReal) {} + DisplacedTrackVertex() {} + ~DisplacedTrackVertex() {} + void setScore(float score) { score_ = score; } float d_T() const { return d_T_; } float R_T() const { return R_T_; } float cos_T() const { return cos_T_; } @@ -56,6 +88,7 @@ namespace l1t { int delIndexPt() const { return delIndexPt_; } bool isReal() const { return isReal_; } float score() const { return score_; } + private: int firstIndexTrk_; int secondIndexTrk_; @@ -77,6 +110,6 @@ namespace l1t { }; typedef std::vector DisplacedTrackVertexCollection; -} +} // namespace l1t #endif diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 6599cd8011720..32bebc4fba2df 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -11,7 +11,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "PhysicsTools/ONNXRuntime/interface/ONNXRuntime.h" #include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" -#include "TMath.h" +#include "TMath.h" #include #include #include @@ -21,8 +21,7 @@ using namespace std; -class Track_Parameters -{ +class Track_Parameters { public: float pt; float d0; @@ -47,22 +46,21 @@ class Track_Parameters float MVA1; float MVA2; - float dist_calc(float x_dv, float y_dv, float x, float y){ - dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); + float dist_calc(float x_dv, float y_dv, float x, float y) { + dxy = TMath::Sqrt((x_dv - x) * (x_dv - x) + (y_dv - y) * (y_dv - y)); return dxy; } - float x(float phi_T=0){ - return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); + float x(float phi_T = 0) { + return (-charge * rho * TMath::Sin(phi - charge * phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); } - float y(float phi_T=0){ - return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); + float y(float phi_T = 0) { + return (charge * rho * TMath::Cos(phi - charge * phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); } - float z(float phi_T=0){ + float z(float phi_T = 0) { float theta = 2 * TMath::ATan(TMath::Exp(-eta)); - return (z0 + rho*phi_T/TMath::Tan(theta)); + return (z0 + rho * phi_T / TMath::Tan(theta)); } - float deltaPhi_T(Double_t phi1, Double_t phi2) - { + float deltaPhi_T(Double_t phi1, Double_t phi2) { Double_t dPhi = phi1 - phi2; if (dPhi >= TMath::Pi()) dPhi -= 2. * TMath::Pi(); @@ -70,30 +68,47 @@ class Track_Parameters dPhi += 2. * TMath::Pi(); return dPhi; } - float phi_T(float x, float y){ + float phi_T(float x, float y) { float num = x - (d0 + charge * rho) * TMath::Sin(phi); float den = y + (d0 + charge * rho) * TMath::Cos(phi); - return ((phi-TMath::ATan2(num,-den))/charge); + return ((phi - TMath::ATan2(num, -den)) / charge); } - float z(float x, float y){ + float z(float x, float y) { float t = std::sinh(eta); - float r = TMath::Sqrt(pow(x,2)+pow(y,2)); - return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math + float r = TMath::Sqrt(pow(x, 2) + pow(y, 2)); + return (z0 + + (t * r * + (1 + (pow(d0, 2) / pow(r, 2)) + + (1.0 / 6.0) * pow(r / (2 * rho), 2)))); // can do higher order terms if necessary from displaced math } - Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0, float MVA2_in=0) - { + Track_Parameters(float pt_in, + float d0_in, + float z0_in, + float eta_in, + float phi_in, + int pdgid_in, + float vx_in, + float vy_in, + float vz_in, + float charge_in = 0, + int index_in = -1, + Track_Parameters* tp_in = nullptr, + int nstubs_in = 0, + float chi2rphi_in = 0, + float chi2rz_in = 0, + float bendchi2_in = 0, + float MVA1_in = 0, + float MVA2_in = 0) { pt = pt_in; d0 = d0_in; z0 = z0_in; eta = eta_in; phi = phi_in; - if(charge_in > 0){ + if (charge_in > 0) { charge = 1; - } - else if (charge_in < 0){ + } else if (charge_in < 0) { charge = -1; - } - else{ + } else { charge = 0; } index = index_in; @@ -102,9 +117,9 @@ class Track_Parameters vy = vy_in; vz = vz_in; tp = tp_in; - rho = fabs(1/charge_in); - x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); - y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); + rho = fabs(1 / charge_in); + x0 = (rho + charge * d0) * TMath::Cos(phi - (charge * TMath::Pi() / 2)); + y0 = (rho + charge * d0) * TMath::Sin(phi - (charge * TMath::Pi() / 2)); nstubs = nstubs_in; chi2rphi = chi2rphi_in; chi2rz = chi2rz_in; @@ -116,35 +131,30 @@ class Track_Parameters ~Track_Parameters(){}; }; -constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) -{ - return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); +constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) { + return (lhs->pt == rhs.pt && lhs->d0 == rhs.d0 && lhs->z0 == rhs.z0 && lhs->eta == rhs.eta && lhs->phi == rhs.phi); } -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) -{ - return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) { + return (lhs.pt == rhs->pt && lhs.d0 == rhs->d0 && lhs.z0 == rhs->z0 && lhs.eta == rhs->eta && lhs.phi == rhs->phi); } -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) -{ - return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) { + return (lhs.pt == rhs.pt && lhs.d0 == rhs.d0 && lhs.z0 == rhs.z0 && lhs.eta == rhs.eta && lhs.phi == rhs.phi); } -std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) -{ - std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; - std::valarray p_vec = {-r_vec[1],r_vec[0]}; - if(a.charge>0){ +inline std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) { + std::valarray r_vec = {float(v_x) - a.x0, float(v_y) - a.y0}; + std::valarray p_vec = {-r_vec[1], r_vec[0]}; + if (a.charge > 0) { p_vec *= -1; } - if((p_vec[0]!=0.0) || (p_vec[1]!=0.0)){ - p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + if ((p_vec[0] != 0.0) || (p_vec[1] != 0.0)) { + p_vec /= TMath::Sqrt(pow(p_vec[0], 2) + pow(p_vec[1], 2)); } p_vec *= a.pt; return p_vec; } -class Vertex_Parameters -{ +class Vertex_Parameters { public: Double_t x_dv; Double_t y_dv; @@ -171,10 +181,14 @@ class Vertex_Parameters float delta_z; float delta_eta; float phi; - Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): - a(a_in), - b(b_in) - { + Vertex_Parameters(Double_t x_dv_in, + Double_t y_dv_in, + Double_t z_dv_in, + Track_Parameters a_in, + Track_Parameters b_in, + float score_in = -1, + int inTraj_in = 4) + : a(a_in), b(b_in) { x_dv = x_dv_in; y_dv = y_dv_in; z_dv = z_dv_in; @@ -182,20 +196,22 @@ class Vertex_Parameters tracks.push_back(a_in); tracks.push_back(b_in); inTraj = inTraj_in; - std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); - std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); - std::valarray p_tot = p_trk_1+p_trk_2; - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - if(((p_trk_1[0]!=0.0) || (p_trk_2[1]!=0.0)) && ((p_trk_2[0]!=0.0) || (p_trk_2[1]!=0.0))){ - openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + std::valarray p_trk_1 = calcPVec(a_in, x_dv_in, y_dv_in); + std::valarray p_trk_2 = calcPVec(b_in, x_dv_in, y_dv_in); + std::valarray p_tot = p_trk_1 + p_trk_2; + p_mag = TMath::Sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2)); + if (((p_trk_1[0] != 0.0) || (p_trk_2[1] != 0.0)) && ((p_trk_2[0] != 0.0) || (p_trk_2[1] != 0.0))) { + openingAngle = + (p_trk_1[0] * p_trk_2[0] + p_trk_1[1] * p_trk_2[1]) / + (TMath::Sqrt(pow(p_trk_1[0], 2) + pow(p_trk_1[1], 2)) * TMath::Sqrt(pow(p_trk_2[0], 2) + pow(p_trk_2[1], 2))); } - R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); - if((R_T!=0.0) && ((p_tot[0]!=0.0) || (p_tot[1]!=0.0))){ - cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + R_T = TMath::Sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); + if ((R_T != 0.0) && ((p_tot[0] != 0.0) || (p_tot[1] != 0.0))) { + cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * TMath::Sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); alpha_T = acos(cos_T); } - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); + phi = atan2(p_tot[1], p_tot[0]); + d_T = fabs(cos(phi) * y_dv_in - sin(phi) * x_dv_in); int ndof_1 = 2 * a_in.nstubs - 5; float chi2rphidof_1 = a_in.chi2rphi / ndof_1; float chi2rzdof_1 = a_in.chi2rz / ndof_1; @@ -210,33 +226,32 @@ class Vertex_Parameters MVA1Sum = a_in.MVA1 + b_in.MVA1; MVA2Sum = a_in.MVA2 + b_in.MVA2; numStubsSum = a_in.nstubs + b_in.nstubs; - p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); - delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); - delta_eta = fabs(a_in.eta-b_in.eta); + p2_mag = pow(a_in.pt, 2) + pow(b_in.pt, 2); + delta_z = fabs(a_in.z(x_dv_in, y_dv_in) - b_in.z(x_dv_in, y_dv_in)); + delta_eta = fabs(a_in.eta - b_in.eta); } Vertex_Parameters(){}; ~Vertex_Parameters(){}; }; -constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) -{ - return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); +constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) { + return (lhs.x_dv == rhs.x_dv && lhs.y_dv == rhs.y_dv && lhs.z_dv == rhs.z_dv); } class DisplacedVertexProducer : public edm::global::EDProducer<> { - public: +public: explicit DisplacedVertexProducer(const edm::ParameterSet&); ~DisplacedVertexProducer() override = default; - private: +private: void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; - private: +private: typedef TTTrack L1Track; typedef std::vector TTTrackCollection; typedef edm::Ref TTTrackRef; - typedef edm::RefVector TTTrackRefCollection; + typedef edm::RefVector TTTrackRefCollection; const edm::EDGetTokenT> ttTrackMCTruthToken_; const edm::EDGetTokenT trackToken_; const std::string outputTrackCollectionName_; @@ -244,7 +259,6 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const std::string ONNXmodel_; const std::string ONNXInputName_; std::unique_ptr runTime_; - }; #endif diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 5aa719d08ace5..148d8bf938307 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -2,101 +2,98 @@ bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } -Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points - return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); +Double_t dist(Double_t x1, Double_t y1, Double_t x2 = 0, Double_t y2 = 0) { // Distance between 2 points + return (TMath::Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); } -Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho;// Radii of the circles +Double_t dist_TPs(Track_Parameters a, Track_Parameters b) { + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if((R>=(R1-R2)) && (R<=(R1+R2))){ + float R = dist(x1, y1, x2, y2); // Distance between centers + if ((R >= (R1 - R2)) && (R <= (R1 + R2))) { return (0); - } - else if(R==0){ + } else if (R == 0) { return (-99999.0); - } - else{ - return(R-R1-R2); + } else { + return (R - R1 - R2); } } -Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho; // Radii of the circles +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t& x_vtx, Double_t& y_vtx, Double_t& z_vtx) { + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if(R==0) return -1; - float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); - float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; + float R = dist(x1, y1, x2, y2); // Distance between centers + if (R == 0) + return -1; + float co1 = (pow(R1, 2) - pow(R2, 2)) / (2 * pow(R, 2)); + float radicand = (2 / pow(R, 2)) * (pow(R1, 2) + pow(R2, 2)) - (pow(pow(R1, 2) - pow(R2, 2), 2) / pow(R, 4)) - 1; float co2 = 0; - if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); - float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); - float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); - float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); - float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); - float ix1_z1 = a.z(ix1_x,ix1_y); - float ix1_z2 = b.z(ix1_x,ix1_y); - float ix1_delz = fabs(ix1_z1-ix1_z2); - float ix2_z1 = a.z(ix2_x,ix2_y); - float ix2_z2 = b.z(ix2_x,ix2_y); - float ix2_delz = fabs(ix2_z1-ix2_z2); - float trk1_POCA[2] = {a.d0*sin(a.phi),-1*a.d0*cos(a.phi)}; - float trk2_POCA[2] = {b.d0*sin(b.phi),-1*b.d0*cos(b.phi)}; - float trk1_ix1_delxy[2] = {ix1_x-trk1_POCA[0],ix1_y-trk1_POCA[1]}; - float trk1_ix2_delxy[2] = {ix2_x-trk1_POCA[0],ix2_y-trk1_POCA[1]}; - float trk2_ix1_delxy[2] = {ix1_x-trk2_POCA[0],ix1_y-trk2_POCA[1]}; - float trk2_ix2_delxy[2] = {ix2_x-trk2_POCA[0],ix2_y-trk2_POCA[1]}; - float trk1_traj[2] = {cos(a.phi),sin(a.phi)}; - float trk2_traj[2] = {cos(b.phi),sin(b.phi)}; - bool trk1_ix1_inTraj = ((trk1_ix1_delxy[0]*trk1_traj[0]+trk1_ix1_delxy[1]*trk1_traj[1])>0) ? true : false; - bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; - bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; - bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; - if(trk1_ix1_inTraj&&trk2_ix1_inTraj&&trk1_ix2_inTraj&&trk2_ix2_inTraj){ - if(ix1_delz 0) + co2 = 0.5 * TMath::Sqrt(radicand); + float ix1_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) + co2 * (y2 - y1); + float ix2_x = 0.5 * (x1 + x2) + co1 * (x2 - x1) - co2 * (y2 - y1); + float ix1_y = 0.5 * (y1 + y2) + co1 * (y2 - y1) + co2 * (x1 - x2); + float ix2_y = 0.5 * (y1 + y2) + co1 * (y2 - y1) - co2 * (x1 - x2); + float ix1_z1 = a.z(ix1_x, ix1_y); + float ix1_z2 = b.z(ix1_x, ix1_y); + float ix1_delz = fabs(ix1_z1 - ix1_z2); + float ix2_z1 = a.z(ix2_x, ix2_y); + float ix2_z2 = b.z(ix2_x, ix2_y); + float ix2_delz = fabs(ix2_z1 - ix2_z2); + float trk1_POCA[2] = {a.d0 * sin(a.phi), -1 * a.d0 * cos(a.phi)}; + float trk2_POCA[2] = {b.d0 * sin(b.phi), -1 * b.d0 * cos(b.phi)}; + float trk1_ix1_delxy[2] = {ix1_x - trk1_POCA[0], ix1_y - trk1_POCA[1]}; + float trk1_ix2_delxy[2] = {ix2_x - trk1_POCA[0], ix2_y - trk1_POCA[1]}; + float trk2_ix1_delxy[2] = {ix1_x - trk2_POCA[0], ix1_y - trk2_POCA[1]}; + float trk2_ix2_delxy[2] = {ix2_x - trk2_POCA[0], ix2_y - trk2_POCA[1]}; + float trk1_traj[2] = {cos(a.phi), sin(a.phi)}; + float trk2_traj[2] = {cos(b.phi), sin(b.phi)}; + bool trk1_ix1_inTraj = ((trk1_ix1_delxy[0] * trk1_traj[0] + trk1_ix1_delxy[1] * trk1_traj[1]) > 0) ? true : false; + bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0] * trk1_traj[0] + trk1_ix2_delxy[1] * trk1_traj[1]) > 0) ? true : false; + bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0] * trk2_traj[0] + trk2_ix1_delxy[1] * trk2_traj[1]) > 0) ? true : false; + bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0] * trk2_traj[0] + trk2_ix2_delxy[1] * trk2_traj[1]) > 0) ? true : false; + if (trk1_ix1_inTraj && trk2_ix1_inTraj && trk1_ix2_inTraj && trk2_ix2_inTraj) { + if (ix1_delz < ix2_delz) { x_vtx = ix1_x; y_vtx = ix1_y; - z_vtx = (ix1_z1+ix1_z2)/2; + z_vtx = (ix1_z1 + ix1_z2) / 2; return 0; - } - else{ + } else { x_vtx = ix2_x; y_vtx = ix2_y; - z_vtx = (ix2_z1+ix2_z2)/2; + z_vtx = (ix2_z1 + ix2_z2) / 2; return 0; } } - if(trk1_ix1_inTraj&&trk2_ix1_inTraj){ + if (trk1_ix1_inTraj && trk2_ix1_inTraj) { x_vtx = ix1_x; y_vtx = ix1_y; - z_vtx = (ix1_z1+ix1_z2)/2; + z_vtx = (ix1_z1 + ix1_z2) / 2; return 1; } - if(trk1_ix2_inTraj&&trk2_ix2_inTraj){ + if (trk1_ix2_inTraj && trk2_ix2_inTraj) { x_vtx = ix2_x; y_vtx = ix2_y; - z_vtx = (ix2_z1+ix2_z2)/2; + z_vtx = (ix2_z1 + ix2_z2) / 2; return 2; - } - else{ - if(ix1_delz >(iConfig.getParameter("mcTruthTrackInputTag"))), - trackToken_(consumes(iConfig.getParameter("l1TracksInputTag"))), - outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), - ONNXmodel_(iConfig.getParameter("ONNXmodel")), - ONNXInputName_(iConfig.getParameter("ONNXInputName")) -{ + : ttTrackMCTruthToken_(consumes>( + iConfig.getParameter("mcTruthTrackInputTag"))), + trackToken_(consumes(iConfig.getParameter("l1TracksInputTag"))), + outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), + ONNXmodel_(iConfig.getParameter("ONNXmodel")), + ONNXInputName_(iConfig.getParameter("ONNXInputName")) { //--- Define EDM output to be written to file (if required) produces(outputTrackCollectionName_); runTime_ = std::make_unique(this->ONNXmodel_); } void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { - edm::Handle > MCTruthTTTrackHandle; + edm::Handle> MCTruthTTTrackHandle; iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle); edm::Handle TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); @@ -124,9 +121,9 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e int this_l1track = 0; std::vector selectedTracks; std::vector> selectedTPs; - + for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { - edm::Ptr > l1track_ptr(TTTrackHandle, this_l1track); + edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); this_l1track++; float pt = l1track_ptr->momentum().perp(); float eta = l1track_ptr->momentum().eta(); @@ -142,50 +139,107 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float bendchi2 = l1track_ptr->stubPtConsistency(); float MVA1 = l1track_ptr->trkMVA1(); float MVA2 = l1track_ptr->trkMVA2(); - std::vector >, TTStub > > stubRefs = l1track_ptr->getStubRefs(); + std::vector>, TTStub>> + stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); //std::cout<<"track params: "< my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); selectedTPs.push_back(my_tp); } - + //std::cout<<"num selected tracks: "< product(new std::vector()); - for(int i=0; i tp_i = selectedTPs[i]; edm::Ptr tp_j = selectedTPs[j]; bool isReal = false; - if(!tp_i.isNull() && !tp_j.isNull()){ - bool isHard_i = false; - bool isHard_j = false; - if(tp_i->genParticles().size() && tp_j->genParticles().size()){ - isHard_i = tp_i->genParticles()[0]->isHardProcess() || tp_i->genParticles()[0]->fromHardProcessFinalState(); - isHard_j = tp_j->genParticles()[0]->isHardProcess() || tp_j->genParticles()[0]->fromHardProcessFinalState(); - } - - if(tp_i->eventId().event()==0 && tp_j->eventId().event()==0 && fabs(tp_i->vx()-tp_j->vx())<0.0001 && fabs(tp_i->vy()-tp_j->vy())<0.0001 && fabs(tp_i->vz()-tp_j->vz())<0.0001 && isHard_i && isHard_j){ - isReal = true; - } + if (!tp_i.isNull() && !tp_j.isNull()) { + bool isHard_i = false; + bool isHard_j = false; + if (!tp_i->genParticles().empty() && !tp_j->genParticles().empty()) { + isHard_i = tp_i->genParticles()[0]->isHardProcess() || tp_i->genParticles()[0]->fromHardProcessFinalState(); + isHard_j = tp_j->genParticles()[0]->isHardProcess() || tp_j->genParticles()[0]->fromHardProcessFinalState(); + } + + if (tp_i->eventId().event() == 0 && tp_j->eventId().event() == 0 && fabs(tp_i->vx() - tp_j->vx()) < 0.0001 && + fabs(tp_i->vy() - tp_j->vy()) < 0.0001 && fabs(tp_i->vz() - tp_j->vz()) < 0.0001 && isHard_i && isHard_j) { + isReal = true; + } } - - int inTraj = calcVertex(selectedTracks[i],selectedTracks[j],x_dv_trk,y_dv_trk,z_dv_trk); + + int inTraj = calcVertex(selectedTracks[i], selectedTracks[j], x_dv_trk, y_dv_trk, z_dv_trk); Vertex_Parameters vertex = Vertex_Parameters(x_dv_trk, y_dv_trk, z_dv_trk, selectedTracks[i], selectedTracks[j]); - l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracks[i].index, selectedTracks[j].index, i, j, inTraj, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z, vertex.x_dv, vertex.y_dv, vertex.z_dv, vertex.openingAngle, vertex.p_mag, fabs(i-j), isReal); + l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracks[i].index, + selectedTracks[j].index, + i, + j, + inTraj, + vertex.d_T, + vertex.R_T, + vertex.cos_T, + vertex.delta_z, + vertex.x_dv, + vertex.y_dv, + vertex.z_dv, + vertex.openingAngle, + vertex.p_mag, + fabs(i - j), + isReal); std::vector ortinput_names; std::vector ortoutput_names; cms::Ort::FloatArrays ortinput; cms::Ort::FloatArrays ortoutputs; float minD0 = vertex.a.d0; - if(fabs(vertex.b.d0) Transformed_features = {selectedTracks[i].pt, selectedTracks[j].pt, selectedTracks[i].eta, selectedTracks[j].eta, selectedTracks[i].phi, selectedTracks[j].phi, selectedTracks[i].d0, selectedTracks[j].d0, selectedTracks[i].z0, selectedTracks[j].z0, selectedTracks[i].chi2rz, selectedTracks[j].chi2rz, selectedTracks[i].bendchi2, selectedTracks[j].bendchi2, selectedTracks[i].MVA1, selectedTracks[j].MVA1, selectedTracks[i].MVA2, selectedTracks[j].MVA2, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z}; + if (fabs(vertex.b.d0) < fabs(minD0)) + minD0 = vertex.b.d0; + std::vector Transformed_features = {selectedTracks[i].pt, + selectedTracks[j].pt, + selectedTracks[i].eta, + selectedTracks[j].eta, + selectedTracks[i].phi, + selectedTracks[j].phi, + selectedTracks[i].d0, + selectedTracks[j].d0, + selectedTracks[i].z0, + selectedTracks[j].z0, + selectedTracks[i].chi2rz, + selectedTracks[j].chi2rz, + selectedTracks[i].bendchi2, + selectedTracks[j].bendchi2, + selectedTracks[i].MVA1, + selectedTracks[j].MVA1, + selectedTracks[i].MVA2, + selectedTracks[j].MVA2, + vertex.d_T, + vertex.R_T, + vertex.cos_T, + vertex.delta_z}; ortinput_names.push_back(this->ONNXInputName_); ortoutput_names = runTime_->getOutputNames(); ortinput.push_back(Transformed_features); @@ -196,7 +250,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e } } // //=== Store output - + iEvent.put(std::move(product), outputTrackCollectionName_); } diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc index b6c1a588c1e38..1bf15bde7cc6e 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc @@ -185,11 +185,10 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackNStubsMinEtaOverlapSelector(const edm::ParameterSet& cfg) : nStubsMinEtaOverlap_(cfg.template getParameter("nStubsMinEtaOverlap")) {} bool operator()(const L1Track& t) const { - if((std::abs(t.momentum().eta())<1.7) && (std::abs(t.momentum().eta())>1.1)){ - return (t.getStubRefs().size() >= nStubsMinEtaOverlap_); - } - else{ - return true; + if ((std::abs(t.momentum().eta()) < 1.7) && (std::abs(t.momentum().eta()) > 1.1)) { + return (t.getStubRefs().size() >= nStubsMinEtaOverlap_); + } else { + return true; } } @@ -204,11 +203,10 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); ap_fixed etaEmulation; etaEmulation.V = etaEmulationBits.range(); - if((std::abs(etaEmulation.to_double())<1.7) && (std::abs(etaEmulation.to_double())>1.1)){ - return (t.getNStubs() >= nStubsMinEtaOverlap_); - } - else{ - return true; + if ((std::abs(etaEmulation.to_double()) < 1.7) && (std::abs(etaEmulation.to_double()) > 1.1)) { + return (t.getNStubs() >= nStubsMinEtaOverlap_); + } else { + return true; } } @@ -250,7 +248,9 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordPromptMVAMinSelector(double promptMVAMin) : promptMVAMin_(promptMVAMin) {} TTTrackWordPromptMVAMinSelector(const edm::ParameterSet& cfg) : promptMVAMin_(cfg.template getParameter("promptMVAMin")) {} - bool operator()(const L1Track& t) const { return t.trkMVA1() >= promptMVAMin_; } //change when mva bins in word are set + bool operator()(const L1Track& t) const { + return t.trkMVA1() >= promptMVAMin_; + } //change when mva bins in word are set private: double promptMVAMin_; @@ -260,11 +260,10 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} bool operator()(const L1Track& t) const { - if(std::abs(t.d0())>1.0){ - return (t.trkMVA1() > promptMVAMinD0Min1_); - } - else{ - return true; + if (std::abs(t.d0()) > 1.0) { + return (t.trkMVA1() > promptMVAMinD0Min1_); + } else { + return true; } } @@ -276,12 +275,12 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordPromptMVAMinD0Min1Selector(const edm::ParameterSet& cfg) : promptMVAMinD0Min1_(cfg.template getParameter("promptMVAMinD0Min1")) {} bool operator()(const L1Track& t) const { - double floatD0 = t.undigitizeSignedValue(t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); - if(std::abs(floatD0)>1.0){ - return t.trkMVA1() >= promptMVAMinD0Min1_; - } - else{ - return true; + double floatD0 = t.undigitizeSignedValue( + t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); + if (std::abs(floatD0) > 1.0) { + return t.trkMVA1() >= promptMVAMinD0Min1_; + } else { + return true; } } //change when mva bins in word are set @@ -301,7 +300,9 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordDisplacedMVAMinSelector(double displacedMVAMin) : displacedMVAMin_(displacedMVAMin) {} TTTrackWordDisplacedMVAMinSelector(const edm::ParameterSet& cfg) : displacedMVAMin_(cfg.template getParameter("displacedMVAMin")) {} - bool operator()(const L1Track& t) const { return t.trkMVA2() >= displacedMVAMin_; } //change when mva bins in word are set + bool operator()(const L1Track& t) const { + return t.trkMVA2() >= displacedMVAMin_; + } //change when mva bins in word are set private: double displacedMVAMin_; @@ -458,7 +459,8 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} bool operator()(const L1Track& t) const { - return (((std::abs(t.d0())>absD0MinEtaMin0p95_) && (std::abs(t.momentum().eta())>0.95)) || ((std::abs(t.d0())>absD0MinEtaMax0p95_) && (std::abs(t.momentum().eta())<=0.95))); + return (((std::abs(t.d0()) > absD0MinEtaMin0p95_) && (std::abs(t.momentum().eta()) > 0.95)) || + ((std::abs(t.d0()) > absD0MinEtaMax0p95_) && (std::abs(t.momentum().eta()) <= 0.95))); } private: @@ -472,11 +474,13 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { : absD0MinEtaMin0p95_(cfg.template getParameter("absD0MinEtaMin0p95")), absD0MinEtaMax0p95_(cfg.template getParameter("absD0MinEtaMax0p95")) {} bool operator()(const L1Track& t) const { - double floatD0 = t.undigitizeSignedValue(t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); + double floatD0 = t.undigitizeSignedValue( + t.getD0Bits(), TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0, 0.0); TTTrack_TrackWord::tanl_t etaEmulationBits = t.getTanlWord(); ap_fixed etaEmulation; etaEmulation.V = etaEmulationBits.range(); - return (((std::abs(floatD0)>absD0MinEtaMin0p95_) && (std::abs(etaEmulation.to_double())>0.95)) || ((std::abs(floatD0)>absD0MinEtaMax0p95_) && (std::abs(etaEmulation.to_double())<=0.95))); + return (((std::abs(floatD0) > absD0MinEtaMin0p95_) && (std::abs(etaEmulation.to_double()) > 0.95)) || + ((std::abs(floatD0) > absD0MinEtaMax0p95_) && (std::abs(etaEmulation.to_double()) <= 0.95))); } private: @@ -484,13 +488,17 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { double absD0MinEtaMax0p95_; }; - typedef AndSelector + typedef AndSelector TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector + TTTrackWordNStubsMinEtaOverlapSelector> TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector; typedef AndSelector TTTrackBendChi2Chi2RZChi2RPhiMaxSelector; @@ -502,22 +510,22 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { TTTrackWordChi2RPhiMaxNstubSelector, TTTrackWordBendChi2MaxNstubSelector> TTTrackWordChi2MaxNstubSelector; - typedef AndSelector + typedef AndSelector TTTrackMVAMinSelector; typedef AndSelector + TTTrackWordPromptMVAMinD0Min1Selector, + TTTrackWordDisplacedMVAMinSelector> TTTrackWordMVAMinSelector; - + // ----------member data --------------------------- const edm::EDGetTokenT l1TracksToken_; edm::ESGetToken tTopoToken_; const std::string outputCollectionName_; const edm::ParameterSet cutSet_; - const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; - const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_, absD0MinEtaMin0p95_, absD0MinEtaMax0p95_; + const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, promptMVAMinD0Min1_, displacedMVAMin_, bendChi2Max_, + reducedChi2RZMax_, reducedChi2RPhiMax_; + const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, + reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_, absD0MinEtaMin0p95_, absD0MinEtaMax0p95_; const int nStubsMin_, nStubsMinEtaOverlap_, nPSStubsMin_; bool processSimulatedTracks_, processEmulatedTracks_; int debug_; @@ -669,7 +677,8 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const } TTTrackPtMinEtaMaxZ0MaxNStubsMinSelector kinSel(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); - TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu(ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); + TTTrackWordPtMinEtaMaxZ0MaxNStubsMinSelector kinSelEmu( + ptMin_, absEtaMax_, absZ0Max_, nStubsMin_, nStubsMinEtaOverlap_); TTTrackBendChi2Chi2RZChi2RPhiMaxSelector chi2Sel(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector chi2SelEmu(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackNPSStubsMinSelector nPSStubsSel(nPSStubsMin_, tTopo); @@ -681,20 +690,21 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const TTTrackWordChi2MaxNstubSelector chi2NstubSelEmu({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); - TTTrackAbsD0MinEtaSelector d0Sel(absD0MinEtaMin0p95_,absD0MinEtaMax0p95_); - TTTrackWordAbsD0MinEtaSelector d0SelEmu(absD0MinEtaMin0p95_,absD0MinEtaMax0p95_); + TTTrackAbsD0MinEtaSelector d0Sel(absD0MinEtaMin0p95_, absD0MinEtaMax0p95_); + TTTrackWordAbsD0MinEtaSelector d0SelEmu(absD0MinEtaMin0p95_, absD0MinEtaMax0p95_); for (size_t i = 0; i < nOutputApproximate; i++) { const auto& track = l1TracksHandle->at(i); // Select tracks based on the floating point TTTrack - if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && d0Sel(track) && - chi2NstubSel(track)) { + if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && + d0Sel(track) && chi2NstubSel(track)) { vTTTrackOutput->push_back(TTTrackRef(l1TracksHandle, i)); } // Select tracks based on the bitwise accurate TTTrack_TrackWord - if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && d0SelEmu(track) && chi2NstubSelEmu(track)) { + if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && d0SelEmu(track) && + chi2NstubSelEmu(track)) { vTTTrackEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i)); } } @@ -724,12 +734,14 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& descCutSet.add("absEtaMax", 2.4)->setComment("absolute value of eta must be less than this value"); descCutSet.add("absZ0Max", 15.0)->setComment("z0 must be less than this value, [cm]"); descCutSet.add("nStubsMin", 4)->setComment("number of stubs must be greater than or equal to this value"); - descCutSet.add("nStubsMinEtaOverlap", 4)->setComment("number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7"); + descCutSet.add("nStubsMinEtaOverlap", 4) + ->setComment("number of stubs must be greater than or equal to this value for tracks with 1.1<|eta|<1.7"); descCutSet.add("nPSStubsMin", 0) ->setComment("number of stubs in the PS Modules must be greater than or equal to this value"); descCutSet.add("promptMVAMin", -1.0)->setComment("MVA must be greater than this value"); - descCutSet.add("promptMVAMinD0Min1", -1.0)->setComment("MVA for tracks with |d0|>1cm must be greater than this value"); + descCutSet.add("promptMVAMinD0Min1", -1.0) + ->setComment("MVA for tracks with |d0|>1cm must be greater than this value"); descCutSet.add("displacedMVAMin", -1.0)->setComment("Displaced MVA must be greater than this value"); descCutSet.add("reducedBendChi2Max", 2.25)->setComment("bend chi2 must be less than this value"); descCutSet.add("reducedChi2RZMax", 5.0)->setComment("chi2rz/dof must be less than this value"); @@ -746,8 +758,10 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& ->setComment("bend chi2 must be less than this value in nstub==4"); descCutSet.add("reducedBendChi2MaxNstub5", 999.9) ->setComment("bend chi2 must be less than this value in nstub>4"); - descCutSet.add("absD0MinEtaMin0p95", -1.0)->setComment("absolute value of d0 must be greater than this value for tracks with |eta|>0.95"); - descCutSet.add("absD0MinEtaMax0p95", -1.0)->setComment("absolute value of d0 must be greater than this value for tracks with |eta|<=0.95"); + descCutSet.add("absD0MinEtaMin0p95", -1.0) + ->setComment("absolute value of d0 must be greater than this value for tracks with |eta|>0.95"); + descCutSet.add("absD0MinEtaMax0p95", -1.0) + ->setComment("absolute value of d0 must be greater than this value for tracks with |eta|<=0.95"); desc.add("cutSet", descCutSet); } diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index 32ef5c5d2e796..133666a4fb82e 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -187,7 +187,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_dv_delIndexPt; std::vector* m_dv_isReal; std::vector* m_dv_score; - + // all L1 tracks (prompt) std::vector* m_trk_pt; std::vector* m_trk_eta; @@ -623,7 +623,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon SaveTrackJets = iConfig.getParameter("SaveTrackJets"); SaveTrackSums = iConfig.getParameter("SaveTrackSums"); runDispVert = iConfig.getParameter("runDispVert"); - + L1StubInputTag = iConfig.getParameter("L1StubInputTag"); MCTruthClusterInputTag = iConfig.getParameter("MCTruthClusterInputTag"); MCTruthStubInputTag = iConfig.getParameter("MCTruthStubInputTag"); @@ -772,7 +772,8 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenJetToken_ = consumes>(GenJetInputTag); GenParticleToken_ = consumes>(GenParticleInputTag); SimVertexToken_ = consumes>(SimVertexInputTag); - if(runDispVert) DispVertToken_ = consumes>(DisplacedVertexInputTag); + if (runDispVert) + DispVertToken_ = consumes>(DisplacedVertexInputTag); L1VertexToken_ = consumes(RecoVertexInputTag); L1VertexEmuToken_ = consumes(RecoVertexEmuInputTag); tTopoToken_ = esConsumes(edm::ESInputTag("", "")); @@ -932,7 +933,7 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_dv_delIndexPt; delete m_dv_isReal; delete m_dv_score; - + delete m_matchtrk_pt; delete m_matchtrk_eta; delete m_matchtrk_phi; @@ -1232,7 +1233,7 @@ void L1TrackObjectNtupleMaker::beginJob() { m_dv_delIndexPt = new std::vector; m_dv_isReal = new std::vector; m_dv_score = new std::vector; - + m_matchtrk_pt = new std::vector; m_matchtrk_eta = new std::vector; m_matchtrk_phi = new std::vector; @@ -1579,7 +1580,7 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("gen_mother_pdgid", &m_gen_mother_pdgid); eventTree->Branch("gen_z0", &m_gen_z0); - if(runDispVert){ + if (runDispVert) { eventTree->Branch("dv_d_T", &m_dv_d_T); eventTree->Branch("dv_R_T", &m_dv_R_T); eventTree->Branch("dv_cos_T", &m_dv_cos_T); @@ -1850,7 +1851,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_gen_mother_pdgid->clear(); m_gen_z0->clear(); - if(runDispVert){ + if (runDispVert) { m_dv_d_T->clear(); m_dv_R_T->clear(); m_dv_cos_T->clear(); @@ -2059,8 +2060,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even //Displaced vertices edm::Handle> DispVertHandle; - if(runDispVert) iEvent.getByToken(DispVertToken_, DispVertHandle); - + if (runDispVert) + iEvent.getByToken(DispVertToken_, DispVertHandle); + //Vertex edm::Handle L1PrimaryVertexHandle; iEvent.getByToken(L1VertexToken_, L1PrimaryVertexHandle); @@ -2216,7 +2218,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } else { edm::LogWarning("DataNotFound") << "\nWarning: GenParticleHandle not found in the event" << std::endl; } - + // loop over displaced vertices if (DispVertHandle.isValid()) { vector::const_iterator dispVertIter; @@ -2239,7 +2241,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dv_isReal->push_back(dispVertIter->isReal()); m_dv_score->push_back(dispVertIter->score()); } - } if (SimVertexHandle.isValid()) { @@ -2537,7 +2538,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trk_matchtp_phi->push_back(myTP_phi); m_trk_matchtp_z0->push_back(myTP_z0); m_trk_matchtp_dxy->push_back(myTP_dxy); - // ---------------------------------------------------------------------------------------------- // store the index to the selected track or -1 if not selected @@ -2727,7 +2727,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float myTP_d0 = -999; float myTP_x0 = -999; float myTP_y0 = -999; - + if (my_tp.isNull()) myFake = 0; else { @@ -2745,31 +2745,31 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even myTP_x0 = my_tp->vertex().x(); myTP_y0 = my_tp->vertex().y(); - + myTP_dxy = sqrt(myTP_x0 * myTP_x0 + myTP_y0 * myTP_y0); - // get d0/z0 propagated back to the IP - float tmp_tp_t = tan(2.0 * atan(1.0) - 2.0 * atan(exp(-myTP_eta))); - float delx = -myTP_x0; - float dely = -myTP_y0; - float A = 0.01 * 0.5696; - float Kmagnitude = A / myTP_pt; - float tmp_tp_charge = my_tp->charge(); - float K = Kmagnitude * tmp_tp_charge; - float d = 0; - float tmp_tp_x0p = delx - (d + 1. / (2. * K) * sin(myTP_phi)); - float tmp_tp_y0p = dely + (d + 1. / (2. * K) * cos(myTP_phi)); - float tmp_tp_rp = sqrt(tmp_tp_x0p * tmp_tp_x0p + tmp_tp_y0p * tmp_tp_y0p); - float tmp_tp_d0 = tmp_tp_charge * tmp_tp_rp - (1. / (2. * K)); - myTP_d0 = tmp_tp_d0 * (-1); //fix d0 sign - const double pi = 4.0 * atan(1.0); - float delphi = myTP_phi - atan2(-K * tmp_tp_x0p, K * tmp_tp_y0p); - if (delphi < -pi) - delphi += 2.0 * pi; - if (delphi > pi) - delphi -= 2.0 * pi; - - myTP_z0 = myTP_z + tmp_tp_t * delphi / (2.0 * K); + // get d0/z0 propagated back to the IP + float tmp_tp_t = tan(2.0 * atan(1.0) - 2.0 * atan(exp(-myTP_eta))); + float delx = -myTP_x0; + float dely = -myTP_y0; + float A = 0.01 * 0.5696; + float Kmagnitude = A / myTP_pt; + float tmp_tp_charge = my_tp->charge(); + float K = Kmagnitude * tmp_tp_charge; + float d = 0; + float tmp_tp_x0p = delx - (d + 1. / (2. * K) * sin(myTP_phi)); + float tmp_tp_y0p = dely + (d + 1. / (2. * K) * cos(myTP_phi)); + float tmp_tp_rp = sqrt(tmp_tp_x0p * tmp_tp_x0p + tmp_tp_y0p * tmp_tp_y0p); + float tmp_tp_d0 = tmp_tp_charge * tmp_tp_rp - (1. / (2. * K)); + myTP_d0 = tmp_tp_d0 * (-1); //fix d0 sign + const double pi = 4.0 * atan(1.0); + float delphi = myTP_phi - atan2(-K * tmp_tp_x0p, K * tmp_tp_y0p); + if (delphi < -pi) + delphi += 2.0 * pi; + if (delphi > pi) + delphi -= 2.0 * pi; + + myTP_z0 = myTP_z + tmp_tp_t * delphi / (2.0 * K); if (DebugMode) { edm::LogVerbatim("Tracklet") << "TP matched to track has pt = " << my_tp->p4().pt() << " eta = " << my_tp->momentum().eta() << " phi = " << my_tp->momentum().phi() @@ -2789,8 +2789,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_matchtp_x->push_back(myTP_x0); m_trkExt_matchtp_y->push_back(myTP_y0); m_trkExt_matchtp_z->push_back(myTP_z); - - + // ---------------------------------------------------------------------------------------------- // store the index to the selected track or -1 if not selected // ---------------------------------------------------------------------------------------------- @@ -2899,7 +2898,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_tp_dxy = dxy; if (MyProcess == 6 && (dxy > 1.0)) continue; - + if (DebugMode && (Displaced == "Prompt" || Displaced == "Both")) edm::LogVerbatim("Tracklet") << "Tracking particle, pt: " << tmp_tp_pt << " eta: " << tmp_tp_eta << " phi: " << tmp_tp_phi << " z0: " << tmp_tp_z0 << " d0: " << tmp_tp_d0 @@ -3114,14 +3113,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_matchtrk_d0 = -tmp_matchtrk_x0 * sin(tmp_matchtrk_phi) + tmp_matchtrk_y0 * cos(tmp_matchtrk_phi); // tmp_matchtrk_d0 = matchedTracks.at(i_track)->d0(); } - tmp_matchtrk_rinv = matchedTracks.at(i_track)->rInv(); + tmp_matchtrk_rinv = matchedTracks.at(i_track)->rInv(); tmp_matchtrk_chi2 = matchedTracks.at(i_track)->chi2(); tmp_matchtrk_chi2dof = matchedTracks.at(i_track)->chi2Red(); tmp_matchtrk_chi2rphi = matchedTracks.at(i_track)->chi2XYRed(); tmp_matchtrk_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrk_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrk_MVA1 = matchedTracks.at(i_track)->trkMVA1(); - tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); + tmp_matchtrk_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrk_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrk_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrk_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); @@ -3292,14 +3291,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even // tmp_matchtrkExt_d0 = matchedTracks.at(i_track)->d0(); } - tmp_matchtrkExt_rinv = matchedTracks.at(i_track)->rInv(); + tmp_matchtrkExt_rinv = matchedTracks.at(i_track)->rInv(); tmp_matchtrkExt_chi2 = matchedTracks.at(i_track)->chi2(); tmp_matchtrkExt_chi2dof = matchedTracks.at(i_track)->chi2Red(); tmp_matchtrkExt_chi2rphi = matchedTracks.at(i_track)->chi2XYRed(); tmp_matchtrkExt_chi2rz = matchedTracks.at(i_track)->chi2ZRed(); tmp_matchtrkExt_bendchi2 = matchedTracks.at(i_track)->stubPtConsistency(); tmp_matchtrkExt_MVA = matchedTracks.at(i_track)->trkMVA1(); - tmp_matchtrkExt_MVA2 = matchedTracks.at(i_track)->trkMVA2(); + tmp_matchtrkExt_MVA2 = matchedTracks.at(i_track)->trkMVA2(); tmp_matchtrkExt_nstub = (int)matchedTracks.at(i_track)->getStubRefs().size(); tmp_matchtrkExt_seed = (int)matchedTracks.at(i_track)->trackSeedType(); tmp_matchtrkExt_hitpattern = (int)matchedTracks.at(i_track)->hitPattern(); diff --git a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc index d43ac48a2d268..40bd06df26f64 100644 --- a/L1Trigger/TrackTrigger/src/L1TrackQuality.cc +++ b/L1Trigger/TrackTrigger/src/L1TrackQuality.cc @@ -93,6 +93,7 @@ void L1TrackQuality::setL1TrackQuality(TTTrack& aTrack) std::vector inputs = featureTransform(aTrack, this->featureNames_); std::vector output = bdt.decision_function(inputs); aTrack.settrkMVA1(1. / (1. + exp(-output.at(0)))); + } float L1TrackQuality::runEmulatedTQ(std::vector> inputFeatures) { From 84705ee337d2adce0bdd03b2c475a8e60750e09e Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 2 Jul 2024 14:44:30 +0200 Subject: [PATCH 10/36] Removing unused class methods --- .../interface/DisplacedVertexProducer.h | 41 ------------------- 1 file changed, 41 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 32bebc4fba2df..14b4df4122474 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -46,33 +46,6 @@ class Track_Parameters { float MVA1; float MVA2; - float dist_calc(float x_dv, float y_dv, float x, float y) { - dxy = TMath::Sqrt((x_dv - x) * (x_dv - x) + (y_dv - y) * (y_dv - y)); - return dxy; - } - float x(float phi_T = 0) { - return (-charge * rho * TMath::Sin(phi - charge * phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); - } - float y(float phi_T = 0) { - return (charge * rho * TMath::Cos(phi - charge * phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); - } - float z(float phi_T = 0) { - float theta = 2 * TMath::ATan(TMath::Exp(-eta)); - return (z0 + rho * phi_T / TMath::Tan(theta)); - } - float deltaPhi_T(Double_t phi1, Double_t phi2) { - Double_t dPhi = phi1 - phi2; - if (dPhi >= TMath::Pi()) - dPhi -= 2. * TMath::Pi(); - if (dPhi <= -TMath::Pi()) - dPhi += 2. * TMath::Pi(); - return dPhi; - } - float phi_T(float x, float y) { - float num = x - (d0 + charge * rho) * TMath::Sin(phi); - float den = y + (d0 + charge * rho) * TMath::Cos(phi); - return ((phi - TMath::ATan2(num, -den)) / charge); - } float z(float x, float y) { float t = std::sinh(eta); float r = TMath::Sqrt(pow(x, 2) + pow(y, 2)); @@ -131,16 +104,6 @@ class Track_Parameters { ~Track_Parameters(){}; }; -constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) { - return (lhs->pt == rhs.pt && lhs->d0 == rhs.d0 && lhs->z0 == rhs.z0 && lhs->eta == rhs.eta && lhs->phi == rhs.phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) { - return (lhs.pt == rhs->pt && lhs.d0 == rhs->d0 && lhs.z0 == rhs->z0 && lhs.eta == rhs->eta && lhs.phi == rhs->phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) { - return (lhs.pt == rhs.pt && lhs.d0 == rhs.d0 && lhs.z0 == rhs.z0 && lhs.eta == rhs.eta && lhs.phi == rhs.phi); -} - inline std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) { std::valarray r_vec = {float(v_x) - a.x0, float(v_y) - a.y0}; std::valarray p_vec = {-r_vec[1], r_vec[0]}; @@ -235,10 +198,6 @@ class Vertex_Parameters { ~Vertex_Parameters(){}; }; -constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) { - return (lhs.x_dv == rhs.x_dv && lhs.y_dv == rhs.y_dv && lhs.z_dv == rhs.z_dv); -} - class DisplacedVertexProducer : public edm::global::EDProducer<> { public: explicit DisplacedVertexProducer(const edm::ParameterSet&); From 7e10f75bd17b15e7939f61e71961d69400dfaa34 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 3 Jul 2024 10:40:10 +0200 Subject: [PATCH 11/36] Changing track selection producer collection output name and correcting input track collection --- L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py | 2 +- L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 7e737ae509ffe..944b5272535f9 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms DisplacedVertexProducer = cms.EDProducer('DisplacedVertexProducer', - l1TracksInputTag = cms.InputTag("l1tTrackSelectionProducerExtendedForDispVert", "Level1TTTracksExtendedSelected"), + l1TracksInputTag = cms.InputTag("l1tTrackSelectionProducerExtendedForDispVert", "Level1TTTracksSelected"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertSlim_model.onnx"), diff --git a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py index 0e0c78a20eefc..3f3bc4417567c 100644 --- a/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/l1tTrackSelectionProducer_cfi.py @@ -108,6 +108,8 @@ l1tTrackSelectionProducerExtendedForEtMiss = l1tTrackSelectionProducerExtended.clone() l1tTrackSelectionProducerExtendedForDispVert = l1tTrackSelectionProducerExtended.clone( + l1TracksInputTag = ("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), + outputCollectionName = "Level1TTTracksSelected", cutSet = dict( ptMin = 3.0, # pt must be greater than this value, [GeV] absEtaMax = 2.4, # absolute value of eta must be less than this value From 04ac122db1a68613a7507d265a50c89a645c8201 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Fri, 5 Jul 2024 15:22:41 +0200 Subject: [PATCH 12/36] Adding displaced vertexing track selector to schedule and code formatting --- .../test/L1TrackObjectNtupleMaker_cfg.py | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py index aa80c33be81ee..572a5bcd3c2c0 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker_cfg.py @@ -156,10 +156,17 @@ elif (L1TRKALGO == 'HYBRID_DISPLACED'): process.TTTracksEmu = cms.Path(process.L1TExtendedHybridTracks) process.TTTracksEmuWithTruth = cms.Path(process.L1TExtendedHybridTracksWithAssociators) - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * - process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerExtendedForEtMiss) + if(runDispVert): + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * + process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerExtendedForEtMiss * + process.l1tTrackSelectionProducerExtendedForDispVert) + else: + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * + process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerExtendedForEtMiss) process.pL1TrackVertexAssociation = cms.Path(process.l1tTrackVertexAssociationProducerExtended * process.l1tTrackVertexAssociationProducerExtendedForJets * process.l1tTrackVertexAssociationProducerExtendedForEtMiss) @@ -170,16 +177,23 @@ process.pTkMET = cms.Path(process.l1tTrackerEtMissExtended) process.pTkMHT = cms.Path(process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMissExtended) - if(runDispVert): process.DispVert = cms.Path(process.DisplacedVertexProducer) + if(runDispVert): + process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Displaced'# # HYBRID: extended tracking elif (L1TRKALGO == 'HYBRID_PROMPTANDDISP'): process.TTTracksEmu = cms.Path(process.L1TPromptExtendedHybridTracks) process.TTTracksEmuWithTruth = cms.Path(process.L1TPromptExtendedHybridTracksWithAssociators) - process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * - process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * - process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss) + if(runDispVert): + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss * + process.l1tTrackSelectionProducerExtendedForDispVert) + else: + process.pL1TrackSelection = cms.Path(process.l1tTrackSelectionProducer * process.l1tTrackSelectionProducerExtended * + process.l1tTrackSelectionProducerForJets * process.l1tTrackSelectionProducerExtendedForJets * + process.l1tTrackSelectionProducerForEtMiss * process.l1tTrackSelectionProducerExtendedForEtMiss) process.pL1TrackVertexAssociation = cms.Path(VertexAssociator * process.l1tTrackVertexAssociationProducerExtended * process.l1tTrackVertexAssociationProducerForJets * process.l1tTrackVertexAssociationProducerExtendedForJets * process.l1tTrackVertexAssociationProducerForEtMiss * process.l1tTrackVertexAssociationProducerExtendedForEtMiss) @@ -192,7 +206,8 @@ process.pTkMHT = cms.Path(process.l1tTrackerHTMiss*process.l1tTrackerHTMissExtended) process.pTkMHTEmulator = cms.Path(process.l1tTrackerEmuHTMiss*process.l1tTrackerEmuHTMissExtended) process.pL1TrackTripletEmulator = cms.Path(process.l1tTrackTripletEmulation) - if(runDispVert): process.DispVert = cms.Path(process.DisplacedVertexProducer) + if(runDispVert): + process.DispVert = cms.Path(process.DisplacedVertexProducer) DISPLACED = 'Both' From df499eb0a500fc0aa8cfc94a841881fed075b000 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 31 Jul 2024 17:44:03 +0200 Subject: [PATCH 13/36] Removing track selection module and moving cuts to python config. Fixed bug in track truth association which affected BDT training boolean --- .../interface/DisplacedVertexProducer.h | 11 +- .../plugins/DisplacedVertexProducer.cc | 158 +++++++++++------- .../python/DisplacedVertexProducer_cfi.py | 20 ++- 3 files changed, 122 insertions(+), 67 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 14b4df4122474..6e6c6bb6b853f 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -207,16 +207,17 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: - typedef TTTrack L1Track; - typedef std::vector TTTrackCollection; - typedef edm::Ref TTTrackRef; - typedef edm::RefVector TTTrackRefCollection; const edm::EDGetTokenT> ttTrackMCTruthToken_; - const edm::EDGetTokenT trackToken_; + const edm::EDGetTokenT>> trackToken_; const std::string outputTrackCollectionName_; const std::string qualityAlgorithm_; const std::string ONNXmodel_; const std::string ONNXInputName_; + const edm::ParameterSet cutSet_; + const double chi2rzMax_, dispMVAMin_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, + overlapEtaMin_, overlapEtaMax_; + const int overlapNStubsMin_; + const double diskEtaMin_, diskD0Min_, barrelD0Min_; std::unique_ptr runTime_; }; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 148d8bf938307..d1ea67e35023f 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -1,6 +1,9 @@ #include "L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h" -bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } +bool ComparePtTrack(std::pair> a, + std::pair> b) { + return a.first.pt > b.first.pt; +} Double_t dist(Double_t x1, Double_t y1, Double_t x2 = 0, Double_t y2 = 0) { // Distance between 2 points return (TMath::Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); @@ -14,7 +17,7 @@ Double_t dist_TPs(Track_Parameters a, Track_Parameters b) { float R1 = a.rho; // Radii of the circles float R2 = b.rho; float R = dist(x1, y1, x2, y2); // Distance between centers - if ((R >= (R1 - R2)) && (R <= (R1 + R2))) { + if ((R >= fabs(R1 - R2)) && (R <= (R1 + R2))) { return (0); } else if (R == 0) { return (-99999.0); @@ -103,10 +106,25 @@ Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t& x_vtx, Double DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfig) : ttTrackMCTruthToken_(consumes>( iConfig.getParameter("mcTruthTrackInputTag"))), - trackToken_(consumes(iConfig.getParameter("l1TracksInputTag"))), + trackToken_(consumes>>( + iConfig.getParameter("l1TracksInputTag"))), outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), ONNXmodel_(iConfig.getParameter("ONNXmodel")), - ONNXInputName_(iConfig.getParameter("ONNXInputName")) { + ONNXInputName_(iConfig.getParameter("ONNXInputName")), + cutSet_(iConfig.getParameter("cutSet")), + chi2rzMax_(cutSet_.getParameter("chi2rzMax")), + dispMVAMin_(cutSet_.getParameter("dispMVAMin")), + promptMVAMin_(cutSet_.getParameter("promptMVAMin")), + ptMin_(cutSet_.getParameter("ptMin")), + etaMax_(cutSet_.getParameter("etaMax")), + dispD0Min_(cutSet_.getParameter("dispD0Min")), + promptMVADispTrackMin_(cutSet_.getParameter("promptMVADispTrackMin")), + overlapEtaMin_(cutSet_.getParameter("overlapEtaMin")), + overlapEtaMax_(cutSet_.getParameter("overlapEtaMax")), + overlapNStubsMin_(cutSet_.getParameter("overlapNStubsMin")), + diskEtaMin_(cutSet_.getParameter("diskEtaMin")), + diskD0Min_(cutSet_.getParameter("diskD0Min")), + barrelD0Min_(cutSet_.getParameter("barrelD0Min")) { //--- Define EDM output to be written to file (if required) produces(outputTrackCollectionName_); runTime_ = std::make_unique(this->ONNXmodel_); @@ -115,16 +133,16 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { edm::Handle> MCTruthTTTrackHandle; iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle); - edm::Handle TTTrackHandle; + edm::Handle>> TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); - TTTrackRefCollection::const_iterator iterL1Track; + std::vector>::const_iterator iterL1Track; int this_l1track = 0; - std::vector selectedTracks; - std::vector> selectedTPs; + std::vector>> selectedTracksWithTruth; for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); this_l1track++; + float pt = l1track_ptr->momentum().perp(); float eta = l1track_ptr->momentum().eta(); float phi = l1track_ptr->momentum().phi(); @@ -142,42 +160,59 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e std::vector>, TTStub>> stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); - //std::cout<<"track params: "< my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); - selectedTPs.push_back(my_tp); + if (chi2rz < chi2rzMax_ && MVA2 > dispMVAMin_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { + if (fabs(d0) > dispD0Min_) { + if (MVA1 <= promptMVADispTrackMin_) + continue; + } + if (fabs(eta) > overlapEtaMin_ && fabs(eta) < overlapEtaMax_) { + if (nstub <= overlapNStubsMin_) + continue; + } + if (fabs(eta) > diskEtaMin_) { + if (fabs(d0) <= diskD0Min_) + continue; + } + if (fabs(eta) <= diskEtaMin_) { + if (fabs(d0) <= barrelD0Min_) + continue; + } + + Track_Parameters track = Track_Parameters(pt, + -d0, + z0, + eta, + phi, + -99999, + -999, + -999, + -999, + rinv, + (this_l1track - 1), + nullptr, + nstub, + chi2rphi, + chi2rz, + bendchi2, + MVA1, + MVA2); + + edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); + selectedTracksWithTruth.push_back(std::make_pair(track, my_tp)); + } } - //std::cout<<"num selected tracks: "< product(new std::vector()); - for (int i = 0; i < int(selectedTracks.size() - 1); i++) { - for (int j = i + 1; j < int(selectedTracks.size()); j++) { - if (dist_TPs(selectedTracks[i], selectedTracks[j]) != 0) + for (int i = 0; i < int(selectedTracksWithTruth.size() - 1); i++) { + for (int j = i + 1; j < int(selectedTracksWithTruth.size()); j++) { + if (dist_TPs(selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first) != 0) continue; Double_t x_dv_trk = -9999.0; Double_t y_dv_trk = -9999.0; Double_t z_dv_trk = -9999.0; - edm::Ptr tp_i = selectedTPs[i]; - edm::Ptr tp_j = selectedTPs[j]; + edm::Ptr tp_i = selectedTracksWithTruth[i].second; + edm::Ptr tp_j = selectedTracksWithTruth[j].second; bool isReal = false; if (!tp_i.isNull() && !tp_j.isNull()) { bool isHard_i = false; @@ -188,15 +223,18 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e } if (tp_i->eventId().event() == 0 && tp_j->eventId().event() == 0 && fabs(tp_i->vx() - tp_j->vx()) < 0.0001 && - fabs(tp_i->vy() - tp_j->vy()) < 0.0001 && fabs(tp_i->vz() - tp_j->vz()) < 0.0001 && isHard_i && isHard_j) { + fabs(tp_i->vy() - tp_j->vy()) < 0.0001 && fabs(tp_i->vz() - tp_j->vz()) < 0.0001 && isHard_i && isHard_j && + ((tp_i->charge() + tp_j->charge()) == 0)) { isReal = true; } } - int inTraj = calcVertex(selectedTracks[i], selectedTracks[j], x_dv_trk, y_dv_trk, z_dv_trk); - Vertex_Parameters vertex = Vertex_Parameters(x_dv_trk, y_dv_trk, z_dv_trk, selectedTracks[i], selectedTracks[j]); - l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracks[i].index, - selectedTracks[j].index, + int inTraj = + calcVertex(selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first, x_dv_trk, y_dv_trk, z_dv_trk); + Vertex_Parameters vertex = Vertex_Parameters( + x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first); + l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracksWithTruth[i].first.index, + selectedTracksWithTruth[j].first.index, i, j, inTraj, @@ -218,24 +256,24 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float minD0 = vertex.a.d0; if (fabs(vertex.b.d0) < fabs(minD0)) minD0 = vertex.b.d0; - std::vector Transformed_features = {selectedTracks[i].pt, - selectedTracks[j].pt, - selectedTracks[i].eta, - selectedTracks[j].eta, - selectedTracks[i].phi, - selectedTracks[j].phi, - selectedTracks[i].d0, - selectedTracks[j].d0, - selectedTracks[i].z0, - selectedTracks[j].z0, - selectedTracks[i].chi2rz, - selectedTracks[j].chi2rz, - selectedTracks[i].bendchi2, - selectedTracks[j].bendchi2, - selectedTracks[i].MVA1, - selectedTracks[j].MVA1, - selectedTracks[i].MVA2, - selectedTracks[j].MVA2, + std::vector Transformed_features = {selectedTracksWithTruth[i].first.pt, + selectedTracksWithTruth[j].first.pt, + selectedTracksWithTruth[i].first.eta, + selectedTracksWithTruth[j].first.eta, + selectedTracksWithTruth[i].first.phi, + selectedTracksWithTruth[j].first.phi, + selectedTracksWithTruth[i].first.d0, + selectedTracksWithTruth[j].first.d0, + selectedTracksWithTruth[i].first.z0, + selectedTracksWithTruth[j].first.z0, + selectedTracksWithTruth[i].first.chi2rz, + selectedTracksWithTruth[j].first.chi2rz, + selectedTracksWithTruth[i].first.bendchi2, + selectedTracksWithTruth[j].first.bendchi2, + selectedTracksWithTruth[i].first.MVA1, + selectedTracksWithTruth[j].first.MVA1, + selectedTracksWithTruth[i].first.MVA2, + selectedTracksWithTruth[j].first.MVA2, vertex.d_T, vertex.R_T, vertex.cos_T, diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 944b5272535f9..a81f8d0723da4 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -1,11 +1,27 @@ import FWCore.ParameterSet.Config as cms DisplacedVertexProducer = cms.EDProducer('DisplacedVertexProducer', - l1TracksInputTag = cms.InputTag("l1tTrackSelectionProducerExtendedForDispVert", "Level1TTTracksSelected"), + l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), l1TrackVertexCollectionName = cms.string("dispVertices"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertSlim_model.onnx"), - ONNXInputName = cms.string("feature_input") + ONNXInputName = cms.string("feature_input"), + cutSet = cms.PSet( + chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this + dispMVAMin = cms.double(0.2), # displaced track quality MVA score for all tracks must be greater than this + promptMVAMin = cms.double(0.2), # prompt track quality MVA score for all tracks must be greater than this + ptMin = cms.double(3.0), # pt value for all tracks must be greater than this [GeV] + etaMax = cms.double(2.4), # eta value for all tracks must be less than this + dispD0Min = cms.double(1.0), # d0 value for tracks to be considered for displaced track cuts must be greater than this [cm] + promptMVADispTrackMin = cms.double(0.5), # prompt track quality MVA score for tracks with |d0|>dispD0Min must be greater than this + overlapEtaMin = cms.double(1.1), # eta value for tracks to be considered for overlap track cuts must be greater than this + overlapEtaMax = cms.double(1.7), # eta value for tracks to be considered for overlap track cuts must be less than this + overlapNStubsMin = cms.int32(4), # number of stubs for tracks with overlapEtaMin<|eta|diskEtaMin must be greater than this [cm] + barrelD0Min = cms.double(0.06) # abs d0 value for tracks with |eta|<=diskEtaMin must be greater than this [cm] + + ) ) ''' From d499bfdc45a7b5889b6752a16e3ac3b281d895b0 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Wed, 18 Sep 2024 10:38:06 +0200 Subject: [PATCH 14/36] Adding RT cut to producer and adding isHard boolean to ntuple --- .../interface/DisplacedVertexProducer.h | 2 +- .../plugins/DisplacedVertexProducer.cc | 8 +- .../python/DisplacedVertexProducer_cfi.py | 7 +- .../test/L1TrackObjectNtupleMaker.cc | 122 ++++++++++++++++++ 4 files changed, 134 insertions(+), 5 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 6e6c6bb6b853f..22341137a1c56 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -217,7 +217,7 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const double chi2rzMax_, dispMVAMin_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, overlapEtaMin_, overlapEtaMax_; const int overlapNStubsMin_; - const double diskEtaMin_, diskD0Min_, barrelD0Min_; + const double diskEtaMin_, diskD0Min_, barrelD0Min_, RTMin_, RTMax_; std::unique_ptr runTime_; }; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index d1ea67e35023f..addbc047671c8 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -124,7 +124,9 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi overlapNStubsMin_(cutSet_.getParameter("overlapNStubsMin")), diskEtaMin_(cutSet_.getParameter("diskEtaMin")), diskD0Min_(cutSet_.getParameter("diskD0Min")), - barrelD0Min_(cutSet_.getParameter("barrelD0Min")) { + barrelD0Min_(cutSet_.getParameter("barrelD0Min")), + RTMin_(cutSet_.getParameter("RTMin")), + RTMax_(cutSet_.getParameter("RTMax")) { //--- Define EDM output to be written to file (if required) produces(outputTrackCollectionName_); runTime_ = std::make_unique(this->ONNXmodel_); @@ -233,6 +235,10 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e calcVertex(selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first, x_dv_trk, y_dv_trk, z_dv_trk); Vertex_Parameters vertex = Vertex_Parameters( x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first); + + if(vertex.R_T>RTMax_) continue; + if(vertex.R_TdiskEtaMin must be greater than this [cm] - barrelD0Min = cms.double(0.06) # abs d0 value for tracks with |eta|<=diskEtaMin must be greater than this [cm] - + barrelD0Min = cms.double(0.06), # abs d0 value for tracks with |eta|<=diskEtaMin must be greater than this [cm] + RTMin = cms.double(0.02152), # R_T value for all vertices must be greater than this + RTMax = cms.double(20.0) # R_T value for all vertices must be less than this ) ) diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index 133666a4fb82e..94a0b01a5c427 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -117,6 +117,13 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer + bool findHiggsToMuAncestor(T particle); + template + bool findHiggsToBAncestor(T particle); + template + bool isHard(T particle); + // Mandatory methods void beginJob() override; void endJob() override; @@ -386,6 +393,9 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_combinatoric; std::vector* m_trkExt_fake; //0 fake, 1 track from primary interaction, 2 secondary track std::vector* m_trkExt_matchtp_pdgid; + std::vector* m_trkExt_matchtp_isHToMu; + std::vector* m_trkExt_matchtp_isHToB; + std::vector* m_trkExt_matchtp_isHard; std::vector* m_trkExt_matchtp_pt; std::vector* m_trkExt_matchtp_eta; std::vector* m_trkExt_matchtp_phi; @@ -424,6 +434,9 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_tp_d0_prod; std::vector* m_tp_z0_prod; std::vector* m_tp_pdgid; + std::vector* m_tp_isHToMu; + std::vector* m_tp_isHToB; + std::vector* m_tp_isHard; std::vector* m_tp_nmatch; std::vector* m_tp_nstub; std::vector* m_tp_eventid; @@ -867,6 +880,9 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_combinatoric; delete m_trkExt_fake; delete m_trkExt_matchtp_pdgid; + delete m_trkExt_matchtp_isHToMu; + delete m_trkExt_matchtp_isHToB; + delete m_trkExt_matchtp_isHard; delete m_trkExt_matchtp_pt; delete m_trkExt_matchtp_eta; delete m_trkExt_matchtp_phi; @@ -904,6 +920,9 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_tp_d0_prod; delete m_tp_z0_prod; delete m_tp_pdgid; + delete m_tp_isHToMu; + delete m_tp_isHToB; + delete m_tp_isHard; delete m_tp_nmatch; delete m_tp_nstub; delete m_tp_eventid; @@ -1078,6 +1097,75 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkfastjetExt_truetp_sumpt; } +template +bool L1TrackObjectNtupleMaker::findHiggsToMuAncestor(T particle) { + if ((particle->pdgId() == 13 || particle->pdgId() == -13) && particle->genParticles().size() > 0) { + reco::GenParticleRef genPart = particle->genParticles()[0]; + reco::GenParticleRefVector parentParts = genPart->motherRefVector(); + if (parentParts.size() > 0) { + while (parentParts[0]->pdgId() == 13 || parentParts[0]->pdgId() == -13) + parentParts = parentParts[0]->motherRefVector(); + reco::GenParticleRefVector daughters = parentParts[0]->daughterRefVector(); + bool hasMuon = false; + bool hasAntiMuon = false; + for (auto daughter : daughters) { + if (daughter->pdgId() == 13) + hasMuon = true; + if (daughter->pdgId() == -13) + hasAntiMuon = true; + } + if (hasMuon && hasAntiMuon) { + bool hAncestor = false; + while (parentParts.size() > 0) { + if (parentParts[0]->pdgId() == 25) + hAncestor = true; + parentParts = parentParts[0]->motherRefVector(); + } + if (hAncestor) { + return true; + } + } + } + } //mu or anti mu + return false; +} + +template +bool L1TrackObjectNtupleMaker::findHiggsToBAncestor(T particle) { + TrackingVertexRef parentVert = particle->parentVertex(); + TrackingParticle currentParticle = *particle; + while (currentParticle.genParticles().size() == 0 && parentVert->nSourceTracks() > 0) { + TrackingParticleRefVector sourceTPs = parentVert->sourceTracks(); + currentParticle = *sourceTPs[0]; + parentVert = currentParticle.parentVertex(); + } + bool bAncestor = false; + bool hAncestor = false; + reco::GenParticleRefVector genParticles = currentParticle.genParticles(); + while (genParticles.size() > 0) { + if (hAncestor == false && abs(genParticles[0]->pdgId()) == 5) + bAncestor = true; + if (genParticles[0]->pdgId() == 25) + hAncestor = true; + genParticles = genParticles[0]->motherRefVector(); + } + if (bAncestor && hAncestor) + return true; + return false; +} + +template +bool L1TrackObjectNtupleMaker::isHard(T particle) { + reco::GenParticleRefVector genParts = particle->genParticles(); + if(genParts.size()==0){ + return false; + } + if(genParts[0]->isHardProcess() || genParts[0]->fromHardProcessFinalState()){ + return true; + } + return false; +} + //////////// // BEGIN JOB void L1TrackObjectNtupleMaker::beginJob() { @@ -1167,6 +1255,9 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_combinatoric = new std::vector; m_trkExt_fake = new std::vector; m_trkExt_matchtp_pdgid = new std::vector; + m_trkExt_matchtp_isHToMu = new std::vector; + m_trkExt_matchtp_isHToB = new std::vector; + m_trkExt_matchtp_isHard = new std::vector; m_trkExt_matchtp_pt = new std::vector; m_trkExt_matchtp_eta = new std::vector; m_trkExt_matchtp_phi = new std::vector; @@ -1204,6 +1295,9 @@ void L1TrackObjectNtupleMaker::beginJob() { m_tp_d0_prod = new std::vector; m_tp_z0_prod = new std::vector; m_tp_pdgid = new std::vector; + m_tp_isHToMu = new std::vector; + m_tp_isHToB = new std::vector; + m_tp_isHard = new std::vector; m_tp_nmatch = new std::vector; m_tp_nstub = new std::vector; m_tp_eventid = new std::vector; @@ -1464,6 +1558,9 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_combinatoric", &m_trkExt_combinatoric); eventTree->Branch("trkExt_fake", &m_trkExt_fake); eventTree->Branch("trkExt_matchtp_pdgid", &m_trkExt_matchtp_pdgid); + eventTree->Branch("trkExt_matchtp_isHToMu", &m_trkExt_matchtp_isHToMu); + eventTree->Branch("trkExt_matchtp_isHToB", &m_trkExt_matchtp_isHToB); + eventTree->Branch("trkExt_matchtp_isHard", &m_trkExt_matchtp_isHard); eventTree->Branch("trkExt_matchtp_pt", &m_trkExt_matchtp_pt); eventTree->Branch("trkExt_matchtp_eta", &m_trkExt_matchtp_eta); eventTree->Branch("trkExt_matchtp_phi", &m_trkExt_matchtp_phi); @@ -1503,6 +1600,9 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("tp_d0_prod", &m_tp_d0_prod); eventTree->Branch("tp_z0_prod", &m_tp_z0_prod); eventTree->Branch("tp_pdgid", &m_tp_pdgid); + eventTree->Branch("tp_isHToMu", &m_tp_isHToMu); + eventTree->Branch("tp_isHToB", &m_tp_isHToB); + eventTree->Branch("tp_isHard", &m_tp_isHard); eventTree->Branch("tp_nmatch", &m_tp_nmatch); eventTree->Branch("tp_nstub", &m_tp_nstub); eventTree->Branch("tp_eventid", &m_tp_eventid); @@ -1803,6 +1903,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_combinatoric->clear(); m_trkExt_fake->clear(); m_trkExt_matchtp_pdgid->clear(); + m_trkExt_matchtp_isHToMu->clear(); + m_trkExt_matchtp_isHToB->clear(); + m_trkExt_matchtp_isHard->clear(); m_trkExt_matchtp_pt->clear(); m_trkExt_matchtp_eta->clear(); m_trkExt_matchtp_phi->clear(); @@ -1840,6 +1943,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_d0_prod->clear(); m_tp_z0_prod->clear(); m_tp_pdgid->clear(); + m_tp_isHToMu->clear(); + m_tp_isHToB->clear(); + m_tp_isHard->clear(); m_tp_nmatch->clear(); m_tp_nstub->clear(); m_tp_eventid->clear(); @@ -2718,6 +2824,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int myFake = 0; int myTP_pdgid = -999; + bool myTP_isHToMu = false; + bool myTP_isHToB = false; + bool myTP_isHard = false; float myTP_pt = -999; float myTP_eta = -999; float myTP_phi = -999; @@ -2738,6 +2847,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even myFake = 1; myTP_pdgid = my_tp->pdgId(); + myTP_isHToMu = findHiggsToMuAncestor(my_tp); + myTP_isHToB = findHiggsToBAncestor(my_tp); + myTP_isHard = isHard(my_tp); myTP_pt = my_tp->p4().pt(); myTP_eta = my_tp->p4().eta(); myTP_phi = my_tp->p4().phi(); @@ -2780,6 +2892,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_fake->push_back(myFake); m_trkExt_matchtp_pdgid->push_back(myTP_pdgid); + m_trkExt_matchtp_isHToMu->push_back(myTP_isHToMu); + m_trkExt_matchtp_isHToB->push_back(myTP_isHToB); + m_trkExt_matchtp_isHard->push_back(myTP_isHard); m_trkExt_matchtp_pt->push_back(myTP_pt); m_trkExt_matchtp_eta->push_back(myTP_eta); m_trkExt_matchtp_phi->push_back(myTP_phi); @@ -2899,6 +3014,10 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even if (MyProcess == 6 && (dxy > 1.0)) continue; + bool tmp_tp_isHToMu = findHiggsToMuAncestor(iterTP); + bool tmp_tp_isHToB = findHiggsToBAncestor(iterTP); + bool tmp_tp_isHard = isHard(iterTP); + if (DebugMode && (Displaced == "Prompt" || Displaced == "Both")) edm::LogVerbatim("Tracklet") << "Tracking particle, pt: " << tmp_tp_pt << " eta: " << tmp_tp_eta << " phi: " << tmp_tp_phi << " z0: " << tmp_tp_z0 << " d0: " << tmp_tp_d0 @@ -2989,6 +3108,9 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_tp_z0_prod->push_back(tmp_tp_z0_prod); m_tp_d0_prod->push_back(tmp_tp_d0_prod); m_tp_pdgid->push_back(tmp_tp_pdgid); + m_tp_isHToMu->push_back(tmp_tp_isHToMu); + m_tp_isHToB->push_back(tmp_tp_isHToB); + m_tp_isHard->push_back(tmp_tp_isHard); m_tp_nstub->push_back(nStubTP); m_tp_eventid->push_back(tmp_eventid); m_tp_charge->push_back(tmp_tp_charge); From e1a92db745c6020944fbc28a2a08f661e1ddb333 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Thu, 17 Oct 2024 16:37:21 +0200 Subject: [PATCH 15/36] Adding displaced vertexing emulation --- .../L1Trigger/interface/DisplacedVertex.h | 19 +- .../interface/DisplacedVertexProducer.h | 34 +- .../plugins/DisplacedVertexProducer.cc | 318 +- .../L1TTrackMatch/plugins/L1TrackUnpacker.h | 5 +- .../python/DisplacedVertexProducer_cfi.py | 8 +- .../test/L1TrackObjectNtupleMaker.cc | 586 +- .../dispVertTaggerEmulationFixedPoint.json | 8285 +++++++++++++++++ 7 files changed, 9175 insertions(+), 80 deletions(-) create mode 100644 L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h index 4853dddcb0957..7f39a1abc4779 100644 --- a/DataFormats/L1Trigger/interface/DisplacedVertex.h +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -4,6 +4,7 @@ #include "DataFormats/Common/interface/Ptr.h" #include "DataFormats/L1TrackTrigger/interface/TTTrack.h" #include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include namespace l1t { @@ -35,11 +36,12 @@ namespace l1t { typedef std::vector DisplacedTrueVertexCollection; class DisplacedTrackVertex { + public: + typedef ap_fixed<12,8> score_t; + public: DisplacedTrackVertex(int firstIndexTrk, int secondIndexTrk, - int firstIndexPt, - int secondIndexPt, int inTraj, float d_T, float R_T, @@ -50,12 +52,9 @@ namespace l1t { float z, float openingAngle, float parentPt, - int delIndexPt, bool isReal) : firstIndexTrk_(firstIndexTrk), secondIndexTrk_(secondIndexTrk), - firstIndexPt_(firstIndexPt), - secondIndexPt_(secondIndexPt), inTraj_(inTraj), d_T_(d_T), R_T_(R_T), @@ -66,11 +65,11 @@ namespace l1t { z_(z), openingAngle_(openingAngle), parentPt_(parentPt), - delIndexPt_(delIndexPt), isReal_(isReal) {} DisplacedTrackVertex() {} ~DisplacedTrackVertex() {} void setScore(float score) { score_ = score; } + void setScoreEmu(score_t scoreEmu) { scoreEmu_ = scoreEmu; } float d_T() const { return d_T_; } float R_T() const { return R_T_; } float cos_T() const { return cos_T_; } @@ -81,19 +80,15 @@ namespace l1t { float parentPt() const { return parentPt_; } int firstIndexTrk() const { return firstIndexTrk_; } int secondIndexTrk() const { return secondIndexTrk_; } - int firstIndexPt() const { return firstIndexPt_; } - int secondIndexPt() const { return secondIndexPt_; } int inTraj() const { return inTraj_; } float del_Z() const { return del_Z_; } - int delIndexPt() const { return delIndexPt_; } bool isReal() const { return isReal_; } float score() const { return score_; } + score_t scoreEmu() const { return scoreEmu_; } private: int firstIndexTrk_; int secondIndexTrk_; - int firstIndexPt_; - int secondIndexPt_; int inTraj_; float d_T_; float R_T_; @@ -104,9 +99,9 @@ namespace l1t { float z_; float openingAngle_; float parentPt_; - int delIndexPt_; bool isReal_; float score_; + score_t scoreEmu_; }; typedef std::vector DisplacedTrackVertexCollection; diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index 22341137a1c56..f8e3c1f9c78e5 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -4,12 +4,13 @@ #include "DataFormats/L1Trigger/interface/DisplacedVertex.h" #include "FWCore/Framework/interface/global/EDProducer.h" #include "DataFormats/L1TrackTrigger/interface/TTTypes.h" +#include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "PhysicsTools/ONNXRuntime/interface/ONNXRuntime.h" #include "SimTracker/TrackTriggerAssociation/interface/TTTrackAssociationMap.h" #include "TMath.h" #include @@ -18,6 +19,8 @@ #include #include #include +#include +#include "conifer.h" using namespace std; @@ -44,7 +47,6 @@ class Track_Parameters { float chi2rz; float bendchi2; float MVA1; - float MVA2; float z(float x, float y) { float t = std::sinh(eta); @@ -63,23 +65,22 @@ class Track_Parameters { float vx_in, float vy_in, float vz_in, - float charge_in = 0, + float rho_in = 0, int index_in = -1, Track_Parameters* tp_in = nullptr, int nstubs_in = 0, float chi2rphi_in = 0, float chi2rz_in = 0, float bendchi2_in = 0, - float MVA1_in = 0, - float MVA2_in = 0) { + float MVA1_in = 0) { pt = pt_in; d0 = d0_in; z0 = z0_in; eta = eta_in; phi = phi_in; - if (charge_in > 0) { + if (rho_in > 0) { charge = 1; - } else if (charge_in < 0) { + } else if (rho_in < 0) { charge = -1; } else { charge = 0; @@ -90,7 +91,7 @@ class Track_Parameters { vy = vy_in; vz = vz_in; tp = tp_in; - rho = fabs(1 / charge_in); + rho = fabs(rho_in); x0 = (rho + charge * d0) * TMath::Cos(phi - (charge * TMath::Pi() / 2)); y0 = (rho + charge * d0) * TMath::Sin(phi - (charge * TMath::Pi() / 2)); nstubs = nstubs_in; @@ -98,7 +99,6 @@ class Track_Parameters { chi2rz = chi2rz_in; bendchi2 = bendchi2_in; MVA1 = MVA1_in; - MVA2 = MVA2_in; } Track_Parameters(){}; ~Track_Parameters(){}; @@ -139,7 +139,6 @@ class Vertex_Parameters { float chi2rzdofSum; float bendchi2Sum; float MVA1Sum; - float MVA2Sum; int numStubsSum; float delta_z; float delta_eta; @@ -187,7 +186,6 @@ class Vertex_Parameters { chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; bendchi2Sum = bendchi2_1 + bendchi2_2; MVA1Sum = a_in.MVA1 + b_in.MVA1; - MVA2Sum = a_in.MVA2 + b_in.MVA2; numStubsSum = a_in.nstubs + b_in.nstubs; p2_mag = pow(a_in.pt, 2) + pow(b_in.pt, 2); delta_z = fabs(a_in.z(x_dv_in, y_dv_in) - b_in.z(x_dv_in, y_dv_in)); @@ -202,23 +200,31 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { public: explicit DisplacedVertexProducer(const edm::ParameterSet&); ~DisplacedVertexProducer() override = default; + typedef TTTrack L1TTTrackType; private: void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; + double FloatPtFromBits(const L1TTTrackType &) const; + double FloatEtaFromBits(const L1TTTrackType &) const; + double FloatPhiFromBits(const L1TTTrackType &) const; + double FloatZ0FromBits(const L1TTTrackType &) const; + double FloatD0FromBits(const L1TTTrackType &) const; + int ChargeFromBits(const L1TTTrackType &) const; private: const edm::EDGetTokenT> ttTrackMCTruthToken_; const edm::EDGetTokenT>> trackToken_; + const edm::EDGetTokenT>> trackGTTToken_; const std::string outputTrackCollectionName_; + const std::string outputTrackEmulationCollectionName_; const std::string qualityAlgorithm_; - const std::string ONNXmodel_; - const std::string ONNXInputName_; + const std::string model_; + const bool runEmulation_; const edm::ParameterSet cutSet_; const double chi2rzMax_, dispMVAMin_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, overlapEtaMin_, overlapEtaMax_; const int overlapNStubsMin_; const double diskEtaMin_, diskD0Min_, barrelD0Min_, RTMin_, RTMax_; - std::unique_ptr runTime_; }; #endif diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index addbc047671c8..030a3b2fb4c5a 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -1,4 +1,62 @@ #include "L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h" +#include "L1TrackUnpacker.h" + +using namespace l1trackunpacker; + +double DisplacedVertexProducer::FloatPtFromBits(const L1TTTrackType &track) const { + ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, TTTrack_TrackWord::TrackBitLocations::kRinvLSB); + ap_ufixed<14, 9> ptEmulation; + ptEmulation.V = (ptEmulationBits.range()); + return ptEmulation.to_double(); +} + +double DisplacedVertexProducer::FloatEtaFromBits(const L1TTTrackType &track) const { + TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord(); + glbeta_intern digieta; + digieta.V = etaBits.range(); + return (double)digieta; +} + +double DisplacedVertexProducer::FloatPhiFromBits(const L1TTTrackType &track) const { + int Sector = track.phiSector(); + double sector_phi_value = 0; + if (Sector < 5) { + sector_phi_value = 2.0 * M_PI * Sector / 9.0; + } else { + sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0); + } + glbphi_intern trkphiSector = DoubleToBit( + sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); + glbphi_intern local_phiBits = 0; + local_phiBits.V = track.getPhiWord(); + + glbphi_intern local_phi = + DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), + TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, + TTTrack_TrackWord::stepPhi0); + glbphi_intern digiphi = local_phi + trkphiSector; + return BitToDouble( + digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0); +} + +double DisplacedVertexProducer::FloatZ0FromBits(const L1TTTrackType &track) const { + z0_intern trkZ = track.getZ0Word(); + return BitToDouble(trkZ, TTTrack_TrackWord::TrackBitWidths::kZ0Size, TTTrack_TrackWord::stepZ0); +} + +double DisplacedVertexProducer::FloatD0FromBits(const L1TTTrackType &track) const { + d0_intern trkD0 = track.getD0Word(); + return BitToDouble(trkD0, TTTrack_TrackWord::TrackBitWidths::kD0Size, TTTrack_TrackWord::stepD0); +} + +int DisplacedVertexProducer::ChargeFromBits(const L1TTTrackType &track) const { + ap_uint<1> chargeBit = track.getTrackWord()[TTTrack_TrackWord::TrackBitLocations::kRinvMSB]; + return 1 - (2*chargeBit.to_uint()); +} + +double convertPtToR(double pt){ + return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm +} bool ComparePtTrack(std::pair> a, std::pair> b) { @@ -108,9 +166,12 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi iConfig.getParameter("mcTruthTrackInputTag"))), trackToken_(consumes>>( iConfig.getParameter("l1TracksInputTag"))), + trackGTTToken_(consumes>>( + iConfig.getParameter("l1TracksGTTInputTag"))), outputTrackCollectionName_(iConfig.getParameter("l1TrackVertexCollectionName")), - ONNXmodel_(iConfig.getParameter("ONNXmodel")), - ONNXInputName_(iConfig.getParameter("ONNXInputName")), + outputTrackEmulationCollectionName_(iConfig.getParameter("l1TrackEmulationVertexCollectionName")), + model_(iConfig.getParameter("model")), + runEmulation_(iConfig.getParameter("runEmulation")), cutSet_(iConfig.getParameter("cutSet")), chi2rzMax_(cutSet_.getParameter("chi2rzMax")), dispMVAMin_(cutSet_.getParameter("dispMVAMin")), @@ -129,7 +190,7 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi RTMax_(cutSet_.getParameter("RTMax")) { //--- Define EDM output to be written to file (if required) produces(outputTrackCollectionName_); - runTime_ = std::make_unique(this->ONNXmodel_); + if(runEmulation_) produces(outputTrackEmulationCollectionName_); } void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { @@ -137,10 +198,14 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e iEvent.getByToken(ttTrackMCTruthToken_, MCTruthTTTrackHandle); edm::Handle>> TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); + edm::Handle>> TTTrackGTTHandle; + iEvent.getByToken(trackGTTToken_, TTTrackGTTHandle); std::vector>::const_iterator iterL1Track; int this_l1track = 0; std::vector>> selectedTracksWithTruth; + std::vector>> selectedTracksEmulationWithTruth; + //Simulation track selection loop for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); this_l1track++; @@ -158,11 +223,14 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float chi2rz = l1track_ptr->chi2ZRed(); float bendchi2 = l1track_ptr->stubPtConsistency(); float MVA1 = l1track_ptr->trkMVA1(); - float MVA2 = l1track_ptr->trkMVA2(); + + //float MVA2 = l1track_ptr->trkMVA2(); std::vector>, TTStub>> stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); - if (chi2rz < chi2rzMax_ && MVA2 > dispMVAMin_ && MVA1 > promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { + //std::cout<<"simulation track pt: "< promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { if (fabs(d0) > dispD0Min_) { if (MVA1 <= promptMVADispTrackMin_) continue; @@ -189,27 +257,120 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e -999, -999, -999, - rinv, + (1/rinv), (this_l1track - 1), nullptr, nstub, chi2rphi, chi2rz, bendchi2, - MVA1, - MVA2); + MVA1); edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ptr); selectedTracksWithTruth.push_back(std::make_pair(track, my_tp)); } } - sort(selectedTracksWithTruth.begin(), selectedTracksWithTruth.end(), ComparePtTrack); + //Emulation track selection loop + this_l1track = 0; + for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { + edm::Ptr> l1track_ptr(TTTrackGTTHandle, this_l1track); + edm::Ptr> l1track_ref(TTTrackHandle, this_l1track); + this_l1track++; + +#if 0 + float ptSim = l1track_ptr->momentum().perp(); + float etaSim = l1track_ptr->momentum().eta(); + float phiSim = l1track_ptr->momentum().phi(); + float z0Sim = l1track_ptr->z0(); //cm + float x0Sim = l1track_ptr->POCA().x(); + float y0Sim = l1track_ptr->POCA().y(); + float d0Sim = -x0Sim * sin(phiSim) + y0Sim * cos(phiSim); + float d0SimAlt = l1track_ptr->d0(); + int chargeSim = (int)(l1track_ptr->rInv() / fabs(l1track_ptr->rInv())); + float chi2Sim = l1track_ptr->chi2Red(); + float chi2rphiSim = l1track_ptr->chi2XYRed(); + float chi2rzSim = l1track_ptr->chi2ZRed(); + float bendchi2Sim = l1track_ptr->stubPtConsistency(); + float MVA1Sim = l1track_ptr->trkMVA1(); + std::vector>, TTStub>> + stubRefsSim = l1track_ptr->getStubRefs(); + int nstubSim = (int)stubRefsSim.size(); + + //std::cout<<"simulation track pt: "<getZ0(); //cm + float d0 = l1track_ptr->getD0(); + int charge = ChargeFromBits(*l1track_ptr); + float rho = charge*convertPtToR(pt); + float chi2rphi = l1track_ptr->getChi2RPhi(); + float chi2rz = l1track_ptr->getChi2RZ(); + float bendchi2 = l1track_ptr->getBendChi2(); + float MVA1 = l1track_ptr->getMVAQuality(); + //float MVA2 = l1track_ptr->trkMVA2(); + //std::vector>, TTStub>> + //stubRefs = l1track_ptr->getStubRefs(); + int nstub = l1track_ptr->getNStubs(); + + //std::cout<<"emulation track pt: "< promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { + if (fabs(d0) > dispD0Min_) { + if (MVA1 <= promptMVADispTrackMin_) + continue; + } + if (fabs(eta) > overlapEtaMin_ && fabs(eta) < overlapEtaMax_) { + if (nstub <= overlapNStubsMin_) + continue; + } + if (fabs(eta) > diskEtaMin_) { + if (fabs(d0) <= diskD0Min_) + continue; + } + if (fabs(eta) <= diskEtaMin_) { + if (fabs(d0) <= barrelD0Min_) + continue; + } + + Track_Parameters track = Track_Parameters(pt, + -d0, + z0, + eta, + phi, + -99999, + -999, + -999, + -999, + rho, + (this_l1track - 1), + nullptr, + nstub, + chi2rphi, + chi2rz, + bendchi2, + MVA1); + + edm::Ptr my_tp = MCTruthTTTrackHandle->findTrackingParticlePtr(l1track_ref); + selectedTracksEmulationWithTruth.push_back(std::make_pair(track, my_tp)); + } + } + + + //int numIntersections = 0; + //int numVertices = 0; + //std::cout<<"simulated number of tracks passing cuts: "< product(new std::vector()); for (int i = 0; i < int(selectedTracksWithTruth.size() - 1); i++) { for (int j = i + 1; j < int(selectedTracksWithTruth.size()); j++) { if (dist_TPs(selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first) != 0) continue; + //numIntersections++; Double_t x_dv_trk = -9999.0; Double_t y_dv_trk = -9999.0; Double_t z_dv_trk = -9999.0; @@ -241,8 +402,6 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e l1t::DisplacedTrackVertex outputVertex = l1t::DisplacedTrackVertex(selectedTracksWithTruth[i].first.index, selectedTracksWithTruth[j].first.index, - i, - j, inTraj, vertex.d_T, vertex.R_T, @@ -253,12 +412,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.z_dv, vertex.openingAngle, vertex.p_mag, - fabs(i - j), isReal); - std::vector ortinput_names; - std::vector ortoutput_names; - cms::Ort::FloatArrays ortinput; - cms::Ort::FloatArrays ortoutputs; + float minD0 = vertex.a.d0; if (fabs(vertex.b.d0) < fabs(minD0)) minD0 = vertex.b.d0; @@ -278,24 +433,137 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e selectedTracksWithTruth[j].first.bendchi2, selectedTracksWithTruth[i].first.MVA1, selectedTracksWithTruth[j].first.MVA1, - selectedTracksWithTruth[i].first.MVA2, - selectedTracksWithTruth[j].first.MVA2, vertex.d_T, vertex.R_T, vertex.cos_T, vertex.delta_z}; - ortinput_names.push_back(this->ONNXInputName_); - ortoutput_names = runTime_->getOutputNames(); - ortinput.push_back(Transformed_features); - int batch_size = 1; - ortoutputs = runTime_->run(ortinput_names, ortinput, {}, ortoutput_names, batch_size); - outputVertex.setScore(ortoutputs[1][1]); + + //std::vector TransformedFloat_features; + //for(auto feature: Transformed_features){ + //TransformedFloat_features.push_back(feature); + //} + + if(isReal){ + std::cout<<"simulation features: "< bdt(this->model_); + std::vector output = bdt.decision_function(Transformed_features); + //outputVertex.setScore(1. / (1. + exp(-output.at(0)))); + outputVertex.setScore(1. / (1. + exp(-output.at(0)))); + if(isReal) std::cout<<"vertex true position: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0))))<<" raw score: "<emplace_back(outputVertex); + //numVertices++; } } + //std::cout<<"simulation number of intersections: "< productEmulation(new std::vector()); + for (int i = 0; i < int(selectedTracksEmulationWithTruth.size() - 1); i++) { + for (int j = i + 1; j < int(selectedTracksEmulationWithTruth.size()); j++) { + if (dist_TPs(selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first) != 0) + continue; + //numIntersectionsEmu++; + Double_t x_dv_trk = -9999.0; + Double_t y_dv_trk = -9999.0; + Double_t z_dv_trk = -9999.0; + edm::Ptr tp_i = selectedTracksEmulationWithTruth[i].second; + edm::Ptr tp_j = selectedTracksEmulationWithTruth[j].second; + bool isReal = false; + if (!tp_i.isNull() && !tp_j.isNull()) { + bool isHard_i = false; + bool isHard_j = false; + if (!tp_i->genParticles().empty() && !tp_j->genParticles().empty()) { + isHard_i = tp_i->genParticles()[0]->isHardProcess() || tp_i->genParticles()[0]->fromHardProcessFinalState(); + isHard_j = tp_j->genParticles()[0]->isHardProcess() || tp_j->genParticles()[0]->fromHardProcessFinalState(); + } + + if (tp_i->eventId().event() == 0 && tp_j->eventId().event() == 0 && fabs(tp_i->vx() - tp_j->vx()) < 0.0001 && + fabs(tp_i->vy() - tp_j->vy()) < 0.0001 && fabs(tp_i->vz() - tp_j->vz()) < 0.0001 && isHard_i && isHard_j && + ((tp_i->charge() + tp_j->charge()) == 0)) { + isReal = true; + } + } + + int inTraj = + calcVertex(selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first, x_dv_trk, y_dv_trk, z_dv_trk); + Vertex_Parameters vertex = Vertex_Parameters( + x_dv_trk, y_dv_trk, z_dv_trk, selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first); + + if(vertex.R_T>RTMax_) continue; + if(vertex.R_T> Transformed_features = {selectedTracksEmulationWithTruth[i].first.pt, + selectedTracksEmulationWithTruth[j].first.pt, + selectedTracksEmulationWithTruth[i].first.eta, + selectedTracksEmulationWithTruth[j].first.eta, + selectedTracksEmulationWithTruth[i].first.phi, + selectedTracksEmulationWithTruth[j].first.phi, + selectedTracksEmulationWithTruth[i].first.d0, + selectedTracksEmulationWithTruth[j].first.d0, + selectedTracksEmulationWithTruth[i].first.z0, + selectedTracksEmulationWithTruth[j].first.z0, + selectedTracksEmulationWithTruth[i].first.chi2rz, + selectedTracksEmulationWithTruth[j].first.chi2rz, + selectedTracksEmulationWithTruth[i].first.bendchi2, + selectedTracksEmulationWithTruth[j].first.bendchi2, + selectedTracksEmulationWithTruth[i].first.MVA1, + selectedTracksEmulationWithTruth[j].first.MVA1, + vertex.d_T, + vertex.R_T, + vertex.cos_T, + vertex.delta_z}; + if(isReal){ + std::cout<<"emulation features: "<, ap_fixed<32,16,AP_RND_CONV, AP_SAT>, true> bdt(this->model_); + std::vector> output = bdt.decision_function(Transformed_features); + //std::cout<<"transformed first pt: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0).to_float())))<<" raw score: "<emplace_back(outputVertex); + //numVerticesEmu++; + } + } + //std::cout<<"emulation number of intersections: "< pt_intern; + typedef ap_ufixed pt_intern; typedef ap_fixed glbeta_intern; typedef ap_int glbphi_intern; typedef ap_int z0_intern; // 40cm / 0.1 - typedef ap_uint d0_intern; + typedef ap_int d0_intern; + typedef ap_int rinv_intern; inline const unsigned int DoubleToBit(double value, unsigned int maxBits, double step) { unsigned int digitized_value = std::floor(std::abs(value) / step); diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index 80215a052cb77..b9e1b96dbcf8d 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -2,10 +2,12 @@ DisplacedVertexProducer = cms.EDProducer('DisplacedVertexProducer', l1TracksInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), + l1TracksGTTInputTag = cms.InputTag("l1tGTTInputProducerExtended","Level1TTTracksExtendedConverted"), l1TrackVertexCollectionName = cms.string("dispVertices"), + l1TrackEmulationVertexCollectionName = cms.string("dispVerticesEmulation"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - ONNXmodel = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertMixedTraining.onnx"), - ONNXInputName = cms.string("feature_input"), + model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json"), + runEmulation = cms.bool(True), cutSet = cms.PSet( chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this dispMVAMin = cms.double(0.2), # displaced track quality MVA score for all tracks must be greater than this @@ -26,7 +28,7 @@ ) ''' -Features for displaced vertex BDT: ['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'trkExt_MVA2_firstTrk', 'trkExt_MVA2', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) +Features for displaced vertex BDT: ['trkExt_pt_firstTrk', 'trkExt_pt', 'trkExt_eta_firstTrk', 'trkExt_eta', 'trkExt_phi_firstTrk', 'trkExt_phi', 'trkExt_d0_firstTrk', 'trkExt_d0', 'trkExt_z0_firstTrk', 'trkExt_z0', 'trkExt_chi2rz_firstTrk', 'trkExt_chi2rz', 'trkExt_bendchi2_firstTrk', 'trkExt_bendchi2', 'trkExt_MVA_firstTrk', 'trkExt_MVA', 'dv_d_T', 'dv_R_T', 'dv_cos_T', 'dv_del_Z']) dv inputs are vertex quantities and trkExt is a displaced track property. The firstTrk suffix means the track quantity comes from the higher pt track associated to a vertex. If there's no firstTrk suffix, then the track property is from the lower pt track associated to a vertex. ''' diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index 94a0b01a5c427..c62ed92bfdb29 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -1,3 +1,4 @@ + ////////////////////////////////////////////////////////////////////// // // // Analyzer for making mini-ntuple for L1 track performance plots // @@ -25,6 +26,7 @@ #include "DataFormats/L1TrackTrigger/interface/TTCluster.h" #include "DataFormats/L1TrackTrigger/interface/TTStub.h" #include "DataFormats/L1TrackTrigger/interface/TTTrack.h" +#include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h" #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" @@ -91,6 +93,8 @@ #include #include +#include + ////////////// // NAMESPACES using namespace std; @@ -111,6 +115,8 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer L1TrackCollection; typedef edm::Ref L1TrackRef; typedef edm::RefVector L1TrackRefCollection; + typedef ap_fixed glbeta_intern; + typedef ap_int glbphi_intern; public: // Constructor/destructor @@ -123,7 +129,32 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer bool isHard(T particle); - + double DoublePtFromBits(const L1Track&) const; + double DoubleEtaFromBits(const L1Track&) const; + double DoublePhiFromBits(const L1Track&) const; + int ChargeFromBits(const L1Track&) const; + double convertPtToR(double pt); + + inline const unsigned int DoubleToBit(double value, unsigned int maxBits, double step) const { + unsigned int digitized_value = std::floor(std::abs(value) / step); + unsigned int digitized_maximum = (1 << (maxBits - 1)) - 1; // The remove 1 bit from nBits to account for the sign + if (digitized_value > digitized_maximum) + digitized_value = digitized_maximum; + if (value < 0) + digitized_value = (1 << maxBits) - digitized_value; // two's complement encoding + return digitized_value; + } + + inline const double BitToDouble(unsigned int bits, unsigned int maxBits, double step) const { + int isign = 1; + unsigned int digitized_maximum = (1 << maxBits) - 1; + if (bits & (1 << (maxBits - 1))) { // check the sign + isign = -1; + bits = (1 << (maxBits + 1)) - bits; + } + return (double(bits & digitized_maximum) + 0.5) * step * isign; + } + // Mandatory methods void beginJob() override; void endJob() override; @@ -132,7 +163,9 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer& selectedTrackRefs) const; - + int getSelectedTrackPtrIndex(const L1TrackPtr& trackPtr, + const edm::Handle& trackCollection) const; + private: //----------------------------------------------------------------------------------------------- // Containers of parameters passed by python configuration file @@ -194,6 +227,7 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer> GenParticleToken_; edm::EDGetTokenT> SimVertexToken_; edm::EDGetTokenT> DispVertToken_; + edm::EDGetTokenT> DispVertEmulationToken_; edm::EDGetTokenT L1VertexToken_; edm::EDGetTokenT L1VertexEmuToken_; @@ -308,14 +343,33 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_dv_parentPt; std::vector* m_dv_firstIndexTrk; std::vector* m_dv_secondIndexTrk; - std::vector* m_dv_firstIndexPt; - std::vector* m_dv_secondIndexPt; std::vector* m_dv_inTraj; std::vector* m_dv_del_Z; - std::vector* m_dv_delIndexPt; std::vector* m_dv_isReal; std::vector* m_dv_score; + //displaced vertices emulation + std::vector* m_dvEmu_d_T; + std::vector* m_dvEmu_R_T; + std::vector* m_dvEmu_cos_T; + std::vector* m_dvEmu_x; + std::vector* m_dvEmu_y; + std::vector* m_dvEmu_z; + std::vector* m_dvEmu_openingAngle; + std::vector* m_dvEmu_parentPt; + std::vector* m_dvEmu_firstIndexTrk; + std::vector* m_dvEmu_secondIndexTrk; + std::vector* m_dvEmu_inTraj; + std::vector* m_dvEmu_del_Z; + std::vector* m_dvEmu_isReal; + std::vector* m_dvEmu_score; + std::vector* m_dvEmu_scoreEmu; + + std::vector* m_dvEmuFixed_d_T; + std::vector* m_dvEmuFixed_R_T; + std::vector* m_dvEmuFixed_cos_T; + std::vector* m_dvEmuFixed_del_Z; + // all L1 tracks (prompt) std::vector* m_trk_pt; std::vector* m_trk_eta; @@ -421,6 +475,28 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_trkExt_selected_associated_foretmiss_index; std::vector* m_trkExt_selected_associated_emulation_foretmiss_index; + // extended L1 tracks emulation + std::vector* m_trkExtEmu_pt; + std::vector* m_trkExtEmu_eta; + std::vector* m_trkExtEmu_phi; + std::vector* m_trkExtEmu_d0; // (filled if nFitPar==5, else 999) + std::vector* m_trkExtEmu_rho; + std::vector* m_trkExtEmu_z0; + std::vector* m_trkExtEmu_chi2rphi; + std::vector* m_trkExtEmu_chi2rz; + std::vector* m_trkExtEmu_bendchi2; + std::vector* m_trkExtEmu_MVA; + std::vector* m_trkExtEmu_nstub; + + std::vector* m_trkExtEmuFixed_pt; + std::vector* m_trkExtEmuFixed_eta; + std::vector* m_trkExtEmuFixed_phi; + std::vector* m_trkExtEmuFixed_d0; // (filled if nFitPar==5, else 999) + std::vector* m_trkExtEmuFixed_z0; + std::vector* m_trkExtEmuFixed_chi2rz; + std::vector* m_trkExtEmuFixed_bendchi2; + std::vector* m_trkExtEmuFixed_MVA; + // all tracking particles std::vector* m_tp_pt; std::vector* m_tp_eta; @@ -482,6 +558,28 @@ class L1TrackObjectNtupleMaker : public edm::one::EDAnalyzer* m_matchtrkExt_seed; std::vector* m_matchtrkExt_hitpattern; + // *L1 track* emulation properties if m_tp_nmatch > 0 (extended) + std::vector* m_matchtrkExtEmu_pt; + std::vector* m_matchtrkExtEmu_eta; + std::vector* m_matchtrkExtEmu_phi; + std::vector* m_matchtrkExtEmu_d0; // (filled if nFitPar==5, else 999) + std::vector* m_matchtrkExtEmu_rho; + std::vector* m_matchtrkExtEmu_z0; + std::vector* m_matchtrkExtEmu_chi2rphi; + std::vector* m_matchtrkExtEmu_chi2rz; + std::vector* m_matchtrkExtEmu_bendchi2; + std::vector* m_matchtrkExtEmu_MVA; + std::vector* m_matchtrkExtEmu_nstub; + + std::vector* m_matchtrkExtEmuFixed_pt; + std::vector* m_matchtrkExtEmuFixed_eta; + std::vector* m_matchtrkExtEmuFixed_phi; + std::vector* m_matchtrkExtEmuFixed_d0; // (filled if nFitPar==5, else 999) + std::vector* m_matchtrkExtEmuFixed_z0; + std::vector* m_matchtrkExtEmuFixed_chi2rz; + std::vector* m_matchtrkExtEmuFixed_bendchi2; + std::vector* m_matchtrkExtEmuFixed_MVA; + // ALL stubs std::vector* m_allstub_x; std::vector* m_allstub_y; @@ -648,6 +746,7 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenParticleInputTag = iConfig.getParameter("GenParticleInputTag"); SimVertexInputTag = iConfig.getParameter("SimVertexInputTag"); DisplacedVertexInputTag = iConfig.getParameter("DisplacedVertexInputTag"); + DisplacedVertexEmulationInputTag = iConfig.getParameter("DisplacedVertexEmulationInputTag"); if (Displaced == "Prompt" || Displaced == "Both") { L1TrackInputTag = iConfig.getParameter("L1TrackInputTag"); @@ -785,8 +884,10 @@ L1TrackObjectNtupleMaker::L1TrackObjectNtupleMaker(edm::ParameterSet const& iCon GenJetToken_ = consumes>(GenJetInputTag); GenParticleToken_ = consumes>(GenParticleInputTag); SimVertexToken_ = consumes>(SimVertexInputTag); - if (runDispVert) + if (runDispVert){ DispVertToken_ = consumes>(DisplacedVertexInputTag); + DispVertEmulationToken_ = consumes>(DisplacedVertexEmulationInputTag); + } L1VertexToken_ = consumes(RecoVertexInputTag); L1VertexEmuToken_ = consumes(RecoVertexEmuInputTag); tTopoToken_ = esConsumes(edm::ESInputTag("", "")); @@ -908,6 +1009,27 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_trkExt_selected_associated_foretmiss_index; delete m_trkExt_selected_associated_emulation_foretmiss_index; + delete m_trkExtEmu_pt; + delete m_trkExtEmu_eta; + delete m_trkExtEmu_phi; + delete m_trkExtEmu_d0; + delete m_trkExtEmu_rho; + delete m_trkExtEmu_z0; + delete m_trkExtEmu_chi2rphi; + delete m_trkExtEmu_chi2rz; + delete m_trkExtEmu_bendchi2; + delete m_trkExtEmu_MVA; + delete m_trkExtEmu_nstub; + + delete m_trkExtEmuFixed_pt; + delete m_trkExtEmuFixed_eta; + delete m_trkExtEmuFixed_phi; + delete m_trkExtEmuFixed_d0; + delete m_trkExtEmuFixed_z0; + delete m_trkExtEmuFixed_chi2rz; + delete m_trkExtEmuFixed_bendchi2; + delete m_trkExtEmuFixed_MVA; + delete m_tp_pt; delete m_tp_eta; delete m_tp_phi; @@ -945,14 +1067,32 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_dv_parentPt; delete m_dv_firstIndexTrk; delete m_dv_secondIndexTrk; - delete m_dv_firstIndexPt; - delete m_dv_secondIndexPt; delete m_dv_inTraj; delete m_dv_del_Z; - delete m_dv_delIndexPt; delete m_dv_isReal; delete m_dv_score; + delete m_dvEmu_d_T; + delete m_dvEmu_R_T; + delete m_dvEmu_cos_T; + delete m_dvEmu_x; + delete m_dvEmu_y; + delete m_dvEmu_z; + delete m_dvEmu_openingAngle; + delete m_dvEmu_parentPt; + delete m_dvEmu_firstIndexTrk; + delete m_dvEmu_secondIndexTrk; + delete m_dvEmu_inTraj; + delete m_dvEmu_del_Z; + delete m_dvEmu_isReal; + delete m_dvEmu_score; + delete m_dvEmu_scoreEmu; + + delete m_dvEmuFixed_d_T; + delete m_dvEmuFixed_R_T; + delete m_dvEmuFixed_cos_T; + delete m_dvEmuFixed_del_Z; + delete m_matchtrk_pt; delete m_matchtrk_eta; delete m_matchtrk_phi; @@ -991,6 +1131,27 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_matchtrkExt_seed; delete m_matchtrkExt_hitpattern; + delete m_matchtrkExtEmu_pt; + delete m_matchtrkExtEmu_eta; + delete m_matchtrkExtEmu_phi; + delete m_matchtrkExtEmu_d0; + delete m_matchtrkExtEmu_rho; + delete m_matchtrkExtEmu_z0; + delete m_matchtrkExtEmu_chi2rphi; + delete m_matchtrkExtEmu_chi2rz; + delete m_matchtrkExtEmu_bendchi2; + delete m_matchtrkExtEmu_MVA; + delete m_matchtrkExtEmu_nstub; + + delete m_matchtrkExtEmuFixed_pt; + delete m_matchtrkExtEmuFixed_eta; + delete m_matchtrkExtEmuFixed_phi; + delete m_matchtrkExtEmuFixed_d0; + delete m_matchtrkExtEmuFixed_z0; + delete m_matchtrkExtEmuFixed_chi2rz; + delete m_matchtrkExtEmuFixed_bendchi2; + delete m_matchtrkExtEmuFixed_MVA; + delete m_allstub_x; delete m_allstub_y; delete m_allstub_z; @@ -1166,6 +1327,50 @@ bool L1TrackObjectNtupleMaker::isHard(T particle) { return false; } +double L1TrackObjectNtupleMaker::DoublePtFromBits(const L1Track &track) const { + ap_uint<14> ptEmulationBits = track.getTrackWord()(TTTrack_TrackWord::TrackBitLocations::kRinvMSB - 1, TTTrack_TrackWord::TrackBitLocations::kRinvLSB); + ap_ufixed<14, 9> ptEmulation; + ptEmulation.V = (ptEmulationBits.range()); + return ptEmulation.to_double(); +} + +double L1TrackObjectNtupleMaker::DoubleEtaFromBits(const L1Track &track) const { + TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord(); + glbeta_intern digieta; + digieta.V = etaBits.range(); + return (double)digieta; +} + +double L1TrackObjectNtupleMaker::DoublePhiFromBits(const L1Track &track) const { + int Sector = track.phiSector(); + double sector_phi_value = 0; + if (Sector < 5) { + sector_phi_value = 2.0 * M_PI * Sector / 9.0; + } else { + sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0); + } + glbphi_intern trkphiSector = DoubleToBit( + sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); + glbphi_intern local_phiBits = 0; + local_phiBits.V = track.getPhiWord(); + glbphi_intern local_phi = + DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0), + TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, + TTTrack_TrackWord::stepPhi0); + glbphi_intern digiphi = local_phi + trkphiSector; + return BitToDouble( + digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + 4, TTTrack_TrackWord::stepPhi0); +} + +int L1TrackObjectNtupleMaker::ChargeFromBits(const L1Track &track) const { + ap_uint<1> chargeBit = track.getTrackWord()[TTTrack_TrackWord::TrackBitLocations::kRinvMSB]; + return 1 - (2*chargeBit.to_uint()); +} + +double L1TrackObjectNtupleMaker::convertPtToR(double pt){ + return 100.0 * (1.0 / (0.3 * 3.8)) * pt; //returns R in cm +} + //////////// // BEGIN JOB void L1TrackObjectNtupleMaker::beginJob() { @@ -1283,6 +1488,27 @@ void L1TrackObjectNtupleMaker::beginJob() { m_trkExt_selected_associated_foretmiss_index = new std::vector; m_trkExt_selected_associated_emulation_foretmiss_index = new std::vector; + m_trkExtEmu_pt = new std::vector; + m_trkExtEmu_eta = new std::vector; + m_trkExtEmu_phi = new std::vector; + m_trkExtEmu_d0 = new std::vector; + m_trkExtEmu_rho = new std::vector; + m_trkExtEmu_z0 = new std::vector; + m_trkExtEmu_chi2rphi = new std::vector; + m_trkExtEmu_chi2rz = new std::vector; + m_trkExtEmu_bendchi2 = new std::vector; + m_trkExtEmu_MVA = new std::vector; + m_trkExtEmu_nstub = new std::vector; + + m_trkExtEmuFixed_pt = new std::vector; + m_trkExtEmuFixed_eta = new std::vector; + m_trkExtEmuFixed_phi = new std::vector; + m_trkExtEmuFixed_d0 = new std::vector; + m_trkExtEmuFixed_z0 = new std::vector; + m_trkExtEmuFixed_chi2rz = new std::vector; + m_trkExtEmuFixed_bendchi2 = new std::vector; + m_trkExtEmuFixed_MVA = new std::vector; + m_tp_pt = new std::vector; m_tp_eta = new std::vector; m_tp_phi = new std::vector; @@ -1320,14 +1546,32 @@ void L1TrackObjectNtupleMaker::beginJob() { m_dv_parentPt = new std::vector; m_dv_firstIndexTrk = new std::vector; m_dv_secondIndexTrk = new std::vector; - m_dv_firstIndexPt = new std::vector; - m_dv_secondIndexPt = new std::vector; m_dv_inTraj = new std::vector; m_dv_del_Z = new std::vector; - m_dv_delIndexPt = new std::vector; m_dv_isReal = new std::vector; m_dv_score = new std::vector; + m_dvEmu_d_T = new std::vector; + m_dvEmu_R_T = new std::vector; + m_dvEmu_cos_T = new std::vector; + m_dvEmu_x = new std::vector; + m_dvEmu_y = new std::vector; + m_dvEmu_z = new std::vector; + m_dvEmu_openingAngle = new std::vector; + m_dvEmu_parentPt = new std::vector; + m_dvEmu_firstIndexTrk = new std::vector; + m_dvEmu_secondIndexTrk = new std::vector; + m_dvEmu_inTraj = new std::vector; + m_dvEmu_del_Z = new std::vector; + m_dvEmu_isReal = new std::vector; + m_dvEmu_score = new std::vector; + m_dvEmu_scoreEmu = new std::vector; + + m_dvEmuFixed_d_T = new std::vector; + m_dvEmuFixed_R_T = new std::vector; + m_dvEmuFixed_cos_T = new std::vector; + m_dvEmuFixed_del_Z = new std::vector; + m_matchtrk_pt = new std::vector; m_matchtrk_eta = new std::vector; m_matchtrk_phi = new std::vector; @@ -1366,6 +1610,27 @@ void L1TrackObjectNtupleMaker::beginJob() { m_matchtrkExt_seed = new std::vector; m_matchtrkExt_hitpattern = new std::vector; + m_matchtrkExtEmu_pt = new std::vector; + m_matchtrkExtEmu_eta = new std::vector; + m_matchtrkExtEmu_phi = new std::vector; + m_matchtrkExtEmu_d0 = new std::vector; + m_matchtrkExtEmu_rho = new std::vector; + m_matchtrkExtEmu_z0 = new std::vector; + m_matchtrkExtEmu_chi2rphi = new std::vector; + m_matchtrkExtEmu_chi2rz = new std::vector; + m_matchtrkExtEmu_bendchi2 = new std::vector; + m_matchtrkExtEmu_MVA = new std::vector; + m_matchtrkExtEmu_nstub = new std::vector; + + m_matchtrkExtEmuFixed_pt = new std::vector; + m_matchtrkExtEmuFixed_eta = new std::vector; + m_matchtrkExtEmuFixed_phi = new std::vector; + m_matchtrkExtEmuFixed_d0 = new std::vector; + m_matchtrkExtEmuFixed_z0 = new std::vector; + m_matchtrkExtEmuFixed_chi2rz = new std::vector; + m_matchtrkExtEmuFixed_bendchi2 = new std::vector; + m_matchtrkExtEmuFixed_MVA = new std::vector; + m_allstub_x = new std::vector; m_allstub_y = new std::vector; m_allstub_z = new std::vector; @@ -1587,6 +1852,27 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("trkExt_gtt_selected_associated_foretmiss_index", &m_trkExt_selected_associated_foretmiss_index); eventTree->Branch("trkExt_gtt_selected_associated_emulation_foretmiss_index", &m_trkExt_selected_associated_emulation_foretmiss_index); + + eventTree->Branch("trkExtEmu_pt", &m_trkExtEmu_pt); + eventTree->Branch("trkExtEmu_eta", &m_trkExtEmu_eta); + eventTree->Branch("trkExtEmu_phi", &m_trkExtEmu_phi); + eventTree->Branch("trkExtEmu_d0", &m_trkExtEmu_d0); + eventTree->Branch("trkExtEmu_rho", &m_trkExtEmu_rho); + eventTree->Branch("trkExtEmu_z0", &m_trkExtEmu_z0); + eventTree->Branch("trkExtEmu_chi2rphi", &m_trkExtEmu_chi2rphi); + eventTree->Branch("trkExtEmu_chi2rz", &m_trkExtEmu_chi2rz); + eventTree->Branch("trkExtEmu_bendchi2", &m_trkExtEmu_bendchi2); + eventTree->Branch("trkExtEmu_MVA", &m_trkExtEmu_MVA); + eventTree->Branch("trkExtEmu_nstub", &m_trkExtEmu_nstub); + + eventTree->Branch("trkExtEmuFixed_pt", &m_trkExtEmuFixed_pt); + eventTree->Branch("trkExtEmuFixed_eta", &m_trkExtEmuFixed_eta); + eventTree->Branch("trkExtEmuFixed_phi", &m_trkExtEmuFixed_phi); + eventTree->Branch("trkExtEmuFixed_d0", &m_trkExtEmuFixed_d0); + eventTree->Branch("trkExtEmuFixed_z0", &m_trkExtEmuFixed_z0); + eventTree->Branch("trkExtEmuFixed_chi2rz", &m_trkExtEmuFixed_chi2rz); + eventTree->Branch("trkExtEmuFixed_bendchi2", &m_trkExtEmuFixed_bendchi2); + eventTree->Branch("trkExtEmuFixed_MVA", &m_trkExtEmuFixed_MVA); } eventTree->Branch("tp_pt", &m_tp_pt); eventTree->Branch("tp_eta", &m_tp_eta); @@ -1648,6 +1934,27 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("matchtrkExt_dhits", &m_matchtrkExt_dhits); eventTree->Branch("matchtrkExt_seed", &m_matchtrkExt_seed); eventTree->Branch("matchtrkExt_hitpattern", &m_matchtrkExt_hitpattern); + + eventTree->Branch("matchtrkExtEmu_pt", &m_matchtrkExtEmu_pt); + eventTree->Branch("matchtrkExtEmu_eta", &m_matchtrkExtEmu_eta); + eventTree->Branch("matchtrkExtEmu_phi", &m_matchtrkExtEmu_phi); + eventTree->Branch("matchtrkExtEmu_d0", &m_matchtrkExtEmu_d0); + eventTree->Branch("matchtrkExtEmu_rho", &m_matchtrkExtEmu_rho); + eventTree->Branch("matchtrkExtEmu_z0", &m_matchtrkExtEmu_z0); + eventTree->Branch("matchtrkExtEmu_chi2rphi", &m_matchtrkExtEmu_chi2rphi); + eventTree->Branch("matchtrkExtEmu_chi2rz", &m_matchtrkExtEmu_chi2rz); + eventTree->Branch("matchtrkExtEmu_bendchi2", &m_matchtrkExtEmu_bendchi2); + eventTree->Branch("matchtrkExtEmu_MVA", &m_matchtrkExtEmu_MVA); + eventTree->Branch("matchtrkExtEmu_nstub", &m_matchtrkExtEmu_nstub); + + eventTree->Branch("matchtrkExtEmuFixed_pt", &m_matchtrkExtEmuFixed_pt); + eventTree->Branch("matchtrkExtEmuFixed_eta", &m_matchtrkExtEmuFixed_eta); + eventTree->Branch("matchtrkExtEmuFixed_phi", &m_matchtrkExtEmuFixed_phi); + eventTree->Branch("matchtrkExtEmuFixed_d0", &m_matchtrkExtEmuFixed_d0); + eventTree->Branch("matchtrkExtEmuFixed_z0", &m_matchtrkExtEmuFixed_z0); + eventTree->Branch("matchtrkExtEmuFixed_chi2rz", &m_matchtrkExtEmuFixed_chi2rz); + eventTree->Branch("matchtrkExtEmuFixed_bendchi2", &m_matchtrkExtEmuFixed_bendchi2); + eventTree->Branch("matchtrkExtEmuFixed_MVA", &m_matchtrkExtEmuFixed_MVA); } if (SaveStubs) { @@ -1691,13 +1998,31 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("dv_parentPt", &m_dv_parentPt); eventTree->Branch("dv_firstIndexTrk", &m_dv_firstIndexTrk); eventTree->Branch("dv_secondIndexTrk", &m_dv_secondIndexTrk); - eventTree->Branch("dv_firstIndexPt", &m_dv_firstIndexPt); - eventTree->Branch("dv_secondIndexPt", &m_dv_secondIndexPt); eventTree->Branch("dv_inTraj", &m_dv_inTraj); eventTree->Branch("dv_del_Z", &m_dv_del_Z); - eventTree->Branch("dv_delIndexPt", &m_dv_delIndexPt); eventTree->Branch("dv_isReal", &m_dv_isReal); eventTree->Branch("dv_score", &m_dv_score); + + eventTree->Branch("dvEmu_d_T", &m_dvEmu_d_T); + eventTree->Branch("dvEmu_R_T", &m_dvEmu_R_T); + eventTree->Branch("dvEmu_cos_T", &m_dvEmu_cos_T); + eventTree->Branch("dvEmu_x", &m_dvEmu_x); + eventTree->Branch("dvEmu_y", &m_dvEmu_y); + eventTree->Branch("dvEmu_z", &m_dvEmu_z); + eventTree->Branch("dvEmu_openingAngle", &m_dvEmu_openingAngle); + eventTree->Branch("dvEmu_parentPt", &m_dvEmu_parentPt); + eventTree->Branch("dvEmu_firstIndexTrk", &m_dvEmu_firstIndexTrk); + eventTree->Branch("dvEmu_secondIndexTrk", &m_dvEmu_secondIndexTrk); + eventTree->Branch("dvEmu_inTraj", &m_dvEmu_inTraj); + eventTree->Branch("dvEmu_del_Z", &m_dvEmu_del_Z); + eventTree->Branch("dvEmu_isReal", &m_dvEmu_isReal); + eventTree->Branch("dvEmu_score", &m_dvEmu_score); + eventTree->Branch("dvEmu_scoreEmu", &m_dvEmu_scoreEmu); + + eventTree->Branch("dvEmuFixed_d_T", &m_dvEmuFixed_d_T); + eventTree->Branch("dvEmuFixed_R_T", &m_dvEmuFixed_R_T); + eventTree->Branch("dvEmuFixed_cos_T", &m_dvEmuFixed_cos_T); + eventTree->Branch("dvEmuFixed_del_Z", &m_dvEmuFixed_del_Z); } if (SaveTrackJets) { eventTree->Branch("genjet_eta", &m_genjet_eta); @@ -1930,6 +2255,27 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_selected_emulation_foretmiss_index->clear(); m_trkExt_selected_associated_foretmiss_index->clear(); m_trkExt_selected_associated_emulation_foretmiss_index->clear(); + + m_trkExtEmu_pt->clear(); + m_trkExtEmu_eta->clear(); + m_trkExtEmu_phi->clear(); + m_trkExtEmu_d0->clear(); + m_trkExtEmu_rho->clear(); + m_trkExtEmu_z0->clear(); + m_trkExtEmu_chi2rphi->clear(); + m_trkExtEmu_chi2rz->clear(); + m_trkExtEmu_bendchi2->clear(); + m_trkExtEmu_MVA->clear(); + m_trkExtEmu_nstub->clear(); + + m_trkExtEmuFixed_pt->clear(); + m_trkExtEmuFixed_eta->clear(); + m_trkExtEmuFixed_phi->clear(); + m_trkExtEmuFixed_d0->clear(); + m_trkExtEmuFixed_z0->clear(); + m_trkExtEmuFixed_chi2rz->clear(); + m_trkExtEmuFixed_bendchi2->clear(); + m_trkExtEmuFixed_MVA->clear(); } m_tp_pt->clear(); m_tp_eta->clear(); @@ -1968,13 +2314,31 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dv_parentPt->clear(); m_dv_firstIndexTrk->clear(); m_dv_secondIndexTrk->clear(); - m_dv_firstIndexPt->clear(); - m_dv_secondIndexPt->clear(); m_dv_inTraj->clear(); m_dv_del_Z->clear(); - m_dv_delIndexPt->clear(); m_dv_isReal->clear(); m_dv_score->clear(); + + m_dvEmu_d_T->clear(); + m_dvEmu_R_T->clear(); + m_dvEmu_cos_T->clear(); + m_dvEmu_x->clear(); + m_dvEmu_y->clear(); + m_dvEmu_z->clear(); + m_dvEmu_openingAngle->clear(); + m_dvEmu_parentPt->clear(); + m_dvEmu_firstIndexTrk->clear(); + m_dvEmu_secondIndexTrk->clear(); + m_dvEmu_inTraj->clear(); + m_dvEmu_del_Z->clear(); + m_dvEmu_isReal->clear(); + m_dvEmu_score->clear(); + m_dvEmu_scoreEmu->clear(); + + m_dvEmuFixed_d_T->clear(); + m_dvEmuFixed_R_T->clear(); + m_dvEmuFixed_cos_T->clear(); + m_dvEmuFixed_del_Z->clear(); } if (Displaced == "Prompt" || Displaced == "Both") { m_matchtrk_pt->clear(); @@ -2016,6 +2380,27 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_dhits->clear(); m_matchtrkExt_seed->clear(); m_matchtrkExt_hitpattern->clear(); + + m_matchtrkExtEmu_pt->clear(); + m_matchtrkExtEmu_eta->clear(); + m_matchtrkExtEmu_phi->clear(); + m_matchtrkExtEmu_d0->clear(); + m_matchtrkExtEmu_rho->clear(); + m_matchtrkExtEmu_z0->clear(); + m_matchtrkExtEmu_chi2rphi->clear(); + m_matchtrkExtEmu_chi2rz->clear(); + m_matchtrkExtEmu_bendchi2->clear(); + m_matchtrkExtEmu_MVA->clear(); + m_matchtrkExtEmu_nstub->clear(); + + m_matchtrkExtEmuFixed_pt->clear(); + m_matchtrkExtEmuFixed_eta->clear(); + m_matchtrkExtEmuFixed_phi->clear(); + m_matchtrkExtEmuFixed_d0->clear(); + m_matchtrkExtEmuFixed_z0->clear(); + m_matchtrkExtEmuFixed_chi2rz->clear(); + m_matchtrkExtEmuFixed_bendchi2->clear(); + m_matchtrkExtEmuFixed_MVA->clear(); } if (SaveStubs) { @@ -2166,9 +2551,12 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even //Displaced vertices edm::Handle> DispVertHandle; - if (runDispVert) + edm::Handle> DispVertEmulationHandle; + if (runDispVert){ iEvent.getByToken(DispVertToken_, DispVertHandle); - + iEvent.getByToken(DispVertEmulationToken_, DispVertEmulationHandle); + } + //Vertex edm::Handle L1PrimaryVertexHandle; iEvent.getByToken(L1VertexToken_, L1PrimaryVertexHandle); @@ -2339,11 +2727,8 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dv_parentPt->push_back(dispVertIter->parentPt()); m_dv_firstIndexTrk->push_back(dispVertIter->firstIndexTrk()); m_dv_secondIndexTrk->push_back(dispVertIter->secondIndexTrk()); - m_dv_firstIndexPt->push_back(dispVertIter->firstIndexPt()); - m_dv_secondIndexPt->push_back(dispVertIter->secondIndexPt()); m_dv_inTraj->push_back(dispVertIter->inTraj()); m_dv_del_Z->push_back(dispVertIter->del_Z()); - m_dv_delIndexPt->push_back(dispVertIter->delIndexPt()); m_dv_isReal->push_back(dispVertIter->isReal()); m_dv_score->push_back(dispVertIter->score()); } @@ -2355,6 +2740,44 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even } else { edm::LogWarning("DataNotFound") << "\nWarning: SimVertexHandle not found in the event" << std::endl; } + + // loop over emulated displaced vertices + if (DispVertEmulationHandle.isValid()) { + vector::const_iterator dispVertEmulationIter; + for (dispVertEmulationIter = DispVertEmulationHandle->begin(); dispVertEmulationIter != DispVertEmulationHandle->end(); ++dispVertEmulationIter) { + + float tmp_dvEmu_d_T = dispVertEmulationIter->d_T(); + float tmp_dvEmu_R_T = dispVertEmulationIter->R_T(); + float tmp_dvEmu_cos_T = dispVertEmulationIter->cos_T(); + float tmp_dvEmu_del_Z = dispVertEmulationIter->del_Z(); + + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_d_T = tmp_dvEmu_d_T; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_R_T = tmp_dvEmu_R_T; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_cos_T = tmp_dvEmu_cos_T; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_del_Z = tmp_dvEmu_del_Z; + + m_dvEmu_d_T->push_back(tmp_dvEmu_d_T); + m_dvEmu_R_T->push_back(tmp_dvEmu_R_T); + m_dvEmu_cos_T->push_back(tmp_dvEmu_cos_T); + m_dvEmu_x->push_back(dispVertEmulationIter->x()); + m_dvEmu_y->push_back(dispVertEmulationIter->y()); + m_dvEmu_z->push_back(dispVertEmulationIter->z()); + m_dvEmu_openingAngle->push_back(dispVertEmulationIter->openingAngle()); + m_dvEmu_parentPt->push_back(dispVertEmulationIter->parentPt()); + m_dvEmu_firstIndexTrk->push_back(dispVertEmulationIter->firstIndexTrk()); + m_dvEmu_secondIndexTrk->push_back(dispVertEmulationIter->secondIndexTrk()); + m_dvEmu_inTraj->push_back(dispVertEmulationIter->inTraj()); + m_dvEmu_del_Z->push_back(tmp_dvEmu_del_Z); + m_dvEmu_isReal->push_back(dispVertEmulationIter->isReal()); + m_dvEmu_score->push_back(dispVertEmulationIter->score()); + m_dvEmu_scoreEmu->push_back(dispVertEmulationIter->scoreEmu().to_float()); + + m_dvEmuFixed_d_T->push_back(tmp_dvEmuFixed_d_T.to_float()); + m_dvEmuFixed_R_T->push_back(tmp_dvEmuFixed_R_T.to_float()); + m_dvEmuFixed_cos_T->push_back(tmp_dvEmuFixed_cos_T.to_float()); + m_dvEmuFixed_del_Z->push_back(tmp_dvEmuFixed_del_Z.to_float()); + } + } // ---------------------------------------------------------------------------------------------- // loop over L1 stubs @@ -2727,6 +3150,27 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even tmp_trk_hitpattern = (int)iterL1Track->hitPattern(); unsigned int tmp_trk_phiSector = iterL1Track->phiSector(); + float tmp_trkEmu_pt = DoublePtFromBits(*l1track_ref); + float tmp_trkEmu_eta = DoubleEtaFromBits(*l1track_ref); + float tmp_trkEmu_phi = DoublePhiFromBits(*l1track_ref); + float tmp_trkEmu_z0 = l1track_ref->getZ0(); + float tmp_trkEmu_d0 = l1track_ref->getD0(); + float tmp_trkEmu_rho = ChargeFromBits(*l1track_ref)*convertPtToR(tmp_trkEmu_pt); + float tmp_trkEmu_chi2rphi = l1track_ref->getChi2RPhi(); + float tmp_trkEmu_chi2rz = l1track_ref->getChi2RZ(); + float tmp_trkEmu_bendchi2 = l1track_ref->getBendChi2(); + float tmp_trkEmu_MVA = l1track_ref->getMVAQuality(); + int tmp_trkEmu_nstub = l1track_ref->getNStubs(); + + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_pt = tmp_trkEmu_pt; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_eta = tmp_trkEmu_eta; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_phi = tmp_trkEmu_phi; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_z0 = tmp_trkEmu_z0; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_d0 = tmp_trkEmu_d0; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_chi2rz = tmp_trkEmu_chi2rz; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_bendchi2 = tmp_trkEmu_bendchi2; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_MVA = tmp_trkEmu_MVA; + // ---------------------------------------------------------------------------------------------- // loop over stubs on tracks int tmp_trk_dhits = 0; @@ -2817,6 +3261,26 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_trkExt_unknown->push_back(tmp_trk_unknown); m_trkExt_combinatoric->push_back(tmp_trk_combinatoric); + m_trkExtEmu_pt->push_back(tmp_trkEmu_pt); + m_trkExtEmu_eta->push_back(tmp_trkEmu_eta); + m_trkExtEmu_phi->push_back(tmp_trkEmu_phi); + m_trkExtEmu_d0->push_back(tmp_trkEmu_d0); + m_trkExtEmu_rho->push_back(tmp_trkEmu_rho); + m_trkExtEmu_z0->push_back(tmp_trkEmu_z0); + m_trkExtEmu_chi2rphi->push_back(tmp_trkEmu_chi2rphi); + m_trkExtEmu_chi2rz->push_back(tmp_trkEmu_chi2rz); + m_trkExtEmu_bendchi2->push_back(tmp_trkEmu_bendchi2); + m_trkExtEmu_MVA->push_back(tmp_trkEmu_MVA); + m_trkExtEmu_nstub->push_back(tmp_trkEmu_nstub); + + m_trkExtEmuFixed_pt->push_back(tmp_trkEmuFixed_pt.to_float()); + m_trkExtEmuFixed_eta->push_back(tmp_trkEmuFixed_eta.to_float()); + m_trkExtEmuFixed_phi->push_back(tmp_trkEmuFixed_phi.to_float()); + m_trkExtEmuFixed_d0->push_back(tmp_trkEmuFixed_d0.to_float()); + m_trkExtEmuFixed_z0->push_back(tmp_trkEmuFixed_z0.to_float()); + m_trkExtEmuFixed_chi2rz->push_back(tmp_trkEmuFixed_chi2rz.to_float()); + m_trkExtEmuFixed_bendchi2->push_back(tmp_trkEmuFixed_bendchi2.to_float()); + m_trkExtEmuFixed_MVA->push_back(tmp_trkEmuFixed_MVA.to_float()); // ---------------------------------------------------------------------------------------------- // for studying the fake rate // ---------------------------------------------------------------------------------------------- @@ -3289,7 +3753,7 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrk_seed->push_back(tmp_matchtrk_seed); m_matchtrk_hitpattern->push_back(tmp_matchtrk_hitpattern); } - + // ---------------------------------------------------------------------------------------------- // look for L1 tracks (extended) matched to the tracking particle if (Displaced == "Displaced" || Displaced == "Both") { @@ -3395,10 +3859,54 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even int tmp_matchtrkExt_hitpattern = -999; int tmp_matchtrkExt_nFitPars = -999; + float tmp_matchtrkExtEmu_pt = -999; + float tmp_matchtrkExtEmu_eta = -999; + float tmp_matchtrkExtEmu_phi = -999; + float tmp_matchtrkExtEmu_d0 = -999; + float tmp_matchtrkExtEmu_rho = -999; + float tmp_matchtrkExtEmu_z0 = -999; + float tmp_matchtrkExtEmu_chi2rphi = -999; + float tmp_matchtrkExtEmu_chi2rz = -999; + float tmp_matchtrkExtEmu_bendchi2 = -999; + float tmp_matchtrkExtEmu_MVA = -999; + int tmp_matchtrkExtEmu_nstub = -999; + + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_pt = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_eta = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_phi = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_d0 = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_z0 = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_chi2rz = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_bendchi2 = -999; + ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_MVA = -999; + if (nMatch > 1 && DebugMode) edm::LogVerbatim("Tracklet") << "WARNING *** 2 or more matches to genuine L1 tracks ***"; if (nMatch > 0) { + int index = getSelectedTrackPtrIndex(matchedTracks.at(i_track),TTTrackExtendedHandle); + L1TrackRef l1track_ref(TTTrackExtendedGTTHandle, index); + tmp_matchtrkExtEmu_pt = DoublePtFromBits(*l1track_ref); + tmp_matchtrkExtEmu_eta = DoubleEtaFromBits(*l1track_ref); + tmp_matchtrkExtEmu_phi = DoublePhiFromBits(*l1track_ref); + tmp_matchtrkExtEmu_z0 = l1track_ref->getZ0(); + tmp_matchtrkExtEmu_d0 = l1track_ref->getD0(); + tmp_matchtrkExtEmu_rho = ChargeFromBits(*l1track_ref)*convertPtToR(tmp_matchtrkExtEmu_pt); + tmp_matchtrkExtEmu_chi2rphi = l1track_ref->getChi2RPhi(); + tmp_matchtrkExtEmu_chi2rz = l1track_ref->getChi2RZ(); + tmp_matchtrkExtEmu_bendchi2 = l1track_ref->getBendChi2(); + tmp_matchtrkExtEmu_MVA = l1track_ref->getMVAQuality(); + tmp_matchtrkExtEmu_nstub = l1track_ref->getNStubs(); + + tmp_matchtrkExtEmuFixed_pt = tmp_matchtrkExtEmu_pt; + tmp_matchtrkExtEmuFixed_eta = tmp_matchtrkExtEmu_eta; + tmp_matchtrkExtEmuFixed_phi = tmp_matchtrkExtEmu_phi; + tmp_matchtrkExtEmuFixed_z0 = tmp_matchtrkExtEmu_z0; + tmp_matchtrkExtEmuFixed_d0 = tmp_matchtrkExtEmu_d0; + tmp_matchtrkExtEmuFixed_chi2rz = tmp_matchtrkExtEmu_chi2rz; + tmp_matchtrkExtEmuFixed_bendchi2 = tmp_matchtrkExtEmu_bendchi2; + tmp_matchtrkExtEmuFixed_MVA = tmp_matchtrkExtEmu_MVA; + tmp_matchtrkExt_pt = matchedTracks.at(i_track)->momentum().perp(); tmp_matchtrkExt_eta = matchedTracks.at(i_track)->momentum().eta(); tmp_matchtrkExt_phi = matchedTracks.at(i_track)->momentum().phi(); @@ -3465,6 +3973,27 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_matchtrkExt_lhits->push_back(tmp_matchtrkExt_lhits); m_matchtrkExt_seed->push_back(tmp_matchtrkExt_seed); m_matchtrkExt_hitpattern->push_back(tmp_matchtrkExt_hitpattern); + + m_matchtrkExtEmu_pt->push_back(tmp_matchtrkExtEmu_pt); + m_matchtrkExtEmu_eta->push_back(tmp_matchtrkExtEmu_eta); + m_matchtrkExtEmu_phi->push_back(tmp_matchtrkExtEmu_phi); + m_matchtrkExtEmu_d0->push_back(tmp_matchtrkExtEmu_d0); + m_matchtrkExtEmu_rho->push_back(tmp_matchtrkExtEmu_rho); + m_matchtrkExtEmu_z0->push_back(tmp_matchtrkExtEmu_z0); + m_matchtrkExtEmu_chi2rphi->push_back(tmp_matchtrkExtEmu_chi2rphi); + m_matchtrkExtEmu_chi2rz->push_back(tmp_matchtrkExtEmu_chi2rz); + m_matchtrkExtEmu_bendchi2->push_back(tmp_matchtrkExtEmu_bendchi2); + m_matchtrkExtEmu_MVA->push_back(tmp_matchtrkExtEmu_MVA); + m_matchtrkExtEmu_nstub->push_back(tmp_matchtrkExtEmu_nstub); + + m_matchtrkExtEmuFixed_pt->push_back(tmp_matchtrkExtEmuFixed_pt.to_float()); + m_matchtrkExtEmuFixed_eta->push_back(tmp_matchtrkExtEmuFixed_eta.to_float()); + m_matchtrkExtEmuFixed_phi->push_back(tmp_matchtrkExtEmuFixed_phi.to_float()); + m_matchtrkExtEmuFixed_d0->push_back(tmp_matchtrkExtEmuFixed_d0.to_float()); + m_matchtrkExtEmuFixed_z0->push_back(tmp_matchtrkExtEmuFixed_z0.to_float()); + m_matchtrkExtEmuFixed_chi2rz->push_back(tmp_matchtrkExtEmuFixed_chi2rz.to_float()); + m_matchtrkExtEmuFixed_bendchi2->push_back(tmp_matchtrkExtEmuFixed_bendchi2.to_float()); + m_matchtrkExtEmuFixed_MVA->push_back(tmp_matchtrkExtEmuFixed_MVA.to_float()); } } //end loop tracking particles trueTkMET = sqrt(trueTkMETx * trueTkMETx + trueTkMETy * trueTkMETy); @@ -3669,6 +4198,15 @@ int L1TrackObjectNtupleMaker::getSelectedTrackIndex(const L1TrackRef& trackRef, return -1; } +int L1TrackObjectNtupleMaker::getSelectedTrackPtrIndex(const L1TrackPtr& trackPtr, + const edm::Handle& trackCollection) const { + for(uint i=0;isize();i++){ + L1TrackPtr l1track_ptr(trackCollection,i); + if(trackPtr==l1track_ptr) return (int)i; + } + return -1; +} + /////////////////////////// // DEFINE THIS AS A PLUG-IN DEFINE_FWK_MODULE(L1TrackObjectNtupleMaker); diff --git a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json new file mode 100644 index 0000000000000..0deff390146ce --- /dev/null +++ b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json @@ -0,0 +1,8285 @@ +{ + "n_classes": 2, + "n_features": 20, + "n_trees": 50, + "max_depth": 6, + "init_predict": [ + 0 + ], + "norm": 1, + "trees": [ + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 19, + 0, + 16, + 1, + 13, + 1, + 12, + 1, + 19, + 0, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0625, + 9.625, + 0.125, + 12.125, + 5.8125, + 11.5, + 0.3125, + 10.25, + 5.0, + 5.875, + 5.0, + 10.5, + 4.1875, + 11.25, + 0.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 29368.0, + 163354.25, + 3616.0, + 25587.0625, + 37736.2891, + 27187.0, + 384.0, + 601.875, + 19736.1094, + 14391.625, + 3136.70312, + 3336.1875, + 22416.9434, + 3485.75, + 32.0, + -0.797696888, + -0.539590716, + 0.486171097, + -0.753912866, + -0.20703648, + 0.69339776, + -0.162136674, + -0.762850761, + -0.797049701, + -0.590831697, + 0.224416733, + -0.666462123, + -0.797455013, + -0.681675136, + -0.797068238, + -0.799886703 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 14, + 1, + 16, + 1, + 15, + 1, + 18, + 0, + 19, + 1, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0625, + 11.5, + 0.125, + 12.625, + 0.875, + 10.0, + 0.3125, + 9.125, + 0.875, + 34.375, + -0.875, + 9.125, + 3.875, + 10.375, + 0.625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 14464.0, + 75634.1875, + 2284.0, + 16702.4062, + 20858.8711, + 18375.7812, + 316.0, + 925.53125, + 10570.4512, + 267.013672, + 6861.98438, + 804.59375, + 16571.5254, + 3678.0, + 28.0, + -0.578469157, + -0.362245053, + -0.653661489, + 0.313483715, + -0.642708004, + 0.0289663132, + -0.722722411, + 0.480144888, + -0.578962505, + -0.483053684, + 0.267887533, + -0.479877532, + -0.578784704, + -0.458120316, + -0.577165067, + -0.579650104 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 1, + 0, + 16, + 0, + 13, + 12, + 15, + 0, + 1, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.125, + 8.25, + 0.3125, + 14.375, + 6.625, + 12.25, + 0.75, + 6.25, + 3.5, + 5.0, + 0.875, + 7.375, + 9.625, + 12.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 10814.0, + 55687.9375, + 434.0, + 4464.59375, + 30397.2969, + 4142.0, + 40.0, + 205.96875, + 8963.21777, + 3891.93945, + 16570.7832, + 351.875, + 10241.4141, + 318.5, + -0.500570476, + -0.500523567, + -0.451058954, + 0.231361493, + -0.512080014, + -0.195672914, + -0.547468245, + -0.454891503, + 0.428222805, + -0.50017637, + -0.452102095, + -0.472220987, + 0.101205401, + -0.499814749, + -0.468152761 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 14, + 1, + 16, + 1, + 13, + 2, + 18, + 0, + 19, + 0, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.125, + 8.0, + 0.3125, + 11.75, + 0.875, + 11.25, + 0.75, + 7.375, + 5.0, + 1.0, + 1.0, + 10.0, + 3.125, + 9.25, + 1.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 9737.0, + 38545.8281, + 598.0, + 4036.15625, + 19798.5332, + 4545.21875, + 57.0, + 151.59375, + 5156.50391, + 544.138672, + 13536.0654, + 389.8125, + 8524.36621, + 402.0, + 6.0, + -0.460472554, + -0.404424995, + 0.0675661787, + -0.466111958, + -0.509917557, + -0.190013051, + -0.539747596, + 0.263036937, + -0.460231692, + -0.40459916, + 0.163540974, + -0.402988762, + -0.460291386, + -0.425096273, + -0.459926456, + -0.460969508 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 16, + 0, + 18, + 0, + 16, + 1, + 12, + 1, + 15, + 0, + 19, + 0, + 18, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.125, + 8.125, + 0.3125, + 15.875, + 1.0, + 10.125, + 0.75, + 6.0, + 5.0, + 11.875, + 0.875, + 7.375, + 5.25, + 12.5, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 9615.0, + 31950.5938, + 863.0, + 6017.09375, + 14401.0215, + 5983.84375, + 86.0, + 220.90625, + 6644.48633, + 73.6162109, + 11812.9727, + 301.140625, + 8438.66992, + 548.5625, + 7.0, + -0.43877387, + -0.374846607, + 0.260067523, + -0.483042538, + -0.46974206, + -0.561884463, + -0.380707353, + 0.294229925, + -0.436478913, + -0.365484893, + 0.122441195, + -0.398073286, + -0.436351061, + -0.379107058, + -0.43841821, + -0.43698889 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 1, + 1, + 16, + 1, + 15, + 0, + 12, + 0, + 0, + 1, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.125, + 7.125, + 0.3125, + 15.0, + 5.375, + 9.625, + 0.75, + 7.125, + 0.875, + 19.375, + 5.0, + 10.0, + 7.375, + 11.125, + 1.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 9638.0, + 24339.5781, + 1230.0, + 2088.375, + 10473.1934, + 7128.0625, + 129.0, + 207.03125, + 2033.70142, + 1275.35547, + 9040.96973, + 333.03125, + 8623.80664, + 777.1875, + 10.5, + -0.423786461, + -0.354523301, + -0.47508961, + 0.0150410384, + -0.405673325, + -0.116858557, + 0.378958404, + -0.161708251, + -0.423430204, + -0.355333209, + -0.382998317, + 0.169728503, + -0.422267675, + -0.348144293, + -0.422441959, + -0.424699873 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 1, + 0, + 16, + 1, + 13, + 12, + 13, + 1, + 19, + 0, + 18, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.1875, + 6.625, + 0.4375, + 11.375, + 7.375, + 12.0, + 0.875, + 7.125, + 3.5, + 5.0, + 5.0, + 7.875, + 2.75, + 9.25, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 10784.0, + 24499.4531, + 678.25, + 1863.28125, + 11066.6895, + 3436.04688, + 74.75, + 87.1640625, + 2093.35059, + 2105.95312, + 10073.6582, + 334.046875, + 4743.62891, + 413.984375, + 8.0, + -0.415200621, + -0.36285159, + 0.00693594525, + -0.395599604, + -0.137961313, + -0.412101656, + 0.462073952, + -0.111925341, + -0.415104836, + -0.351584047, + 0.235782698, + -0.327637553, + -0.414330781, + -0.353501141, + -0.416089296, + -0.413697809 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 18, + 1, + 16, + 1, + 13, + 18, + 19, + 1, + 13, + 0, + 18, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.1875, + 5.875, + 0.4375, + 16.875, + 1.0, + 10.5, + 0.875, + 8.875, + 2.25, + 0.875, + 10.25, + 7.5, + 5.0, + 9.25, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 11610.25, + 19714.7031, + 969.75, + 1264.59375, + 10290.5117, + 4295.80469, + 112.25, + 130.015625, + 1198.43982, + 129.115234, + 8245.29199, + 284.320312, + 6237.18262, + 571.59375, + 13.0, + -0.40859285, + -0.334021181, + 0.0885838941, + -0.358648837, + -0.449760348, + -0.222910672, + 0.198522329, + -0.301524609, + -0.405791342, + -0.305954069, + 0.384205848, + -0.303760916, + -0.407757819, + -0.323280632, + -0.410490572, + -0.406966358 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 14, + 0, + 18, + 1, + 18, + 2, + 1, + 0, + 1, + -2, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.25, + 6.0, + 0.625, + 10.25, + 0.875, + 8.75, + 1.0, + 7.125, + 1.0, + -1.0625, + 5.0, + 6.0, + 9.875, + 0.0, + 9.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 12677.25, + 17511.4844, + 724.375, + 1516.21484, + 9008.55371, + 3274.23438, + 60.0, + 46.4882812, + 1271.26611, + 1072.75781, + 8677.83203, + 105.351562, + 5407.38135, + -0.4067339, + 333.921875, + -0.405549973, + -0.351903349, + -0.446367264, + -0.0947418511, + 0.0742183849, + -0.403388798, + -0.24330163, + 0.233345196, + -0.404802084, + -0.35265252, + -0.342809916, + 0.25091669, + -0.405426502, + -0.349119991 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + -1, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + -1, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 18, + 0, + 16, + 1, + 15, + 18, + 13, + 0, + 19, + 0, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.25, + 5.625, + 0.625, + 9.125, + 0.9375, + 8.75, + 1.4375, + 7.125, + 0.875, + 0.5625, + 20.0, + 6.0, + 2.25, + 9.25, + 2.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 13909.5, + 13700.8301, + 980.3125, + 1404.98828, + 7671.93115, + 3372.01172, + 90.0625, + 21.1484375, + 1034.74548, + 32.7402344, + 7103.35938, + 147.769531, + 4208.76611, + 454.1875, + 4.125, + -0.402820438, + -0.350516319, + -0.41693002, + -0.0829763338, + -0.435236275, + -0.313528329, + 0.135710821, + -0.403324038, + -0.400901765, + -0.327602714, + 0.365816414, + -0.270332634, + -0.401735693, + -0.318733871, + -0.401574582, + -0.404480994 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 6, + 16, + 12, + 0, + 1, + 18, + 13, + 2, + 6, + 12, + 0, + 19, + 16, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.25, + -0.4375, + 0.75, + 20.0, + 15.75, + 7.5, + 1.0, + 20.0, + -1.3125, + 0.6875, + 5.0, + 12.25, + 4.4375, + 2.4375, + 9.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 15241.6875, + 12098.7031, + 1323.375, + 6960.68408, + 4802.46484, + 4088.72656, + 75.625, + 5023.8623, + 461.906738, + 2097.92773, + 2821.54443, + 105.664062, + 4734.56152, + 3.0, + 413.699219, + 0.305850476, + -0.336215615, + 1.60202718, + -0.393205374, + -0.396431297, + -0.13841106, + 0.201276883, + -0.334844202, + -0.400026619, + -0.333966732, + 0.254581988, + -0.298250616, + -0.399912149, + -0.402829468, + -0.400519699, + -0.307399243 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 16, + 0, + 15, + 1, + 18, + 0, + 12, + 3, + 18, + 5, + 13, + 16, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.375, + 7.375, + 0.875, + 12.875, + 0.875, + 9.375, + 1.0, + 8.5, + 5.0, + -1.0625, + 0.8125, + -3.25, + 5.0, + 2.5625, + 9.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16343.5938, + 11889.9756, + 739.3125, + 4720.03516, + 7875.63135, + 2356.46094, + 65.28125, + 221.839844, + 2781.52319, + 1896.88428, + 6432.74707, + 267.654297, + 4029.46899, + 4.28125, + 330.929688, + -0.392836779, + -0.285540998, + 0.155911714, + -0.365238309, + 0.230117515, + -0.392069995, + -0.43611595, + 0.264502972, + 2.83507371, + -0.386400521, + 0.576557279, + -0.270146877, + -0.397552818, + -0.401658773, + -0.398910493, + -0.29773283 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 18, + 0, + 16, + 1, + 13, + 18, + 17, + 0, + 19, + 1, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.4375, + 5.0, + 0.875, + 8.875, + 0.9375, + 9.25, + 1.4375, + 6.5, + 2.25, + 0.4375, + 8.3125, + 6.125, + 2.125, + 8.5, + 2.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 15594.4062, + 9984.39453, + 678.84375, + 624.453125, + 5986.6958, + 2136.41016, + 95.8125, + 11.2402344, + 509.499146, + 56.5307617, + 6009.83789, + 103.331055, + 3512.18677, + 414.025391, + 15.90625, + -0.399332732, + -0.3588534, + -0.114237562, + -0.357497334, + -0.41834113, + -0.271081805, + 0.23461023, + -0.139274672, + -0.393078178, + -0.291836083, + 0.75554359, + -0.238427088, + -0.395272344, + -0.235777378, + -0.391156167, + -0.400584936 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 0, + 1, + 18, + 1, + 14, + 0, + 0, + 16, + 0, + 17, + 13, + 2, + 13, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 3.0, + 9.0, + 6.375, + 0.9375, + 9.5, + 0.875, + 7.0, + 6.25, + 0.3125, + 12.0, + 6.25, + 5.0, + 1.1875, + 20.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16605.9531, + 44.515625, + 11443.2637, + 146.732422, + 6.75, + 4116.48047, + 7525.98242, + 8.84960938, + 464.444336, + 5.34375, + 24.28125, + 234.074219, + 4051.55273, + 1973.38721, + 4140.01562, + -0.399309158, + -0.373222113, + -0.374235481, + -0.010801387, + -0.417856306, + -0.400093168, + -0.397162408, + -0.351138204, + -0.313116908, + -0.398425668, + 0.164820135, + -0.323367357, + -0.343097329, + 0.456962317, + 0.287675142, + -0.252161652 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 1, + 1, + 18, + 0, + 19, + 0, + 19, + -2, + 0, + 17, + 17, + 12, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 3.0, + 7.25, + 6.375, + 0.9375, + 12.875, + 13.5625, + 7.0, + 1.0, + 0.0, + 12.0, + 7.3125, + 11.0, + 20.0, + 18.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 15439.2109, + 66.6484375, + 9418.49609, + 195.236328, + 9.890625, + 2176.85938, + 7928.03369, + 14.9667969, + 458.698608, + -0.399607301, + 34.3623047, + 285.212891, + 2599.57227, + 5108.32227, + 411.96582, + -0.398152322, + -0.358168185, + 0.202869579, + -0.329116642, + -0.395012021, + -0.330013275, + -0.294670522, + -0.396510422, + 0.0737167746, + -0.427821785, + 0.278080076, + -0.301793844, + -0.178549826, + -0.403337806 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + -1, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + -1, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 0, + 18, + 18, + 16, + 1, + 1, + 1, + 17, + 0, + 1, + 8, + 17, + 15, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 3.0, + 4.75, + 0.9375, + 0.9375, + 0.0625, + 13.125, + 5.875, + 5.875, + 3.8125, + 12.0, + 17.875, + -13.6875, + 9.75, + 0.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 14164.1562, + 97.1015625, + 6675.15967, + 259.799316, + 14.53125, + 385.676758, + 4897.01807, + 56.9462891, + 477.995819, + 3.359375, + 47.1630859, + 473.777466, + 180.563477, + 4888.15869, + 3926.09692, + -0.393437952, + -0.317827344, + -0.346997768, + 0.238515645, + -0.383197397, + -0.399285674, + -0.392086446, + -0.302316397, + -0.308833927, + 0.142513677, + -0.0587668717, + -0.378087521, + 0.0538824983, + -0.344479412, + -0.17400001, + 0.384526849 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 6, + 0, + 18, + 12, + 6, + 1, + 12, + 17, + 19, + 19, + 2, + 17, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 3.0, + -0.625, + 7.0, + 0.9375, + 5.0, + 0.625, + 7.0, + 3.5, + 3.8125, + 3.75, + 15.5, + 1.125, + 6.375, + 20.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 12850.2148, + 135.507812, + 4814.94287, + 341.461914, + 21.2617188, + 8685.25293, + 5390.72949, + 44.3413086, + 756.173218, + 5.46484375, + 67.7548828, + 2309.58008, + 4027.33496, + 2106.25098, + 2345.24585, + -0.394092709, + -0.307216078, + 0.271714032, + -0.368880123, + -0.37469697, + -0.398405373, + -0.24921982, + -0.386663318, + 0.649555802, + -0.117813684, + -0.164346069, + 1.02857649, + -0.164507046, + -0.454298019, + 0.276679367, + -0.355407923 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 19, + 0, + 18, + 16, + 16, + 14, + 17, + 0, + 1, + -2, + 1, + 8, + 2, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 4.0, + 5.5, + 0.9375, + 2.875, + 0.1875, + 0.875, + 3.8125, + 5.75, + 9.375, + 0.0, + 5.25, + -15.1875, + -1.0, + 14.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 11271.6895, + 184.03125, + 4026.59326, + 458.38623, + 15.703125, + 807.839355, + 3386.87598, + 78.4794922, + 640.028198, + 36.8798828, + -0.398338228, + 657.925171, + 138.092285, + 1675.57544, + 3444.69385, + -0.292776287, + -0.392577887, + -0.335682005, + 0.371591598, + -0.390133291, + -0.320655465, + -0.385559112, + -0.0100967465, + -0.042144727, + -0.372161388, + 0.373831034, + -0.318412006, + 0.185059234, + -0.269193143 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + -1, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + -1, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 0, + 0, + 13, + 19, + 2, + 9, + 14, + 7, + 3, + 4, + 17, + 16, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.4375, + 4.375, + 8.125, + 18.625, + 20.0, + 0.5, + 1.125, + -14.9375, + 0.875, + 0.625, + -1.4375, + -2.875, + 3.8125, + 1.9375, + 1.625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 9319.90137, + 4172.91748, + 140.728516, + 850.31543, + 3813.10132, + 9.84179688, + 509.497314, + 146.854492, + 586.894592, + 4616.9126, + 718.631104, + 62.3197937, + 8.3515625, + 265.415039, + 3059.44312, + 0.0325821005, + -0.371872306, + -0.414759845, + 0.0826172531, + -0.0889919102, + 0.296135634, + 7.13063812, + -0.351683974, + 0.666894615, + -0.353074163, + -0.363805413, + -0.398234189, + -0.0826241523, + -0.373208642, + -0.189611986, + 5.65383863 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 12, + 1, + 3, + 16, + 15, + 6, + 6, + 9, + 19, + 0, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.4375, + 4.25, + 2.4375, + 10.25, + 20.0, + 9.25, + 1.625, + 0.125, + 0.875, + -1.25, + -5.1875, + -13.5, + 0.375, + 6.25, + 19.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 8413.86816, + 2691.4729, + 113.880859, + 336.385742, + 2569.40601, + 292.401855, + 21.3867188, + 21.0571289, + 238.016785, + 2128.7168, + 354.258057, + 98.5395508, + 1046.12769, + 12.5410156, + 104.751465, + -0.318479061, + -0.401518434, + -0.402076006, + -0.0954222605, + 0.235005364, + -0.0348107331, + -0.10030736, + -0.396166354, + -0.00849893596, + -0.389413804, + 3.19613981, + -0.155693084, + -0.39782685, + -0.370300204, + -0.433496147, + 0.185601592 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 19, + 16, + 7, + 7, + 0, + 17, + 3, + 7, + 3, + 6, + 17, + 2, + 1, + 8, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.4375, + 10.5, + 2.875, + -1.0625, + -1.375, + 7.5, + 3.8125, + -1.125, + 0.4375, + -1.5625, + -1.1875, + 6.0, + -1.125, + 7.875, + -9.375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 6650.38086, + 2457.2832, + 133.166992, + 1940.43335, + 689.763184, + 217.031738, + 19.8779297, + 1143.30859, + 3749.91821, + 1176.9469, + 385.660889, + 8.89770508, + 572.651611, + 45.8777695, + 11.8056641, + 1.19639075, + 0.270965844, + -0.241517469, + 0.136204034, + 1.96321952, + -0.0309015661, + -0.175220698, + -0.367295176, + -0.347712815, + -0.400444418, + 1.4471848, + -0.221017227, + -0.354140311, + 0.151842624, + -0.351793677, + -0.401146978 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 15, + 18, + 16, + 3, + 1, + 1, + 0, + 7, + -2, + 3, + 7, + 16, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.9375, + 3.8125, + 0.875, + 0.75, + 3.8125, + 1.125, + 4.5, + 4.75, + 6.0, + 3.9375, + 0.0, + -1.125, + 2.625, + 0.125, + 14.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 5050.43848, + 152.575195, + 2743.66577, + 208.654724, + 10.9414062, + 1894.86108, + 2372.8064, + 61.7254639, + 373.673126, + 45.9255371, + -0.400680274, + 1949.45068, + 1062.02478, + 684.081909, + 2006.08093, + -0.386604756, + -0.234319195, + -0.265626311, + 0.645197272, + -0.386042714, + -0.201271206, + 0.271020859, + -0.418904871, + 0.0382798091, + 1.11327541, + -0.0327182002, + -0.338764995, + 0.173981398, + -0.219344303 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + -1, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + -1, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 11, + 19, + 7, + 13, + 3, + 1, + 7, + 13, + 0, + 3, + 1, + 9, + 9, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.625, + 1.5, + 6.1875, + 0.875, + 5.0, + -1.3125, + 9.875, + -0.5, + 5.0, + 12.625, + 1.5, + 13.5, + 4.0625, + -19.3125, + 1.1875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3556.95898, + 2120.34546, + 142.809082, + 1593.96997, + 1066.5636, + 424.533813, + 37.9003906, + 3163.01636, + 2278.26904, + 490.980438, + 644.328369, + 4626.87598, + 109.187317, + 16.0219727, + 294.262421, + 0.258959293, + -0.209734276, + 0.488539189, + 0.0250889845, + -0.131350234, + 0.216600403, + -0.342386425, + 0.936338127, + -0.0685137212, + 15.2735844, + -0.348019481, + -0.119149081, + -0.19639048, + -0.397785962, + -0.361518592, + 0.606309593 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 10, + 3, + 6, + 12, + 1, + 19, + 6, + 18, + 9, + 6, + 7, + 19, + 19, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.6875, + 1.5, + -1.3125, + 0.6875, + 5.0, + 13.5, + 3.75, + -0.3125, + 0.6875, + 9.25, + -3.5625, + 3.75, + 6.1875, + 3.5625, + 2.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 24837.3496, + 1823.51221, + 129617.484, + 1649.677, + 794.86438, + 1929147.0, + 155.151611, + 3478.83228, + 1070.44885, + 455.454987, + 532.107178, + 258.961304, + 715473.5, + 396.304169, + 51.373291, + 0.157637209, + -0.239840731, + -0.391064942, + 0.418760598, + -0.0933989286, + 0.363969058, + -0.103814714, + -0.39879638, + -0.350109696, + 1.42424858, + -133.743256, + -0.358721316, + -0.237477943, + 1.17488635, + -0.287960738, + -0.399561971 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 13, + 19, + 1, + 0, + 7, + 7, + 16, + 16, + 9, + 17, + 16, + 7, + 8, + 11, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 18.5625, + 20.0, + 36.4375, + 4.375, + 18.25, + -4.5625, + 8.625, + 0.0625, + 0.3125, + 8.375, + 19.1875, + 0.3125, + 7.3125, + -3.6875, + 2.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2355.07178, + 1961.09814, + 147.378662, + 1911.74097, + 435.764648, + 188.840576, + 38.8355713, + 485.733521, + 1600.78528, + 47.8813477, + 626.958252, + 237.184616, + 134.316895, + 5.85131836, + 141.056259, + 0.045349516, + -0.298564494, + 0.0223682653, + 0.304063082, + -0.431521088, + -0.281250983, + -0.111120775, + 2.9124248, + 0.467249691, + -0.268841356, + -0.331024259, + 0.0111232605, + -0.45546627, + -0.395558655, + -0.4047122, + -2.00952983 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 14, + 2, + 15, + 1, + 2, + 3, + 18, + 9, + 16, + 3, + 1, + 3, + 8, + 17, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + -1.125, + 0.875, + 13.125, + 1.0, + 1.125, + 0.75, + -8.3125, + 1.75, + -1.0, + 9.625, + -0.9375, + 3.3125, + 0.9375, + 8.1875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1961.07812, + 730.158936, + 1620.15881, + 612.190552, + 745.072266, + 777.540649, + 1506.69556, + 161.423691, + 400.545471, + 138.120361, + 677.85022, + 963.237183, + 539.515991, + 79.5408325, + 1325.49597, + 0.360456914, + -0.318434149, + 0.550196171, + 3.61055732, + -0.157764539, + -0.407177925, + -0.316943079, + 0.353946537, + 0.1019779, + -0.385007232, + -0.144498125, + 0.598767221, + -0.0708740279, + -0.35970363, + 0.207616478, + -0.0334575325 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 12, + 0, + 1, + 16, + 10, + 16, + 17, + 6, + 6, + 9, + 12, + 4, + 3, + 7, + 8, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 20.0, + 4.125, + 12.5, + 0.0625, + 2.0, + 0.125, + 6.375, + 0.9375, + -1.625, + -12.875, + 2.25, + -3.0, + -1.5625, + 5.75, + -9.125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1388.34058, + 1300.83728, + 270.484375, + 322.969238, + 1219.39209, + 17.8297119, + 463.348358, + 210.126923, + 131.358521, + 1175.49268, + 397.24292, + 24.9309082, + 14.9155273, + 67.6488647, + 508.039825, + -0.0828730687, + 0.575400591, + -0.0950872451, + -0.348943174, + 0.542067528, + 0.0498913564, + 0.0425429791, + -0.312535405, + 0.124836318, + -0.508039474, + -0.25512585, + -0.398332328, + -0.567086935, + -2.52315736, + 0.744759381, + -0.135570467 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 17, + 1, + 13, + 16, + 18, + 2, + 1, + 12, + 9, + 0, + 1, + 3, + 13, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 5.8125, + 3.625, + 35.625, + 5.0, + 0.125, + 1.0, + -0.875, + 3.875, + 5.0, + -12.1875, + 8.625, + 7.125, + -0.9375, + 5.0, + 12.25, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1205.1936, + 1285.70386, + 637.144409, + 1049.79285, + 2049.55176, + 591.449219, + 170.177856, + 949.794434, + 256.661774, + 645.039185, + 948.578613, + 95.1291504, + 651.046509, + 167.972382, + 79.098877, + -0.168778762, + 0.443577141, + -0.0220073052, + -0.548646331, + 0.400067091, + -0.301373363, + -0.138539836, + 0.21999681, + -0.371641904, + -0.168831512, + 0.19455193, + -0.11069309, + 0.377242744, + -0.43101868, + -0.417832524, + -0.679013669 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 14, + 1, + 8, + 12, + 3, + 3, + 0, + 8, + 19, + 16, + 2, + 0, + 2, + 17, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + 10.375, + -8.0, + 0.75, + -0.9375, + -0.5, + 13.25, + 11.0625, + 1.5, + 0.75, + 0.8125, + 36.375, + 0.8125, + 9.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1045.75378, + 302.854858, + 1161.33899, + 102.280396, + 569.473511, + 1144.87183, + 860.392944, + 109.798759, + 24.2915039, + 858.732178, + 584.252075, + 508.586182, + 294.876617, + 1413.88672, + 832.508667, + -0.0848535374, + 1.2888943, + -0.247014806, + -0.379813015, + 0.213597223, + 2.78558517, + -0.314969569, + 0.178578064, + 0.698230684, + -0.45462808, + -0.159169048, + 0.338451862, + 0.0109513728, + -0.312103719, + 0.211407736, + -0.0766840279 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 15, + 3, + 6, + 1, + 3, + 2, + 7, + 12, + 1, + 7, + 4, + 7, + 2, + 6, + 6, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.75, + 1.0625, + -1.25, + 23.875, + 1.375, + -1.0, + -0.375, + 1.5, + 25.125, + -2.6875, + -2.9375, + 0.4375, + 0.8125, + 0.3125, + -0.125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1078.29395, + 82.1234131, + 905.623047, + 47.6646729, + 218.0336, + 2098.36084, + 1783.26733, + 57.5632935, + 42.8181763, + 236.417511, + 44.1703491, + 630.619629, + 1584.33557, + 1133.83911, + 959.802368, + -0.158204556, + -0.367443293, + -1.07481563, + -0.445569187, + 3.82487917, + 0.194826826, + 0.326614201, + -0.432671696, + -0.314115852, + 0.912771165, + -0.0557552353, + 0.424759299, + -0.202300027, + 0.273786098, + -0.0373203121, + -0.311717093 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 14, + 3, + 2, + 7, + 8, + 18, + 2, + 7, + 6, + 3, + 5, + 0, + 9, + 9, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 24.375, + 0.875, + 1.5, + 1.0625, + 1.75, + 0.9375, + -0.9375, + -0.9375, + 1.5625, + 0.3125, + 1.0625, + 2.8125, + 7.875, + -4.5, + 8.375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 913.925354, + 702.016968, + 89.6072998, + 208.90741, + 706.518494, + 63.3562012, + 577.800842, + 296.022888, + 351.761383, + 1067.82422, + 1655.32544, + 112.068756, + 38.9656982, + 2075.12256, + 309.423218, + 0.0286132637, + -0.301005512, + -0.172443196, + 0.476351827, + -0.104219928, + 0.16715759, + 0.0845591426, + 0.851877868, + -0.321463168, + 0.172239199, + -0.337429494, + -0.53745985, + 14.4292984, + -0.344404936, + -0.39793694, + 1.10320318 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 3, + 15, + 6, + 16, + 3, + 7, + 13, + 17, + 7, + 1, + 7, + 3, + 6, + 13, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.9375, + 1.5, + 0.875, + 9.4375, + 1.5625, + -1.125, + 0.25, + 1.0, + 13.6875, + 0.875, + 10.125, + 1.375, + 1.0, + 0.1875, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 548990.188, + 49428.9375, + 752.352051, + 209.69455, + 113964.5, + 386.637207, + 636.388306, + 10.7701721, + 323.711853, + 46209.75, + 35575.1875, + 612.387329, + 303.834106, + 1681.46204, + 916.134094, + -0.176529452, + -0.39875862, + -6.92743826, + -0.305689871, + -8.58510876, + -23.2309532, + -4.02543402, + -18.0222626, + -0.188456371, + 0.589656711, + -0.326346546, + -0.0226580892, + -0.285802454, + 0.113528788, + 0.223182708, + -0.0279512238 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 17, + 3, + 16, + 12, + 6, + 17, + 5, + 16, + 18, + 6, + 2, + 19, + 9, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0, + 6.0625, + 18.0, + -1.25, + 1.4375, + 5.0, + -3.625, + 4.3125, + -2.6875, + 1.375, + -0.9375, + -0.375, + -0.875, + 2.25, + 12.625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 5300.9707, + 152.660645, + 594.716431, + 57.8009415, + 47.0966797, + 618.342529, + 186.791382, + 195.324524, + 40.3220367, + 601.370544, + 10.7724609, + 892.725952, + 1412.59009, + 211.897583, + 55.56604, + -0.177889571, + 1.5638932, + 0.18596971, + -0.331158131, + -0.420210123, + 2.92296767, + -0.488915026, + -0.400960445, + 0.235687047, + -0.0147163002, + 0.441243857, + -0.123221673, + 0.453104943, + -0.410402745, + -0.448826313, + -0.0428130515 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 11, + 16, + 6, + 17, + 19, + -2, + 3, + 7, + 13, + 8, + 17, + 9, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 24.375, + 2.0, + 1.4375, + -2.75, + 10.375, + 37.375, + 0.0, + -1.125, + -0.3125, + 1.5, + 6.1875, + 16.5, + -16.5625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3676.96362, + 518.933228, + 212.597168, + 498.106873, + 254.669464, + 134.656616, + -0.453337014, + 606.240723, + 755.34491, + 128.002258, + 306.552887, + 185.4254, + 24.3408508, + 0.671922922, + 0.109932438, + 0.150079384, + -0.0729453638, + -0.0333881937, + -0.307881624, + -0.0955970213, + 0.560048759, + -0.172979936, + 1.0522064, + 0.0498334542, + -0.451442778 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + -1, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + -1, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 17, + 17, + 7, + 19, + 9, + 17, + -2, + -2, + -2, + 0, + 19, + 9, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 3.9375, + 0.9375, + 6.0625, + 4.125, + 2.3125, + 8.25, + 6.0, + 0.0, + 0.0, + 0.0, + 3.75, + 5.375, + -10.5625, + -1.1875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2450.22339, + 63.8137207, + 613.343933, + 38.567627, + 2167.34351, + 1118.20239, + 433.946777, + 72.6485901, + -0.434085816, + 11.6077623, + -0.425772637, + 166.985718, + 95.4799347, + 555.699829, + 847.52478, + -0.282928556, + 1.36083066, + -0.0920088366, + 0.67104739, + -0.00201024883, + -0.345163107, + 0.19769372, + -0.075204879, + 0.677315652, + 0.0324920602 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + -1, + -1, + 17, + 19, + 21, + 23, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + -1, + -1, + 18, + 20, + 22, + 24, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 16, + 14, + 7, + 19, + 6, + 17, + 6, + 1, + 3, + 3, + 19, + 19, + 12, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.375, + 0.75, + 3.9375, + 22.25, + 7.375, + 12.875, + -2.9375, + 14.375, + -1.3125, + -1.3125, + 0.125, + 1.625, + 5.0, + 11.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 31179.7891, + 5385.28906, + 485.361389, + 1628.71875, + 1223.13672, + 131.790894, + 501.91864, + 16.3591919, + 1410.63867, + 960.109375, + 502.294922, + 100.278564, + 106.266693, + 536.783813, + 714.353882, + 0.129433811, + -0.351869553, + -1.43627059, + -3.67025423, + -1.76511824, + -0.725764871, + -1.12006688, + -0.504576862, + 0.278264552, + -0.295402497, + 1.35685444, + -0.362057328, + 0.116590656, + -0.0448689498, + -0.355029762, + 0.0365077928 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 16, + 15, + 6, + 3, + 19, + 1, + 19, + 3, + 6, + 19, + 17, + 7, + 0, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.4375, + 0.75, + 0.0625, + -0.9375, + 8.0, + 3.75, + 1.1875, + 1.375, + 9.25, + 18.0, + 9.5, + -4.1875, + 21.25, + 0.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 17875.1133, + 557.316406, + 422.188629, + 318.528809, + 293.673828, + 71.9724121, + 333.352997, + 204.413574, + 137.259567, + 379.28833, + 210.710938, + 76.3705978, + 48.4560242, + 507.060364, + 490.588959, + -1.53277957, + -0.818237305, + -0.496621609, + 0.2725842, + -0.7661497, + -3.34409952, + -0.590416133, + -0.487493038, + -0.07605692, + -0.362200946, + -0.0104494076, + -0.431454033, + -0.29229182, + 0.218965322, + -0.00690613408, + 0.170496985 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 2, + 19, + 16, + 2, + 9, + 4, + 17, + 3, + 3, + 9, + 8, + 3, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 3.9375, + 1.875, + 7.125, + 1.4375, + 0.5, + 11.5, + 2.5625, + 1.125, + 1.5625, + -1.3125, + -1.6875, + 7.1875, + 1.6875, + 0.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 11846.9277, + 126.849609, + 369.498291, + 98.7356567, + 162.294922, + 526.147644, + 554.759705, + 195.151855, + 11.7073975, + 827.84668, + 126.185547, + 566.252136, + 1332.10107, + 324.525818, + 266.491608, + -0.125012502, + 2.18551922, + 0.38215217, + -0.409482718, + -0.685675085, + 3.55113864, + -0.792095423, + -0.510920048, + 0.0645842254, + -0.11768315, + 0.0395129323, + 0.658224523, + -0.0884748772, + -0.559236944, + -0.0277509224, + 1.33886611 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 19, + 17, + 3, + 16, + 7, + 17, + -2, + 17, + 16, + 17, + 0, + 7, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 3.3125, + 5.8125, + 6.0625, + -1.0625, + 0.5625, + 4.4375, + 5.25, + 0.0, + 11.25, + 1.4375, + 3.4375, + 6.25, + -2.75, + -0.9375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 8266.32227, + 75.3203125, + 372.916016, + 76.0591431, + 69.4091797, + 505.593231, + 466.749451, + 135.574554, + -0.405469149, + 52.9312134, + 52.5429688, + 574.750488, + 777.354065, + 276.531555, + 529.291382, + -0.207333729, + 1.23714781, + -0.791438997, + -0.442380756, + -0.579056084, + -0.479808092, + 0.159834012, + -0.0667149946, + -0.177226365, + 0.40337348, + 0.0858908221, + -0.165126786, + 0.647552133, + 0.00908370037 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 15, + 7, + 3, + 7, + 6, + 17, + -2, + 19, + 16, + 13, + 11, + 3, + 7, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.5625, + 0.875, + 1.375, + -0.9375, + -3.3125, + -1.25, + 5.375, + 0.0, + 0.125, + 4.625, + 20.0, + 1.5, + -0.8125, + -0.25, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 5709.81689, + 51.9506836, + 339.578644, + 128.291412, + 28.6821289, + 214.434845, + 373.707855, + 62.0692444, + 2.37859154, + 84.5192871, + 15.2875977, + 200.674194, + 148.73941, + 496.185089, + 591.137207, + 0.0610284023, + -0.403323561, + -2.38988829, + -0.561949193, + -0.482810497, + -0.434229702, + 0.308348775, + -0.416763276, + -0.10595011, + -0.319873691, + 0.369093746, + 0.0466425084, + 0.0990414247, + -0.113846019 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 14, + 3, + 3, + 5, + 6, + 16, + 17, + 16, + 16, + 8, + 11, + 2, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.5625, + 0.875, + -0.5625, + 1.625, + -1.3125, + -3.0625, + 1.25, + 2.1875, + 4.625, + 1.4375, + 9.8125, + 2.0, + -1.1875, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3917.98389, + 40.7949219, + 336.618439, + 65.736145, + 30.7246094, + 125.411194, + 267.996216, + 218.184525, + 36.1936798, + 12.7460938, + 117.426193, + 66.1185913, + 155.752853, + 517.483276, + 561.812561, + -0.333463162, + 1.9719342, + 0.181765363, + -0.404296607, + -0.475914568, + -0.423417896, + 0.668670058, + -0.491184384, + -0.327871859, + -0.0390625633, + -0.0313763991, + -0.418744296, + 0.881885171, + 0.0877382532, + 0.0477126651, + -0.146943256 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 1, + 19, + 3, + 16, + 13, + 6, + -2, + 17, + 16, + 16, + 3, + 9, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.5625, + 54.75, + 8.9375, + 1.625, + 4.625, + 2.25, + -0.125, + 0.0, + 6.8125, + 1.4375, + 4.5625, + -1.5625, + -13.5, + 127.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2700.98096, + 36.6594238, + 297.38855, + 45.747406, + 22.78125, + 293.518158, + 290.402618, + 70.1839981, + -0.401826054, + 5.84179688, + 66.8133469, + 722.809753, + 14.546936, + 83.3919983, + 95.5877686, + 0.698604584, + -0.211999327, + -0.479192942, + -0.43231684, + 0.51963979, + -0.459389985, + 0.0119651696, + 4.10659456, + -0.0982959643, + -0.402676404, + -1.52740705, + 0.15464215, + -0.428516537, + -1.308761 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 16, + 0, + 3, + 18, + 6, + -2, + 0, + 0, + 7, + 0, + 3, + 7, + 6, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0, + 3.625, + 4.1875, + 3.875, + -2.1875, + 1.0, + 7.125, + 0.0, + 4.0, + 13.25, + 4.625, + 4.375, + -1.9375, + -5.6875, + 7.25, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1804.46838, + 96.411377, + 295.807739, + 39.2887001, + 20.6933594, + 365.795044, + 262.097229, + -0.371659636, + 72.4090958, + 65.4026794, + 11.8574219, + 532.293091, + 271.839874, + 15.4791565, + 199.280746, + 1.72131634, + 0.031160919, + -0.34676221, + 2.23265028, + -0.416983694, + -0.0739305839, + -0.240294725, + 0.446692854, + -0.292562246, + -0.00308533548, + -0.140036717, + -0.4301548, + 2.10289907, + -0.359679073 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + -1, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + -1, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 19, + 7, + 3, + 13, + 1, + -2, + 1, + 5, + 0, + 7, + 0, + 0, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0, + 3.625, + 27.0625, + -3.0625, + -1.3125, + 20.0, + 5.0, + 0.0, + 5.5, + 2.875, + 18.25, + 7.6875, + 19.375, + 11.75, + 5.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1176.72974, + 80.9337158, + 265.021973, + 32.7818298, + 18.0522461, + 246.457977, + 105.684113, + 1.44782495, + 25.6413422, + 99.3665466, + 14.3270264, + 371.880981, + 450.693298, + 173.744049, + 72.9718628, + -0.253349334, + 0.113289237, + -0.30038774, + 1.90043569, + -0.421919018, + -0.283719748, + 0.026539227, + -0.501741171, + -0.347454846, + 0.107859097, + -0.409339875, + 0.318086058, + -0.130913526, + -0.485602617 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + -1, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + -1, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 16, + 1, + 3, + 7, + 6, + 17, + 5, + -2, + 16, + 4, + 3, + 7, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 1.5625, + 4.1875, + 26.125, + 1.625, + 2.0625, + 7.125, + 5.375, + 1.25, + 0.0, + 1.4375, + -0.375, + 1.0, + -5.6875, + 17.0625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 760.240234, + 46.940918, + 279.434204, + 58.8316154, + 54.0692139, + 282.712646, + 63.3693237, + 33.1840363, + 220.498596, + -0.422223717, + 42.450325, + 499.567596, + 588.737732, + 15.1039429, + 43.3671989, + 0.0419965535, + -0.395166785, + -0.214147612, + 4.54112864, + 0.550568819, + -0.39357236, + -0.186815143, + 0.0121483896, + 0.0257445425, + 0.434157342, + -0.126894549, + -0.421691656, + -0.371417135, + 0.556322753 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + -1, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + -1, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 13, + 10, + 1, + 3, + 17, + 13, + 15, + 15, + 7, + 0, + 12, + 13, + 1, + 5, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 2.25, + 2.0, + 8.0, + 1.625, + 12.875, + 5.0, + 0.75, + 0.875, + -4.1875, + 18.25, + 20.0, + 0.75, + 6.125, + -1.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 568.387512, + 30.909668, + 253.524841, + 53.7798576, + 32.2409668, + 355.998535, + 317.202881, + 13.8459625, + 114.17894, + 23.9196167, + 36.957859, + 274.139557, + 646.409302, + 262.704315, + 166.359436, + 0.624518692, + -0.396267474, + -0.426431984, + 1.06845272, + 0.168768749, + -0.418668419, + -0.3922216, + 0.497637242, + 0.0586404279, + -0.164737687, + -0.695896924, + -0.0512115024, + -0.281964779, + 0.170390382, + -0.520908475, + -0.181440398 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 13, + 9, + 19, + 3, + 1, + 3, + 14, + -2, + 7, + 0, + 9, + 19, + 3, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.6875, + 2.25, + 7.5625, + 8.125, + 1.625, + 16.375, + 0.5, + 0.875, + 0.0, + -4.1875, + 18.25, + -10.125, + 6.4375, + -1.125, + 1.75, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 377.6828, + 25.1782837, + 220.099747, + 28.9224815, + 21.8323669, + 312.199707, + 456.251038, + 50.9462471, + -0.395343244, + 19.8543701, + 22.2844963, + 422.921753, + 293.43219, + 583.501282, + 247.483398, + 0.663845062, + -0.200689152, + 0.0871962756, + -0.413476557, + -0.376995027, + 0.417845637, + 0.168731853, + -0.0917047188, + 0.152610287, + -0.0919781104, + 0.434017807, + -0.107186161, + 0.50589031, + -0.144169435 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 15, + 0, + 7, + 17, + 16, + 6, + 19, + 17, + -2, + 6, + 19, + 17, + 7, + 6, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + 6.875, + 0.375, + 5.6875, + 0.25, + 0.1875, + 1.1875, + 5.625, + 0.0, + 0.25, + 1.375, + 2.0625, + -0.125, + -0.0625, + -0.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 293.05658, + 175.27066, + 225.110321, + 34.5143127, + 134.135208, + 610.857178, + 419.538208, + 111.293785, + -0.416614145, + 112.551224, + 204.111145, + 382.048157, + 284.968872, + 165.145508, + 438.969391, + -0.24470596, + 2.40052629, + -0.255613446, + 0.0807962045, + -0.273946524, + 0.156961784, + -0.00105755962, + -0.301056504, + 0.112246513, + -0.261170119, + 0.273323387, + -0.0937331766, + 0.239441499, + -0.0465372019 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 13, + 8, + 3, + 17, + 1, + 1, + 6, + 1, + 8, + 12, + 3, + 3, + 17, + 0, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 5.0, + 8.4375, + 1.1875, + 10.0625, + 5.25, + 29.25, + 4.0, + 5.125, + -6.3125, + 0.75, + -0.9375, + -1.25, + 12.0, + 11.125, + 0.25, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 284.02951, + 487.978882, + 631.944092, + 482.428192, + 272.017517, + 494.253937, + 379.011841, + 426.335602, + 388.724335, + 77.3210983, + 227.204895, + 430.553131, + 205.659424, + 142.425568, + 207.009155, + -0.102367036, + 0.129462942, + 0.194557369, + -0.294744194, + 0.387696713, + -0.301374286, + -0.444913536, + 0.457739592, + 0.338365585, + -0.0865717456, + -0.555540979, + -0.115761459, + -0.0421918817, + 0.50180769, + 4.22600317, + 0.603091836 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 6, + 6, + 0, + 12, + 1, + 2, + 2, + 1, + 0, + 2, + 1, + 0, + 6, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 15.875, + -3.1875, + 6.8125, + 127.875, + 5.0, + 10.5, + -1.3125, + 0.9375, + 127.875, + 21.0, + -0.75, + 10.375, + 6.875, + 7.125, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 257.585419, + 245.18277, + 165.903412, + 251.400467, + 380.230469, + 176.810425, + 609.806091, + 216.519348, + 452.764099, + 390.148621, + 431.370117, + 668.380737, + 298.608734, + 247.316833, + 65.3068619, + 0.0781745836, + 0.407193333, + -0.347222656, + -7.28799438, + -0.0188171975, + 0.197599545, + 0.231790408, + -0.192508891, + -0.0969955549, + 2.87424445, + -0.0293427743, + -0.540873051, + 5.51908112, + -0.239703923, + -0.388241142, + 0.757643759 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ] + ], + "config": { + "output_dir": "/nfs/data41/rmccarth/conifer", + "project_name": "conifer_prj_1729174758", + "backend": "python" + }, + "metadata": [ + { + "version": "1.5", + "host": "torreys.colorado.edu", + "user": "rmccarth", + "time": 1729174758.31608 + } + ] +} \ No newline at end of file From b1f566a0ef84f710dccd601475e2191db466a32b Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Thu, 17 Oct 2024 16:57:39 +0200 Subject: [PATCH 16/36] Adding file to convert xgboost model to conifer --- L1Trigger/L1TTrackMatch/test/saveModelJson.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 L1Trigger/L1TTrackMatch/test/saveModelJson.py diff --git a/L1Trigger/L1TTrackMatch/test/saveModelJson.py b/L1Trigger/L1TTrackMatch/test/saveModelJson.py new file mode 100644 index 0000000000000..8d61783b2fc3b --- /dev/null +++ b/L1Trigger/L1TTrackMatch/test/saveModelJson.py @@ -0,0 +1,5 @@ +import conifer +import joblib +xgb = joblib.load("/nfs/data41/rmccarth/conifer/vertexing/dispVertTaggerEmulationFixedPoint.pkl") +model = conifer.converters.convert_from_xgboost(xgb) +model.save('dispVertTaggerEmulationFixedPoint.json') From 9730cab3e90e19c497121544743963c17c00ee8b Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Tue, 22 Oct 2024 10:21:20 +0200 Subject: [PATCH 17/36] Adding plotting script --- .../test/Analyzer_DisplacedMuon.C | 3536 +++++++++++++++++ 1 file changed, 3536 insertions(+) create mode 100644 L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C new file mode 100644 index 0000000000000..0c86f1b1f5e5b --- /dev/null +++ b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C @@ -0,0 +1,3536 @@ + +// // ---------------------------------------------------------------------------------------------------------------- +// // Feasibility study of using L1 Tracks to identify Displaced Vertex +// // +// // By Bharadwaj Harikrishnan, May 2021 +// // Edited by Ryan McCarthy, Sept 2021 +// // ---------------------------------------------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#include +#include "TFile.h" +#include "TTree.h" +#include "TChain.h" +#include "TBranch.h" +#include "TLeaf.h" +#include +#include "TLegend.h" +#include "TH1.h" +#include "TH2.h" +#include "TF1.h" +#include "TGraph.h" +#include "TMath.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +bool detailedPlots = false; +float d0_res = 0.02152; //cm + +void SetPlotStyle(); +void mySmallText(Double_t x, Double_t y, Color_t color, char *text); +void removeFlows(TH1F* h); +void removeFlows(TH2F* h); + +class Track_Parameters +{ +public: + float pt; + float d0; + float dxy = -99999; + float z0; + float eta; + float phi; + float charge; + float rho; + int index; + int pdgid = -99999; + float vx; + float vy; + float vz; + Track_Parameters* tp; + float x0; + float y0; + int nstubs; + float chi2rphi; + float chi2rz; + float bendchi2; + float MVA1; + + float dist_calc(float x_dv, float y_dv, float x, float y){ + dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); + return dxy; + } + float x(float phi_T=0){ + return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); + } + float y(float phi_T=0){ + return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); + } + float z(float phi_T=0){ + float theta = 2 * TMath::ATan(TMath::Exp(-eta)); + return (z0 + rho*phi_T/TMath::Tan(theta)); + } + float deltaPhi_T(Double_t phi1, Double_t phi2) + { + Double_t dPhi = phi1 - phi2; + if (dPhi >= TMath::Pi()) + dPhi -= 2. * TMath::Pi(); + if (dPhi <= -TMath::Pi()) + dPhi += 2. * TMath::Pi(); + return dPhi; + } + float phi_T(float x, float y){ + float num = x - (d0 + charge * rho) * TMath::Sin(phi); + float den = y + (d0 + charge * rho) * TMath::Cos(phi); + return ((phi-TMath::ATan2(num,-den))/charge); + } + float z(float x, float y){ + float t = std::sinh(eta); + float r = TMath::Sqrt(pow(x,2)+pow(y,2)); + return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math + } + Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0) + { + pt = pt_in; + d0 = d0_in; + z0 = z0_in; + eta = eta_in; + phi = phi_in; + if(charge_in > 0){ + charge = 1; + } + else if (charge_in < 0){ + charge = -1; + } + else{ + charge = 0; + } + index = index_in; + pdgid = pdgid_in; + vx = vx_in; + vy = vy_in; + vz = vz_in; + tp = tp_in; + rho = fabs(1/charge_in); + x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); + y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); + nstubs = nstubs_in; + chi2rphi = chi2rphi_in; + chi2rz = chi2rz_in; + bendchi2 = bendchi2_in; + MVA1 = MVA1_in; + } + Track_Parameters(){}; + ~Track_Parameters(){}; +}; + +constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) +{ + return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) +{ + return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); +} +constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) +{ + return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); +} + +std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) +{ + std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; + std::valarray p_vec = {-r_vec[1],r_vec[0]}; + if(a.charge>0){ + p_vec *= -1; + } + p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); + p_vec *= a.pt; + return p_vec; +} + +class Vertex_Parameters +{ +public: + Double_t x_dv; + Double_t y_dv; + Double_t z_dv; + float score; + Track_Parameters a; + Track_Parameters b; + int inTraj; + bool matched = false; + std::vector tracks = {}; + float p_mag; + float p2_mag; + float openingAngle; + float R_T; + float cos_T; + float alpha_T; + float d_T; + float chi2rphidofSum; + float chi2rzdofSum; + float bendchi2Sum; + float MVA1Sum; + int numStubsSum; + float delta_z; + float delta_eta; + float phi; + Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): + a(a_in), + b(b_in) + { + x_dv = x_dv_in; + y_dv = y_dv_in; + z_dv = z_dv_in; + score = score_in; + tracks.push_back(a_in); + tracks.push_back(b_in); + inTraj = inTraj_in; + std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); + std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); + std::valarray p_tot = p_trk_1+p_trk_2; + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); + R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); + cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); + float chi2rphidof_1 = a_in.chi2rphi; + float chi2rzdof_1 = a_in.chi2rz; + float bendchi2_1 = a_in.bendchi2; + float chi2rphidof_2 = b_in.chi2rphi; + float chi2rzdof_2 = b_in.chi2rz; + float bendchi2_2 = b_in.bendchi2; + chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; + chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; + bendchi2Sum = bendchi2_1 + bendchi2_2; + MVA1Sum = a_in.MVA1 + b_in.MVA1; + numStubsSum = a_in.nstubs + b_in.nstubs; + p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); + delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); + delta_eta = fabs(a_in.eta-b_in.eta); + } + + void addTrack(Track_Parameters trk){ + tracks.push_back(trk); + std::valarray p_tot = {0,0}; + for(auto track : tracks){ + p_tot+= calcPVec(track,x_dv,y_dv); + } + p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); + cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); + alpha_T = acos(cos_T); + phi = atan2(p_tot[1],p_tot[0]); + d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); + float chi2rphidof = trk.chi2rphi; + float chi2rzdof = trk.chi2rz; + float bendchi2 = trk.bendchi2; + chi2rphidofSum+= chi2rphidof; + chi2rzdofSum+= chi2rzdof; + bendchi2Sum+= bendchi2; + numStubsSum+= trk.nstubs; + p2_mag+= pow(trk.pt,2); + MVA1Sum+= trk.MVA1; + } + + Vertex_Parameters(){}; + ~Vertex_Parameters(){}; +}; + +constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) +{ + return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); +} + +class Cut { +public: + virtual ~Cut() = default; + virtual TString getCutName() const = 0; + virtual TString getCutLabel() const = 0; + virtual float getParam(int it) const = 0; + virtual float getCutValue() const = 0; + virtual float getDoPlot() const = 0; +}; + +template +class TypedCut : public Cut +{ +public: + TString cutName; + TString cutLabel; + std::vector** params; + T cutValue; + bool doPlot; + + TypedCut(TString cutName_in, TString cutLabel_in, std::vector** params_in, T cutValue_in, bool doPlot_in): cutName(cutName_in), cutLabel(cutLabel_in), params(params_in), cutValue(cutValue_in), doPlot(doPlot_in) {} + TypedCut(){}; + ~TypedCut(){}; + TString getCutName() const + { + return cutName; + } + TString getCutLabel() const + { + return cutLabel; + } + float getParam(int it) const + { + T param = (*params)->at(it); + return float(param); + } + float getCutValue() const + { + return float(cutValue); + } + float getDoPlot() const + { + return doPlot; + } +}; + +class Plot { +public: + virtual ~Plot() = default; + virtual TString getVarName() const = 0; + virtual TString getUnit() const = 0; + virtual float getParam(int it) const = 0; + virtual int getNumBins() const = 0; + virtual float getMinBin() const = 0; + virtual float getMaxBin() const = 0; + virtual std::vector getBins() const = 0; + virtual bool getBool() const = 0; +}; + +template +class TypedPlot : public Plot +{ +public: + TString varName; + TString unit; + std::vector** params; + int numBins; + float minBin; + float maxBin; + std::vector bins; + bool variableBins; + + TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, float minBin_in, float maxBin_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), minBin(minBin_in), maxBin(maxBin_in){ + variableBins = false; + } + TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, std::vector bins_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), bins(bins_in) { + variableBins = true; + } + TypedPlot(){}; + ~TypedPlot(){}; + TString getVarName() const + { + return varName; + } + TString getUnit() const + { + return unit; + } + float getParam(int it) const + { + T param = (*params)->at(it); + return float(param); + } + int getNumBins() const + { + return numBins; + } + float getMinBin() const + { + return minBin; + } + float getMaxBin() const + { + return maxBin; + } + std::vector getBins() const + { + return bins; + } + bool getBool() const + { + return variableBins; + } +}; + +void displayProgress(long current, long max) +{ + using std::cerr; + if (max < 2500) + return; + if (current % (max / 2500) != 0 && current < max - 1) + return; + + int width = 52; // Hope the terminal is at least that wide. + int barWidth = width - 2; + cerr << "\x1B[2K"; // Clear line + cerr << "\x1B[2000D"; // Cursor left + cerr << '['; + for (int i = 0; i < barWidth; ++i) + { + if (i < barWidth * current / max) + { + cerr << '='; + } + else + { + cerr << ' '; + } + } + cerr << ']'; + cerr << " " << Form("%8d/%8d (%5.2f%%)", (int)current, (int)max, 100.0 * current / max); + cerr.flush(); +} + +template +void raiseMax(T *hist1, S *hist2=nullptr, T *hist3=nullptr, T *hist4=nullptr) +{ + Double_t max = hist1->GetBinContent(hist1->GetMaximumBin()); + if(hist2!=nullptr){ + Double_t max2 = hist2->GetBinContent(hist2->GetMaximumBin()); + if(max2>max) max = max2; + } + if(hist3!=nullptr){ + Double_t max3 = hist3->GetBinContent(hist3->GetMaximumBin()); + if(max3>max) max = max3; + } + if(hist4!=nullptr){ + Double_t max4 = hist4->GetBinContent(hist4->GetMaximumBin()); + if(max4>max) max = max4; + } + if(max>0.0){ + hist1->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist2!=nullptr) hist2->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist3!=nullptr) hist3->GetYaxis()->SetRangeUser(0.,1.2*max); + if(hist4!=nullptr) hist4->GetYaxis()->SetRangeUser(0.,1.2*max); + } +} + +void raiseMaxStack(TH1F* hist, THStack* stack) +{ + Double_t max = hist->GetMaximum(); + Double_t max2 = stack->GetMaximum(); + if(max2>max) max = max2; + + if(max>0.0){ + hist->GetYaxis()->SetRangeUser(0.,1.2*max); + stack->GetYaxis()->SetRangeUser(0.,1.2*max); + } + +} + +template +void drawSame(T *hist1, S *hist2, T *hist3=nullptr, T *hist4=nullptr) +{ + if(hist1->GetBinContent(hist1->GetMaximumBin())!=0.0){ + hist1->Draw("HIST"); + hist2->Draw("HIST,SAME"); + if(hist3!=nullptr) hist3->Draw("HIST,SAME"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + else if(hist2->GetBinContent(hist2->GetMaximumBin())!=0.0){ + hist2->Draw("HIST"); + if(hist3!=nullptr) hist3->Draw("HIST,SAME"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + else if(hist3!=nullptr){ + if(hist3->GetBinContent(hist3->GetMaximumBin())!=0.0){ + hist3->Draw("HIST"); + if(hist4!=nullptr) hist4->Draw("HIST,SAME"); + } + } + else if(hist4!=nullptr){ + if(hist4->GetBinContent(hist4->GetMaximumBin())!=0.0){ + hist4->Draw("HIST"); + } + } + else{ + hist1->Draw("HIST"); + } +} + +void drawSameStack(TH1F* hist, THStack* stack) +{ + if(hist->GetMaximum()!=0.0){ + hist->Draw("HIST"); + stack->Draw("HIST,SAME"); + } + else if(stack->GetMaximum()!=0.0){ + stack->Draw("HIST"); + } + else{ + hist->Draw("HIST"); + } +} + +bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } +bool CompareZ0Track(Track_Parameters a, Track_Parameters b) { return a.z0 > b.z0; } +bool CompareD0Track(Track_Parameters a, Track_Parameters b) { return a.d0 > b.d0; } +bool ComparePtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.a.pt > v2.a.pt; } +bool CompareDelzVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.delta_z > v2.delta_z; } +bool CompareDtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.d_T > v2.d_T; } +bool CompareChi2rphidofSumVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.chi2rphidofSum > v2.chi2rphidofSum; } +bool CompareRtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.R_T > v2.R_T; } + +template +std::vector linspace(T start, T end, int num){ + std::vector out; + T delta = (end - start) / (num-1); + for(int i=0; i logspace(const float &a, const float &b, const int &k) +{ + std::vector bins; + float delta = (log10(b) - log10(a)) / k; + for (int i = 0; i < (k+1); i++) + { + bins.push_back(pow(10, log10(a) + (i * delta))); + } + //std::cout<<"logspace bins: "; + for(uint j=0; j TMath::Pi()) + dPhi -= 2. * TMath::Pi(); + if (dPhi < -TMath::Pi()) + dPhi += 2. * TMath::Pi(); + return dPhi; +} + +Double_t deltaR(Double_t eta1, Double_t phi1, Double_t eta2, Double_t phi2) +{ + Double_t dEta, dPhi; + dEta = eta1 - eta2; + dPhi = deltaPhi(phi1, phi2); + return sqrt(dEta * dEta + dPhi * dPhi); +} + +Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points + return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); +} + +Double_t dist_Vertex(Double_t x_vtx, Double_t y_vtx, Track_Parameters a){ // Distance between track and displaced vertex + float R = dist(x_vtx,y_vtx,a.x0,a.y0); + return (fabs(R-(a.rho))); +} + +Double_t dist_TPs(Track_Parameters* a, Track_Parameters* b); // Closest distance between 2 tracks +Double_t dist_TPs(Track_Parameters a, Track_Parameters b); // Closest distance between 2 tracks +bool CompareDeltaXY(Vertex_Parameters v1, Vertex_Parameters v2) {return dist_TPs(v1.a,v1.b) < dist_TPs(v2.a,v2.b); } + +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx); +// Identify the displaced vertex (x_vtx,y_vtx,z_vtx) and return the status +//-2 = Circles with same center. No Intersection +//-1 = Circles don't Intersect. A point on the line connecting the centers is chosen. +// 0 = Only 1 Intersection not satisfying Z cutoff +// 1 = Only 1 Intersection satisfying Z cutoff +// 2 = Only 1 Intersection detectable dist(x,y)<20 +// 3 = 2 Intersections + +void Analyzer_DisplacedMuon(TString inputFilePath, + TString outputDir, + float TP_maxD0 = 1.9, + float TP_minD0 = 0.0004196) +{ + TChain *tree = new TChain("L1TrackNtuple/eventTree"); + tree->Add(inputFilePath); + //TChain *vertTree = new TChain("L1TrackNtuple/dispVertTree"); + //vertTree->Add(inputFilePath); + std::string inputFileString(inputFilePath.Data()); + inputFileString = inputFileString.substr(inputFileString.find_last_of("/")+1); + TString inputFile(inputFileString); + std::cout<<"input: "<SetBatch(); + gErrorIgnoreLevel = kWarning; + + SetPlotStyle(); + float barrelEta = 0.95; + bool useEmulation = false; + + //Vertex parameter vectors + vector *trkVert_firstIndexTrk; + vector *trkVert_secondIndexTrk; + vector *trkVert_inTraj; + vector *trkVert_d_T; + vector *trkVert_R_T; + vector *trkVert_cos_T; + vector *trkVert_del_Z; + vector *trkVert_x; + vector *trkVert_y; + vector *trkVert_z; + vector *trkVert_openingAngle; + vector *trkVert_parentPt; + vector *trkVert_isReal; + vector *trkVert_score; + + vector *tpVert_d_T; + vector *tpVert_R_T; + vector *tpVert_cos_T; + vector *tpVert_x; + vector *tpVert_y; + vector *tpVert_z; + vector *tpVert_openingAngle; + vector *tpVert_parentPt; + + vector *trk_pt; + vector *trk_eta; + vector *trk_phi; + vector *trk_d0; + vector *trk_rinv; + vector *trk_z0; + vector *trk_chi2rphi; + vector *trk_chi2rz; + vector *trk_bendchi2; + vector *trk_nstub; + vector *trkExt_fake; + vector *trk_MVA1; + vector *trk_matchtp_pdgid; + vector *trk_matchtp_isHToB; + vector *trk_matchtp_isHard; + vector *trk_matchtp_pt; + vector *trk_matchtp_eta; + vector *trk_matchtp_phi; + vector *trk_matchtp_z0; + vector *trk_matchtp_d0; + vector *trk_matchtp_x; + vector *trk_matchtp_y; + vector *trk_matchtp_z; + vector *tp_pt; + vector *tp_eta; + vector *tp_phi; + vector *tp_dxy; + vector *tp_d0; + vector *tp_z0; + vector *tp_x; + vector *tp_y; + vector *tp_z; + vector *tp_pdgid; + vector *tp_isHToB; + vector *tp_isHard; + vector *tp_nmatch; + vector *tp_nstub; + vector *tp_eventid; + vector *tp_charge; + vector *matchtrk_pt; + vector *matchtrk_eta; + vector *matchtrk_phi; + vector *matchtrk_z0; + vector *matchtrk_d0; + vector *matchtrk_rinv; + vector *matchtrk_chi2rphi; + vector *matchtrk_chi2rz; + vector *matchtrk_bendchi2; + vector *matchtrk_MVA1; + vector *matchtrk_nstub; + + TBranch *b_trkVert_firstIndexTrk; + TBranch *b_trkVert_secondIndexTrk; + TBranch *b_trkVert_inTraj; + TBranch *b_trkVert_d_T; + TBranch *b_trkVert_R_T; + TBranch *b_trkVert_cos_T; + TBranch *b_trkVert_del_Z; + TBranch *b_trkVert_x; + TBranch *b_trkVert_y; + TBranch *b_trkVert_z; + TBranch *b_trkVert_openingAngle; + TBranch *b_trkVert_parentPt; + TBranch *b_trkVert_isReal; + TBranch *b_trkVert_score; + TBranch *b_trk_pt; + TBranch *b_trk_eta; + TBranch *b_trk_phi; + TBranch *b_trk_d0; + TBranch *b_trk_rinv; + TBranch *b_trk_z0; + TBranch *b_trk_chi2rphi; + TBranch *b_trk_chi2rz; + TBranch *b_trk_bendchi2; + TBranch *b_trk_nstub; + TBranch *b_trkExt_fake; + TBranch *b_trk_MVA1; + TBranch *b_trk_matchtp_pdgid; + TBranch *b_trk_matchtp_isHToB; + TBranch *b_trk_matchtp_isHard; + TBranch *b_trk_matchtp_pt; + TBranch *b_trk_matchtp_eta; + TBranch *b_trk_matchtp_phi; + TBranch *b_trk_matchtp_z0; + TBranch *b_trk_matchtp_d0; + TBranch *b_trk_matchtp_x; + TBranch *b_trk_matchtp_y; + TBranch *b_trk_matchtp_z; + TBranch *b_tp_pt; + TBranch *b_tp_eta; + TBranch *b_tp_phi; + TBranch *b_tp_dxy; + TBranch *b_tp_d0; + TBranch *b_tp_z0; + TBranch *b_tp_x; + TBranch *b_tp_y; + TBranch *b_tp_z; + TBranch *b_tp_pdgid; + TBranch *b_tp_isHToB; + TBranch *b_tp_isHard; + TBranch *b_tp_nmatch; + TBranch *b_tp_nstub; + TBranch *b_tp_eventid; + TBranch *b_tp_charge; + TBranch *b_matchtrk_pt; + TBranch *b_matchtrk_eta; + TBranch *b_matchtrk_phi; + TBranch *b_matchtrk_z0; + TBranch *b_matchtrk_d0; + TBranch *b_matchtrk_rinv; + TBranch *b_matchtrk_chi2rphi; + TBranch *b_matchtrk_chi2rz; + TBranch *b_matchtrk_bendchi2; + TBranch *b_matchtrk_MVA1; + TBranch *b_matchtrk_nstub; + + trkVert_firstIndexTrk = 0; + trkVert_secondIndexTrk = 0; + trkVert_inTraj = 0; + trkVert_d_T = 0; + trkVert_R_T = 0; + trkVert_cos_T = 0; + trkVert_del_Z = 0; + trkVert_x = 0; + trkVert_y = 0; + trkVert_z = 0; + trkVert_openingAngle = 0; + trkVert_parentPt = 0; + trkVert_isReal = 0; + trkVert_score = 0; + trk_pt = 0; + trk_eta = 0; + trk_phi = 0; + trk_d0 = 0; + trk_rinv = 0; + trk_z0 = 0; + trk_chi2rphi = 0; + trk_chi2rz = 0; + trk_bendchi2 = 0; + trk_nstub = 0; + trkExt_fake = 0; + trk_MVA1 = 0; + trk_matchtp_pdgid = 0; + trk_matchtp_isHToB = 0; + trk_matchtp_isHard = 0; + trk_matchtp_pt = 0; + trk_matchtp_eta = 0; + trk_matchtp_phi = 0; + trk_matchtp_z0 = 0; + trk_matchtp_d0 = 0; + trk_matchtp_x = 0; + trk_matchtp_y = 0; + trk_matchtp_z = 0; + tp_pt = 0; + tp_eta = 0; + tp_phi = 0; + tp_dxy = 0; + tp_d0 = 0; + tp_z0 = 0; + tp_x = 0; + tp_y = 0; + tp_z = 0; + tp_pdgid = 0; + tp_isHToB = 0; + tp_isHard = 0; + tp_nmatch = 0; + tp_nstub = 0; + tp_eventid = 0; + tp_charge = 0; + matchtrk_pt = 0; + matchtrk_eta = 0; + matchtrk_phi = 0; + matchtrk_z0 = 0; + matchtrk_d0 = 0; + matchtrk_rinv = 0; + matchtrk_chi2rphi = 0; + matchtrk_chi2rz = 0; + matchtrk_bendchi2 = 0; + matchtrk_MVA1 = 0; + matchtrk_nstub = 0; + + //tree->SetMakeClass(1); + if(useEmulation){ + tree->SetBranchAddress("dvEmu_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); + tree->SetBranchAddress("dvEmu_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); + tree->SetBranchAddress("dvEmu_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); + tree->SetBranchAddress("dvEmu_d_T", &trkVert_d_T, &b_trkVert_d_T); + tree->SetBranchAddress("dvEmu_R_T", &trkVert_R_T, &b_trkVert_R_T); + tree->SetBranchAddress("dvEmu_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); + tree->SetBranchAddress("dvEmu_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); + tree->SetBranchAddress("dvEmu_x", &trkVert_x, &b_trkVert_x); + tree->SetBranchAddress("dvEmu_y", &trkVert_y, &b_trkVert_y); + tree->SetBranchAddress("dvEmu_z", &trkVert_z, &b_trkVert_z); + tree->SetBranchAddress("dvEmu_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); + tree->SetBranchAddress("dvEmu_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); + tree->SetBranchAddress("dvEmu_isReal", &trkVert_isReal, &b_trkVert_isReal); + tree->SetBranchAddress("dvEmu_score", &trkVert_score, &b_trkVert_score); + tree->SetBranchAddress("trkExtEmu_pt", &trk_pt, &b_trk_pt); + tree->SetBranchAddress("trkExtEmu_eta", &trk_eta, &b_trk_eta); + tree->SetBranchAddress("trkExtEmu_phi", &trk_phi, &b_trk_phi); + tree->SetBranchAddress("trkExtEmu_d0", &trk_d0, &b_trk_d0); + tree->SetBranchAddress("trkExtEmu_rinv", &trk_rinv, &b_trk_rinv); + tree->SetBranchAddress("trkExtEmu_z0", &trk_z0, &b_trk_z0); + tree->SetBranchAddress("trkExtEmu_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); + tree->SetBranchAddress("trkExtEmu_chi2rz", &trk_chi2rz, &b_trk_chi2rz); + tree->SetBranchAddress("trkExtEmu_bendchi2", &trk_bendchi2, &b_trk_bendchi2); + tree->SetBranchAddress("trkExtEmu_nstub", &trk_nstub, &b_trk_nstub); + tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); + tree->SetBranchAddress("trkExtEmu_MVA", &trk_MVA1, &b_trk_MVA1); + } + else{ + tree->SetBranchAddress("dv_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); + tree->SetBranchAddress("dv_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); + tree->SetBranchAddress("dv_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); + tree->SetBranchAddress("dv_d_T", &trkVert_d_T, &b_trkVert_d_T); + tree->SetBranchAddress("dv_R_T", &trkVert_R_T, &b_trkVert_R_T); + tree->SetBranchAddress("dv_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); + tree->SetBranchAddress("dv_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); + tree->SetBranchAddress("dv_x", &trkVert_x, &b_trkVert_x); + tree->SetBranchAddress("dv_y", &trkVert_y, &b_trkVert_y); + tree->SetBranchAddress("dv_z", &trkVert_z, &b_trkVert_z); + tree->SetBranchAddress("dv_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); + tree->SetBranchAddress("dv_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); + tree->SetBranchAddress("dv_isReal", &trkVert_isReal, &b_trkVert_isReal); + tree->SetBranchAddress("dv_score", &trkVert_score, &b_trkVert_score); + tree->SetBranchAddress("trkExt_pt", &trk_pt, &b_trk_pt); + tree->SetBranchAddress("trkExt_eta", &trk_eta, &b_trk_eta); + tree->SetBranchAddress("trkExt_phi", &trk_phi, &b_trk_phi); + tree->SetBranchAddress("trkExt_d0", &trk_d0, &b_trk_d0); + tree->SetBranchAddress("trkExt_rinv", &trk_rinv, &b_trk_rinv); + tree->SetBranchAddress("trkExt_z0", &trk_z0, &b_trk_z0); + tree->SetBranchAddress("trkExt_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); + tree->SetBranchAddress("trkExt_chi2rz", &trk_chi2rz, &b_trk_chi2rz); + tree->SetBranchAddress("trkExt_bendchi2", &trk_bendchi2, &b_trk_bendchi2); + tree->SetBranchAddress("trkExt_nstub", &trk_nstub, &b_trk_nstub); + tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); + tree->SetBranchAddress("trkExt_MVA", &trk_MVA1, &b_trk_MVA1); + } + tree->SetBranchAddress("trkExt_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid); + tree->SetBranchAddress("trkExt_matchtp_isHToB", &trk_matchtp_isHToB, &b_trk_matchtp_isHToB); + tree->SetBranchAddress("trkExt_matchtp_isHard", &trk_matchtp_isHard, &b_trk_matchtp_isHard); + tree->SetBranchAddress("trkExt_matchtp_pt", &trk_matchtp_pt, &b_trk_matchtp_pt); + tree->SetBranchAddress("trkExt_matchtp_eta", &trk_matchtp_eta, &b_trk_matchtp_eta); + tree->SetBranchAddress("trkExt_matchtp_phi", &trk_matchtp_phi, &b_trk_matchtp_phi); + tree->SetBranchAddress("trkExt_matchtp_z0", &trk_matchtp_z0, &b_trk_matchtp_z0); + tree->SetBranchAddress("trkExt_matchtp_d0", &trk_matchtp_d0, &b_trk_matchtp_d0); + tree->SetBranchAddress("trkExt_matchtp_x", &trk_matchtp_x, &b_trk_matchtp_x); + tree->SetBranchAddress("trkExt_matchtp_y", &trk_matchtp_y, &b_trk_matchtp_y); + tree->SetBranchAddress("trkExt_matchtp_z", &trk_matchtp_z, &b_trk_matchtp_z); + tree->SetBranchAddress("tp_pt", &tp_pt, &b_tp_pt); + tree->SetBranchAddress("tp_eta", &tp_eta, &b_tp_eta); + tree->SetBranchAddress("tp_phi", &tp_phi, &b_tp_phi); + tree->SetBranchAddress("tp_dxy", &tp_dxy, &b_tp_dxy); + tree->SetBranchAddress("tp_d0", &tp_d0, &b_tp_d0); + tree->SetBranchAddress("tp_z0", &tp_z0, &b_tp_z0); + tree->SetBranchAddress("tp_x", &tp_x, &b_tp_x); + tree->SetBranchAddress("tp_y", &tp_y, &b_tp_y); + tree->SetBranchAddress("tp_z", &tp_z, &b_tp_z); + tree->SetBranchAddress("tp_pdgid", &tp_pdgid, &b_tp_pdgid); + tree->SetBranchAddress("tp_isHToB", &tp_isHToB, &b_tp_isHToB); + tree->SetBranchAddress("tp_isHard", &tp_isHard, &b_tp_isHard); + tree->SetBranchAddress("tp_nmatch", &tp_nmatch, &b_tp_nmatch); + tree->SetBranchAddress("tp_nstub", &tp_nstub, &b_tp_nstub); + tree->SetBranchAddress("tp_eventid", &tp_eventid, &b_tp_eventid); + tree->SetBranchAddress("tp_charge", &tp_charge, &b_tp_charge); + if(useEmulation){ + tree->SetBranchAddress("matchtrkExtEmu_pt", &matchtrk_pt, &b_matchtrk_pt); + tree->SetBranchAddress("matchtrkExtEmu_eta", &matchtrk_eta, &b_matchtrk_eta); + tree->SetBranchAddress("matchtrkExtEmu_phi", &matchtrk_phi, &b_matchtrk_phi); + tree->SetBranchAddress("matchtrkExtEmu_z0", &matchtrk_z0, &b_matchtrk_z0); + tree->SetBranchAddress("matchtrkExtEmu_d0", &matchtrk_d0, &b_matchtrk_d0); + tree->SetBranchAddress("matchtrkExtEmu_rinv", &matchtrk_rinv, &b_matchtrk_rinv); + tree->SetBranchAddress("matchtrkExtEmu_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); + tree->SetBranchAddress("matchtrkExtEmu_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); + tree->SetBranchAddress("matchtrkExtEmu_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); + tree->SetBranchAddress("matchtrkExtEmu_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); + tree->SetBranchAddress("matchtrkExtEmu_nstub", &matchtrk_nstub, &b_matchtrk_nstub); + } + else{ + tree->SetBranchAddress("matchtrkExt_pt", &matchtrk_pt, &b_matchtrk_pt); + tree->SetBranchAddress("matchtrkExt_eta", &matchtrk_eta, &b_matchtrk_eta); + tree->SetBranchAddress("matchtrkExt_phi", &matchtrk_phi, &b_matchtrk_phi); + tree->SetBranchAddress("matchtrkExt_z0", &matchtrk_z0, &b_matchtrk_z0); + tree->SetBranchAddress("matchtrkExt_d0", &matchtrk_d0, &b_matchtrk_d0); + tree->SetBranchAddress("matchtrkExt_rinv", &matchtrk_rinv, &b_matchtrk_rinv); + tree->SetBranchAddress("matchtrkExt_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); + tree->SetBranchAddress("matchtrkExt_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); + tree->SetBranchAddress("matchtrkExt_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); + tree->SetBranchAddress("matchtrkExt_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); + tree->SetBranchAddress("matchtrkExt_nstub", &matchtrk_nstub, &b_matchtrk_nstub); + } + //preselection cuts and plots definitions + // Cut assumptions: first cut is maxEta + std::vector> preselCuts; + std::unique_ptr> cut0(new TypedCut("maxEta","max #eta",&trk_eta,2.4,true)); + preselCuts.push_back(std::move(cut0)); + std::unique_ptr> cut1(new TypedCut("maxChi2rzdof","max #chi^{2}_{rz}",&trk_chi2rz,3.0,false)); + preselCuts.push_back(std::move(cut1)); + std::unique_ptr> cut4(new TypedCut("minMVA1","min MVA1",&trk_MVA1,0.2,false)); + preselCuts.push_back(std::move(cut4)); + std::unique_ptr> cut5(new TypedCut("minMVA1_D","min MVA1 D",&trk_MVA1,0.5,false)); + preselCuts.push_back(std::move(cut5)); + std::unique_ptr> cut6(new TypedCut("minNumStub_overlap","Quality",&trk_nstub,5,true)); + preselCuts.push_back(std::move(cut6)); + std::unique_ptr> cut7(new TypedCut("minPt","min p_{T}",&trk_pt,3.0,true)); + preselCuts.push_back(std::move(cut7)); + std::unique_ptr> cut8(new TypedCut("minD0_barrel","min d_{0} Bar",&trk_d0,0.06,false)); + preselCuts.push_back(std::move(cut8)); + std::unique_ptr> cut9(new TypedCut("minD0_disk","min d_{0}",&trk_d0,0.08,true)); + preselCuts.push_back(std::move(cut9)); + + std::vector> preselCutsTP; + std::unique_ptr> tpCut0(new TypedCut("maxEta","max #eta",&tp_eta,2.4,true)); + preselCutsTP.push_back(std::move(tpCut0)); + std::unique_ptr> tpCut1(new TypedCut("minPt","min p_{T}",&tp_pt,3.0,true)); + preselCutsTP.push_back(std::move(tpCut1)); + std::unique_ptr> tpCut2(new TypedCut("minD0_barrel","min d_{0} Barrel",&tp_d0,0.06,true)); + preselCutsTP.push_back(std::move(tpCut2)); + std::unique_ptr> tpCut3(new TypedCut("minD0_disk","min d_{0} Disk",&tp_d0,0.08,true)); + preselCutsTP.push_back(std::move(tpCut3)); + + std::vector> varCutFlows; + std::unique_ptr> plot0(new TypedPlot("d0","cm",&trk_d0,20,logspace(0.01,10.0,20))); + varCutFlows.push_back(std::move(plot0)); + std::unique_ptr> plot1(new TypedPlot("pt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); + varCutFlows.push_back(std::move(plot1)); + std::unique_ptr> plot2(new TypedPlot("eta","",&trk_eta,50,-2.5,2.5)); + varCutFlows.push_back(std::move(plot2)); + std::unique_ptr> plot3(new TypedPlot("z0","cm",&trk_z0,100,-20.0,20.0)); + varCutFlows.push_back(std::move(plot3)); + std::unique_ptr> plot4(new TypedPlot("phi","",&trk_phi,100,-2*TMath::Pi(),2*TMath::Pi())); + varCutFlows.push_back(std::move(plot4)); + std::unique_ptr> plot6(new TypedPlot("MVA1","",&trk_MVA1,100,0.0,1.0)); + varCutFlows.push_back(std::move(plot6)); + std::unique_ptr> plot8(new TypedPlot("chi2rphidof","",&trk_chi2rphi,100,0.0,6.0)); + varCutFlows.push_back(std::move(plot8)); + std::unique_ptr> plot9(new TypedPlot("chi2rzdof","",&trk_chi2rz,100,0.0,6.0)); + varCutFlows.push_back(std::move(plot9)); + std::unique_ptr> plot10(new TypedPlot("bendchi2","",&trk_bendchi2,100,0.0,10.0)); + varCutFlows.push_back(std::move(plot10)); + + std::vector> varCutFlowsTP; + std::unique_ptr> tpPlot0(new TypedPlot("d0","cm",&tp_d0,20,logspace(0.01,10.0,20))); + varCutFlowsTP.push_back(std::move(tpPlot0)); + std::unique_ptr> tpPlot1(new TypedPlot("pt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); + varCutFlowsTP.push_back(std::move(tpPlot1)); + std::unique_ptr> tpPlot2(new TypedPlot("eta","",&tp_eta,50,-2.5,2.5)); + varCutFlowsTP.push_back(std::move(tpPlot2)); + std::unique_ptr> tpPlot3(new TypedPlot("z0","cm",&tp_z0,100,-20.0,20.0)); + varCutFlowsTP.push_back(std::move(tpPlot3)); + std::unique_ptr> tpPlot4(new TypedPlot("phi","",&tp_phi,100,-2*TMath::Pi(),2*TMath::Pi())); + varCutFlowsTP.push_back(std::move(tpPlot4)); + std::unique_ptr> tpPlot6(new TypedPlot("dxy","cm",&tp_dxy,50,-2.0,2.0)); + varCutFlowsTP.push_back(std::move(tpPlot6)); + + std::vector,std::unique_ptr > > varCutFlows2D; + std::unique_ptr> plot0X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); + std::unique_ptr> plot0Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); + varCutFlows2D.push_back({std::move(plot0X),std::move(plot0Y)}); + std::unique_ptr> plot1X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + std::unique_ptr> plot1Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); + varCutFlows2D.push_back({std::move(plot1X),std::move(plot1Y)}); + std::unique_ptr> plot2X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); + std::unique_ptr> plot2Y(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + varCutFlows2D.push_back({std::move(plot2X),std::move(plot2Y)}); + std::unique_ptr> plot3X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); + std::unique_ptr> plot3Y(new TypedPlot("nstub","",&trk_nstub,7,0.0,7.0)); + varCutFlows2D.push_back({std::move(plot3X),std::move(plot3Y)}); + + std::vector,std::unique_ptr > > varCutFlowsTP2D; + std::unique_ptr> tpPlot0X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); + std::unique_ptr> tpPlot0Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot0X),std::move(tpPlot0Y)}); + std::unique_ptr> tpPlot1X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + std::unique_ptr> tpPlot1Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot1X),std::move(tpPlot1Y)}); + std::unique_ptr> tpPlot2X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); + std::unique_ptr> tpPlot2Y(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + varCutFlowsTP2D.push_back({std::move(tpPlot2X),std::move(tpPlot2Y)}); + std::unique_ptr> tpPlot3X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); + std::unique_ptr> tpPlot3Y(new TypedPlot("nstub","",&tp_nstub,7,0.0,7.0)); + varCutFlowsTP2D.push_back({std::move(tpPlot3X),std::move(tpPlot3Y)}); + + //std::vector trackType = {"primary","np","fake","PU","notHiggs"}; + std::vector trackType = {"primary","np"}; + //std::vector tpType = {"primary","np","PU","notHiggs","match",""}; + std::vector tpType = {"primary","np","match",""}; + std::vector plotModifiers = {"","_H","_L","_P","_D","_barrel","_disk"}; + if(!detailedPlots) plotModifiers = {""}; + uint preselCutsSize = 0; + for(uint i=0; igetDoPlot()) preselCutsSize++; + } + TH1F* preselCutFlows[varCutFlows.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; + TH2F* preselCutFlows2D[varCutFlows2D.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; + TH1F* preselCutFlowsTP[varCutFlowsTP.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; + TH2F* preselCutFlowsTP2D[varCutFlowsTP2D.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; + //std::map numPartCutFlows[trackType.size()][preselCuts.size()]; + //std::map numPartCutFlowsTP[tpType.size()][preselCutsTP.size()]; + + for(uint it=0; itgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; + //std::cout<<"name: "<getBool()){ + //std::cout<<"setting bins"<getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events "; + std::vector bins = varCutFlows[it]->getBins(); + TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),bins.data()); + preselCutFlows[it][i][i_plot][j] = hist; + TString varString = varCutFlows[it]->getVarName(); + if(varString.Contains("d0") || varString.Contains("pt")){ + //std::cout<<"labels: "<GetNbinsX()+1); ibin++){ + binValues+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinContent(ibin)) + ", "; + binWidths+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinWidth(ibin)) + ", "; + + } + binValues+="]"; + binWidths+="]"; + + //std::cout<<"binValues: "<getMaxBin() - varCutFlows[it]->getMinBin()) / varCutFlows[it]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Track "+varCutFlows[it]->getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlows[it]->getUnit(); + TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),varCutFlows[it]->getMinBin(),varCutFlows[it]->getMaxBin()); + preselCutFlows[it][i][i_plot][j] = hist; + } + } + } + } + } + + for(uint it=0; itgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetVarName()+"_vs_"+varCutFlows2D[it].first->getVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; + TString labels = name+"; Track "+varCutFlows2D[it].first->getVarName()+" ("+varCutFlows2D[it].first->getUnit()+") ; Track "+varCutFlows2D[it].second->getVarName()+" ("+varCutFlows2D[it].second->getUnit()+")"; + TH2F* hist = new TH2F(name,labels,varCutFlows2D[it].first->getNumBins(),varCutFlows2D[it].first->getMinBin(),varCutFlows2D[it].first->getMaxBin(),varCutFlows2D[it].second->getNumBins(),varCutFlows2D[it].second->getMinBin(),varCutFlows2D[it].second->getMaxBin()); + preselCutFlows2D[it][i][i_plot][j] = hist; + } + } + } + } + + for(uint it=0; itgetVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; + if(varCutFlowsTP[it]->getMaxBin()==varCutFlowsTP[it]->getMinBin()){ + TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events "; + std::vector bins = varCutFlowsTP[it]->getBins(); + TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),bins.data()); + preselCutFlowsTP[it][i][jt][j] = hist; + } + else{ + float binWidth = (varCutFlowsTP[it]->getMaxBin() - varCutFlowsTP[it]->getMinBin()) / varCutFlowsTP[it]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlowsTP[it]->getUnit(); + TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),varCutFlowsTP[it]->getMinBin(),varCutFlowsTP[it]->getMaxBin()); + preselCutFlowsTP[it][i][jt][j] = hist; + } + } + } + } + } + + for(uint it=0; itgetVarName()+"_vs_"+varCutFlowsTP2D[it].first->getVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; + TString labels = name+"; Tp "+varCutFlowsTP2D[it].first->getVarName()+" ("+varCutFlowsTP2D[it].first->getUnit()+") ; Tp "+varCutFlowsTP2D[it].second->getVarName()+" ("+varCutFlowsTP2D[it].second->getUnit()+")"; + TH2F* hist = new TH2F(name,labels,varCutFlowsTP2D[it].first->getNumBins(),varCutFlowsTP2D[it].first->getMinBin(),varCutFlowsTP2D[it].first->getMaxBin(),varCutFlowsTP2D[it].second->getNumBins(),varCutFlowsTP2D[it].second->getMinBin(),varCutFlowsTP2D[it].second->getMaxBin()); + preselCutFlowsTP2D[it][i][jt][j] = hist; + } + } + } + } + + //vertex cuts and plots definitions + std::vector> vertCuts; + std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,true)); + vertCuts.push_back(std::move(vertCut0)); + std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,true)); + vertCuts.push_back(std::move(vertCut1)); + std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,true)); + vertCuts.push_back(std::move(vertCut2)); + std::unique_ptr> vertCut3(new TypedCut("min_trk_sumCharge","min #Sigma q",&trk_rinv,0,true)); + vertCuts.push_back(std::move(vertCut3)); +#if 0 + std::unique_ptr> vertCut4(new TypedCut("max_trk_sumBendChi2","max #Sigma #chi^{2}_{bend}",&trk_bendchi2,14.0,true)); + vertCuts.push_back(std::move(vertCut4)); + std::unique_ptr> vertCut5(new TypedCut("minCos_T","min cos_{T}",&trkVert_cos_T,0.96,true)); + vertCuts.push_back(std::move(vertCut5)); + std::unique_ptr> vertCut6(new TypedCut("max_trk_deltaEta","max #Delta #eta",&trk_eta,2.0,true)); + vertCuts.push_back(std::move(vertCut6)); + std::unique_ptr> vertCut7(new TypedCut("max_delZ","max #Delta z",&trkVert_del_Z,0.5,true)); + vertCuts.push_back(std::move(vertCut7)); + std::unique_ptr> vertCut8(new TypedCut("minR_T","min R_{T}",&trkVert_R_T,0.25,true)); + vertCuts.push_back(std::move(vertCut8)); + std::unique_ptr> vertCut9(new TypedCut("min_trk_highPt","min lead p_{T}",&trk_pt,13.0,true)); + vertCuts.push_back(std::move(vertCut9)); + std::unique_ptr> vertCut10(new TypedCut("max_trk_sumChi2rphidof","max #Sigma #chi^{2}_{r#phi}",&trk_chi2rphi,6.0,true)); + vertCuts.push_back(std::move(vertCut10)); + std::unique_ptr> vertCut11(new TypedCut("min_trk_sumNumStubs","min #Sigma n_{stub}",&trk_nstub,11,true)); + vertCuts.push_back(std::move(vertCut11)); + std::unique_ptr> vertCut12(new TypedCut("min_trk_highD0","min d_{0}",&trk_d0,0.3,true)); + vertCuts.push_back(std::move(vertCut12)); +#endif + + //std::unique_ptr> vertCut3p1(new TypedCut("min_score0p68","score>0.68",&trkVert_score,0.68,true)); + //vertCuts.push_back(std::move(vertCut3p1)); + //std::unique_ptr> vertCut3p2(new TypedCut("min_score0p69","score>0.69",&trkVert_score,0.69,true)); + //vertCuts.push_back(std::move(vertCut3p2)); + std::unique_ptr> vertCut3p3(new TypedCut("min_score0p70","score>0.70",&trkVert_score,0.70,true)); + vertCuts.push_back(std::move(vertCut3p3)); + //std::unique_ptr> vertCut3p4(new TypedCut("min_score0p71","score>0.71",&trkVert_score,0.71,true)); + //vertCuts.push_back(std::move(vertCut3p4)); + //std::unique_ptr> vertCut3p5(new TypedCut("min_score0p72","score>0.72",&trkVert_score,0.72,true)); + //vertCuts.push_back(std::move(vertCut3p5)); + std::unique_ptr> vertCut4(new TypedCut("min_score0p8","score>0.8",&trkVert_score,0.8,true)); + vertCuts.push_back(std::move(vertCut4)); + std::unique_ptr> vertCut5(new TypedCut("min_score0p9","score>0.9",&trkVert_score,0.9,true)); + vertCuts.push_back(std::move(vertCut5)); + //std::unique_ptr> vertCut51(new TypedCut("min_score0p91","score>0.91",&trkVert_score,0.91,true)); + //vertCuts.push_back(std::move(vertCut51)); + //std::unique_ptr> vertCut52(new TypedCut("min_score0p92","score>0.92",&trkVert_score,0.92,true)); + //vertCuts.push_back(std::move(vertCut52)); + //std::unique_ptr> vertCut53(new TypedCut("min_score0p93","score>0.93",&trkVert_score,0.93,true)); + //vertCuts.push_back(std::move(vertCut53)); + std::unique_ptr> vertCut54(new TypedCut("min_score0p94","score>0.94",&trkVert_score,0.94,true)); + vertCuts.push_back(std::move(vertCut54)); + std::unique_ptr> vertCut6(new TypedCut("min_score0p95","score>0.95",&trkVert_score,0.95,true)); + vertCuts.push_back(std::move(vertCut6)); + + std::unique_ptr> vertCut7(new TypedCut("min_score0p96","score>0.96",&trkVert_score,0.96,true)); + vertCuts.push_back(std::move(vertCut7)); + std::unique_ptr> vertCut8(new TypedCut("min_score0p97","score>0.97",&trkVert_score,0.97,true)); + vertCuts.push_back(std::move(vertCut8)); + std::unique_ptr> vertCut9(new TypedCut("min_score0p98","score>0.98",&trkVert_score,0.98,true)); + vertCuts.push_back(std::move(vertCut9)); + std::unique_ptr> vertCut10(new TypedCut("min_score0p99","score>0.99",&trkVert_score,0.99,true)); + vertCuts.push_back(std::move(vertCut10)); +#if 0 + std::unique_ptr> vertCut11(new TypedCut("min_score0p992","score>0.992",&trkVert_score,0.992,true)); + vertCuts.push_back(std::move(vertCut11)); + std::unique_ptr> vertCut12(new TypedCut("min_score0p994","score>0.994",&trkVert_score,0.994,true)); + vertCuts.push_back(std::move(vertCut12)); + std::unique_ptr> vertCut13(new TypedCut("min_score0p996","score>0.996",&trkVert_score,0.996,true)); + vertCuts.push_back(std::move(vertCut13)); + std::unique_ptr> vertCut14(new TypedCut("min_score0p998","score>0.998",&trkVert_score,0.998,true)); + vertCuts.push_back(std::move(vertCut14)); +#endif + std::vector> vertCutFlows; + std::unique_ptr> vertPlot0(new TypedPlot("x","cm",&trkVert_x,100,-5.0,5.0)); + vertCutFlows.push_back(std::move(vertPlot0)); + std::unique_ptr> vertPlot1(new TypedPlot("y","cm",&trkVert_y,100,-5.0,5.0)); + vertCutFlows.push_back(std::move(vertPlot1)); + std::unique_ptr> vertPlot2(new TypedPlot("z","cm",&trkVert_z,100,-50.0,50.0)); + vertCutFlows.push_back(std::move(vertPlot2)); + std::unique_ptr> vertPlot5(new TypedPlot("cos_T","",&trkVert_cos_T,40,-1.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot5)); + std::unique_ptr> vertPlot6(new TypedPlot("openingAngle","",&trkVert_openingAngle,40,-3.14,3.14)); + vertCutFlows.push_back(std::move(vertPlot6)); + std::unique_ptr> vertPlot7(new TypedPlot("parentPt","GeV",&trkVert_parentPt,200,0.0,200.0)); + vertCutFlows.push_back(std::move(vertPlot7)); + std::unique_ptr> vertPlot8(new TypedPlot("d_T","cm",&trkVert_d_T,40,0.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot8)); + std::unique_ptr> vertPlot9(new TypedPlot("R_T","cm",&trkVert_R_T,20,logspace(0.1,20.0,20))); + vertCutFlows.push_back(std::move(vertPlot9)); + std::unique_ptr> vertPlot10(new TypedPlot("highPt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); + vertCutFlows.push_back(std::move(vertPlot10)); + std::unique_ptr> vertPlot11(new TypedPlot("lowPt","GeV",&trk_pt,100,0.0,100.0)); + vertCutFlows.push_back(std::move(vertPlot11)); + std::unique_ptr> vertPlot12(new TypedPlot("highD0","cm",&trk_d0,80,-2.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot12)); + std::unique_ptr> vertPlot13(new TypedPlot("lowD0","cm",&trk_d0,80,-2.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot13)); + std::unique_ptr> vertPlot14(new TypedPlot("delZ","cm",&trkVert_del_Z,100,0.0,1.5)); + vertCutFlows.push_back(std::move(vertPlot14)); + std::unique_ptr> vertPlot15(new TypedPlot("deltaZ0","cm",&trk_z0,100,0.0,10.0)); + vertCutFlows.push_back(std::move(vertPlot15)); + std::unique_ptr> vertPlot16(new TypedPlot("deltaEta","",&trk_eta,100,0.0,2.4)); + vertCutFlows.push_back(std::move(vertPlot16)); + std::unique_ptr> vertPlot17(new TypedPlot("deltaD0","cm",&trk_d0,100,0.0,10.0)); + vertCutFlows.push_back(std::move(vertPlot17)); + std::unique_ptr> vertPlot18(new TypedPlot("deltaPhi","",&trk_phi,100,0.0,6.3)); + vertCutFlows.push_back(std::move(vertPlot18)); + std::unique_ptr> vertPlot20(new TypedPlot("sumNumStubs","",&trk_nstub,12,0.0,12.0)); + vertCutFlows.push_back(std::move(vertPlot20)); + std::unique_ptr> vertPlot21(new TypedPlot("sumChi2rphidof","",&trk_chi2rphi,200,0.0,8.0)); + vertCutFlows.push_back(std::move(vertPlot21)); + std::unique_ptr> vertPlot22(new TypedPlot("sumChi2rzdof","",&trk_chi2rz,200,0.0,3.0)); + vertCutFlows.push_back(std::move(vertPlot22)); + std::unique_ptr> vertPlot23(new TypedPlot("sumBendChi2","",&trk_bendchi2,200,0.0,14.0)); + vertCutFlows.push_back(std::move(vertPlot23)); + std::unique_ptr> vertPlot24(new TypedPlot("sumMVA1","",&trk_MVA1,100,0.0,2.0)); + vertCutFlows.push_back(std::move(vertPlot24)); + std::unique_ptr> vertPlot26(new TypedPlot("leadEta","",&trk_eta,50,-2.4,2.4)); + vertCutFlows.push_back(std::move(vertPlot26)); + std::unique_ptr> vertPlot27(new TypedPlot("score","",&trkVert_score,50,0.0,1.0)); + vertCutFlows.push_back(std::move(vertPlot27)); + + std::vector> vertCutFlowsTP; + std::unique_ptr> vertPlotTP0(new TypedPlot("x","cm",&tpVert_x,100,-5.0,5.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP0)); + std::unique_ptr> vertPlotTP1(new TypedPlot("y","cm",&tpVert_y,100,-5.0,5.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP1)); + std::unique_ptr> vertPlotTP2(new TypedPlot("z","cm",&tpVert_z,100,-50.0,50.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP2)); + std::unique_ptr> vertPlotTP4(new TypedPlot("cos_T","",&tpVert_cos_T,40,-1.0,1.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP4)); + std::unique_ptr> vertPlotTP5(new TypedPlot("openingAngle","",&tpVert_openingAngle,40,-3.14,3.14)); + vertCutFlowsTP.push_back(std::move(vertPlotTP5)); + std::unique_ptr> vertPlotTP6(new TypedPlot("parentPt","GeV",&tpVert_parentPt,200,0.0,200.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP6)); + std::unique_ptr> vertPlotTP7(new TypedPlot("d_T","cm",&tpVert_d_T,40,0.0,0.2)); + vertCutFlowsTP.push_back(std::move(vertPlotTP7)); + std::unique_ptr> vertPlotTP8(new TypedPlot("R_T","cm",&tpVert_R_T,20,logspace(0.1,20.0,20))); + vertCutFlowsTP.push_back(std::move(vertPlotTP8)); + std::unique_ptr> vertPlotTP9(new TypedPlot("highPt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); + vertCutFlowsTP.push_back(std::move(vertPlotTP9)); + std::unique_ptr> vertPlotTP10(new TypedPlot("lowPt","GeV",&tp_pt,100,0.0,100.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP10)); + std::unique_ptr> vertPlotTP11(new TypedPlot("highD0","cm",&tp_d0,80,-2.0,2.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP11)); + std::unique_ptr> vertPlotTP12(new TypedPlot("lowD0","cm",&tp_d0,80,-2.0,2.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP12)); + std::unique_ptr> vertPlotTP13(new TypedPlot("deltaZ0","cm",&tp_z0,100,0.0,10.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP13)); + std::unique_ptr> vertPlotTP14(new TypedPlot("deltaEta","",&tp_eta,100,0.0,2.4)); + vertCutFlowsTP.push_back(std::move(vertPlotTP14)); + std::unique_ptr> vertPlotTP15(new TypedPlot("deltaD0","cm",&tp_d0,100,0.0,10.0)); + vertCutFlowsTP.push_back(std::move(vertPlotTP15)); + std::unique_ptr> vertPlotTP16(new TypedPlot("deltaPhi","",&tp_phi,100,0.0,6.3)); + vertCutFlowsTP.push_back(std::move(vertPlotTP16)); + std::unique_ptr> vertPlotTP17(new TypedPlot("leadEta","",&tp_eta,50,-2.4,2.4)); + vertCutFlowsTP.push_back(std::move(vertPlotTP17)); + + std::vector vertType = {"matched","unmatched"}; + std::vector vertTypeTP = {"matched","all"}; + std::vector vertPlotTPModifiers = {"","_oneMatch"}; + + TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCuts.size()]; + TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCuts.size()][vertPlotTPModifiers.size()]; + TH1F* vertexCutFlowsTP[vertCutFlowsTP.size()][vertPlotTPModifiers.size()]; + TH1F* vertexNumVertices[vertCuts.size()]; + TH1F* fiducialNumVertices[vertCuts.size()]; + + for(uint i=0; igetVarName()+"_"+vertType[j]+"_"+vertCuts[k]->getCutName()+"Cut"; + if(vertCutFlows[i]->getMaxBin()==vertCutFlows[i]->getMinBin()){ + TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlows[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),bins.data()); + vertexCutFlows[i][j][k] = hist; + } + else{ + float binWidth = (vertCutFlows[i]->getMaxBin() - vertCutFlows[i]->getMinBin()) / vertCutFlows[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlows[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),vertCutFlows[i]->getMinBin(),vertCutFlows[i]->getMaxBin()); + vertexCutFlows[i][j][k] = hist; + } + } + } + } + + for(uint i=0; igetVarName()+"_"+vertTypeTP[0]+"_"+vertCuts[k]->getCutName()+"Cut"+vertPlotTPModifiers[m]; + if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlowsTP[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); + vertexCutFlowsMatchTP[i][k][m] = hist; + } + else{ + float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); + vertexCutFlowsMatchTP[i][k][m] = hist; + } + } + } + } + + for(uint i=0; igetVarName()+"_"+vertTypeTP[1]+vertPlotTPModifiers[k]; + if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; + std::vector bins = vertCutFlowsTP[i]->getBins(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); + vertexCutFlowsTP[i][k] = hist; + } + else{ + float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); + TString binLabel = std::to_string(binWidth); + TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); + TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); + vertexCutFlowsTP[i][k] = hist; + } + } + } + + for(uint k=0; kgetCutName()+"Cut"; + TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; + TH1F* hist = new TH1F(name,labels,40,0,40); + vertexNumVertices[k] = hist; + } + + for(uint k=0; kgetCutName()+"Cut"; + TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; + TH1F* hist = new TH1F(name,labels,40,0,40); + fiducialNumVertices[k] = hist; + } + + TH1F *h_numSelectedTrks = new TH1F("h_numSelectedTrks","h_numSelectedTrks; Number of Selected Tracks; Events / 1.0",100,0,100); + TH1F *h_numSelectedTrks_zoomOut = new TH1F("h_numSelectedTrks_zoomOut","h_numSelectedTrks_zoomOut; Number of Selected Tracks; Events / 10.0",100,0,1000); + TH1F *h_trk_H_T = new TH1F("h_trk_H_T","h_trk_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_trk_MET = new TH1F("h_trk_MET","h_trk_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_trk_oneMatch_H_T = new TH1F("h_trk_oneMatch_H_T","h_trk_oneMatch_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_trk_oneMatch_MET = new TH1F("h_trk_oneMatch_MET","h_trk_oneMatch_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_tp_H_T = new TH1F("h_tp_H_T","h_tp_H_T; Event TP Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); + TH1F *h_tp_MET = new TH1F("h_tp_MET","h_tp_MET; Event TP Missing E_{T} [GeV]; Events / 4.0",100,0,400); + TH1F *h_trueVertex_numAllCuts = new TH1F("h_trueVertex_numAllCuts","h_trueVertex_numAllCuts; TP Vertices; Events / 1.0",40,0,40); + TH1F *h_trueVertex_numTPs = new TH1F("h_trueVertex_numTPs","h_trueVertex_numTPs; TPs Associated with Vertex; Events / 1.0",6,0,6); + TH1F *h_trackVertexBranch_numAllCuts = new TH1F("h_trackVertexBranch_numAllCuts","h_trackVertexBranch_numAllCuts; Track Vertices; Events / 1.0",40,0,40); + + // Displaced Vertex Plots + TH1F *h_res_tp_trk_x = new TH1F("h_res_tp_trk_x","h_res_tp_trk_x; x residual of vertex (cm) ; Events / 0.02 cm",100,-0.4,0.4); + TH1F *h_res_tp_trk_y = new TH1F("h_res_tp_trk_y","h_res_tp_trk_y; y residual of vertex (cm) ; Events / 0.02 cm",100,-0.4,0.4); + TH1F *h_res_tp_trk_x_zoomOut = new TH1F("h_res_tp_trk_x_zoomOut","h_res_tp_trk_x_zoomOut; x residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); + TH1F *h_res_tp_trk_y_zoomOut = new TH1F("h_res_tp_trk_y_zoomOut","h_res_tp_trk_y_zoomOut; y residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); + TH1F *h_res_tp_trk_z = new TH1F("h_res_tp_trk_z","h_res_tp_trk_z; z residual of vertex (cm) ; Events / 0.05 cm",200,-6,6); + TH1F *h_res_tp_trk_r = new TH1F("h_res_tp_trk_r","h_res_tp_trk_r; r residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); + TH1F *h_res_tp_trk_phi = new TH1F("h_res_tp_trk_phi","h_res_tp_trk_phi; phi residual of vertex ; Events / 0.02",100,-1,1); + + TH2F *h_trueVertex_charge_vs_numTPs = new TH2F("h_trueVertex_charge_vs_numTPs","h_trueVertex_charge_vs_numTPs; TPs Associated with Vertex; Net Charge",6,0,6,12,-6,6); + TH2F *h_correct_trackVertex_charge_vs_numTracks = new TH2F("h_correct_trackVertex_charge_vs_numTracks","h_correct_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); + TH2F *h_false_trackVertex_charge_vs_numTracks = new TH2F("h_false_trackVertex_charge_vs_numTracks","h_false_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); + + std::string binVariable = ""; + std::vector> track_bins = {{-1,1}}; + std::vector> z0_bins; + double z0_bin_min = -20.0; + double z0_bin_width = 4.0; + double z0_bin_max = z0_bin_min+z0_bin_width; + while(z0_bin_max<20.0){ + z0_bins.push_back({z0_bin_min,z0_bin_max}); + z0_bin_min += (z0_bin_width/2); + z0_bin_max += (z0_bin_width/2); + } + std::vector> phi_bins; + double phi_bin_min = -TMath::Pi(); + double phi_bin_width = 0.6; + double phi_bin_max = phi_bin_min+phi_bin_width; + while(phi_bin_max numPart_primary_noCuts{}; + std::map numPart_primary_chi2rzdofCuts{}; + std::map numPart_primary_bendchi2Cuts{}; + std::map numPart_primary_chi2rphidofCuts{}; + std::map numPart_primary_nstubCuts{}; + std::map numPart_primary_ptCuts{}; + std::map numPart_primary_d0Cuts{}; + std::map numPart_primary_z0Cuts{}; + std::map numPart_np_noCuts{}; + std::map numPart_np_chi2rzdofCuts{}; + std::map numPart_np_bendchi2Cuts{}; + std::map numPart_np_chi2rphidofCuts{}; + std::map numPart_np_nstubCuts{}; + std::map numPart_np_ptCuts{}; + std::map numPart_np_d0Cuts{}; + std::map numPart_np_z0Cuts{}; + + if (tree == 0) return; + Long64_t nevt = tree->GetEntries(); + Long64_t n_findableEvent = 0; + //nevt = 100; + Vertex_Parameters geomTrackVertex; + Vertex_Parameters geomTrueVertex; + auto trackLoopTime = 0.; + auto tpLoopTime = 0.; + auto trueVertLoopTime = 0.; + auto trueVertPlotLoopTime = 0.; + auto trackVertLoopTime = 0.; + auto matchLoopTime = 0.; + auto trackVertPlotLoopTime = 0.; + //std::cout<<"before event loop"<GetEntry(i_evnt); + displayProgress(i_evnt, nevt); + std::vector> binnedSelectedTracks; + for(uint i=0; i selectedTracks; // Tracks + std::deque selectedTPs; // Tracking particles + std::vector trueVertices; + int maxPT_i = 0; + bool oneMatch = false; + bool findableEvent = false; + std::valarray trkMET = {0.0,0.0}; + float trkH_T = 0.0; + + vector> tpVert_indexTPs; + vector trkVert_indexMatch; + tpVert_d_T = new vector (); + tpVert_R_T = new vector (); + tpVert_cos_T = new vector (); + tpVert_x = new vector (); + tpVert_y = new vector (); + tpVert_z = new vector (); + tpVert_openingAngle = new vector (); + tpVert_parentPt = new vector (); + + // ---------------------------------------------------------------------------------------------------------------- + // track loop + //std::cout<<"starting track loop"<size(); ++it){ + bool isPrimary = true; + if(inputFile.Contains("DarkPhoton")){ + isPrimary = trk_matchtp_isHard->at(it); + } + if(inputFile.Contains("DisplacedTrackJet")){ + isPrimary = trk_matchtp_isHToB->at(it); + } + //std::cout<<"track pt: "<at(it)<<" eta: "<at(it)<<" d0 : "<at(it)<<" phi: "<at(it)<<" z0: "<at(it)<<" nstub: "<getDoPlot()){ + i_plot++; + } + bool mods = true; + TString cutName = preselCuts[icut]->getCutName(); + float cutValue = preselCuts[icut]->getCutValue(); + float param = preselCuts[icut]->getParam(it); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; + if(cutName.Contains("disk") && fabs(trk_eta->at(it))<=barrelEta) mods = false; + if(cutName.Contains("_H") && trk_pt->at(it)<=10) mods = false; + if(cutName.Contains("_L") && trk_pt->at(it)>10) mods = false; + if(cutName.Contains("_P") && fabs(trk_d0->at(it))>1) mods = false; + if(cutName.Contains("_D") && fabs(trk_d0->at(it))<=1 ) mods = false; + if(cutName.Contains("overlap") && (fabs(trk_eta->at(it))<=1.1 || fabs(trk_eta->at(it))>=1.7)) mods = false; + if(mods){ + if(cutName.Contains("max") && param>cutValue) break; + if(cutName.Contains("min") && paramgetDoPlot()) continue; + for(uint i=0; iat(it)==1 && isPrimary; + if(trackType[i]=="primary" && !primary) continue; + if(trackType[i]=="np" && primary) continue; + if(trackType[i]=="fake" && trkExt_fake->at(it)!=0) continue; + if(trackType[i]=="PU" && trkExt_fake->at(it)!=2) continue; + if(trackType[i]=="notHiggs" && !(trkExt_fake->at(it)==1 && !isPrimary)) continue; + string partId = to_string(trk_matchtp_pdgid->at(it)); + //numPartCutFlows[i][icut][partId]++; + for(uint j=0; jat(it)<=10) continue; + if(plotModifiers[j]=="_L" && trk_pt->at(it)>10) continue; + if(plotModifiers[j]=="_P" && fabs(trk_d0->at(it))>1) continue; + if(plotModifiers[j]=="_D" && fabs(trk_d0->at(it))<=1) continue; + if(plotModifiers[j]=="_barrel" && fabs(trk_eta->at(it))>barrelEta) continue; + if(plotModifiers[j]=="_disk" && fabs(trk_eta->at(it))<=barrelEta) continue; + for(uint ivar=0; ivargetParam(it); + TString varName = varCutFlows[ivar]->getVarName(); + if(varName.Contains("sector")){ + while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); + while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); + while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; + } + if(varName.Contains("d0")){ + param = fabs(param); + } + preselCutFlows[ivar][i][i_plot][j]->Fill(param); + } + for(uint ivar2D=0; ivar2DgetParam(it); + float param2 = varCutFlows2D[ivar2D].second->getParam(it); + TString varName1 = varCutFlows2D[ivar2D].first->getVarName(); + TString varName2 = varCutFlows2D[ivar2D].second->getVarName(); + if(varName1.Contains("sector")){ + while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); + while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); + while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; + } + if(varName2.Contains("sector")){ + while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); + while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); + while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; + } + preselCutFlows2D[ivar2D][i][i_plot][j]->Fill(param1,param2); + } + } + } + } + if(icut==preselCuts.size()){ + Track_Parameters* tp_params = new Track_Parameters(trk_matchtp_pt->at(it), trk_matchtp_d0->at(it), trk_matchtp_z0->at(it), trk_matchtp_eta->at(it), trk_matchtp_phi->at(it), trk_matchtp_pdgid->at(it), trk_matchtp_x->at(it), trk_matchtp_y->at(it), trk_matchtp_z->at(it)); + for(uint i=0; iat(it); + if (binVariable=="z0") trkVariable = fabs(trk_z0->at(it)); + if(trkVariabletrack_bins[i][0] ){ + binnedSelectedTracks[i].push_back(Track_Parameters(trk_pt->at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it))); + } + } + + + //std::cout<<"track params: "<at(it)<<" "<<-trk_d0->at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it))); + trkH_T += trk_pt->at(it); + std::valarray trackPtVec = {trk_pt->at(it)*cos(trk_phi->at(it)),trk_pt->at(it)*sin(trk_phi->at(it))}; + trkMET -= trackPtVec; + } + } + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + trackLoopTime += std::chrono::duration_cast(end - begin).count(); + h_trk_H_T->Fill(trkH_T); + h_trk_MET->Fill(TMath::Sqrt(pow(trkMET[0],2)+pow(trkMET[1],2))); + h_numSelectedTrks->Fill(selectedTracks.size()); + //std::cout<<"num selected tracks: "<Fill(selectedTracks.size()); + + // ---------------------------------------------------------------------------------------------------------------- + // tracking particle loop + float tpH_T = 0.0; + std::valarray tpMET = {0.0,0.0}; + //std::cout<<"tp_pt size: "<size()<size(); it++){ + + float tmp_d0 = tp_d0->at(it); // Sign difference in the NTupleMaker + float tmp_z0 = tp_z0->at(it); + + bool isPrimary = true; + if(inputFile.Contains("DarkPhoton")) isPrimary = tp_isHard->at(it); + if(inputFile.Contains("DisplacedTrackJet")) isPrimary = tp_isHToB->at(it); + + uint icut=0; + for(icut=0; icutgetParam(it); + TString cutName = preselCutsTP[icut]->getCutName(); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + float cutValue = preselCutsTP[icut]->getCutValue(); + //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; + if(cutName.Contains("disk") && fabs(tp_eta->at(it))<=barrelEta) mods = false; + if(cutName.Contains("_H") && tp_pt->at(it)<=10) mods = false; + if(cutName.Contains("_L") && tp_pt->at(it)>10) mods = false; + if(cutName.Contains("_P") && fabs(tp_d0->at(it))>1) mods = false; + if(cutName.Contains("_D") && fabs(tp_d0->at(it))<=1 ) mods = false; + if(cutName.Contains("overlap") && (fabs(tp_eta->at(it))<=1.1 || fabs(tp_eta->at(it))>=1.7)) mods = false; + if(mods){ + if(cutName.Contains("max") && param>cutValue) break; + if(cutName.Contains("min") && paramat(it)==0 && isPrimary; + if(tpType[i]=="primary" && !primary) continue; + if(tpType[i]=="np" && primary) continue; + if(tpType[i]=="PU" && tp_eventid->at(it)==0) continue; + if(tpType[i]=="notHiggs" && !(tp_eventid->at(it)==0 && !isPrimary)) continue; + if(tpType[i]=="match" && tp_nmatch->at(it)==0) continue; + string partId = to_string(tp_pdgid->at(it)); + //numPartCutFlowsTP[i][icut][partId]++; + for(uint j=0; jat(it)<=10) continue; + if(plotModifiers[j]=="_L" && tp_pt->at(it)>10) continue; + if(plotModifiers[j]=="_P" && fabs(tp_d0->at(it))>1) continue; + if(plotModifiers[j]=="_D" && fabs(tp_d0->at(it))<=1) continue; + if(plotModifiers[j]=="_barrel" && fabs(tp_eta->at(it))>barrelEta) continue; + if(plotModifiers[j]=="_disk" && fabs(tp_eta->at(it))<=barrelEta) continue; + for(uint ivar=0; ivargetParam(it); + TString varName = varCutFlowsTP[ivar]->getVarName(); + if(varName.Contains("sector")){ + while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); + while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); + while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; + } + if(varName.Contains("d0")){ + param = fabs(param); + } + preselCutFlowsTP[ivar][i][icut][j]->Fill(param); + } + for(uint ivar2D=0; ivar2DgetParam(it); + float param2 = varCutFlowsTP2D[ivar2D].second->getParam(it); + TString varName1 = varCutFlowsTP2D[ivar2D].first->getVarName(); + TString varName2 = varCutFlowsTP2D[ivar2D].second->getVarName(); + if(varName1.Contains("sector")){ + while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); + while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); + while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; + } + if(varName2.Contains("sector")){ + while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); + while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); + while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; + } + preselCutFlowsTP2D[ivar2D][i][icut][j]->Fill(param1,param2); + } + } + } + } + if(icut==preselCutsTP.size() && tp_eventid->at(it)==0 && isPrimary==true){ + selectedTPs.push_back(Track_Parameters(tp_pt->at(it), tmp_d0, tmp_z0, tp_eta->at(it), tp_phi->at(it), tp_pdgid->at(it), tp_x->at(it), tp_y->at(it), tp_z->at(it), tp_charge->at(it), it)); + if (tp_eventid->at(it)>0){ + tpH_T += tp_pt->at(it); + std::valarray tpPtVec = {tp_pt->at(it)*cos(tp_phi->at(it)),tp_pt->at(it)*sin(tp_phi->at(it))}; + tpMET -= tpPtVec; + } + } + } + end = std::chrono::steady_clock::now(); + tpLoopTime += std::chrono::duration_cast(end - begin).count(); + h_tp_H_T->Fill(tpH_T); + h_tp_MET->Fill(TMath::Sqrt(pow(tpMET[0],2)+pow(tpMET[1],2))); + + // -------------------------------------------------------------------------------------------- + // Vertex finding in Tracking Particles + // -------------------------------------------------------------------------------------------- + if (!(selectedTracks.size() >= 2)) continue; + double_t x_dv = -9999.0;// (tp_x->at((*selectedTPs)[0]->index));//+tp_x->at((*selectedTPs)[1]->index))/2.0; + double_t y_dv = -9999.0;// (tp_y->at((*selectedTPs)[0]->index));//+tp_y->at((*selectedTPs)[1]->index))/2.0; + double_t z_dv = -9999.0;// (tp_z->at((*selectedTPs)[0]->index));//+tp_z->at((*selectedTPs)[1]->index))/2.0; + + if(selectedTPs.size()>=2){ + begin = std::chrono::steady_clock::now(); + //std::cout<<"vertex finding in TPs"<1){ + bool foundTrueVertex = false; + for( uint i=1; iat(index0)-tp_x->at(index1))<0.0001 && fabs(tp_y->at(index0)-tp_y->at(index1))<0.0001 && fabs(tp_z->at(index0)-tp_z->at(index1))<0.0001 ){ + x_dv = tp_x->at(index0); + y_dv = tp_y->at(index0); + z_dv = tp_z->at(index0); + if(dist(x_dv,y_dv)>d0_res && dist(x_dv,y_dv)<20){ + //std::cout<<"true vertex: "<at(selectedTPs[0].index)<<" "<at(selectedTPs[i].index)<Fill(trueVertices.size()); + float maxPT = 0.0; + // loop through trueVertices and fill ntuple branches + for(uint i=0; imaxPT){ + maxPT = trueVertices[i].a.pt; + maxPT_i = i; + } + + std::vector itps; + for(uint itrack=0; itrackpush_back(trueVertices[i].d_T); + tpVert_cos_T->push_back(trueVertices[i].cos_T); + tpVert_R_T->push_back(trueVertices[i].R_T); + tpVert_x->push_back(trueVertices[i].x_dv); + tpVert_y->push_back(trueVertices[i].y_dv); + tpVert_z->push_back(trueVertices[i].z_dv); + tpVert_openingAngle->push_back(trueVertices[i].openingAngle); + tpVert_parentPt->push_back(trueVertices[i].p_mag); + + float netCharge = 0; + for(uint itrack=0; itrackFill(trueVertices[i].tracks.size()); + h_trueVertex_charge_vs_numTPs->Fill(trueVertices[i].tracks.size(),netCharge); + + if(netCharge==0){ + float chargeOfFirstTrack = 0.0; + for(uint itrack=0; itrackat(itp)!=-999); + if(hasTrack){ + if(chargeOfFirstTrack==0.0){ + chargeOfFirstTrack = charge; + } + else{ + if(charge == (-1*chargeOfFirstTrack)) findableEvent = true; + } + } + } + } + + } + end = std::chrono::steady_clock::now(); + trueVertLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + // fill true vertex plots using ntuple branches + for (int it = 0; it < (int)tpVert_d_T->size(); it++){ + for(uint i=0; igetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + param = fabs(param1 - param2); + vertexCutFlowsTP[i][k]->Fill(param); + } + continue; + } + else if(varName.Contains("high")){ + param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + if(fabs(param2)>fabs(param)) param = param2; + } + } + else if(varName.Contains("low")){ + param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); + if(fabs(param2)getParam(tpVert_indexTPs[it][0]); + } + else{ + param = vertCutFlowsTP[i]->getParam(it); + } + vertexCutFlowsTP[i][k]->Fill(param); + } + } + } + end = std::chrono::steady_clock::now(); + trueVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); + + } + + // -------------------------------------------------------------------------------------------- + // Vertex finding in Tracks + // -------------------------------------------------------------------------------------------- + //std::cout<<"vertex finding in tracks"< lastBinVertices; + for(auto trackBin : binnedSelectedTracks){ + std::vector binVertices; + if(trackBin.size()<2) continue; + sort(trackBin.begin(), trackBin.end(), ComparePtTrack); + for(uint i=0; ipush_back(trackBin[i].index); + //trkVert_secondIndexTrk->push_back(trackBin[j].index); + //trkVert_firstIndexPt->push_back(i); + //trkVert_secondIndexPt->push_back(j); + //trkVert_inTraj->push_back(inTraj); + //trkVert_d_T->push_back(vertex.d_T); + //trkVert_R_T->push_back(vertex.R_T); + //trkVert_cos_T->push_back(vertex.cos_T); + //trkVert_del_Z->push_back(vertex.delta_z); + //trkVert_x->push_back(vertex.x_dv); + //trkVert_y->push_back(vertex.y_dv); + //trkVert_z->push_back(vertex.z_dv); + //trkVert_openingAngle->push_back(vertex.openingAngle); + //trkVert_parentPt->push_back(vertex.p_mag); + //trkVert_delIndexPt->push_back(fabs(i-j)); + //std::cout<<"found vertex"<push_back(x_trk_alt); + //trkVert_alt_y->push_back(y_trk_alt); + //trkVert_leadingCharge->push_back(vertex.a.charge); + //trkVert_subleadingCharge->push_back(vertex.b.charge); + } + } + } + lastBinVertices = binVertices; + } + end = std::chrono::steady_clock::now(); + trackVertLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + //std::cout<<"match track and true vertices"<size(); it++){ + int itp = trkVert_firstIndexTrk->at(it); + //std::cout<<"match vertices first track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); + //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 1 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<at(it); + //std::cout<<"match vertices second track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); + //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 2 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<=2){ + trkVert_indexMatch.push_back(i); + foundMatch = true; + break; + } + } + if(!foundMatch) trkVert_indexMatch.push_back(-1); + } + end = std::chrono::steady_clock::now(); + matchLoopTime += std::chrono::duration_cast(end - begin).count(); + begin = std::chrono::steady_clock::now(); + bool filledOneMatch[vertCuts.size()]; + bool isMatchedVec[trueVertices.size()][vertCuts.size()]; + uint numVertices[vertCuts.size()]; + for(uint i = 0; isize(); it++){ + for(uint i=0; igetCutName(); + float cutValue = vertCuts[i]->getCutValue(); + //std::cout<<"cutName: "<at(it)<<" "<at(it)<getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + param = fabs(param1 - param2); + } + else if(cutName.Contains("sum")){ + float param1 = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(cutName.Contains("Charge")){ + if(param1>0.0) param1 = 1.0; + if(param1<0.0) param1 = -1.0; + if(param2>0.0) param2 = 1.0; + if(param2<0.0) param2 = -1.0; + } + param = param1 + param2; + } + else if(cutName.Contains("high")){ + param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)>fabs(param)) param = param2; + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + } + else if(cutName.Contains("low")){ + param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); + if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); + } + else{ + param = vertCuts[i]->getParam(it); + } + //std::cout<<"trackVert cutName: "<cutValue) break; + if(cutName.Contains("min") && paramgetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + param = fabs(param1 - param2); + } + else if(varName.Contains("sum")){ + float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(varName.Contains("charge")){ + if(param1>0.0) param1 = 1.0; + if(param1<0.0) param1 = -1.0; + if(param2>0.0) param2 = 1.0; + if(param2<0.0) param2 = -1.0; + } + param = param1 + param2; + } + else if(varName.Contains("high")){ + param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)>fabs(param)) param = param2; + } + else if(varName.Contains("low")){ + param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); + float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); + if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); + } + else{ + param = vertCutFlows[k]->getParam(it); + } + vertexCutFlows[k][j][i]->Fill(param); + } + if(vertType[j]=="matched"){ + for(uint k=0; kFill(tpVert_x->at(jt)-trkVert_x->at(it)); + h_res_tp_trk_x_zoomOut->Fill(tpVert_x->at(jt)-trkVert_x->at(it)); + h_res_tp_trk_y->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); + h_res_tp_trk_y_zoomOut->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); + h_res_tp_trk_z->Fill(tpVert_z->at(jt)-trkVert_z->at(it)); + } + + for(uint m=0; mgetVarName(); + if(varName.Contains("delta")){ + float param1 = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + param = fabs(param1 - param2); + vertexCutFlowsMatchTP[m][i][k]->Fill(param); + } + continue; + } + else if(varName.Contains("high")){ + param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + if(fabs(param2)>fabs(param)) param = param2; + } + } + else if(varName.Contains("low")){ + param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); + for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); + if(fabs(param2)getParam(tpVert_indexTPs[jt][0]); + } + else{ + param = vertCutFlowsTP[m]->getParam(jt); + } + vertexCutFlowsMatchTP[m][i][k]->Fill(param); + } + } + break; + } + } + } + } + end = std::chrono::steady_clock::now(); + trackVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); + + h_trackVertexBranch_numAllCuts->Fill(numVertices[vertCuts.size()-1]); + //std::cout<<"num vertices: "<Fill(numVertices[i]); + if(findableEvent) fiducialNumVertices[i]->Fill(numVertices[i]); + } + if(findableEvent) n_findableEvent++; + + delete tpVert_d_T; + delete tpVert_R_T; + delete tpVert_cos_T; + delete tpVert_x; + delete tpVert_y; + delete tpVert_z; + delete tpVert_openingAngle; + delete tpVert_parentPt; +#if 0 + delete trkVert_firstIndexTrk; + delete trkVert_secondIndexTrk; + delete trkVert_firstIndexPt; + delete trkVert_secondIndexPt; + delete trkVert_inTraj; + delete trkVert_d_T; + delete trkVert_R_T; + delete trkVert_cos_T; + delete trkVert_del_Z; + delete trkVert_x; + delete trkVert_y; + delete trkVert_z; + delete trkVert_openingAngle; + delete trkVert_parentPt; + delete trkVert_delIndexPt; +#endif + + + } // End of Event Loop + + std::cout<<"nevt: "<Exec(mkDIR); + TString PRESELDIR = DIR + "/PreselectionPlots"; + TString makedirPreSel = "mkdir -p " + PRESELDIR; + const char *mkDIRPRESEL = makedirPreSel.Data(); + gSystem->Exec(mkDIRPRESEL); + TString VERTDIR = DIR + "/VertexPlots"; + TString makedirVert = "mkdir -p " + VERTDIR; + const char *mkDIRVERT = makedirVert.Data(); + gSystem->Exec(mkDIRVERT); + + TFile *fout; + fout = new TFile(outputDir + "output_" + inputFile, "recreate"); + TLegend* l = new TLegend(0.82,0.3,0.98,0.7); + l->SetFillColor(0); + l->SetLineColor(0); + l->SetTextSize(0.04); + l->SetTextFont(42); + + std::cout<<"trkEffOverlay"<Clear(); + TH1F* h_trkEff[preselCutsSize]; + uint i_plot = 0; + for(uint mcut=1; mcutgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + //std::cout<<"trkEffOverlay i j m k: "<Clone(); + h_trkEff[i_plot]->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trkEff[i_plot]); + h_trkEff[i_plot]->SetStats(0); + removeFlows(preselCutFlows[ivar][j][i_plot][k]); + TString cutLabel = preselCuts[mcut]->getCutLabel(); + TString varString = varCutFlows[ivar]->getVarName(); + h_trkEff[i_plot]->Divide(preselCutFlows[ivar][j][i_plot][k],h_trkEff[i_plot],1.0,1.0,"B"); + if(i_plot!=10){ + h_trkEff[i_plot]->SetLineColor(i_plot); + h_trkEff[i_plot]->SetMarkerColor(i_plot); + } + else{ + h_trkEff[i_plot]->SetLineColor(40); + h_trkEff[i_plot]->SetMarkerColor(40); + } + //TString cutLabel = preselCuts[mcut]->getCutLabel(); + //std::cout<<"cutName: "<AddEntry(h_trkEff[i_plot],cutLabel,"lp"); + //TString varString = varCutFlows[ivar]->getVarName(); + if(varString.Contains("d0") || varString.Contains("pt")){ + std::cout<<"h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_trkEff[i_plot]->GetBinContent(ibin)) + ", "; + binWidths+=to_string(h_trkEff[i_plot]->GetBinWidth(ibin)) + ", "; + binErrors+=to_string(h_trkEff[i_plot]->GetBinError(ibin)) + ", "; + binCenters+=to_string(h_trkEff[i_plot]->GetBinCenter(ibin)) + ", "; + } + binValues+="]"; + binWidths+="]"; + binErrors+="]"; + binCenters+="]"; + std::cout<<"binValues: "<Draw(); + } + else{ + h_trkEff[i_plot]->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + /* + TString label_cms="CMS"; + TLatex* Label_cms = new TLatex(0.15,0.92,label_cms); + Label_cms->SetNDC(); + Label_cms->SetTextFont(61); + Label_cms->SetTextSize(0.065); + Label_cms->Draw(); + TString label_cms1="Simulation Phase-2 Preliminary"; + TLatex* Label_cms1 = new TLatex(0.232,0.92,label_cms1); + Label_cms1->SetNDC(); + Label_cms1->SetTextSize(0.051); + Label_cms1->SetTextFont(52); + Label_cms1->Draw();*/ + c.SaveAs(PRESELDIR + "/h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"); + /*std::cout << "trkEffOverlay took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n";*/ + } + } + } + + std::cout<<"signalvsbg"<getDoPlot()){ + i_plot++; + } + else{ + continue; + } + for(uint j=0; jgetCutName(); + auto h_stack = new THStack("hs_"+varCutFlows[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j],"Stacked BG histograms"); + float integralSum = 0; + l->Clear(); + for(uint m=0; mGetYaxis()->SetNoExponent(kTRUE); + removeFlows(preselCutFlows[kvar][m][i_plot][j]); + if(detailedPlots){ + raiseMax(preselCutFlows[kvar][m][i_plot][j]); + preselCutFlows[kvar][m][i_plot][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + //preselCutFlows[kvar][m][icut][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/"+ preselCutFlows[kvar][m][i_plot][j]->GetName() + ".pdf"); + } + if(m!=9){ + preselCutFlows[kvar][m][i_plot][j]->SetLineColor(m+1); + preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(m+1); + } + else{ + preselCutFlows[kvar][m][i_plot][j]->SetLineColor(40); + preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(40); + } + if(trackType[m]=="fake" || trackType[m]=="PU" || trackType[m]=="notHiggs"){ + integralSum+=preselCutFlows[kvar][m][i_plot][j]->Integral(); + } + /*std::cout << "preselCutFlows took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n";*/ + } + for(uint m=0; mScale(1./integralSum); + h_stack->Add(preselCutFlows[kvar][m][i_plot][j]); + } + } + + //h_stack->Draw("HIST"); + preselCutFlows[kvar][m_primary][i_plot][j]->Scale(1./preselCutFlows[kvar][m_primary][i_plot][j]->Integral()); + /* + raiseMaxStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); + drawSameStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); + mySmallText(0.3, 0.9, 1, ctxt); + l->Clear(); + l->AddEntry(preselCutFlows[kvar][m_primary][icut][j],"Primary","l"); + l->AddEntry(preselCutFlows[kvar][m_fake][icut][j],"Fake","l"); + l->AddEntry(preselCutFlows[kvar][m_PU][icut][j],"PU","l"); + l->AddEntry(preselCutFlows[kvar][m_notHiggs][icut][j],"notHiggs","l"); + l->Draw(); + c.SaveAs(PRESELDIR + "/h_signalVsBGStack_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + */ + delete h_stack; + for(uint m=0; mScale(1./preselCutFlows[kvar][m][i_plot][j]->Integral()); + preselCutFlows[kvar][m][i_plot][j]->SetStats(0); + } + /* + raiseMax(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); + drawSame(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + //std::cout<<"signalvsBGOverlay primary fake PU notHiggs: "<getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + std::cout << "signalVsBGOverlay took " + << std::chrono::duration_cast(finish - start).count() + << " milliseconds\n"; + */ + raiseMax(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); + drawSame(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); + mySmallText(0.3, 0.9, 1, ctxt); + l->Clear(); + l->AddEntry(preselCutFlows[kvar][m_primary][i_plot][j],"Primary","l"); + l->AddEntry(preselCutFlows[kvar][m_np][i_plot][j],"NP","l"); + l->Draw(); + preselCutFlows[kvar][m_primary][i_plot][j]->Write("", TObject::kOverwrite); + preselCutFlows[kvar][m_np][i_plot][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/h_signalVsBG_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); + } + } + } + std::cout<<"trackFindingEff"<getCutName(); + for(uint j=0; jGetYaxis()->SetNoExponent(kTRUE); + removeFlows(preselCutFlowsTP[kvar][m][icut][j]); + if(detailedPlots){ + raiseMax(preselCutFlowsTP[kvar][m][icut][j]); + preselCutFlowsTP[kvar][m][icut][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + //preselCutFlowsTP[kvar][m][icut][j]->Write("", TObject::kOverwrite); + c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP[kvar][m][icut][j]->GetName() + ".pdf"); + } + } + preselCutFlowsTP[kvar][m_match][icut][j]->Divide(preselCutFlowsTP[kvar][m_match][icut][j],preselCutFlowsTP[kvar][m_tp][icut][j]); + raiseMax(preselCutFlowsTP[kvar][m_match][icut][j]); + preselCutFlowsTP[kvar][m_match][icut][j]->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/h_trackFindingEff_"+varCutFlowsTP[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j]+".pdf"); + } + } + } + + i_plot = -1; + for(uint icut=0; icutgetDoPlot()){ + i_plot++; + } + else{ + continue; + } + TString cutName = preselCuts[icut]->getCutName(); + for(uint j=0; jDraw("COLZ"); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/"+ preselCutFlows2D[kvar][m][i_plot][j]->GetName() + ".pdf"); + } + } + } + } + std::cout<<"preselCutFlowsTP2D"<getCutName(); + for(uint j=0; jDraw("COLZ"); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP2D[kvar][m][icut][j]->GetName() + ".pdf"); + } + } + } + } + } + std::cout<<"eff_trueVertex"<getVarName().Contains("highPt")) std::cout<<"onematch entries: "<GetEntries()<<" "<GetEntries()<Clone(); + h_eff->Divide(vertexCutFlowsMatchTP[j][vertCuts.size()-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); + raiseMax(h_eff); + h_eff->SetStats(0); + h_eff->SetAxisRange(0, 1.1, "Y"); + h_eff->Draw(); + mySmallText(0.3, 0.9, 1, ctxt); + c.SaveAs(VERTDIR + "/h_eff_trueVertex_" + vertCutFlowsTP[j]->getVarName() + "_" + vertPlotTPModifiers[i] + ".pdf"); + } + } + std::cout<<"findEff_trueVertex"<Clear(); + for(uint j=0; jClone(); + h_findEff->Divide(vertexCutFlowsMatchTP[i][j][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); + h_findEff->SetStats(0); + if(j!=9){ + h_findEff->SetLineColor(j+1); + h_findEff->SetMarkerColor(j+1); + } + else{ + h_findEff->SetLineColor(40); + h_findEff->SetMarkerColor(40); + } + l->AddEntry(h_findEff,vertCuts[j]->getCutLabel(),"lp"); + TString varString = vertCutFlowsTP[i]->getVarName(); + if(varString.Contains("R_T") || varString.Contains("highPt")){ + std::cout<<"/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"<getCutLabel()<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_findEff->GetBinContent(ibin)) + ", "; + binWidths+=to_string(h_findEff->GetBinWidth(ibin)) + ", "; + binErrors+=to_string(h_findEff->GetBinError(ibin)) + ", "; + binCenters+=to_string(h_findEff->GetBinCenter(ibin)) + ", "; + } + binValues+="]"; + binWidths+="]"; + binErrors+="]"; + binCenters+="]"; + std::cout<<"binValues: "<SetAxisRange(0, 1.1, "Y"); + h_findEff->Draw(); + } + else{ + h_findEff->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"); + } + std::cout<<"fakeEff_trackVertex"<Clear(); + for(uint j=1; jClone(); + h_fakeEff->Divide(vertexCutFlows[i][1][j],vertexCutFlows[i][1][0],1.0,1.0,"B"); + h_fakeEff->SetStats(0); + if(j!=10){ + h_fakeEff->SetLineColor(j); + h_fakeEff->SetMarkerColor(j); + } + else{ + h_fakeEff->SetLineColor(40); + h_fakeEff->SetMarkerColor(40); + } + l->AddEntry(h_fakeEff,vertCuts[j]->getCutLabel(),"lp"); + if(j==1){ + raiseMax(h_fakeEff); + h_fakeEff->Draw(); + } + else{ + h_fakeEff->Draw("SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_fakeEff_trackVertex_" + vertCutFlows[i]->getVarName() + ".pdf"); + } + std::cout<<"correctVsFalse"<Clear(); + for(uint k=0; kSetStats(0); + vertexCutFlows[i][k][j]->Scale(1./vertexCutFlows[i][k][j]->Integral()); + TString varString = vertCutFlows[i]->getVarName(); + if(varString.Contains("score") || varString.Contains("R_T")){ + std::cout<<"/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"<GetNbinsX()+1); ibin++){ + binValues+=to_string(vertexCutFlows[i][k][j]->GetBinContent(ibin)) + ", "; + } + binValues+="]"; + std::cout<<"binValues: "<SetLineColor(k+1); + vertexCutFlows[i][k][j]->SetMarkerColor(k+1); + } + else{ + vertexCutFlows[i][k][j]->SetLineColor(40); + vertexCutFlows[i][k][j]->SetMarkerColor(40); + } + l->AddEntry(vertexCutFlows[i][k][j],vertType[k],"l"); + if(k==0){ + removeFlows(vertexCutFlows[i][k+1][j]); + vertexCutFlows[i][k+1][j]->Scale(1./vertexCutFlows[i][k+1][j]->Integral()); + raiseMax(vertexCutFlows[i][k][j],vertexCutFlows[i][k+1][j]); + vertexCutFlows[i][k][j]->Draw("HIST"); + } + else{ + vertexCutFlows[i][k][j]->Draw("HIST,SAME"); + } + } + mySmallText(0.3, 0.9, 1, ctxt); + l->Draw(); + c.SaveAs(VERTDIR + "/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"); + } + } + std::cout<<"trueVertex_charge_vs_numTPs"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trueVertex_charge_vs_numTPs); + h_trueVertex_charge_vs_numTPs->SetStats(0); + c.SetLogz(); + h_trueVertex_charge_vs_numTPs->Draw("COLZ"); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/h_trueVertex_charge_vs_numTPs.pdf"); + delete h_trueVertex_charge_vs_numTPs; + c.SetLogz(0); + + std::cout<<"numSelectedTrks"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numSelectedTrks); + h_numSelectedTrks->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_numSelectedTrks->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + ".pdf"); + h_numSelectedTrks->SetStats(0); + h_numSelectedTrks->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + "_noStatBox.pdf"); + delete h_numSelectedTrks; + + h_numSelectedTrks_zoomOut->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numSelectedTrks_zoomOut); + h_numSelectedTrks_zoomOut->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_numSelectedTrks_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + ".pdf"); + h_numSelectedTrks_zoomOut->SetStats(0); + h_numSelectedTrks_zoomOut->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + "_noStatBox.pdf"); + delete h_numSelectedTrks_zoomOut; + + std::cout<<"trk H_T"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_H_T); + h_trk_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_H_T->GetName() + ".pdf"); + delete h_trk_H_T; + + h_trk_oneMatch_H_T->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_oneMatch_H_T); + h_trk_oneMatch_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_oneMatch_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_oneMatch_H_T->GetName() + ".pdf"); + delete h_trk_oneMatch_H_T; + + std::cout<<"trkMET"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_MET); + h_trk_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_MET->GetName() + ".pdf"); + delete h_trk_MET; + + h_trk_oneMatch_MET->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trk_oneMatch_MET); + h_trk_oneMatch_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trk_oneMatch_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trk_oneMatch_MET->GetName() + ".pdf"); + delete h_trk_oneMatch_MET; + + std::cout<<"tp HT"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_tp_H_T); + h_tp_H_T->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_tp_H_T->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_tp_H_T->GetName() + ".pdf"); + delete h_tp_H_T; + std::cout<<"tp MET"<GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_tp_MET); + h_tp_MET->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_tp_MET->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_tp_MET->GetName() + ".pdf"); + delete h_tp_MET; +#if 0 + int numPart = numPart_primary_noCuts.size(); + TH1F *h_numPart_primary_noCuts = new TH1F("h_numPart_primary_noCuts","h_numPart_primary_noCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_chi2rzdofCuts = new TH1F("h_numPart_primary_chi2rzdofCuts","h_numPart_primary_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_bendchi2Cuts = new TH1F("h_numPart_primary_bendchi2Cuts","h_numPart_primary_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_chi2rphidofCuts = new TH1F("h_numPart_primary_chi2rphidofCuts","h_numPart_primary_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_nstubCuts = new TH1F("h_numPart_primary_nstubCuts","h_numPart_primary_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_ptCuts = new TH1F("h_numPart_primary_ptCuts","h_numPart_primary_ptCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_d0Cuts = new TH1F("h_numPart_primary_d0Cuts","h_numPart_primary_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_primary_z0Cuts = new TH1F("h_numPart_primary_z0Cuts","h_numPart_primary_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); + + int binNum = 1; + for(const auto & [key, value] : numPart_primary_noCuts){ + h_numPart_primary_noCuts->SetBinContent(binNum,value); + h_numPart_primary_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_noCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_noCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_ptCuts){ + h_numPart_primary_ptCuts->SetBinContent(binNum,value); + h_numPart_primary_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_ptCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_ptCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_d0Cuts){ + h_numPart_primary_d0Cuts->SetBinContent(binNum,value); + h_numPart_primary_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_d0Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_chi2rzdofCuts){ + h_numPart_primary_chi2rzdofCuts->SetBinContent(binNum,value); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_chi2rzdofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_bendchi2Cuts){ + h_numPart_primary_bendchi2Cuts->SetBinContent(binNum,value); + h_numPart_primary_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_bendchi2Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_chi2rphidofCuts){ + h_numPart_primary_chi2rphidofCuts->SetBinContent(binNum,value); + h_numPart_primary_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_chi2rphidofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_nstubCuts){ + h_numPart_primary_nstubCuts->SetBinContent(binNum,value); + h_numPart_primary_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_nstubCuts); + binNum = 1; + for(const auto & [key, value] : numPart_primary_z0Cuts){ + h_numPart_primary_z0Cuts->SetBinContent(binNum,value); + h_numPart_primary_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_primary_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_primary_z0Cuts); + h_numPart_primary_chi2rzdofCuts->SetName("partEff_pt_primary"); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); + h_numPart_primary_chi2rzdofCuts->Divide(h_numPart_primary_chi2rzdofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_chi2rzdofCuts->SetLineColor(1); + h_numPart_primary_chi2rzdofCuts->SetMarkerColor(1); + h_numPart_primary_chi2rzdofCuts->SetStats(0); + h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); + h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); + h_numPart_primary_chi2rzdofCuts->Draw(); + h_numPart_primary_bendchi2Cuts->Divide(h_numPart_primary_bendchi2Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_bendchi2Cuts->SetLineColor(2); + h_numPart_primary_bendchi2Cuts->SetMarkerColor(2); + h_numPart_primary_bendchi2Cuts->SetStats(0); + h_numPart_primary_bendchi2Cuts->Draw("SAME"); + h_numPart_primary_chi2rphidofCuts->Divide(h_numPart_primary_chi2rphidofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_chi2rphidofCuts->SetLineColor(3); + h_numPart_primary_chi2rphidofCuts->SetMarkerColor(3); + h_numPart_primary_chi2rphidofCuts->SetStats(0); + h_numPart_primary_chi2rphidofCuts->Draw("SAME"); + h_numPart_primary_nstubCuts->Divide(h_numPart_primary_nstubCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_nstubCuts->SetLineColor(4); + h_numPart_primary_nstubCuts->SetMarkerColor(4); + h_numPart_primary_nstubCuts->SetStats(0); + h_numPart_primary_nstubCuts->Draw("SAME"); + h_numPart_primary_ptCuts->Divide(h_numPart_primary_ptCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_ptCuts->SetLineColor(5); + h_numPart_primary_ptCuts->SetMarkerColor(5); + h_numPart_primary_ptCuts->SetStats(0); + h_numPart_primary_ptCuts->Draw("SAME"); + h_numPart_primary_d0Cuts->Divide(h_numPart_primary_d0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_d0Cuts->SetLineColor(6); + h_numPart_primary_d0Cuts->SetMarkerColor(6); + h_numPart_primary_d0Cuts->SetStats(0); + h_numPart_primary_d0Cuts->Draw("SAME"); + h_numPart_primary_z0Cuts->Divide(h_numPart_primary_z0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); + h_numPart_primary_z0Cuts->SetLineColor(7); + h_numPart_primary_z0Cuts->SetMarkerColor(7); + h_numPart_primary_z0Cuts->SetStats(0); + h_numPart_primary_z0Cuts->Draw("SAME"); + mySmallText(0.4, 0.82, 1, ctxt); + l->Clear(); + l->AddEntry(h_numPart_primary_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_primary_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); + l->AddEntry(h_numPart_primary_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_primary_nstubCuts,"n_{stub} Cut","lp"); + l->AddEntry(h_numPart_primary_ptCuts,"p_{T} Cut","lp"); + l->AddEntry(h_numPart_primary_d0Cuts,"d_{0} Cut","lp"); + l->AddEntry(h_numPart_primary_z0Cuts,"z_{0} Cut","lp"); + l->Draw(); + c.SaveAs(DIR + "/h_partEffOverlay_pt_primary.pdf"); + delete h_numPart_primary_noCuts; + delete h_numPart_primary_ptCuts; + delete h_numPart_primary_d0Cuts; + delete h_numPart_primary_chi2rzdofCuts; + delete h_numPart_primary_bendchi2Cuts; + delete h_numPart_primary_chi2rphidofCuts; + delete h_numPart_primary_nstubCuts; + delete h_numPart_primary_z0Cuts; + + numPart = numPart_np_noCuts.size(); + TH1F *h_numPart_np_noCuts = new TH1F("h_numPart_np_noCuts","h_numPart_np_noCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_chi2rzdofCuts = new TH1F("h_numPart_np_chi2rzdofCuts","h_numPart_np_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_bendchi2Cuts = new TH1F("h_numPart_np_bendchi2Cuts","h_numPart_np_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_chi2rphidofCuts = new TH1F("h_numPart_np_chi2rphidofCuts","h_numPart_np_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_nstubCuts = new TH1F("h_numPart_np_nstubCuts","h_numPart_np_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_ptCuts = new TH1F("h_numPart_np_ptCuts","h_numPart_np_ptCuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_d0Cuts = new TH1F("h_numPart_np_d0Cuts","h_numPart_np_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); + TH1F *h_numPart_np_z0Cuts = new TH1F("h_numPart_np_z0Cuts","h_numPart_np_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); + + binNum = 1; + for(const auto & [key, value] : numPart_np_noCuts){ + h_numPart_np_noCuts->SetBinContent(binNum,value); + h_numPart_np_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_noCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_noCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_ptCuts){ + h_numPart_np_ptCuts->SetBinContent(binNum,value); + h_numPart_np_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_ptCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_ptCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_d0Cuts){ + h_numPart_np_d0Cuts->SetBinContent(binNum,value); + h_numPart_np_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_d0Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_chi2rzdofCuts){ + h_numPart_np_chi2rzdofCuts->SetBinContent(binNum,value); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_chi2rzdofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_bendchi2Cuts){ + h_numPart_np_bendchi2Cuts->SetBinContent(binNum,value); + h_numPart_np_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_bendchi2Cuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_chi2rphidofCuts){ + h_numPart_np_chi2rphidofCuts->SetBinContent(binNum,value); + h_numPart_np_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_chi2rphidofCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_nstubCuts){ + h_numPart_np_nstubCuts->SetBinContent(binNum,value); + h_numPart_np_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_nstubCuts); + binNum = 1; + for(const auto & [key, value] : numPart_np_z0Cuts){ + h_numPart_np_z0Cuts->SetBinContent(binNum,value); + h_numPart_np_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); + binNum++; + } + h_numPart_np_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_numPart_np_z0Cuts); + h_numPart_np_chi2rzdofCuts->SetName("partEff_pt_np"); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); + h_numPart_np_chi2rzdofCuts->Divide(h_numPart_np_chi2rzdofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_chi2rzdofCuts->SetLineColor(1); + h_numPart_np_chi2rzdofCuts->SetMarkerColor(1); + h_numPart_np_chi2rzdofCuts->SetStats(0); + h_numPart_np_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); + h_numPart_np_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); + h_numPart_np_chi2rzdofCuts->Draw(); + h_numPart_np_bendchi2Cuts->Divide(h_numPart_np_bendchi2Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_bendchi2Cuts->SetLineColor(2); + h_numPart_np_bendchi2Cuts->SetMarkerColor(2); + h_numPart_np_bendchi2Cuts->SetStats(0); + h_numPart_np_bendchi2Cuts->Draw("SAME"); + h_numPart_np_chi2rphidofCuts->Divide(h_numPart_np_chi2rphidofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_chi2rphidofCuts->SetLineColor(3); + h_numPart_np_chi2rphidofCuts->SetMarkerColor(3); + h_numPart_np_chi2rphidofCuts->SetStats(0); + h_numPart_np_chi2rphidofCuts->Draw("SAME"); + h_numPart_np_nstubCuts->Divide(h_numPart_np_nstubCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_nstubCuts->SetLineColor(4); + h_numPart_np_nstubCuts->SetMarkerColor(4); + h_numPart_np_nstubCuts->SetStats(0); + h_numPart_np_nstubCuts->Draw("SAME"); + h_numPart_np_ptCuts->Divide(h_numPart_np_ptCuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_ptCuts->SetLineColor(5); + h_numPart_np_ptCuts->SetMarkerColor(5); + h_numPart_np_ptCuts->SetStats(0); + h_numPart_np_ptCuts->Draw("SAME"); + h_numPart_np_d0Cuts->Divide(h_numPart_np_d0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_d0Cuts->SetLineColor(6); + h_numPart_np_d0Cuts->SetMarkerColor(6); + h_numPart_np_d0Cuts->SetStats(0); + h_numPart_np_d0Cuts->Draw("SAME"); + h_numPart_np_z0Cuts->Divide(h_numPart_np_z0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); + h_numPart_np_z0Cuts->SetLineColor(7); + h_numPart_np_z0Cuts->SetMarkerColor(7); + h_numPart_np_z0Cuts->SetStats(0); + h_numPart_np_z0Cuts->Draw("SAME"); + mySmallText(0.4, 0.82, 1, ctxt); + l->Clear(); + l->AddEntry(h_numPart_np_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_np_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); + l->AddEntry(h_numPart_np_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); + l->AddEntry(h_numPart_np_nstubCuts,"n_{stub} Cut","lp"); + l->AddEntry(h_numPart_np_ptCuts,"p_{T} Cut","lp"); + l->AddEntry(h_numPart_np_d0Cuts,"d_{0} Cut","lp"); + l->AddEntry(h_numPart_np_z0Cuts,"z_{0} Cut","lp"); + l->Draw(); + c.SaveAs(DIR + "/h_partEffOverlay_pt_np.pdf"); + delete h_numPart_np_noCuts; + delete h_numPart_np_ptCuts; + delete h_numPart_np_d0Cuts; + delete h_numPart_np_chi2rzdofCuts; + delete h_numPart_np_bendchi2Cuts; + delete h_numPart_np_chi2rphidofCuts; + delete h_numPart_np_nstubCuts; + delete h_numPart_np_z0Cuts; +#endif + h_trueVertex_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trueVertex_numAllCuts); + h_trueVertex_numAllCuts->SetStats(0); + h_trueVertex_numAllCuts->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trueVertex_numAllCuts->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trueVertex_numAllCuts->GetName() + ".pdf"); + delete h_trueVertex_numAllCuts; + + h_trackVertexBranch_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); + removeFlows(h_trackVertexBranch_numAllCuts); + c.SetLogy(); + h_trackVertexBranch_numAllCuts->SetStats(0); + h_trackVertexBranch_numAllCuts->Draw(); + mySmallText(0.4, 0.82, 1, ctxt); + h_trackVertexBranch_numAllCuts->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_trackVertexBranch_numAllCuts->GetName() + ".pdf"); + delete h_trackVertexBranch_numAllCuts; + c.SetLogy(0); + + std::cout<<"triggerEff"<GetNbinsX()+1); j++){ + numTriggers += vertexNumVertices[i]->GetBinContent(j); + } + std::cout<<"i cut: "<SetBinContent(i,numTriggers/nevt); + h_triggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); + } + raiseMax(h_triggerEff); + h_triggerEff->SetStats(0); + h_triggerEff->Draw("HIST, TEXT"); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_triggerEff->GetName() + ".pdf"); + delete h_triggerEff; + for(uint i=0; iGetNbinsX()+1); j++){ + numTriggers += fiducialNumVertices[i]->GetBinContent(j); + } + //std::cout<<"i cut: "<SetBinContent(i,numTriggers/n_findableEvent); + h_fiducialTriggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); + } + raiseMax(h_fiducialTriggerEff); + h_fiducialTriggerEff->SetStats(0); + h_fiducialTriggerEff->Draw("HIST, TEXT"); + mySmallText(0.4, 0.82, 1, ctxt); + c.SaveAs(DIR + "/"+ h_fiducialTriggerEff->GetName() + ".pdf"); + delete h_fiducialTriggerEff; + for(uint i=0; iFit("fit","R"); + h_res_tp_trk_x->SetStats(0); + h_res_tp_trk_x->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_x->Write("", TObject::kOverwrite); + + std::cout<<"h_res_tp_trk_x"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_x->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_x->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_x->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_x; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_x_zoomOut); + h_res_tp_trk_x_zoomOut->Fit("fit","R"); + h_res_tp_trk_x_zoomOut->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_x_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_x_zoomOut->GetName() + ".pdf"); + delete h_res_tp_trk_x_zoomOut; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_y); + h_res_tp_trk_y->Fit("fit","R"); + h_res_tp_trk_y->SetStats(0); + h_res_tp_trk_y->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_y->Write("", TObject::kOverwrite); + std::cout<<"h_res_tp_trk_y"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_y->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_y->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_y->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_y; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_y_zoomOut); + h_res_tp_trk_y_zoomOut->Fit("fit","R"); + h_res_tp_trk_y_zoomOut->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_y_zoomOut->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_y_zoomOut->GetName() + ".pdf"); + delete h_res_tp_trk_y_zoomOut; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_r); + h_res_tp_trk_r->Fit("fit"); + h_res_tp_trk_r->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_r->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_r->GetName() + ".pdf"); + delete h_res_tp_trk_r; + delete fit; + + fit = new TF1("fit", "gaus", -1, 1); + removeFlows(h_res_tp_trk_phi); + h_res_tp_trk_phi->Fit("fit"); + h_res_tp_trk_phi->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_phi->Write("", TObject::kOverwrite); + c.SaveAs(DIR + "/"+ h_res_tp_trk_phi->GetName() + ".pdf"); + delete h_res_tp_trk_phi; + delete fit; + + fit = new TF1("fit", "gaus", -10, 10); + removeFlows(h_res_tp_trk_z); + h_res_tp_trk_z->Fit("fit"); + h_res_tp_trk_z->SetStats(0); + h_res_tp_trk_z->Draw(); + rms = fit->GetParameter(2); + sprintf(res, "RMS = %.4f", rms); + mySmallText(0.22, 0.82, 1, res); + mySmallText(0.4, 0.42, 1, ctxt); + h_res_tp_trk_z->Write("", TObject::kOverwrite); + std::cout<<"h_res_tp_trk_z"<GetNbinsX()+1); ibin++){ + binValues+=to_string(h_res_tp_trk_z->GetBinContent(ibin)) + ", "; + binCenters+=to_string(h_res_tp_trk_z->GetBinCenter(ibin)) + ", "; + fitValues+=to_string(fit->Eval(h_res_tp_trk_z->GetBinCenter(ibin))) + ", "; + } + binValues+="]"; + binCenters+="]"; + fitValues+="]"; + std::cout<<"binValues: "<GetName() + ".pdf"); + delete h_res_tp_trk_z; + delete fit; + + //Geometric plot of circle projections and vertex locations + /*Double_t x_min=0; + Double_t x_max=0; + Double_t y_min=0; + Double_t y_max=0; + Double_t x_values[6] = {geomTrackVertex.a.x0-geomTrackVertex.a.rho,geomTrackVertex.a.x0+geomTrackVertex.a.rho,geomTrackVertex.b.x0-geomTrackVertex.b.rho,geomTrackVertex.b.x0+geomTrackVertex.b.rho,geomTrackVertex.x_dv,geomTrueVertex.x_dv}; + Double_t y_values[6] = {geomTrackVertex.a.y0-geomTrackVertex.a.rho,geomTrackVertex.a.y0+geomTrackVertex.a.rho,geomTrackVertex.b.y0-geomTrackVertex.b.rho,geomTrackVertex.b.y0+geomTrackVertex.b.rho,geomTrackVertex.y_dv,geomTrueVertex.y_dv}; + for(uint i=0;i<6;i++){ + if(x_values[i]x_max) x_max = x_values[i]; + if(y_values[i]y_max) y_max = y_values[i]; + } + x_min*=1.1; + x_max*=1.1; + y_min*=1.1; + y_max*=1.1; + c.DrawFrame(x_min,y_min,x_max,y_max); + float trk1_POCA_x = geomTrackVertex.a.d0*sin(geomTrackVertex.a.phi); + float trk1_POCA_y = -1*geomTrackVertex.a.d0*cos(geomTrackVertex.a.phi); + float trk2_POCA_x = geomTrackVertex.b.d0*sin(geomTrackVertex.b.phi); + float trk2_POCA_y = -1*geomTrackVertex.b.d0*cos(geomTrackVertex.b.phi); + TEllipse *circleTrk1 = new TEllipse(geomTrackVertex.a.x0,geomTrackVertex.a.y0,geomTrackVertex.a.rho,geomTrackVertex.a.rho); + circleTrk1->SetLineColor(kGreen); + circleTrk1->SetFillStyle(0); + TEllipse *circleTrk2 = new TEllipse(geomTrackVertex.b.x0,geomTrackVertex.b.y0,geomTrackVertex.b.rho,geomTrackVertex.b.rho); + circleTrk2->SetLineColor(kBlack); + circleTrk2->SetFillStyle(0); + auto trackTraj1 = new TF1("trackTraj1","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); + trackTraj1->SetParameters(geomTrackVertex.a.phi,trk1_POCA_x,trk1_POCA_y); + trackTraj1->SetLineColor(kGreen); + auto trackTraj2 = new TF1("trackTraj2","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); + trackTraj2->SetParameters(geomTrackVertex.b.phi,trk2_POCA_x,trk2_POCA_y); + trackTraj2->SetLineColor(kBlack); + TMarker m1(geomTrackVertex.x_dv,geomTrackVertex.y_dv,8); + TMarker m2(geomTrueVertex.x_dv,geomTrueVertex.y_dv,8); + TMarker m3(trk1_POCA_x,trk1_POCA_y,5); + TMarker m4(trk2_POCA_x,trk2_POCA_y,5); + //std::cout<<"trk1 POCA: "<Draw("SAME"); + circleTrk2->Draw("SAME"); + trackTraj1->Draw("SAME"); + trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeom.pdf"); + c.SaveAs(DIR + "/h_circleFitGeom.pdf"); + x_min = geomTrackVertex.x_dv; + x_max = geomTrueVertex.x_dv; + y_min = geomTrackVertex.y_dv; + y_max = geomTrueVertex.y_dv; + if(geomTrueVertex.x_dvDraw("SAME"); + circleTrk2->Draw("SAME"); + //trackTraj1->Draw("SAME"); + //trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); + c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); + x_min=geomTrackVertex.x_dv; + x_max=geomTrackVertex.x_dv; + y_min=geomTrackVertex.y_dv; + y_max=geomTrackVertex.y_dv; + Double_t x_values_POCA[4] = {geomTrackVertex.x_dv,geomTrueVertex.x_dv,trk1_POCA_x,trk2_POCA_x}; + Double_t y_values_POCA[4] = {geomTrackVertex.y_dv,geomTrueVertex.y_dv,trk1_POCA_y,trk2_POCA_y}; + for(uint i=0;i<4;i++){ + if(x_values_POCA[i]x_max) x_max = x_values_POCA[i]; + if(y_values_POCA[i]y_max) y_max = y_values_POCA[i]; + } + x_min-=1; + x_max+=1; + y_min-=1; + y_max+=1; + c.DrawFrame(x_min,y_min,x_max,y_max); + circleTrk1->Draw("SAME"); + circleTrk2->Draw("SAME"); + trackTraj1->Draw("SAME"); + trackTraj2->Draw("SAME"); + m1.Draw("SAME"); + m2.Draw("SAME"); + m3.Draw("SAME"); + m4.Draw("SAME"); + c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); + c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); + fout->Close()*/; + + for(uint i=0; ix0; // Centers of the circles + float y1 = a->y0; // + float x2 = b->x0; // + float y2 = b->y0; // + float R1 = a->rho; // Radii of the circles + float R2 = b->rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if((R>=(R1-R2)) && (R<=(R1+R2))){ + return (0); + } + else if(R==0){ + return (-99999.0); + } + else{ + + return(R-R1-R2); + } +} + +Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if((R>=(R1-R2)) && (R<=(R1+R2))){ + return (0); + } + else if(R==0){ + return (-99999.0); + } + else{ + + return(R-R1-R2); + } +} + +Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ + float x1 = a.x0; // Centers of the circles + float y1 = a.y0; // + float x2 = b.x0; // + float y2 = b.y0; // + float R1 = a.rho; // Radii of the circles + float R2 = b.rho; + float R = dist(x1,y1,x2,y2); // Distance between centers + if(R==0) return -1; + float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); + float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; + float co2 = 0; + if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); + float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); + float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); + float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); + float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); + float ix1_z1 = a.z(ix1_x,ix1_y); + float ix1_z2 = b.z(ix1_x,ix1_y); + float ix1_delz = fabs(ix1_z1-ix1_z2); + float ix2_z1 = a.z(ix2_x,ix2_y); + float ix2_z2 = b.z(ix2_x,ix2_y); + float ix2_delz = fabs(ix2_z1-ix2_z2); + //std::cout<<"R: "<0) ? true : false; + bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; + bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; + bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; + //std::cout<<"ix1 inTraj: "<SetFrameBorderMode(0); + gStyle->SetFrameFillColor(0); + gStyle->SetCanvasBorderMode(0); + gStyle->SetCanvasColor(0); + gStyle->SetPadBorderMode(0); + gStyle->SetPadColor(0); + gStyle->SetStatColor(0); + gStyle->SetHistLineColor(1); + + gStyle->SetPalette(1); + + // set the paper & margin sizes + gStyle->SetPaperSize(20, 26); + gStyle->SetPadTopMargin(0.05); + gStyle->SetPadRightMargin(0.19); + gStyle->SetPadBottomMargin(0.16); + gStyle->SetPadLeftMargin(0.12); + + // set title offsets (for axis label) + gStyle->SetTitleXOffset(1.4); + gStyle->SetTitleYOffset(1.0); + + // use large fonts + gStyle->SetTextFont(42); + gStyle->SetTextSize(0.05); + gStyle->SetLabelFont(42, "x"); + gStyle->SetTitleFont(42, "x"); + gStyle->SetLabelFont(42, "y"); + gStyle->SetTitleFont(42, "y"); + gStyle->SetLabelFont(42, "z"); + gStyle->SetTitleFont(42, "z"); + gStyle->SetLabelSize(0.05, "x"); + gStyle->SetTitleSize(0.05, "x"); + gStyle->SetLabelSize(0.05, "y"); + gStyle->SetTitleSize(0.05, "y"); + gStyle->SetLabelSize(0.05, "z"); + gStyle->SetTitleSize(0.05, "z"); + + // use bold lines and markers + gStyle->SetMarkerStyle(20); + gStyle->SetMarkerSize(1.2); + gStyle->SetHistLineWidth(2.); + gStyle->SetLineStyleString(2, "[12 12]"); + + // get rid of error bar caps + gStyle->SetEndErrorSize(0.); + + // do not display any of the standard histogram decorations + gStyle->SetOptTitle(0); + //gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + + // put tick marks on top and RHS of plots + gStyle->SetPadTickX(1); + gStyle->SetPadTickY(1); +} + +void mySmallText(Double_t x, Double_t y, Color_t color, char *text) +{ + Double_t tsize = 0.044; + TLatex l; + l.SetTextSize(tsize); + l.SetNDC(); + l.SetTextColor(color); + l.DrawLatex(x, y, text); +} + +void removeFlows(TH1F* h) +{ + int nbins = h->GetNbinsX(); + double underflow = h->GetBinContent(0); + double overflow = h->GetBinContent(nbins+1); + h->AddBinContent(1,underflow); + h->AddBinContent(nbins,overflow); + h->SetBinContent(0,0); + h->SetBinContent(nbins+1,0); +} + +void removeFlows(TH2F* h) +{ +} From b2bddce15deea48b64dce2600a9280c72acec5a4 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Mon, 4 Nov 2024 13:17:25 +0100 Subject: [PATCH 18/36] Final changes for emulation, changing bit widths for BDT input to ap_fixed<13,8>, shifting quality variables, and rescaling delta z and pt --- .../L1Trigger/interface/DisplacedVertex.h | 2 +- .../plugins/DisplacedVertexProducer.cc | 75 +- .../python/DisplacedVertexProducer_cfi.py | 2 +- .../test/Analyzer_DisplacedMuon.C | 35 +- .../test/L1TrackObjectNtupleMaker.cc | 40 +- ...VertTaggerEmulationConiferShifted13p8.json | 8182 +++++++++++++++++ 6 files changed, 8269 insertions(+), 67 deletions(-) create mode 100644 L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h index 7f39a1abc4779..b2064f774ed0c 100644 --- a/DataFormats/L1Trigger/interface/DisplacedVertex.h +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -37,7 +37,7 @@ namespace l1t { class DisplacedTrackVertex { public: - typedef ap_fixed<12,8> score_t; + typedef ap_fixed<13,8,AP_RND_CONV, AP_SAT> score_t; public: DisplacedTrackVertex(int firstIndexTrk, diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 030a3b2fb4c5a..0699e4283459e 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -208,26 +208,38 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e //Simulation track selection loop for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); + edm::Ptr> l1track_GTTptr(TTTrackGTTHandle, this_l1track); this_l1track++; float pt = l1track_ptr->momentum().perp(); + //float pt = FloatPtFromBits(*l1track_GTTptr); float eta = l1track_ptr->momentum().eta(); + //float eta = FloatEtaFromBits(*l1track_GTTptr); float phi = l1track_ptr->momentum().phi(); + //float phi = FloatPhiFromBits(*l1track_GTTptr); float z0 = l1track_ptr->z0(); //cm + //float z0 = l1track_GTTptr->getZ0(); float x0 = l1track_ptr->POCA().x(); float y0 = l1track_ptr->POCA().y(); float d0 = -x0 * sin(phi) + y0 * cos(phi); + //float d0 = l1track_GTTptr->getD0(); float rinv = l1track_ptr->rInv(); - float chi2 = l1track_ptr->chi2Red(); + //int charge = ChargeFromBits(*l1track_GTTptr); + //float rho = charge*convertPtToR(pt); float chi2rphi = l1track_ptr->chi2XYRed(); + //float chi2rphi = l1track_GTTptr->getChi2RPhi(); float chi2rz = l1track_ptr->chi2ZRed(); + //float chi2rz = l1track_GTTptr->getChi2RZ(); float bendchi2 = l1track_ptr->stubPtConsistency(); + //float bendchi2 = l1track_GTTptr->getBendChi2(); float MVA1 = l1track_ptr->trkMVA1(); + //float MVA1 = l1track_GTTptr->getMVAQuality()+0.005; //float MVA2 = l1track_ptr->trkMVA2(); std::vector>, TTStub>> stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); + //int nstub = l1track_GTTptr->getNStubs(); //std::cout<<"simulation track pt: "< promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { @@ -286,7 +298,6 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float x0Sim = l1track_ptr->POCA().x(); float y0Sim = l1track_ptr->POCA().y(); float d0Sim = -x0Sim * sin(phiSim) + y0Sim * cos(phiSim); - float d0SimAlt = l1track_ptr->d0(); int chargeSim = (int)(l1track_ptr->rInv() / fabs(l1track_ptr->rInv())); float chi2Sim = l1track_ptr->chi2Red(); float chi2rphiSim = l1track_ptr->chi2XYRed(); @@ -297,7 +308,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e stubRefsSim = l1track_ptr->getStubRefs(); int nstubSim = (int)stubRefsSim.size(); - //std::cout<<"simulation track pt: "< Transformed_features = {selectedTracksWithTruth[i].first.pt, - selectedTracksWithTruth[j].first.pt, + std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt*0.25), + float(selectedTracksWithTruth[j].first.pt*0.25), selectedTracksWithTruth[i].first.eta, selectedTracksWithTruth[j].first.eta, selectedTracksWithTruth[i].first.phi, @@ -427,22 +438,22 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e selectedTracksWithTruth[j].first.d0, selectedTracksWithTruth[i].first.z0, selectedTracksWithTruth[j].first.z0, - selectedTracksWithTruth[i].first.chi2rz, - selectedTracksWithTruth[j].first.chi2rz, - selectedTracksWithTruth[i].first.bendchi2, - selectedTracksWithTruth[j].first.bendchi2, - selectedTracksWithTruth[i].first.MVA1, - selectedTracksWithTruth[j].first.MVA1, + float(selectedTracksWithTruth[i].first.chi2rz+0.07), + float(selectedTracksWithTruth[j].first.chi2rz+0.07), + float(selectedTracksWithTruth[i].first.bendchi2+0.07), + float(selectedTracksWithTruth[j].first.bendchi2+0.07), + float(selectedTracksWithTruth[i].first.MVA1+0.07), + float(selectedTracksWithTruth[j].first.MVA1+0.07), vertex.d_T, vertex.R_T, vertex.cos_T, - vertex.delta_z}; + float(vertex.delta_z*0.125)}; //std::vector TransformedFloat_features; //for(auto feature: Transformed_features){ //TransformedFloat_features.push_back(feature); //} - +#if 0 if(isReal){ std::cout<<"simulation features: "< bdt(this->model_); +#endif + conifer::BDT bdt(this->model_); std::vector output = bdt.decision_function(Transformed_features); //outputVertex.setScore(1. / (1. + exp(-output.at(0)))); - outputVertex.setScore(1. / (1. + exp(-output.at(0)))); - if(isReal) std::cout<<"vertex true position: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0))))<<" raw score: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0))))<<" raw score: "<emplace_back(outputVertex); //numVertices++; } @@ -524,8 +533,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e if (fabs(vertex.b.d0) < fabs(minD0)) minD0 = vertex.b.d0; //std::cout<<"first pt: "<> Transformed_features = {selectedTracksEmulationWithTruth[i].first.pt, - selectedTracksEmulationWithTruth[j].first.pt, + std::vector> Transformed_features = {selectedTracksEmulationWithTruth[i].first.pt*0.25, + selectedTracksEmulationWithTruth[j].first.pt*0.25, selectedTracksEmulationWithTruth[i].first.eta, selectedTracksEmulationWithTruth[j].first.eta, selectedTracksEmulationWithTruth[i].first.phi, @@ -534,16 +543,17 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e selectedTracksEmulationWithTruth[j].first.d0, selectedTracksEmulationWithTruth[i].first.z0, selectedTracksEmulationWithTruth[j].first.z0, - selectedTracksEmulationWithTruth[i].first.chi2rz, - selectedTracksEmulationWithTruth[j].first.chi2rz, - selectedTracksEmulationWithTruth[i].first.bendchi2, - selectedTracksEmulationWithTruth[j].first.bendchi2, - selectedTracksEmulationWithTruth[i].first.MVA1, - selectedTracksEmulationWithTruth[j].first.MVA1, + selectedTracksEmulationWithTruth[i].first.chi2rz+0.07, + selectedTracksEmulationWithTruth[j].first.chi2rz+0.07, + selectedTracksEmulationWithTruth[i].first.bendchi2+0.07, + selectedTracksEmulationWithTruth[j].first.bendchi2+0.07, + selectedTracksEmulationWithTruth[i].first.MVA1+0.07, + selectedTracksEmulationWithTruth[j].first.MVA1+0.07, vertex.d_T, vertex.R_T, vertex.cos_T, - vertex.delta_z}; + vertex.delta_z*0.125}; +#if 0 if(isReal){ std::cout<<"emulation features: "<, ap_fixed<32,16,AP_RND_CONV, AP_SAT>, true> bdt(this->model_); - std::vector> output = bdt.decision_function(Transformed_features); +#endif + conifer::BDT, ap_fixed<13,8,AP_RND_CONV, AP_SAT>> bdt(this->model_); + std::vector> output = bdt.decision_function(Transformed_features); //std::cout<<"transformed first pt: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0).to_float())))<<" raw score: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0).to_float())))<<" raw score: "<emplace_back(outputVertex); //numVerticesEmu++; } diff --git a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py index b9e1b96dbcf8d..20b663932ce0e 100644 --- a/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/DisplacedVertexProducer_cfi.py @@ -6,7 +6,7 @@ l1TrackVertexCollectionName = cms.string("dispVertices"), l1TrackEmulationVertexCollectionName = cms.string("dispVerticesEmulation"), mcTruthTrackInputTag = cms.InputTag("TTTrackAssociatorFromPixelDigisExtended", "Level1TTTracks"), - model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json"), + model = cms.string("/afs/cern.ch/user/r/rmccarth/private/dispVert/l1tOfflinePR/CMSSW_14_0_0_pre3/src/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json"), runEmulation = cms.bool(True), cutSet = cms.PSet( chi2rzMax = cms.double(3.0), # chi2rz value for all tracks must be less than this diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C index 0c86f1b1f5e5b..87be9725dd8d3 100644 --- a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C +++ b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C @@ -809,7 +809,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, tree->SetBranchAddress("trkExtEmu_eta", &trk_eta, &b_trk_eta); tree->SetBranchAddress("trkExtEmu_phi", &trk_phi, &b_trk_phi); tree->SetBranchAddress("trkExtEmu_d0", &trk_d0, &b_trk_d0); - tree->SetBranchAddress("trkExtEmu_rinv", &trk_rinv, &b_trk_rinv); + tree->SetBranchAddress("trkExtEmu_rho", &trk_rinv, &b_trk_rinv); tree->SetBranchAddress("trkExtEmu_z0", &trk_z0, &b_trk_z0); tree->SetBranchAddress("trkExtEmu_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); tree->SetBranchAddress("trkExtEmu_chi2rz", &trk_chi2rz, &b_trk_chi2rz); @@ -879,7 +879,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, tree->SetBranchAddress("matchtrkExtEmu_phi", &matchtrk_phi, &b_matchtrk_phi); tree->SetBranchAddress("matchtrkExtEmu_z0", &matchtrk_z0, &b_matchtrk_z0); tree->SetBranchAddress("matchtrkExtEmu_d0", &matchtrk_d0, &b_matchtrk_d0); - tree->SetBranchAddress("matchtrkExtEmu_rinv", &matchtrk_rinv, &b_matchtrk_rinv); + tree->SetBranchAddress("matchtrkExtEmu_rho", &matchtrk_rinv, &b_matchtrk_rinv); tree->SetBranchAddress("matchtrkExtEmu_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); tree->SetBranchAddress("matchtrkExtEmu_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); tree->SetBranchAddress("matchtrkExtEmu_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); @@ -1117,11 +1117,11 @@ void Analyzer_DisplacedMuon(TString inputFilePath, //vertex cuts and plots definitions std::vector> vertCuts; - std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,true)); + std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,false)); vertCuts.push_back(std::move(vertCut0)); - std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,true)); + std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,false)); vertCuts.push_back(std::move(vertCut1)); - std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,true)); + std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,false)); vertCuts.push_back(std::move(vertCut2)); std::unique_ptr> vertCut3(new TypedCut("min_trk_sumCharge","min #Sigma q",&trk_rinv,0,true)); vertCuts.push_back(std::move(vertCut3)); @@ -1144,7 +1144,6 @@ void Analyzer_DisplacedMuon(TString inputFilePath, vertCuts.push_back(std::move(vertCut11)); std::unique_ptr> vertCut12(new TypedCut("min_trk_highD0","min d_{0}",&trk_d0,0.3,true)); vertCuts.push_back(std::move(vertCut12)); -#endif //std::unique_ptr> vertCut3p1(new TypedCut("min_score0p68","score>0.68",&trkVert_score,0.68,true)); //vertCuts.push_back(std::move(vertCut3p1)); @@ -1170,7 +1169,6 @@ void Analyzer_DisplacedMuon(TString inputFilePath, vertCuts.push_back(std::move(vertCut54)); std::unique_ptr> vertCut6(new TypedCut("min_score0p95","score>0.95",&trkVert_score,0.95,true)); vertCuts.push_back(std::move(vertCut6)); - std::unique_ptr> vertCut7(new TypedCut("min_score0p96","score>0.96",&trkVert_score,0.96,true)); vertCuts.push_back(std::move(vertCut7)); std::unique_ptr> vertCut8(new TypedCut("min_score0p97","score>0.97",&trkVert_score,0.97,true)); @@ -1179,16 +1177,27 @@ void Analyzer_DisplacedMuon(TString inputFilePath, vertCuts.push_back(std::move(vertCut9)); std::unique_ptr> vertCut10(new TypedCut("min_score0p99","score>0.99",&trkVert_score,0.99,true)); vertCuts.push_back(std::move(vertCut10)); -#if 0 - std::unique_ptr> vertCut11(new TypedCut("min_score0p992","score>0.992",&trkVert_score,0.992,true)); +#endif + + std::unique_ptr> vertCut10(new TypedCut("min_score4p0","score>4.0",&trkVert_score,4.0,false)); + vertCuts.push_back(std::move(vertCut10)); + std::unique_ptr> vertCut11(new TypedCut("min_score4p5","score>4.5",&trkVert_score,4.5,false)); vertCuts.push_back(std::move(vertCut11)); - std::unique_ptr> vertCut12(new TypedCut("min_score0p994","score>0.994",&trkVert_score,0.994,true)); + std::unique_ptr> vertCut12(new TypedCut("min_score5p0","score>5.0",&trkVert_score,5.0,false)); vertCuts.push_back(std::move(vertCut12)); - std::unique_ptr> vertCut13(new TypedCut("min_score0p996","score>0.996",&trkVert_score,0.996,true)); + std::unique_ptr> vertCut13(new TypedCut("min_score5p1","score>5.1",&trkVert_score,5.1,false)); vertCuts.push_back(std::move(vertCut13)); - std::unique_ptr> vertCut14(new TypedCut("min_score0p998","score>0.998",&trkVert_score,0.998,true)); + std::unique_ptr> vertCut14(new TypedCut("min_score5p2","score>5.2",&trkVert_score,5.2,false)); vertCuts.push_back(std::move(vertCut14)); -#endif + std::unique_ptr> vertCut15(new TypedCut("min_score5p3","score>5.3",&trkVert_score,5.3,false)); + vertCuts.push_back(std::move(vertCut15)); + std::unique_ptr> vertCut16(new TypedCut("min_score5p4","score>5.4",&trkVert_score,5.4,false)); + vertCuts.push_back(std::move(vertCut16)); + std::unique_ptr> vertCut17(new TypedCut("min_score5p5","score>5.5",&trkVert_score,5.5,true)); + vertCuts.push_back(std::move(vertCut17)); + std::unique_ptr> vertCut18(new TypedCut("min_score5p55","score>5.55",&trkVert_score,5.55,true)); + vertCuts.push_back(std::move(vertCut18)); + std::vector> vertCutFlows; std::unique_ptr> vertPlot0(new TypedPlot("x","cm",&trkVert_x,100,-5.0,5.0)); vertCutFlows.push_back(std::move(vertPlot0)); diff --git a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc index c62ed92bfdb29..7f50f6ee53de0 100644 --- a/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc +++ b/L1Trigger/L1TTrackMatch/test/L1TrackObjectNtupleMaker.cc @@ -2751,10 +2751,10 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_dvEmu_cos_T = dispVertEmulationIter->cos_T(); float tmp_dvEmu_del_Z = dispVertEmulationIter->del_Z(); - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_d_T = tmp_dvEmu_d_T; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_R_T = tmp_dvEmu_R_T; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_cos_T = tmp_dvEmu_cos_T; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_del_Z = tmp_dvEmu_del_Z; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_d_T = tmp_dvEmu_d_T; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_R_T = tmp_dvEmu_R_T; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_cos_T = tmp_dvEmu_cos_T; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_dvEmuFixed_del_Z = tmp_dvEmu_del_Z; m_dvEmu_d_T->push_back(tmp_dvEmu_d_T); m_dvEmu_R_T->push_back(tmp_dvEmu_R_T); @@ -3162,14 +3162,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_trkEmu_MVA = l1track_ref->getMVAQuality(); int tmp_trkEmu_nstub = l1track_ref->getNStubs(); - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_pt = tmp_trkEmu_pt; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_eta = tmp_trkEmu_eta; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_phi = tmp_trkEmu_phi; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_z0 = tmp_trkEmu_z0; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_d0 = tmp_trkEmu_d0; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_chi2rz = tmp_trkEmu_chi2rz; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_bendchi2 = tmp_trkEmu_bendchi2; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_MVA = tmp_trkEmu_MVA; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_pt = tmp_trkEmu_pt; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_eta = tmp_trkEmu_eta; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_phi = tmp_trkEmu_phi; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_z0 = tmp_trkEmu_z0; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_d0 = tmp_trkEmu_d0; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_chi2rz = tmp_trkEmu_chi2rz; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_bendchi2 = tmp_trkEmu_bendchi2; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_trkEmuFixed_MVA = tmp_trkEmu_MVA; // ---------------------------------------------------------------------------------------------- // loop over stubs on tracks @@ -3871,14 +3871,14 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even float tmp_matchtrkExtEmu_MVA = -999; int tmp_matchtrkExtEmu_nstub = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_pt = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_eta = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_phi = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_d0 = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_z0 = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_chi2rz = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_bendchi2 = -999; - ap_fixed<12, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_MVA = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_pt = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_eta = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_phi = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_d0 = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_z0 = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_chi2rz = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_bendchi2 = -999; + ap_fixed<13, 8, AP_RND_CONV, AP_SAT> tmp_matchtrkExtEmuFixed_MVA = -999; if (nMatch > 1 && DebugMode) edm::LogVerbatim("Tracklet") << "WARNING *** 2 or more matches to genuine L1 tracks ***"; diff --git a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json new file mode 100644 index 0000000000000..41e065eaefc1c --- /dev/null +++ b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationConiferShifted13p8.json @@ -0,0 +1,8182 @@ +{ + "n_classes": 2, + "n_features": 20, + "n_trees": 50, + "max_depth": 4, + "init_predict": [ + 0 + ], + "norm": 1, + "trees": [ + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 19, + 1, + 16, + 1, + 13, + 1, + 12, + 0, + 0, + 0, + 18, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.0625, + 2.53125, + 0.125, + 3.03125, + 0.75, + 2.5, + 0.28125, + 2.59375, + 5.0, + 1.46875, + 5.0, + 2.78125, + 2.0625, + 2.8125, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 70841.0, + 411997.156, + 3962.0, + 66440.5234, + 120811.969, + 32994.4609, + 672.0, + 1982.04688, + 58223.332, + 43094.8125, + 8327.51953, + 2421.63281, + 37907.1328, + 6143.125, + 90.0, + -0.448011726, + 0.145486429, + 2.45269179, + -0.345332354, + 0.836405098, + 3.05361819, + 0.885370374, + -0.381489754, + -0.450645268, + -0.167820334, + -0.248041913, + 1.55043864, + -0.448916435, + -0.188456371, + -0.454373926, + -0.449658006 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 14, + 1, + 18, + 1, + 15, + 2, + 18, + 0, + 19, + -2, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.09375, + 1.875, + 0.28125, + 3.59375, + 0.875, + 2.625, + 1.0, + 2.21875, + 0.875, + 1.03125, + 0.96875, + 2.375, + 0.46875, + 0.0, + 3.09375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 24829.0, + 67561.7109, + 1488.5, + 6978.76562, + 26534.6523, + 11089.9688, + 125.0, + 386.359375, + 6423.18896, + 650.617188, + 15226.584, + 773.25, + 15916.3086, + -0.434434086, + 683.8125, + -0.432457209, + -0.298128337, + -0.544871807, + 0.327800304, + -0.507408202, + -0.0813440382, + -0.544091344, + 0.509072363, + -0.43318969, + -0.340579271, + 0.541179657, + -0.325568527, + -0.43248859, + -0.380737513 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + -1, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + -1, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 13, + 0, + 16, + 1, + 15, + 1, + 19, + 1, + 1, + 0, + 18, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.09375, + 1.71875, + 0.28125, + 3.75, + 20.0, + 2.53125, + 0.6875, + 2.21875, + 0.875, + 1.25, + 0.625, + 2.34375, + 1.90625, + 3.125, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 20380.5, + 41288.9297, + 1918.5, + 4096.71094, + 13724.3945, + 11360.125, + 180.5, + 344.953125, + 2992.36328, + 11503.7852, + 587.53418, + 608.21875, + 13685.0508, + 1141.85938, + 14.0, + -0.420145035, + -0.27957359, + -0.516295552, + 0.194030389, + -0.194665983, + 0.405224532, + -0.700002789, + -0.394189775, + -0.420301765, + -0.328045517, + -0.356376201, + 0.398222089, + -0.418180764, + -0.308144659, + -0.422234923, + -0.4190467 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 16, + 1, + 18, + 0, + 18, + 1, + 13, + 1, + 15, + 1, + 19, + 16, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.09375, + 1.46875, + 0.34375, + 4.25, + 1.0, + 2.1875, + 1.0, + 1.8125, + 2.25, + 1.9375, + 0.875, + 2.96875, + 0.71875, + 1.5, + 2.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 17949.75, + 27018.9316, + 2394.0, + 2027.71875, + 11347.8301, + 10654.7188, + 161.0, + 148.429688, + 1754.70374, + 205.98584, + 9493.66602, + 604.304688, + 13365.3477, + 3.5, + 810.578125, + -0.413591683, + -0.327788919, + 0.25488922, + -0.370085388, + -0.43288517, + -0.609881759, + -0.413685173, + 0.277415574, + -0.411589533, + -0.299200505, + 0.314502329, + -0.357517421, + -0.412835658, + -0.414538711, + -0.41244778, + -0.340539843 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 16, + 0, + 15, + 1, + 18, + 0, + 12, + 3, + 18, + 1, + 0, + 16, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.15625, + 1.84375, + 0.40625, + 3.46875, + 0.875, + 2.625, + 1.0, + 3.21875, + 5.0, + -1.0625, + 0.875, + 1.875, + 1.96875, + 2.40625, + 2.3125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 17607.0, + 26537.9844, + 1459.25, + 9441.03516, + 14605.1592, + 6933.125, + 148.25, + 112.398438, + 7734.86084, + 1625.11572, + 11831.0889, + 378.164062, + 8340.1748, + 4.875, + 675.21875, + -0.406835854, + -0.236287341, + 0.451444119, + -0.418989986, + 0.16407074, + -0.4713974, + -0.534249127, + 0.387679577, + -0.403666228, + -0.285680354, + -0.348884463, + 0.378431141, + -0.407746792, + -0.409595072, + -0.407251656, + -0.330261976 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 18, + 1, + 14, + 18, + 0, + 1, + 13, + 2, + 1, + -2, + 16, + 0, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.1875, + 1.5625, + 1.0, + 2.28125, + 0.875, + 0.9375, + 3.0, + 1.5625, + 3.5, + -1.09375, + 1.34375, + 0.0, + 1.25, + 2.0625, + 2.78125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16016.25, + 20420.9707, + 1336.375, + 1543.87891, + 10937.5039, + 10.125, + 4833.64844, + 31.0507812, + 1511.56519, + 1189.91064, + 7518.57812, + -0.406208098, + 51.5, + 463.578125, + 9158.40918, + -0.405019432, + -0.360443741, + -0.0068812035, + -0.381553978, + 0.151972324, + -0.425386906, + -0.15519473, + 0.315228432, + -0.381460845, + -0.405095547, + -0.399954081, + -0.299818367, + -0.333101034, + 0.36812222 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + -1, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + -1, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 18, + 1, + 18, + 16, + 0, + 1, + 18, + 1, + 19, + 0, + -2, + 1, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.25, + 1.40625, + 1.0, + 2.21875, + 0.9375, + 1.53125, + 2.3125, + 1.3125, + 1.0, + 2.5, + 1.1875, + 1.59375, + 0.0, + 2.34375, + 0.28125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16050.375, + 16410.7988, + 1041.75, + 998.800781, + 9915.53223, + 14.6875, + 3379.89453, + 15.3085938, + 962.849854, + 79.9667969, + 8086.71191, + 54.5625, + -0.403832018, + 98.6640625, + 7611.05371, + -0.40380916, + -0.377623051, + -0.449828058, + -0.115888789, + -0.412116051, + -0.503777683, + 0.217621952, + -0.263435811, + -0.402956098, + -0.377776116, + -0.40219903, + -0.358837575, + 0.524562657, + -0.29802379 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 16, + 0, + 13, + 1, + 18, + 0, + 12, + 7, + 3, + 0, + 13, + 16, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.34375, + 1.84375, + 0.75, + 3.96875, + 5.0, + 2.34375, + 1.0, + 3.21875, + 5.0, + 0.40625, + -1.09375, + 2.65625, + 5.0, + 2.40625, + 2.4375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16796.125, + 14647.2988, + 702.6875, + 6128.38086, + 11326.5879, + 2850.14844, + 69.875, + 445.222656, + 4968.03906, + 8031.99414, + 3557.02075, + 210.357422, + 5365.91602, + 10.625, + 270.703125, + -0.390525281, + -0.18525821, + 0.350239247, + -0.408031315, + 0.0204735287, + 0.654172182, + 0.830534577, + -0.249967128, + -0.399214894, + -0.289545178, + 0.87169981, + -0.249927804, + -0.397470266, + -0.402518332, + -0.400876135, + -0.316781133 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 18, + 0, + 16, + 16, + 1, + 13, + 1, + 17, + 0, + 0, + 1, + 13, + 1, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 0.9375, + 1.5, + 0.0625, + 0.8125, + 2.84375, + 20.0, + 3.375, + 3.78125, + 1.78125, + 1.59375, + 2.03125, + 3.5, + 1.8125, + -1.65625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 17725.0625, + 55.28125, + 14335.7422, + 40.5625, + 225.976562, + 1272.25195, + 10087.9961, + 64.1638184, + 7.4375, + 907.427002, + 35.5976562, + 81.9726562, + 2086.20557, + 9210.95801, + 545.329102, + -0.421223223, + -0.583991408, + -0.396048427, + -0.401720434, + -0.375963092, + 0.142587379, + -0.401386797, + -0.375197172, + -0.39695406, + -0.326334417, + 0.0851807594, + -0.375321239, + -0.151006222, + 0.305227369, + 2.85383987, + -0.382712275 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 18, + 19, + 16, + 16, + 1, + 19, + 1, + 17, + 1, + 0, + 0, + 12, + 16, + 7, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 0.9375, + 1.3125, + 0.0625, + 1.25, + 1.875, + 2.3125, + 3.40625, + 3.78125, + 1.65625, + 3.0, + 3.1875, + 20.0, + 0.59375, + -6.28125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 17643.0, + 76.71875, + 10293.4043, + 13.578125, + 301.794922, + 8541.17871, + 757.748047, + 18.362793, + 12.046875, + 953.657715, + 29.953125, + 4056.35156, + 8164.22461, + 784.629883, + 186.357422, + -0.415046513, + -0.520147502, + -0.392225087, + -0.400819123, + -0.37618202, + 0.0634178296, + -0.399255484, + -0.358261615, + -0.351903588, + 0.0734527782, + 0.295646131, + -0.411385506, + -0.146266431, + -0.385444552, + -0.127901092, + -0.396681905 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 17, + 0, + 18, + 0, + 0, + 1, + 1, + 16, + 0, + 1, + 14, + 12, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 3.0, + 8.34375, + 1.75, + 0.90625, + 1.1875, + 4.09375, + 1.75, + 1.5625, + 0.125, + 1.5625, + 4.21875, + 0.875, + 2.25, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 16993.2344, + 108.890625, + 9343.72363, + 430.728516, + 23.03125, + 7687.97998, + 4799.55957, + 37.6005859, + 1211.1709, + 4.671875, + 72.1601562, + 590.717773, + 6395.23096, + 865.089844, + 2350.3938, + -0.398229182, + -0.344467849, + -0.350802928, + 0.314242244, + -0.426716089, + -0.399954081, + -0.399577677, + -0.352666616, + -0.350449353, + -0.0145886634, + -0.272682577, + 0.382313132, + -0.44167763, + -0.288458318, + 0.266828597, + -0.176757962 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 18, + 0, + 17, + 16, + 1, + 12, + 1, + -2, + 0, + 0, + 16, + 15, + 17, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 0.9375, + 1.375, + 3.78125, + 1.25, + 2.5625, + 20.0, + 1.59375, + 0.0, + 1.59375, + 3.0, + 0.125, + 0.875, + 14.90625, + -1.375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 15997.2891, + 154.140625, + 5664.18066, + 25.1484375, + 517.90918, + 1017.47461, + 5398.69922, + 61.0107422, + -0.399354786, + 1184.95642, + 60.7080078, + 65.3154297, + 1039.86841, + 5901.2002, + 564.255371, + -0.393829942, + -0.329824179, + -0.354955822, + 0.246784076, + -0.396110684, + -0.313306272, + -0.319410771, + -0.396514028, + -0.411578387, + 0.00553159323, + 0.168763012, + -0.313758433, + 2.85442519, + -0.391227573 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 16, + 19, + 18, + 16, + 6, + 17, + 18, + 1, + 0, + 16, + 12, + 6, + 6, + 7, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 1.53125, + 1.71875, + 0.84375, + 2.40625, + -0.40625, + 10.09375, + 0.5625, + 1.59375, + 1.96875, + 4.625, + 5.0, + 0.5625, + 3.53125, + -6.28125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 14939.7812, + 219.71875, + 4936.44189, + 530.978516, + 24.1875, + 5049.08545, + 402.72168, + 19.7353516, + 1096.83325, + 91.4335938, + 3.578125, + 7520.57812, + 5762.75781, + 413.492188, + 295.697754, + -0.392656118, + -0.329631478, + -0.349552125, + 0.145821765, + -0.393090397, + -0.26878345, + -0.39300856, + -0.400184155, + 0.548510849, + -0.0555744842, + -0.332573622, + 0.225860402, + -0.25319925, + 0.300261736, + 0.0236244928, + -0.399566233 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 7, + 16, + 7, + 13, + 1, + 0, + 18, + 17, + 11, + 7, + 5, + 3, + 17, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.75, + 0.875, + 1.5, + -0.53125, + 20.0, + 2.125, + 2.03125, + 0.90625, + 6.8125, + 1.5, + 5.6875, + -3.25, + 1.15625, + 3.78125, + 1.09375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 14064.1875, + 4480.18115, + 416.351562, + 3637.89062, + 4746.80566, + 946.775391, + 61.8046875, + 1939.50891, + 1883.24023, + 3127.14502, + 407.50647, + 375.36084, + 1618.20923, + 4.32421875, + 290.254883, + -0.39726752, + 0.179394692, + -0.174944296, + -0.478584766, + 0.407868475, + -0.0778594986, + -0.454913288, + -0.127423927, + 4.12060118, + -0.376662493, + -0.133288577, + 1.6262728, + -0.379744858, + -0.398902893, + -0.373623252, + 0.0629038289 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 0, + 0, + 15, + 16, + 12, + 9, + 14, + 3, + 14, + 1, + 17, + 16, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.75, + 1.09375, + 2.15625, + 4.78125, + 0.875, + 1.25, + 5.0, + -13.5625, + 0.875, + 1.09375, + 0.875, + 1.84375, + 3.78125, + 1.53125, + 1.15625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 11713.6035, + 4041.55981, + 524.773438, + 1370.70459, + 6141.42529, + 25.2910156, + 1263.74756, + 194.726562, + 975.070496, + 1574.79419, + 2594.51025, + 53.8515625, + 7.82226562, + 920.928955, + 1116.89502, + 0.0805579647, + -0.365796506, + -0.418466389, + 0.241349101, + -0.375867099, + 0.326299757, + -0.15192461, + 0.241942883, + -0.393568188, + -0.277249217, + -0.370059699, + -0.397068024, + 0.497744948, + -0.217089936, + -0.35669893, + 0.976177216 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 19, + 13, + 18, + 16, + 6, + 7, + 17, + 0, + 0, + -2, + 2, + 6, + 7, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.0, + 0.53125, + 20.0, + 0.90625, + 2.65625, + -1.375, + 6.625, + 3.78125, + 1.4375, + 1.71875, + 0.0, + -1.03125, + 0.65625, + -6.15625, + -0.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 9249.39453, + 561.308594, + 2834.56641, + 1333.06226, + 55.140625, + 2933.72363, + 266.203857, + 92.1054688, + 1735.42419, + 143.039551, + -0.396564692, + 4181.93066, + 2910.27295, + 228.211426, + 600.054993, + -0.256457537, + -0.387914389, + -0.293291569, + 0.759545565, + -0.386991739, + -0.250832945, + 1.08700383, + 0.116422914, + -0.175413728, + 0.229805231, + -0.0836402029, + -0.404975146, + 1.06139123, + -0.218971282 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + -1, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + -1, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 0, + 0, + 1, + 12, + 17, + 12, + 1, + 8, + 15, + 2, + 1, + 19, + 3, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.1875, + 1.09375, + 2.03125, + 2.21875, + 20.0, + 6.71875, + 5.0, + 1.625, + -6.125, + 0.875, + 1.03125, + 1.71875, + 0.0625, + -1.3125, + 3.375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 7543.53906, + 3120.57935, + 278.225586, + 390.463867, + 3055.09424, + 20.7001953, + 579.844482, + 7.48291016, + 271.59967, + 2386.146, + 320.208984, + 54.7709961, + 4.34277344, + 554.220764, + 305.038574, + -0.394232929, + -0.333212584, + 0.146878615, + -0.23333995, + -0.184548452, + 0.151777029, + -0.359007776, + 0.487123013, + -0.391518176, + -0.27122435, + -0.318697393, + -0.400089234, + 1.20661342, + -0.0560794882, + -0.37693581, + -0.0447394662 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 19, + 1, + 16, + 10, + 19, + 0, + 19, + 7, + -2, + 6, + 12, + 7, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.9375, + 3.78125, + 2.3125, + 1.46875, + 4.1875, + 1.5, + 4.53125, + 1.90625, + 0.15625, + 3.53125, + 0.0, + -0.625, + 5.0, + -1.6875, + 7.78125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 5669.26758, + 159.574219, + 2681.40405, + 278.322998, + 18.9453125, + 2132.34497, + 151.274902, + 44.9029541, + 516.742737, + 46.6276855, + -0.39869675, + 2399.58887, + 903.405273, + 190.124634, + 35.4073486, + -0.386071742, + -0.215113088, + 0.933545411, + -0.176487684, + -0.38020578, + -0.238458157, + 0.26409182, + -0.0367491059, + 0.00405531097, + -0.283150941, + -0.0393774025, + -0.308978289, + -0.39519617, + -0.604956865 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + -1, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + -1, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 14, + 0, + 2, + 0, + 17, + 2, + 2, + 6, + 1, + 12, + 1, + 19, + 2, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.1875, + 0.875, + 2.03125, + 1.03125, + 3.09375, + 6.71875, + -1.15625, + -1.09375, + -1.9375, + 1.28125, + 5.0, + 1.71875, + 0.0625, + -1.1875, + 1.1875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 4202.92871, + 1816.83691, + 390.505859, + 1350.13428, + 1959.15845, + 41.1479492, + 553.316833, + 1329.67236, + 1397.55322, + 1978.54053, + 1500.38989, + 83.8044434, + 8.11132812, + 1281.13635, + 463.393433, + 0.231266379, + -0.400751591, + 1.1744262, + -0.0723480582, + -0.320065707, + 0.0327815786, + 0.298754901, + -0.0365616865, + -0.382106811, + -0.184484944, + -0.260905623, + -0.399999559, + 0.480300337, + 10.1269417, + -0.301869482, + 0.164746761 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 2, + 0, + 13, + 2, + 9, + 9, + 16, + 7, + 3, + 3, + 16, + 3, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.03125, + 1.0, + -1.15625, + 4.875, + 5.0, + -1.1875, + -18.375, + -13.5625, + 0.0625, + 0.5625, + 1.15625, + -1.4375, + 2.15625, + 2.0, + 4.625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 7232.33203, + 1684.29639, + 3849.52246, + 499.516968, + 1972.77002, + 4871.30273, + 119.507568, + 215.040283, + 444.081818, + 3649.44507, + 4509.41162, + 120.848267, + 709.716797, + 914.640442, + 69.6311035, + 0.222714543, + -0.366485566, + 0.212992355, + -0.268354505, + -0.0451384448, + 0.428432852, + -0.162038043, + 1.15970922, + 0.390695751, + -0.399449021, + -4.75134897, + -1.81086862, + -0.236465976, + 4.72165871, + -0.297850758, + -0.396671832 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 17, + 2, + 12, + 1, + 2, + 19, + 0, + 6, + 9, + 7, + 19, + 16, + 1, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 1.1875, + 10.125, + -1.15625, + 20.0, + 3.28125, + -1.1875, + 0.0625, + 1.03125, + -5.71875, + 8.875, + -1.40625, + 0.71875, + 1.3125, + 2.0625, + 1.15625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3491.44385, + 1528.97119, + 606.285156, + 1621.62878, + 2023.27039, + 608.586426, + 376.064941, + 1458.33887, + 397.032104, + 1308.55835, + 940.21814, + 333.143799, + 3597.09546, + 624.204895, + 202.646729, + -0.219502762, + 0.151822791, + 0.11304877, + -0.447663784, + -0.426736832, + 0.13535957, + 0.620300472, + -0.00290271849, + 0.459672421, + -0.378495783, + -10.573535, + -0.705711842, + -0.395660132, + 1.32972109, + -0.333556265, + -0.0970301032 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 15, + 18, + 3, + 3, + 17, + 16, + 0, + 1, + 2, + 0, + 3, + 14, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.8125, + 3.78125, + 0.75, + 0.21875, + -1.34375, + -1.8125, + 14.90625, + 3.6875, + 1.25, + 1.78125, + -1.15625, + 4.375, + 1.03125, + 0.75, + 3.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2440.03418, + 96.6142578, + 1666.1842, + 138.502319, + 21.9174805, + 167.660889, + 1464.96094, + 39.644104, + 177.033447, + 210.517853, + 31.3222656, + 245.078644, + 130.708374, + 1187.90674, + 858.651123, + -0.351364881, + 1.15041888, + -0.274211437, + 0.362277448, + -0.406041294, + 0.741048276, + -0.486145884, + -0.383996785, + -0.308134466, + 1.03890467, + -0.411645502, + -0.14575319, + -0.281111687, + 0.0933002457, + -0.437471598, + -0.0264888909 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 6, + 19, + 12, + 7, + 8, + 2, + 7, + 2, + 6, + 17, + 6, + 4, + 9, + 1, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.40625, + -0.3125, + 0.71875, + 5.0, + -0.3125, + -9.53125, + -1.15625, + 0.15625, + 1.15625, + 0.21875, + 3.59375, + 7.09375, + -2.9375, + -16.5625, + 1.125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1648.46167, + 1076.45264, + 86.5756836, + 1748.49255, + 3237.19141, + 175.203949, + 31.4282227, + 1411.23145, + 2182.34082, + 1294.87378, + 1225.09741, + 1397.71375, + 107.569305, + 20.8468628, + 19.7840576, + -0.27743879, + 0.331442297, + -0.112088479, + 0.925697625, + -0.271123886, + 0.228509292, + -0.108905844, + -0.471708387, + -0.169274062, + 7.98294687, + 1.03153443, + -0.298913568, + 0.247258693, + -0.471199274, + -0.399524778, + -0.300676197 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 13, + 17, + 19, + 0, + 1, + 8, + 16, + 3, + 3, + 0, + 19, + 3, + 19, + 8, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.40625, + 20.0, + 6.71875, + 0.84375, + 4.5625, + 1.125, + 4.9375, + 0.28125, + -0.9375, + -1.65625, + 4.59375, + 0.375, + -1.4375, + 0.0625, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 6001.10645, + 1200.99475, + 125.288086, + 1122.7085, + 355.98938, + 66.1751251, + 46.6210938, + 1465.66138, + 790.216064, + 186.993408, + 561.477966, + 13.2811584, + 248.458969, + 18.3808594, + 270.851196, + 0.00855484698, + 0.318294168, + 0.159224316, + -0.169856757, + 0.882637918, + -0.411316395, + 2.55825067, + -0.122979932, + -0.0921786055, + -0.407533377, + 1.66539598, + -0.143302426, + -0.498892069, + -0.425629824, + 3.12373734, + -0.317782551 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 15, + 17, + 3, + 6, + 14, + 8, + 8, + 3, + 2, + 6, + 9, + 3, + 6, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.40625, + 0.875, + 6.71875, + -1.09375, + -1.1875, + 0.625, + 4.9375, + -4.9375, + 1.03125, + 0.8125, + 0.3125, + -3.25, + 2.21875, + -6.90625, + 6.71875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 4158.90234, + 1038.57886, + 115.680664, + 1471.19556, + 1037.04883, + 68.6671066, + 46.206543, + 995.886169, + 846.909912, + 1522.31653, + 1400.76282, + 93.6244354, + 55.860672, + 22.2514648, + 161.15036, + 1.02149153, + -0.0131843314, + -0.387815177, + 0.0934289172, + 0.0634957105, + 0.56597513, + -0.141872644, + 0.153857216, + 3.42898154, + -0.271820396, + -0.211440682, + 0.839971006, + -0.193849787, + -0.421071976, + -0.367404968, + 0.471097529 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 14, + 6, + 2, + 9, + 16, + 18, + 1, + 2, + 2, + 8, + 16, + 3, + -2, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.40625, + 0.875, + 7.25, + -1.1875, + -10.34375, + 4.625, + 0.96875, + 3.28125, + 1.0625, + -0.9375, + -8.0, + 4.59375, + -1.5625, + 0.0, + 10.03125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2830.45532, + 1032.02087, + 112.958984, + 455.198975, + 1133.29468, + 117.108459, + 6.57202148, + 394.870636, + 582.887939, + 1100.06885, + 958.058289, + 205.503662, + 7.40551758, + -0.415847629, + 9.01321411, + -0.155433983, + 0.537796438, + -0.341646641, + 0.0742186531, + 0.924057901, + 0.136271477, + 0.294457763, + -0.0328609534, + -0.192594141, + 1.12621522, + -0.248495802, + -0.408119172, + -0.894676507, + -0.477804482 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + -1, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + -1, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 17, + 1, + 3, + 19, + 9, + 6, + 18, + -2, + 7, + 12, + 12, + 2, + 6, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.8125, + 6.71875, + 6.25, + 1.1875, + 1.625, + 0.21875, + -12.84375, + -2.96875, + 0.5625, + 0.0, + 3.9375, + 5.0, + 20.0, + -0.9375, + -3.1875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1938.57275, + 161.857422, + 930.894287, + 126.434692, + 106.443604, + 1308.88342, + 994.516724, + 10.6691589, + 190.81662, + -0.409619629, + 2411.66016, + 515.015869, + 593.252258, + 490.539429, + 992.344604, + -0.119690195, + -0.378328174, + -0.173089102, + 0.486529559, + -0.393012851, + 13.1781836, + 0.418931216, + -0.0316400044, + 0.0225794315, + -0.50727129, + 0.812323511, + 0.144295782, + 0.0782104582, + -0.184037611 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + -1, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + -1, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 3, + 10, + 17, + 0, + 17, + 13, + 19, + -2, + 18, + 18, + 7, + 9, + 1, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.8125, + 1.625, + 2.0, + 6.71875, + 2.03125, + 18.34375, + 5.0, + 0.84375, + 0.0, + -0.96875, + -0.96875, + -1.125, + -15.75, + 1.53125, + -0.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 88869.3906, + 17150.3906, + 720.208557, + 185.463379, + 13574.5312, + 766.718506, + 443.139465, + 120.603088, + -0.406611592, + 3662.57812, + 7942.34766, + 762.766357, + 112.766235, + 301.023315, + 344.621216, + -0.00591707928, + -0.33688736, + -4.55268812, + -1.42045832, + -9.47763157, + -3.03402638, + 0.240766034, + 0.00403669896, + 0.329031497, + -0.438354701, + -0.284844518, + 0.135361746, + 0.216663718, + -0.393250197 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 7, + 11, + 17, + 2, + 7, + 0, + 3, + -2, + 3, + 0, + 7, + 3, + 17, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.8125, + 3.9375, + 1.5, + 6.71875, + -1.15625, + 0.53125, + 3.3125, + 1.75, + 0.0, + -1.4375, + 2.03125, + -0.3125, + -0.8125, + 14.1875, + 1.5, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 19542.4609, + 1229.875, + 729.626465, + 237.399597, + 146.210938, + 738.686707, + 353.644592, + 151.166519, + -0.404453516, + 91.0703125, + 90.7792969, + 1536.58362, + 985.675964, + 280.147766, + 394.245087, + -0.113988295, + 1.03065884, + 1.83609641, + -0.565231085, + -0.686919808, + -0.558306515, + 0.146760255, + -0.225612476, + 0.420667231, + 0.0560993925, + -0.168234766, + -0.514448345, + -0.0538102388, + 0.623136699 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + -1, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + -1, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 18, + 17, + 19, + 0, + 7, + 1, + 1, + 6, + 18, + 0, + 16, + 16, + 13, + 0, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.8125, + 6.71875, + 2.3125, + 1.1875, + 4.03125, + 0.9375, + 2.625, + -2.0625, + -0.6875, + 4.5625, + 2.34375, + 0.03125, + 5.0, + 2.78125, + -0.9375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 11190.2979, + 775.177734, + 721.389099, + 133.74382, + 82.9101562, + 670.136841, + 212.26709, + 45.7415237, + 213.077286, + 54.434021, + 92.0234375, + 260.171509, + 675.269409, + 274.795349, + 183.321228, + 0.381480902, + -0.29599458, + -0.277672261, + 0.393717438, + -0.444567293, + -0.123514287, + -0.819256604, + -0.534821987, + 0.113992013, + -0.301890492, + 0.119896114, + -0.0447804034, + -0.312576503, + 0.0703490749, + -0.0376119018, + -0.491324008 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 15, + 17, + 11, + 19, + 3, + 3, + 0, + 4, + 7, + 9, + 4, + 9, + 3, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 0.75, + 3.78125, + 2.0, + 4.53125, + 1.28125, + 1.625, + 4.1875, + 2.96875, + 2.03125, + -16.5625, + -0.28125, + -0.4375, + 1.59375, + 0.0625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 7236.15234, + 635.306091, + 189.144531, + 82.7787476, + 566.272034, + 145.657349, + 145.634766, + 109.224579, + 17.7885742, + 586.638855, + 41.4238892, + 190.922546, + 163.811798, + 289.834167, + 11.1767578, + -0.316507339, + -0.0359206535, + -0.444423735, + 0.0622012019, + -0.0267386716, + 0.132024214, + 0.164393976, + -0.451977789, + 2.94688582, + -0.221429184, + -0.227678329, + 5.37940502, + -0.323602527, + 3.33773351, + -0.706528127, + -0.481379807 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 12, + 3, + 6, + 1, + 6, + 3, + 7, + 2, + 2, + 17, + 6, + 7, + 8, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 20.0, + 1.625, + 0.65625, + 3.1875, + -6.90625, + 2.21875, + 0.25, + -1.0625, + 1.09375, + 6.71875, + -7.40625, + -3.21875, + 4.9375, + 0.3125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 5028.18848, + 467.271912, + 138.779297, + 499.673309, + 440.860016, + 147.079865, + 4.25878906, + 1264.98071, + 613.720886, + 64.9914551, + 329.363525, + 562.023315, + 58.5035095, + 3.47558594, + 19.9443169, + -0.195273206, + 0.0602804124, + 0.66797632, + 0.0960448906, + -0.419709772, + -1.29462445, + -0.493020922, + 0.0872437656, + -0.377701372, + 4.27532721, + -0.0737977996, + -0.353896201, + -0.446365565, + -0.47468397, + 0.438518852, + -0.39602989 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 17, + 3, + 19, + 9, + 7, + 7, + 12, + 19, + 1, + 3, + 1, + -2, + 2, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 2.3125, + -1.4375, + 0.4375, + 8.21875, + 6.28125, + -2.65625, + 5.0, + 1.03125, + 3.96875, + -1.28125, + 1.78125, + 0.0, + 0.8125, + 1.46875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3582.54541, + 480.392395, + 103.597168, + 1300.75769, + 405.830627, + 649.17572, + 65.1347656, + 302.089966, + 186.886993, + 554.18457, + 1063.229, + 183.656281, + 7.03710556, + 133.727325, + 17.0200195, + 0.395182341, + -0.168472752, + -0.0470530502, + -0.352712601, + -0.121755257, + 0.0547064804, + 0.69905889, + -0.0018285258, + -0.358994335, + 1.15407252, + -0.385471612, + 0.380142391, + -0.356005639, + -0.43420434 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 1, + 7, + 4, + 13, + 13, + 17, + 17, + 5, + 19, + 17, + 0, + -2, + 9, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 9.625, + -2.65625, + 0.125, + 2.25, + 20.0, + 6.40625, + 9.90625, + 0.09375, + 1.0, + 13.40625, + 1.1875, + 0.0, + -8.28125, + -2.3125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 3152.19678, + 507.13031, + 103.214111, + 466.302582, + 650.880066, + 72.127449, + 37.7783203, + 419.539368, + 659.101807, + 240.923737, + 209.153931, + 77.8130188, + -0.414843172, + 112.890945, + 25.1450195, + 0.00900296308, + -0.195832998, + 0.169031113, + -0.0352492891, + 0.323532015, + -0.368428737, + -0.528401315, + -0.0971262231, + -0.39021939, + 0.362522304, + 1.3052839, + -0.303150862, + -0.708802044, + -0.426068217 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 19, + 7, + 2, + 9, + 4, + 16, + 9, + 8, + 8, + 5, + 3, + 17, + 1, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 3.0625, + -2.65625, + 0.46875, + -6.375, + 0.03125, + 4.1875, + 0.25, + 7.1875, + -2.375, + 2.78125, + -1.5, + 3.78125, + 1.90625, + -2.3125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 2122.83691, + 401.147095, + 88.0668945, + 386.352234, + 133.292053, + 63.2747307, + 42.6791992, + 709.382446, + 1517.40051, + 445.560883, + 186.336487, + 189.712234, + 107.630188, + 94.401947, + 9.33618164, + 0.0568554178, + -0.144797996, + 0.0173856802, + 0.641202271, + 0.707317173, + -0.443047047, + -0.372361392, + 0.344796747, + 3.02502751, + 0.0548939966, + 1.88007033, + -0.353695989, + -0.382377088, + 0.125452265, + -0.632527888, + -0.423455626 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 14, + 16, + 1, + 0, + 19, + 7, + 4, + 18, + 1, + 16, + 14, + 9, + 7, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 2.875, + 0.875, + 4.625, + 2.59375, + 2.15625, + 1.59375, + -5.6875, + -3.15625, + 1.0, + 2.28125, + 1.34375, + 0.875, + -16.5625, + -5.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 1421.98474, + 385.464447, + 78.3961182, + 361.30069, + 375.410248, + 136.551254, + 20.9790039, + 88.5514526, + 590.589905, + 842.550354, + 578.10791, + 101.909164, + 23.2577209, + 218.52681, + -0.419554532, + 1.64139938, + -0.319513351, + 0.991675019, + -0.0780170634, + -0.22021535, + 0.0764866397, + 0.0536552072, + 0.632621467, + -0.358032048, + 0.204405114, + 0.419142574, + -0.436244696, + -0.384358555, + 3.92350888 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 15, + 18, + 3, + 6, + 7, + 9, + 5, + 3, + 7, + 7, + 3, + -2, + -2, + 8, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 3.78125, + 0.875, + 0.90625, + -0.9375, + -0.15625, + -5.6875, + 4.46875, + 3.1875, + 1.03125, + 0.125, + -0.21875, + -1.5625, + 0.0, + 0.0, + -9.34375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 951.998962, + 477.542938, + 47.6682129, + 390.418823, + 424.316772, + 4.6126709, + 85.655571, + 590.79657, + 520.57251, + 669.368164, + 1217.05408, + 17.1895084, + -0.414614022, + -0.413376719, + 55.943264, + 0.0962378606, + 5.77774763, + -0.344044685, + 0.069485575, + -0.308199406, + 0.108872056, + 0.0910845548, + -0.26928252, + 0.148773223, + -0.399018586, + 0.563855112, + -0.373743564 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + -1, + 25, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + -1, + 26, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 13, + 16, + 17, + 1, + 19, + 18, + 1, + 1, + 0, + 17, + 16, + 19, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 3.625, + 5.0, + 0.875, + 10.09375, + 7.3125, + 4.0, + -0.9375, + 1.09375, + 2.90625, + 1.90625, + 12.21875, + 0.09375, + 4.53125, + 3.875, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 638.891357, + 388.462219, + 96.4562988, + 602.024597, + 688.93866, + 97.2865906, + 4.87567139, + 406.812012, + 713.226562, + 651.805664, + 186.489807, + 7.45814514, + 141.917053, + 10.8305206, + -0.414287329, + -0.0890545845, + 0.157590732, + -0.353650779, + 0.0941278562, + -0.246607617, + 0.0382260978, + -0.510551631, + -0.138667151, + -0.670339167, + -0.421167672, + 0.208399162, + -0.313870281, + -0.895547569, + -0.460493296 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 16, + 10, + 7, + 0, + 12, + 17, + -2, + 8, + 13, + 8, + 16, + 17, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 4.625, + 2.0, + -5.6875, + 0.96875, + 2.25, + 6.71875, + 0.0, + 9.625, + 20.0, + -7.25, + 0.125, + 6.65625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 460.751465, + 368.301178, + 7.38790894, + 378.61615, + 355.365601, + 16.5162964, + -0.407828659, + 266.224152, + 320.342041, + 356.20459, + 274.25769, + 19.44907, + -0.389388055, + -0.253149092, + 0.366638064, + 0.0519038104, + -0.165597126, + 1.10573328, + 0.00641213823, + -0.485698372, + -0.138245344, + -0.335447967, + 0.666598737 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + -1, + 13, + 15, + 17, + 19, + 21, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + -1, + 14, + 16, + 18, + 20, + 22, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 19, + 11, + 16, + 6, + 17, + 0, + -2, + 2, + 12, + 13, + 8, + 0, + 7, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 3.0625, + 2.0, + 1.40625, + -2.71875, + 10.40625, + 6.125, + 0.0, + 1.59375, + 5.0, + 1.0, + 6.1875, + 4.125, + -7.3125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 323.469971, + 301.018463, + 135.025787, + 274.567535, + 273.305634, + 142.973236, + -0.426186711, + 539.600342, + 689.283752, + 108.049927, + 306.283173, + 286.906525, + 25.4546204, + 0.0963997915, + 1.1773442, + 0.0539789088, + -0.170301601, + 0.0318085067, + -0.276405185, + -0.0746685117, + 0.565019608, + -0.191624597, + 0.524991333, + -1.23239887, + -0.439955235 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + -1, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + -1, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 7, + 12, + 6, + 0, + 0, + 7, + 6, + 2, + 9, + 2, + 17, + 16, + 2, + 0, + 4, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -1.5, + 2.25, + -0.15625, + 2.125, + 8.59375, + 0.125, + 0.1875, + 1.6875, + -12.21875, + 0.9375, + 17.90625, + 0.03125, + -0.90625, + 6.625, + -0.5625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 299.232056, + 461.914856, + 476.477661, + 301.091248, + 384.938293, + 351.941406, + 487.020691, + 44.1887054, + 148.152832, + 345.980286, + 449.917938, + 82.1405334, + 422.712646, + 338.562256, + 436.127319, + -0.368496329, + 0.397862196, + 1.0661931, + 0.446504444, + 0.0352570005, + 0.751688182, + -0.614289343, + 1.26511109, + 0.177371413, + -0.339354575, + 0.223086119, + -0.00458455505, + -0.329105377, + 0.104869246, + -0.423693866, + 0.075001426 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 2, + 8, + 0, + 19, + -2, + 0, + 12, + 3, + 16, + 17, + 8, + 19, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -2.0, + 15.375, + 10.21875, + 0.6875, + 0.0, + 5.03125, + 1.5, + -1.84375, + 0.0625, + 14.34375, + 11.625, + 1.8125, + 0.28125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 265.62973, + 122.652252, + 266.588074, + 74.6975098, + 1.63045812, + 369.74707, + 447.593628, + 137.495682, + 25.4131165, + 423.020721, + 436.661072, + 112.845055, + 209.16394, + -0.438713998, + 0.0712173656, + -0.639288068, + -0.362418145, + 0.0122845778, + -0.221620202, + 0.190017894, + -0.517887056, + 0.268592894, + -0.575053155, + -0.0660050213, + -0.470252424 + ], + "children_left": [ + 1, + 3, + 5, + 7, + -1, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + -1, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 1, + 18, + 16, + 7, + 18, + 7, + 5, + 17, + 16, + 0, + 3, + -2, + -2, + 9, + 13, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 31.96875, + -0.03125, + 0.03125, + 4.65625, + 1.0, + 0.5, + -0.25, + 16.5, + 2.34375, + 1.0625, + 2.1875, + 0.0, + 0.0, + -12.5625, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 246.666245, + 225.368347, + 216.675751, + 68.1656647, + 325.915741, + 403.999115, + 28.3178253, + 62.6919441, + 3.6865387, + 508.810547, + 285.781067, + -0.329122841, + -7.44685984, + 9.22970581, + 33.7750626, + -0.208317906, + 0.38631627, + -0.53870976, + -0.402635098, + -0.270012736, + 0.305808514, + -0.0050985557, + -0.429981232, + -0.842507064, + -0.443783492, + 0.266736835, + -0.355429679 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + -1, + -1, + 23, + 25, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + -1, + -1, + 24, + 26, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 14, + 1, + 2, + 17, + 3, + 3, + 9, + 9, + 16, + 6, + 2, + 2, + 8, + 17, + 16, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + 2.59375, + 2.15625, + 9.46875, + -1.03125, + 0.90625, + 10.125, + -4.0625, + 0.03125, + 5.59375, + 0.5, + 0.9375, + 1.625, + 3.40625, + 1.09375, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 243.23909, + 231.141113, + 198.979858, + 73.556427, + 279.312958, + 219.461929, + 113.031128, + 74.3663483, + 9.6234436, + 159.513931, + 412.608307, + 677.347778, + 896.711121, + 49.274826, + 123.982864, + 0.0313342027, + -0.283480674, + -0.715989292, + -0.420233339, + 0.386652768, + 3.27674174, + -0.262171865, + 0.196921825, + -0.039071463, + 0.285722554, + -0.143008247, + 0.334407955, + -0.193068221, + -0.526385128, + 0.187929243, + 2.98178196 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 15, + 1, + 19, + 0, + 16, + 9, + 2, + 17, + 12, + 9, + 8, + 8, + 17, + 12, + 12, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + 2.65625, + 0.375, + 1.96875, + 0.125, + -8.0, + -0.78125, + 6.71875, + 1.0, + 6.1875, + 12.21875, + -1.96875, + 1.09375, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 257.060181, + 212.160004, + 207.286728, + 184.677902, + 263.540161, + 443.342896, + 338.568878, + 36.4823456, + 270.944855, + 54.6171875, + 229.450211, + 279.255493, + 507.070374, + 417.219208, + 440.842224, + -0.125006706, + -0.405997425, + 0.504505396, + -0.0302081201, + -0.626221836, + -0.291677982, + -0.193058118, + 0.404843718, + -0.00807972904, + 0.606006742, + 0.328308284, + -0.017173171, + -0.025610894, + 0.388695568, + 0.0464725979, + -0.177603126 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 6, + 3, + 7, + 8, + 3, + 6, + 9, + 11, + 2, + 2, + 0, + 16, + 13, + 17, + 13, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -0.90625, + -0.625, + -0.28125, + 0.21875, + 0.5625, + 0.15625, + 9.6875, + 1.5, + -1.0625, + 1.09375, + 2.40625, + 0.03125, + 5.0, + 6.34375, + 2.25, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 239.005264, + 537.457642, + 446.318665, + 847.768005, + 641.232971, + 283.414459, + 347.30426, + 222.219849, + 207.460968, + 312.856567, + 368.701477, + 103.537445, + 287.503601, + 493.758118, + 196.9599, + 0.535096467, + 0.0974690542, + 0.222340226, + -0.35722658, + -0.159519374, + 0.304017276, + -0.0161727164, + 0.342731476, + 0.222644836, + -0.323766828, + 0.231121182, + -0.00942122191, + -0.0691743046, + -0.349344909, + 0.597287774, + 0.00602016039 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 1, + 0, + 19, + 12, + 0, + 8, + 1, + 0, + 3, + 7, + 16, + 3, + 16, + 1, + 0, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.9375, + 5.3125, + 2.3125, + 2.25, + 5.625, + -9.125, + 2.40625, + 1.875, + 2.21875, + 8.0625, + 0.21875, + 0.09375, + 0.96875, + 2.28125, + 1.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 190.559875, + 219.151276, + 171.231949, + 77.7329102, + 163.176697, + 228.42984, + 126.342682, + 92.6225357, + 15.0655212, + 597.024658, + 120.241753, + 418.628479, + 265.355865, + 143.502762, + 174.836975, + -0.375292867, + -0.0408141427, + -0.418980569, + 0.173193201, + 0.300540924, + 5.48714304, + 0.187671229, + -0.375581503, + 0.295013756, + -0.218665123, + -0.0184970722, + 0.196099415, + -0.0742086396, + 0.658206046, + -0.0440622233, + -0.506188333 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 7, + 13, + 4, + 7, + 0, + 5, + 13, + 4, + 3, + 9, + 16, + 5, + -2, + 8, + 2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 7.90625, + 20.0, + -2.96875, + 2.03125, + 4.84375, + -0.34375, + 20.0, + -0.46875, + 1.0625, + 8.40625, + 0.0625, + -2.0625, + 0.0, + 9.8125, + 0.5625, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 171.607925, + 223.459381, + 281.924957, + 288.546753, + 231.152939, + 151.178467, + 246.83847, + 297.307343, + 353.789032, + 139.15036, + 127.887207, + 35.0379791, + 3.16371584, + 133.945068, + 270.592163, + -0.158300266, + 0.0125163989, + 0.0526237302, + 0.386634171, + -0.42865178, + 0.0731715187, + 0.337070137, + -0.124347821, + 0.938442528, + -0.332457572, + -0.444956869, + -1.20611215, + -0.276697755, + 0.88302201 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + -1, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + -1, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 15, + 7, + 19, + 9, + 7, + 7, + 18, + 8, + 8, + 17, + 7, + 6, + 7, + 2, + 3, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + 0.875, + -3.875, + 0.75, + -18.375, + 2.34375, + 0.25, + 0.84375, + 1.78125, + -9.53125, + 5.40625, + 7.65625, + 0.125, + 6.40625, + 1.96875, + 0.8125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 181.03212, + 181.682144, + 182.258575, + 258.917694, + 173.613373, + 305.033691, + 174.333603, + 246.178436, + 115.737061, + 50.191803, + 156.899567, + 331.145325, + 347.072723, + 46.0486603, + 233.544479, + 6.50271702, + -0.236078978, + -0.431451321, + 0.27766633, + -0.175008804, + -0.351514965, + 0.037917275, + -0.456022114, + -0.191477492, + 0.0628354475, + 0.149908245, + -0.267893404, + -0.397763938, + 0.227087051, + -0.0796295032, + 0.151942253 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ], + [ + { + "feature": [ + 9, + 7, + 14, + 16, + 6, + 1, + 0, + -2, + 0, + 3, + 0, + 6, + 5, + 1, + 19, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2, + -2 + ], + "threshold": [ + -19.375, + -2.0, + 0.75, + 0.03125, + -1.1875, + 4.375, + 0.84375, + 0.0, + 2.65625, + 1.65625, + 2.5, + -7.53125, + -0.71875, + 5.96875, + 4.53125, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "value": [ + 407.748352, + 131.435974, + 153.779678, + 11.6784668, + 142.852448, + 95.8456573, + 133.523636, + 0.258150041, + 7.64318848, + 31.9286575, + 51.5647812, + 97.2173004, + 123.659096, + 211.85556, + 134.392487, + -0.467319101, + -0.608620524, + -0.482001632, + 0.343444914, + -0.377666384, + 0.472878933, + -1.49831486, + -0.261014134, + -0.225051761, + 0.280223578, + -0.351637125, + 0.362261236, + 0.0164080262, + -0.355325937 + ], + "children_left": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + -1, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "children_right": [ + 2, + 4, + 6, + 8, + 10, + 12, + 14, + -1, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + ] + ], + "config": { + "output_dir": "/nfs/data41/rmccarth/conifer/jsonTest", + "project_name": "my_prj", + "backend": "xilinxhls", + "input_precision": "ap_fixed<13,8>", + "threshold_precision": "ap_fixed<13,8>", + "score_precision": "ap_fixed<13,8>", + "xilinx_part": "xcvu13p-flga2577-2-e", + "clock_period": "5", + "unroll": true, + "accelerator_config": null + }, + "metadata": [ + { + "version": "1.5", + "host": "torreys.colorado.edu", + "user": "rmccarth", + "time": 1730381683.43149 + } + ] +} \ No newline at end of file From 577dc3c2745cca5e3c223f8a1732ee67f0dc9d9b Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Thu, 14 Nov 2024 10:40:48 +0100 Subject: [PATCH 19/36] Adding do plot check for vertex plots --- .../test/Analyzer_DisplacedMuon.C | 157 ++++++++++++------ 1 file changed, 106 insertions(+), 51 deletions(-) diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C index 87be9725dd8d3..7d8d13160d1ae 100644 --- a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C +++ b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C @@ -1116,6 +1116,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, } //vertex cuts and plots definitions + //Note: vertCut0 needs to be set to true when making fakeEff plots std::vector> vertCuts; std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,false)); vertCuts.push_back(std::move(vertCut0)); @@ -1189,13 +1190,13 @@ void Analyzer_DisplacedMuon(TString inputFilePath, vertCuts.push_back(std::move(vertCut13)); std::unique_ptr> vertCut14(new TypedCut("min_score5p2","score>5.2",&trkVert_score,5.2,false)); vertCuts.push_back(std::move(vertCut14)); - std::unique_ptr> vertCut15(new TypedCut("min_score5p3","score>5.3",&trkVert_score,5.3,false)); + std::unique_ptr> vertCut15(new TypedCut("min_score5p3","score>5.3",&trkVert_score,5.3,true)); vertCuts.push_back(std::move(vertCut15)); - std::unique_ptr> vertCut16(new TypedCut("min_score5p4","score>5.4",&trkVert_score,5.4,false)); + std::unique_ptr> vertCut16(new TypedCut("min_score5p35","score>5.35",&trkVert_score,5.35,false)); vertCuts.push_back(std::move(vertCut16)); - std::unique_ptr> vertCut17(new TypedCut("min_score5p5","score>5.5",&trkVert_score,5.5,true)); + std::unique_ptr> vertCut17(new TypedCut("min_score5p4","score>5.4",&trkVert_score,5.4,false)); vertCuts.push_back(std::move(vertCut17)); - std::unique_ptr> vertCut18(new TypedCut("min_score5p55","score>5.55",&trkVert_score,5.55,true)); + std::unique_ptr> vertCut18(new TypedCut("min_score5p45","score>5.45",&trkVert_score,5.45,true)); vertCuts.push_back(std::move(vertCut18)); std::vector> vertCutFlows; @@ -1287,50 +1288,68 @@ void Analyzer_DisplacedMuon(TString inputFilePath, std::vector vertType = {"matched","unmatched"}; std::vector vertTypeTP = {"matched","all"}; std::vector vertPlotTPModifiers = {"","_oneMatch"}; - - TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCuts.size()]; - TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCuts.size()][vertPlotTPModifiers.size()]; + uint vertCutsSize = 0; + for(uint i=0; igetDoPlot()) vertCutsSize++; + } + + TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCutsSize]; + TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCutsSize][vertPlotTPModifiers.size()]; TH1F* vertexCutFlowsTP[vertCutFlowsTP.size()][vertPlotTPModifiers.size()]; TH1F* vertexNumVertices[vertCuts.size()]; TH1F* fiducialNumVertices[vertCuts.size()]; for(uint i=0; igetDoPlot()){ + i_plot++; + } + else{ + continue; + } TString name = "h_trackVertex_"+vertCutFlows[i]->getVarName()+"_"+vertType[j]+"_"+vertCuts[k]->getCutName()+"Cut"; if(vertCutFlows[i]->getMaxBin()==vertCutFlows[i]->getMinBin()){ TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events "; std::vector bins = vertCutFlows[i]->getBins(); TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),bins.data()); - vertexCutFlows[i][j][k] = hist; + vertexCutFlows[i][j][i_plot] = hist; } else{ float binWidth = (vertCutFlows[i]->getMaxBin() - vertCutFlows[i]->getMinBin()) / vertCutFlows[i]->getNumBins(); TString binLabel = std::to_string(binWidth); TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlows[i]->getUnit(); TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),vertCutFlows[i]->getMinBin(),vertCutFlows[i]->getMaxBin()); - vertexCutFlows[i][j][k] = hist; + vertexCutFlows[i][j][i_plot] = hist; } } } } for(uint i=0; igetDoPlot()){ + i_plot++; + } + else{ + continue; + } for(uint m=0; mgetVarName()+"_"+vertTypeTP[0]+"_"+vertCuts[k]->getCutName()+"Cut"+vertPlotTPModifiers[m]; if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; std::vector bins = vertCutFlowsTP[i]->getBins(); TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); - vertexCutFlowsMatchTP[i][k][m] = hist; + vertexCutFlowsMatchTP[i][i_plot][m] = hist; } else{ float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); TString binLabel = std::to_string(binWidth); TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); - vertexCutFlowsMatchTP[i][k][m] = hist; + vertexCutFlowsMatchTP[i][i_plot][m] = hist; } } } @@ -1437,6 +1456,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, if (tree == 0) return; Long64_t nevt = tree->GetEntries(); Long64_t n_findableEvent = 0; + Long64_t n_trueVertexEvent = 0; //nevt = 100; Vertex_Parameters geomTrackVertex; Vertex_Parameters geomTrueVertex; @@ -1462,6 +1482,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, int maxPT_i = 0; bool oneMatch = false; bool findableEvent = false; + bool trueVertexEvent = false; std::valarray trkMET = {0.0,0.0}; float trkH_T = 0.0; @@ -1692,7 +1713,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, // -------------------------------------------------------------------------------------------- // Vertex finding in Tracking Particles // -------------------------------------------------------------------------------------------- - if (!(selectedTracks.size() >= 2)) continue; + //if (!(selectedTracks.size() >= 2)) continue; double_t x_dv = -9999.0;// (tp_x->at((*selectedTPs)[0]->index));//+tp_x->at((*selectedTPs)[1]->index))/2.0; double_t y_dv = -9999.0;// (tp_y->at((*selectedTPs)[0]->index));//+tp_y->at((*selectedTPs)[1]->index))/2.0; double_t z_dv = -9999.0;// (tp_z->at((*selectedTPs)[0]->index));//+tp_z->at((*selectedTPs)[1]->index))/2.0; @@ -1763,6 +1784,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, h_trueVertex_charge_vs_numTPs->Fill(trueVertices[i].tracks.size(),netCharge); if(netCharge==0){ + trueVertexEvent = true; float chargeOfFirstTrack = 0.0; for(uint itrack=0; itrack(end - begin).count(); begin = std::chrono::steady_clock::now(); - bool filledOneMatch[vertCuts.size()]; - bool isMatchedVec[trueVertices.size()][vertCuts.size()]; + bool filledOneMatch[vertCutsSize]; + bool isMatchedVec[trueVertices.size()][vertCutsSize]; uint numVertices[vertCuts.size()]; for(uint i = 0; isize(); it++){ + uint i_plot = -1; for(uint i=0; igetDoPlot()){ + i_plot++; + } TString cutName = vertCuts[i]->getCutName(); float cutValue = vertCuts[i]->getCutValue(); //std::cout<<"cutName: "<at(it)<<" "<at(it)<cutValue) break; if(cutName.Contains("min") && paramgetDoPlot()) continue; for(uint j=0; jgetParam(it); } - vertexCutFlows[k][j][i]->Fill(param); + vertexCutFlows[k][j][i_plot]->Fill(param); } if(vertType[j]=="matched"){ for(uint k=0; kgetParam(tpVert_indexTPs[jt][iTP]); param = fabs(param1 - param2); - vertexCutFlowsMatchTP[m][i][k]->Fill(param); + vertexCutFlowsMatchTP[m][i_plot][k]->Fill(param); } continue; } @@ -2061,7 +2090,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, else{ param = vertCutFlowsTP[m]->getParam(jt); } - vertexCutFlowsMatchTP[m][i][k]->Fill(param); + vertexCutFlowsMatchTP[m][i_plot][k]->Fill(param); } } break; @@ -2079,6 +2108,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, if(findableEvent) fiducialNumVertices[i]->Fill(numVertices[i]); } if(findableEvent) n_findableEvent++; + if(trueVertexEvent) n_trueVertexEvent++; delete tpVert_d_T; delete tpVert_R_T; @@ -2452,9 +2482,9 @@ void Analyzer_DisplacedMuon(TString inputFilePath, for(uint j=0; jgetVarName().Contains("highPt")) std::cout<<"onematch entries: "<GetEntries()<<" "<GetEntries()<Clone(); - h_eff->Divide(vertexCutFlowsMatchTP[j][vertCuts.size()-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); + removeFlows(vertexCutFlowsMatchTP[j][vertCutsSize-1][i]); + TH1F* h_eff = (TH1F*)vertexCutFlowsMatchTP[j][vertCutsSize-1][i]->Clone(); + h_eff->Divide(vertexCutFlowsMatchTP[j][vertCutsSize-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); raiseMax(h_eff); h_eff->SetStats(0); h_eff->SetAxisRange(0, 1.1, "Y"); @@ -2467,10 +2497,17 @@ void Analyzer_DisplacedMuon(TString inputFilePath, for(uint i=0; iClear(); + uint i_plot = -1; for(uint j=0; jClone(); - h_findEff->Divide(vertexCutFlowsMatchTP[i][j][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); + if(vertCuts[j]->getDoPlot()){ + i_plot++; + } + else{ + continue; + } + removeFlows(vertexCutFlowsMatchTP[i][i_plot][0]); + TH1F* h_findEff = (TH1F*)vertexCutFlowsMatchTP[i][i_plot][0]->Clone(); + h_findEff->Divide(vertexCutFlowsMatchTP[i][i_plot][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); h_findEff->SetStats(0); if(j!=9){ h_findEff->SetLineColor(j+1); @@ -2504,7 +2541,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, std::cout<<"binErrors: "<SetAxisRange(0, 1.1, "Y"); h_findEff->Draw(); @@ -2517,14 +2554,22 @@ void Analyzer_DisplacedMuon(TString inputFilePath, l->Draw(); c.SaveAs(VERTDIR + "/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"); } +#if 0 std::cout<<"fakeEff_trackVertex"<Clear(); + uint i_plot = 0; for(uint j=1; jClone(); - h_fakeEff->Divide(vertexCutFlows[i][1][j],vertexCutFlows[i][1][0],1.0,1.0,"B"); + if(vertCuts[j]->getDoPlot()){ + i_plot++; + } + else{ + continue; + } + removeFlows(vertexCutFlows[i][1][i_plot]); + TH1F* h_fakeEff = (TH1F*)vertexCutFlows[i][1][i_plot]->Clone(); + h_fakeEff->Divide(vertexCutFlows[i][1][i_plot],vertexCutFlows[i][1][0],1.0,1.0,"B"); h_fakeEff->SetStats(0); if(j!=10){ h_fakeEff->SetLineColor(j); @@ -2535,7 +2580,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, h_fakeEff->SetMarkerColor(40); } l->AddEntry(h_fakeEff,vertCuts[j]->getCutLabel(),"lp"); - if(j==1){ + if(i_plot==1){ raiseMax(h_fakeEff); h_fakeEff->Draw(); } @@ -2545,44 +2590,53 @@ void Analyzer_DisplacedMuon(TString inputFilePath, } mySmallText(0.3, 0.9, 1, ctxt); l->Draw(); + std::cout<<"h_fakeEff_trackVertex_" + vertCutFlows[i]->getVarName()<getVarName() + ".pdf"); } +#endif std::cout<<"correctVsFalse"<getDoPlot()){ + i_plot++; + } + else{ + continue; + } l->Clear(); for(uint k=0; kSetStats(0); - vertexCutFlows[i][k][j]->Scale(1./vertexCutFlows[i][k][j]->Integral()); + removeFlows(vertexCutFlows[i][k][i_plot]); + vertexCutFlows[i][k][i_plot]->SetStats(0); + vertexCutFlows[i][k][i_plot]->Scale(1./vertexCutFlows[i][k][i_plot]->Integral()); TString varString = vertCutFlows[i]->getVarName(); if(varString.Contains("score") || varString.Contains("R_T")){ std::cout<<"/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"<GetNbinsX()+1); ibin++){ - binValues+=to_string(vertexCutFlows[i][k][j]->GetBinContent(ibin)) + ", "; + for(int ibin=1; ibin<(vertexCutFlows[i][k][i_plot]->GetNbinsX()+1); ibin++){ + binValues+=to_string(vertexCutFlows[i][k][i_plot]->GetBinContent(ibin)) + ", "; } binValues+="]"; std::cout<<"binValues: "<SetLineColor(k+1); - vertexCutFlows[i][k][j]->SetMarkerColor(k+1); + vertexCutFlows[i][k][i_plot]->SetLineColor(k+1); + vertexCutFlows[i][k][i_plot]->SetMarkerColor(k+1); } else{ - vertexCutFlows[i][k][j]->SetLineColor(40); - vertexCutFlows[i][k][j]->SetMarkerColor(40); + vertexCutFlows[i][k][i_plot]->SetLineColor(40); + vertexCutFlows[i][k][i_plot]->SetMarkerColor(40); } - l->AddEntry(vertexCutFlows[i][k][j],vertType[k],"l"); + l->AddEntry(vertexCutFlows[i][k][i_plot],vertType[k],"l"); if(k==0){ - removeFlows(vertexCutFlows[i][k+1][j]); - vertexCutFlows[i][k+1][j]->Scale(1./vertexCutFlows[i][k+1][j]->Integral()); - raiseMax(vertexCutFlows[i][k][j],vertexCutFlows[i][k+1][j]); - vertexCutFlows[i][k][j]->Draw("HIST"); + removeFlows(vertexCutFlows[i][k+1][i_plot]); + vertexCutFlows[i][k+1][i_plot]->Scale(1./vertexCutFlows[i][k+1][i_plot]->Integral()); + raiseMax(vertexCutFlows[i][k][i_plot],vertexCutFlows[i][k+1][i_plot]); + vertexCutFlows[i][k][i_plot]->Draw("HIST"); } else{ - vertexCutFlows[i][k][j]->Draw("HIST,SAME"); + vertexCutFlows[i][k][i_plot]->Draw("HIST,SAME"); } } mySmallText(0.3, 0.9, 1, ctxt); @@ -2988,6 +3042,7 @@ void Analyzer_DisplacedMuon(TString inputFilePath, } std::cout<<"fiducial triggerEff"<GetNbinsX()+1); j++){ numTriggers += fiducialNumVertices[i]->GetBinContent(j); } - //std::cout<<"i cut: "<getCutName()<<" trigger efficiency of total events: "<SetBinContent(i,numTriggers/n_findableEvent); h_fiducialTriggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); } @@ -3302,13 +3357,13 @@ void Analyzer_DisplacedMuon(TString inputFilePath, } for(uint i=0; i Date: Thu, 14 Nov 2024 15:39:09 +0100 Subject: [PATCH 20/36] Cleaning up code --- .../L1Trigger/interface/DisplacedVertex.h | 5 - .../interface/DisplacedVertexProducer.h | 50 +-------- .../plugins/DisplacedVertexProducer.cc | 103 +----------------- .../python/DisplacedVertexProducer_cfi.py | 1 - .../test/L1TrackObjectNtupleMaker.cc | 6 - 5 files changed, 4 insertions(+), 161 deletions(-) diff --git a/DataFormats/L1Trigger/interface/DisplacedVertex.h b/DataFormats/L1Trigger/interface/DisplacedVertex.h index b2064f774ed0c..d80f8e17f4e21 100644 --- a/DataFormats/L1Trigger/interface/DisplacedVertex.h +++ b/DataFormats/L1Trigger/interface/DisplacedVertex.h @@ -36,8 +36,6 @@ namespace l1t { typedef std::vector DisplacedTrueVertexCollection; class DisplacedTrackVertex { - public: - typedef ap_fixed<13,8,AP_RND_CONV, AP_SAT> score_t; public: DisplacedTrackVertex(int firstIndexTrk, @@ -69,7 +67,6 @@ namespace l1t { DisplacedTrackVertex() {} ~DisplacedTrackVertex() {} void setScore(float score) { score_ = score; } - void setScoreEmu(score_t scoreEmu) { scoreEmu_ = scoreEmu; } float d_T() const { return d_T_; } float R_T() const { return R_T_; } float cos_T() const { return cos_T_; } @@ -84,7 +81,6 @@ namespace l1t { float del_Z() const { return del_Z_; } bool isReal() const { return isReal_; } float score() const { return score_; } - score_t scoreEmu() const { return scoreEmu_; } private: int firstIndexTrk_; @@ -101,7 +97,6 @@ namespace l1t { float parentPt_; bool isReal_; float score_; - score_t scoreEmu_; }; typedef std::vector DisplacedTrackVertexCollection; diff --git a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h index f8e3c1f9c78e5..f41f121aa104b 100644 --- a/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h +++ b/L1Trigger/L1TTrackMatch/interface/DisplacedVertexProducer.h @@ -28,18 +28,12 @@ class Track_Parameters { public: float pt; float d0; - float dxy = -99999; float z0; float eta; float phi; float charge; float rho; int index; - int pdgid = -99999; - float vx; - float vy; - float vz; - Track_Parameters* tp; float x0; float y0; int nstubs; @@ -61,13 +55,8 @@ class Track_Parameters { float z0_in, float eta_in, float phi_in, - int pdgid_in, - float vx_in, - float vy_in, - float vz_in, float rho_in = 0, int index_in = -1, - Track_Parameters* tp_in = nullptr, int nstubs_in = 0, float chi2rphi_in = 0, float chi2rz_in = 0, @@ -86,11 +75,6 @@ class Track_Parameters { charge = 0; } index = index_in; - pdgid = pdgid_in; - vx = vx_in; - vy = vy_in; - vz = vz_in; - tp = tp_in; rho = fabs(rho_in); x0 = (rho + charge * d0) * TMath::Cos(phi - (charge * TMath::Pi() / 2)); y0 = (rho + charge * d0) * TMath::Sin(phi - (charge * TMath::Pi() / 2)); @@ -122,42 +106,28 @@ class Vertex_Parameters { Double_t x_dv; Double_t y_dv; Double_t z_dv; - float score; Track_Parameters a; Track_Parameters b; - int inTraj; - bool matched = false; std::vector tracks = {}; float p_mag; float p2_mag; float openingAngle = -999.0; float R_T; float cos_T = -999.0; - float alpha_T = -999.0; float d_T; - float chi2rphidofSum; - float chi2rzdofSum; - float bendchi2Sum; - float MVA1Sum; - int numStubsSum; float delta_z; - float delta_eta; float phi; Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, - Track_Parameters b_in, - float score_in = -1, - int inTraj_in = 4) + Track_Parameters b_in) : a(a_in), b(b_in) { x_dv = x_dv_in; y_dv = y_dv_in; z_dv = z_dv_in; - score = score_in; tracks.push_back(a_in); tracks.push_back(b_in); - inTraj = inTraj_in; std::valarray p_trk_1 = calcPVec(a_in, x_dv_in, y_dv_in); std::valarray p_trk_2 = calcPVec(b_in, x_dv_in, y_dv_in); std::valarray p_tot = p_trk_1 + p_trk_2; @@ -170,26 +140,11 @@ class Vertex_Parameters { R_T = TMath::Sqrt(pow(x_dv_in, 2) + pow(y_dv_in, 2)); if ((R_T != 0.0) && ((p_tot[0] != 0.0) || (p_tot[1] != 0.0))) { cos_T = (p_tot[0] * x_dv_in + p_tot[1] * y_dv_in) / (R_T * TMath::Sqrt(pow(p_tot[0], 2) + pow(p_tot[1], 2))); - alpha_T = acos(cos_T); } phi = atan2(p_tot[1], p_tot[0]); d_T = fabs(cos(phi) * y_dv_in - sin(phi) * x_dv_in); - int ndof_1 = 2 * a_in.nstubs - 5; - float chi2rphidof_1 = a_in.chi2rphi / ndof_1; - float chi2rzdof_1 = a_in.chi2rz / ndof_1; - float bendchi2_1 = a_in.bendchi2; - int ndof_2 = 2 * b_in.nstubs - 5; - float chi2rphidof_2 = b_in.chi2rphi / ndof_2; - float chi2rzdof_2 = b_in.chi2rz / ndof_2; - float bendchi2_2 = b_in.bendchi2; - chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; - chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; - bendchi2Sum = bendchi2_1 + bendchi2_2; - MVA1Sum = a_in.MVA1 + b_in.MVA1; - numStubsSum = a_in.nstubs + b_in.nstubs; p2_mag = pow(a_in.pt, 2) + pow(b_in.pt, 2); delta_z = fabs(a_in.z(x_dv_in, y_dv_in) - b_in.z(x_dv_in, y_dv_in)); - delta_eta = fabs(a_in.eta - b_in.eta); } Vertex_Parameters(){}; @@ -217,11 +172,10 @@ class DisplacedVertexProducer : public edm::global::EDProducer<> { const edm::EDGetTokenT>> trackGTTToken_; const std::string outputTrackCollectionName_; const std::string outputTrackEmulationCollectionName_; - const std::string qualityAlgorithm_; const std::string model_; const bool runEmulation_; const edm::ParameterSet cutSet_; - const double chi2rzMax_, dispMVAMin_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, + const double chi2rzMax_, promptMVAMin_, ptMin_, etaMax_, dispD0Min_, promptMVADispTrackMin_, overlapEtaMin_, overlapEtaMax_; const int overlapNStubsMin_; const double diskEtaMin_, diskD0Min_, barrelD0Min_, RTMin_, RTMax_; diff --git a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc index 0699e4283459e..f8676bbe20877 100644 --- a/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/DisplacedVertexProducer.cc @@ -174,7 +174,6 @@ DisplacedVertexProducer::DisplacedVertexProducer(const edm::ParameterSet& iConfi runEmulation_(iConfig.getParameter("runEmulation")), cutSet_(iConfig.getParameter("cutSet")), chi2rzMax_(cutSet_.getParameter("chi2rzMax")), - dispMVAMin_(cutSet_.getParameter("dispMVAMin")), promptMVAMin_(cutSet_.getParameter("promptMVAMin")), ptMin_(cutSet_.getParameter("ptMin")), etaMax_(cutSet_.getParameter("etaMax")), @@ -208,39 +207,24 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e //Simulation track selection loop for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { edm::Ptr> l1track_ptr(TTTrackHandle, this_l1track); - edm::Ptr> l1track_GTTptr(TTTrackGTTHandle, this_l1track); this_l1track++; float pt = l1track_ptr->momentum().perp(); - //float pt = FloatPtFromBits(*l1track_GTTptr); float eta = l1track_ptr->momentum().eta(); - //float eta = FloatEtaFromBits(*l1track_GTTptr); float phi = l1track_ptr->momentum().phi(); - //float phi = FloatPhiFromBits(*l1track_GTTptr); float z0 = l1track_ptr->z0(); //cm - //float z0 = l1track_GTTptr->getZ0(); float x0 = l1track_ptr->POCA().x(); float y0 = l1track_ptr->POCA().y(); float d0 = -x0 * sin(phi) + y0 * cos(phi); - //float d0 = l1track_GTTptr->getD0(); float rinv = l1track_ptr->rInv(); - //int charge = ChargeFromBits(*l1track_GTTptr); - //float rho = charge*convertPtToR(pt); float chi2rphi = l1track_ptr->chi2XYRed(); - //float chi2rphi = l1track_GTTptr->getChi2RPhi(); float chi2rz = l1track_ptr->chi2ZRed(); - //float chi2rz = l1track_GTTptr->getChi2RZ(); float bendchi2 = l1track_ptr->stubPtConsistency(); - //float bendchi2 = l1track_GTTptr->getBendChi2(); float MVA1 = l1track_ptr->trkMVA1(); - //float MVA1 = l1track_GTTptr->getMVAQuality()+0.005; - //float MVA2 = l1track_ptr->trkMVA2(); std::vector>, TTStub>> stubRefs = l1track_ptr->getStubRefs(); int nstub = (int)stubRefs.size(); - //int nstub = l1track_GTTptr->getNStubs(); - //std::cout<<"simulation track pt: "< promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { if (fabs(d0) > dispD0Min_) { @@ -265,13 +249,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e z0, eta, phi, - -99999, - -999, - -999, - -999, (1/rinv), (this_l1track - 1), - nullptr, nstub, chi2rphi, chi2rz, @@ -289,32 +268,10 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e edm::Ptr> l1track_ptr(TTTrackGTTHandle, this_l1track); edm::Ptr> l1track_ref(TTTrackHandle, this_l1track); this_l1track++; - -#if 0 - float ptSim = l1track_ptr->momentum().perp(); - float etaSim = l1track_ptr->momentum().eta(); - float phiSim = l1track_ptr->momentum().phi(); - float z0Sim = l1track_ptr->z0(); //cm - float x0Sim = l1track_ptr->POCA().x(); - float y0Sim = l1track_ptr->POCA().y(); - float d0Sim = -x0Sim * sin(phiSim) + y0Sim * cos(phiSim); - int chargeSim = (int)(l1track_ptr->rInv() / fabs(l1track_ptr->rInv())); - float chi2Sim = l1track_ptr->chi2Red(); - float chi2rphiSim = l1track_ptr->chi2XYRed(); - float chi2rzSim = l1track_ptr->chi2ZRed(); - float bendchi2Sim = l1track_ptr->stubPtConsistency(); - float MVA1Sim = l1track_ptr->trkMVA1(); - std::vector>, TTStub>> - stubRefsSim = l1track_ptr->getStubRefs(); - int nstubSim = (int)stubRefsSim.size(); - - //std::cout<<"simulation track pt: "<getZ0(); //cm float d0 = l1track_ptr->getD0(); int charge = ChargeFromBits(*l1track_ptr); @@ -323,12 +280,7 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e float chi2rz = l1track_ptr->getChi2RZ(); float bendchi2 = l1track_ptr->getBendChi2(); float MVA1 = l1track_ptr->getMVAQuality(); - //float MVA2 = l1track_ptr->trkMVA2(); - //std::vector>, TTStub>> - //stubRefs = l1track_ptr->getStubRefs(); int nstub = l1track_ptr->getNStubs(); - - //std::cout<<"emulation track pt: "< promptMVAMin_ && pt > ptMin_ && fabs(eta) < etaMax_) { if (fabs(d0) > dispD0Min_) { @@ -353,13 +305,8 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e z0, eta, phi, - -99999, - -999, - -999, - -999, rho, (this_l1track - 1), - nullptr, nstub, chi2rphi, chi2rz, @@ -371,17 +318,12 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e } } - - //int numIntersections = 0; - //int numVertices = 0; - //std::cout<<"simulated number of tracks passing cuts: "< product(new std::vector()); for (int i = 0; i < int(selectedTracksWithTruth.size() - 1); i++) { for (int j = i + 1; j < int(selectedTracksWithTruth.size()); j++) { if (dist_TPs(selectedTracksWithTruth[i].first, selectedTracksWithTruth[j].first) != 0) continue; - //numIntersections++; Double_t x_dv_trk = -9999.0; Double_t y_dv_trk = -9999.0; Double_t z_dv_trk = -9999.0; @@ -425,9 +367,6 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.p_mag, isReal); - float minD0 = vertex.a.d0; - if (fabs(vertex.b.d0) < fabs(minD0)) - minD0 = vertex.b.d0; std::vector Transformed_features = {float(selectedTracksWithTruth[i].first.pt*0.25), float(selectedTracksWithTruth[j].first.pt*0.25), selectedTracksWithTruth[i].first.eta, @@ -449,43 +388,23 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.cos_T, float(vertex.delta_z*0.125)}; - //std::vector TransformedFloat_features; - //for(auto feature: Transformed_features){ - //TransformedFloat_features.push_back(feature); - //} -#if 0 - if(isReal){ - std::cout<<"simulation features: "< bdt(this->model_); std::vector output = bdt.decision_function(Transformed_features); - //outputVertex.setScore(1. / (1. + exp(-output.at(0)))); outputVertex.setScore(output.at(0)); - //if(isReal) std::cout<<"vertex true position: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0))))<<" raw score: "<emplace_back(outputVertex); - //numVertices++; } } - //std::cout<<"simulation number of intersections: "< productEmulation(new std::vector()); for (int i = 0; i < int(selectedTracksEmulationWithTruth.size() - 1); i++) { for (int j = i + 1; j < int(selectedTracksEmulationWithTruth.size()); j++) { if (dist_TPs(selectedTracksEmulationWithTruth[i].first, selectedTracksEmulationWithTruth[j].first) != 0) continue; - //numIntersectionsEmu++; Double_t x_dv_trk = -9999.0; Double_t y_dv_trk = -9999.0; Double_t z_dv_trk = -9999.0; @@ -529,10 +448,6 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.p_mag, isReal); - float minD0 = vertex.a.d0; - if (fabs(vertex.b.d0) < fabs(minD0)) - minD0 = vertex.b.d0; - //std::cout<<"first pt: "<> Transformed_features = {selectedTracksEmulationWithTruth[i].first.pt*0.25, selectedTracksEmulationWithTruth[j].first.pt*0.25, selectedTracksEmulationWithTruth[i].first.eta, @@ -553,27 +468,13 @@ void DisplacedVertexProducer::produce(edm::StreamID, edm::Event& iEvent, const e vertex.R_T, vertex.cos_T, vertex.delta_z*0.125}; -#if 0 - if(isReal){ - std::cout<<"emulation features: "<, ap_fixed<13,8,AP_RND_CONV, AP_SAT>> bdt(this->model_); std::vector> output = bdt.decision_function(Transformed_features); - //std::cout<<"transformed first pt: "<vx()<<" "<vy()<<" "<vz()<<" score: "<<(1. / (1. + exp(-output.at(0).to_float())))<<" raw score: "<emplace_back(outputVertex); - //numVerticesEmu++; } } - //std::cout<<"emulation number of intersections: "<* m_dvEmu_del_Z; std::vector* m_dvEmu_isReal; std::vector* m_dvEmu_score; - std::vector* m_dvEmu_scoreEmu; std::vector* m_dvEmuFixed_d_T; std::vector* m_dvEmuFixed_R_T; @@ -1086,7 +1085,6 @@ void L1TrackObjectNtupleMaker::endJob() { delete m_dvEmu_del_Z; delete m_dvEmu_isReal; delete m_dvEmu_score; - delete m_dvEmu_scoreEmu; delete m_dvEmuFixed_d_T; delete m_dvEmuFixed_R_T; @@ -1565,7 +1563,6 @@ void L1TrackObjectNtupleMaker::beginJob() { m_dvEmu_del_Z = new std::vector; m_dvEmu_isReal = new std::vector; m_dvEmu_score = new std::vector; - m_dvEmu_scoreEmu = new std::vector; m_dvEmuFixed_d_T = new std::vector; m_dvEmuFixed_R_T = new std::vector; @@ -2017,7 +2014,6 @@ void L1TrackObjectNtupleMaker::beginJob() { eventTree->Branch("dvEmu_del_Z", &m_dvEmu_del_Z); eventTree->Branch("dvEmu_isReal", &m_dvEmu_isReal); eventTree->Branch("dvEmu_score", &m_dvEmu_score); - eventTree->Branch("dvEmu_scoreEmu", &m_dvEmu_scoreEmu); eventTree->Branch("dvEmuFixed_d_T", &m_dvEmuFixed_d_T); eventTree->Branch("dvEmuFixed_R_T", &m_dvEmuFixed_R_T); @@ -2333,7 +2329,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dvEmu_del_Z->clear(); m_dvEmu_isReal->clear(); m_dvEmu_score->clear(); - m_dvEmu_scoreEmu->clear(); m_dvEmuFixed_d_T->clear(); m_dvEmuFixed_R_T->clear(); @@ -2770,7 +2765,6 @@ void L1TrackObjectNtupleMaker::analyze(const edm::Event& iEvent, const edm::Even m_dvEmu_del_Z->push_back(tmp_dvEmu_del_Z); m_dvEmu_isReal->push_back(dispVertEmulationIter->isReal()); m_dvEmu_score->push_back(dispVertEmulationIter->score()); - m_dvEmu_scoreEmu->push_back(dispVertEmulationIter->scoreEmu().to_float()); m_dvEmuFixed_d_T->push_back(tmp_dvEmuFixed_d_T.to_float()); m_dvEmuFixed_R_T->push_back(tmp_dvEmuFixed_R_T.to_float()); From 96b9459083428f9088c853edae7d717e17a3fa47 Mon Sep 17 00:00:00 2001 From: Ryan McCarthy Date: Thu, 14 Nov 2024 17:22:13 +0100 Subject: [PATCH 21/36] Deleting unused models and scripts --- .../test/Analyzer_DisplacedMuon.C | 3600 ------- .../dispVertTaggerEmulationFixedPoint.json | 8285 ----------------- L1Trigger/L1TTrackMatch/test/saveModelJson.py | 5 - .../test/trackAndVert_NewTQMVA_model.onnx | Bin 3089729 -> 0 bytes .../data/clf_GBDT_newbin_disp_xgb.onnx | Bin 118038 -> 0 bytes 5 files changed, 11890 deletions(-) delete mode 100644 L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C delete mode 100644 L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json delete mode 100644 L1Trigger/L1TTrackMatch/test/saveModelJson.py delete mode 100644 L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx delete mode 100644 L1Trigger/TrackTrigger/data/clf_GBDT_newbin_disp_xgb.onnx diff --git a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C b/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C deleted file mode 100644 index 7d8d13160d1ae..0000000000000 --- a/L1Trigger/L1TTrackMatch/test/Analyzer_DisplacedMuon.C +++ /dev/null @@ -1,3600 +0,0 @@ - -// // ---------------------------------------------------------------------------------------------------------------- -// // Feasibility study of using L1 Tracks to identify Displaced Vertex -// // -// // By Bharadwaj Harikrishnan, May 2021 -// // Edited by Ryan McCarthy, Sept 2021 -// // ---------------------------------------------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include "TFile.h" -#include "TTree.h" -#include "TChain.h" -#include "TBranch.h" -#include "TLeaf.h" -#include -#include "TLegend.h" -#include "TH1.h" -#include "TH2.h" -#include "TF1.h" -#include "TGraph.h" -#include "TMath.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -bool detailedPlots = false; -float d0_res = 0.02152; //cm - -void SetPlotStyle(); -void mySmallText(Double_t x, Double_t y, Color_t color, char *text); -void removeFlows(TH1F* h); -void removeFlows(TH2F* h); - -class Track_Parameters -{ -public: - float pt; - float d0; - float dxy = -99999; - float z0; - float eta; - float phi; - float charge; - float rho; - int index; - int pdgid = -99999; - float vx; - float vy; - float vz; - Track_Parameters* tp; - float x0; - float y0; - int nstubs; - float chi2rphi; - float chi2rz; - float bendchi2; - float MVA1; - - float dist_calc(float x_dv, float y_dv, float x, float y){ - dxy = TMath::Sqrt((x_dv-x)*(x_dv-x) + (y_dv-y)*(y_dv-y)); - return dxy; - } - float x(float phi_T=0){ - return (-charge * rho * TMath::Sin(phi - charge*phi_T) + (d0 + charge * rho) * TMath::Sin(phi)); - } - float y(float phi_T=0){ - return ( charge * rho * TMath::Cos(phi - charge*phi_T) - (d0 + charge * rho) * TMath::Cos(phi)); - } - float z(float phi_T=0){ - float theta = 2 * TMath::ATan(TMath::Exp(-eta)); - return (z0 + rho*phi_T/TMath::Tan(theta)); - } - float deltaPhi_T(Double_t phi1, Double_t phi2) - { - Double_t dPhi = phi1 - phi2; - if (dPhi >= TMath::Pi()) - dPhi -= 2. * TMath::Pi(); - if (dPhi <= -TMath::Pi()) - dPhi += 2. * TMath::Pi(); - return dPhi; - } - float phi_T(float x, float y){ - float num = x - (d0 + charge * rho) * TMath::Sin(phi); - float den = y + (d0 + charge * rho) * TMath::Cos(phi); - return ((phi-TMath::ATan2(num,-den))/charge); - } - float z(float x, float y){ - float t = std::sinh(eta); - float r = TMath::Sqrt(pow(x,2)+pow(y,2)); - return (z0+(t*r*(1+(pow(d0,2)/pow(r,2))+(1.0/6.0)*pow(r/(2*rho),2)))); // can do higher order terms if necessary from displaced math - } - Track_Parameters(float pt_in, float d0_in, float z0_in, float eta_in, float phi_in, int pdgid_in, float vx_in, float vy_in, float vz_in, float charge_in=0, int index_in=-1, Track_Parameters* tp_in=nullptr, int nstubs_in=0, float chi2rphi_in=0, float chi2rz_in=0, float bendchi2_in=0, float MVA1_in=0) - { - pt = pt_in; - d0 = d0_in; - z0 = z0_in; - eta = eta_in; - phi = phi_in; - if(charge_in > 0){ - charge = 1; - } - else if (charge_in < 0){ - charge = -1; - } - else{ - charge = 0; - } - index = index_in; - pdgid = pdgid_in; - vx = vx_in; - vy = vy_in; - vz = vz_in; - tp = tp_in; - rho = fabs(1/charge_in); - x0 = (rho+charge*d0)*TMath::Cos(phi-(charge*TMath::Pi()/2)); - y0 = (rho+charge*d0)*TMath::Sin(phi-(charge*TMath::Pi()/2)); - nstubs = nstubs_in; - chi2rphi = chi2rphi_in; - chi2rz = chi2rz_in; - bendchi2 = bendchi2_in; - MVA1 = MVA1_in; - } - Track_Parameters(){}; - ~Track_Parameters(){}; -}; - -constexpr bool operator==(const Track_Parameters* lhs, const Track_Parameters& rhs) -{ - return (lhs->pt==rhs.pt && lhs->d0==rhs.d0 && lhs->z0==rhs.z0 && lhs->eta==rhs.eta && lhs->phi==rhs.phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters* rhs) -{ - return (lhs.pt==rhs->pt && lhs.d0==rhs->d0 && lhs.z0==rhs->z0 && lhs.eta==rhs->eta && lhs.phi==rhs->phi); -} -constexpr bool operator==(const Track_Parameters& lhs, const Track_Parameters& rhs) -{ - return (lhs.pt==rhs.pt && lhs.d0==rhs.d0 && lhs.z0==rhs.z0 && lhs.eta==rhs.eta && lhs.phi==rhs.phi); -} - -std::valarray calcPVec(Track_Parameters a, double_t v_x, double_t v_y) -{ - std::valarray r_vec = {float(v_x)-a.x0,float(v_y)-a.y0}; - std::valarray p_vec = {-r_vec[1],r_vec[0]}; - if(a.charge>0){ - p_vec *= -1; - } - p_vec /= TMath::Sqrt(pow(p_vec[0],2)+pow(p_vec[1],2)); - p_vec *= a.pt; - return p_vec; -} - -class Vertex_Parameters -{ -public: - Double_t x_dv; - Double_t y_dv; - Double_t z_dv; - float score; - Track_Parameters a; - Track_Parameters b; - int inTraj; - bool matched = false; - std::vector tracks = {}; - float p_mag; - float p2_mag; - float openingAngle; - float R_T; - float cos_T; - float alpha_T; - float d_T; - float chi2rphidofSum; - float chi2rzdofSum; - float bendchi2Sum; - float MVA1Sum; - int numStubsSum; - float delta_z; - float delta_eta; - float phi; - Vertex_Parameters(Double_t x_dv_in, Double_t y_dv_in, Double_t z_dv_in, Track_Parameters a_in, Track_Parameters b_in, float score_in=-1, int inTraj_in=4): - a(a_in), - b(b_in) - { - x_dv = x_dv_in; - y_dv = y_dv_in; - z_dv = z_dv_in; - score = score_in; - tracks.push_back(a_in); - tracks.push_back(b_in); - inTraj = inTraj_in; - std::valarray p_trk_1 = calcPVec(a_in,x_dv_in,y_dv_in); - std::valarray p_trk_2 = calcPVec(b_in,x_dv_in,y_dv_in); - std::valarray p_tot = p_trk_1+p_trk_2; - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - openingAngle = (p_trk_1[0]*p_trk_2[0]+p_trk_1[1]*p_trk_2[1]) / (TMath::Sqrt(pow(p_trk_1[0],2)+pow(p_trk_1[1],2))*TMath::Sqrt(pow(p_trk_2[0],2)+pow(p_trk_2[1],2))); - R_T = TMath::Sqrt(pow(x_dv_in,2)+pow(y_dv_in,2)); - cos_T = (p_tot[0]*x_dv_in+p_tot[1]*y_dv_in)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv_in-sin(phi)*x_dv_in); - float chi2rphidof_1 = a_in.chi2rphi; - float chi2rzdof_1 = a_in.chi2rz; - float bendchi2_1 = a_in.bendchi2; - float chi2rphidof_2 = b_in.chi2rphi; - float chi2rzdof_2 = b_in.chi2rz; - float bendchi2_2 = b_in.bendchi2; - chi2rphidofSum = chi2rphidof_1 + chi2rphidof_2; - chi2rzdofSum = chi2rzdof_1 + chi2rzdof_2; - bendchi2Sum = bendchi2_1 + bendchi2_2; - MVA1Sum = a_in.MVA1 + b_in.MVA1; - numStubsSum = a_in.nstubs + b_in.nstubs; - p2_mag = pow(a_in.pt,2)+pow(b_in.pt,2); - delta_z = fabs(a_in.z(x_dv_in,y_dv_in)-b_in.z(x_dv_in,y_dv_in)); - delta_eta = fabs(a_in.eta-b_in.eta); - } - - void addTrack(Track_Parameters trk){ - tracks.push_back(trk); - std::valarray p_tot = {0,0}; - for(auto track : tracks){ - p_tot+= calcPVec(track,x_dv,y_dv); - } - p_mag = TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2)); - cos_T = (p_tot[0]*x_dv+p_tot[1]*y_dv)/(R_T*TMath::Sqrt(pow(p_tot[0],2)+pow(p_tot[1],2))); - alpha_T = acos(cos_T); - phi = atan2(p_tot[1],p_tot[0]); - d_T = fabs(cos(phi)*y_dv-sin(phi)*x_dv); - float chi2rphidof = trk.chi2rphi; - float chi2rzdof = trk.chi2rz; - float bendchi2 = trk.bendchi2; - chi2rphidofSum+= chi2rphidof; - chi2rzdofSum+= chi2rzdof; - bendchi2Sum+= bendchi2; - numStubsSum+= trk.nstubs; - p2_mag+= pow(trk.pt,2); - MVA1Sum+= trk.MVA1; - } - - Vertex_Parameters(){}; - ~Vertex_Parameters(){}; -}; - -constexpr bool operator==(const Vertex_Parameters& lhs, const Vertex_Parameters& rhs) -{ - return (lhs.x_dv==rhs.x_dv && lhs.y_dv==rhs.y_dv && lhs.z_dv==rhs.z_dv); -} - -class Cut { -public: - virtual ~Cut() = default; - virtual TString getCutName() const = 0; - virtual TString getCutLabel() const = 0; - virtual float getParam(int it) const = 0; - virtual float getCutValue() const = 0; - virtual float getDoPlot() const = 0; -}; - -template -class TypedCut : public Cut -{ -public: - TString cutName; - TString cutLabel; - std::vector** params; - T cutValue; - bool doPlot; - - TypedCut(TString cutName_in, TString cutLabel_in, std::vector** params_in, T cutValue_in, bool doPlot_in): cutName(cutName_in), cutLabel(cutLabel_in), params(params_in), cutValue(cutValue_in), doPlot(doPlot_in) {} - TypedCut(){}; - ~TypedCut(){}; - TString getCutName() const - { - return cutName; - } - TString getCutLabel() const - { - return cutLabel; - } - float getParam(int it) const - { - T param = (*params)->at(it); - return float(param); - } - float getCutValue() const - { - return float(cutValue); - } - float getDoPlot() const - { - return doPlot; - } -}; - -class Plot { -public: - virtual ~Plot() = default; - virtual TString getVarName() const = 0; - virtual TString getUnit() const = 0; - virtual float getParam(int it) const = 0; - virtual int getNumBins() const = 0; - virtual float getMinBin() const = 0; - virtual float getMaxBin() const = 0; - virtual std::vector getBins() const = 0; - virtual bool getBool() const = 0; -}; - -template -class TypedPlot : public Plot -{ -public: - TString varName; - TString unit; - std::vector** params; - int numBins; - float minBin; - float maxBin; - std::vector bins; - bool variableBins; - - TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, float minBin_in, float maxBin_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), minBin(minBin_in), maxBin(maxBin_in){ - variableBins = false; - } - TypedPlot(TString varName_in, TString unit_in, std::vector** params_in, int numBins_in, std::vector bins_in): varName(varName_in), unit(unit_in), params(params_in), numBins(numBins_in), bins(bins_in) { - variableBins = true; - } - TypedPlot(){}; - ~TypedPlot(){}; - TString getVarName() const - { - return varName; - } - TString getUnit() const - { - return unit; - } - float getParam(int it) const - { - T param = (*params)->at(it); - return float(param); - } - int getNumBins() const - { - return numBins; - } - float getMinBin() const - { - return minBin; - } - float getMaxBin() const - { - return maxBin; - } - std::vector getBins() const - { - return bins; - } - bool getBool() const - { - return variableBins; - } -}; - -void displayProgress(long current, long max) -{ - using std::cerr; - if (max < 2500) - return; - if (current % (max / 2500) != 0 && current < max - 1) - return; - - int width = 52; // Hope the terminal is at least that wide. - int barWidth = width - 2; - cerr << "\x1B[2K"; // Clear line - cerr << "\x1B[2000D"; // Cursor left - cerr << '['; - for (int i = 0; i < barWidth; ++i) - { - if (i < barWidth * current / max) - { - cerr << '='; - } - else - { - cerr << ' '; - } - } - cerr << ']'; - cerr << " " << Form("%8d/%8d (%5.2f%%)", (int)current, (int)max, 100.0 * current / max); - cerr.flush(); -} - -template -void raiseMax(T *hist1, S *hist2=nullptr, T *hist3=nullptr, T *hist4=nullptr) -{ - Double_t max = hist1->GetBinContent(hist1->GetMaximumBin()); - if(hist2!=nullptr){ - Double_t max2 = hist2->GetBinContent(hist2->GetMaximumBin()); - if(max2>max) max = max2; - } - if(hist3!=nullptr){ - Double_t max3 = hist3->GetBinContent(hist3->GetMaximumBin()); - if(max3>max) max = max3; - } - if(hist4!=nullptr){ - Double_t max4 = hist4->GetBinContent(hist4->GetMaximumBin()); - if(max4>max) max = max4; - } - if(max>0.0){ - hist1->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist2!=nullptr) hist2->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist3!=nullptr) hist3->GetYaxis()->SetRangeUser(0.,1.2*max); - if(hist4!=nullptr) hist4->GetYaxis()->SetRangeUser(0.,1.2*max); - } -} - -void raiseMaxStack(TH1F* hist, THStack* stack) -{ - Double_t max = hist->GetMaximum(); - Double_t max2 = stack->GetMaximum(); - if(max2>max) max = max2; - - if(max>0.0){ - hist->GetYaxis()->SetRangeUser(0.,1.2*max); - stack->GetYaxis()->SetRangeUser(0.,1.2*max); - } - -} - -template -void drawSame(T *hist1, S *hist2, T *hist3=nullptr, T *hist4=nullptr) -{ - if(hist1->GetBinContent(hist1->GetMaximumBin())!=0.0){ - hist1->Draw("HIST"); - hist2->Draw("HIST,SAME"); - if(hist3!=nullptr) hist3->Draw("HIST,SAME"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - else if(hist2->GetBinContent(hist2->GetMaximumBin())!=0.0){ - hist2->Draw("HIST"); - if(hist3!=nullptr) hist3->Draw("HIST,SAME"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - else if(hist3!=nullptr){ - if(hist3->GetBinContent(hist3->GetMaximumBin())!=0.0){ - hist3->Draw("HIST"); - if(hist4!=nullptr) hist4->Draw("HIST,SAME"); - } - } - else if(hist4!=nullptr){ - if(hist4->GetBinContent(hist4->GetMaximumBin())!=0.0){ - hist4->Draw("HIST"); - } - } - else{ - hist1->Draw("HIST"); - } -} - -void drawSameStack(TH1F* hist, THStack* stack) -{ - if(hist->GetMaximum()!=0.0){ - hist->Draw("HIST"); - stack->Draw("HIST,SAME"); - } - else if(stack->GetMaximum()!=0.0){ - stack->Draw("HIST"); - } - else{ - hist->Draw("HIST"); - } -} - -bool ComparePtTrack(Track_Parameters a, Track_Parameters b) { return a.pt > b.pt; } -bool CompareZ0Track(Track_Parameters a, Track_Parameters b) { return a.z0 > b.z0; } -bool CompareD0Track(Track_Parameters a, Track_Parameters b) { return a.d0 > b.d0; } -bool ComparePtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.a.pt > v2.a.pt; } -bool CompareDelzVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.delta_z > v2.delta_z; } -bool CompareDtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.d_T > v2.d_T; } -bool CompareChi2rphidofSumVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.chi2rphidofSum > v2.chi2rphidofSum; } -bool CompareRtVert(Vertex_Parameters v1, Vertex_Parameters v2) {return v1.R_T > v2.R_T; } - -template -std::vector linspace(T start, T end, int num){ - std::vector out; - T delta = (end - start) / (num-1); - for(int i=0; i logspace(const float &a, const float &b, const int &k) -{ - std::vector bins; - float delta = (log10(b) - log10(a)) / k; - for (int i = 0; i < (k+1); i++) - { - bins.push_back(pow(10, log10(a) + (i * delta))); - } - //std::cout<<"logspace bins: "; - for(uint j=0; j TMath::Pi()) - dPhi -= 2. * TMath::Pi(); - if (dPhi < -TMath::Pi()) - dPhi += 2. * TMath::Pi(); - return dPhi; -} - -Double_t deltaR(Double_t eta1, Double_t phi1, Double_t eta2, Double_t phi2) -{ - Double_t dEta, dPhi; - dEta = eta1 - eta2; - dPhi = deltaPhi(phi1, phi2); - return sqrt(dEta * dEta + dPhi * dPhi); -} - -Double_t dist(Double_t x1, Double_t y1 , Double_t x2=0, Double_t y2=0){ // Distance between 2 points - return (TMath::Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); -} - -Double_t dist_Vertex(Double_t x_vtx, Double_t y_vtx, Track_Parameters a){ // Distance between track and displaced vertex - float R = dist(x_vtx,y_vtx,a.x0,a.y0); - return (fabs(R-(a.rho))); -} - -Double_t dist_TPs(Track_Parameters* a, Track_Parameters* b); // Closest distance between 2 tracks -Double_t dist_TPs(Track_Parameters a, Track_Parameters b); // Closest distance between 2 tracks -bool CompareDeltaXY(Vertex_Parameters v1, Vertex_Parameters v2) {return dist_TPs(v1.a,v1.b) < dist_TPs(v2.a,v2.b); } - -Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx); -// Identify the displaced vertex (x_vtx,y_vtx,z_vtx) and return the status -//-2 = Circles with same center. No Intersection -//-1 = Circles don't Intersect. A point on the line connecting the centers is chosen. -// 0 = Only 1 Intersection not satisfying Z cutoff -// 1 = Only 1 Intersection satisfying Z cutoff -// 2 = Only 1 Intersection detectable dist(x,y)<20 -// 3 = 2 Intersections - -void Analyzer_DisplacedMuon(TString inputFilePath, - TString outputDir, - float TP_maxD0 = 1.9, - float TP_minD0 = 0.0004196) -{ - TChain *tree = new TChain("L1TrackNtuple/eventTree"); - tree->Add(inputFilePath); - //TChain *vertTree = new TChain("L1TrackNtuple/dispVertTree"); - //vertTree->Add(inputFilePath); - std::string inputFileString(inputFilePath.Data()); - inputFileString = inputFileString.substr(inputFileString.find_last_of("/")+1); - TString inputFile(inputFileString); - std::cout<<"input: "<SetBatch(); - gErrorIgnoreLevel = kWarning; - - SetPlotStyle(); - float barrelEta = 0.95; - bool useEmulation = false; - - //Vertex parameter vectors - vector *trkVert_firstIndexTrk; - vector *trkVert_secondIndexTrk; - vector *trkVert_inTraj; - vector *trkVert_d_T; - vector *trkVert_R_T; - vector *trkVert_cos_T; - vector *trkVert_del_Z; - vector *trkVert_x; - vector *trkVert_y; - vector *trkVert_z; - vector *trkVert_openingAngle; - vector *trkVert_parentPt; - vector *trkVert_isReal; - vector *trkVert_score; - - vector *tpVert_d_T; - vector *tpVert_R_T; - vector *tpVert_cos_T; - vector *tpVert_x; - vector *tpVert_y; - vector *tpVert_z; - vector *tpVert_openingAngle; - vector *tpVert_parentPt; - - vector *trk_pt; - vector *trk_eta; - vector *trk_phi; - vector *trk_d0; - vector *trk_rinv; - vector *trk_z0; - vector *trk_chi2rphi; - vector *trk_chi2rz; - vector *trk_bendchi2; - vector *trk_nstub; - vector *trkExt_fake; - vector *trk_MVA1; - vector *trk_matchtp_pdgid; - vector *trk_matchtp_isHToB; - vector *trk_matchtp_isHard; - vector *trk_matchtp_pt; - vector *trk_matchtp_eta; - vector *trk_matchtp_phi; - vector *trk_matchtp_z0; - vector *trk_matchtp_d0; - vector *trk_matchtp_x; - vector *trk_matchtp_y; - vector *trk_matchtp_z; - vector *tp_pt; - vector *tp_eta; - vector *tp_phi; - vector *tp_dxy; - vector *tp_d0; - vector *tp_z0; - vector *tp_x; - vector *tp_y; - vector *tp_z; - vector *tp_pdgid; - vector *tp_isHToB; - vector *tp_isHard; - vector *tp_nmatch; - vector *tp_nstub; - vector *tp_eventid; - vector *tp_charge; - vector *matchtrk_pt; - vector *matchtrk_eta; - vector *matchtrk_phi; - vector *matchtrk_z0; - vector *matchtrk_d0; - vector *matchtrk_rinv; - vector *matchtrk_chi2rphi; - vector *matchtrk_chi2rz; - vector *matchtrk_bendchi2; - vector *matchtrk_MVA1; - vector *matchtrk_nstub; - - TBranch *b_trkVert_firstIndexTrk; - TBranch *b_trkVert_secondIndexTrk; - TBranch *b_trkVert_inTraj; - TBranch *b_trkVert_d_T; - TBranch *b_trkVert_R_T; - TBranch *b_trkVert_cos_T; - TBranch *b_trkVert_del_Z; - TBranch *b_trkVert_x; - TBranch *b_trkVert_y; - TBranch *b_trkVert_z; - TBranch *b_trkVert_openingAngle; - TBranch *b_trkVert_parentPt; - TBranch *b_trkVert_isReal; - TBranch *b_trkVert_score; - TBranch *b_trk_pt; - TBranch *b_trk_eta; - TBranch *b_trk_phi; - TBranch *b_trk_d0; - TBranch *b_trk_rinv; - TBranch *b_trk_z0; - TBranch *b_trk_chi2rphi; - TBranch *b_trk_chi2rz; - TBranch *b_trk_bendchi2; - TBranch *b_trk_nstub; - TBranch *b_trkExt_fake; - TBranch *b_trk_MVA1; - TBranch *b_trk_matchtp_pdgid; - TBranch *b_trk_matchtp_isHToB; - TBranch *b_trk_matchtp_isHard; - TBranch *b_trk_matchtp_pt; - TBranch *b_trk_matchtp_eta; - TBranch *b_trk_matchtp_phi; - TBranch *b_trk_matchtp_z0; - TBranch *b_trk_matchtp_d0; - TBranch *b_trk_matchtp_x; - TBranch *b_trk_matchtp_y; - TBranch *b_trk_matchtp_z; - TBranch *b_tp_pt; - TBranch *b_tp_eta; - TBranch *b_tp_phi; - TBranch *b_tp_dxy; - TBranch *b_tp_d0; - TBranch *b_tp_z0; - TBranch *b_tp_x; - TBranch *b_tp_y; - TBranch *b_tp_z; - TBranch *b_tp_pdgid; - TBranch *b_tp_isHToB; - TBranch *b_tp_isHard; - TBranch *b_tp_nmatch; - TBranch *b_tp_nstub; - TBranch *b_tp_eventid; - TBranch *b_tp_charge; - TBranch *b_matchtrk_pt; - TBranch *b_matchtrk_eta; - TBranch *b_matchtrk_phi; - TBranch *b_matchtrk_z0; - TBranch *b_matchtrk_d0; - TBranch *b_matchtrk_rinv; - TBranch *b_matchtrk_chi2rphi; - TBranch *b_matchtrk_chi2rz; - TBranch *b_matchtrk_bendchi2; - TBranch *b_matchtrk_MVA1; - TBranch *b_matchtrk_nstub; - - trkVert_firstIndexTrk = 0; - trkVert_secondIndexTrk = 0; - trkVert_inTraj = 0; - trkVert_d_T = 0; - trkVert_R_T = 0; - trkVert_cos_T = 0; - trkVert_del_Z = 0; - trkVert_x = 0; - trkVert_y = 0; - trkVert_z = 0; - trkVert_openingAngle = 0; - trkVert_parentPt = 0; - trkVert_isReal = 0; - trkVert_score = 0; - trk_pt = 0; - trk_eta = 0; - trk_phi = 0; - trk_d0 = 0; - trk_rinv = 0; - trk_z0 = 0; - trk_chi2rphi = 0; - trk_chi2rz = 0; - trk_bendchi2 = 0; - trk_nstub = 0; - trkExt_fake = 0; - trk_MVA1 = 0; - trk_matchtp_pdgid = 0; - trk_matchtp_isHToB = 0; - trk_matchtp_isHard = 0; - trk_matchtp_pt = 0; - trk_matchtp_eta = 0; - trk_matchtp_phi = 0; - trk_matchtp_z0 = 0; - trk_matchtp_d0 = 0; - trk_matchtp_x = 0; - trk_matchtp_y = 0; - trk_matchtp_z = 0; - tp_pt = 0; - tp_eta = 0; - tp_phi = 0; - tp_dxy = 0; - tp_d0 = 0; - tp_z0 = 0; - tp_x = 0; - tp_y = 0; - tp_z = 0; - tp_pdgid = 0; - tp_isHToB = 0; - tp_isHard = 0; - tp_nmatch = 0; - tp_nstub = 0; - tp_eventid = 0; - tp_charge = 0; - matchtrk_pt = 0; - matchtrk_eta = 0; - matchtrk_phi = 0; - matchtrk_z0 = 0; - matchtrk_d0 = 0; - matchtrk_rinv = 0; - matchtrk_chi2rphi = 0; - matchtrk_chi2rz = 0; - matchtrk_bendchi2 = 0; - matchtrk_MVA1 = 0; - matchtrk_nstub = 0; - - //tree->SetMakeClass(1); - if(useEmulation){ - tree->SetBranchAddress("dvEmu_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); - tree->SetBranchAddress("dvEmu_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); - tree->SetBranchAddress("dvEmu_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); - tree->SetBranchAddress("dvEmu_d_T", &trkVert_d_T, &b_trkVert_d_T); - tree->SetBranchAddress("dvEmu_R_T", &trkVert_R_T, &b_trkVert_R_T); - tree->SetBranchAddress("dvEmu_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); - tree->SetBranchAddress("dvEmu_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); - tree->SetBranchAddress("dvEmu_x", &trkVert_x, &b_trkVert_x); - tree->SetBranchAddress("dvEmu_y", &trkVert_y, &b_trkVert_y); - tree->SetBranchAddress("dvEmu_z", &trkVert_z, &b_trkVert_z); - tree->SetBranchAddress("dvEmu_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); - tree->SetBranchAddress("dvEmu_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); - tree->SetBranchAddress("dvEmu_isReal", &trkVert_isReal, &b_trkVert_isReal); - tree->SetBranchAddress("dvEmu_score", &trkVert_score, &b_trkVert_score); - tree->SetBranchAddress("trkExtEmu_pt", &trk_pt, &b_trk_pt); - tree->SetBranchAddress("trkExtEmu_eta", &trk_eta, &b_trk_eta); - tree->SetBranchAddress("trkExtEmu_phi", &trk_phi, &b_trk_phi); - tree->SetBranchAddress("trkExtEmu_d0", &trk_d0, &b_trk_d0); - tree->SetBranchAddress("trkExtEmu_rho", &trk_rinv, &b_trk_rinv); - tree->SetBranchAddress("trkExtEmu_z0", &trk_z0, &b_trk_z0); - tree->SetBranchAddress("trkExtEmu_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); - tree->SetBranchAddress("trkExtEmu_chi2rz", &trk_chi2rz, &b_trk_chi2rz); - tree->SetBranchAddress("trkExtEmu_bendchi2", &trk_bendchi2, &b_trk_bendchi2); - tree->SetBranchAddress("trkExtEmu_nstub", &trk_nstub, &b_trk_nstub); - tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); - tree->SetBranchAddress("trkExtEmu_MVA", &trk_MVA1, &b_trk_MVA1); - } - else{ - tree->SetBranchAddress("dv_firstIndexTrk", &trkVert_firstIndexTrk, &b_trkVert_firstIndexTrk); - tree->SetBranchAddress("dv_secondIndexTrk", &trkVert_secondIndexTrk, &b_trkVert_secondIndexTrk); - tree->SetBranchAddress("dv_inTraj", &trkVert_inTraj, &b_trkVert_inTraj); - tree->SetBranchAddress("dv_d_T", &trkVert_d_T, &b_trkVert_d_T); - tree->SetBranchAddress("dv_R_T", &trkVert_R_T, &b_trkVert_R_T); - tree->SetBranchAddress("dv_cos_T", &trkVert_cos_T, &b_trkVert_cos_T); - tree->SetBranchAddress("dv_del_Z", &trkVert_del_Z, &b_trkVert_del_Z); - tree->SetBranchAddress("dv_x", &trkVert_x, &b_trkVert_x); - tree->SetBranchAddress("dv_y", &trkVert_y, &b_trkVert_y); - tree->SetBranchAddress("dv_z", &trkVert_z, &b_trkVert_z); - tree->SetBranchAddress("dv_openingAngle", &trkVert_openingAngle, &b_trkVert_openingAngle); - tree->SetBranchAddress("dv_parentPt", &trkVert_parentPt, &b_trkVert_parentPt); - tree->SetBranchAddress("dv_isReal", &trkVert_isReal, &b_trkVert_isReal); - tree->SetBranchAddress("dv_score", &trkVert_score, &b_trkVert_score); - tree->SetBranchAddress("trkExt_pt", &trk_pt, &b_trk_pt); - tree->SetBranchAddress("trkExt_eta", &trk_eta, &b_trk_eta); - tree->SetBranchAddress("trkExt_phi", &trk_phi, &b_trk_phi); - tree->SetBranchAddress("trkExt_d0", &trk_d0, &b_trk_d0); - tree->SetBranchAddress("trkExt_rinv", &trk_rinv, &b_trk_rinv); - tree->SetBranchAddress("trkExt_z0", &trk_z0, &b_trk_z0); - tree->SetBranchAddress("trkExt_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi); - tree->SetBranchAddress("trkExt_chi2rz", &trk_chi2rz, &b_trk_chi2rz); - tree->SetBranchAddress("trkExt_bendchi2", &trk_bendchi2, &b_trk_bendchi2); - tree->SetBranchAddress("trkExt_nstub", &trk_nstub, &b_trk_nstub); - tree->SetBranchAddress("trkExt_fake", &trkExt_fake, &b_trkExt_fake); - tree->SetBranchAddress("trkExt_MVA", &trk_MVA1, &b_trk_MVA1); - } - tree->SetBranchAddress("trkExt_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid); - tree->SetBranchAddress("trkExt_matchtp_isHToB", &trk_matchtp_isHToB, &b_trk_matchtp_isHToB); - tree->SetBranchAddress("trkExt_matchtp_isHard", &trk_matchtp_isHard, &b_trk_matchtp_isHard); - tree->SetBranchAddress("trkExt_matchtp_pt", &trk_matchtp_pt, &b_trk_matchtp_pt); - tree->SetBranchAddress("trkExt_matchtp_eta", &trk_matchtp_eta, &b_trk_matchtp_eta); - tree->SetBranchAddress("trkExt_matchtp_phi", &trk_matchtp_phi, &b_trk_matchtp_phi); - tree->SetBranchAddress("trkExt_matchtp_z0", &trk_matchtp_z0, &b_trk_matchtp_z0); - tree->SetBranchAddress("trkExt_matchtp_d0", &trk_matchtp_d0, &b_trk_matchtp_d0); - tree->SetBranchAddress("trkExt_matchtp_x", &trk_matchtp_x, &b_trk_matchtp_x); - tree->SetBranchAddress("trkExt_matchtp_y", &trk_matchtp_y, &b_trk_matchtp_y); - tree->SetBranchAddress("trkExt_matchtp_z", &trk_matchtp_z, &b_trk_matchtp_z); - tree->SetBranchAddress("tp_pt", &tp_pt, &b_tp_pt); - tree->SetBranchAddress("tp_eta", &tp_eta, &b_tp_eta); - tree->SetBranchAddress("tp_phi", &tp_phi, &b_tp_phi); - tree->SetBranchAddress("tp_dxy", &tp_dxy, &b_tp_dxy); - tree->SetBranchAddress("tp_d0", &tp_d0, &b_tp_d0); - tree->SetBranchAddress("tp_z0", &tp_z0, &b_tp_z0); - tree->SetBranchAddress("tp_x", &tp_x, &b_tp_x); - tree->SetBranchAddress("tp_y", &tp_y, &b_tp_y); - tree->SetBranchAddress("tp_z", &tp_z, &b_tp_z); - tree->SetBranchAddress("tp_pdgid", &tp_pdgid, &b_tp_pdgid); - tree->SetBranchAddress("tp_isHToB", &tp_isHToB, &b_tp_isHToB); - tree->SetBranchAddress("tp_isHard", &tp_isHard, &b_tp_isHard); - tree->SetBranchAddress("tp_nmatch", &tp_nmatch, &b_tp_nmatch); - tree->SetBranchAddress("tp_nstub", &tp_nstub, &b_tp_nstub); - tree->SetBranchAddress("tp_eventid", &tp_eventid, &b_tp_eventid); - tree->SetBranchAddress("tp_charge", &tp_charge, &b_tp_charge); - if(useEmulation){ - tree->SetBranchAddress("matchtrkExtEmu_pt", &matchtrk_pt, &b_matchtrk_pt); - tree->SetBranchAddress("matchtrkExtEmu_eta", &matchtrk_eta, &b_matchtrk_eta); - tree->SetBranchAddress("matchtrkExtEmu_phi", &matchtrk_phi, &b_matchtrk_phi); - tree->SetBranchAddress("matchtrkExtEmu_z0", &matchtrk_z0, &b_matchtrk_z0); - tree->SetBranchAddress("matchtrkExtEmu_d0", &matchtrk_d0, &b_matchtrk_d0); - tree->SetBranchAddress("matchtrkExtEmu_rho", &matchtrk_rinv, &b_matchtrk_rinv); - tree->SetBranchAddress("matchtrkExtEmu_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); - tree->SetBranchAddress("matchtrkExtEmu_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); - tree->SetBranchAddress("matchtrkExtEmu_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); - tree->SetBranchAddress("matchtrkExtEmu_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); - tree->SetBranchAddress("matchtrkExtEmu_nstub", &matchtrk_nstub, &b_matchtrk_nstub); - } - else{ - tree->SetBranchAddress("matchtrkExt_pt", &matchtrk_pt, &b_matchtrk_pt); - tree->SetBranchAddress("matchtrkExt_eta", &matchtrk_eta, &b_matchtrk_eta); - tree->SetBranchAddress("matchtrkExt_phi", &matchtrk_phi, &b_matchtrk_phi); - tree->SetBranchAddress("matchtrkExt_z0", &matchtrk_z0, &b_matchtrk_z0); - tree->SetBranchAddress("matchtrkExt_d0", &matchtrk_d0, &b_matchtrk_d0); - tree->SetBranchAddress("matchtrkExt_rinv", &matchtrk_rinv, &b_matchtrk_rinv); - tree->SetBranchAddress("matchtrkExt_chi2rphi", &matchtrk_chi2rphi, &b_matchtrk_chi2rphi); - tree->SetBranchAddress("matchtrkExt_chi2rz", &matchtrk_chi2rz, &b_matchtrk_chi2rz); - tree->SetBranchAddress("matchtrkExt_bendchi2", &matchtrk_bendchi2, &b_matchtrk_bendchi2); - tree->SetBranchAddress("matchtrkExt_MVA", &matchtrk_MVA1, &b_matchtrk_MVA1); - tree->SetBranchAddress("matchtrkExt_nstub", &matchtrk_nstub, &b_matchtrk_nstub); - } - //preselection cuts and plots definitions - // Cut assumptions: first cut is maxEta - std::vector> preselCuts; - std::unique_ptr> cut0(new TypedCut("maxEta","max #eta",&trk_eta,2.4,true)); - preselCuts.push_back(std::move(cut0)); - std::unique_ptr> cut1(new TypedCut("maxChi2rzdof","max #chi^{2}_{rz}",&trk_chi2rz,3.0,false)); - preselCuts.push_back(std::move(cut1)); - std::unique_ptr> cut4(new TypedCut("minMVA1","min MVA1",&trk_MVA1,0.2,false)); - preselCuts.push_back(std::move(cut4)); - std::unique_ptr> cut5(new TypedCut("minMVA1_D","min MVA1 D",&trk_MVA1,0.5,false)); - preselCuts.push_back(std::move(cut5)); - std::unique_ptr> cut6(new TypedCut("minNumStub_overlap","Quality",&trk_nstub,5,true)); - preselCuts.push_back(std::move(cut6)); - std::unique_ptr> cut7(new TypedCut("minPt","min p_{T}",&trk_pt,3.0,true)); - preselCuts.push_back(std::move(cut7)); - std::unique_ptr> cut8(new TypedCut("minD0_barrel","min d_{0} Bar",&trk_d0,0.06,false)); - preselCuts.push_back(std::move(cut8)); - std::unique_ptr> cut9(new TypedCut("minD0_disk","min d_{0}",&trk_d0,0.08,true)); - preselCuts.push_back(std::move(cut9)); - - std::vector> preselCutsTP; - std::unique_ptr> tpCut0(new TypedCut("maxEta","max #eta",&tp_eta,2.4,true)); - preselCutsTP.push_back(std::move(tpCut0)); - std::unique_ptr> tpCut1(new TypedCut("minPt","min p_{T}",&tp_pt,3.0,true)); - preselCutsTP.push_back(std::move(tpCut1)); - std::unique_ptr> tpCut2(new TypedCut("minD0_barrel","min d_{0} Barrel",&tp_d0,0.06,true)); - preselCutsTP.push_back(std::move(tpCut2)); - std::unique_ptr> tpCut3(new TypedCut("minD0_disk","min d_{0} Disk",&tp_d0,0.08,true)); - preselCutsTP.push_back(std::move(tpCut3)); - - std::vector> varCutFlows; - std::unique_ptr> plot0(new TypedPlot("d0","cm",&trk_d0,20,logspace(0.01,10.0,20))); - varCutFlows.push_back(std::move(plot0)); - std::unique_ptr> plot1(new TypedPlot("pt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); - varCutFlows.push_back(std::move(plot1)); - std::unique_ptr> plot2(new TypedPlot("eta","",&trk_eta,50,-2.5,2.5)); - varCutFlows.push_back(std::move(plot2)); - std::unique_ptr> plot3(new TypedPlot("z0","cm",&trk_z0,100,-20.0,20.0)); - varCutFlows.push_back(std::move(plot3)); - std::unique_ptr> plot4(new TypedPlot("phi","",&trk_phi,100,-2*TMath::Pi(),2*TMath::Pi())); - varCutFlows.push_back(std::move(plot4)); - std::unique_ptr> plot6(new TypedPlot("MVA1","",&trk_MVA1,100,0.0,1.0)); - varCutFlows.push_back(std::move(plot6)); - std::unique_ptr> plot8(new TypedPlot("chi2rphidof","",&trk_chi2rphi,100,0.0,6.0)); - varCutFlows.push_back(std::move(plot8)); - std::unique_ptr> plot9(new TypedPlot("chi2rzdof","",&trk_chi2rz,100,0.0,6.0)); - varCutFlows.push_back(std::move(plot9)); - std::unique_ptr> plot10(new TypedPlot("bendchi2","",&trk_bendchi2,100,0.0,10.0)); - varCutFlows.push_back(std::move(plot10)); - - std::vector> varCutFlowsTP; - std::unique_ptr> tpPlot0(new TypedPlot("d0","cm",&tp_d0,20,logspace(0.01,10.0,20))); - varCutFlowsTP.push_back(std::move(tpPlot0)); - std::unique_ptr> tpPlot1(new TypedPlot("pt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); - varCutFlowsTP.push_back(std::move(tpPlot1)); - std::unique_ptr> tpPlot2(new TypedPlot("eta","",&tp_eta,50,-2.5,2.5)); - varCutFlowsTP.push_back(std::move(tpPlot2)); - std::unique_ptr> tpPlot3(new TypedPlot("z0","cm",&tp_z0,100,-20.0,20.0)); - varCutFlowsTP.push_back(std::move(tpPlot3)); - std::unique_ptr> tpPlot4(new TypedPlot("phi","",&tp_phi,100,-2*TMath::Pi(),2*TMath::Pi())); - varCutFlowsTP.push_back(std::move(tpPlot4)); - std::unique_ptr> tpPlot6(new TypedPlot("dxy","cm",&tp_dxy,50,-2.0,2.0)); - varCutFlowsTP.push_back(std::move(tpPlot6)); - - std::vector,std::unique_ptr > > varCutFlows2D; - std::unique_ptr> plot0X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); - std::unique_ptr> plot0Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); - varCutFlows2D.push_back({std::move(plot0X),std::move(plot0Y)}); - std::unique_ptr> plot1X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - std::unique_ptr> plot1Y(new TypedPlot("pt","GeV",&trk_pt,200,0.0,30.0)); - varCutFlows2D.push_back({std::move(plot1X),std::move(plot1Y)}); - std::unique_ptr> plot2X(new TypedPlot("d0","cm",&trk_d0,200,-2.0,2.0)); - std::unique_ptr> plot2Y(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - varCutFlows2D.push_back({std::move(plot2X),std::move(plot2Y)}); - std::unique_ptr> plot3X(new TypedPlot("eta","",&trk_eta,200,-2.4,2.4)); - std::unique_ptr> plot3Y(new TypedPlot("nstub","",&trk_nstub,7,0.0,7.0)); - varCutFlows2D.push_back({std::move(plot3X),std::move(plot3Y)}); - - std::vector,std::unique_ptr > > varCutFlowsTP2D; - std::unique_ptr> tpPlot0X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); - std::unique_ptr> tpPlot0Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot0X),std::move(tpPlot0Y)}); - std::unique_ptr> tpPlot1X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - std::unique_ptr> tpPlot1Y(new TypedPlot("pt","GeV",&tp_pt,200,0.0,30.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot1X),std::move(tpPlot1Y)}); - std::unique_ptr> tpPlot2X(new TypedPlot("d0","cm",&tp_d0,200,-2.0,2.0)); - std::unique_ptr> tpPlot2Y(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - varCutFlowsTP2D.push_back({std::move(tpPlot2X),std::move(tpPlot2Y)}); - std::unique_ptr> tpPlot3X(new TypedPlot("eta","",&tp_eta,200,-2.4,2.4)); - std::unique_ptr> tpPlot3Y(new TypedPlot("nstub","",&tp_nstub,7,0.0,7.0)); - varCutFlowsTP2D.push_back({std::move(tpPlot3X),std::move(tpPlot3Y)}); - - //std::vector trackType = {"primary","np","fake","PU","notHiggs"}; - std::vector trackType = {"primary","np"}; - //std::vector tpType = {"primary","np","PU","notHiggs","match",""}; - std::vector tpType = {"primary","np","match",""}; - std::vector plotModifiers = {"","_H","_L","_P","_D","_barrel","_disk"}; - if(!detailedPlots) plotModifiers = {""}; - uint preselCutsSize = 0; - for(uint i=0; igetDoPlot()) preselCutsSize++; - } - TH1F* preselCutFlows[varCutFlows.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; - TH2F* preselCutFlows2D[varCutFlows2D.size()][trackType.size()][preselCutsSize][plotModifiers.size()]; - TH1F* preselCutFlowsTP[varCutFlowsTP.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; - TH2F* preselCutFlowsTP2D[varCutFlowsTP2D.size()][tpType.size()][preselCutsTP.size()][plotModifiers.size()]; - //std::map numPartCutFlows[trackType.size()][preselCuts.size()]; - //std::map numPartCutFlowsTP[tpType.size()][preselCutsTP.size()]; - - for(uint it=0; itgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; - //std::cout<<"name: "<getBool()){ - //std::cout<<"setting bins"<getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events "; - std::vector bins = varCutFlows[it]->getBins(); - TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),bins.data()); - preselCutFlows[it][i][i_plot][j] = hist; - TString varString = varCutFlows[it]->getVarName(); - if(varString.Contains("d0") || varString.Contains("pt")){ - //std::cout<<"labels: "<GetNbinsX()+1); ibin++){ - binValues+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinContent(ibin)) + ", "; - binWidths+=to_string(preselCutFlows[it][i][i_plot][j]->GetBinWidth(ibin)) + ", "; - - } - binValues+="]"; - binWidths+="]"; - - //std::cout<<"binValues: "<getMaxBin() - varCutFlows[it]->getMinBin()) / varCutFlows[it]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Track "+varCutFlows[it]->getVarName()+" ("+varCutFlows[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlows[it]->getUnit(); - TH1F* hist = new TH1F(name,labels,varCutFlows[it]->getNumBins(),varCutFlows[it]->getMinBin(),varCutFlows[it]->getMaxBin()); - preselCutFlows[it][i][i_plot][j] = hist; - } - } - } - } - } - - for(uint it=0; itgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetVarName()+"_vs_"+varCutFlows2D[it].first->getVarName()+"_"+trackType[i]+"_"+preselCuts[jt]->getCutName()+"Cut"+plotModifiers[j]; - TString labels = name+"; Track "+varCutFlows2D[it].first->getVarName()+" ("+varCutFlows2D[it].first->getUnit()+") ; Track "+varCutFlows2D[it].second->getVarName()+" ("+varCutFlows2D[it].second->getUnit()+")"; - TH2F* hist = new TH2F(name,labels,varCutFlows2D[it].first->getNumBins(),varCutFlows2D[it].first->getMinBin(),varCutFlows2D[it].first->getMaxBin(),varCutFlows2D[it].second->getNumBins(),varCutFlows2D[it].second->getMinBin(),varCutFlows2D[it].second->getMaxBin()); - preselCutFlows2D[it][i][i_plot][j] = hist; - } - } - } - } - - for(uint it=0; itgetVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; - if(varCutFlowsTP[it]->getMaxBin()==varCutFlowsTP[it]->getMinBin()){ - TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events "; - std::vector bins = varCutFlowsTP[it]->getBins(); - TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),bins.data()); - preselCutFlowsTP[it][i][jt][j] = hist; - } - else{ - float binWidth = (varCutFlowsTP[it]->getMaxBin() - varCutFlowsTP[it]->getMinBin()) / varCutFlowsTP[it]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Tp "+varCutFlowsTP[it]->getVarName()+" ("+varCutFlowsTP[it]->getUnit()+") ; Events / "+binLabel+" "+varCutFlowsTP[it]->getUnit(); - TH1F* hist = new TH1F(name,labels,varCutFlowsTP[it]->getNumBins(),varCutFlowsTP[it]->getMinBin(),varCutFlowsTP[it]->getMaxBin()); - preselCutFlowsTP[it][i][jt][j] = hist; - } - } - } - } - } - - for(uint it=0; itgetVarName()+"_vs_"+varCutFlowsTP2D[it].first->getVarName()+"_"+tpType[i]+"_"+preselCutsTP[jt]->getCutName()+"Cut"+plotModifiers[j]; - TString labels = name+"; Tp "+varCutFlowsTP2D[it].first->getVarName()+" ("+varCutFlowsTP2D[it].first->getUnit()+") ; Tp "+varCutFlowsTP2D[it].second->getVarName()+" ("+varCutFlowsTP2D[it].second->getUnit()+")"; - TH2F* hist = new TH2F(name,labels,varCutFlowsTP2D[it].first->getNumBins(),varCutFlowsTP2D[it].first->getMinBin(),varCutFlowsTP2D[it].first->getMaxBin(),varCutFlowsTP2D[it].second->getNumBins(),varCutFlowsTP2D[it].second->getMinBin(),varCutFlowsTP2D[it].second->getMaxBin()); - preselCutFlowsTP2D[it][i][jt][j] = hist; - } - } - } - } - - //vertex cuts and plots definitions - //Note: vertCut0 needs to be set to true when making fakeEff plots - std::vector> vertCuts; - std::unique_ptr> vertCut0(new TypedCut("minR_T_Res","min R_{T} #sigma_{d0}",&trkVert_R_T,d0_res,false)); - vertCuts.push_back(std::move(vertCut0)); - std::unique_ptr> vertCut1(new TypedCut("maxR_T","max R_{T}",&trkVert_R_T,20.0,false)); - vertCuts.push_back(std::move(vertCut1)); - std::unique_ptr> vertCut2(new TypedCut("max_trk_sumCharge","max #Sigma q",&trk_rinv,0,false)); - vertCuts.push_back(std::move(vertCut2)); - std::unique_ptr> vertCut3(new TypedCut("min_trk_sumCharge","min #Sigma q",&trk_rinv,0,true)); - vertCuts.push_back(std::move(vertCut3)); -#if 0 - std::unique_ptr> vertCut4(new TypedCut("max_trk_sumBendChi2","max #Sigma #chi^{2}_{bend}",&trk_bendchi2,14.0,true)); - vertCuts.push_back(std::move(vertCut4)); - std::unique_ptr> vertCut5(new TypedCut("minCos_T","min cos_{T}",&trkVert_cos_T,0.96,true)); - vertCuts.push_back(std::move(vertCut5)); - std::unique_ptr> vertCut6(new TypedCut("max_trk_deltaEta","max #Delta #eta",&trk_eta,2.0,true)); - vertCuts.push_back(std::move(vertCut6)); - std::unique_ptr> vertCut7(new TypedCut("max_delZ","max #Delta z",&trkVert_del_Z,0.5,true)); - vertCuts.push_back(std::move(vertCut7)); - std::unique_ptr> vertCut8(new TypedCut("minR_T","min R_{T}",&trkVert_R_T,0.25,true)); - vertCuts.push_back(std::move(vertCut8)); - std::unique_ptr> vertCut9(new TypedCut("min_trk_highPt","min lead p_{T}",&trk_pt,13.0,true)); - vertCuts.push_back(std::move(vertCut9)); - std::unique_ptr> vertCut10(new TypedCut("max_trk_sumChi2rphidof","max #Sigma #chi^{2}_{r#phi}",&trk_chi2rphi,6.0,true)); - vertCuts.push_back(std::move(vertCut10)); - std::unique_ptr> vertCut11(new TypedCut("min_trk_sumNumStubs","min #Sigma n_{stub}",&trk_nstub,11,true)); - vertCuts.push_back(std::move(vertCut11)); - std::unique_ptr> vertCut12(new TypedCut("min_trk_highD0","min d_{0}",&trk_d0,0.3,true)); - vertCuts.push_back(std::move(vertCut12)); - - //std::unique_ptr> vertCut3p1(new TypedCut("min_score0p68","score>0.68",&trkVert_score,0.68,true)); - //vertCuts.push_back(std::move(vertCut3p1)); - //std::unique_ptr> vertCut3p2(new TypedCut("min_score0p69","score>0.69",&trkVert_score,0.69,true)); - //vertCuts.push_back(std::move(vertCut3p2)); - std::unique_ptr> vertCut3p3(new TypedCut("min_score0p70","score>0.70",&trkVert_score,0.70,true)); - vertCuts.push_back(std::move(vertCut3p3)); - //std::unique_ptr> vertCut3p4(new TypedCut("min_score0p71","score>0.71",&trkVert_score,0.71,true)); - //vertCuts.push_back(std::move(vertCut3p4)); - //std::unique_ptr> vertCut3p5(new TypedCut("min_score0p72","score>0.72",&trkVert_score,0.72,true)); - //vertCuts.push_back(std::move(vertCut3p5)); - std::unique_ptr> vertCut4(new TypedCut("min_score0p8","score>0.8",&trkVert_score,0.8,true)); - vertCuts.push_back(std::move(vertCut4)); - std::unique_ptr> vertCut5(new TypedCut("min_score0p9","score>0.9",&trkVert_score,0.9,true)); - vertCuts.push_back(std::move(vertCut5)); - //std::unique_ptr> vertCut51(new TypedCut("min_score0p91","score>0.91",&trkVert_score,0.91,true)); - //vertCuts.push_back(std::move(vertCut51)); - //std::unique_ptr> vertCut52(new TypedCut("min_score0p92","score>0.92",&trkVert_score,0.92,true)); - //vertCuts.push_back(std::move(vertCut52)); - //std::unique_ptr> vertCut53(new TypedCut("min_score0p93","score>0.93",&trkVert_score,0.93,true)); - //vertCuts.push_back(std::move(vertCut53)); - std::unique_ptr> vertCut54(new TypedCut("min_score0p94","score>0.94",&trkVert_score,0.94,true)); - vertCuts.push_back(std::move(vertCut54)); - std::unique_ptr> vertCut6(new TypedCut("min_score0p95","score>0.95",&trkVert_score,0.95,true)); - vertCuts.push_back(std::move(vertCut6)); - std::unique_ptr> vertCut7(new TypedCut("min_score0p96","score>0.96",&trkVert_score,0.96,true)); - vertCuts.push_back(std::move(vertCut7)); - std::unique_ptr> vertCut8(new TypedCut("min_score0p97","score>0.97",&trkVert_score,0.97,true)); - vertCuts.push_back(std::move(vertCut8)); - std::unique_ptr> vertCut9(new TypedCut("min_score0p98","score>0.98",&trkVert_score,0.98,true)); - vertCuts.push_back(std::move(vertCut9)); - std::unique_ptr> vertCut10(new TypedCut("min_score0p99","score>0.99",&trkVert_score,0.99,true)); - vertCuts.push_back(std::move(vertCut10)); -#endif - - std::unique_ptr> vertCut10(new TypedCut("min_score4p0","score>4.0",&trkVert_score,4.0,false)); - vertCuts.push_back(std::move(vertCut10)); - std::unique_ptr> vertCut11(new TypedCut("min_score4p5","score>4.5",&trkVert_score,4.5,false)); - vertCuts.push_back(std::move(vertCut11)); - std::unique_ptr> vertCut12(new TypedCut("min_score5p0","score>5.0",&trkVert_score,5.0,false)); - vertCuts.push_back(std::move(vertCut12)); - std::unique_ptr> vertCut13(new TypedCut("min_score5p1","score>5.1",&trkVert_score,5.1,false)); - vertCuts.push_back(std::move(vertCut13)); - std::unique_ptr> vertCut14(new TypedCut("min_score5p2","score>5.2",&trkVert_score,5.2,false)); - vertCuts.push_back(std::move(vertCut14)); - std::unique_ptr> vertCut15(new TypedCut("min_score5p3","score>5.3",&trkVert_score,5.3,true)); - vertCuts.push_back(std::move(vertCut15)); - std::unique_ptr> vertCut16(new TypedCut("min_score5p35","score>5.35",&trkVert_score,5.35,false)); - vertCuts.push_back(std::move(vertCut16)); - std::unique_ptr> vertCut17(new TypedCut("min_score5p4","score>5.4",&trkVert_score,5.4,false)); - vertCuts.push_back(std::move(vertCut17)); - std::unique_ptr> vertCut18(new TypedCut("min_score5p45","score>5.45",&trkVert_score,5.45,true)); - vertCuts.push_back(std::move(vertCut18)); - - std::vector> vertCutFlows; - std::unique_ptr> vertPlot0(new TypedPlot("x","cm",&trkVert_x,100,-5.0,5.0)); - vertCutFlows.push_back(std::move(vertPlot0)); - std::unique_ptr> vertPlot1(new TypedPlot("y","cm",&trkVert_y,100,-5.0,5.0)); - vertCutFlows.push_back(std::move(vertPlot1)); - std::unique_ptr> vertPlot2(new TypedPlot("z","cm",&trkVert_z,100,-50.0,50.0)); - vertCutFlows.push_back(std::move(vertPlot2)); - std::unique_ptr> vertPlot5(new TypedPlot("cos_T","",&trkVert_cos_T,40,-1.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot5)); - std::unique_ptr> vertPlot6(new TypedPlot("openingAngle","",&trkVert_openingAngle,40,-3.14,3.14)); - vertCutFlows.push_back(std::move(vertPlot6)); - std::unique_ptr> vertPlot7(new TypedPlot("parentPt","GeV",&trkVert_parentPt,200,0.0,200.0)); - vertCutFlows.push_back(std::move(vertPlot7)); - std::unique_ptr> vertPlot8(new TypedPlot("d_T","cm",&trkVert_d_T,40,0.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot8)); - std::unique_ptr> vertPlot9(new TypedPlot("R_T","cm",&trkVert_R_T,20,logspace(0.1,20.0,20))); - vertCutFlows.push_back(std::move(vertPlot9)); - std::unique_ptr> vertPlot10(new TypedPlot("highPt","GeV",&trk_pt,20,logspace(2.0,100.0,20))); - vertCutFlows.push_back(std::move(vertPlot10)); - std::unique_ptr> vertPlot11(new TypedPlot("lowPt","GeV",&trk_pt,100,0.0,100.0)); - vertCutFlows.push_back(std::move(vertPlot11)); - std::unique_ptr> vertPlot12(new TypedPlot("highD0","cm",&trk_d0,80,-2.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot12)); - std::unique_ptr> vertPlot13(new TypedPlot("lowD0","cm",&trk_d0,80,-2.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot13)); - std::unique_ptr> vertPlot14(new TypedPlot("delZ","cm",&trkVert_del_Z,100,0.0,1.5)); - vertCutFlows.push_back(std::move(vertPlot14)); - std::unique_ptr> vertPlot15(new TypedPlot("deltaZ0","cm",&trk_z0,100,0.0,10.0)); - vertCutFlows.push_back(std::move(vertPlot15)); - std::unique_ptr> vertPlot16(new TypedPlot("deltaEta","",&trk_eta,100,0.0,2.4)); - vertCutFlows.push_back(std::move(vertPlot16)); - std::unique_ptr> vertPlot17(new TypedPlot("deltaD0","cm",&trk_d0,100,0.0,10.0)); - vertCutFlows.push_back(std::move(vertPlot17)); - std::unique_ptr> vertPlot18(new TypedPlot("deltaPhi","",&trk_phi,100,0.0,6.3)); - vertCutFlows.push_back(std::move(vertPlot18)); - std::unique_ptr> vertPlot20(new TypedPlot("sumNumStubs","",&trk_nstub,12,0.0,12.0)); - vertCutFlows.push_back(std::move(vertPlot20)); - std::unique_ptr> vertPlot21(new TypedPlot("sumChi2rphidof","",&trk_chi2rphi,200,0.0,8.0)); - vertCutFlows.push_back(std::move(vertPlot21)); - std::unique_ptr> vertPlot22(new TypedPlot("sumChi2rzdof","",&trk_chi2rz,200,0.0,3.0)); - vertCutFlows.push_back(std::move(vertPlot22)); - std::unique_ptr> vertPlot23(new TypedPlot("sumBendChi2","",&trk_bendchi2,200,0.0,14.0)); - vertCutFlows.push_back(std::move(vertPlot23)); - std::unique_ptr> vertPlot24(new TypedPlot("sumMVA1","",&trk_MVA1,100,0.0,2.0)); - vertCutFlows.push_back(std::move(vertPlot24)); - std::unique_ptr> vertPlot26(new TypedPlot("leadEta","",&trk_eta,50,-2.4,2.4)); - vertCutFlows.push_back(std::move(vertPlot26)); - std::unique_ptr> vertPlot27(new TypedPlot("score","",&trkVert_score,50,0.0,1.0)); - vertCutFlows.push_back(std::move(vertPlot27)); - - std::vector> vertCutFlowsTP; - std::unique_ptr> vertPlotTP0(new TypedPlot("x","cm",&tpVert_x,100,-5.0,5.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP0)); - std::unique_ptr> vertPlotTP1(new TypedPlot("y","cm",&tpVert_y,100,-5.0,5.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP1)); - std::unique_ptr> vertPlotTP2(new TypedPlot("z","cm",&tpVert_z,100,-50.0,50.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP2)); - std::unique_ptr> vertPlotTP4(new TypedPlot("cos_T","",&tpVert_cos_T,40,-1.0,1.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP4)); - std::unique_ptr> vertPlotTP5(new TypedPlot("openingAngle","",&tpVert_openingAngle,40,-3.14,3.14)); - vertCutFlowsTP.push_back(std::move(vertPlotTP5)); - std::unique_ptr> vertPlotTP6(new TypedPlot("parentPt","GeV",&tpVert_parentPt,200,0.0,200.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP6)); - std::unique_ptr> vertPlotTP7(new TypedPlot("d_T","cm",&tpVert_d_T,40,0.0,0.2)); - vertCutFlowsTP.push_back(std::move(vertPlotTP7)); - std::unique_ptr> vertPlotTP8(new TypedPlot("R_T","cm",&tpVert_R_T,20,logspace(0.1,20.0,20))); - vertCutFlowsTP.push_back(std::move(vertPlotTP8)); - std::unique_ptr> vertPlotTP9(new TypedPlot("highPt","GeV",&tp_pt,20,logspace(2.0,100.0,20))); - vertCutFlowsTP.push_back(std::move(vertPlotTP9)); - std::unique_ptr> vertPlotTP10(new TypedPlot("lowPt","GeV",&tp_pt,100,0.0,100.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP10)); - std::unique_ptr> vertPlotTP11(new TypedPlot("highD0","cm",&tp_d0,80,-2.0,2.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP11)); - std::unique_ptr> vertPlotTP12(new TypedPlot("lowD0","cm",&tp_d0,80,-2.0,2.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP12)); - std::unique_ptr> vertPlotTP13(new TypedPlot("deltaZ0","cm",&tp_z0,100,0.0,10.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP13)); - std::unique_ptr> vertPlotTP14(new TypedPlot("deltaEta","",&tp_eta,100,0.0,2.4)); - vertCutFlowsTP.push_back(std::move(vertPlotTP14)); - std::unique_ptr> vertPlotTP15(new TypedPlot("deltaD0","cm",&tp_d0,100,0.0,10.0)); - vertCutFlowsTP.push_back(std::move(vertPlotTP15)); - std::unique_ptr> vertPlotTP16(new TypedPlot("deltaPhi","",&tp_phi,100,0.0,6.3)); - vertCutFlowsTP.push_back(std::move(vertPlotTP16)); - std::unique_ptr> vertPlotTP17(new TypedPlot("leadEta","",&tp_eta,50,-2.4,2.4)); - vertCutFlowsTP.push_back(std::move(vertPlotTP17)); - - std::vector vertType = {"matched","unmatched"}; - std::vector vertTypeTP = {"matched","all"}; - std::vector vertPlotTPModifiers = {"","_oneMatch"}; - uint vertCutsSize = 0; - for(uint i=0; igetDoPlot()) vertCutsSize++; - } - - TH1F* vertexCutFlows[vertCutFlows.size()][vertType.size()][vertCutsSize]; - TH1F* vertexCutFlowsMatchTP[vertCutFlowsTP.size()][vertCutsSize][vertPlotTPModifiers.size()]; - TH1F* vertexCutFlowsTP[vertCutFlowsTP.size()][vertPlotTPModifiers.size()]; - TH1F* vertexNumVertices[vertCuts.size()]; - TH1F* fiducialNumVertices[vertCuts.size()]; - - for(uint i=0; igetDoPlot()){ - i_plot++; - } - else{ - continue; - } - TString name = "h_trackVertex_"+vertCutFlows[i]->getVarName()+"_"+vertType[j]+"_"+vertCuts[k]->getCutName()+"Cut"; - if(vertCutFlows[i]->getMaxBin()==vertCutFlows[i]->getMinBin()){ - TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlows[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),bins.data()); - vertexCutFlows[i][j][i_plot] = hist; - } - else{ - float binWidth = (vertCutFlows[i]->getMaxBin() - vertCutFlows[i]->getMinBin()) / vertCutFlows[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; Track Vertex "+vertCutFlows[i]->getVarName()+" ("+vertCutFlows[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlows[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlows[i]->getNumBins(),vertCutFlows[i]->getMinBin(),vertCutFlows[i]->getMaxBin()); - vertexCutFlows[i][j][i_plot] = hist; - } - } - } - } - - for(uint i=0; igetDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint m=0; mgetVarName()+"_"+vertTypeTP[0]+"_"+vertCuts[k]->getCutName()+"Cut"+vertPlotTPModifiers[m]; - if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlowsTP[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); - vertexCutFlowsMatchTP[i][i_plot][m] = hist; - } - else{ - float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); - vertexCutFlowsMatchTP[i][i_plot][m] = hist; - } - } - } - } - - for(uint i=0; igetVarName()+"_"+vertTypeTP[1]+vertPlotTPModifiers[k]; - if(vertCutFlowsTP[i]->getMaxBin()==vertCutFlowsTP[i]->getMinBin()){ - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events "; - std::vector bins = vertCutFlowsTP[i]->getBins(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),bins.data()); - vertexCutFlowsTP[i][k] = hist; - } - else{ - float binWidth = (vertCutFlowsTP[i]->getMaxBin() - vertCutFlowsTP[i]->getMinBin()) / vertCutFlowsTP[i]->getNumBins(); - TString binLabel = std::to_string(binWidth); - TString labels = name+"; True Vertex "+vertCutFlowsTP[i]->getVarName()+" ("+vertCutFlowsTP[i]->getUnit()+") ; Events / "+binLabel+" "+vertCutFlowsTP[i]->getUnit(); - TH1F* hist = new TH1F(name,labels,vertCutFlowsTP[i]->getNumBins(),vertCutFlowsTP[i]->getMinBin(),vertCutFlowsTP[i]->getMaxBin()); - vertexCutFlowsTP[i][k] = hist; - } - } - } - - for(uint k=0; kgetCutName()+"Cut"; - TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; - TH1F* hist = new TH1F(name,labels,40,0,40); - vertexNumVertices[k] = hist; - } - - for(uint k=0; kgetCutName()+"Cut"; - TString labels = name+"; Number of Track Vertices"+" ; Events / 1.0"; - TH1F* hist = new TH1F(name,labels,40,0,40); - fiducialNumVertices[k] = hist; - } - - TH1F *h_numSelectedTrks = new TH1F("h_numSelectedTrks","h_numSelectedTrks; Number of Selected Tracks; Events / 1.0",100,0,100); - TH1F *h_numSelectedTrks_zoomOut = new TH1F("h_numSelectedTrks_zoomOut","h_numSelectedTrks_zoomOut; Number of Selected Tracks; Events / 10.0",100,0,1000); - TH1F *h_trk_H_T = new TH1F("h_trk_H_T","h_trk_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_trk_MET = new TH1F("h_trk_MET","h_trk_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_trk_oneMatch_H_T = new TH1F("h_trk_oneMatch_H_T","h_trk_oneMatch_H_T; Event Track Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_trk_oneMatch_MET = new TH1F("h_trk_oneMatch_MET","h_trk_oneMatch_MET; Event Track Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_tp_H_T = new TH1F("h_tp_H_T","h_tp_H_T; Event TP Scalar p_{T} Sum [GeV]; Events / 10.0",100,0,1000); - TH1F *h_tp_MET = new TH1F("h_tp_MET","h_tp_MET; Event TP Missing E_{T} [GeV]; Events / 4.0",100,0,400); - TH1F *h_trueVertex_numAllCuts = new TH1F("h_trueVertex_numAllCuts","h_trueVertex_numAllCuts; TP Vertices; Events / 1.0",40,0,40); - TH1F *h_trueVertex_numTPs = new TH1F("h_trueVertex_numTPs","h_trueVertex_numTPs; TPs Associated with Vertex; Events / 1.0",6,0,6); - TH1F *h_trackVertexBranch_numAllCuts = new TH1F("h_trackVertexBranch_numAllCuts","h_trackVertexBranch_numAllCuts; Track Vertices; Events / 1.0",40,0,40); - - // Displaced Vertex Plots - TH1F *h_res_tp_trk_x = new TH1F("h_res_tp_trk_x","h_res_tp_trk_x; x residual of vertex (cm) ; Events / 0.02 cm",100,-0.4,0.4); - TH1F *h_res_tp_trk_y = new TH1F("h_res_tp_trk_y","h_res_tp_trk_y; y residual of vertex (cm) ; Events / 0.02 cm",100,-0.4,0.4); - TH1F *h_res_tp_trk_x_zoomOut = new TH1F("h_res_tp_trk_x_zoomOut","h_res_tp_trk_x_zoomOut; x residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); - TH1F *h_res_tp_trk_y_zoomOut = new TH1F("h_res_tp_trk_y_zoomOut","h_res_tp_trk_y_zoomOut; y residual of vertex (cm) ; Events / 0.04 cm",500,-10,10); - TH1F *h_res_tp_trk_z = new TH1F("h_res_tp_trk_z","h_res_tp_trk_z; z residual of vertex (cm) ; Events / 0.05 cm",200,-6,6); - TH1F *h_res_tp_trk_r = new TH1F("h_res_tp_trk_r","h_res_tp_trk_r; r residual of vertex (cm) ; Events / 0.02 cm",100,-1,1); - TH1F *h_res_tp_trk_phi = new TH1F("h_res_tp_trk_phi","h_res_tp_trk_phi; phi residual of vertex ; Events / 0.02",100,-1,1); - - TH2F *h_trueVertex_charge_vs_numTPs = new TH2F("h_trueVertex_charge_vs_numTPs","h_trueVertex_charge_vs_numTPs; TPs Associated with Vertex; Net Charge",6,0,6,12,-6,6); - TH2F *h_correct_trackVertex_charge_vs_numTracks = new TH2F("h_correct_trackVertex_charge_vs_numTracks","h_correct_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); - TH2F *h_false_trackVertex_charge_vs_numTracks = new TH2F("h_false_trackVertex_charge_vs_numTracks","h_false_trackVertex_charge_vs_numTracks; Tracks Associated with Vertex; Net Charge",20,0,20,40,-20,20); - - std::string binVariable = ""; - std::vector> track_bins = {{-1,1}}; - std::vector> z0_bins; - double z0_bin_min = -20.0; - double z0_bin_width = 4.0; - double z0_bin_max = z0_bin_min+z0_bin_width; - while(z0_bin_max<20.0){ - z0_bins.push_back({z0_bin_min,z0_bin_max}); - z0_bin_min += (z0_bin_width/2); - z0_bin_max += (z0_bin_width/2); - } - std::vector> phi_bins; - double phi_bin_min = -TMath::Pi(); - double phi_bin_width = 0.6; - double phi_bin_max = phi_bin_min+phi_bin_width; - while(phi_bin_max numPart_primary_noCuts{}; - std::map numPart_primary_chi2rzdofCuts{}; - std::map numPart_primary_bendchi2Cuts{}; - std::map numPart_primary_chi2rphidofCuts{}; - std::map numPart_primary_nstubCuts{}; - std::map numPart_primary_ptCuts{}; - std::map numPart_primary_d0Cuts{}; - std::map numPart_primary_z0Cuts{}; - std::map numPart_np_noCuts{}; - std::map numPart_np_chi2rzdofCuts{}; - std::map numPart_np_bendchi2Cuts{}; - std::map numPart_np_chi2rphidofCuts{}; - std::map numPart_np_nstubCuts{}; - std::map numPart_np_ptCuts{}; - std::map numPart_np_d0Cuts{}; - std::map numPart_np_z0Cuts{}; - - if (tree == 0) return; - Long64_t nevt = tree->GetEntries(); - Long64_t n_findableEvent = 0; - Long64_t n_trueVertexEvent = 0; - //nevt = 100; - Vertex_Parameters geomTrackVertex; - Vertex_Parameters geomTrueVertex; - auto trackLoopTime = 0.; - auto tpLoopTime = 0.; - auto trueVertLoopTime = 0.; - auto trueVertPlotLoopTime = 0.; - auto trackVertLoopTime = 0.; - auto matchLoopTime = 0.; - auto trackVertPlotLoopTime = 0.; - //std::cout<<"before event loop"<GetEntry(i_evnt); - displayProgress(i_evnt, nevt); - std::vector> binnedSelectedTracks; - for(uint i=0; i selectedTracks; // Tracks - std::deque selectedTPs; // Tracking particles - std::vector trueVertices; - int maxPT_i = 0; - bool oneMatch = false; - bool findableEvent = false; - bool trueVertexEvent = false; - std::valarray trkMET = {0.0,0.0}; - float trkH_T = 0.0; - - vector> tpVert_indexTPs; - vector trkVert_indexMatch; - tpVert_d_T = new vector (); - tpVert_R_T = new vector (); - tpVert_cos_T = new vector (); - tpVert_x = new vector (); - tpVert_y = new vector (); - tpVert_z = new vector (); - tpVert_openingAngle = new vector (); - tpVert_parentPt = new vector (); - - // ---------------------------------------------------------------------------------------------------------------- - // track loop - //std::cout<<"starting track loop"<size(); ++it){ - bool isPrimary = true; - if(inputFile.Contains("DarkPhoton")){ - isPrimary = trk_matchtp_isHard->at(it); - } - if(inputFile.Contains("DisplacedTrackJet")){ - isPrimary = trk_matchtp_isHToB->at(it); - } - //std::cout<<"track pt: "<at(it)<<" eta: "<at(it)<<" d0 : "<at(it)<<" phi: "<at(it)<<" z0: "<at(it)<<" nstub: "<getDoPlot()){ - i_plot++; - } - bool mods = true; - TString cutName = preselCuts[icut]->getCutName(); - float cutValue = preselCuts[icut]->getCutValue(); - float param = preselCuts[icut]->getParam(it); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; - if(cutName.Contains("disk") && fabs(trk_eta->at(it))<=barrelEta) mods = false; - if(cutName.Contains("_H") && trk_pt->at(it)<=10) mods = false; - if(cutName.Contains("_L") && trk_pt->at(it)>10) mods = false; - if(cutName.Contains("_P") && fabs(trk_d0->at(it))>1) mods = false; - if(cutName.Contains("_D") && fabs(trk_d0->at(it))<=1 ) mods = false; - if(cutName.Contains("overlap") && (fabs(trk_eta->at(it))<=1.1 || fabs(trk_eta->at(it))>=1.7)) mods = false; - if(mods){ - if(cutName.Contains("max") && param>cutValue) break; - if(cutName.Contains("min") && paramgetDoPlot()) continue; - for(uint i=0; iat(it)==1 && isPrimary; - if(trackType[i]=="primary" && !primary) continue; - if(trackType[i]=="np" && primary) continue; - if(trackType[i]=="fake" && trkExt_fake->at(it)!=0) continue; - if(trackType[i]=="PU" && trkExt_fake->at(it)!=2) continue; - if(trackType[i]=="notHiggs" && !(trkExt_fake->at(it)==1 && !isPrimary)) continue; - string partId = to_string(trk_matchtp_pdgid->at(it)); - //numPartCutFlows[i][icut][partId]++; - for(uint j=0; jat(it)<=10) continue; - if(plotModifiers[j]=="_L" && trk_pt->at(it)>10) continue; - if(plotModifiers[j]=="_P" && fabs(trk_d0->at(it))>1) continue; - if(plotModifiers[j]=="_D" && fabs(trk_d0->at(it))<=1) continue; - if(plotModifiers[j]=="_barrel" && fabs(trk_eta->at(it))>barrelEta) continue; - if(plotModifiers[j]=="_disk" && fabs(trk_eta->at(it))<=barrelEta) continue; - for(uint ivar=0; ivargetParam(it); - TString varName = varCutFlows[ivar]->getVarName(); - if(varName.Contains("sector")){ - while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); - while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); - while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; - } - if(varName.Contains("d0")){ - param = fabs(param); - } - preselCutFlows[ivar][i][i_plot][j]->Fill(param); - } - for(uint ivar2D=0; ivar2DgetParam(it); - float param2 = varCutFlows2D[ivar2D].second->getParam(it); - TString varName1 = varCutFlows2D[ivar2D].first->getVarName(); - TString varName2 = varCutFlows2D[ivar2D].second->getVarName(); - if(varName1.Contains("sector")){ - while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); - while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); - while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; - } - if(varName2.Contains("sector")){ - while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); - while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); - while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; - } - preselCutFlows2D[ivar2D][i][i_plot][j]->Fill(param1,param2); - } - } - } - } - if(icut==preselCuts.size()){ - Track_Parameters* tp_params = new Track_Parameters(trk_matchtp_pt->at(it), trk_matchtp_d0->at(it), trk_matchtp_z0->at(it), trk_matchtp_eta->at(it), trk_matchtp_phi->at(it), trk_matchtp_pdgid->at(it), trk_matchtp_x->at(it), trk_matchtp_y->at(it), trk_matchtp_z->at(it)); - for(uint i=0; iat(it); - if (binVariable=="z0") trkVariable = fabs(trk_z0->at(it)); - if(trkVariabletrack_bins[i][0] ){ - binnedSelectedTracks[i].push_back(Track_Parameters(trk_pt->at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it))); - } - } - - - //std::cout<<"track params: "<at(it)<<" "<<-trk_d0->at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<<" "<at(it)<at(it), -trk_d0->at(it), trk_z0->at(it), trk_eta->at(it), trk_phi->at(it), -99999, -999., -999., -999., trk_rinv->at(it), it, tp_params, trk_nstub->at(it), trk_chi2rphi->at(it), trk_chi2rz->at(it), trk_bendchi2->at(it), trk_MVA1->at(it))); - trkH_T += trk_pt->at(it); - std::valarray trackPtVec = {trk_pt->at(it)*cos(trk_phi->at(it)),trk_pt->at(it)*sin(trk_phi->at(it))}; - trkMET -= trackPtVec; - } - } - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - trackLoopTime += std::chrono::duration_cast(end - begin).count(); - h_trk_H_T->Fill(trkH_T); - h_trk_MET->Fill(TMath::Sqrt(pow(trkMET[0],2)+pow(trkMET[1],2))); - h_numSelectedTrks->Fill(selectedTracks.size()); - //std::cout<<"num selected tracks: "<Fill(selectedTracks.size()); - - // ---------------------------------------------------------------------------------------------------------------- - // tracking particle loop - float tpH_T = 0.0; - std::valarray tpMET = {0.0,0.0}; - //std::cout<<"tp_pt size: "<size()<size(); it++){ - - float tmp_d0 = tp_d0->at(it); // Sign difference in the NTupleMaker - float tmp_z0 = tp_z0->at(it); - - bool isPrimary = true; - if(inputFile.Contains("DarkPhoton")) isPrimary = tp_isHard->at(it); - if(inputFile.Contains("DisplacedTrackJet")) isPrimary = tp_isHToB->at(it); - - uint icut=0; - for(icut=0; icutgetParam(it); - TString cutName = preselCutsTP[icut]->getCutName(); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - float cutValue = preselCutsTP[icut]->getCutValue(); - //std::cout<<"cutName: "<at(it))>barrelEta) mods = false; - if(cutName.Contains("disk") && fabs(tp_eta->at(it))<=barrelEta) mods = false; - if(cutName.Contains("_H") && tp_pt->at(it)<=10) mods = false; - if(cutName.Contains("_L") && tp_pt->at(it)>10) mods = false; - if(cutName.Contains("_P") && fabs(tp_d0->at(it))>1) mods = false; - if(cutName.Contains("_D") && fabs(tp_d0->at(it))<=1 ) mods = false; - if(cutName.Contains("overlap") && (fabs(tp_eta->at(it))<=1.1 || fabs(tp_eta->at(it))>=1.7)) mods = false; - if(mods){ - if(cutName.Contains("max") && param>cutValue) break; - if(cutName.Contains("min") && paramat(it)==0 && isPrimary; - if(tpType[i]=="primary" && !primary) continue; - if(tpType[i]=="np" && primary) continue; - if(tpType[i]=="PU" && tp_eventid->at(it)==0) continue; - if(tpType[i]=="notHiggs" && !(tp_eventid->at(it)==0 && !isPrimary)) continue; - if(tpType[i]=="match" && tp_nmatch->at(it)==0) continue; - string partId = to_string(tp_pdgid->at(it)); - //numPartCutFlowsTP[i][icut][partId]++; - for(uint j=0; jat(it)<=10) continue; - if(plotModifiers[j]=="_L" && tp_pt->at(it)>10) continue; - if(plotModifiers[j]=="_P" && fabs(tp_d0->at(it))>1) continue; - if(plotModifiers[j]=="_D" && fabs(tp_d0->at(it))<=1) continue; - if(plotModifiers[j]=="_barrel" && fabs(tp_eta->at(it))>barrelEta) continue; - if(plotModifiers[j]=="_disk" && fabs(tp_eta->at(it))<=barrelEta) continue; - for(uint ivar=0; ivargetParam(it); - TString varName = varCutFlowsTP[ivar]->getVarName(); - if(varName.Contains("sector")){ - while (param < -TMath::Pi()/9 ) param += 2*TMath::Pi(); - while (param > TMath::Pi()*2 ) param -= 2*TMath::Pi(); - while (param > TMath::Pi()/9) param -= 2*TMath::Pi()/9; - } - if(varName.Contains("d0")){ - param = fabs(param); - } - preselCutFlowsTP[ivar][i][icut][j]->Fill(param); - } - for(uint ivar2D=0; ivar2DgetParam(it); - float param2 = varCutFlowsTP2D[ivar2D].second->getParam(it); - TString varName1 = varCutFlowsTP2D[ivar2D].first->getVarName(); - TString varName2 = varCutFlowsTP2D[ivar2D].second->getVarName(); - if(varName1.Contains("sector")){ - while (param1 < -TMath::Pi()/9 ) param1 += 2*TMath::Pi(); - while (param1 > TMath::Pi()*2 ) param1 -= 2*TMath::Pi(); - while (param1 > TMath::Pi()/9) param1 -= 2*TMath::Pi()/9; - } - if(varName2.Contains("sector")){ - while (param2 < -TMath::Pi()/9 ) param2 += 2*TMath::Pi(); - while (param2 > TMath::Pi()*2 ) param2 -= 2*TMath::Pi(); - while (param2 > TMath::Pi()/9) param2 -= 2*TMath::Pi()/9; - } - preselCutFlowsTP2D[ivar2D][i][icut][j]->Fill(param1,param2); - } - } - } - } - if(icut==preselCutsTP.size() && tp_eventid->at(it)==0 && isPrimary==true){ - selectedTPs.push_back(Track_Parameters(tp_pt->at(it), tmp_d0, tmp_z0, tp_eta->at(it), tp_phi->at(it), tp_pdgid->at(it), tp_x->at(it), tp_y->at(it), tp_z->at(it), tp_charge->at(it), it)); - if (tp_eventid->at(it)>0){ - tpH_T += tp_pt->at(it); - std::valarray tpPtVec = {tp_pt->at(it)*cos(tp_phi->at(it)),tp_pt->at(it)*sin(tp_phi->at(it))}; - tpMET -= tpPtVec; - } - } - } - end = std::chrono::steady_clock::now(); - tpLoopTime += std::chrono::duration_cast(end - begin).count(); - h_tp_H_T->Fill(tpH_T); - h_tp_MET->Fill(TMath::Sqrt(pow(tpMET[0],2)+pow(tpMET[1],2))); - - // -------------------------------------------------------------------------------------------- - // Vertex finding in Tracking Particles - // -------------------------------------------------------------------------------------------- - //if (!(selectedTracks.size() >= 2)) continue; - double_t x_dv = -9999.0;// (tp_x->at((*selectedTPs)[0]->index));//+tp_x->at((*selectedTPs)[1]->index))/2.0; - double_t y_dv = -9999.0;// (tp_y->at((*selectedTPs)[0]->index));//+tp_y->at((*selectedTPs)[1]->index))/2.0; - double_t z_dv = -9999.0;// (tp_z->at((*selectedTPs)[0]->index));//+tp_z->at((*selectedTPs)[1]->index))/2.0; - - if(selectedTPs.size()>=2){ - begin = std::chrono::steady_clock::now(); - //std::cout<<"vertex finding in TPs"<1){ - bool foundTrueVertex = false; - for( uint i=1; iat(index0)-tp_x->at(index1))<0.0001 && fabs(tp_y->at(index0)-tp_y->at(index1))<0.0001 && fabs(tp_z->at(index0)-tp_z->at(index1))<0.0001 ){ - x_dv = tp_x->at(index0); - y_dv = tp_y->at(index0); - z_dv = tp_z->at(index0); - if(dist(x_dv,y_dv)>d0_res && dist(x_dv,y_dv)<20){ - //std::cout<<"true vertex: "<at(selectedTPs[0].index)<<" "<at(selectedTPs[i].index)<Fill(trueVertices.size()); - float maxPT = 0.0; - // loop through trueVertices and fill ntuple branches - for(uint i=0; imaxPT){ - maxPT = trueVertices[i].a.pt; - maxPT_i = i; - } - - std::vector itps; - for(uint itrack=0; itrackpush_back(trueVertices[i].d_T); - tpVert_cos_T->push_back(trueVertices[i].cos_T); - tpVert_R_T->push_back(trueVertices[i].R_T); - tpVert_x->push_back(trueVertices[i].x_dv); - tpVert_y->push_back(trueVertices[i].y_dv); - tpVert_z->push_back(trueVertices[i].z_dv); - tpVert_openingAngle->push_back(trueVertices[i].openingAngle); - tpVert_parentPt->push_back(trueVertices[i].p_mag); - - float netCharge = 0; - for(uint itrack=0; itrackFill(trueVertices[i].tracks.size()); - h_trueVertex_charge_vs_numTPs->Fill(trueVertices[i].tracks.size(),netCharge); - - if(netCharge==0){ - trueVertexEvent = true; - float chargeOfFirstTrack = 0.0; - for(uint itrack=0; itrackat(itp)!=-999); - if(hasTrack){ - if(chargeOfFirstTrack==0.0){ - chargeOfFirstTrack = charge; - } - else{ - if(charge == (-1*chargeOfFirstTrack)) findableEvent = true; - } - } - } - } - - } - end = std::chrono::steady_clock::now(); - trueVertLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - // fill true vertex plots using ntuple branches - for (int it = 0; it < (int)tpVert_d_T->size(); it++){ - for(uint i=0; igetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - param = fabs(param1 - param2); - vertexCutFlowsTP[i][k]->Fill(param); - } - continue; - } - else if(varName.Contains("high")){ - param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - if(fabs(param2)>fabs(param)) param = param2; - } - } - else if(varName.Contains("low")){ - param = vertCutFlowsTP[i]->getParam(tpVert_indexTPs[it][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[it][iTP]); - if(fabs(param2)getParam(tpVert_indexTPs[it][0]); - } - else{ - param = vertCutFlowsTP[i]->getParam(it); - } - vertexCutFlowsTP[i][k]->Fill(param); - } - } - } - end = std::chrono::steady_clock::now(); - trueVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); - - } - - // -------------------------------------------------------------------------------------------- - // Vertex finding in Tracks - // -------------------------------------------------------------------------------------------- - //std::cout<<"vertex finding in tracks"< lastBinVertices; - for(auto trackBin : binnedSelectedTracks){ - std::vector binVertices; - if(trackBin.size()<2) continue; - sort(trackBin.begin(), trackBin.end(), ComparePtTrack); - for(uint i=0; ipush_back(trackBin[i].index); - //trkVert_secondIndexTrk->push_back(trackBin[j].index); - //trkVert_firstIndexPt->push_back(i); - //trkVert_secondIndexPt->push_back(j); - //trkVert_inTraj->push_back(inTraj); - //trkVert_d_T->push_back(vertex.d_T); - //trkVert_R_T->push_back(vertex.R_T); - //trkVert_cos_T->push_back(vertex.cos_T); - //trkVert_del_Z->push_back(vertex.delta_z); - //trkVert_x->push_back(vertex.x_dv); - //trkVert_y->push_back(vertex.y_dv); - //trkVert_z->push_back(vertex.z_dv); - //trkVert_openingAngle->push_back(vertex.openingAngle); - //trkVert_parentPt->push_back(vertex.p_mag); - //trkVert_delIndexPt->push_back(fabs(i-j)); - //std::cout<<"found vertex"<push_back(x_trk_alt); - //trkVert_alt_y->push_back(y_trk_alt); - //trkVert_leadingCharge->push_back(vertex.a.charge); - //trkVert_subleadingCharge->push_back(vertex.b.charge); - } - } - } - lastBinVertices = binVertices; - } - end = std::chrono::steady_clock::now(); - trackVertLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - //std::cout<<"match track and true vertices"<size(); it++){ - int itp = trkVert_firstIndexTrk->at(it); - //std::cout<<"match vertices first track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); - //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 1 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<at(it); - //std::cout<<"match vertices second track index: "<at(itp), trk_matchtp_d0->at(itp), trk_matchtp_z0->at(itp), trk_matchtp_eta->at(itp), trk_matchtp_phi->at(itp), trk_matchtp_pdgid->at(itp), trk_matchtp_x->at(itp), trk_matchtp_y->at(itp), trk_matchtp_z->at(itp)); - //std::cout<<"trkVert xyz: "<at(it)<<" "<at(it)<<" "<at(it)<<" tp 2 params: "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<<" "<at(itp)<=2){ - trkVert_indexMatch.push_back(i); - foundMatch = true; - break; - } - } - if(!foundMatch) trkVert_indexMatch.push_back(-1); - } - end = std::chrono::steady_clock::now(); - matchLoopTime += std::chrono::duration_cast(end - begin).count(); - begin = std::chrono::steady_clock::now(); - bool filledOneMatch[vertCutsSize]; - bool isMatchedVec[trueVertices.size()][vertCutsSize]; - uint numVertices[vertCuts.size()]; - for(uint i = 0; isize(); it++){ - uint i_plot = -1; - for(uint i=0; igetDoPlot()){ - i_plot++; - } - TString cutName = vertCuts[i]->getCutName(); - float cutValue = vertCuts[i]->getCutValue(); - //std::cout<<"cutName: "<at(it)<<" "<at(it)<getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - param = fabs(param1 - param2); - } - else if(cutName.Contains("sum")){ - float param1 = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(cutName.Contains("Charge")){ - if(param1>0.0) param1 = 1.0; - if(param1<0.0) param1 = -1.0; - if(param2>0.0) param2 = 1.0; - if(param2<0.0) param2 = -1.0; - } - param = param1 + param2; - } - else if(cutName.Contains("high")){ - param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)>fabs(param)) param = param2; - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - } - else if(cutName.Contains("low")){ - param = vertCuts[i]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCuts[i]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); - if(cutName.Contains("D0") || cutName.Contains("Eta")) param = fabs(param); - } - else{ - param = vertCuts[i]->getParam(it); - } - //std::cout<<"trackVert cutName: "<cutValue) break; - if(cutName.Contains("min") && paramgetDoPlot()) continue; - for(uint j=0; jgetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - param = fabs(param1 - param2); - } - else if(varName.Contains("sum")){ - float param1 = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(varName.Contains("charge")){ - if(param1>0.0) param1 = 1.0; - if(param1<0.0) param1 = -1.0; - if(param2>0.0) param2 = 1.0; - if(param2<0.0) param2 = -1.0; - } - param = param1 + param2; - } - else if(varName.Contains("high")){ - param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)>fabs(param)) param = param2; - } - else if(varName.Contains("low")){ - param = vertCutFlows[k]->getParam(trkVert_firstIndexTrk->at(it)); - float param2 = vertCutFlows[k]->getParam(trkVert_secondIndexTrk->at(it)); - if(fabs(param2)getParam(trkVert_firstIndexTrk->at(it)); - } - else{ - param = vertCutFlows[k]->getParam(it); - } - vertexCutFlows[k][j][i_plot]->Fill(param); - } - if(vertType[j]=="matched"){ - for(uint k=0; kFill(tpVert_x->at(jt)-trkVert_x->at(it)); - h_res_tp_trk_x_zoomOut->Fill(tpVert_x->at(jt)-trkVert_x->at(it)); - h_res_tp_trk_y->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); - h_res_tp_trk_y_zoomOut->Fill(tpVert_y->at(jt)-trkVert_y->at(it)); - h_res_tp_trk_z->Fill(tpVert_z->at(jt)-trkVert_z->at(it)); - } - - for(uint m=0; mgetVarName(); - if(varName.Contains("delta")){ - float param1 = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - param = fabs(param1 - param2); - vertexCutFlowsMatchTP[m][i_plot][k]->Fill(param); - } - continue; - } - else if(varName.Contains("high")){ - param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - if(fabs(param2)>fabs(param)) param = param2; - } - } - else if(varName.Contains("low")){ - param = vertCutFlowsTP[m]->getParam(tpVert_indexTPs[jt][0]); - for(uint iTP=1; iTPgetParam(tpVert_indexTPs[jt][iTP]); - if(fabs(param2)getParam(tpVert_indexTPs[jt][0]); - } - else{ - param = vertCutFlowsTP[m]->getParam(jt); - } - vertexCutFlowsMatchTP[m][i_plot][k]->Fill(param); - } - } - break; - } - } - } - } - end = std::chrono::steady_clock::now(); - trackVertPlotLoopTime += std::chrono::duration_cast(end - begin).count(); - - h_trackVertexBranch_numAllCuts->Fill(numVertices[vertCuts.size()-1]); - //std::cout<<"num vertices: "<Fill(numVertices[i]); - if(findableEvent) fiducialNumVertices[i]->Fill(numVertices[i]); - } - if(findableEvent) n_findableEvent++; - if(trueVertexEvent) n_trueVertexEvent++; - - delete tpVert_d_T; - delete tpVert_R_T; - delete tpVert_cos_T; - delete tpVert_x; - delete tpVert_y; - delete tpVert_z; - delete tpVert_openingAngle; - delete tpVert_parentPt; -#if 0 - delete trkVert_firstIndexTrk; - delete trkVert_secondIndexTrk; - delete trkVert_firstIndexPt; - delete trkVert_secondIndexPt; - delete trkVert_inTraj; - delete trkVert_d_T; - delete trkVert_R_T; - delete trkVert_cos_T; - delete trkVert_del_Z; - delete trkVert_x; - delete trkVert_y; - delete trkVert_z; - delete trkVert_openingAngle; - delete trkVert_parentPt; - delete trkVert_delIndexPt; -#endif - - - } // End of Event Loop - - std::cout<<"nevt: "<Exec(mkDIR); - TString PRESELDIR = DIR + "/PreselectionPlots"; - TString makedirPreSel = "mkdir -p " + PRESELDIR; - const char *mkDIRPRESEL = makedirPreSel.Data(); - gSystem->Exec(mkDIRPRESEL); - TString VERTDIR = DIR + "/VertexPlots"; - TString makedirVert = "mkdir -p " + VERTDIR; - const char *mkDIRVERT = makedirVert.Data(); - gSystem->Exec(mkDIRVERT); - - TFile *fout; - fout = new TFile(outputDir + "output_" + inputFile, "recreate"); - TLegend* l = new TLegend(0.82,0.3,0.98,0.7); - l->SetFillColor(0); - l->SetLineColor(0); - l->SetTextSize(0.04); - l->SetTextFont(42); - - std::cout<<"trkEffOverlay"<Clear(); - TH1F* h_trkEff[preselCutsSize]; - uint i_plot = 0; - for(uint mcut=1; mcutgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - //std::cout<<"trkEffOverlay i j m k: "<Clone(); - h_trkEff[i_plot]->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trkEff[i_plot]); - h_trkEff[i_plot]->SetStats(0); - removeFlows(preselCutFlows[ivar][j][i_plot][k]); - TString cutLabel = preselCuts[mcut]->getCutLabel(); - TString varString = varCutFlows[ivar]->getVarName(); - h_trkEff[i_plot]->Divide(preselCutFlows[ivar][j][i_plot][k],h_trkEff[i_plot],1.0,1.0,"B"); - if(i_plot!=10){ - h_trkEff[i_plot]->SetLineColor(i_plot); - h_trkEff[i_plot]->SetMarkerColor(i_plot); - } - else{ - h_trkEff[i_plot]->SetLineColor(40); - h_trkEff[i_plot]->SetMarkerColor(40); - } - //TString cutLabel = preselCuts[mcut]->getCutLabel(); - //std::cout<<"cutName: "<AddEntry(h_trkEff[i_plot],cutLabel,"lp"); - //TString varString = varCutFlows[ivar]->getVarName(); - if(varString.Contains("d0") || varString.Contains("pt")){ - std::cout<<"h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_trkEff[i_plot]->GetBinContent(ibin)) + ", "; - binWidths+=to_string(h_trkEff[i_plot]->GetBinWidth(ibin)) + ", "; - binErrors+=to_string(h_trkEff[i_plot]->GetBinError(ibin)) + ", "; - binCenters+=to_string(h_trkEff[i_plot]->GetBinCenter(ibin)) + ", "; - } - binValues+="]"; - binWidths+="]"; - binErrors+="]"; - binCenters+="]"; - std::cout<<"binValues: "<Draw(); - } - else{ - h_trkEff[i_plot]->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - /* - TString label_cms="CMS"; - TLatex* Label_cms = new TLatex(0.15,0.92,label_cms); - Label_cms->SetNDC(); - Label_cms->SetTextFont(61); - Label_cms->SetTextSize(0.065); - Label_cms->Draw(); - TString label_cms1="Simulation Phase-2 Preliminary"; - TLatex* Label_cms1 = new TLatex(0.232,0.92,label_cms1); - Label_cms1->SetNDC(); - Label_cms1->SetTextSize(0.051); - Label_cms1->SetTextFont(52); - Label_cms1->Draw();*/ - c.SaveAs(PRESELDIR + "/h_trkEffOverlay_"+varCutFlows[ivar]->getVarName()+"_"+trackType[j]+plotModifiers[k]+".pdf"); - /*std::cout << "trkEffOverlay took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n";*/ - } - } - } - - std::cout<<"signalvsbg"<getDoPlot()){ - i_plot++; - } - else{ - continue; - } - for(uint j=0; jgetCutName(); - auto h_stack = new THStack("hs_"+varCutFlows[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j],"Stacked BG histograms"); - float integralSum = 0; - l->Clear(); - for(uint m=0; mGetYaxis()->SetNoExponent(kTRUE); - removeFlows(preselCutFlows[kvar][m][i_plot][j]); - if(detailedPlots){ - raiseMax(preselCutFlows[kvar][m][i_plot][j]); - preselCutFlows[kvar][m][i_plot][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - //preselCutFlows[kvar][m][icut][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/"+ preselCutFlows[kvar][m][i_plot][j]->GetName() + ".pdf"); - } - if(m!=9){ - preselCutFlows[kvar][m][i_plot][j]->SetLineColor(m+1); - preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(m+1); - } - else{ - preselCutFlows[kvar][m][i_plot][j]->SetLineColor(40); - preselCutFlows[kvar][m][i_plot][j]->SetMarkerColor(40); - } - if(trackType[m]=="fake" || trackType[m]=="PU" || trackType[m]=="notHiggs"){ - integralSum+=preselCutFlows[kvar][m][i_plot][j]->Integral(); - } - /*std::cout << "preselCutFlows took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n";*/ - } - for(uint m=0; mScale(1./integralSum); - h_stack->Add(preselCutFlows[kvar][m][i_plot][j]); - } - } - - //h_stack->Draw("HIST"); - preselCutFlows[kvar][m_primary][i_plot][j]->Scale(1./preselCutFlows[kvar][m_primary][i_plot][j]->Integral()); - /* - raiseMaxStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); - drawSameStack(preselCutFlows[kvar][m_primary][icut][j],h_stack); - mySmallText(0.3, 0.9, 1, ctxt); - l->Clear(); - l->AddEntry(preselCutFlows[kvar][m_primary][icut][j],"Primary","l"); - l->AddEntry(preselCutFlows[kvar][m_fake][icut][j],"Fake","l"); - l->AddEntry(preselCutFlows[kvar][m_PU][icut][j],"PU","l"); - l->AddEntry(preselCutFlows[kvar][m_notHiggs][icut][j],"notHiggs","l"); - l->Draw(); - c.SaveAs(PRESELDIR + "/h_signalVsBGStack_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - */ - delete h_stack; - for(uint m=0; mScale(1./preselCutFlows[kvar][m][i_plot][j]->Integral()); - preselCutFlows[kvar][m][i_plot][j]->SetStats(0); - } - /* - raiseMax(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); - drawSame(preselCutFlows[kvar][m_primary][icut][j],preselCutFlows[kvar][m_fake][icut][j],preselCutFlows[kvar][m_PU][icut][j],preselCutFlows[kvar][m_notHiggs][icut][j]); - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - //std::cout<<"signalvsBGOverlay primary fake PU notHiggs: "<getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - std::cout << "signalVsBGOverlay took " - << std::chrono::duration_cast(finish - start).count() - << " milliseconds\n"; - */ - raiseMax(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); - drawSame(preselCutFlows[kvar][m_primary][i_plot][j],preselCutFlows[kvar][m_np][i_plot][j]); - mySmallText(0.3, 0.9, 1, ctxt); - l->Clear(); - l->AddEntry(preselCutFlows[kvar][m_primary][i_plot][j],"Primary","l"); - l->AddEntry(preselCutFlows[kvar][m_np][i_plot][j],"NP","l"); - l->Draw(); - preselCutFlows[kvar][m_primary][i_plot][j]->Write("", TObject::kOverwrite); - preselCutFlows[kvar][m_np][i_plot][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/h_signalVsBG_"+varCutFlows[kvar]->getVarName()+"_"+preselCuts[icut]->getCutName()+"Cut"+plotModifiers[j]+".pdf"); - } - } - } - std::cout<<"trackFindingEff"<getCutName(); - for(uint j=0; jGetYaxis()->SetNoExponent(kTRUE); - removeFlows(preselCutFlowsTP[kvar][m][icut][j]); - if(detailedPlots){ - raiseMax(preselCutFlowsTP[kvar][m][icut][j]); - preselCutFlowsTP[kvar][m][icut][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - //preselCutFlowsTP[kvar][m][icut][j]->Write("", TObject::kOverwrite); - c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP[kvar][m][icut][j]->GetName() + ".pdf"); - } - } - preselCutFlowsTP[kvar][m_match][icut][j]->Divide(preselCutFlowsTP[kvar][m_match][icut][j],preselCutFlowsTP[kvar][m_tp][icut][j]); - raiseMax(preselCutFlowsTP[kvar][m_match][icut][j]); - preselCutFlowsTP[kvar][m_match][icut][j]->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/h_trackFindingEff_"+varCutFlowsTP[kvar]->getVarName()+"_"+cutName+"Cut"+plotModifiers[j]+".pdf"); - } - } - } - - i_plot = -1; - for(uint icut=0; icutgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - TString cutName = preselCuts[icut]->getCutName(); - for(uint j=0; jDraw("COLZ"); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/"+ preselCutFlows2D[kvar][m][i_plot][j]->GetName() + ".pdf"); - } - } - } - } - std::cout<<"preselCutFlowsTP2D"<getCutName(); - for(uint j=0; jDraw("COLZ"); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(PRESELDIR + "/"+ preselCutFlowsTP2D[kvar][m][icut][j]->GetName() + ".pdf"); - } - } - } - } - } - std::cout<<"eff_trueVertex"<getVarName().Contains("highPt")) std::cout<<"onematch entries: "<GetEntries()<<" "<GetEntries()<Clone(); - h_eff->Divide(vertexCutFlowsMatchTP[j][vertCutsSize-1][i],vertexCutFlowsTP[j][i],1.0,1.0,"B"); - raiseMax(h_eff); - h_eff->SetStats(0); - h_eff->SetAxisRange(0, 1.1, "Y"); - h_eff->Draw(); - mySmallText(0.3, 0.9, 1, ctxt); - c.SaveAs(VERTDIR + "/h_eff_trueVertex_" + vertCutFlowsTP[j]->getVarName() + "_" + vertPlotTPModifiers[i] + ".pdf"); - } - } - std::cout<<"findEff_trueVertex"<Clear(); - uint i_plot = -1; - for(uint j=0; jgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - removeFlows(vertexCutFlowsMatchTP[i][i_plot][0]); - TH1F* h_findEff = (TH1F*)vertexCutFlowsMatchTP[i][i_plot][0]->Clone(); - h_findEff->Divide(vertexCutFlowsMatchTP[i][i_plot][0],vertexCutFlowsTP[i][0],1.0,1.0,"B"); - h_findEff->SetStats(0); - if(j!=9){ - h_findEff->SetLineColor(j+1); - h_findEff->SetMarkerColor(j+1); - } - else{ - h_findEff->SetLineColor(40); - h_findEff->SetMarkerColor(40); - } - l->AddEntry(h_findEff,vertCuts[j]->getCutLabel(),"lp"); - TString varString = vertCutFlowsTP[i]->getVarName(); - if(varString.Contains("R_T") || varString.Contains("highPt")){ - std::cout<<"/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"<getCutLabel()<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_findEff->GetBinContent(ibin)) + ", "; - binWidths+=to_string(h_findEff->GetBinWidth(ibin)) + ", "; - binErrors+=to_string(h_findEff->GetBinError(ibin)) + ", "; - binCenters+=to_string(h_findEff->GetBinCenter(ibin)) + ", "; - } - binValues+="]"; - binWidths+="]"; - binErrors+="]"; - binCenters+="]"; - std::cout<<"binValues: "<SetAxisRange(0, 1.1, "Y"); - h_findEff->Draw(); - } - else{ - h_findEff->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - c.SaveAs(VERTDIR + "/h_findEff_trueVertex_" + vertCutFlowsTP[i]->getVarName() + ".pdf"); - } -#if 0 - std::cout<<"fakeEff_trackVertex"<Clear(); - uint i_plot = 0; - for(uint j=1; jgetDoPlot()){ - i_plot++; - } - else{ - continue; - } - removeFlows(vertexCutFlows[i][1][i_plot]); - TH1F* h_fakeEff = (TH1F*)vertexCutFlows[i][1][i_plot]->Clone(); - h_fakeEff->Divide(vertexCutFlows[i][1][i_plot],vertexCutFlows[i][1][0],1.0,1.0,"B"); - h_fakeEff->SetStats(0); - if(j!=10){ - h_fakeEff->SetLineColor(j); - h_fakeEff->SetMarkerColor(j); - } - else{ - h_fakeEff->SetLineColor(40); - h_fakeEff->SetMarkerColor(40); - } - l->AddEntry(h_fakeEff,vertCuts[j]->getCutLabel(),"lp"); - if(i_plot==1){ - raiseMax(h_fakeEff); - h_fakeEff->Draw(); - } - else{ - h_fakeEff->Draw("SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - std::cout<<"h_fakeEff_trackVertex_" + vertCutFlows[i]->getVarName()<getVarName() + ".pdf"); - } -#endif - std::cout<<"correctVsFalse"<getDoPlot()){ - i_plot++; - } - else{ - continue; - } - l->Clear(); - for(uint k=0; kSetStats(0); - vertexCutFlows[i][k][i_plot]->Scale(1./vertexCutFlows[i][k][i_plot]->Integral()); - TString varString = vertCutFlows[i]->getVarName(); - if(varString.Contains("score") || varString.Contains("R_T")){ - std::cout<<"/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"<GetNbinsX()+1); ibin++){ - binValues+=to_string(vertexCutFlows[i][k][i_plot]->GetBinContent(ibin)) + ", "; - } - binValues+="]"; - std::cout<<"binValues: "<SetLineColor(k+1); - vertexCutFlows[i][k][i_plot]->SetMarkerColor(k+1); - } - else{ - vertexCutFlows[i][k][i_plot]->SetLineColor(40); - vertexCutFlows[i][k][i_plot]->SetMarkerColor(40); - } - l->AddEntry(vertexCutFlows[i][k][i_plot],vertType[k],"l"); - if(k==0){ - removeFlows(vertexCutFlows[i][k+1][i_plot]); - vertexCutFlows[i][k+1][i_plot]->Scale(1./vertexCutFlows[i][k+1][i_plot]->Integral()); - raiseMax(vertexCutFlows[i][k][i_plot],vertexCutFlows[i][k+1][i_plot]); - vertexCutFlows[i][k][i_plot]->Draw("HIST"); - } - else{ - vertexCutFlows[i][k][i_plot]->Draw("HIST,SAME"); - } - } - mySmallText(0.3, 0.9, 1, ctxt); - l->Draw(); - c.SaveAs(VERTDIR + "/h_correctVsFalse_" + vertCutFlows[i]->getVarName() + "_" + vertCuts[j]->getCutName() + "Cut.pdf"); - } - } - std::cout<<"trueVertex_charge_vs_numTPs"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trueVertex_charge_vs_numTPs); - h_trueVertex_charge_vs_numTPs->SetStats(0); - c.SetLogz(); - h_trueVertex_charge_vs_numTPs->Draw("COLZ"); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/h_trueVertex_charge_vs_numTPs.pdf"); - delete h_trueVertex_charge_vs_numTPs; - c.SetLogz(0); - - std::cout<<"numSelectedTrks"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numSelectedTrks); - h_numSelectedTrks->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_numSelectedTrks->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + ".pdf"); - h_numSelectedTrks->SetStats(0); - h_numSelectedTrks->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_numSelectedTrks->GetName() + "_noStatBox.pdf"); - delete h_numSelectedTrks; - - h_numSelectedTrks_zoomOut->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numSelectedTrks_zoomOut); - h_numSelectedTrks_zoomOut->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_numSelectedTrks_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + ".pdf"); - h_numSelectedTrks_zoomOut->SetStats(0); - h_numSelectedTrks_zoomOut->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_numSelectedTrks_zoomOut->GetName() + "_noStatBox.pdf"); - delete h_numSelectedTrks_zoomOut; - - std::cout<<"trk H_T"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_H_T); - h_trk_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_H_T->GetName() + ".pdf"); - delete h_trk_H_T; - - h_trk_oneMatch_H_T->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_oneMatch_H_T); - h_trk_oneMatch_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_oneMatch_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_oneMatch_H_T->GetName() + ".pdf"); - delete h_trk_oneMatch_H_T; - - std::cout<<"trkMET"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_MET); - h_trk_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_MET->GetName() + ".pdf"); - delete h_trk_MET; - - h_trk_oneMatch_MET->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trk_oneMatch_MET); - h_trk_oneMatch_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trk_oneMatch_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trk_oneMatch_MET->GetName() + ".pdf"); - delete h_trk_oneMatch_MET; - - std::cout<<"tp HT"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_tp_H_T); - h_tp_H_T->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_tp_H_T->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_tp_H_T->GetName() + ".pdf"); - delete h_tp_H_T; - std::cout<<"tp MET"<GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_tp_MET); - h_tp_MET->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_tp_MET->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_tp_MET->GetName() + ".pdf"); - delete h_tp_MET; -#if 0 - int numPart = numPart_primary_noCuts.size(); - TH1F *h_numPart_primary_noCuts = new TH1F("h_numPart_primary_noCuts","h_numPart_primary_noCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_chi2rzdofCuts = new TH1F("h_numPart_primary_chi2rzdofCuts","h_numPart_primary_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_bendchi2Cuts = new TH1F("h_numPart_primary_bendchi2Cuts","h_numPart_primary_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_chi2rphidofCuts = new TH1F("h_numPart_primary_chi2rphidofCuts","h_numPart_primary_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_nstubCuts = new TH1F("h_numPart_primary_nstubCuts","h_numPart_primary_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_ptCuts = new TH1F("h_numPart_primary_ptCuts","h_numPart_primary_ptCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_d0Cuts = new TH1F("h_numPart_primary_d0Cuts","h_numPart_primary_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_primary_z0Cuts = new TH1F("h_numPart_primary_z0Cuts","h_numPart_primary_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); - - int binNum = 1; - for(const auto & [key, value] : numPart_primary_noCuts){ - h_numPart_primary_noCuts->SetBinContent(binNum,value); - h_numPart_primary_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_noCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_noCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_ptCuts){ - h_numPart_primary_ptCuts->SetBinContent(binNum,value); - h_numPart_primary_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_ptCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_ptCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_d0Cuts){ - h_numPart_primary_d0Cuts->SetBinContent(binNum,value); - h_numPart_primary_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_d0Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_chi2rzdofCuts){ - h_numPart_primary_chi2rzdofCuts->SetBinContent(binNum,value); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_chi2rzdofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_bendchi2Cuts){ - h_numPart_primary_bendchi2Cuts->SetBinContent(binNum,value); - h_numPart_primary_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_bendchi2Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_chi2rphidofCuts){ - h_numPart_primary_chi2rphidofCuts->SetBinContent(binNum,value); - h_numPart_primary_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_chi2rphidofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_nstubCuts){ - h_numPart_primary_nstubCuts->SetBinContent(binNum,value); - h_numPart_primary_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_nstubCuts); - binNum = 1; - for(const auto & [key, value] : numPart_primary_z0Cuts){ - h_numPart_primary_z0Cuts->SetBinContent(binNum,value); - h_numPart_primary_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_primary_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_primary_z0Cuts); - h_numPart_primary_chi2rzdofCuts->SetName("partEff_pt_primary"); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); - h_numPart_primary_chi2rzdofCuts->Divide(h_numPart_primary_chi2rzdofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_chi2rzdofCuts->SetLineColor(1); - h_numPart_primary_chi2rzdofCuts->SetMarkerColor(1); - h_numPart_primary_chi2rzdofCuts->SetStats(0); - h_numPart_primary_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); - h_numPart_primary_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); - h_numPart_primary_chi2rzdofCuts->Draw(); - h_numPart_primary_bendchi2Cuts->Divide(h_numPart_primary_bendchi2Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_bendchi2Cuts->SetLineColor(2); - h_numPart_primary_bendchi2Cuts->SetMarkerColor(2); - h_numPart_primary_bendchi2Cuts->SetStats(0); - h_numPart_primary_bendchi2Cuts->Draw("SAME"); - h_numPart_primary_chi2rphidofCuts->Divide(h_numPart_primary_chi2rphidofCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_chi2rphidofCuts->SetLineColor(3); - h_numPart_primary_chi2rphidofCuts->SetMarkerColor(3); - h_numPart_primary_chi2rphidofCuts->SetStats(0); - h_numPart_primary_chi2rphidofCuts->Draw("SAME"); - h_numPart_primary_nstubCuts->Divide(h_numPart_primary_nstubCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_nstubCuts->SetLineColor(4); - h_numPart_primary_nstubCuts->SetMarkerColor(4); - h_numPart_primary_nstubCuts->SetStats(0); - h_numPart_primary_nstubCuts->Draw("SAME"); - h_numPart_primary_ptCuts->Divide(h_numPart_primary_ptCuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_ptCuts->SetLineColor(5); - h_numPart_primary_ptCuts->SetMarkerColor(5); - h_numPart_primary_ptCuts->SetStats(0); - h_numPart_primary_ptCuts->Draw("SAME"); - h_numPart_primary_d0Cuts->Divide(h_numPart_primary_d0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_d0Cuts->SetLineColor(6); - h_numPart_primary_d0Cuts->SetMarkerColor(6); - h_numPart_primary_d0Cuts->SetStats(0); - h_numPart_primary_d0Cuts->Draw("SAME"); - h_numPart_primary_z0Cuts->Divide(h_numPart_primary_z0Cuts,h_numPart_primary_noCuts,1.0,1.0,"B"); - h_numPart_primary_z0Cuts->SetLineColor(7); - h_numPart_primary_z0Cuts->SetMarkerColor(7); - h_numPart_primary_z0Cuts->SetStats(0); - h_numPart_primary_z0Cuts->Draw("SAME"); - mySmallText(0.4, 0.82, 1, ctxt); - l->Clear(); - l->AddEntry(h_numPart_primary_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_primary_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); - l->AddEntry(h_numPart_primary_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_primary_nstubCuts,"n_{stub} Cut","lp"); - l->AddEntry(h_numPart_primary_ptCuts,"p_{T} Cut","lp"); - l->AddEntry(h_numPart_primary_d0Cuts,"d_{0} Cut","lp"); - l->AddEntry(h_numPart_primary_z0Cuts,"z_{0} Cut","lp"); - l->Draw(); - c.SaveAs(DIR + "/h_partEffOverlay_pt_primary.pdf"); - delete h_numPart_primary_noCuts; - delete h_numPart_primary_ptCuts; - delete h_numPart_primary_d0Cuts; - delete h_numPart_primary_chi2rzdofCuts; - delete h_numPart_primary_bendchi2Cuts; - delete h_numPart_primary_chi2rphidofCuts; - delete h_numPart_primary_nstubCuts; - delete h_numPart_primary_z0Cuts; - - numPart = numPart_np_noCuts.size(); - TH1F *h_numPart_np_noCuts = new TH1F("h_numPart_np_noCuts","h_numPart_np_noCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_chi2rzdofCuts = new TH1F("h_numPart_np_chi2rzdofCuts","h_numPart_np_chi2rzdofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_bendchi2Cuts = new TH1F("h_numPart_np_bendchi2Cuts","h_numPart_np_bendchi2Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_chi2rphidofCuts = new TH1F("h_numPart_np_chi2rphidofCuts","h_numPart_np_chi2rphidofCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_nstubCuts = new TH1F("h_numPart_np_nstubCuts","h_numPart_np_nstubCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_ptCuts = new TH1F("h_numPart_np_ptCuts","h_numPart_np_ptCuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_d0Cuts = new TH1F("h_numPart_np_d0Cuts","h_numPart_np_d0Cuts; pdgid; Number of Particles",numPart,0,numPart); - TH1F *h_numPart_np_z0Cuts = new TH1F("h_numPart_np_z0Cuts","h_numPart_np_z0Cuts; pdgid; Number of Particles",numPart,0,numPart); - - binNum = 1; - for(const auto & [key, value] : numPart_np_noCuts){ - h_numPart_np_noCuts->SetBinContent(binNum,value); - h_numPart_np_noCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_noCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_noCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_ptCuts){ - h_numPart_np_ptCuts->SetBinContent(binNum,value); - h_numPart_np_ptCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_ptCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_ptCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_d0Cuts){ - h_numPart_np_d0Cuts->SetBinContent(binNum,value); - h_numPart_np_d0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_d0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_d0Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_chi2rzdofCuts){ - h_numPart_np_chi2rzdofCuts->SetBinContent(binNum,value); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_chi2rzdofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_bendchi2Cuts){ - h_numPart_np_bendchi2Cuts->SetBinContent(binNum,value); - h_numPart_np_bendchi2Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_bendchi2Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_bendchi2Cuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_chi2rphidofCuts){ - h_numPart_np_chi2rphidofCuts->SetBinContent(binNum,value); - h_numPart_np_chi2rphidofCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_chi2rphidofCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_chi2rphidofCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_nstubCuts){ - h_numPart_np_nstubCuts->SetBinContent(binNum,value); - h_numPart_np_nstubCuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_nstubCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_nstubCuts); - binNum = 1; - for(const auto & [key, value] : numPart_np_z0Cuts){ - h_numPart_np_z0Cuts->SetBinContent(binNum,value); - h_numPart_np_z0Cuts->GetXaxis()->SetBinLabel(binNum,key.c_str()); - binNum++; - } - h_numPart_np_z0Cuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_numPart_np_z0Cuts); - h_numPart_np_chi2rzdofCuts->SetName("partEff_pt_np"); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetTitle("pdgid"); - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetTitle("Cut Efficiency"); - h_numPart_np_chi2rzdofCuts->Divide(h_numPart_np_chi2rzdofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_chi2rzdofCuts->SetLineColor(1); - h_numPart_np_chi2rzdofCuts->SetMarkerColor(1); - h_numPart_np_chi2rzdofCuts->SetStats(0); - h_numPart_np_chi2rzdofCuts->GetYaxis()->SetRangeUser(0,1); - h_numPart_np_chi2rzdofCuts->GetXaxis()->SetRangeUser(0,numPart); - h_numPart_np_chi2rzdofCuts->Draw(); - h_numPart_np_bendchi2Cuts->Divide(h_numPart_np_bendchi2Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_bendchi2Cuts->SetLineColor(2); - h_numPart_np_bendchi2Cuts->SetMarkerColor(2); - h_numPart_np_bendchi2Cuts->SetStats(0); - h_numPart_np_bendchi2Cuts->Draw("SAME"); - h_numPart_np_chi2rphidofCuts->Divide(h_numPart_np_chi2rphidofCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_chi2rphidofCuts->SetLineColor(3); - h_numPart_np_chi2rphidofCuts->SetMarkerColor(3); - h_numPart_np_chi2rphidofCuts->SetStats(0); - h_numPart_np_chi2rphidofCuts->Draw("SAME"); - h_numPart_np_nstubCuts->Divide(h_numPart_np_nstubCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_nstubCuts->SetLineColor(4); - h_numPart_np_nstubCuts->SetMarkerColor(4); - h_numPart_np_nstubCuts->SetStats(0); - h_numPart_np_nstubCuts->Draw("SAME"); - h_numPart_np_ptCuts->Divide(h_numPart_np_ptCuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_ptCuts->SetLineColor(5); - h_numPart_np_ptCuts->SetMarkerColor(5); - h_numPart_np_ptCuts->SetStats(0); - h_numPart_np_ptCuts->Draw("SAME"); - h_numPart_np_d0Cuts->Divide(h_numPart_np_d0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_d0Cuts->SetLineColor(6); - h_numPart_np_d0Cuts->SetMarkerColor(6); - h_numPart_np_d0Cuts->SetStats(0); - h_numPart_np_d0Cuts->Draw("SAME"); - h_numPart_np_z0Cuts->Divide(h_numPart_np_z0Cuts,h_numPart_np_noCuts,1.0,1.0,"B"); - h_numPart_np_z0Cuts->SetLineColor(7); - h_numPart_np_z0Cuts->SetMarkerColor(7); - h_numPart_np_z0Cuts->SetStats(0); - h_numPart_np_z0Cuts->Draw("SAME"); - mySmallText(0.4, 0.82, 1, ctxt); - l->Clear(); - l->AddEntry(h_numPart_np_chi2rzdofCuts,"#chi^{2}_{rz}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_np_bendchi2Cuts,"#chi^{2}_{bend} Cut","lp"); - l->AddEntry(h_numPart_np_chi2rphidofCuts,"#chi^{2}_{r#phi}/d.o.f Cut","lp"); - l->AddEntry(h_numPart_np_nstubCuts,"n_{stub} Cut","lp"); - l->AddEntry(h_numPart_np_ptCuts,"p_{T} Cut","lp"); - l->AddEntry(h_numPart_np_d0Cuts,"d_{0} Cut","lp"); - l->AddEntry(h_numPart_np_z0Cuts,"z_{0} Cut","lp"); - l->Draw(); - c.SaveAs(DIR + "/h_partEffOverlay_pt_np.pdf"); - delete h_numPart_np_noCuts; - delete h_numPart_np_ptCuts; - delete h_numPart_np_d0Cuts; - delete h_numPart_np_chi2rzdofCuts; - delete h_numPart_np_bendchi2Cuts; - delete h_numPart_np_chi2rphidofCuts; - delete h_numPart_np_nstubCuts; - delete h_numPart_np_z0Cuts; -#endif - h_trueVertex_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trueVertex_numAllCuts); - h_trueVertex_numAllCuts->SetStats(0); - h_trueVertex_numAllCuts->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trueVertex_numAllCuts->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trueVertex_numAllCuts->GetName() + ".pdf"); - delete h_trueVertex_numAllCuts; - - h_trackVertexBranch_numAllCuts->GetYaxis()->SetNoExponent(kTRUE); - removeFlows(h_trackVertexBranch_numAllCuts); - c.SetLogy(); - h_trackVertexBranch_numAllCuts->SetStats(0); - h_trackVertexBranch_numAllCuts->Draw(); - mySmallText(0.4, 0.82, 1, ctxt); - h_trackVertexBranch_numAllCuts->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_trackVertexBranch_numAllCuts->GetName() + ".pdf"); - delete h_trackVertexBranch_numAllCuts; - c.SetLogy(0); - - std::cout<<"triggerEff"<GetNbinsX()+1); j++){ - numTriggers += vertexNumVertices[i]->GetBinContent(j); - } - std::cout<<"i cut: "<SetBinContent(i,numTriggers/nevt); - h_triggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); - } - raiseMax(h_triggerEff); - h_triggerEff->SetStats(0); - h_triggerEff->Draw("HIST, TEXT"); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_triggerEff->GetName() + ".pdf"); - delete h_triggerEff; - for(uint i=0; iGetNbinsX()+1); j++){ - numTriggers += fiducialNumVertices[i]->GetBinContent(j); - } - std::cout<<"cut: "<getCutName()<<" trigger efficiency of total events: "<SetBinContent(i,numTriggers/n_findableEvent); - h_fiducialTriggerEff->GetXaxis()->SetBinLabel(i,vertCuts[i]->getCutName()); - } - raiseMax(h_fiducialTriggerEff); - h_fiducialTriggerEff->SetStats(0); - h_fiducialTriggerEff->Draw("HIST, TEXT"); - mySmallText(0.4, 0.82, 1, ctxt); - c.SaveAs(DIR + "/"+ h_fiducialTriggerEff->GetName() + ".pdf"); - delete h_fiducialTriggerEff; - for(uint i=0; iFit("fit","R"); - h_res_tp_trk_x->SetStats(0); - h_res_tp_trk_x->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_x->Write("", TObject::kOverwrite); - - std::cout<<"h_res_tp_trk_x"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_x->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_x->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_x->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_x; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_x_zoomOut); - h_res_tp_trk_x_zoomOut->Fit("fit","R"); - h_res_tp_trk_x_zoomOut->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_x_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_x_zoomOut->GetName() + ".pdf"); - delete h_res_tp_trk_x_zoomOut; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_y); - h_res_tp_trk_y->Fit("fit","R"); - h_res_tp_trk_y->SetStats(0); - h_res_tp_trk_y->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_y->Write("", TObject::kOverwrite); - std::cout<<"h_res_tp_trk_y"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_y->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_y->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_y->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_y; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_y_zoomOut); - h_res_tp_trk_y_zoomOut->Fit("fit","R"); - h_res_tp_trk_y_zoomOut->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_y_zoomOut->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_y_zoomOut->GetName() + ".pdf"); - delete h_res_tp_trk_y_zoomOut; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_r); - h_res_tp_trk_r->Fit("fit"); - h_res_tp_trk_r->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_r->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_r->GetName() + ".pdf"); - delete h_res_tp_trk_r; - delete fit; - - fit = new TF1("fit", "gaus", -1, 1); - removeFlows(h_res_tp_trk_phi); - h_res_tp_trk_phi->Fit("fit"); - h_res_tp_trk_phi->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_phi->Write("", TObject::kOverwrite); - c.SaveAs(DIR + "/"+ h_res_tp_trk_phi->GetName() + ".pdf"); - delete h_res_tp_trk_phi; - delete fit; - - fit = new TF1("fit", "gaus", -10, 10); - removeFlows(h_res_tp_trk_z); - h_res_tp_trk_z->Fit("fit"); - h_res_tp_trk_z->SetStats(0); - h_res_tp_trk_z->Draw(); - rms = fit->GetParameter(2); - sprintf(res, "RMS = %.4f", rms); - mySmallText(0.22, 0.82, 1, res); - mySmallText(0.4, 0.42, 1, ctxt); - h_res_tp_trk_z->Write("", TObject::kOverwrite); - std::cout<<"h_res_tp_trk_z"<GetNbinsX()+1); ibin++){ - binValues+=to_string(h_res_tp_trk_z->GetBinContent(ibin)) + ", "; - binCenters+=to_string(h_res_tp_trk_z->GetBinCenter(ibin)) + ", "; - fitValues+=to_string(fit->Eval(h_res_tp_trk_z->GetBinCenter(ibin))) + ", "; - } - binValues+="]"; - binCenters+="]"; - fitValues+="]"; - std::cout<<"binValues: "<GetName() + ".pdf"); - delete h_res_tp_trk_z; - delete fit; - - //Geometric plot of circle projections and vertex locations - /*Double_t x_min=0; - Double_t x_max=0; - Double_t y_min=0; - Double_t y_max=0; - Double_t x_values[6] = {geomTrackVertex.a.x0-geomTrackVertex.a.rho,geomTrackVertex.a.x0+geomTrackVertex.a.rho,geomTrackVertex.b.x0-geomTrackVertex.b.rho,geomTrackVertex.b.x0+geomTrackVertex.b.rho,geomTrackVertex.x_dv,geomTrueVertex.x_dv}; - Double_t y_values[6] = {geomTrackVertex.a.y0-geomTrackVertex.a.rho,geomTrackVertex.a.y0+geomTrackVertex.a.rho,geomTrackVertex.b.y0-geomTrackVertex.b.rho,geomTrackVertex.b.y0+geomTrackVertex.b.rho,geomTrackVertex.y_dv,geomTrueVertex.y_dv}; - for(uint i=0;i<6;i++){ - if(x_values[i]x_max) x_max = x_values[i]; - if(y_values[i]y_max) y_max = y_values[i]; - } - x_min*=1.1; - x_max*=1.1; - y_min*=1.1; - y_max*=1.1; - c.DrawFrame(x_min,y_min,x_max,y_max); - float trk1_POCA_x = geomTrackVertex.a.d0*sin(geomTrackVertex.a.phi); - float trk1_POCA_y = -1*geomTrackVertex.a.d0*cos(geomTrackVertex.a.phi); - float trk2_POCA_x = geomTrackVertex.b.d0*sin(geomTrackVertex.b.phi); - float trk2_POCA_y = -1*geomTrackVertex.b.d0*cos(geomTrackVertex.b.phi); - TEllipse *circleTrk1 = new TEllipse(geomTrackVertex.a.x0,geomTrackVertex.a.y0,geomTrackVertex.a.rho,geomTrackVertex.a.rho); - circleTrk1->SetLineColor(kGreen); - circleTrk1->SetFillStyle(0); - TEllipse *circleTrk2 = new TEllipse(geomTrackVertex.b.x0,geomTrackVertex.b.y0,geomTrackVertex.b.rho,geomTrackVertex.b.rho); - circleTrk2->SetLineColor(kBlack); - circleTrk2->SetFillStyle(0); - auto trackTraj1 = new TF1("trackTraj1","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); - trackTraj1->SetParameters(geomTrackVertex.a.phi,trk1_POCA_x,trk1_POCA_y); - trackTraj1->SetLineColor(kGreen); - auto trackTraj2 = new TF1("trackTraj2","((sin([0])/cos([0]))*(x-[1]))+[2]",x_min,x_max); - trackTraj2->SetParameters(geomTrackVertex.b.phi,trk2_POCA_x,trk2_POCA_y); - trackTraj2->SetLineColor(kBlack); - TMarker m1(geomTrackVertex.x_dv,geomTrackVertex.y_dv,8); - TMarker m2(geomTrueVertex.x_dv,geomTrueVertex.y_dv,8); - TMarker m3(trk1_POCA_x,trk1_POCA_y,5); - TMarker m4(trk2_POCA_x,trk2_POCA_y,5); - //std::cout<<"trk1 POCA: "<Draw("SAME"); - circleTrk2->Draw("SAME"); - trackTraj1->Draw("SAME"); - trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeom.pdf"); - c.SaveAs(DIR + "/h_circleFitGeom.pdf"); - x_min = geomTrackVertex.x_dv; - x_max = geomTrueVertex.x_dv; - y_min = geomTrackVertex.y_dv; - y_max = geomTrueVertex.y_dv; - if(geomTrueVertex.x_dvDraw("SAME"); - circleTrk2->Draw("SAME"); - //trackTraj1->Draw("SAME"); - //trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); - c.SaveAs(DIR + "/h_circleFitGeomZoom.pdf"); - x_min=geomTrackVertex.x_dv; - x_max=geomTrackVertex.x_dv; - y_min=geomTrackVertex.y_dv; - y_max=geomTrackVertex.y_dv; - Double_t x_values_POCA[4] = {geomTrackVertex.x_dv,geomTrueVertex.x_dv,trk1_POCA_x,trk2_POCA_x}; - Double_t y_values_POCA[4] = {geomTrackVertex.y_dv,geomTrueVertex.y_dv,trk1_POCA_y,trk2_POCA_y}; - for(uint i=0;i<4;i++){ - if(x_values_POCA[i]x_max) x_max = x_values_POCA[i]; - if(y_values_POCA[i]y_max) y_max = y_values_POCA[i]; - } - x_min-=1; - x_max+=1; - y_min-=1; - y_max+=1; - c.DrawFrame(x_min,y_min,x_max,y_max); - circleTrk1->Draw("SAME"); - circleTrk2->Draw("SAME"); - trackTraj1->Draw("SAME"); - trackTraj2->Draw("SAME"); - m1.Draw("SAME"); - m2.Draw("SAME"); - m3.Draw("SAME"); - m4.Draw("SAME"); - c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); - c.SaveAs(DIR + "/h_circleFitGeomPOCA.pdf"); - fout->Close()*/; - - for(uint i=0; ix0; // Centers of the circles - float y1 = a->y0; // - float x2 = b->x0; // - float y2 = b->y0; // - float R1 = a->rho; // Radii of the circles - float R2 = b->rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if((R>=(R1-R2)) && (R<=(R1+R2))){ - return (0); - } - else if(R==0){ - return (-99999.0); - } - else{ - - return(R-R1-R2); - } -} - -Double_t dist_TPs(Track_Parameters a, Track_Parameters b){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho; // Radii of the circles - float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if((R>=(R1-R2)) && (R<=(R1+R2))){ - return (0); - } - else if(R==0){ - return (-99999.0); - } - else{ - - return(R-R1-R2); - } -} - -Int_t calcVertex(Track_Parameters a, Track_Parameters b, Double_t &x_vtx, Double_t &y_vtx, Double_t &z_vtx){ - float x1 = a.x0; // Centers of the circles - float y1 = a.y0; // - float x2 = b.x0; // - float y2 = b.y0; // - float R1 = a.rho; // Radii of the circles - float R2 = b.rho; - float R = dist(x1,y1,x2,y2); // Distance between centers - if(R==0) return -1; - float co1 = (pow(R1,2)-pow(R2,2))/(2*pow(R,2)); - float radicand = (2/pow(R,2))*(pow(R1,2)+pow(R2,2))-(pow(pow(R1,2)-pow(R2,2),2)/pow(R,4))-1; - float co2 = 0; - if(radicand>0) co2 = 0.5*TMath::Sqrt(radicand); - float ix1_x = 0.5*(x1+x2)+co1*(x2-x1)+co2*(y2-y1); - float ix2_x = 0.5*(x1+x2)+co1*(x2-x1)-co2*(y2-y1); - float ix1_y = 0.5*(y1+y2)+co1*(y2-y1)+co2*(x1-x2); - float ix2_y = 0.5*(y1+y2)+co1*(y2-y1)-co2*(x1-x2); - float ix1_z1 = a.z(ix1_x,ix1_y); - float ix1_z2 = b.z(ix1_x,ix1_y); - float ix1_delz = fabs(ix1_z1-ix1_z2); - float ix2_z1 = a.z(ix2_x,ix2_y); - float ix2_z2 = b.z(ix2_x,ix2_y); - float ix2_delz = fabs(ix2_z1-ix2_z2); - //std::cout<<"R: "<0) ? true : false; - bool trk1_ix2_inTraj = ((trk1_ix2_delxy[0]*trk1_traj[0]+trk1_ix2_delxy[1]*trk1_traj[1])>0) ? true : false; - bool trk2_ix1_inTraj = ((trk2_ix1_delxy[0]*trk2_traj[0]+trk2_ix1_delxy[1]*trk2_traj[1])>0) ? true : false; - bool trk2_ix2_inTraj = ((trk2_ix2_delxy[0]*trk2_traj[0]+trk2_ix2_delxy[1]*trk2_traj[1])>0) ? true : false; - //std::cout<<"ix1 inTraj: "<SetFrameBorderMode(0); - gStyle->SetFrameFillColor(0); - gStyle->SetCanvasBorderMode(0); - gStyle->SetCanvasColor(0); - gStyle->SetPadBorderMode(0); - gStyle->SetPadColor(0); - gStyle->SetStatColor(0); - gStyle->SetHistLineColor(1); - - gStyle->SetPalette(1); - - // set the paper & margin sizes - gStyle->SetPaperSize(20, 26); - gStyle->SetPadTopMargin(0.05); - gStyle->SetPadRightMargin(0.19); - gStyle->SetPadBottomMargin(0.16); - gStyle->SetPadLeftMargin(0.12); - - // set title offsets (for axis label) - gStyle->SetTitleXOffset(1.4); - gStyle->SetTitleYOffset(1.0); - - // use large fonts - gStyle->SetTextFont(42); - gStyle->SetTextSize(0.05); - gStyle->SetLabelFont(42, "x"); - gStyle->SetTitleFont(42, "x"); - gStyle->SetLabelFont(42, "y"); - gStyle->SetTitleFont(42, "y"); - gStyle->SetLabelFont(42, "z"); - gStyle->SetTitleFont(42, "z"); - gStyle->SetLabelSize(0.05, "x"); - gStyle->SetTitleSize(0.05, "x"); - gStyle->SetLabelSize(0.05, "y"); - gStyle->SetTitleSize(0.05, "y"); - gStyle->SetLabelSize(0.05, "z"); - gStyle->SetTitleSize(0.05, "z"); - - // use bold lines and markers - gStyle->SetMarkerStyle(20); - gStyle->SetMarkerSize(1.2); - gStyle->SetHistLineWidth(2.); - gStyle->SetLineStyleString(2, "[12 12]"); - - // get rid of error bar caps - gStyle->SetEndErrorSize(0.); - - // do not display any of the standard histogram decorations - gStyle->SetOptTitle(0); - //gStyle->SetOptStat(0); - gStyle->SetOptFit(0); - - // put tick marks on top and RHS of plots - gStyle->SetPadTickX(1); - gStyle->SetPadTickY(1); -} - -void mySmallText(Double_t x, Double_t y, Color_t color, char *text) -{ - Double_t tsize = 0.044; - TLatex l; - l.SetTextSize(tsize); - l.SetNDC(); - l.SetTextColor(color); - l.DrawLatex(x, y, text); -} - -void removeFlows(TH1F* h) -{ - int nbins = h->GetNbinsX(); - double underflow = h->GetBinContent(0); - double overflow = h->GetBinContent(nbins+1); - h->AddBinContent(1,underflow); - h->AddBinContent(nbins,overflow); - h->SetBinContent(0,0); - h->SetBinContent(nbins+1,0); -} - -void removeFlows(TH2F* h) -{ -} diff --git a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json b/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json deleted file mode 100644 index 0deff390146ce..0000000000000 --- a/L1Trigger/L1TTrackMatch/test/dispVertTaggerEmulationFixedPoint.json +++ /dev/null @@ -1,8285 +0,0 @@ -{ - "n_classes": 2, - "n_features": 20, - "n_trees": 50, - "max_depth": 6, - "init_predict": [ - 0 - ], - "norm": 1, - "trees": [ - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 19, - 0, - 16, - 1, - 13, - 1, - 12, - 1, - 19, - 0, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0625, - 9.625, - 0.125, - 12.125, - 5.8125, - 11.5, - 0.3125, - 10.25, - 5.0, - 5.875, - 5.0, - 10.5, - 4.1875, - 11.25, - 0.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 29368.0, - 163354.25, - 3616.0, - 25587.0625, - 37736.2891, - 27187.0, - 384.0, - 601.875, - 19736.1094, - 14391.625, - 3136.70312, - 3336.1875, - 22416.9434, - 3485.75, - 32.0, - -0.797696888, - -0.539590716, - 0.486171097, - -0.753912866, - -0.20703648, - 0.69339776, - -0.162136674, - -0.762850761, - -0.797049701, - -0.590831697, - 0.224416733, - -0.666462123, - -0.797455013, - -0.681675136, - -0.797068238, - -0.799886703 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 14, - 1, - 16, - 1, - 15, - 1, - 18, - 0, - 19, - 1, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0625, - 11.5, - 0.125, - 12.625, - 0.875, - 10.0, - 0.3125, - 9.125, - 0.875, - 34.375, - -0.875, - 9.125, - 3.875, - 10.375, - 0.625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 14464.0, - 75634.1875, - 2284.0, - 16702.4062, - 20858.8711, - 18375.7812, - 316.0, - 925.53125, - 10570.4512, - 267.013672, - 6861.98438, - 804.59375, - 16571.5254, - 3678.0, - 28.0, - -0.578469157, - -0.362245053, - -0.653661489, - 0.313483715, - -0.642708004, - 0.0289663132, - -0.722722411, - 0.480144888, - -0.578962505, - -0.483053684, - 0.267887533, - -0.479877532, - -0.578784704, - -0.458120316, - -0.577165067, - -0.579650104 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 1, - 0, - 16, - 0, - 13, - 12, - 15, - 0, - 1, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.125, - 8.25, - 0.3125, - 14.375, - 6.625, - 12.25, - 0.75, - 6.25, - 3.5, - 5.0, - 0.875, - 7.375, - 9.625, - 12.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 10814.0, - 55687.9375, - 434.0, - 4464.59375, - 30397.2969, - 4142.0, - 40.0, - 205.96875, - 8963.21777, - 3891.93945, - 16570.7832, - 351.875, - 10241.4141, - 318.5, - -0.500570476, - -0.500523567, - -0.451058954, - 0.231361493, - -0.512080014, - -0.195672914, - -0.547468245, - -0.454891503, - 0.428222805, - -0.50017637, - -0.452102095, - -0.472220987, - 0.101205401, - -0.499814749, - -0.468152761 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 14, - 1, - 16, - 1, - 13, - 2, - 18, - 0, - 19, - 0, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.125, - 8.0, - 0.3125, - 11.75, - 0.875, - 11.25, - 0.75, - 7.375, - 5.0, - 1.0, - 1.0, - 10.0, - 3.125, - 9.25, - 1.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 9737.0, - 38545.8281, - 598.0, - 4036.15625, - 19798.5332, - 4545.21875, - 57.0, - 151.59375, - 5156.50391, - 544.138672, - 13536.0654, - 389.8125, - 8524.36621, - 402.0, - 6.0, - -0.460472554, - -0.404424995, - 0.0675661787, - -0.466111958, - -0.509917557, - -0.190013051, - -0.539747596, - 0.263036937, - -0.460231692, - -0.40459916, - 0.163540974, - -0.402988762, - -0.460291386, - -0.425096273, - -0.459926456, - -0.460969508 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 16, - 0, - 18, - 0, - 16, - 1, - 12, - 1, - 15, - 0, - 19, - 0, - 18, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.125, - 8.125, - 0.3125, - 15.875, - 1.0, - 10.125, - 0.75, - 6.0, - 5.0, - 11.875, - 0.875, - 7.375, - 5.25, - 12.5, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 9615.0, - 31950.5938, - 863.0, - 6017.09375, - 14401.0215, - 5983.84375, - 86.0, - 220.90625, - 6644.48633, - 73.6162109, - 11812.9727, - 301.140625, - 8438.66992, - 548.5625, - 7.0, - -0.43877387, - -0.374846607, - 0.260067523, - -0.483042538, - -0.46974206, - -0.561884463, - -0.380707353, - 0.294229925, - -0.436478913, - -0.365484893, - 0.122441195, - -0.398073286, - -0.436351061, - -0.379107058, - -0.43841821, - -0.43698889 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 1, - 1, - 16, - 1, - 15, - 0, - 12, - 0, - 0, - 1, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.125, - 7.125, - 0.3125, - 15.0, - 5.375, - 9.625, - 0.75, - 7.125, - 0.875, - 19.375, - 5.0, - 10.0, - 7.375, - 11.125, - 1.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 9638.0, - 24339.5781, - 1230.0, - 2088.375, - 10473.1934, - 7128.0625, - 129.0, - 207.03125, - 2033.70142, - 1275.35547, - 9040.96973, - 333.03125, - 8623.80664, - 777.1875, - 10.5, - -0.423786461, - -0.354523301, - -0.47508961, - 0.0150410384, - -0.405673325, - -0.116858557, - 0.378958404, - -0.161708251, - -0.423430204, - -0.355333209, - -0.382998317, - 0.169728503, - -0.422267675, - -0.348144293, - -0.422441959, - -0.424699873 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 1, - 0, - 16, - 1, - 13, - 12, - 13, - 1, - 19, - 0, - 18, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.1875, - 6.625, - 0.4375, - 11.375, - 7.375, - 12.0, - 0.875, - 7.125, - 3.5, - 5.0, - 5.0, - 7.875, - 2.75, - 9.25, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 10784.0, - 24499.4531, - 678.25, - 1863.28125, - 11066.6895, - 3436.04688, - 74.75, - 87.1640625, - 2093.35059, - 2105.95312, - 10073.6582, - 334.046875, - 4743.62891, - 413.984375, - 8.0, - -0.415200621, - -0.36285159, - 0.00693594525, - -0.395599604, - -0.137961313, - -0.412101656, - 0.462073952, - -0.111925341, - -0.415104836, - -0.351584047, - 0.235782698, - -0.327637553, - -0.414330781, - -0.353501141, - -0.416089296, - -0.413697809 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 18, - 1, - 16, - 1, - 13, - 18, - 19, - 1, - 13, - 0, - 18, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.1875, - 5.875, - 0.4375, - 16.875, - 1.0, - 10.5, - 0.875, - 8.875, - 2.25, - 0.875, - 10.25, - 7.5, - 5.0, - 9.25, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 11610.25, - 19714.7031, - 969.75, - 1264.59375, - 10290.5117, - 4295.80469, - 112.25, - 130.015625, - 1198.43982, - 129.115234, - 8245.29199, - 284.320312, - 6237.18262, - 571.59375, - 13.0, - -0.40859285, - -0.334021181, - 0.0885838941, - -0.358648837, - -0.449760348, - -0.222910672, - 0.198522329, - -0.301524609, - -0.405791342, - -0.305954069, - 0.384205848, - -0.303760916, - -0.407757819, - -0.323280632, - -0.410490572, - -0.406966358 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 14, - 0, - 18, - 1, - 18, - 2, - 1, - 0, - 1, - -2, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.25, - 6.0, - 0.625, - 10.25, - 0.875, - 8.75, - 1.0, - 7.125, - 1.0, - -1.0625, - 5.0, - 6.0, - 9.875, - 0.0, - 9.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 12677.25, - 17511.4844, - 724.375, - 1516.21484, - 9008.55371, - 3274.23438, - 60.0, - 46.4882812, - 1271.26611, - 1072.75781, - 8677.83203, - 105.351562, - 5407.38135, - -0.4067339, - 333.921875, - -0.405549973, - -0.351903349, - -0.446367264, - -0.0947418511, - 0.0742183849, - -0.403388798, - -0.24330163, - 0.233345196, - -0.404802084, - -0.35265252, - -0.342809916, - 0.25091669, - -0.405426502, - -0.349119991 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - -1, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - -1, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 18, - 0, - 16, - 1, - 15, - 18, - 13, - 0, - 19, - 0, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.25, - 5.625, - 0.625, - 9.125, - 0.9375, - 8.75, - 1.4375, - 7.125, - 0.875, - 0.5625, - 20.0, - 6.0, - 2.25, - 9.25, - 2.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 13909.5, - 13700.8301, - 980.3125, - 1404.98828, - 7671.93115, - 3372.01172, - 90.0625, - 21.1484375, - 1034.74548, - 32.7402344, - 7103.35938, - 147.769531, - 4208.76611, - 454.1875, - 4.125, - -0.402820438, - -0.350516319, - -0.41693002, - -0.0829763338, - -0.435236275, - -0.313528329, - 0.135710821, - -0.403324038, - -0.400901765, - -0.327602714, - 0.365816414, - -0.270332634, - -0.401735693, - -0.318733871, - -0.401574582, - -0.404480994 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 6, - 16, - 12, - 0, - 1, - 18, - 13, - 2, - 6, - 12, - 0, - 19, - 16, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.25, - -0.4375, - 0.75, - 20.0, - 15.75, - 7.5, - 1.0, - 20.0, - -1.3125, - 0.6875, - 5.0, - 12.25, - 4.4375, - 2.4375, - 9.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 15241.6875, - 12098.7031, - 1323.375, - 6960.68408, - 4802.46484, - 4088.72656, - 75.625, - 5023.8623, - 461.906738, - 2097.92773, - 2821.54443, - 105.664062, - 4734.56152, - 3.0, - 413.699219, - 0.305850476, - -0.336215615, - 1.60202718, - -0.393205374, - -0.396431297, - -0.13841106, - 0.201276883, - -0.334844202, - -0.400026619, - -0.333966732, - 0.254581988, - -0.298250616, - -0.399912149, - -0.402829468, - -0.400519699, - -0.307399243 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 16, - 0, - 15, - 1, - 18, - 0, - 12, - 3, - 18, - 5, - 13, - 16, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.375, - 7.375, - 0.875, - 12.875, - 0.875, - 9.375, - 1.0, - 8.5, - 5.0, - -1.0625, - 0.8125, - -3.25, - 5.0, - 2.5625, - 9.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16343.5938, - 11889.9756, - 739.3125, - 4720.03516, - 7875.63135, - 2356.46094, - 65.28125, - 221.839844, - 2781.52319, - 1896.88428, - 6432.74707, - 267.654297, - 4029.46899, - 4.28125, - 330.929688, - -0.392836779, - -0.285540998, - 0.155911714, - -0.365238309, - 0.230117515, - -0.392069995, - -0.43611595, - 0.264502972, - 2.83507371, - -0.386400521, - 0.576557279, - -0.270146877, - -0.397552818, - -0.401658773, - -0.398910493, - -0.29773283 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 18, - 0, - 16, - 1, - 13, - 18, - 17, - 0, - 19, - 1, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.4375, - 5.0, - 0.875, - 8.875, - 0.9375, - 9.25, - 1.4375, - 6.5, - 2.25, - 0.4375, - 8.3125, - 6.125, - 2.125, - 8.5, - 2.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 15594.4062, - 9984.39453, - 678.84375, - 624.453125, - 5986.6958, - 2136.41016, - 95.8125, - 11.2402344, - 509.499146, - 56.5307617, - 6009.83789, - 103.331055, - 3512.18677, - 414.025391, - 15.90625, - -0.399332732, - -0.3588534, - -0.114237562, - -0.357497334, - -0.41834113, - -0.271081805, - 0.23461023, - -0.139274672, - -0.393078178, - -0.291836083, - 0.75554359, - -0.238427088, - -0.395272344, - -0.235777378, - -0.391156167, - -0.400584936 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 0, - 1, - 18, - 1, - 14, - 0, - 0, - 16, - 0, - 17, - 13, - 2, - 13, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 3.0, - 9.0, - 6.375, - 0.9375, - 9.5, - 0.875, - 7.0, - 6.25, - 0.3125, - 12.0, - 6.25, - 5.0, - 1.1875, - 20.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 16605.9531, - 44.515625, - 11443.2637, - 146.732422, - 6.75, - 4116.48047, - 7525.98242, - 8.84960938, - 464.444336, - 5.34375, - 24.28125, - 234.074219, - 4051.55273, - 1973.38721, - 4140.01562, - -0.399309158, - -0.373222113, - -0.374235481, - -0.010801387, - -0.417856306, - -0.400093168, - -0.397162408, - -0.351138204, - -0.313116908, - -0.398425668, - 0.164820135, - -0.323367357, - -0.343097329, - 0.456962317, - 0.287675142, - -0.252161652 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 1, - 1, - 18, - 0, - 19, - 0, - 19, - -2, - 0, - 17, - 17, - 12, - 19, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 3.0, - 7.25, - 6.375, - 0.9375, - 12.875, - 13.5625, - 7.0, - 1.0, - 0.0, - 12.0, - 7.3125, - 11.0, - 20.0, - 18.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 15439.2109, - 66.6484375, - 9418.49609, - 195.236328, - 9.890625, - 2176.85938, - 7928.03369, - 14.9667969, - 458.698608, - -0.399607301, - 34.3623047, - 285.212891, - 2599.57227, - 5108.32227, - 411.96582, - -0.398152322, - -0.358168185, - 0.202869579, - -0.329116642, - -0.395012021, - -0.330013275, - -0.294670522, - -0.396510422, - 0.0737167746, - -0.427821785, - 0.278080076, - -0.301793844, - -0.178549826, - -0.403337806 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - -1, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - -1, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 0, - 18, - 18, - 16, - 1, - 1, - 1, - 17, - 0, - 1, - 8, - 17, - 15, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 3.0, - 4.75, - 0.9375, - 0.9375, - 0.0625, - 13.125, - 5.875, - 5.875, - 3.8125, - 12.0, - 17.875, - -13.6875, - 9.75, - 0.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 14164.1562, - 97.1015625, - 6675.15967, - 259.799316, - 14.53125, - 385.676758, - 4897.01807, - 56.9462891, - 477.995819, - 3.359375, - 47.1630859, - 473.777466, - 180.563477, - 4888.15869, - 3926.09692, - -0.393437952, - -0.317827344, - -0.346997768, - 0.238515645, - -0.383197397, - -0.399285674, - -0.392086446, - -0.302316397, - -0.308833927, - 0.142513677, - -0.0587668717, - -0.378087521, - 0.0538824983, - -0.344479412, - -0.17400001, - 0.384526849 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 6, - 0, - 18, - 12, - 6, - 1, - 12, - 17, - 19, - 19, - 2, - 17, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 3.0, - -0.625, - 7.0, - 0.9375, - 5.0, - 0.625, - 7.0, - 3.5, - 3.8125, - 3.75, - 15.5, - 1.125, - 6.375, - 20.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 12850.2148, - 135.507812, - 4814.94287, - 341.461914, - 21.2617188, - 8685.25293, - 5390.72949, - 44.3413086, - 756.173218, - 5.46484375, - 67.7548828, - 2309.58008, - 4027.33496, - 2106.25098, - 2345.24585, - -0.394092709, - -0.307216078, - 0.271714032, - -0.368880123, - -0.37469697, - -0.398405373, - -0.24921982, - -0.386663318, - 0.649555802, - -0.117813684, - -0.164346069, - 1.02857649, - -0.164507046, - -0.454298019, - 0.276679367, - -0.355407923 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 19, - 0, - 18, - 16, - 16, - 14, - 17, - 0, - 1, - -2, - 1, - 8, - 2, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.0, - 4.0, - 5.5, - 0.9375, - 2.875, - 0.1875, - 0.875, - 3.8125, - 5.75, - 9.375, - 0.0, - 5.25, - -15.1875, - -1.0, - 14.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 11271.6895, - 184.03125, - 4026.59326, - 458.38623, - 15.703125, - 807.839355, - 3386.87598, - 78.4794922, - 640.028198, - 36.8798828, - -0.398338228, - 657.925171, - 138.092285, - 1675.57544, - 3444.69385, - -0.292776287, - -0.392577887, - -0.335682005, - 0.371591598, - -0.390133291, - -0.320655465, - -0.385559112, - -0.0100967465, - -0.042144727, - -0.372161388, - 0.373831034, - -0.318412006, - 0.185059234, - -0.269193143 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - -1, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - -1, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 1, - 0, - 0, - 13, - 19, - 2, - 9, - 14, - 7, - 3, - 4, - 17, - 16, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.4375, - 4.375, - 8.125, - 18.625, - 20.0, - 0.5, - 1.125, - -14.9375, - 0.875, - 0.625, - -1.4375, - -2.875, - 3.8125, - 1.9375, - 1.625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 9319.90137, - 4172.91748, - 140.728516, - 850.31543, - 3813.10132, - 9.84179688, - 509.497314, - 146.854492, - 586.894592, - 4616.9126, - 718.631104, - 62.3197937, - 8.3515625, - 265.415039, - 3059.44312, - 0.0325821005, - -0.371872306, - -0.414759845, - 0.0826172531, - -0.0889919102, - 0.296135634, - 7.13063812, - -0.351683974, - 0.666894615, - -0.353074163, - -0.363805413, - -0.398234189, - -0.0826241523, - -0.373208642, - -0.189611986, - 5.65383863 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 0, - 16, - 1, - 12, - 1, - 3, - 16, - 15, - 6, - 6, - 9, - 19, - 0, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.4375, - 4.25, - 2.4375, - 10.25, - 20.0, - 9.25, - 1.625, - 0.125, - 0.875, - -1.25, - -5.1875, - -13.5, - 0.375, - 6.25, - 19.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 8413.86816, - 2691.4729, - 113.880859, - 336.385742, - 2569.40601, - 292.401855, - 21.3867188, - 21.0571289, - 238.016785, - 2128.7168, - 354.258057, - 98.5395508, - 1046.12769, - 12.5410156, - 104.751465, - -0.318479061, - -0.401518434, - -0.402076006, - -0.0954222605, - 0.235005364, - -0.0348107331, - -0.10030736, - -0.396166354, - -0.00849893596, - -0.389413804, - 3.19613981, - -0.155693084, - -0.39782685, - -0.370300204, - -0.433496147, - 0.185601592 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 19, - 16, - 7, - 7, - 0, - 17, - 3, - 7, - 3, - 6, - 17, - 2, - 1, - 8, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.4375, - 10.5, - 2.875, - -1.0625, - -1.375, - 7.5, - 3.8125, - -1.125, - 0.4375, - -1.5625, - -1.1875, - 6.0, - -1.125, - 7.875, - -9.375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 6650.38086, - 2457.2832, - 133.166992, - 1940.43335, - 689.763184, - 217.031738, - 19.8779297, - 1143.30859, - 3749.91821, - 1176.9469, - 385.660889, - 8.89770508, - 572.651611, - 45.8777695, - 11.8056641, - 1.19639075, - 0.270965844, - -0.241517469, - 0.136204034, - 1.96321952, - -0.0309015661, - -0.175220698, - -0.367295176, - -0.347712815, - -0.400444418, - 1.4471848, - -0.221017227, - -0.354140311, - 0.151842624, - -0.351793677, - -0.401146978 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 15, - 18, - 16, - 3, - 1, - 1, - 0, - 7, - -2, - 3, - 7, - 16, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.9375, - 3.8125, - 0.875, - 0.75, - 3.8125, - 1.125, - 4.5, - 4.75, - 6.0, - 3.9375, - 0.0, - -1.125, - 2.625, - 0.125, - 14.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 5050.43848, - 152.575195, - 2743.66577, - 208.654724, - 10.9414062, - 1894.86108, - 2372.8064, - 61.7254639, - 373.673126, - 45.9255371, - -0.400680274, - 1949.45068, - 1062.02478, - 684.081909, - 2006.08093, - -0.386604756, - -0.234319195, - -0.265626311, - 0.645197272, - -0.386042714, - -0.201271206, - 0.271020859, - -0.418904871, - 0.0382798091, - 1.11327541, - -0.0327182002, - -0.338764995, - 0.173981398, - -0.219344303 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - -1, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - -1, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 11, - 19, - 7, - 13, - 3, - 1, - 7, - 13, - 0, - 3, - 1, - 9, - 9, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.625, - 1.5, - 6.1875, - 0.875, - 5.0, - -1.3125, - 9.875, - -0.5, - 5.0, - 12.625, - 1.5, - 13.5, - 4.0625, - -19.3125, - 1.1875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3556.95898, - 2120.34546, - 142.809082, - 1593.96997, - 1066.5636, - 424.533813, - 37.9003906, - 3163.01636, - 2278.26904, - 490.980438, - 644.328369, - 4626.87598, - 109.187317, - 16.0219727, - 294.262421, - 0.258959293, - -0.209734276, - 0.488539189, - 0.0250889845, - -0.131350234, - 0.216600403, - -0.342386425, - 0.936338127, - -0.0685137212, - 15.2735844, - -0.348019481, - -0.119149081, - -0.19639048, - -0.397785962, - -0.361518592, - 0.606309593 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 16, - 10, - 3, - 6, - 12, - 1, - 19, - 6, - 18, - 9, - 6, - 7, - 19, - 19, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 1.6875, - 1.5, - -1.3125, - 0.6875, - 5.0, - 13.5, - 3.75, - -0.3125, - 0.6875, - 9.25, - -3.5625, - 3.75, - 6.1875, - 3.5625, - 2.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 24837.3496, - 1823.51221, - 129617.484, - 1649.677, - 794.86438, - 1929147.0, - 155.151611, - 3478.83228, - 1070.44885, - 455.454987, - 532.107178, - 258.961304, - 715473.5, - 396.304169, - 51.373291, - 0.157637209, - -0.239840731, - -0.391064942, - 0.418760598, - -0.0933989286, - 0.363969058, - -0.103814714, - -0.39879638, - -0.350109696, - 1.42424858, - -133.743256, - -0.358721316, - -0.237477943, - 1.17488635, - -0.287960738, - -0.399561971 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 13, - 19, - 1, - 0, - 7, - 7, - 16, - 16, - 9, - 17, - 16, - 7, - 8, - 11, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 18.5625, - 20.0, - 36.4375, - 4.375, - 18.25, - -4.5625, - 8.625, - 0.0625, - 0.3125, - 8.375, - 19.1875, - 0.3125, - 7.3125, - -3.6875, - 2.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2355.07178, - 1961.09814, - 147.378662, - 1911.74097, - 435.764648, - 188.840576, - 38.8355713, - 485.733521, - 1600.78528, - 47.8813477, - 626.958252, - 237.184616, - 134.316895, - 5.85131836, - 141.056259, - 0.045349516, - -0.298564494, - 0.0223682653, - 0.304063082, - -0.431521088, - -0.281250983, - -0.111120775, - 2.9124248, - 0.467249691, - -0.268841356, - -0.331024259, - 0.0111232605, - -0.45546627, - -0.395558655, - -0.4047122, - -2.00952983 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 14, - 2, - 15, - 1, - 2, - 3, - 18, - 9, - 16, - 3, - 1, - 3, - 8, - 17, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - -1.125, - 0.875, - 13.125, - 1.0, - 1.125, - 0.75, - -8.3125, - 1.75, - -1.0, - 9.625, - -0.9375, - 3.3125, - 0.9375, - 8.1875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1961.07812, - 730.158936, - 1620.15881, - 612.190552, - 745.072266, - 777.540649, - 1506.69556, - 161.423691, - 400.545471, - 138.120361, - 677.85022, - 963.237183, - 539.515991, - 79.5408325, - 1325.49597, - 0.360456914, - -0.318434149, - 0.550196171, - 3.61055732, - -0.157764539, - -0.407177925, - -0.316943079, - 0.353946537, - 0.1019779, - -0.385007232, - -0.144498125, - 0.598767221, - -0.0708740279, - -0.35970363, - 0.207616478, - -0.0334575325 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 12, - 0, - 1, - 16, - 10, - 16, - 17, - 6, - 6, - 9, - 12, - 4, - 3, - 7, - 8, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 20.0, - 4.125, - 12.5, - 0.0625, - 2.0, - 0.125, - 6.375, - 0.9375, - -1.625, - -12.875, - 2.25, - -3.0, - -1.5625, - 5.75, - -9.125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1388.34058, - 1300.83728, - 270.484375, - 322.969238, - 1219.39209, - 17.8297119, - 463.348358, - 210.126923, - 131.358521, - 1175.49268, - 397.24292, - 24.9309082, - 14.9155273, - 67.6488647, - 508.039825, - -0.0828730687, - 0.575400591, - -0.0950872451, - -0.348943174, - 0.542067528, - 0.0498913564, - 0.0425429791, - -0.312535405, - 0.124836318, - -0.508039474, - -0.25512585, - -0.398332328, - -0.567086935, - -2.52315736, - 0.744759381, - -0.135570467 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 17, - 1, - 13, - 16, - 18, - 2, - 1, - 12, - 9, - 0, - 1, - 3, - 13, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 5.8125, - 3.625, - 35.625, - 5.0, - 0.125, - 1.0, - -0.875, - 3.875, - 5.0, - -12.1875, - 8.625, - 7.125, - -0.9375, - 5.0, - 12.25, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1205.1936, - 1285.70386, - 637.144409, - 1049.79285, - 2049.55176, - 591.449219, - 170.177856, - 949.794434, - 256.661774, - 645.039185, - 948.578613, - 95.1291504, - 651.046509, - 167.972382, - 79.098877, - -0.168778762, - 0.443577141, - -0.0220073052, - -0.548646331, - 0.400067091, - -0.301373363, - -0.138539836, - 0.21999681, - -0.371641904, - -0.168831512, - 0.19455193, - -0.11069309, - 0.377242744, - -0.43101868, - -0.417832524, - -0.679013669 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 14, - 1, - 8, - 12, - 3, - 3, - 0, - 8, - 19, - 16, - 2, - 0, - 2, - 17, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - 10.375, - -8.0, - 0.75, - -0.9375, - -0.5, - 13.25, - 11.0625, - 1.5, - 0.75, - 0.8125, - 36.375, - 0.8125, - 9.0, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1045.75378, - 302.854858, - 1161.33899, - 102.280396, - 569.473511, - 1144.87183, - 860.392944, - 109.798759, - 24.2915039, - 858.732178, - 584.252075, - 508.586182, - 294.876617, - 1413.88672, - 832.508667, - -0.0848535374, - 1.2888943, - -0.247014806, - -0.379813015, - 0.213597223, - 2.78558517, - -0.314969569, - 0.178578064, - 0.698230684, - -0.45462808, - -0.159169048, - 0.338451862, - 0.0109513728, - -0.312103719, - 0.211407736, - -0.0766840279 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 15, - 3, - 6, - 1, - 3, - 2, - 7, - 12, - 1, - 7, - 4, - 7, - 2, - 6, - 6, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.75, - 1.0625, - -1.25, - 23.875, - 1.375, - -1.0, - -0.375, - 1.5, - 25.125, - -2.6875, - -2.9375, - 0.4375, - 0.8125, - 0.3125, - -0.125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1078.29395, - 82.1234131, - 905.623047, - 47.6646729, - 218.0336, - 2098.36084, - 1783.26733, - 57.5632935, - 42.8181763, - 236.417511, - 44.1703491, - 630.619629, - 1584.33557, - 1133.83911, - 959.802368, - -0.158204556, - -0.367443293, - -1.07481563, - -0.445569187, - 3.82487917, - 0.194826826, - 0.326614201, - -0.432671696, - -0.314115852, - 0.912771165, - -0.0557552353, - 0.424759299, - -0.202300027, - 0.273786098, - -0.0373203121, - -0.311717093 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 14, - 3, - 2, - 7, - 8, - 18, - 2, - 7, - 6, - 3, - 5, - 0, - 9, - 9, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 24.375, - 0.875, - 1.5, - 1.0625, - 1.75, - 0.9375, - -0.9375, - -0.9375, - 1.5625, - 0.3125, - 1.0625, - 2.8125, - 7.875, - -4.5, - 8.375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 913.925354, - 702.016968, - 89.6072998, - 208.90741, - 706.518494, - 63.3562012, - 577.800842, - 296.022888, - 351.761383, - 1067.82422, - 1655.32544, - 112.068756, - 38.9656982, - 2075.12256, - 309.423218, - 0.0286132637, - -0.301005512, - -0.172443196, - 0.476351827, - -0.104219928, - 0.16715759, - 0.0845591426, - 0.851877868, - -0.321463168, - 0.172239199, - -0.337429494, - -0.53745985, - 14.4292984, - -0.344404936, - -0.39793694, - 1.10320318 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 3, - 15, - 6, - 16, - 3, - 7, - 13, - 17, - 7, - 1, - 7, - 3, - 6, - 13, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.9375, - 1.5, - 0.875, - 9.4375, - 1.5625, - -1.125, - 0.25, - 1.0, - 13.6875, - 0.875, - 10.125, - 1.375, - 1.0, - 0.1875, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 548990.188, - 49428.9375, - 752.352051, - 209.69455, - 113964.5, - 386.637207, - 636.388306, - 10.7701721, - 323.711853, - 46209.75, - 35575.1875, - 612.387329, - 303.834106, - 1681.46204, - 916.134094, - -0.176529452, - -0.39875862, - -6.92743826, - -0.305689871, - -8.58510876, - -23.2309532, - -4.02543402, - -18.0222626, - -0.188456371, - 0.589656711, - -0.326346546, - -0.0226580892, - -0.285802454, - 0.113528788, - 0.223182708, - -0.0279512238 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 17, - 3, - 16, - 12, - 6, - 17, - 5, - 16, - 18, - 6, - 2, - 19, - 9, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0, - 6.0625, - 18.0, - -1.25, - 1.4375, - 5.0, - -3.625, - 4.3125, - -2.6875, - 1.375, - -0.9375, - -0.375, - -0.875, - 2.25, - 12.625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 5300.9707, - 152.660645, - 594.716431, - 57.8009415, - 47.0966797, - 618.342529, - 186.791382, - 195.324524, - 40.3220367, - 601.370544, - 10.7724609, - 892.725952, - 1412.59009, - 211.897583, - 55.56604, - -0.177889571, - 1.5638932, - 0.18596971, - -0.331158131, - -0.420210123, - 2.92296767, - -0.488915026, - -0.400960445, - 0.235687047, - -0.0147163002, - 0.441243857, - -0.123221673, - 0.453104943, - -0.410402745, - -0.448826313, - -0.0428130515 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 11, - 16, - 6, - 17, - 19, - -2, - 3, - 7, - 13, - 8, - 17, - 9, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 24.375, - 2.0, - 1.4375, - -2.75, - 10.375, - 37.375, - 0.0, - -1.125, - -0.3125, - 1.5, - 6.1875, - 16.5, - -16.5625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3676.96362, - 518.933228, - 212.597168, - 498.106873, - 254.669464, - 134.656616, - -0.453337014, - 606.240723, - 755.34491, - 128.002258, - 306.552887, - 185.4254, - 24.3408508, - 0.671922922, - 0.109932438, - 0.150079384, - -0.0729453638, - -0.0333881937, - -0.307881624, - -0.0955970213, - 0.560048759, - -0.172979936, - 1.0522064, - 0.0498334542, - -0.451442778 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - -1, - 13, - 15, - 17, - 19, - 21, - 23, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - -1, - 14, - 16, - 18, - 20, - 22, - 24, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 17, - 17, - 7, - 19, - 9, - 17, - -2, - -2, - -2, - 0, - 19, - 9, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 3.9375, - 0.9375, - 6.0625, - 4.125, - 2.3125, - 8.25, - 6.0, - 0.0, - 0.0, - 0.0, - 3.75, - 5.375, - -10.5625, - -1.1875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2450.22339, - 63.8137207, - 613.343933, - 38.567627, - 2167.34351, - 1118.20239, - 433.946777, - 72.6485901, - -0.434085816, - 11.6077623, - -0.425772637, - 166.985718, - 95.4799347, - 555.699829, - 847.52478, - -0.282928556, - 1.36083066, - -0.0920088366, - 0.67104739, - -0.00201024883, - -0.345163107, - 0.19769372, - -0.075204879, - 0.677315652, - 0.0324920602 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - -1, - -1, - 17, - 19, - 21, - 23, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - -1, - -1, - 18, - 20, - 22, - 24, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 16, - 14, - 7, - 19, - 6, - 17, - 6, - 1, - 3, - 3, - 19, - 19, - 12, - 1, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.375, - 0.75, - 3.9375, - 22.25, - 7.375, - 12.875, - -2.9375, - 14.375, - -1.3125, - -1.3125, - 0.125, - 1.625, - 5.0, - 11.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 31179.7891, - 5385.28906, - 485.361389, - 1628.71875, - 1223.13672, - 131.790894, - 501.91864, - 16.3591919, - 1410.63867, - 960.109375, - 502.294922, - 100.278564, - 106.266693, - 536.783813, - 714.353882, - 0.129433811, - -0.351869553, - -1.43627059, - -3.67025423, - -1.76511824, - -0.725764871, - -1.12006688, - -0.504576862, - 0.278264552, - -0.295402497, - 1.35685444, - -0.362057328, - 0.116590656, - -0.0448689498, - -0.355029762, - 0.0365077928 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 16, - 15, - 6, - 3, - 19, - 1, - 19, - 3, - 6, - 19, - 17, - 7, - 0, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.4375, - 0.75, - 0.0625, - -0.9375, - 8.0, - 3.75, - 1.1875, - 1.375, - 9.25, - 18.0, - 9.5, - -4.1875, - 21.25, - 0.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 17875.1133, - 557.316406, - 422.188629, - 318.528809, - 293.673828, - 71.9724121, - 333.352997, - 204.413574, - 137.259567, - 379.28833, - 210.710938, - 76.3705978, - 48.4560242, - 507.060364, - 490.588959, - -1.53277957, - -0.818237305, - -0.496621609, - 0.2725842, - -0.7661497, - -3.34409952, - -0.590416133, - -0.487493038, - -0.07605692, - -0.362200946, - -0.0104494076, - -0.431454033, - -0.29229182, - 0.218965322, - -0.00690613408, - 0.170496985 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 2, - 19, - 16, - 2, - 9, - 4, - 17, - 3, - 3, - 9, - 8, - 3, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 3.9375, - 1.875, - 7.125, - 1.4375, - 0.5, - 11.5, - 2.5625, - 1.125, - 1.5625, - -1.3125, - -1.6875, - 7.1875, - 1.6875, - 0.5, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 11846.9277, - 126.849609, - 369.498291, - 98.7356567, - 162.294922, - 526.147644, - 554.759705, - 195.151855, - 11.7073975, - 827.84668, - 126.185547, - 566.252136, - 1332.10107, - 324.525818, - 266.491608, - -0.125012502, - 2.18551922, - 0.38215217, - -0.409482718, - -0.685675085, - 3.55113864, - -0.792095423, - -0.510920048, - 0.0645842254, - -0.11768315, - 0.0395129323, - 0.658224523, - -0.0884748772, - -0.559236944, - -0.0277509224, - 1.33886611 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 19, - 17, - 3, - 16, - 7, - 17, - -2, - 17, - 16, - 17, - 0, - 7, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 3.3125, - 5.8125, - 6.0625, - -1.0625, - 0.5625, - 4.4375, - 5.25, - 0.0, - 11.25, - 1.4375, - 3.4375, - 6.25, - -2.75, - -0.9375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 8266.32227, - 75.3203125, - 372.916016, - 76.0591431, - 69.4091797, - 505.593231, - 466.749451, - 135.574554, - -0.405469149, - 52.9312134, - 52.5429688, - 574.750488, - 777.354065, - 276.531555, - 529.291382, - -0.207333729, - 1.23714781, - -0.791438997, - -0.442380756, - -0.579056084, - -0.479808092, - 0.159834012, - -0.0667149946, - -0.177226365, - 0.40337348, - 0.0858908221, - -0.165126786, - 0.647552133, - 0.00908370037 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 15, - 7, - 3, - 7, - 6, - 17, - -2, - 19, - 16, - 13, - 11, - 3, - 7, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.5625, - 0.875, - 1.375, - -0.9375, - -3.3125, - -1.25, - 5.375, - 0.0, - 0.125, - 4.625, - 20.0, - 1.5, - -0.8125, - -0.25, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 5709.81689, - 51.9506836, - 339.578644, - 128.291412, - 28.6821289, - 214.434845, - 373.707855, - 62.0692444, - 2.37859154, - 84.5192871, - 15.2875977, - 200.674194, - 148.73941, - 496.185089, - 591.137207, - 0.0610284023, - -0.403323561, - -2.38988829, - -0.561949193, - -0.482810497, - -0.434229702, - 0.308348775, - -0.416763276, - -0.10595011, - -0.319873691, - 0.369093746, - 0.0466425084, - 0.0990414247, - -0.113846019 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 14, - 3, - 3, - 5, - 6, - 16, - 17, - 16, - 16, - 8, - 11, - 2, - 12, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.5625, - 0.875, - -0.5625, - 1.625, - -1.3125, - -3.0625, - 1.25, - 2.1875, - 4.625, - 1.4375, - 9.8125, - 2.0, - -1.1875, - 5.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 3917.98389, - 40.7949219, - 336.618439, - 65.736145, - 30.7246094, - 125.411194, - 267.996216, - 218.184525, - 36.1936798, - 12.7460938, - 117.426193, - 66.1185913, - 155.752853, - 517.483276, - 561.812561, - -0.333463162, - 1.9719342, - 0.181765363, - -0.404296607, - -0.475914568, - -0.423417896, - 0.668670058, - -0.491184384, - -0.327871859, - -0.0390625633, - -0.0313763991, - -0.418744296, - 0.881885171, - 0.0877382532, - 0.0477126651, - -0.146943256 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 1, - 19, - 3, - 16, - 13, - 6, - -2, - 17, - 16, - 16, - 3, - 9, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.5625, - 54.75, - 8.9375, - 1.625, - 4.625, - 2.25, - -0.125, - 0.0, - 6.8125, - 1.4375, - 4.5625, - -1.5625, - -13.5, - 127.875, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 2700.98096, - 36.6594238, - 297.38855, - 45.747406, - 22.78125, - 293.518158, - 290.402618, - 70.1839981, - -0.401826054, - 5.84179688, - 66.8133469, - 722.809753, - 14.546936, - 83.3919983, - 95.5877686, - 0.698604584, - -0.211999327, - -0.479192942, - -0.43231684, - 0.51963979, - -0.459389985, - 0.0119651696, - 4.10659456, - -0.0982959643, - -0.402676404, - -1.52740705, - 0.15464215, - -0.428516537, - -1.308761 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 16, - 0, - 3, - 18, - 6, - -2, - 0, - 0, - 7, - 0, - 3, - 7, - 6, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0, - 3.625, - 4.1875, - 3.875, - -2.1875, - 1.0, - 7.125, - 0.0, - 4.0, - 13.25, - 4.625, - 4.375, - -1.9375, - -5.6875, - 7.25, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1804.46838, - 96.411377, - 295.807739, - 39.2887001, - 20.6933594, - 365.795044, - 262.097229, - -0.371659636, - 72.4090958, - 65.4026794, - 11.8574219, - 532.293091, - 271.839874, - 15.4791565, - 199.280746, - 1.72131634, - 0.031160919, - -0.34676221, - 2.23265028, - -0.416983694, - -0.0739305839, - -0.240294725, - 0.446692854, - -0.292562246, - -0.00308533548, - -0.140036717, - -0.4301548, - 2.10289907, - -0.359679073 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - -1, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - -1, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 17, - 19, - 7, - 3, - 13, - 1, - -2, - 1, - 5, - 0, - 7, - 0, - 0, - 0, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.0, - 3.625, - 27.0625, - -3.0625, - -1.3125, - 20.0, - 5.0, - 0.0, - 5.5, - 2.875, - 18.25, - 7.6875, - 19.375, - 11.75, - 5.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 1176.72974, - 80.9337158, - 265.021973, - 32.7818298, - 18.0522461, - 246.457977, - 105.684113, - 1.44782495, - 25.6413422, - 99.3665466, - 14.3270264, - 371.880981, - 450.693298, - 173.744049, - 72.9718628, - -0.253349334, - 0.113289237, - -0.30038774, - 1.90043569, - -0.421919018, - -0.283719748, - 0.026539227, - -0.501741171, - -0.347454846, - 0.107859097, - -0.409339875, - 0.318086058, - -0.130913526, - -0.485602617 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - -1, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - -1, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 7, - 16, - 1, - 3, - 7, - 6, - 17, - 5, - -2, - 16, - 4, - 3, - 7, - 17, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 1.5625, - 4.1875, - 26.125, - 1.625, - 2.0625, - 7.125, - 5.375, - 1.25, - 0.0, - 1.4375, - -0.375, - 1.0, - -5.6875, - 17.0625, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 760.240234, - 46.940918, - 279.434204, - 58.8316154, - 54.0692139, - 282.712646, - 63.3693237, - 33.1840363, - 220.498596, - -0.422223717, - 42.450325, - 499.567596, - 588.737732, - 15.1039429, - 43.3671989, - 0.0419965535, - -0.395166785, - -0.214147612, - 4.54112864, - 0.550568819, - -0.39357236, - -0.186815143, - 0.0121483896, - 0.0257445425, - 0.434157342, - -0.126894549, - -0.421691656, - -0.371417135, - 0.556322753 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - -1, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - -1, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 13, - 10, - 1, - 3, - 17, - 13, - 15, - 15, - 7, - 0, - 12, - 13, - 1, - 5, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 2.25, - 2.0, - 8.0, - 1.625, - 12.875, - 5.0, - 0.75, - 0.875, - -4.1875, - 18.25, - 20.0, - 0.75, - 6.125, - -1.4375, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 568.387512, - 30.909668, - 253.524841, - 53.7798576, - 32.2409668, - 355.998535, - 317.202881, - 13.8459625, - 114.17894, - 23.9196167, - 36.957859, - 274.139557, - 646.409302, - 262.704315, - 166.359436, - 0.624518692, - -0.396267474, - -0.426431984, - 1.06845272, - 0.168768749, - -0.418668419, - -0.3922216, - 0.497637242, - 0.0586404279, - -0.164737687, - -0.695896924, - -0.0512115024, - -0.281964779, - 0.170390382, - -0.520908475, - -0.181440398 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 18, - 13, - 9, - 19, - 3, - 1, - 3, - 14, - -2, - 7, - 0, - 9, - 19, - 3, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - -0.6875, - 2.25, - 7.5625, - 8.125, - 1.625, - 16.375, - 0.5, - 0.875, - 0.0, - -4.1875, - 18.25, - -10.125, - 6.4375, - -1.125, - 1.75, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 377.6828, - 25.1782837, - 220.099747, - 28.9224815, - 21.8323669, - 312.199707, - 456.251038, - 50.9462471, - -0.395343244, - 19.8543701, - 22.2844963, - 422.921753, - 293.43219, - 583.501282, - 247.483398, - 0.663845062, - -0.200689152, - 0.0871962756, - -0.413476557, - -0.376995027, - 0.417845637, - 0.168731853, - -0.0917047188, - 0.152610287, - -0.0919781104, - 0.434017807, - -0.107186161, - 0.50589031, - -0.144169435 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 15, - 0, - 7, - 17, - 16, - 6, - 19, - 17, - -2, - 6, - 19, - 17, - 7, - 6, - 3, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 0.875, - 6.875, - 0.375, - 5.6875, - 0.25, - 0.1875, - 1.1875, - 5.625, - 0.0, - 0.25, - 1.375, - 2.0625, - -0.125, - -0.0625, - -0.8125, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 293.05658, - 175.27066, - 225.110321, - 34.5143127, - 134.135208, - 610.857178, - 419.538208, - 111.293785, - -0.416614145, - 112.551224, - 204.111145, - 382.048157, - 284.968872, - 165.145508, - 438.969391, - -0.24470596, - 2.40052629, - -0.255613446, - 0.0807962045, - -0.273946524, - 0.156961784, - -0.00105755962, - -0.301056504, - 0.112246513, - -0.261170119, - 0.273323387, - -0.0937331766, - 0.239441499, - -0.0465372019 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - -1, - 17, - 19, - 21, - 23, - 25, - 27, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - -1, - 18, - 20, - 22, - 24, - 26, - 28, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 13, - 8, - 3, - 17, - 1, - 1, - 6, - 1, - 8, - 12, - 3, - 3, - 17, - 0, - 16, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 5.0, - 8.4375, - 1.1875, - 10.0625, - 5.25, - 29.25, - 4.0, - 5.125, - -6.3125, - 0.75, - -0.9375, - -1.25, - 12.0, - 11.125, - 0.25, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 284.02951, - 487.978882, - 631.944092, - 482.428192, - 272.017517, - 494.253937, - 379.011841, - 426.335602, - 388.724335, - 77.3210983, - 227.204895, - 430.553131, - 205.659424, - 142.425568, - 207.009155, - -0.102367036, - 0.129462942, - 0.194557369, - -0.294744194, - 0.387696713, - -0.301374286, - -0.444913536, - 0.457739592, - 0.338365585, - -0.0865717456, - -0.555540979, - -0.115761459, - -0.0421918817, - 0.50180769, - 4.22600317, - 0.603091836 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ], - [ - { - "feature": [ - 19, - 6, - 6, - 0, - 12, - 1, - 2, - 2, - 1, - 0, - 2, - 1, - 0, - 6, - 2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2, - -2 - ], - "threshold": [ - 15.875, - -3.1875, - 6.8125, - 127.875, - 5.0, - 10.5, - -1.3125, - 0.9375, - 127.875, - 21.0, - -0.75, - 10.375, - 6.875, - 7.125, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "value": [ - 257.585419, - 245.18277, - 165.903412, - 251.400467, - 380.230469, - 176.810425, - 609.806091, - 216.519348, - 452.764099, - 390.148621, - 431.370117, - 668.380737, - 298.608734, - 247.316833, - 65.3068619, - 0.0781745836, - 0.407193333, - -0.347222656, - -7.28799438, - -0.0188171975, - 0.197599545, - 0.231790408, - -0.192508891, - -0.0969955549, - 2.87424445, - -0.0293427743, - -0.540873051, - 5.51908112, - -0.239703923, - -0.388241142, - 0.757643759 - ], - "children_left": [ - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ], - "children_right": [ - 2, - 4, - 6, - 8, - 10, - 12, - 14, - 16, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - ] - } - ] - ], - "config": { - "output_dir": "/nfs/data41/rmccarth/conifer", - "project_name": "conifer_prj_1729174758", - "backend": "python" - }, - "metadata": [ - { - "version": "1.5", - "host": "torreys.colorado.edu", - "user": "rmccarth", - "time": 1729174758.31608 - } - ] -} \ No newline at end of file diff --git a/L1Trigger/L1TTrackMatch/test/saveModelJson.py b/L1Trigger/L1TTrackMatch/test/saveModelJson.py deleted file mode 100644 index 8d61783b2fc3b..0000000000000 --- a/L1Trigger/L1TTrackMatch/test/saveModelJson.py +++ /dev/null @@ -1,5 +0,0 @@ -import conifer -import joblib -xgb = joblib.load("/nfs/data41/rmccarth/conifer/vertexing/dispVertTaggerEmulationFixedPoint.pkl") -model = conifer.converters.convert_from_xgboost(xgb) -model.save('dispVertTaggerEmulationFixedPoint.json') diff --git a/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx b/L1Trigger/L1TTrackMatch/test/trackAndVert_NewTQMVA_model.onnx deleted file mode 100644 index 5824542b67b4ca0e33dfa0778bb30dd547e86f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3089729 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≺z=qKfJ4UgJa+)4wRdlfgxy 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