From 3754a381e2437be3d19b6fce330dced184de8065 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 11:42:35 +0000 Subject: [PATCH 01/56] add ROOT stuff --- Banks/Makefile | 2 +- Banks/calorimeter.cpp | 44 ++++++++ Banks/calorimeter.h | 174 ++++++++++++++++++++++++++++++ Banks/cherenkov.cpp | 34 ++++++ Banks/cherenkov.h | 109 +++++++++++++++++++ Banks/clas12defs.h | 24 +++++ Banks/clas12event.h | 13 +-- Banks/forwardtagger.cpp | 35 ++++++ Banks/forwardtagger.h | 114 ++++++++++++++++++++ Banks/mesonex_event.cpp | 101 +++++++++++++++++ Banks/mesonex_event.h | 180 +++++++++++++++++++++++++++++++ Banks/particle.cpp | 21 ++-- Banks/particle.h | 36 +++++-- Banks/particle_detector.cpp | 79 ++++++++++++++ Banks/particle_detector.h | 101 +++++++++++++++++ Banks/scintillator.cpp | 35 ++++++ Banks/scintillator.h | 118 ++++++++++++++++++++ Banks/tracker.cpp | 34 ++++++ Banks/tracker.h | 114 ++++++++++++++++++++ Examples/Makefile | 7 +- Examples/analysis | Bin 0 -> 267048 bytes Examples/clas12event_example | Bin 0 -> 277512 bytes Examples/clas12event_example.cc | 12 ++- Examples/mesonexevent_example | Bin 0 -> 311264 bytes Examples/mesonexevent_example.cc | 77 +++++++++++++ Examples/readBanks | Bin 0 -> 266256 bytes Examples/readParticles | Bin 0 -> 266592 bytes Hipo/Makefile | 2 +- RunRoot/MesonexEvent.C | 68 ++++++++++++ RunRoot/MesonexEventHist.C | 75 +++++++++++++ RunRoot/MesonexEventTree.C | 69 ++++++++++++ RunRoot/README | 8 ++ RunRoot/importToROOT.C | 45 ++++++++ 33 files changed, 1694 insertions(+), 37 deletions(-) create mode 100644 Banks/calorimeter.cpp create mode 100644 Banks/calorimeter.h create mode 100644 Banks/cherenkov.cpp create mode 100644 Banks/cherenkov.h create mode 100644 Banks/clas12defs.h create mode 100644 Banks/forwardtagger.cpp create mode 100644 Banks/forwardtagger.h create mode 100644 Banks/mesonex_event.cpp create mode 100644 Banks/mesonex_event.h create mode 100644 Banks/particle_detector.cpp create mode 100644 Banks/particle_detector.h create mode 100644 Banks/scintillator.cpp create mode 100644 Banks/scintillator.h create mode 100644 Banks/tracker.cpp create mode 100644 Banks/tracker.h create mode 100755 Examples/analysis create mode 100755 Examples/clas12event_example create mode 100755 Examples/mesonexevent_example create mode 100644 Examples/mesonexevent_example.cc create mode 100755 Examples/readBanks create mode 100755 Examples/readParticles create mode 100644 RunRoot/MesonexEvent.C create mode 100644 RunRoot/MesonexEventHist.C create mode 100644 RunRoot/MesonexEventTree.C create mode 100644 RunRoot/README create mode 100644 RunRoot/importToROOT.C diff --git a/Banks/Makefile b/Banks/Makefile index b780cc0..70e63bb 100644 --- a/Banks/Makefile +++ b/Banks/Makefile @@ -9,7 +9,7 @@ LZ4INCLUDES := -I../Lz4/lib/ -I../Hipo libhipo: checkdirs $(OBJECTS) ar cr ../lib/libclas12banks.a $(OBJECTS) -# $(CXX) -shared -fPIC -o ../lib/libclas12banks.so $(OBJECTS) -llz4 +# $(CXX) -shared -fPIC -o ../lib/libclas12banks.so $(OBJECTS) -L../Lz4/lib/ -llz4 show: diff --git a/Banks/calorimeter.cpp b/Banks/calorimeter.cpp new file mode 100644 index 0000000..54bc79a --- /dev/null +++ b/Banks/calorimeter.cpp @@ -0,0 +1,44 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "calorimeter.h" + + +namespace clas12 { + + + void calorimeter::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" calorimeter::init "<-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in calorimeter bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDu(){ + if(_index>-1)return getFloat(_du_order,_index); + return 0; + } + double getDv(){ + if(_index>-1)return getFloat(_dv_order,_index); + return 0; + } + double getDw(){ + if(_index>-1)return getFloat(_dw_order,_index); + return 0; + } + double getHx(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHy(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHz(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getLu(){ + if(_index>-1)return getFloat(_lu_order,_index); + return 0; + } + double getLv(){ + if(_index>-1)return getFloat(_lv_order,_index); + return 0; + } + double getLw(){ + if(_index>-1)return getFloat(_lw_order,_index); + return 0; + } + double getM2u(){ + if(_index>-1)return getFloat(_m2u_order,_index); + return 0; + } + double getM2v(){ + if(_index>-1)return getFloat(_m2v_order,_index); + return 0; + } + double getM2w(){ + if(_index>-1)return getFloat(_m2w_order,_index); + return 0; + } + double getM3u(){ + if(_index>-1)return getFloat(_m3u_order,_index); + return 0; + } + double getM3v(){ + if(_index>-1)return getFloat(_m3v_order,_index); + return 0; + } + double getM3w(){ + if(_index>-1)return getFloat(_m3w_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _chi2_order=-1; + int _du_order=-1; + int _dv_order=-1; + int _dw_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _lu_order=-1; + int _lv_order=-1; + int _lw_order=-1; + int _m2u_order=-1; + int _m2v_order=-1; + int _m2w_order=-1; + int _m3u_order=-1; + int _m3v_order=-1; + int _m3w_order=-1; + int _status_order=-1; + + + + }; //class calorimeter + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/cherenkov.cpp b/Banks/cherenkov.cpp new file mode 100644 index 0000000..fa7c8e1 --- /dev/null +++ b/Banks/cherenkov.cpp @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "cherenkov.h" + + +namespace clas12 { + + + void cherenkov::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" cherenkov::init "<-1)return getFloat(_time_order,_index); + return 0; + } + int getNphe(){ + if(_index>-1)return getFloat(_nphe_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getTheta(){ + if(_index>-1)return getFloat(_theta_order,_index); + return 0; + } + double getPhi(){ + if(_index>-1)return getFloat(_phi_order,_index); + return 0; + } + double getDtheta(){ + if(_index>-1)return getFloat(_dtheta_order,_index); + return 0; + } + double getDPhi(){ + if(_index>-1)return getFloat(_dphi_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + private: + + int _nphe_order=-1; + int _path_order=-1; + int _time_order=-1; + int _dphi_order=-1; + int _dtheta_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _theta_order=-1; + int _phi_order=-1; + int _chi2_order=-1; + int _status_order=-1; + + + + }; //class cherenkov + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h new file mode 100644 index 0000000..a604b4c --- /dev/null +++ b/Banks/clas12defs.h @@ -0,0 +1,24 @@ +#ifndef CLAS12DEFS_H +#define CLAS12DEFS_H + + +namespace clas12{ + static const double FTOF = 12; + static const double CTOF = 4; + static const double CND = 3; + static const double EC = 7; + static const double FTCAL = 10; + static const double FTHODO = 11; + static const double HTCC = 15; + static const double LTCC = 16; + + + static const double FTOF1A = 121; + static const double FTOF1B = 122; + static const double PCAL = 71; + static const double ECIN = 72; + static const double ECOUT = 73; + +} + +#endif diff --git a/Banks/clas12event.h b/Banks/clas12event.h index d53e2fd..ad04f72 100644 --- a/Banks/clas12event.h +++ b/Banks/clas12event.h @@ -25,21 +25,12 @@ #include "detector.h" #include "vectors.h" #include "header.h" +#include "clas12defs.h" namespace clas12 { - static const double FTOF = 12; - static const double HTCC = 15; - static const double EC = 7; - - - static const double FTOF1A = 121; - static const double FTOF1B = 122; - static const double PCAL = 71; - static const double ECIN = 72; - static const double ECOUT = 73; - + class clas12event { private: diff --git a/Banks/forwardtagger.cpp b/Banks/forwardtagger.cpp new file mode 100644 index 0000000..0646abd --- /dev/null +++ b/Banks/forwardtagger.cpp @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "forwardtagger.h" + + +namespace clas12 { + + + void forwardtagger::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" forwardtagger::init "<-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDx(){ + if(_index>-1)return getFloat(_dx_order,_index); + return 0; + } + double getDy(){ + if(_index>-1)return getFloat(_dy_order,_index); + return 0; + } + double getRadius(){ + if(_index>-1)return getFloat(_radius_order,_index); + return 0; + } + int getSize(){ + if(_index>-1)return getInt(_size_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _dx_order=-1; + int _dy_order=-1; + int _radius_order=-1; + int _size_order=-1; + int _chi2_order=-1; + + + + }; //class forwardtagger + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/mesonex_event.cpp b/Banks/mesonex_event.cpp new file mode 100644 index 0000000..ed0867d --- /dev/null +++ b/Banks/mesonex_event.cpp @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12defs.h" +#include "mesonex_event.h" + + +namespace clas12 { + + void mesonex_event::init(hipo::reader &r){ + _particles.init("REC::Particle",r); + _header.init("REC::Event",r); + _calorimeter.init("REC::Calorimeter",r); + _tof.init("REC::Scintillator",r); + _cherenkov.init("REC::Cherenkov",r); + _ft.init("REC::ForwardTagger",r); + _track.init("REC::Track",r); + } + + vecPIDs mesonex_event::pids(){ + vecPIDs temp(_particles.getSize()); + + for(int ip=0; ip<_particles.getSize(); ip++) + temp[ip]=_particles.getPid(ip); + + return temp; + } + + bool mesonex_event::next_particle(){ + auto nparts=_particles.getSize(); + + //check if another particle + if( _pentry == nparts) + return false; + + _particles.setEntry(_pentry); + + checkTof(); //find prefered ToF hit + + checkFT(); //sort FT hodo&cal hit + + checkTrack(); //find particle track + + checkCalorimeter(); //set PCAL + + // _cherenkov.print(); + _pentry++; + return true; + } + + /////////////////////////////////////////////////////////////// + //Find hodo and cal hits to get time, and delta E etc. + void mesonex_event::checkFT(){ + _pftcal=_ft.getIndex(_pentry,clas12::FTCAL); + _pfthodo=_ft.getIndex(_pentry,clas12::FTHODO); + } + /////////////////////////////////////////////////////////////// + //if FTOF save tof index with preference layer1, layer2, layer0 + //if CTOF save preference CTOF then CND + void mesonex_event::checkTof(){ + _ptof=-1;//particle tof index + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1) + return; + + } + + //////////////////////////////////////////////////////////////// + //Look for track for this particle + void mesonex_event::checkTrack(){ + //return _tracker + auto trackids=_track.scanForParticle(_pentry); + if(trackids.size()){ + //should only be 1 track per particle so just take first index + _track.setIndex(trackids[0]); + } + else _track.setIndex(-1); + } + + ////////////////////////////////////////////////////////////////// + ///Use PCAL for time, path, sector,... + void mesonex_event::checkCalorimeter(){ + getPCAL(); + } +}//namespace clas12 + diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h new file mode 100644 index 0000000..fba4d64 --- /dev/null +++ b/Banks/mesonex_event.h @@ -0,0 +1,180 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: mesonex_event.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef MESONEX_EVENT_H +#define MESONEX_EVENT_H + +#include +#include +#include +#include +#include +#include +#include +#include "particle.h" +#include "particle_detector.h" +#include "scintillator.h" +#include "calorimeter.h" +#include "cherenkov.h" +#include "forwardtagger.h" +#include "tracker.h" +#include "header.h" +#include "clas12defs.h" + +namespace clas12 { + + + using vecPIDs=std::vector; + + class mesonex_event { + + public: + + mesonex_event()=default; + + mesonex_event(hipo::reader &r) { + init(r); + } + + ~mesonex_event()=default; + + void init(hipo::reader &r); + void reset(){_pentry=0;}; + bool next_particle(); + + vecPIDs pids(); + + void checkTof(); + void checkFT(); + void checkTrack(); + void checkCalorimeter(); + + double getCalTotEnergy(); + double getTime(); + int getSector(); + double getPath(); + double getDeltaE(); + double getTrackChi2(); + + int getPCAL(); + int getECIN(); + int getECOUT(); + int getHTCC(); + int getLTCC(); + + clas12::particle &particles(){return _particles;} + clas12::header &header(){ return _header;} + clas12::calorimeter &calorimeter(){ return _calorimeter;} + clas12::scintillator &tof(){return _tof;} + clas12::cherenkov &cherenkov(){return _cherenkov;} + clas12::forwardtagger &ft(){return _ft;} + clas12::tracker &track(){return _track;} + + const int getNParticles(){return _particles.getSize();} + + bool isFT(){return _pftcal!=-1;} + + private: + + + clas12::particle _particles; + clas12::header _header; + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + short _ptof=0; + short _pftcal=0; + short _pfthodo=0; + short _pentry=0; + + }; + inline double mesonex_event::getCalTotEnergy(){ + if(_pftcal>-1) return _ft.getEnergy(); + //note FT hit use EC + double energy = 0.0; + getPCAL(); + energy += _calorimeter.getEnergy(); + getECIN(); + energy += _calorimeter.getEnergy(); + getECOUT(); + energy += _calorimeter.getEnergy(); + return energy; + } + + inline int mesonex_event::getPCAL(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 1); + } + + + inline double mesonex_event::getTime(){ + if(_ptof>=0) + return _tof.getTime(); + if(_pftcal>=0) + return _ft.getTime(); + //if no tof hit use EC time + // _calorimeter.getIndex(clas12::EC, 1, _pentry); + return _calorimeter.getTime(); + } + inline int mesonex_event::getSector(){ + if(_ptof>=0) + return _tof.getSector(); + if(_pftcal>=0) + return 0; + //if no tof hit use EC time + return _calorimeter.getSector(); + } + inline double mesonex_event::getPath(){ + if(_ptof>=0) + return _tof.getPath(); + if(_pftcal>=0){ //currently no FT path reported + double ftx=_ft.getX(); + double fty=_ft.getY(); + double ftz=_ft.getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + } + return _ft.getPath(); + //if no tof hit use EC time + return _calorimeter.getPath(); + } + inline double mesonex_event::getDeltaE(){ + if(_ptof>=0) + return _tof.getEnergy(); + if(_pfthodo>=0) + return _ft.getEnergy(); + return 0; + } + + inline int mesonex_event::getECIN(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 4); + } + inline int mesonex_event::getECOUT(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 7); + } + inline int mesonex_event::getHTCC(){ + return _cherenkov.getIndex( _pentry,clas12::HTCC); + } + inline int mesonex_event::getLTCC(){ + return _cherenkov.getIndex( _pentry,clas12::LTCC); + } + inline double mesonex_event::getTrackChi2(){ + int ndf= _track.getNDF(); + if(ndf) + return _track.getChi2()/ndf; + return 0; + } +} + +#endif /* UTILS_H */ diff --git a/Banks/particle.cpp b/Banks/particle.cpp index 9f100ea..448f798 100644 --- a/Banks/particle.cpp +++ b/Banks/particle.cpp @@ -9,14 +9,19 @@ namespace clas12 { -void particle::init(const char *bankName, hipo::reader &r){ - initBranches(bankName,r); - pid_order = getEntryOrder("pid"); - px_order = getEntryOrder("px"); - py_order = getEntryOrder("py"); - pz_order = getEntryOrder("pz"); -} + void particle::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + pid_order = getEntryOrder("pid"); + px_order = getEntryOrder("px"); + py_order = getEntryOrder("py"); + pz_order = getEntryOrder("pz"); + vx_order = getEntryOrder("vx"); + vy_order = getEntryOrder("vy"); + vz_order = getEntryOrder("vz"); + ch_order = getEntryOrder("charge"); + st_order = getEntryOrder("status"); + + } - particle::~particle(){} } diff --git a/Banks/particle.h b/Banks/particle.h index d402689..057ddfc 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -37,19 +37,18 @@ namespace clas12 { int vx_order; int vy_order; int vz_order; - + int ch_order; + int st_order; + + short _entry=0; + public: - particle(){}; + particle() = default; - particle(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ - pid_order = getEntryOrder("pid"); - px_order = getEntryOrder("px"); - py_order = getEntryOrder("py"); - pz_order = getEntryOrder("pz"); - } + particle(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){}; - ~particle(); + ~particle() = default; void init(const char *bankName, hipo::reader &r); @@ -57,6 +56,21 @@ namespace clas12 { float getPx(int index) { return getFloat(px_order,index);} float getPy(int index) { return getFloat(py_order,index);} float getPz(int index) { return getFloat(pz_order,index);} + float getVx(int index) { return getFloat(vx_order,index);} + float getVy(int index) { return getFloat(vy_order,index);} + float getVz(int index) { return getFloat(vz_order,index);} + int getCharge(int index) { return getFloat(ch_order,index);} + int getStatus(int index) { return getFloat(st_order,index);} + + int getPid() { return getInt(pid_order,_entry);} + float getPx() { return getFloat(px_order,_entry);} + float getPy() { return getFloat(py_order,_entry);} + float getPz() { return getFloat(pz_order,_entry);} + float getVx() { return getFloat(vx_order,_entry);} + float getVy() { return getFloat(vy_order,_entry);} + float getVz() { return getFloat(vz_order,_entry);} + int getCharge() { return getFloat(ch_order,_entry);} + int getStatus() { return getFloat(st_order,_entry);} void getVector3(int index, vector3 &vect){ vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), @@ -67,12 +81,14 @@ namespace clas12 { vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), getFloat(pz_order,index),mass); } + void setEntry(short i){ _entry=i;} + /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort * particles and or map particles by pid or type (i.e. charge) */ - void notify(){ + void notify() override { //printf("particle class is read again\n"); } }; diff --git a/Banks/particle_detector.cpp b/Banks/particle_detector.cpp new file mode 100644 index 0000000..dabee63 --- /dev/null +++ b/Banks/particle_detector.cpp @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "particle_detector.h" +#include +#include + +namespace clas12 { + + + void particle_detector::init(const char *bankName, hipo::reader &r, std::string items){ + //if items exists use it to select only banks you want to use + readItems(items); + + initBranches(bankName,r); //init bank + //base detector need detector and pindex items + _detector_id_order = getEntryOrder("detector"); + _pindex_order = getEntryOrder("pindex"); + } + /////////////////////////////////////////////////////////////////////// + /// load items to be used + void particle_detector::readItems(std::string items){ + std::stringstream ss(items); + std::string sitem; + while(std::getline(ss, sitem, ':')) + _sitems.push_back(sitem); + } + /////////////////////////////////////////////////////////////////////// + ///check if item should be used + bool particle_detector::useItem(std::string item){ + if(!(_sitems.size())) return true; + if(std::find(_sitems.begin(),_sitems.end(),"c")!=_sitems.end()) + return true; + return false; + } + //////////////////////////////////////////////////////////////////////// + ///function to map the detector entry to particle index + void particle_detector::scanIndex(){ + _rmap.clear(); + const int size = getSize(); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer= getLayer(i); + int pindex = getPindex(i); + int key = (detector<<16)|(layer<<8)|pindex; + _rmap[key] = i; + } + } + //////////////////////////////////////////////////////////////////////// + ///function to find the current entries associated + ///with pindex = iparticle + std::vector particle_detector::scanForParticle(short iparticle){ + const int size = getSize(); + std::vector pindices(0); + for(short i = 0; i < size; i++){ + int pindex = getPindex(i); + if(iparticle==pindex){ + int detector = getDetector(i); + int layer = getLayer(i); + int key = (detector<<16)|(layer<<8)|pindex; + pindices.push_back(i); + } + } + return pindices; + } + + + + void particle_detector::print(){ + const int size=getSize(); + std::cout<<"Print detector with "< +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class particle_detector : public hipo::bank { + + + public: + + + particle_detector()=default; + + particle_detector(const char *bankName, hipo::reader &r) : + hipo::bank(bankName,r){}; + + virtual ~particle_detector()=default; + + ///////////////////////////////////////////////////////////// + //abstract function to be overwritten + //this should include getting the item order from the bank + virtual void init(const char *bankName, hipo::reader &r,std::string items=""); + + /////////////////////////////////////////////////////////////// + //utiltiy functions, same for derived classes + void scanIndex(); + std::vector scanForParticle(short iparticle); + void readItems(std::string items); + bool useItem(std::string item); + + /////////////////////////////////////////////////////////////// + //getter functions, same for derived classes + //get detector id + int getDetector(int index) { return getInt(_detector_id_order,index);} + int getDetector() { return getInt(_detector_id_order,_index);} + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + + //given a detector (layer if exists) and pindex find the position in this bank + int getIndex(int pindex, int detector, int layer=0) { + int key = (detector<<16)|(layer<<8)|pindex; + if(_rmap.count(key)>0) { + _index = _rmap[key]; + return _index; + } + return _index=-1; + } + void setIndex(int ind){_index=ind;} + + //////////////////////////////////////////////////////////////// + //virtual functions can be overridden in derived class + virtual int getLayer(int index=0){return 0;} + virtual int getLayer(){return 0;} + virtual void print(); + + //////////////////////////////////////////////////////////////// + //override header notify, called at start of event + void notify() override { scanIndex(); } + + + protected: + + int _detector_id_order=-1; + int _pindex_order=-1; + int _index=-1; + + std::map _rmap; + std::vector _sitems; + + }; + +} + +#endif /* PARTICLE_DETECTOR_H */ diff --git a/Banks/scintillator.cpp b/Banks/scintillator.cpp new file mode 100644 index 0000000..e198c51 --- /dev/null +++ b/Banks/scintillator.cpp @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "scintillator.h" + + +namespace clas12 { + + + void scintillator::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" scintilator::init "<-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in scintillator bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getHX(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHY(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHZ(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _chi2_order=-1; + + + + }; //class scintillator + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/tracker.cpp b/Banks/tracker.cpp new file mode 100644 index 0000000..ef6dfbb --- /dev/null +++ b/Banks/tracker.cpp @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "tracker.h" + + +namespace clas12 { + + + void tracker::init(const char *bankName, hipo::reader &r,std::string items){ + + particle_detector::init(bankName,r,items); + + if(useItem("sector"))_sector_order = getEntryOrder("sector"); + if(useItem("status"))_status_order = getEntryOrder("status"); + if(useItem("px_nomm"))_pxnomm_order = getEntryOrder("px_nomm"); + if(useItem("py_nomm"))_pynomm_order = getEntryOrder("py_nomm"); + if(useItem("pz_nomm"))_pznomm_order = getEntryOrder("pz_nomm"); + if(useItem("vx_nomm"))_vxnomm_order = getEntryOrder("vx_nomm"); + if(useItem("vy_nomm"))_vynomm_order = getEntryOrder("vy_nomm"); + if(useItem("vz_nomm"))_vznomm_order = getEntryOrder("vz_nomm"); + if(useItem("NDF"))_NDF_order = getEntryOrder("NDF"); + if(useItem("NDF_nomm"))_NDFnomm_order = getEntryOrder("NDF_nomm"); + if(useItem("q"))_q_order = getEntryOrder("q"); + if(useItem("chi2"))_chi2_order = getEntryOrder("chi2"); + if(useItem("chi2_nomm"))_chi2nomm_order = getEntryOrder("chi2_nomm"); + + } + + +} diff --git a/Banks/tracker.h b/Banks/tracker.h new file mode 100644 index 0000000..eee4dfa --- /dev/null +++ b/Banks/tracker.h @@ -0,0 +1,114 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: tracker.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_TRACKER_H +#define CLAS12_TRACKER_H + +#include "particle_detector.h" + + +namespace clas12 { + + class tracker : public particle_detector { + + + public: + + + tracker()=default; + + tracker(const char *bankName, hipo::reader &r) + : particle_detector(bankName,r){}; + + virtual ~tracker()=default; + + //getter funtions for items in tracker bank + int getNDF(){ + if(_index>-1)return getInt(_NDF_order,_index); + return 0; + } + int getNDFnomm(){ + if(_index>-1)return getInt(_NDFnomm_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getPXnomm(){ + if(_index>-1)return getFloat(_pxnomm_order,_index); + return 0; + } + double getPYnomm(){ + if(_index>-1)return getFloat(_pynomm_order,_index); + return 0; + } + double getPZnomm(){ + if(_index>-1)return getFloat(_pznomm_order,_index); + return 0; + } + double getVXnomm(){ + if(_index>-1)return getFloat(_vxnomm_order,_index); + return 0; + } + double getVYnomm(){ + if(_index>-1)return getFloat(_vynomm_order,_index); + return 0; + } + double getVZnomm(){ + if(_index>-1)return getFloat(_vznomm_order,_index); + return 0; + } + int getCharge(){ + if(_index>-1)return getInt(_q_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + double getChi2nomm(){ + if(_index>-1)return getFloat(_chi2nomm_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _NDF_order=-1; + int _NDFnomm_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _pxnomm_order=-1; + int _pynomm_order=-1; + int _pznomm_order=-1; + int _vxnomm_order=-1; + int _vynomm_order=-1; + int _vznomm_order=-1; + int _q_order=-1; + int _chi2_order=-1; + int _chi2nomm_order=-1; + + + + }; //class tracker + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Examples/Makefile b/Examples/Makefile index 2fd5123..f152c83 100644 --- a/Examples/Makefile +++ b/Examples/Makefile @@ -15,7 +15,7 @@ LD := g++ LDFLAGS := $(ROOTLDFLAGS) -all: readBanks readParticles analysis clas12event_example +all: readBanks readParticles analysis clas12event_example mesonexevent_example readBanks: readBanks.o $(CXX) -o readBanks $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) @@ -29,9 +29,12 @@ analysis: analysis.o clas12event_example: clas12event_example.o $(CXX) -o clas12event_example $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) +mesonexevent_example: mesonexevent_example.o + $(CXX) -o mesonexevent_example $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) + clean: @echo 'Removing all build files' - @rm -rf *.o readParticles readBanks analysis clas12event_example *~ + @rm -rf *.o readParticles readBanks analysis clas12event_example mesonexevent_example *~ %.o: %.cc $(CXX) -c $< -O2 $(ROOTCFLAGS) $(HIPOCFLAGS) $(LZ4INCLUDES) diff --git a/Examples/analysis b/Examples/analysis new file mode 100755 index 0000000000000000000000000000000000000000..8a75031e8b29e214f1a1f3528e9044f1d6cedfa8 GIT binary patch literal 267048 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�c$S?-f5*7 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

*hZ9)2EA3(xbAygusa*^^uK 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 literal 0 HcmV?d00001 diff --git a/Examples/clas12event_example b/Examples/clas12event_example new file mode 100755 index 0000000000000000000000000000000000000000..9d32299f507d313adb27c3ca65e1ab4b6d5f3179 GIT binary patch literal 277512 zcmeEv349dA^8W-92ng5?(_T||IhzFd?wRfQ&U}C zRb5?O(>p9pvrXz05~9eXvvRS*YV{mq5jWKMP>G^gltiT){ti&iQ@Q|3cP!$r|Mi$4 zEwAAMuQRUnTw*5<@V}lT@Z?o;NY^lNFVJPzD@0jQV|i}r%a#UkV)uOvr0Mi&*%85=*kC~ss@VM%4x$g0G# zBge*%swf>5$NEk533u|enS`!TZ-gk={XPOl_rGiXarc=mr+xccO2e_x$m3Ib{QIHU zu6Q^dIFUF{!#Sk(8Z|OfarNny+TD`vfSxQiC3}Tp>7>?Kl?LUl^Ka^A{;1O^b9LgB z3qM;wuUDj!x=}H2u_RZAL>BBCF=$Oh=ce&JLY2tQIpHe@c7jrCNAwK|>roq5J#tm3 z8eXe3XE*m$E(-6|ZD5>Ynb=3^rw$6)(p3qs?HSgow!~Z=8e(aR=)S&l$P1=ito4X~&t5vjAry&UrZH zQ6vh*xR&B96ZQGxN|y?p4x9^dF2=b8=Te+>RO4KR^Cq0NIOS0<3d?c58RsoHZ^d~V z&IX)!;H2YDocFMj_s`!@d;sTzUQp1|BjV1ZxIQk*f5-J{oX_EW9_I@<8*$R{GR{|V zzD5-sZ{U0j=i5{f$68$1;arb%1I~>&H{+zE1?N^);(y-7O=hvFKBlg45=&h9u*!%0UETzld?9j6IrZ=7e~ z?1Qr}&a-ev;H2Yhaiwy9l+O|M^Kc!2GZN=uoKZOGIA2_c;yPTE34Q^}BXEv1zz9AX z^%$J7IL8?7C5ZA^T*u)|67})8P7viwa81UUigPkf73UP3={PUNc^S^>IOUOPD9;e( zS>k#*uCopIuSEH3oY&&a#+i#V4`)8kLY#D5hwD6?#iCBI5|qnu&KEETu9Y|!i26cY z7mM=sxE^-xJKWWDMfRAA!Gqh!-M+f!^7x|trK9TlEsh^E^2>qQ*I!in<4v`n72caV zW5lSt_Z--MUCXnfSDI38-j;E3Ys-@GuumV~zBezbXuE0JTj8G$9@jDS#Ip^1)~+vn z_`t@6We@$!c~;C*o2R8Zp8jRl^ynSh4eNU!Jhc3@P*-Jx($eqvuEGb`#k@D~*4|Hq z&Hw&`{?*}qW=GGxF>|K*vv2Or_}9ycE8SBrm_F(5hi>e)c=SynU9>T;oYoL?*MwP{ z#@sZw?vqXhk4y_4du>m9+RV%k?&%Tx#Rm>u-7TwtMEa47oq=tC}fW-LL=s zQ+39O*2Wb#?v2UaGIQrb6)*5kr^Py6=Dm$EN+-E&{bO}}Ku z&Ds6U1*OMq%g3&H^~I5oUQ%Y?*t7J;h4*fo)m)pB9dYr*w2uy5`O|G5KQN=Q%i|l? z54m!~>7O?qcTaqF$J_P$JFV`LKIyifzb`G_)jsO>6^m>izrWtFM#b4sU<*3;j=D&+0Ok8C}&+lQ}xGiJ=P?-KNhtGpIo$W z;#h}yfjd+5xZzOIy8?mu%|-pA3qS03&t9DQbU+XshFe{Sj*P4l{? zeB5YXw_ZE{%Z)wz?0}!4PSn@bDVw1zBgRoo!)s#ukYS{Y}DBIcU`(_ z_j_MFeB{wy3vF=&(F-aKe7Gw;+`#6 z>`ct~bpGsfR^^>L^4;NIZv3ur-TFPD(`jPF2)=m3#?fPM$xBC3fyC#(W>*wl8 z6Uurn&VOQO$LEQmO~?N+^2#ZfO$hm_Yu`=#+aFx_^uwj6Tc5e~pI7ZDGMT$Sl^Ju# zgwloYBrfRL^4z3;A1)pEPEoJR%%43~RMCGXd`arzjQAOUyRqBkb9>%<^ztS1T589< za^2GVuOE^;Gn4#Yprd~`%q;(b*g79w-Lg(`!@O=oj1M#yE@*H$(ca_OO>u(bv8p^b3RVGc5@G)*$x0Gl)Dh zgTN`43dH}zLHK_uh`n7H#I8OLLT6PFeuf3vKg&=fh1%dAiLccypzq+B_ zKyoV!LVsuwxiti_tE3=w)&}A8^&s>o2I2qPAawQyv4>xR(AgV=|K361wC)Tvj_wN5 z-}i&?xhRPJTY|J(6vR%dg7j+u_>9Eqe;f%ienW%6HwDqlgF*UhMuU<5jiNq22)rEQ zE07(24E#WHPU}hV)0LHC(L`$-ItG9U!7Z5(I1b98(DBU(flrGN99OZwSkDhtl!3~b zO3a&s86;A`m9ZSZu@}d`6mqBIo?!xhx-b3LV>rBl7LGV3vcJHOBKl^T$S#c>Y5DEAEE?OH^?Usz|>>o3t9zH%e43-U@=LBDY;hxg~* zR<0k;@!KgN!9nX!I<`X&q_1qjzlA}OuZiVwg#r~EZ;#|Rc1gWcG6e_a1?V_W@L%TU z^&bU8BZb}@%6Ws|h<3N4A0+>nw>W;SfLEO@;FKJ}A=lM)f==sh4*x~q&mF||)h_fU z_1jm{SRHpJ13xWu+okPNnh18(c>5; z=vRXd!JA&H&XfHT;}lhPtQK-^*v$>Z4ZlXmNg>aeJ9%B&=R5EZB%cgnpVH13 zUm*CQWEl==KaoisKRbjoIGEp7LPv9W0|jz8t`>xThFueVb3O-j5&gOiVsYgHmU=?;4Nl7gnud~03@}(FTO(OYomVoCElkN-o!r*|8JsUI_n2@G?qF;;^&7_#?($q)2?q{#M{Ynx|rB`SNKJ{@)@D^9wQV+qa(pF@^OGhFbRF~_X#AF7;wJtZe&!V3K!51CESAF? zgqXAWULMI_R)=#dwkO`7(m@*}8<&Um@^^iSgSY=Gkrnz7uvx zbgG4a5X~x=U_6qX8|QL57YY2=hY0v>94_b0AwxMG|MA;<1jknzIDX0~PUvR%Rcbf; zMh=(lZWZ(!L_+>!(ZEdMPa5yx&!_OmlyI0bqtAMW*aue=BnHI_E ztZd)}J`r?Y0%JsfWjEeYX(w02^Zr@}ad@l1KMXkI{|63OEd&}ln#0TJ#RHBl{I=3D zki*-Beysw39NYrQv*~S)__BaMBkZB9yDvYh(Lcg(U(NBS3;O5v5$!&}0dQaJcuVLp zLyS`lLv~yNIg?(@LNAd5J_&Lr`WZRAT^WbG4Erbi7!j9BJx)A>x7#TE9?Y8^SA!q& z|E+dzATS$t{8RXi7@@~d0UzB%$R~ui3o)|ecqE7WkH^!5Ut0Mg7uc6V!A?PcCB5Ln zahaHq2FdX*=C2ZV7w_3Hz^T9HW)6_@|3cV#hTnJ}AmrI}5%1ShF#*3fPVoOZrz6y+ zGz&gk1svUE$6?SRd2aEO=Uj|m;>X`VC~)j#Z;G&=y9Awg#r$RQlV`TDL(684m?y^R zkKmK&H@(c^(tkRkIHI4C$mKRmC~}FgLyORhw5yN63bTI^4_gF3mkK?y7oC7f`#(RP z<2T*G5$6j0UP52lLwLJ#-F+VXInj^&iX)0)q1@G%^WXkFhYR&8H;ehS> zdA~#Ox$=HaV3VK|A@o>wm;<(OaVYzQ+{y%fDF-v!CHZ6vJ}>WNuM9VT9@8s3>P8d&)0C#`1wdSmpk1<`#*-W%?WaS;x9o*AZe1n#?+t%K ze71^lw_VU#!sx?@M8E6;zH|`x8%@G*^bv3;@TuK)F&-BRK`e$nP`@%nzsv%^8sm%b z%>rM_?Q=LT;-~#fjyO=@A3?heF4l>00`A7VM)YTkaf<1l9qZxu2wpAVvfWD{XKJ_X zXO1V^bqW2l7yY<(hmg-SAvbdf2cS82Tm;65A4S-0mVl2>;_wU+pG$wzHk7v;NgDxh zNWJui9EgrZ_{l2-oikvE#Ao&i4wxqRS#Umw$MoZXi2{C5@Za=4#~&bu!72f_e8=IT zqQmzJd9D=kzzw3^#bH@o>^{ju~I1m1q z^b#TVmq~qPKt3b~|M3+s?9+cd&J^(s+du+Nq@QVq{S%#RA^)2NpZ5v+F;SdxOE5_;c88)ITb%YGTJ-!hXv9#&sOv)NY2E^Es1W6f^uh!7bNuz^B5XqaZhe zw-4s<@q&J;)XRR3SR({_r?e9>e+?A)D}hgZMu>H^)caAPua#k(PPb9~fr%IJc3VXr zZ;zxS1 z(xWQ$2z9XIR`iSD?P4C3@|-UCX?%*~%@B?+1@b5VrufZwAyJ&qMzK&^2tMeTApC~^ zdju8ZuNVAhq*!+gvsU&%utYyb_)koi?5M-IqyDb^h1Vf=c039F61-j5$zIXn5kk)G ze(SFeghZsr#;IJuD^RE73>ZAYSBm&n&Zpsm|7;Q8N;$6<_UYg5XAmHxa~r4I#xKeR zLO%Za{9`d3zg5^j#LkWoI85r-Hqqakg*|*M^wKUSOqq8*BIq{=I?_+B>CNd_vbllF zeC$QS@5S81+gm8wojZ>6)6l>H(qDZndX0*arh--{H}bB3*i29`2!b2ZX}=94qlh>Mt!8PhjTd{ z3I9>>Wy zFD$apsm!dm7K~6cE%PDkJSaZ|T5^{@5E9~rv8MAOdo|EFH9&%{s>&*}msgaQ zgd|HL=fHxu=ai@6P8{nNy5`7nP_F>;Dm>4gTW&A5mpFph0r2yRGN5o+T29s+m~Tl| zZjK|jfDxjuISR^47iJaNOXfNXvh3yMrR9(&lftj^$e9_Nl?C3&8l;&A>d$mi5bv_U zw$8|!5tEgcIW{X}YUY@%B1SFVUXoW7P$2(_03L-z#}<|5<`mhvfwTUCn5VbXG7ICu zWL{cEE;U8EqcK-i6&o8H=dsknlDUCe&&;905IZKn5ESzZ%PSmNrTJub#l@gS5~eFg zYrGU_X(gd#mFJYqwP)oQJAk{Gv*{U*sd2(c3KJamqN2I11~EaPTq$#Mi2Vu&8?S$W z-*LI6#br6=c4CyVM_$HDI;RK%6TZO16!Q@&zspBRkMajNj2&l?Xi2G$RH3kh3cG#Y z+_WOkD9A)TudtkV#ybiMOMZ0}z&?Jrx??b+%k5=FIl1<<;$qS^*Wj-V-FP zfU#NR*Z%-FG>znx!MVYLIVU9x!4I?Zay!#1Ck%%{-d;F%*satLMo2COdr9e-tXXlf zaTSX&lNH0SmFCVHQ&PH+8zYo>3W0Hj6^sY-<&p` zd4o(xd@e@+pU`qeMd93%wCPhbqSy3Ro#cvZCQ#xXrVjj*^%rAFPh%+}g zH>-j`u}ap=l7-~XrrRqji|ur?3|0gWNw;IDo-0G4vhuZ33Op|iiE5Zigjqr+RfP_v*j`*=XP4aKGOFd4EmDd(KDS>u0ZjdiF}r0| z7}^4Aap?kr5;GzeE6yn_QSuQFaRGarfb|cIDNL{NWjTfA)~T?ULYi!2vNG*O_FPA7 zg~OVe2s?7b7uhRdc?l@zFi=_|G;S|Pkd;Pbe2h=<#W0Aou@ue4#=&0M)xH38v>b@> z1%+j$2@E8B#njwFddP4iHii%OX$WP~3JYQ8V;6w0(sFA)_{dKqFM=3SG?NH7?b=~;8_4jHpnmK4sfv}cu-Rv-W#m!;UQ zj7Kz0(^EO5n^lpMZ_mmtEpgzdnM|)t5Teo8BoLZjTI!gH$rNlE-H`+9@;nP?Trw|~?xf~8axxtl_j7HfC3B^?y_np5 zV`G3yCYs?WPxIcCnj3?=GY}qgLS7<))Sq8kj%l{akqYLSeJsF|0KJ%2Sv<#1Grq^x zrIv}!8HEsdp??p?l|#vep1_Bzg7r=AzgYn5ZCl$OAmR^}S9eLMtppLE0ZHzV^D z`J@FLW|bAtsYl3$K}hEB9fYTh4DT&pN97~Yv3$^AHl5??6t^joKw62Te9@)l7=

kTYM4_>5*@ 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⋘Jk$VhGQde^ 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

wn#cz#c2R3&UXyWr9AmLfpI7Y&&vH6S$ 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 Td|mJ_-f~QhZ5#CX7W{t!qs%jD literal 0 HcmV?d00001 diff --git a/Examples/clas12event_example.cc b/Examples/clas12event_example.cc index 1157d02..3cd4d82 100644 --- a/Examples/clas12event_example.cc +++ b/Examples/clas12event_example.cc @@ -15,13 +15,14 @@ //*********************************************************************** #include #include -#include "TFile.h" -#include "TTree.h" +#include #include "reader.h" #include "clas12event.h" int main(int argc, char** argv) { + // Record start time + auto start = std::chrono::high_resolution_clock::now(); std::cout << " reading file example program (HIPO) " << __cplusplus << std::endl; @@ -58,10 +59,13 @@ int main(int argc, char** argv) { double ecEnergy = event.getEnergy(clas12::EC,i); double pcalEnergy = event.getEnergy(clas12::PCAL,i); double sf = ecEnergy/electron.mag(); - printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", - pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); + // printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", + // pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); } } } + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; } //### END OF GENERATED CODE diff --git a/Examples/mesonexevent_example b/Examples/mesonexevent_example new file mode 100755 index 0000000000000000000000000000000000000000..846e97feef95cb71991991915d897a04b25b97c2 GIT binary patch literal 311264 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�grK)Yz-5B8+-v_`91I$g{DwOljV4jKZU+YcB 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 +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + +int main(int argc, char** argv) { + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + std::cout << " reading file example program (HIPO) " << __cplusplus << std::endl; + + char inputFile[256]; + char outputFile[256]; + + if(argc>1) { + sprintf(inputFile,"%s",argv[1]); + } else { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + + hipo::reader reader; + reader.open(inputFile); + + clas12::mesonex_event event(reader); + + //clas12::vector3 electron; + + int counter=0; + while(reader.next()==true){ + event.reset(); + int np = event.particles().getSize(); + + double starttime = event.header().getStartTime(); + int pcount=0; + while(event.next_particle()){ + //std::cout<<" particle "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; +} +//### END OF GENERATED CODE diff --git a/Examples/readBanks b/Examples/readBanks new file mode 100755 index 0000000000000000000000000000000000000000..cb0cd14cf951011be7ffcae2bb20a6e3a6d7ea90 GIT binary patch literal 266256 zcmeFa30zcF|37{~Fxkl74iPE|I8an#UnlaUmlrLX;%QDkVxi@c((zxl(sP>55fc z4L)}W()u|{;B~{9?n?~kfZ+4l0#85d9MU;bTnlyjRVB)jq@N|p%<6O>@!IkrzuxlT zAO_dZ3SGoeb`n49_Yr$^Y1za4zGV;d`}DI}@UNfs{!!oPH(gv0KBwXu9r~GY>B!jS z%%gI>jkgzkE)x9dXZ^m*ai8b{qw{8(vgc zQdu>;Dsjy4G4UfRN=J-h{U-W^J89|+))Mtbh=N`3hdRONdgjv`${%-MdB^v;`3!p$~ZH{;g}zri)LB7X`?l{I?O!u>R|&{MR#i)*E>Qocgu-dJ|G-Qtsd4lEHbKQ zRQ1pm5lU3Gv?RN!j}#vj-ebTh$vUB*bcQl8Y-4vRs-{n5cmxPXgjpM-damgf_LL-@ z8j-LhqS_o0k$p;7W0=$zeQODeYe+Q}^j~T&2piJdY>Msua=(>NMp&yOBGwHIzuW|g zL_`dbqzj~hYa&gThnuB-eIu%?!;7UsF|N2|vvuOh7l(}*Rbw7Md9ak;ySLdY-DQ#n zmiGz&G$E~tWHA}PDfrQ0$8Rcr8C1b>Ieydey8^$f@uTBf{H|jqNy^4K2ftkW^6+!u zryu!x0p~gR6^MGF0Zzra_!Z+u9y=MV7v2)`EmHsiMiKRQ0f?^FCf!*3gY#$!7wpX2uheqZ6Y6F)jy+5eLCHO}AS zw+p}T1x!C_dI4vzDDTF(4Zpqk{fJ*Xe){nf3j0On0M3U*`7q8M`2C9C5dk|Y&U8A4 zU#DIVLyW*L9KQ(sBJrbxe4maeoO_Bg)qA1b+fXMM9en^h89y1nzJ}|kigG`k`{Q?- zs7K>`rYN6{^EvpPhu;AF2I3ck-}(5(;&&l_#$%YFK3tSXigO&!7Q^*XD38W30lzW$ zCE<4wei!3+DSmWVaZbi>f~XTL1?4pSCJLB>vkkw=qCN%ZsiK^L^FGhceJ9CRWsj~H zG^l;-ohw~e#ut54I->TB8{U)pE+M zEg6@zHs2H#x&6t_U**LVZI-9L9kqSX*v|8hK41UkyK4#`{cfH6^tfj>Oigt@`|B0c zVz;O_FYOiKsjQcp&p7gVVdM=5K0d2Ds^84mIg2u9n7){N;k1eOKC-CCjU#Uf>#mM| zwO4)IJ>#!fKl+wAwV#C-JT^6A%yoSnX)`iEzOT3C+mGwlzy0l93vYY+j{D{|4}K`` zd)MSm-Z%cfU70?twPD$!ui|nyPWtl6%{!kfPnmv0aYys2kz?MzXGhALr%W2$aKW9+ zn&#YfdhYcne?M=*cU9T4{fi3R|JLj`DjqACQTtZk3wt^a)LNhU!^NfCV`q+x?KP>(Dg?ESFT@c=*Iw@_hr1rk({$4*`{c`q|p8Fmsx#ic) zQL}gKy|A>yzI4p0*Gd=7zrW>*rka%O=u0M~eY)rB!*^_bczQ$kC)chSeD&Iszkd0M zcfx_v($CvR+_`Llee1t&`sq-E_p!vW@15m(%{@81v-RYET@&`sjgP&)cl78bKP70- zzI6Me{r=u>MDN+xKD}V)gfULjx=r8Cx#O|oQ&-I1`uNK$T6;YZn^SkR`2xAuk0m+p ztr_`+!*Sa1r8^wGBl^G8&=R)y66K|{7Bn^X+4Qdk8B;zSFz}6kj4B#*yVY{u;WLLk z^yIX0S+;Yk-n{B^S!%dp^yoX6eO8xsWi0RuK7ISD_lCSOtZ4UB*QafokvVRg>*@+~ zUekL!zAL(J&2=9?9Qpj7({lQIQf_nU$brz01t*PzfeJ8&#<=e)&JyNzdINn>M z4%xM?Prq*-y>V>PqtDE^Y3f+V;GJ)Jemc3^O?`iQ|A`S}{`L7~D|USN?W6l2?>j%| z)Jy75AADy{*y^%~*9I@{ajl#@rsnbIzaDmE6wbELg^)1+Qc&jJ25=k>imcioNWM*pyB@#Tvy%sv#mxW~6M zCcW0Yc}C`w|LDGU!L3F1xRlDqpKrM6{r(9{BK1{ywnt#1|c+oX;RnNIQ zQ);WHZhv>pP~5+ANVm_&mwxn1^~CXIeQwNuYFp>mi4l!Q{yF^W$(N50`~IZ<>%VC) zJ=yl$WglF#rARjQd?qvQuJNVwSHCdvj87I1SY6cja?=;j6jhux1HPKNFC%{XgNu4h zI;YS5hpxP7Zgb7(SFd0E(89sVGcqZzggRdCDM_b2BN2N;&>7S% zG=85Rq2bqb!OuUthsGb-1)T?@LgU}n1)Y;m3XR_n{R-9JKD{tjgy`>=UGU%01$9Knk?N0APKC8R1lYe!==YcNd@Ld=5OS|BIP#5r1yXe>XUGUkfi*_&V0{?<8 z!2oUC95P>YvTZ&{(HkXJX=hbCUA7=*g&FhlB_A5ACrJbfX{*8 zvsz4SR2_dX=f^7ei5Bo*MsWO$T^w+>fL{)_slWB2Uoa1L&>V>9XNbvFlHmV7nd6(p z#7&=jRi4J-4X1GV(7c6?&(7iSRu`{tgx$~)bv}o;zrgE)ykr*irB^uoEZ%MDR)KG& zMFAZ8JjfyR)gbt{va48Y7|!We3pu}oIvodu-rMK%dK*7UVS<0_CmiszU?>$1z~uZS zhu4UHJ${COKhEJaU!$X^u#>oTy#A|ze`n@;SuXUV>+!D9oKG`Nym9Q~C&>xBBE48A zaRTdw91_eNt|MM8@IMlAYiZ?-?}9(jarH=!Z=!_>9JTx;^%C+ai{pghp6qx9_)PEJ zc)J$}_-G-Y#)TXp#3zjw^xJ7di9_L+r3*1AGdeW+#xa7Qq^Y1oa1$-G;BfMjG(^y` z3VlH=>_`=IFsb$>^qK6>rHed z4B+%z9uj;`;_$CTe9IR2dVjBg-;w;;;ucVKJFFNb;+|M%*W=!HVJF%5aJnCh{{91k zVsUi>w||%=J3fo!^viCdTjKED=lvsj@0Ui53Vkbkw{|9a7Gxv&ST@JGSEwC7xIhcks8!kpNVE#gee*SuaP z=-Xf?CiFKtsK1lW6#d=A@s9}nmjI{!F8>>c>-}9mjKi%#ai*WpqrT|c!f%sSh<;^M zbHF`$?fW5LBAa8Bl*V_akxIdY(^X=c(s71 zjNmua2>k3zIQ~{~!y)01(qfKBYn*gA;NT>OmPdGfMK^x_OvJtRA9)>Yv!grwi`otL zqel@BiH>qyRzi591Ew6g#4JVVIAw37o?3I!}Qb3Uy?{x$)BY=EHiG{=8Mz)ul! zw*JiFdb>HWLz074*wr+CSxOcD+vwr|xH&s6h2N2UT11|lDBxc~o|F$a2Ia#yV%%hQ zYv=va$KRVz<#ggi8~_{axB~4`JT!^;jEKOFjl%EP!v#R}@zD)M6F-e29zu-lQ2TPY z`DHGET|zNS1)Z|fIX{;R#h)wuqJFg1l|LkWuK$mBu(2Mm9Zh(u$K++`Q zTjK{DUw<-8DnP4PT< z{5nPStNj*EVZ9(^7W%S^glHr0wp7j9MZO{0)%)8f(Bl63qDP&IR1IUuN!pu z7aSfTH3=1hvS>S;q-fq;P_7oKI26E=`QG8jx)*MEb@>F z0WU#A)NZi-%ffC=A8|x+6npDyBXgTRN_*|8oI7HYTQL0+FG z;9uiR@VE^eAi|0CD)34ERYLv{J3EGpcJ&Q6(<3;%sV}#mh9LVXM8~OL)g!pT=AXpz zUl;xry#9H#2aU65N@g)X5@~_70CrA%mhIyA$MTaDFXU4u>|fWrRmAPMp2i+%;KA4-CsY+;AG-F6DSFBkmZD)e=mkY^)p z`oN*DJ53P&ViI(OyGRG%za$3}ZSKIKuSYpV+^Al}z`k{oYhaKh|5h;{(fvKs%;7By zIKIA~_K9e>I%s|PF5#yQVsnfLThiY!UK9O#iSwi9Z|k5Sf}6#H!9$3HbW9v3>~J@) z3$u{Ypcm>_BW>ovp~LSIdMp#`Z@T?ICi>MP=4HBkK7w9|PKNMDJs!RcvIGzIyHiGT zK7;+J7ILO|XbPU!3p)v3|J;jy5&leJ|7O+;NqToMr{8{RpnP@%PW;qA#1R(?{7W&; zlH9UIpb};(Z2^6P$L-;Wx?fA!Uzt)`?!b;pDa$rJJuA;q?wC_p;dGQwPfsZ-EpbfG znO)?Nva;qBmzHEzICILKSy>!4G~(4$Go54RIdYw)SQL}R@3UfiB zys%`BEjQC?vE&xylxI21a|)dmw%oML9Q>C?r_6+`v^2{oM{!wEPOc+sc24eG+hhhz zo0nR4*>tpTY$cc9X&IYE?C0lH7CEzW%E}xid1=LjIVIDXkn3Df<^cV~ywa@sg?WyW zv|PGm89n_9M|nkIX-P_fBX@3!C9N&$}P&NsK_FvqP6_e zG+<>qMzJJZqf7Lml$7R?ZB;ljw+w;q)S=lIVE!(S^33I z;M~aB^SPlfN);wJ9YsZRn5jTK5F}T|>>Ogd!pS1z3Gg{Kx3st{r`$mdGWICC_(`*X zCZev7DHa!MC8NJ$%*_~ZYY3=kza69G9Uaf z`!07dt#ZN$6cpu=kC4)k7Z~(&+_kZV6UCzm>f{BFNdhIDsu82S-GVpPP|nH zsfCLc=zjggM>tO^I3LW0Tcm>TjmlaGR6YavzPW(~;A2LVhBll$T#xp6f`fa;AbarrmjbA~&_Nc(#K^KQ1lA zpOU#_%b}q{-ymT1sgN0##*hC^Y7pBwi9Kyf35~S5{y~?GuB+$jSQrMt+=O`Y-9i;-MfwCS$nG zV$7KxC{xCKT8XoK!DZ!e0+ByW&(uYUOrK3{f!;8FgiaBad|hMg}4A zWH`W2gf&pNZB9qApiD`tSXL-R;3>ok0ZsV9UeKHqSJLMF-i))5&Cd;s3I6z1h;Yi| zZQ=3Jc9cK*;38rz0RKMrSlGD8&Ac1|s60=1m$Ye9Gqd7p*nlg9FmVR+g_5GeVk|G@ zT~_JDG|i~G={6zq;Be&k@8cs?oFU){6^|*bp!py!5HC4SjI0G&e!nN}`&A%fe@GQz zO!$2T9!HHdc=&vr*357etn-vo`}rb5dgWGn!s#Zxx#ACr9g6)RUhC(~mh4HL}GLPrukbf<>UsD+7* z2drt#^q9#3N@hsX_1Vs-Aa^xJPd(q%ZJ5Tq#EOE_`8Ha4@kc-wY6Ty@IMB6GiVlt{ zqQOr$e~_MrXf~lTKi^TF$+9pqyT49b$GdbF36zBr3bBkt!z0V1e0;F6nXevA%IZ49 z^2^saviR*faKy31LD%~5>z6B!%A+h~2$U>@asZ=lEO8hL3-cFD#MH*1p1`(vUg2*< zcvwK}=M6KiY$a^i7VgGcW9p_6F}1W3OT@-YLbYO2r3*no{k_*soB|?u=PPo`3u(Ps zA2BhD+`?A z($siJ(|dhfeCQ&P{r8DGZX&l8qbySaljmQ__n!=C|DIulJW|Aekw3~3a!bn=VD2?B z3#)k397sX3O3Sl&;=p`6E#xc-ykog-GV|{co<9xClVpX45MJTbW0n}sj2ZvfoVsbjrhs6So>OM%k3LSvQNQ`XW4Ox9 zH4)A}v8Xi1X$%;8r0Hs^nS;?2b3rZ*Jq^qVnKS4~S;*7`ouP#7_tO)gVMRlKA`y^b zh*n4QQPf6rxhy9e-szD~SIyG3KhUft3(LEPW&`6oNmUHwhM5(gnp9NcsR=z>gT_uI zr9r68OwRI?<)gV+uWG`TKrvOWUS%xJZJXP>7abZ~p^IqSxSjxKD5)gZk z$fYROJ3@3`H@xKBTr7fwUie{BrKt$AqT?nYClHlRG$ygWh-}`H0Dfka=wp!s&u*sV zX5k4_{qP(-CC@_aDBTAFT*B5G4&N^3ea^c`n=Bqsmb5CrD)I3F3k2W)wahqo+J z*&kasFJe!qm?#2+Lc*N#(#kT%ke-1W9ffr7izWsK^4o;yUOalhhB`he5g|+$G}fJA zY>q0#6Ra?^+B90&2=1MpU@}HU&MBV2hu}RP)?577d)BH7tlB}S6X7l zB&8^{mx%xs5QueC31#et5bm248;7qz>j;{s>USKc{VrF(#X7p!)^N=AuN zN@*pc1t0&!QY8vncJM7X{qE`nvr|fTCM@9EBK~~LiC!g9UdBQM zMJ+u&71;qBjQ!9eL{n^T2$?1V{`)CnQNY4kpi|LAnw-j?orQ?DJd4xqUo0N7AuTO% zIuo$s=e13ZvW#bx+93qP0)`VVOv9gh(xH1|f3YKRguh zwF3Tx6Y9b?3qRW|OJ?p!>mpsP;`7KHV5a{WM*%Lt1i_L|_H2OG?D<0#9_pFAc*@4s zReXs9t@4%NzCDC$v2B;A2JO7bnO88DLOf#>vM5OdH_2-RSeGcd`z<6r32yT!m{lWcv6gs(5h=q4OA z?_e`dmd7y13*OKY`XQfgFqG>0bJDh-p2Da~z$G3nT6)ZB5&lpzVrAa9%S))h9 zNt5ih2`MvYq8vYBRAAL&3Amah0WW!iEz2@ubijpC0eJjU)~FHjzLLdX95o`r2S$_h zUQ#%|)$acnfinHN;Y&-vK22u>b$x|BEE>SLyTCp7bueB$@Hc7_tCw+`(>`{nFne=q}N> zap-y({W|VPt(Vjr*9n%x>OG~iL|t7Ri|bL+1)~1(OLOrmVx*KP>Nha_2q{I>ow0Y} zP48~fG}P$`gT+20_@R2g!a}@i+e5le;NNrSeK6;fqykZ|JhKpQ$aa@1bb4n{JzQEW z=;?o_LcC5cndTE!d;?zm9Sa?97Vj6f2EiMh9A689w+ncC5ZqkJ@jHUx83Hbe_aXIm zs|7qN2;LyzrXYB$fJXoxFb`V^DKfWLc zu7BUIEC{Z@-&q|5w~G3*Ah`a$g!&-3{ym-tg5VkAJ@OSnaQ%B5tAgPA_jNV~!Iz7A zOAtI`7nk$4Ah`Y>wiX0$5cT#Txc)txjv%=Hy|*awo~>>tR`DI6=peZMT@Z5+T>s9& z&>*-;ye}IU1lPa+lo$lJ3VABQaPdLCj3BtqPj(R8D(VG6aQ(gHvLLwr{eY?L9rO-LK`3@i&2eaufVF1i|(9`=i8r^*X*@*X^3#QpT&~EY^|c>MPt19^Z-hd^nd}5uR8dS6$bceKBy$EGQjc5xbJ8* zz~iWKacnfe$LK(uTMTfk0lv)uPc^_>4e&GrTrI^!1~>*h|M94we+;9(Bgz2B0Pj0Y26%5DRFa|%a16k{!)$=--*TXfLk)1s z3-lw-0LLdWd`F@Ij!z5t4yyrHV&2KZxHRL6TD2=nU^{QC#by z)=HfTlSd4aItSbFzkHq*C8`(Do!-_?9D^rNokFy?h1D;jI)!F$Bdd?1I)!9!1FK&^ zbs8eQ%UOLO)hRT4>skFws#8ezR^MdQGhUIn`;X_DZb2h3XVyz3s;U82mofDYSZ9 zS$z%FDWrN^Sp6-kQz-Q|vid7jrx5CGVD;yyPNCDgoYkM8I)zMcJ*z)NbxH}m)vSIO z)hTp(%UJzZs#D1HX0!S&RHsns&0zH#sZObq*UIYURHu;XjbruesZOENYi9M?RHqQ> zHL?2DRHxABl~{cm)hQ%;+mBNJCsW-_^;TA&Ky?a%-WFEBi0YKOcpF)L6xAsddK*~% z0;*F8^e$)hfmEl^=dEY;GpSA?&s)vvr%;_jowtnDds3Z3oHv`*!>LZ8&6~mMzYas4 zLYmjg>ielqq0Ae{>bt23(7DW2EF>Yr1cLYY@$^(|DV5awnYF59C z>J*y1WvqTH)hQ%-vswKXs#7TPX87v)^{BH$@r>^U2O;;?$o>`g_$J(-coGgmZi=V> zTGX`H(Nkcy0`zXg$=!jzF3P(E!20CrGi>U?OyEDXI$TnZ0P9)Y@fImeS+XY^j+&>q zBL7=az91g2Z~SPMn&DJP01$6k5p_ars6K}W&>}E`Z+MQhhh3{ zC+ExO)!=@NXBWcN2|05X{%~I-Fe>+GZ@|3?*6AQ-758n7?L1|4Z`O~>vC5Kl)U#`5 zC11N1nwGYu$PG9s@vo|43)2rBfROkoFa0a-U6Ir)7#Z9!48>^#^S< zoC)x@w)_z~Zxl~KwutmW`l%G`pTxrW zZ=v41$LDbT>pA{iI{q{re~FGy_78ju$G?c<=j!+ab^K{MKG{F;!#I9Vjvue%@Bfwh zYuRg4H(#fy-zcu{+B2rxJ(2IfMat`w$xh>kp--LtAB`O(9hA>Yg&BCpZ$@Q?;)&dZ zvy#*Si*lZUp|G5)7z+E$>TLDvY}Q)Rn!k?w?<7P|!mW%<>@l*)reoa{wOwh_E>*%d zD4UNtqd_o95bR9^bsGq#S3UkJ^h>H7skp|!F%+d4#7}Q@`%K)fodXeQ3c9c%lEfB9 zw^x&$A6N^L=ntXK^5z4B*LD9@k3vNzgR8>hVEVO(DtjokTjW|dXejE(_SkO~*AZD! z&yJa&s<>xBu}8ubwWV@Sviy2P%(8F>b4SD|YFg9=e9TiJ*M;XqaL>tvDVdnt2)-;^ z6!m-Z%M_?nardJe(a;PN+|^E3nzh(p=*kSK?HTzzNPLI$v9@m@)?42Um$bbd=C9#k&66lHQLe?W6~)7-0jWj5 z(!6w=UQ{Pl0bx0+in_FcpH|_tww}cY_ax+HiQX6|J~axTfeLZR#O(Re=(t&<$w=)E!{Ni7;Z%Bv{i) zih5X4VT{@)MB3WMWOcoK`(wC8@f5|FEIWifs-LH-$L#81Z6&Y}7Cv|*TuN3O---by z8*=z)lR&~!ce{Hkt~C*!C7s8P9Xq^vz{bJVIGkR!smW`4wz?WBNo`U*lf%^wik!OH zDs50!!Sm=?thhe!X1fslD6zYhq&4%CFlf;@Fz#mzfNR5&lfIN|OM$4kuZ>BB1D(wr z$gZ|lj)CkH@}cBe$=4-kVE`IG3|wkA;7*(S;us}qA*iZrosrtPjLn_e*28d<98~JN zvX8tQ$UdSf&+{uRCk6@|NeaUNt_g*~X#VlK-)Q8OZ~5{*=I*|n1F-`B`0ih+zpD`0e_wy6a{Vm= zlL5}Qio%n&p7{MA(ceFRIsyH?gFkDag@LCa{r!Wnxl_xB>a?Fw=~90Ok(;_YB8>X` z$*k+|0Q9GaP{01hpiw$`m{T-06Mzrno7Cv4bLWg0H^#6@`D#g1#S0qR6Gfv;QMZAEpTU9B)EcRDON}uxRus1h>B6bt#*@~GoMQgNELEdH^E#wsI_v8Utbe~( zu&#`|I7Y5n03B(!?1R$4ORW>NRCPD9JtFZ>mhJK0FENmKGLXcjq-JzL8wWDfi`t6_ z;x3B8XmxE2;LLtcSl zoMrj5udCl;I-z%U`%8W;9of^_>CFT$JiqqgSFp(m@7J>i{C^TY4PIK4Prt4WNLbd| zlMX}0*9d5ob|)5zh}9lYdfV2vPujM$wE(T{YomQq{(Jf$32D8e9!0i|{1&N?`#s7z zmD)}a?8ykeMyaXdS^WS`+UZyx!i__5qvF1~ir?Z{T#vu4_o zzHr9y{sqYQCDIY(i|ZucSu-hHXX3q=X|FO-@!ULAi^l2|+KD25WD>A<9xiiwY;Iui zw@gJnqMc8wRd-(FoeI3b`IYXE$ZOOCSa3*$g)1tOAoVjvogOpP;DiVrt3Xo0MSDzCdTpm%GqD>c_wJ`+C|}pH$VQ{uOd_tQyB9|T)j1{IJ%6ZO{U$x> zdz(CQE9P8Ilg+)@Y*&BOs?c(6V`X%D?Dw`MwC1*Wu?YpxtX}wDs@h)LShdQo9t9~A zNL9Y3B%uYlW>YvdS~)a5>7ZTR52~NAncM}$llrwi_9tZtd=11-M}dgRx7~+Z)Qz=` z^0M1dqRyGf7;H)Fol$m7(mrA`sEMfuI&^Cg8jPhTW;uZ&G`h@%_Tp~8(99&X+h`Er zLMuSW_sTW#Si7~mUyUJ4R3J%48!jBx)*Jqt?k*-Yl8*!O*^kbMo{)TQ2F)L}nP`N| z=b&u~+>FcTH_&79Y31^111ZR7FUbegos;eEn;;t``@i}muDB~eai7+mQ#>zSZBLKw zuq{DY>s&0~aUO(%3M1SrRc(Zz)LwwSNBXtFMn1xQc28NH;CnaR$on+d5orHofohLR}F zxL(EaT-9{Op)|Y5b?HEHIV+&(YBX(d5pk*6MRKM?R~Q1o`KKZPz<4or<*d;44P391 zomqBjj1}=T1N>&=hk=jmU!7vL<2HDARg^|wOoyS_)MlI7LV}31gC#NiQtlT6g>hWK3b`S z2KQ+P!55gWZH0XWc#nMhy8yAZT{i#mM1I|uq)37ShgLgd+_RE22dOsVLt{6y~gsKoP%VsKW ztoeAVsjr zW+GI^j@|t-d6CT%F^pP_ORqg7*W}P$?t&=AjnlQ{|46CqYP*eAqt~~cEbO>AT0uNZ zx4VmZJo_2Z=TnOJr(jHk%$>*+>vri8?PnV;v-5~{6irqyT%D?Fh-j}XYMX+H24a;f zDWbtle|Ao?yXPXPVI^U=9@IbUpTe2lQ((s0G>>HHE*wH}BVJ`hQNH>n4GJVB^{eD&SUm28_;)Lw6=d@iPU(;9 zqK62Ga?M$=2RM*|B@tXX2i5>E6DoxgN?p|yE6J}4`KLX$RcY#ov?q1QOD~`WawHxD zm>el-x4{fVW|sg?ZLW1J^Z1TBTgH=}a{y;CYnts-EjS%ji&&fKhED5pgv~X@g+uUWL}Ig&je^ga$PQ#&?*(2Ha6uN=^!6``we_I{4ub3UMH?<`uJqA}7-LwLSi%44+LHzm&d z8cU#I-->5C#IU5f1$L=L;BkYu8(U+2o76%vTS@u_&HVZ;(R#j`fbQHXd(tlF1^)R? zkeojRGRYZOmERG1dhK_V8vLNGWMnF4!mkx=3_VnF-y}Nn09{gd+L6h5Q1pI>)YtD(#}(x zy$uA#z{^zY*SS#f$!MMhCKl+dQN$(J5etKhdyxzbkx#@tNa+)>LRsK#q+Fs8{c0}( zzs)PEGqrYPGHttP$@=eKbJabHyR>J~sP-MZf34OV_w%&)Us?zfr8VD`x-E3+U- z#l3O`I8{8%aJB2nwmdhPH47f%!&cZdB2pVon2=~2Bx;yH(ELE8seH}&ASCSC12ZKx z)8Js3Az(nE<>E91)k74$&6LC**0h~4dQZOy_B>*rwuy~!Ebm{z8C$lT_(S4B`K4U5 zj12_1-Hu=mD`)csj0J7I^6T|{)^2mpqWEu5I-tlCKW6ct<+D8gqeW!2r`uyOr-9QV z{>vz!6~upa8^Zq^>FPc`p?%ek6fR;Ru>kl3L`N7LpK4+7XaYzzB#Gl$0E;crwBI_suC*kb<89PK6CXL~9%P zK!|i50;T01vMsHNroogbuaj%i80qa86=@CRBolbVc*{bOYrQEMU9;Mf_VP)X4dS7^ zT0#EWn>`g!x5>5ihxXt^GXv6BD;$KlM|()Xgl?TZc{UJ6bO?yioERchES{8ADen4e z>IKI3FDZ0mEy|3Qpc@_ymoRec%TcF%L6uYCJ>fY@#hdcH)sW6-d7 zDxj#-sB;v|3#!l#n4V)tY)GnsGe7%Adu#Rn|zJk{6 zUm<$88rNHni!VnJUzY4y2Km`Nc|q%dRhCAcv+(c|=RA!)l%kBUW(T#45|$XcE1qj( zGRV)aqfvvFuRQ&4d<5%o>P|8(SO>I&LNqHtcSwKBfk^2Lz-ApBrJchFI02`Hs2>!S z+KL{D+tJ4i`LEj`$+PNh?n`Z+E79s_Xmv4K zMaBn(?W6S~ijyqr&tbx#l}^_>%sGAl>U0K5jj8fY+A2@MgpK5Euz2leaVPH@MiJJ# z(*-n&=xJE}Vcn18lz%10VW6)t9j|ZO>Q8>y`r)MLwSGuFo}>Gol~6v0g|`|9 zs5bRqwx&)b*vI6h$t;3E3DTlrK7NqYlm4-k7NwcDlZsJdYkaQt@ci9jl~^(+T56j; zNwcXNoacq;Ki!D_W3a3Io_V0Xn**`L0ZQwJDyn8sq5iysW>l9FNBR@fla!#}L6m}I(g9~ey845@o(2OtgC@sz6<4wHIa+aNvT4dGJ2?~F;J&K-6l-G;;4BHl zCFS^B{sHTmJGY5jlD=Z=nF!ZnJ##&-fPcx}Ee{L+s>9?R!Q+=wyJ=A(*$tN)I<0v> zBP(BTwz>9&RsNv3)1olB0lE`L6Y>Bs>F1esgbK95N z0qVQjY*)Y4wrvI7q$AGL1BA1NVXrl}eWx`u+_lhzc&1((N`!xt{#793| zVDSq1F!oINb78je2gCklEQF~WZLwb=ieT2=jV;o>Love>FWH)#J4gpf?Q&fsU~n%* z?H8kc@hLSp3-U>iN>^KH2aio%ZwqTi&XpeaqZ8{V;Wo89$q{J)E%C8%!WR4@Vzj-C zU#htyaN|dpc~T>zu+D8y`r6soPUg2CX_Ynvt>CGCIyOt`9+(1Bzx4AW}hu8M)?sHW8wnx3*DHlcSJd(_~~^HrDp0(7dME%5o^S*pg0kZYD2KLy1Uu*EQ|^)3$v+3^!ya7V2D^S8oBlsHc}x} z(UkCESYNvOJtlqNX$K#`L5~=;VW*s2^BoYBaWlc-ZYl`|DdgEbH-SBRa+d-2>?(pF z)}(0$j7@QjxkScXniW$Lt2+%hr-%$Og|Vh~v#Hl%kg9-(BQU|rFQA1(oB9>8R$D-( z59h(wq7eQ=V=ep(ImPE%HR1`{h;D22M>IZd+PaypV9Hbl#;i0q;!Fw#??-U$ZSf4RE5553Q{cN41;iV5jdv)CKwZXNvH>To!``l zva4z)1fNO92Rg_gJ#-7LHt*Ed93fdXwMFsxuWnY{mjh`_M#M2b8iHM+X&@vBmrC|MN^u=rzj`ixw!IaPj?4Lw{V2pe1kP_*4XIrDT z6@urK-SMEhR*NKRU~)Lr<2PRLgWZnUZGt`apFofwk}N%!Me(O**sn{Y(_ol3Jq3N@ z1CVf~3=IPd;MkW_V+U|5gpl;Ub1Qr1;4a6a>(Bg&FgCV`b~lG6H*XFi)ZKX<)LlSdj9WDG4cJD*kXM-M8p@2=bF=#4%6a~Jn;w0 zC{ID>v1CN^w`q)}%G2y>hds8PuM#ir%~yyQHeku@1=<>CIYgo3C2P$go4UPn77Z7* zcY}xY*kk&$^LiXlj@SENgJwRenG@lTSt9rw$%b8ywq zuzdRz)V<{-`+DLPv6?pV`ZkFAHIk3{q~e(r#dTs+u~=clMhVgkvY?v7h;4TFY%pE| z8$V!oPsF<2C|lAVJTSs?;s==A$hEIPS{N&oSWRDv-%mPZEAb1X5W>}EAY)6KMREZv za6%dhA%GTi0T0MPx{1-GM^v;Yfp))FAv?sHD^kK+-=~g}peoO@$L>=2^Dp_1SBQ$R z&7SlKOjaKwkZVD-v;+!7SH&MHkV13)<_d`(@}pmIc9;n~`VT zKid|&M{H=2?^sFnmhept*n5CY4d_2ncHQLf|8~d#bNkQR&e7v9Q`x0tA9ijZWUC~h z0P$EsX7Nx7j^@sS%E4^VYV<{MM__U;cOENjT%+|KfPE1Pq>d zJQ>vd|M+-PjV^TMQ2uyw(T4w}c(Qptm*}62Cl9gPP9UCqjT^h_zCWIfW90uoA5Y@f zbrDa*`-}hm_n%;iwr0>|fry7Mc4pAn5V_K+yYV!F3w>G48Ydp@)%D z{+z6SqMZaP^dc694(uG+r=3og(^j6aAuf~gp#{O+f00eO6A9IW9aErx9KCmTI2Is#?MEz;zv(r)vZWz zQ`I#zRk<8DA#JNn^%R6*bX3=CS!g9acQ0CDV==Z2|DeqktvJ(dl#3qzG)z+-uqAys z|5{8CkZhi6qZMoH{)w?AeL6qO9=qEfMsJ7Wof}1-)IyW{4w|wV*kkiGdg{`g!czAQ zm`^Jzc9QvffX88_ci@4HXZ#?j0lQtWt#mV_2zU{P_X1o|H&foYTYDXscpia1dJ@jZ zwYTEf;7xC7opbt616hXfFZ54gFHC9Jh!WjS7_@pY1Y0(%Z%&l3Zh#a;ez!7(@`=YA ziS1@>Qxj{qr;jME)pkMY3#@){N-GVNt`w9Ob4nd9ojp(**99edyvr#)XrRHc(po9`9WnQS>ByVx;s;7nF|Se$JD_Kxu)X#N_2kc1b8=ze6xO%8=?mFwa- z?ry?O7Igb}f!hJQ1KsXq<2tVQoe+IX#xg#~9Z0wn1l`qL;L?;1bT2XD-WdwFn_QQ{ zaTnhTx)Fk|BNXmrxsLX!g6;^SJ4N6og~A;s*R|4hPr@|99WHSDgu=a0u3N!zuOQrE z0{3eSL&xd3$2=!!Zc~BBybuxZ%}{u@c~;=nEe0O9nVs65gvZAOdIxjG%`_ep%sr0Q z5ZNY#N5CJAQZwEK+%vw0a5fQ+XM7cvSMzcam0#xNY$`v^%hRd+ATKLa_VDt>R9?c% zaa6A4Gq99^$xLmI4=V#V~$Xgu+dc z>t=IYFVRIx#Bdje!cCRyF5tM4)HhlICplzbYKo7_1;w-uD7LI!<;hrt%en7Zxyf5S1#Iu`PLMnw7Td}aAfRn z-v}d;7$(0L5B>O7ndbqtt9!`_l77QOi-!pbgHR?cPWy@~p7A%+-D{|2&-fdt{5mf? zsQer+Uq$6dc{!cRckyyEmFsvpfyy`Xax9fgc=;SE&!)1vp0A7f)+B|sBk`pn;j%hP z-h2lC7L>$ZA*UhXl{audXs|;c5|ZS)!QAp(6bk4|PNd1YP`G2{y2m;0{e(-OXd&FI zL*XL46>{7s30DtqBSPVV2MfpTTx8%OJQQwUx$YNkdHJ=#Jw@=a_4N>aJ6Eo2;<%R) z5A;bN;`g~wxF^eXD#sl_bg_e(;Vue=8!y*g&T&sCy7VaeS7I=N}X9nGZwUPB3gAz+-Xd5vu5TGB?&T!g-BwJmd4I z{46ier1B%YY^U;_ylka%EicDYc>ymErE)PZpH1Z)UN%vA1}{fY*~ZHq^H3ho%X_G7 zL7BeiH>a7W2?c8)uS=yD!*YJEfD_LA%RaooQVUF;QRba$-`!EX<_?h9<$1`jtA zu5bJgh1*lEdy3;;OSsth&FFeU;ey{Hj$60Tz;8|{+%x1ldI1hRn20WYmy2YU5DFJ` zf8+8UVWivRc---{%T=yh!?DW<`$a){$15QuakgA{E607B2B>oc?n|L?kzGyWxEqPC zo?W>@;bP!BljD9sxcb0%+Aj?uWPl(X!*QP@+3G>~ z!%(>Jp*?U&@Vc9L(0%CfP`HESx>q^wtwc9Q@LL%Q7x8)_$9;_GLUgQewotf8S5i6d z0>ahPm2*Pjj+X0sb6n;Z@q+G8FNKi9Sh?;KK6qY4{3Z(A^`USfhre;$Zz#s=a(FNl zF6<_c;|?Ucg9P2;KwPF@F`xUG>`T{gS|A?RFJgn3&)r4s>#^aCP`J>qn9sd`6L59? z?)^sy86?VeVm`N(aFYbDO`&ih12Lcbiul!KaBnDF*n*hPy-Rd;TPO^L3*Tv_c0CER zF(&zZa(pP?L?QpJxDRKZz$YRZ0tVSNYndb2pLRaWA}AL&#w2M@cd)S5f)s3#{)iQ28fbUQXp*ynGLpxAXEcDu2k!3#r`1 z%Vku4jhFMN{46ier1B%YY^U;_ylka%EicDYc>ymErE)PZpH1Z)UN%vA1}{fY*~ZHq z#VC*GsCH@#+QNZJIMR8BYRClyxOTbJx5i{W_%tDZ~Vy7{stN6HI zv$mB)gr#q+16203xv=8L-h0FNcX9%@y#N42dcVYsN4FdBcILb&yqt^q)`ip~H{*wGAlRop zOU!VHpTl?qhuw)o=gmRfJxgxku9RpGKi_;r41^uSP7*AfZ>ELw_rAx5Dr`fyjhly+ z_WjP;*pI@twa7KJMM0tOl&Gv9*u}5OwdVuKUbryJeJA2|pLtR28>_6p=wqUPZ~tUW zHx>PP0lsnNU;m^<2YN>)m$8S)z15QbLxJbadVAolXC z#SU=rLp$n@JqIokN?r#ZU!Pao4ZH7Y{|(!pd6&mk=aiA*p0T>59k$D zh4!xPV+!q!ta*JaF@j~bhrCnZO*fRTt^Aa0-g~Q#` zhMfS42Rqx6n&g_7LDhyWAh1Df+QUm`%ox>hrFjA}T^PXx6RzXghs}MOlC)p0sUgvL zCWG){MkMxMHnjtvrnx8%TLWxOT4dW;zdTjE4TPoX$)Kuq;Eb}h9lNbM7->Nm&HGTwXs1>&}n%@Ee00d&1!RBfw>$QTErNd zYGwuz`#yb}!{ZzkM=uFC?Tc))u=VgjJ_30lwtRfF{}Dd0%Oxz`y(o&9v4yQqcMnO& zKDq)H>{^FiMZZ;km+roVw%fzJ@V+KpP|rVN(DA0q8_|NzJVo7rWay9S4 zF+9%sc89sIoJqUe+>E;^z{hmlod;my|faozw|IQ{h(q|{X zOU&6~e^g>O+mb$#>rR4^*pq%v#}3D4JS#ysl2i8D!uHzb2^u|bz5nl!VA%R(*D)B| zI@u)yKl#vx2)VWvr8I2vI~mpR4QXJi_DO)SJtqTOlV{@FfpV>l0JM{r9#v5U$w&{| zWmj`E?CRWXY+an`{iok9X#(Q(eXU6TP@D2pXQ$i6B*&%2q#|#WH>n)zB4Nt!b6Ikk z$s1J$b-PHcRAb_Gk!-0(XT{BgsK^@?E>7<&;G&-TSaCh?+iVHWi9MPc_H)zTZmRcy^1Sy; zV}EZ%MBB`61y}6O@PIpiNe%m{$=eP0wbju6O!gJV8Ke3}mLq#2?o!)o_dlvKHnSgK%^#S88z6bEx85mmy4a8cXOH`_`2e$09X42ZS7bc5!k2w z9jJ<%-|0_!dgFygYJy_QTJ04kJ8S^or_CpHh(U&Mg8DBTENUhv=H{T475$KGy*inV?qKqwJFkza2SbiJ#A z74W@5#l4gmP%d1`*m>*25BR}e(2`$T!@mOTx7XnPJ_s3OEjw7Qn$+$b=e{i3edXDy zp5!psny~cTjT6T8yM5t>uBL8EY`c=X2~@+8m&}h*KQfeg%l*?ziKA`L@5KKX&&^R#fPV4a@!x7VPe&8K~Pm&rn+wPADv} zJx1rlZSj1|?V1S$aF5S=VXM>KRFi8iqI=QuDQFpIY*UIxNp(?6xP@po?Fv_N_uAFx z<4|dK5hrvY15jKV-Z5M+-!`3u(Ci|PAOh^hS`C2I)>E+KxjxL$$Arg# zom{SL+#04nPsEkjHF)j1TkV!bQ}BkaWv|^cI39n2!tNRNDa{z#&h*<00(caCSzw@# z-o--|H{P4IVv5x2Y^Cd+Ex@S!ip0vex<=L5=5okZ7gsaWCUwfPg|f1Hea}Z3lq63=~L%;L86y}$w||%;qKHse>=cEi{^iJ*aCk}{!9V1qCYA}J{mb|!$7Dl z%JX^pMam`9*br$u>9l7rPfzk$- z0#!?Rg#m^_B^(=EHYx#B)|1-{)gw~Ce`Jb2B?)o4Y6$B3z!1=<&27cXQG z=Qq#|p655BN$^DBi;-()5mgkcbtp!;JdthdNF(^lxwr>uOS4OY2?z>NdXZ$Kx`v{vHN#r9+1v2dd{+ToCezasd-}jO z`F`YtP3Sm2p}_B>4r`A+NFuo@gC{F5KSceFoJ~aUXl+*?P({r8@IBz5 zuW3w}ZxfeTFXH##fct4S@GSNnQ2&_Q@n$~JE@tX!M+(OjjZ4t=sXkq^uW+<|ZQP&Pwf)0% zBWJB8Y5&#suR3G!;hjl7A2=PIf(9C!|A%~_8HE3k4?M~g9+?IFf8zt&z^?FtV!Gi^ z_`vv2{+ti=sS5CcbE9Dop2#1X{=5&YJq#bX?o%WwucyZJUd9{&eqel0g!{oo2zfz% zaQ}UzAKee0y`TCVIf0l6_Jc3+kd^#k{X4*cJ&tDr4fKOT+)uXpI3ALbA1s(3$PukFX zLyCJfIWu?0XGk8N)fAbu9sL3Itk&SE+Dr2oqTizzaYPD{+O#dymDPTi&S6rG+>dxd z^7aMWS`oRu6ll~L1w6>4RcQ_PkX&|ZQQTdgrR$#64J@EhumegT5}iA8E5F1E;VXXh z@-0zvPy0W_y$O6&<+=EuNhS~=aDswHMNRFfMASO9J9N zBc_i1+rU6cr9g3&J*O!7Fik1DH+PZz`tO3*G#>2kc&5-F#hvyqisx)<5s;S}96btj7 zLW&iwuTw+o`|{70%>BVivyXjNlCkV8QCXv6K_UkexsozVJQ?U#^Xj(uc2PeDOB6z9RSq{Az>I1ftt!o_YmZW-F*{GMGZ zP+$fyv#9mIobNq=>>Ii!YR{dVasIPxpW5Uk@jPOmP0pHzaTp6;<|DC($C+Sc2nE0q zyFsW_B=NgOenj902Ev4`OsI5BXc4PHv{q*hU%y(-@SG+8CKjBXjVwTiGe+#%&wVl=!@s<^_`tTt`UH6O(=%#1o0(uqhy^)NEz z*?H2@h7$$*fRp}Ge~D9p9F{#KxOaPnX+a6EkgI8eRuisQf)% z{u=U=6X>SXC=DTN)8_ZpBk^Gwb(X%S&oAwhZJfW}%3LXBOtDAQ7Ss}e_?TO)oL|#~ zFzUwv6lj>*#UKQ7r;Jd-4eZ3|JlTjpBY>1w@09Ix;)_wjHEIZDd)DpGY)RgL1|}Xo zrQ16{B}+)pFx^P}5WQjuXdR-V${&xSv&x@SxLr@Ge~0Q)T=f2VFDb2~_Cgu?^@sIr z7i5r+snRcXs^8^`p&ODH9#niWn)sz4A$pKV7??fP2`)Up&I41`V4b^fSHJeT4XOh( zdF4W*Ec=96^G4MAWwvo5>f46MvC0gtH|#BZX$cna)AJzUn`4VGK zcYiUYTl(@(*{1Wv5_v&FvnvPc+KFVwN*Q}@ zs*JN$mO-v@SV&v0pR~Py-9#$WA$`mQmYI=UkF_dNy4H1S7;&MG*s+jj9Am*2!Hbrb zt@JpujDO^>s|pU{gk@w9H~bsTRlfbT--?KgmAJs=RV2gP*-7Es#hwV~#~(@Qs|eAv zKN|eVi2p>U8xJ}%kM^Ly84+K)@>%bRh|hYkcfS4a_n+^oz4&kY&qK<>2K1Uu+w;|p zw0hnpFm{9_#v=X~31UZ2Yv)GnD2x~8S0uJ8>z&K&+A{_cS5-OI2Z}%If9F?U)y}_< zsOkd{UB7w@^1YJn`+M}goqzpj7E6QR6Ak{g?qd~~%7e_9d*i8bNDuhV~kcbP_G?WVQ`(h2pRhb`Eq=TL>bED!i~;rjrP2Pcax3zd{08 zxDnL)9~(jKArp78B#7IW1MzMP&x7@?lQ#*7)fm2rI24CW_tL!F14o1^BRtuh&tU|MB@6rDpqY&ey_* zW9I8uB>i8^7c8~(8R16+kW##e%R5KH-Imw(gc>GKr5lQGdHhQllhY!QC5-53Tyy_4 z1E;=spBBr9w%#{myw9wct3B~PXV^!r83lO7(%-|evfiy3MOp6zyUKdEW)x<; zWg_d%;3M;Z-rC{P_z}E^h%O#|=d9Rf#9z62>lZSMiK_?~-5|xy(sjxy8Qe5uvz8yk zKh)kIX(ldxp6}47t|# zJSGYavu2g?T%i%%UAHk5Tvzv|Zb4PbNVR_Om3OF7#S_Rl;bpCn6OAGqPNNeTY*yCy zCX9NHU6E%#8k#pNKc|btd`}gq?(2``w94MHHH#JkyxYOzDL~*y5U>v^v$4-wY+JEcQfenh+Umah)W~9ydtNC zMTM(xBFexP0xguTa{fpQDxg;8*`X@c%uXjCz*Rc|%tY5%a~^lTGD!m&zj|k?_9b`) zQq9DP_6WZ&Vm>-==miA{f9{Ncv9!+x+|+l`nA{w*rq92bzBO$hDLk>OyTZuK<;4G# ziOsRA^W67bUMq5B0H^!btv}$(gZ795RMfn#w57ghzeL$;oX)o+etvBZI3J?liGP4C zOLZaBM@+LG#8spCE$j##6ySnpQ6cb0*Y-B8wMb{Egw9Gmy{3;qgqx(eXc5vsQO?HA zS99O`N5%`t+Jk?6CBp)88Lzw+_Ina>3LGMdkIG9c#+ws^#@Ihok8klh!iWl zKDmH$dcLk#vzo?8)=Q*bRV@e=JJ5Cdx%^uoyWbF3t&s)Ixs^mwXs+;Gt$uPxsh_;D zx~5k!!GVg+PM&J;_||o@YU%np-8HgA)h_yo1*sH2i_NaP&b&A!RG6ZN(8UUQZ)tyL z^2mu)gda&?hRiRH3HfZ{Jo)91$3^;y`{uwsmZ{{5w8!_g*(52ggS$0m){7ZH&FFZw zSniDO#EG4n(T~)Nn$dh`uoMFnK4)UH=(CdNEVX|(WW6on&W=Q^KWjlwOnWz@tfsD~ z2kwBG0i`B}KWi_WtGhClE9|iYAOIUAi22Rax|%)!5{RnVXwNK|6t;#I*<+wmZIlQv z8pI38xS`o!Deb6uuFph1*4iB*kkp=P>uoG|)*8scu|~ry z_ltm#-f&teloc{oDe_8AJ8lxr|xc$L0xt)7j=95 zQpqui!tTV0e8dJ%a-D1j-!v_Mpzcj2i0pK}hF-L;cWUpJg`W)@T%if+@sfb5`#O`5A+P@Z z^C9=cf5UuCPtS+3bWnFKuQASwc}IOld^S_YQ?AhRw|o6TCgHpGxB><* zM_>?J@RZdK&u#6Q;ci9y9AkgWfZqG4nE?wDi_7 zE#>)Id$@9^YUh=#cD6B-BIt5IK;72XA8WeIAoA*dWZ#)bC`|KB+(7)^Hv@ilOyx0u zYnMr!H|P^!l`^{jBVDauy1y+sluw+I%l)M zS;*8pU9Zm^)~Vh4DBICrl;-qmf0<$gV9Z9&pVTKSgcK>Oq6nEg6FDuz0~E@!hLWPwn*|zpUSsNy!;P8?P{GPw(w=F`g(cQl@#yi7^8$9fur)cLLvzopld0w|(Us0bY-;G|^B+G0|B^VP zMKdSncaAfi938suw^AnYC+WL6S{ zJ1A22Zq=`u_0Cj$lC6JsPN6^2G}gm;JJqA}ysQq`Iz=yWYis8GrtFDwF;J`ptGS#e zoRQ6MzSfs3T ztL)j;F9~xBy}~viRzQx5k%5RG4R~>twS0<7U5Ka(@@@zx0$PIIU@RSqjJnZy&JS<9 zYFyLyf~KuS-PoMAfr!oL8u6p5GkBKQwf0TXXIVNOx}9~dSL za;w*Y*}ap?RIf7N;_ghi;F3q+qP}D{oKzih8;eWUo-M!;UIb{#C=2hkc){KO$*KVHt|ggPIxV9!~}UP0vHd*2BeN>n2J^giHKl zDx6yg3vtr*6@iJ1#20``1@|Qy^B$Ai5rfNT448JD={v;f8M55t8l`)jkM0CYWA4_P zoOJ*}@}Paz&i%?42zg^+PFOQMc@4XW18l>NR9QaKUv ztSuH7pt@pDvW>+``AJkeU^yLacD}C~8=^ckt*>O@i_jjJ@zib88ztBCI0+Dq(N8Sq%036GKBF7;*Ym?2k}%o@c(MO}WCnTSBA zRs+9RsPYlucXi#KNU#xjtWMD>!QCu6)%y_p&np6F(if@|VRRs^?#>2$i&Y0gD#{K*-J z2TKC;NaHxDB1z2^19MnkYg{2GLW?3pmZ+mI!e@$13tCeRsi`ihMJI>ZdMAH{;6^OB zA}+EMirY`g$V&C~$gKw_!UCj^_0G1R3QSRV>ni6z?{H^Q^byYB3fqd>KPbLxOqG3m z2|!a0P3?~`pT(^DLssR$LL|{E(lSB~fdicb`M;d^3PzTL0U&my*tk#8CfsNxp;v{3 z%9sjT^F@B^6|zVAL-sYfks7vIZO7VGvmw#XM`|8cwBF{USl)bCB+JzGZ2&C`+qAVf z-0eWOH9%9P%ozU3$>LD*lhbN}r?6#hIx3jsEOs*h!s zkQA`Y0Jm^B%Wj2M#YR;4M%c546wrqP{Gj(<0|?4Y^-o(B&I1D7cwMdwH!j1?5kY}b z8jm#^OB?B0pCn3Nn^Q^4F5jL}kzpWSj4>+v-Ol$tihozOKtP1V``gudBuV=%!z-i# zNWk^UNsedVf?uzHq<#4xNO{>Jp+9lHLvi)p?YCvpQbivDr3=L!cUUN2yZfNHTm`lp zh^h+tSN;q?CQog)9Ad&cmOC535#THU7nz%GtiVxa} z5X5Z%I_0hTT*eiYTLw&H_)&HunARcVo?noP-x2jn&f^#G#+IB1`S)^r==m}~o1LS# zsIJw0k8{O!KU89vI(s)L5cTa<$K~XHk@ikcHEtyhQ;Y8d=Xq*T_sg)RnU*3cml~&> zRAC?9e&?r5hwNH915jzbH+6UCJK8UPE~$#@R>?tVt2x4zeV7*gMQYFtL*0ACIr^4M zIKF!tEvIRhUXKm6Gc^*rhvG%9Ax;9*85MUu(-|%0G{rjOp2f^X)LIF<{+3z#l^NVI zEyAlDwJYV`o-dqT0?fV%1vIS>ufmeyG2%U7Z$w*~4JMcV(1WMccuP?$Hb?A!B2*d; zU(pmW5V0n3b?GX3$)2jTypre|DQ%RSsP<#g+h{Bt2M$JqE2?CF{Gq5Zd~eylD&MXO zS=P_3(g`Er2*-)#kYl6EBD7P(`w zyfLHBLpS3sI7CwFyB4{Bk!S^_JDr7mntWW9N6V5#>YFO{(dFb1AOPw4u~2*@jD<AoMI9^Jb9iJTO4U=<`)3NBZc^BT6ncL(YA6yW3?S+BX1`91d{L39ANa*A%M|4 zlT-cDp!3i3Z;n@OcYgm^H>LB5JH0ap`VU!$_73z8e8RtE4DB4~jU;`8k5kc8&wnle z@&Bzq`0u-~?Ogi&P5$66-+W)&CEikJIM54@b)ZiNrrJ%`gCu?9WNH57&6gl_hx2v% zKg)mq_s!SgN&l<)>ZztX+kxJ}e2t)$cJoz3(*MDHL9f}$J+g?aXt{2~pEvK{IES{saf-wL`~4iE z^h=C)?mc4X(-q-Fm(~*$ALV|dkPaTgyq}0UA#r(0D7b3Yr|5FUm2BihP)t_FS4XVP zb*D*i{!QeX#^~h{W3*i0f(KODf4FBz4lmw_ytuh`yHXCfIFr<1H;0v}0PSdn#AcZ% zC>0V1U;$bkOdC(wTdH?hWafqw=Y)qKN?Utpqn2?lF}Mpxz}W;uiW8|WJVYYZET1#k zjMb+voZ-TqN_f9_TyDkUIX9ral}L}cb9PPb$MSi3P3rU6rCImY5Q0CvvGrB48>;(f zddU4ViCj!sv(A!Q#ZucEuV5!Y^#>NQ8H==pKfvjkf@VK%Wih3t#cWnr z8=6@QHNUb_(r0HHb0&8~^pYoaA+@zd?Mrl2z;%1@(ZS+i-{Ra(A>j04QGcNu zEAXkyZPLG%zM!>;VWUu~dKS^29+fFq=8X&m12^zeUD-1BFXuS@RE@Pylm06=ol{gf zj$fz$nDoVNx?j>iyHR>z#4(hMOZjd$FJJQ3xp_C}yzlG0vd^98R7QpI(8{Jy@{*U5 z?S$#F;3e>bk;CpArZ5U7f#Xqg?5PLYL*hJv%_MfDV8;36@485KPWXRg`qs5=RqKJZ z#qK$P&qB}3i4IW!wm6^5Oz7<-KnV0iws}ylyDEpp&n>sIlX9;N%C7Hcos|2TDwnRW zu9I@J+m);8q}&8mPG(V$dDJAb9BUD2g}dW}Ih1O*Ttg@2mRuYi<)Fe%R0SfyG|OUd&g6_Endfj+gs`2y)l@Row9pMWlb(}{YqL9-#C z^>oQ2Y+dc05-(1PVi0kOCSX*)O*FF^KVZAeWQNvS;?bv03Vv6&%kDH~Guz^PECaO% z|LL@>2A`Hx8mxO>({VLHp$QUI;(`kR5c`tX_yD$pA!n+TRbiAh=nZ51GIfVYPwS{2 z{Kd<%;7{T2R_t6J{M9px4&ZMmpJl?!dD3VH@VBmAx%^Jb-J{B->A?r8(;5yk>B09@ zxiq{y+ex{QDwoDfyOVOKx2x~_8Rar3@yPXh5~V#4e}&<&gX>0kO>1qC*bxQi6Qd-x zKdJ%}Rst&vCx(Z;O;TO1lWMj&qolf^gTPVuwu1H4`Pn;Q4@wSFwVFWdj|Vc<)|W2d zOeDlwAXUqaIePb%^USsE>~8pYPB+t@S>ZrpR3mc2&~0S3fQ_~jxc(Z}KWa~s{@+j{ zJGMLC)x>u6+B?e{%i3B;dipZEjc`c0=P;+0(3Adhpz^o-X)N>nC8L~72MCVAC~MDE zd5KCGUrXIfrY&AQwCkNtV6E=#&{WyFx7mKLkD-o**YK0J&x(k- zmm{_ZFrIWa9s(j_MxiT->EoF4i5ceGc);O9kxyh%W?@$Fp^DILr&vbBI&9^a1ZoHe zCK3{@#I)}X%u~}A4ov1(;$u#MeBfe{GE-cWg_IVdC&*DVjHX8XJBS#j{aD}$K8e~d z2e$GXc^Pn%zqzU`1&fjoke&fAndf$&Aj?cV6nIj8ft%W|pw1G1kb@c#i(k&NHjhGYFaV&%5la17+Z|^_Ys;BS0TAF zkH}yJ&a4Au+kLM;5Ar6qbLI*0Wv^+)RYT7E>`chSd&&$Q_|bP+Qb=|TtxWwR#OgFa&0wZoAb;8aWx4NHZ-{0 zSO|xKLn({X#H*>;ekd@Jb&V#fN}>t~?Vit`o85_bgan8^d@UcyC`6VF$QkNJdKy*6 zaRv+%w4=V-gG^`}aGvx9O=$p8YnRc`UHUNpHK7QaYAfFaZ2p!L5M6#xZ)D@AhZHG&;u@(?!qbWOFohY* zY3?16Ca9W&sJY$q(!b@Vd)@QWyOAyf4BaiYa^DYdl9HF`%a*?MB_MsFsYa$)aF%`% zU)PA=2t{yO$V^g;oOiS@c}B{AIfnA~CBKwsM?XIz&+qH!ggmd)&vWJZHJ+WdYQQU! zIA7?=isUHw_k8!a2fvD{X2>^+zPhIOqmbBdrmwb3TO)~U{yy6JGCK^!dl26(}P~Y2s>=$$Y}cGU=-N1iHFP zK83FKQ#&AzrK=tVJy+(~1)wyoJwc^*NLRnUQU<);d5~YBt5ECLjQE-KJOsEwS)r=X zFX!8PDd!PR68odY?K?Y@a6z>oQBTlO=LD(LrF2yguN0|!J?o38l_GT?Um?{)^eAo8 z9>h%u+vl_jIbX?V8RQ%%NnA~)(~~VILYAb}6yYnUE{y*|_|&we2;WoC8ka1+RV`&4 zA$+P#>;NRgDTkln1T%MW?k^WnHhuI26@R|asulQ(gm-=_>>B)|2zfLT;Ydk?P;zMeGSsL zkR(qIf<1eLH%0%YN2Gg%*Gpfl(mUb{-<4i;#23aCK`S4Xj=Qv28JXY_%FcAD8ajMI zOHpZjKTEaLA-Cw^W_g|VxWZo5$kPy~n=fIfK3(t|HmK z;5lr^{*CjQuv+p5G?>DMViX3VtGi1Ui$~;V0Ev zR=+BnpKRizw5)ErvU;_1>kestr!%OPU--!sj<=VHzg(RUY1V=$a4hPG?TV$mOfd-( z%ZXoCKtByzpJXc?k?eu;B4KS5qmh?&3L8Y=4+k zF9)7ize`j)J6;v_iU)S7)O!Ot(n3o-aDaFDYZh7HwIYExDWdHVFGhvdF9{S;I3%*T zY((7eOxr2RzY0_{F;QBU7KMLEF<8eBK)A9-C3?esl=SUvyON%J_ok>@LN@P=ba-kj$= z<;Vi6I4JARlGb(fAXUAR_Fkmdk}3m}NIlWueuT1Lxv8qhXgB4gEmmn^q;QJMe56Ij zIyVcF@v>g!lr(uASz_(unHK2%rbDk0S@$iS?!Obo?U(5K6!U4TkD40C4V>t@;$!#jXj>|Fkt zWcS^Ho?|9lS_lwol}kqN+`L@|u&2{S=xha2N8jgqdX-xC0qiMKn$K?6v*^2 zGbfTGs#p8rEYUc| zq6?0hu_k1Cwoi;wJf~wc)xi!BfTZ%|1jULf6m^iL^)NsdheNA$92bV_JtMjQlx%nq zJiSFm3$Cc`=l?jmXjh3K%-x?*p+=a;zfFf2o1kPGVJun{Di|Gds~8`?t3)DA&b(Pw zk;8y+8HJ)~f?O$Dr{W!vGm!D6C=T%=9jVu)UV2q~jy*Md#Lldd*pJHl-&n*ges&1F&;m9^t~8?%5aeMTyhQ(AkVz zf&vT_Zo#`YQDLVVgP4u<2%Hc93IbpTXj`HKtl2$3K1o_p5_&u!6YG-X{bh}sC|^#4 zvW6Az8eVs;R&rNJ`u`qo2t%aEY?z+8P;>LQI+~s_w3op@#?$Zgk^#tNja62Y^Rvo- zYOkLDDAlWtB^~u@nQE`^G7wA6wX!xHOwIT0>F*!x@cY^FJ+rIe8#XZzHgU6?riq6j zfZ{V(k}P~+N0?7MKG1MjD23g3XjTUfr#kTYw$uQQ%j`hRb5$Oe+8}Nf0!UNR4C!Mx z9czq;JSlGUXO+GrAo32jjX}!0$*wP>VISlO8CImHOxp%byQ&I^a^X`^DO9Uos&dsqQ}{11qblfGJuh^|S3(8$H5q|2p8Mr7BBFvK}w> zzUt*>d875x_o+@O+mjltm;NE?((@B!+YglfKGpzJiTE**e{qL9hle41c9m+`WI(9d z6|HMi6i+7E6V)GbTL4Af)lLoNE;Udk#j7Pp!a}lw34p8GB*G_(gl1MaTz{purFGci z8R=>Tx?Iu3h(Cn@?BtV~{Dl^cRaC&_C%m*i%m9+pX!qC}jRtH8ZAtluL8-_*$>SuY zr%J(yqiajf=QnMy!J7Yx$k;ld$9~QqA4bHMP;8xw*vrJvEJAiWqfO;1PrzO_SxN|9 zYml-|*DZRP*78dfsYcSG_Op$2B$`kq;C&DF5fuGd35kks@a;sY1;|!}j(7E)P!hAH zVHJ4*TuyVtI(c%!A*tGBlMPZ!r}7Md(wRu(QM;=@q&DG^+nt&Hn2N+QsZr|JxIT&2 zsuFh)*hp;u4U1$zY;=y#QF=hbR_VC?Y=xTnhQ;cwp+ah~o_$o_2tTM3b5vr(Jb4ow zwi>4J=<&_OGWk}lJNaAHT&ao^%k;-RPsAvhrm$l-G`Ht}bM8+5KnAGh?ouox$IRV1$8_>)436n>=uXyN$_m;~%Dg0&$@J)r zq0TG_CP1U+jj&{rj|7-CN+#kWzE-PcDNsm_51aZo4RMRRKJCE6^B^cjIOP4*@FsHO z;W5LzoTiWI;CHh|NCzMO?myH)wFd2ahoG-CBINxos)s*$FV(|W2-ST|5C5CCkLlsz z-kEDa5BFa35B2cxnZg5`Qyo0DqYf4v+d=Wo+C68`$+l+&3DV%A<%-IGthaw_KF3|F zW^`n_!?zZ9Fr(L~*85%q7;327B3p7mW}zBRxAfQNcl7m1@^xaF0_h>k1pg5-{3=n? zj>IyB_bDFl3>9?P>CEHT3@Yj)I%mVGuVu;lt~)NX8^{{E8~41Mn)P3wm>xt*(s)2> zOK75-Sk_24(o)5Aou|lpLeu|LZ?02$b*nO@jjeTtX@7sy^`Y@{vOIL-gcVL)mC|IC zCJFqmO=SH@kFt#<@$f`x(QDXa@JEJ7;=@@DdwJW)6AFFO_b3DN|2H*d$2ReTDkn|M z(@m(EPOLwJG_GVf&VZslX#IKXVQg~*y_Afy)@x&ej!wV$cLQk-4spS!a>}r{i}jsL7pSV zh`-1gqSFYFQWDWRKigiNYlE@{js-`JDX2TSs`RU}w#a;zqHXTnhk2m+d9y0R*3PD# zr?F57+h2PJ=FD9srf~=aW^Pw z5hr!JhM1GL21;%+GY$`%BEVF7yA4Yu($aqCM=}d`AI=Vbh@r5`uH^{uMQ@|e+314G zn1*i~|9^o~fiqSD{>JCZ(um@xY74d)4HG0qRsEi~T?z$RwSavhs|DxXzX%sc{N_-O z5x<2mqX{(eXyPU@9t{e#7Bc@;iMf(rds!rLV}H2@hGXo;h>bG;oQ|Daf_co@`W?0V z@x&-+QRaWG=G)*w&G)O;riRA)7pknI)KnzLf0jmrg95c>k;D!CIdhH`$z9L7S?ta- zOW!r;A5>MG&x5L>i?ynu@vhTlpg<+AA(5UqJX-9W&El%=0%C+TDhefT2uFgS$<2k^ zopWTgfP$HFy;_@$2Jx=3y5qd1={Ht>mFL`DD}n(F$} zTO}1}3;>O4Kj!}$zRtPmSonH-V@L3{wdfy%uT_jN4Z+S`RQ^wauX)tV?%Mx*_>%ij z+QC;v3cl9JX#dCXwPcVQOXu)4O~9m6__~T*559VL%Yv^TUDz>vO;!CAB9RGSg^~(< zy#`cx@TCdYTjKvX^6K*-N(4WM#B6Az(*l`xHT2fc4wM?WL=7BaplQPtxY{xPu@D|h z_KQsch`IG8F{L1Czx1S_n;fDd{Fen%qTclI4@W1q^!wjVGaVN5F{ z9Qzh_VZBr)FPI>Jxb5mwKcKsjx<)9E8QUSzgMu9p{K zfQO-72W6mu#BMcUIeMtJxM|VK+t;7wgD0o>;6|QAw?}e*sesLl_|Om!U+3|vF_o}7 z^n771_7c}`r92g|w+x;b4@{H@`@FrV%)D~PEC(h{&GH&g>Qs1dbJ6I;EQaZsA4?F)` z*8`hzWtf+ir5AFeh4(B*Qt!FH_pEg5ol;Z`H7eWfjB1DUaxb0dYWErU-#B@cj*E>( zev9STCgwNKCeO|f2g+b(j^lh3+lgfxv-60ol=S#TE=&lcpCZ-gd_GF00t(d&! zl=5}TpQFn~6Tj6?KFjaPBh!&b_SHtY)L7(^s^CuW?H$3l-uUWEWCx%#`d<{0Ev_ov z8JQ1)fnh~F(6xE9UI|+VkVu}3T3=NqrX!K;t6O3QX}k6!ZvV^{F^z_YF|<@!PF3ly z$ovDUqVsuB6?F|;jmRZPp#smyB`g&l&zty-wG=o{!8=T>ezwHyQ*q55=X`7p-a2p{ z1wlQmhQ(Coe0Za*?X+@|>Yd(K$<$~=XG9wT!OrU$6F_pO(GRz@>5C8txlL<*PNtqEk__d+bT zQO-LYAc5M2|3K*&|H{H&vSUXBFaDI&QAwO zo8p7wds6F)Bc-b&t}<{j4-9eMEU-?rfpbu&SUx3a&t!OP)?|;Ka{{~dMCEs9M2(#} zF9~spAiw?i4eLec63_yC*N&f&GW*_gWUa!1bMz_*sIUs+0Qk>Utgt<^Tx_MQ@fx>= zQhH=I&6Aaroe8z_0d!E&MSJkWY=L4@J)PifG=OZds$~`=<@W+onx7l-@z4_II&zX% z^5m{#9WyvI;MCAbIgEcNidPn;GVZ&Qq~uKgK|T=RNVdSJWo-(QBS~e0U#g`P9siQ* zqH?t__nnN9(j8*^o0L);QQ80J_^Rb)i*uI%t<)(is^FI?dMEY^P47;lDVN?w zOLreLFD|{~!b#7F@dptZibQ0%jVXcci`4%%w9RO^OlHd3T~(U&rsTqQ#OvEa`iiC7 zj9K<;qZT1DNXN^aX?qwWaLss16!@fPXrc%{@Q3}*4QDCJM34e^$4k%GWUeGg7}wLT ztaeUS^CG*{gHDC<@JfXXYOmn&3{@&;lRSH(y^TuWcD|;{R&I)N`KNq9z{lDd;wJgr z`G8zA@t6W@*mJ+sVb=MAX!BnabjV=P5-+F@z~lbGGc|eIhp8qDP>lOFl9c?Ee*})D zY(0%6KT-)fWuLd+FX?J4KRqpQ?$$NMpMZ!Zm%5a!DEWJyocs7PJtz}nX3X1w^=;`n z)agCOoknMMAA=|=QTvVpa9W+o;%pWdzr_E*SfYtZ1<}MsRo2dSeDgAbMgT`2adIkU z2NS*tk~y288`@6s*Us!<87y;Y6=p|M%xdspZ3Yvyv92mo`hH~oVMvgYS`X8kd9zBw z)>c^VNpj8$FMGyRd;CXbWGZZ0e-utDb30V`?WJ_(bAH+ShxCM`;vd|A5?mWp)?ZA! ziC(6CH6s4{+KbTN&BQ3s3ynW93TQP8nnz&mmB0zy_|`H)8Gw-pp@u4G!aRDOgT6RI zZZ0coU8DJyg;L#|{M}uds{wz?psy+*5pe>bsnm?ov*A4>{uXsXUjtmvOE>zrdU5=S z65#r6>Gl<@d^9l)UHlegz5P|zmsQ4y?Lr-olO>bgYCD|^zO7d21g0^{W#5;mi7wO% z_^jVE$-kAz11M80lNp>NV^kZ>|%@(!R zWG#=DMjXO?~R5ZkelwXao^>-Cmhq^=)|4PSi@6Xw`XktW3G;sk+hTOtnjQBILeT;@b zGB5Zl@+cb{H{9%S&K#cYlxr+ z#weprR2uTBhN1wUHWf8Yp}MS*3HkBt!Sek+iA1ype+(d$)wlnW8OZLN*qxXJPKkUd znGC--?R7T%DGZ;k(W_fj^=kP2BBh_X6vMdxPg37}O*MKbs=@fB=Ge^i_}}Fqa}#sk zN(coPK4r-+75Ip1_z+l?8OoZT3aXjgKLxVh&oLHl5OyJP7hL&Qd_UiDZaQ6Nx%Nj~1$n+V z7R5I@IXK$VE?|Gl$ca)t2TUiszf;`bdilldrRN8mD4xB!lVvAzzVjxnVmPbTZ;k3r zMc^;EKKV!9CM|A%pFv_|zjpVJ^v`;4e?JIzvxW_X5UHNi)Am0s+`xP^obdY+BM0S; z9N6?xZXVYa5P+{w@35~iT)Nz>IbdB~V2vm;eK>@Bt)Rbq!B;59r)G;kAY<`@vt`Js zVY%YdSxoJyQlK-$762^zos5pWlp#gNXR!6xLRM>Ma&3m zZ>aREsC`oxU+eMdH9?;6$!X*78cUDIH*)4zKCFF84RY4^!^UKXPtEzs{v!YoQ6~n! z+M3Fi51pqeB3EZEryJN!20u=|`d9-?S!42EN@U(YqYeSRZLJAgP05lQeA*~kb5Q6Q zr-qJ%=qNnjS$P_|c`_^!!iX8u44rlM;6qc*c#cS5fOr_nfBFW4)?rl`=hqVB1iH&r z=y*~8otikgI~nFNg~P<`**6x>fKbQWoS4tqF>k=UW{QYgxQHJGOd{<;l!xouyy&M#MJ>K?xzW| z8aMlLto3ze+_f1p-ZWMjYeUBBknx7Gre(P3S_tB_LH$&2t(QuuKw7}g$L*T)KLP}d zP}6}v*6@L0->Oh-YhI}7(_Cvzfac3XKIrW5aUtIU0s2VI+ota?k(zZ)$$nyMSHV_| zg+lL%7dpzB&r&34W=BKgob#|XS3fTuaPd4g)AS{x3l7)i8moP4FpG>`a2T1v7reax zTtd)fL@U?w%P_m}KlwT*)N}+saVQk~B#%Iv<$!6pba%Kk=^TGl6wAd7Q;J#Zm4XNV zvY*Y7+lg!T!LerCWyESJrwou|rX(lx?DnV9UX#hRjl3G1sh zZIHwdj$g|%%|9rRR5t)P65uh`%Jr>pX26iKib|;w5aK(jGi>c{`Xo2h^l@&}!9JnV z&tlv1s%j2fmzQ%wnrr8VS3tjHX+VxC=72Gi=Wi2Ovn~$+YLVbO#=;=&nl)dUdEU6H z)i?xG4#}{5ye4iLly}R(yj#kN4n;-dsHocaMzrR0LWmj*pP~B1mO#8S0f7tn`Y&! z`;$bzk60?+p}@P4PYv?wnjev~QXqeY*axye-X*mAor_q!G{ol?U`|vw&Wz&4BuuL*c+->tG1lX^j~upe+a>;0+Q~mcFKt z;4=>iT#z4L0ki`6#=>4S8>u0Bmq>HIFPs}>95rLk#Zz(~2b$KIL;L~b{@*LCaXH3* z=OAnO&3JGP)hawN8Ulh;_TWpt$i#&o^p)vL9c({<4IFwist?&(9L2$E%u8KpgXom`?osUoM+e#nF4-hA)M1`3G7*7`6;wgTr#sR>|4 zGuM1pQQN4CCBlD<*nd%9#J4AELFRv|>eljG3ax@1|YzE(WxO$8GJ<|@J)JpT?RLADgVb)0D zl?=4NxrR&`Q$cczbTC7pRr+zXW{rqla3>LC_EnWOM{An!u8MmbOy+X${AcN7hI|(f z2<<3qG)gh8MeNY7hSgH)aY~7`i2&0TTP1IzycJ8y=dpF5x*IGcf*F~ zAw6st`i-<{k2@H#uQ(8~Cx2OG-?dw|3qTfeLG&lKQ*fvALy~hqx$9DN3c9cWEAMg|jzHKbHUp$GW2Z&yb$ysIsfp)0tSvrZ) zV7QXG%YaLWorV{Q+8^64bQrHjfjXnD^^RDxk3haxw?%y$BAoE+5}J3Ytu{%&yQ{H9 zgWKRoe8(s*h|-CL|G^7ttg+CN)FDiWu~6;bmWosDnF&PfCYXFPB0%T>)lB_N4-&h@ zY8kbvUJqCXw-74^LFmUWsfGkBnZopk6UWKo2a}aRncrA&x~?qFI2rvAZb>i}9tDr8ICxhO<-Nag z?Tiw0L43uJ41#JvGB(vS78s1Kf;5tlv@U` z^F?BZ2&zb3p+#jze48TC*X0^Zr%H}m;0ll=H?-(ZRjk~IFVkg+us$`HGDsJEO_@B( zs1GRf6J5qnnLNt)y)u5vs1GP3e2yOEQ^rr3e6LJCWz+|hxk8ueLYaKZbn(h`p^W-~ zGUw?sT`ALrGF`ngT`8kJpiDPi1~i}Al`_Dy?sEZU)CZLLM3%_Dt{Y{5yhGi*GTkVn zKA=pKF4LVd-6*5*OUB-vGU@}${7jeWL7DE9>EYGWgEH!a^4i(7Q%HUf^4Vyq`%*~0 zDqLPWf&8B27m|0GT?!7x}7ic^%QFt~1E*<>eXVsh4tv zPqpHg00n^9XzANkzBL3jRZ1us+ zhd4%Qz97n;rP!ytP-Y^&-9lpGve!U>Ipe-4YGBjGa>1g@z|A+qi$=9g-J!lu&Z2k~ zF~8%o+sM;XtX;|Vsv4of)(Yi}FiZD}LqU; z3lPgy(c~5(M&fuD9#xSX%d28-$#wL=xrEwTy)+BhPheLsoTP2Y;-@i2HW zICcQha6h9~22Fu!Gv*)^H5m(KKNz>)=Rcj}UQzyWBYZb>z82#~!K$!j|FP!-{zzt?_|mjC3t zE2RCYpCw0A%%#t??qe25B6lti%_B7F7s%1=Id$ zaCy`orVtu^B5L1=<+u^_ZmcX=&S4p$QL(Q<=<)JoEq5iaDtj1`SBr5Elv7Jy$J1qF z=|K24l=@cz+fzuMXuVT?u@cLq%qs1&xnw&gxKx^6Q$v0ZK0;9?C zlLJ=EeHi3ukqU$+C!ZXU`ZJmKrBk#Z1wND0g&c5tgU-?76X;A%S8_n<=XH)2n!sjq z3djMYf39=1s01>T(~TSuTBKdt(E<{2w;|wQA&35d$NHsGlk{jSIWTm$=} zeCWK9*Vd-|q;o)UW8qn-&SuRU4D9Bn%yu2!Zf$;1)ORqHcp!&wIckJdge4*>B86_3h^l?%Qzld>u|)DrLh#)T2?vX+vlWV?nT1UT&Xzo#|`hTwK_m z>1%53BDRX>W;2v`r#~OX*N%su764jqGWePxb;S$~`_%5{F1t*^pE4K5g3t&FArvDF?71hJ#<1lOa${k50QJgF z?&VVk5@|r`rlJTYRxOi`! z0a*_Dn?re$@s+Th_yO9dDyVWOzd7WWjD4Vp5#ORSAj+XG&7pkB*e|3b-mEjA$)T>z zp)Qhf0NgX;ztb6zfRjcCW&8v zMdA-hgcgT-G>5uN;^8kzyoy9faj394)I$=F>?N^+L@05nXLG1f5|6SgtQOJbD6<*r z)g0<6iEZq5tvi7P5?{*Ur8(5glNZ>)gAGAUe5Jeg8gtmJCK7;_v+YNGhz^8FF-}nX z^$ohdum%AQId?gPW$8Pco)$!SprlL#Q9JoCQ5XoLgr$ zZ7VQK-!y$90l)`J351!V_w#p(ye531nS=c!^PR$$1FIa!g zm(>0~jpC#1bI&sFmt%<@n!f|e`*ytA0hWiX7qhVZ6H2DBT%q*lcQCDssZ%!Pj91pv z!3#)JyBHul%*J{04yvc{JaqG156RE`4SAF~^^a0!=ka0LzWIVs#nv;C*KWR8(3%^# z_;x_0b+9r~E`}2#~b?lL{;vA%SWJ;v_;C22tS5=Xr+WJs=b>Vmvcf zsNt!9QU!JnQbUiV`qMgCuU{lFBxLmu+xJKq4nAr#n|2Ng2UpH8s%-xWp+r#-ZS9U? zA;>hkDQfpCkUjiNjQ_>dtW*VCL-w^kN>6`AopG%am%N@C^97HJ3Ei_F+{KItpV+@m z=ox!bkM~7=KrU+XlW2-U8AW+E7OWvcrBKIEbJsL^{MlJ4@)%O|Pm#uLs2S+(qNv-Z zq3VqtJW&*%h%s!9oU&dR<3o0w>2tVHOH}ZYxuNEfE>*lr(YOP-q~?*TsGlZ_Lv&6a zIeu~!`O|dqTRO*2PChw`{%OM4Rp;cB(}f&G05xU&Tt*)|(1o0?tSOYEM!XJyb+;IH^5J?M130h>A*bIa()=be`4hsIauG#WUs)r7-S?-w^4s$x{hPl-ep4YJg5z-}oki?~UZQ0wdfA7t zshRZP&k#Z1j)<&fHa!6ML(k`u?9qfu>mH#A5Cp-0CE`E?K+W}vK&;pxBoN~hxS_K>h8=f{^p#*0M>9qlq4A zxY*DzSr`(!uQ9HR~Uy3G}_nP6|TI>h+pbr zJ88L!1lTc+>}R>iPDY+kfv6qRxZcynbu#=y1jx{+{-wY|>;N**=zO68WN1u(PiG(l zjqV~OfDDc3%XJ2%Z**6o0Ay%9|8Jdv3^ckx2ml!x%@^woWT4UA1pmoUGSEyKMg|() zT~MDyh2WD&L`NPh2BF+L=#GcsoblUKehdW{sWj#jWtgsSjzM7!JS`8^9IQo~Cid zoPSi~%Jrv9>PwK;cGbT=7cbimMe@{JwlBT(LpJH(W6sfGyG%OrCqyZ*wt4 z(qW8bGB1D9$fEpNu>)|%Z~)dw0m;+>6lz$%8pkK=L%ooTT&Mj^P08kphyZvF3=H zJK>Mv01T1>lBW@8o6dtnvMQ1%Jn~N(cUI~=cw{&Llca#;Y4maN3N9HAz$Pgmd74k^ za23KQ!vPp21td=)Qk@`@q{Ax7lyrql69kte9cD?Uq$_l)6m*hw*d>{gp2;u60T?Ek zlCF@duat#l{z>C;8Oh3#jB`@@1T`w|5(sUSftA^YXe0ZsT4k`LhwgF{4u3k zeE-i1i~8QCe|tWwfAg2|tKjiiyy~1!;#@gKuSoGpvvjTLJBkw*GySPR)%-6s9(ekM z0@WFg=8prDE8&O2AC>+fhd}L7zT^kHkX=rn$6DrCo0_)z7vb{cVENJHWE4@2KPo-6 z$R9{vA!#XouenQb*Yt~`+&f)9?O%+g|0)X$iADQ z9f%$3#bgf+7z@~5)n;F}JJw>zthQic;BWrdUkfBGDC~{D&%Q?}1e^O2I9ei2PH6~r zbbi|wsFbnbG3L#*=g>2eU96RWJ{n!q=XlR%vGw2tUO_Xbc85_fL(0R&+w%GQ=#&IpOoB6P5 z4|>`iWv^J472jt zE$yodILDKjDLZrQL?MO>G7DQq;GgrpoL*-qioggmidse#Wn_%E6Ma5Y8GTwtuv04a z#c(@O?5K?5mJ!7n8RyuEejlrhek~*VWn}cG_7Xc$vbC+PWduha*slF1AhjQx>e;e) z?vS;=X*-cd{?%8yzx3du?#Xf5?~}qqjiGWNBe}Cvra5V`TV5D!D?8v=>xgDzq4@_D z6T9y}kl4cZPlSmrQz*r~q5D4wy~-|Q1m5@9nQTOjXFiBDwVoZdKB%-O7@^qLeJYJ% zTSCEBW8pMDuax6uAB(aYJA$u~tt~=VeQhCYixK}JY=?Bbjcjz0^xU?v{eos?qjVnb zMs~VLUY_J>R(65T!{0d8V`b!NR(68U!{IpAV`b!NR(6Pf(;gnju^uZUPqVTQbsjE9 zY_if`*S1Rgg|5m*Ch{TQ;d318u`==me2n;i={%f{V?9ba`;pGW>p0e9W#n}i zW7$;d!|gcMV`ZfG5PR8mq=VLDJyu4#Kw|AM(s4YF^;j9{J;iEv4(WIv$9k-c^j;Xw z>W-7NBHoM?E0dTsVB=_e{JFkx=}wKTc$!T6Zl5BNqRgDPbftLqL0_y3Wo-(F!|D|# z=b|yi&U~C=8lQPP^%wHSL*FM=^3nW>>i3R=g4kgETYpCQ!WF`n2jl3 zujO?^D0pzj#*p=%!f(aTLb1Q@3R_z$WhccuVQX{KM+KqM^_AGWgYVUq@X?(0g72Qa z%f1FV(MWDru8<1O1|&6~)AF7R&2ydBw>7`gOk+iXBAolW1Imd!GjUEdxU%+RXlHV@ z?5z;y6x-=j{4ls~I_Ci~a8G0N&W(ykZGkyqO~i4bnA5#t5w}*cHx}P_7c5i0)uONA zSd;y2%L}U1{q+9sx7j z3ZKAuZNz?rMtgJhQ8AmrK8{A{Q|az#>3(g08+zr6=?fSx)J;nPod8a#a%B(Q~BxZB1=?zC+>C9Vy0REd8#rU?A0m?aPGkR4n?g%XU~N zO`Heyg8sfJ*es4DNeC%cgBOrA5BFNNulRYX=M*SU!-VLN2? zAuE&bM931xLsl_anVjc*vV`@J)sL)9-UFmmmyj*Yhb+x~*1C&ucE~zl9R*x(f6 z3=H1NaA^}9=q5POVgYmkcm)_|VSJ4wIB#&V1k3ptz(}^L9RphM(|EOO`f(!s6;JDd zJW}6QQC{Cx`vFiKQWzo>%opLvix@H1!T|*k&Nl5?LE3+Z2!_Tz-5_-#g@MZeno!d= zf90Y=A}y@fa%@NPAriWl4^8U>g@Xt%;NU25@C$GdaZspVdFu=<56TV&kqMRH6afeB zc~}Ul77o=_l*^4+1(H$<4^8C4-5LW6uY^o!B-CkwhhgKn+(}k<1VUE?H27L>O7L|k z2d-84xK3^aK?bZ+a^U7@+2&~QJ)_}T7ayyX9Jt1aJwrKUMOO~o#0gvEKte@zCbt)kW1tPa&5%F$vI+hV9lGCw}ID(vxrNnc|=~zs}0(3Q~`ah5ps}uqXk_z(! zTIQo5R0;DtIT~Cc%x_cjEh%FiOg{6u{H{v=8amo19Rm+|!JFSbg zH-NQsQdo;7$2L{>noeyGR{S#yf88EzWNa=5Yt7Dx)re<9sdWl{Jq<2o6>7Dv3Hg(m1^uoDK!Q9%=iZFyb1g7i*<&R7&YPqz9*Qda>5}My0eqH&^5I zVvWpZzy0+I|+W3H%W@HqhUGQ6IbMV?a9H8X~(f8I5%9* zZrO(#*{#>eX1&rw$p?2LUZgMBXV)V1@BeONFtN4SphHCLck8LXU+RrpHIU zrvy*->RqAgHK$3vr%ZCwsdt52Z;`R|WOihR%1@Eu=%M@ynNG>$;w0OXoC240^$3D` zto&3mHNC-_oqYO(^n3W`amw>8Rvkt!J5-YAW#nh{vm6OX`pF3ZFi?-Zr`ty({-~Q) zGOeTj4HPw0?AZ2bt-gEO`v5`a$3=O^cNTgMj?qS=?RNdP$Rd@0-Rrj_`)t$Ud)x9lKbtlhL-Pq<@eqFrbTwS+l3e?G5?Bev3>Dc8%d53T z>FDJs`9pn8JN-(f|Le1y;^P#YC_%Ia!jf3rR&4K)dE}buW*-W{K;0+HPp`CVWQ2W%=Z7^HG53FH;J12#+XDj8Y2TT18yuTxI__*I>i_ky^(>@;r*WTR8?2^ z3~KJ1|L61m?|b=tw7Z|Dx~8i7Im>g-?|04`XW#P;FIyS!tBAupLo?R+zh>EGEc+IS_o+}Zr1rS9Y2im0WA{_lW|$&bLTX44q$9x%Y*?krfd7+hR%VE z4QiP%P{wp!f3l&I4gaLUEkr^Y(>49^hR(r^4QZJ$SjKccpV-hzMskwXGGT~}=~|Y7 z8a~KUZkb>~OtZ;IvPHL(+swv2>s`i(P%#YvOSbPkSaR69l7TW_be!l;vy?~tEsZ3q*f0}_0;v@bL}gRYT)8+sHU9sW>Uhj*6i@Q30$yt7<~ zKNRZl&T<|8P^iN@%XRoep$_jX*WnL^I=r)7hd)%N!yhW?Z~)R{MTd_y8)04Us-82y zN%YDjw;=}_i4_fPGbCY%v9?R4mTkIOmfwDCLG-!`##ozxY~4X!`zLUCBof1F^;1{h zKi?$+kY?tx{e;gX;QE-z0q#y^9F`EQhGHcS8(aPohb0Kh732~S(x1cc=K6`oCbwn? z;S=L;%%kT5J#FAOIB5hjZ1NuppS{+HE}gKKr~FyS1|T#AqoK(CE1s40uRc`l&t?VDFhBw9`LIE`*nttA)n*8dX! z!ylAmJDx`{HDt{H_V|AYPT^AoMy8vYCKcshO9)vG>yrQN@pmvC`_}I`3J66|Pjjn( zCP#};%meN1f0n3z*4^OWBFP?gV%Jppr!y$u*p3q>fe1aBe>C5--Sz&55c`b#g8v#` zjO`xupTj|yRU#^7zyC1b;p$8NcnnXTbLs#70FNHL!JGZ9c*W{lZ?%*=pNGDvNiF;ENH+47wTsx31H zXz@KW6JfPw#=tBVnVAT%Ei($TxRf(Rh;12Fh{dNEjUd}H8se1>Mwo3GRd~gRIF_et zK-)5^;0n+ZHmZ`guZX3L*TWajPTm9 z?Os&8_SNInnKkzQQ1}Xi*9JCBSp)c_8`{p_+;#9guWFPKc^4^2`8s}#NCJP49H<2L zL2M!kTw9pA3Lymj+&?CWhZ4ebkwHW+=bfuESo29Q(-(_EiIv84W5U=)m`a7wR^e0L zhl(Ve4;4d%FObfH`?__53l5vaucH79p+Qsth+m5Vh+lG2{JAARiI zH<&qmoP3yKW=;ipfuN;iyaFwCv7n`7yaFvXQP5H{UV)bS2;&HDK1?xleii7WWULY` zC7M%lh=Y)8flHlQn}=kB+(u%((Hd^Vn%$c)FnSPc`SRF8*vxdJg=PpVT8}yceDOcz2lLWf_D^owYeJ{n- z4|p(9KgXg>jry4kR`Vv+J{1IpfBl#!ALVyNU}ia2sC@EXT9r=@LYEL23Xr;Tsg2gM zi_hZR0@ajY7(#;bnH(c92=A6rRL|rJ0)y~wnL+VPt{^Z7@0J+-GJ`HGJyi^h++aswcjJ(Jw+TEaxk% z`$Sy7ygR>ZD5^yFZ{m$x_z96-=|ry_ZS;z`6iESChuXz`^If$|(_7f%n7>Z1qH-{G z%wMAT&b;FS2gLTOPCmN}>$YGJRfmDQSSwy7&<1%`R1Y=X+6J%hI!NfeRdpXrrB_V9 zg(l<)Ea_BiV9Pk~*(AH4^%6`vrFsaYP|>Hv53%dL(r^sdd(}kDbAJh1B_Vb{`NG zk^eM%-(GAfVRcSZf$c*4(jMi!ROI?V68pV)~@j4BEsSEK>qZraLVrPGIHpD-T zVgOx&To{kT@Rzy}|1^pr9iw&{{!$l@H;rOQ$GDx6nc;#F|1^pr9V2&243QbcKaFBY zN9@j!ztn~Jr%?=PWj3jw0e`6r@lT@^(j|^3{G~3$KaEmImq?!Qm%0%DG)e)C3-=J> zvAYoeG)f^|qIu$9pm;;^Pgn3ftEis1SLL4+FZ+l{0p#5EB?X`q&mJ6%mwqA&VCY!G z@7%#BmH%4<`IpxU`PbS)H6$;4;CI6Rt;At(AvmY|g;${~y_rvJqidSgI1^J7#RuPu zuQXG)2I*e2-a`&wDwD$uPJY|swOt4EGkHWa*GlOnBWG+J0yz_rm4A5oEBdAR!PzU+ z#Kcv13o$`06HOcp*+_(<`2aYr5}h>I&#OOzX#PpgPK^!SJp3NbQ?Yqi6K5axuzC1A zCy#9&K5+!s+HLdj>oFqA|Ao!NK6V{yzn2)>+HLa?*!3Pa4<;TUHoW`hLGYrDP zf=^|x$IZh5eiP<;+&sK!=J*Y}Zyr{gxgIwUf=}g~J#HSZH*-C09vOx&D-S?fV&dJw!a?&x+yp30kt#Tl%Z7s7}qD4DJ`tqL6^U4YT@#u_qeZY&}AYaL(9+iE?AodkU z!>4HcGJw>qlpB9$l6Pz`K@PI77_@>-Mb`TYd8D1}EMByWhiBc5bCmx`WmT@GClchh zdW&8;R|Aa^2lC50`0esIV;Hl5LcK$IUX{G(h~0H5Ussj$;zv|0NhVG<9LSAf9f%Hc zi4`2kla0upNcR2WA87q$r9js5z9OvHe2Xr~kpIXhQ6mGt ztFL{J?N*RqQNG6VEY?~H zk%RwaxE<=h6H5GC*b+XhOPpKWW};CB2Vden{=)2|%=y5)3ZF~ZA`d)h&M0w7aqfe^ zYtQa4FmlmUNQ#I{byyl<{l98K2q}NS(>UWQJ~p=<$=lPe|cMORyA_dHfP`@EkW6D1u%|jQ3_V>f`S4`khS^Y1OVFX;_Qg&hjmZuL(p)BhP_C+<6pbu3k-dt?%bi}K@f~W{t;>6Z za2VIH*ymHD-AT4*y-O3^X(5Fteedzq;n4y@ImA7VKAKa=ulPY;xe0BtF86Axk~qav zYukBFVLm^&-;8?_$7Z-;g4$<&z})W&BI7ic2<|uMJ{;U{A^GRvesd{bZubw;v5k63 z+$oo=w<|q%YW!nf5nnfi$Fpt)XloTxt#by1Xxq8l1RSq5h`NE}4-l7&!0}EBcHfdw zK-CO7{{9mYgAzL4$bV0G+Z+VRocC3Vo$$a*JQeW(C}ur}i$0c}IhBLk=k|z?f7DuX zC(yqVx)#P{vH~2xKLE#1M+=7Fco}0qHa!Bzci6?Tsj=45=W*`ERqP2I53@jlv}>uU zlrK&J9Pd=+-OZ3y3T(EPUK9aook31&r`7Q999N(_gpec)bsO`kDTCf0IKI|@2NZ}xi&8NXWc{nhd& zfYDMoC?v5MyR)C_%au6VT=Ncaw3`GNKLO(8;Sr7&5EpnByJ5RfS+edUS@*H?ym7bi zPH?m~>3m5`H)oSi0R#AN4y1kakU-igB;WBAl)<8_Wj-3LP)y{DM-)=4=l+ESqu}_G z|D6{+yHn&BoMS-ohTr^Y63AbYsB;;8`BpabN?%Sdzee2B#HK^z-2?ve{VWnKOyYQg zb^ivn+%5t_;(eZ41%NksqqXJJ4l>!ksFJ_jYZ_PZHyR{DvZk~#IHUbm(_vhNfw>EN z`BfbA&EmCVr*8?_%h4d=_*=3?RwtRuM+%AUCHnG-5<)E2iFl6SEs1z`Bo%P*kcTK-wWh5yJtVy+?jZ49^}An8B6B z3Cy6|-FJ|}pD4_I(Iz{9v#-u1Ux1>L^#vqJu*yq#E7%;no9t7$z_43B#&a{W zKgG!YW~slvlmaZuAT0=sREP@0I1W}@Ap6hcm9aJuhrcJ;FEQ4PhjR`@0%Mg$A@q-1 z<(NVU$Ssdib||#U2ggQ0#``&@DU(7_r6iLrH9NNnOkjUA3xT_&m@S5V*;Uu%@9Kr;I3WNnS1R9#iaiEv_`zPYBqbCrJvgOSb-)(sez=U5maW8uo^Nm2f76FQR)(L1OmR3&B|08tZ}$)+H)t zh172d%0CztrR5(eR~{68c>aN*9491_0%ZN5`U4Q;=d-C!Ygv|WYxRfrk?0MoKRDjB z-YwY#?$KG8c1FO`P3zN=m7)(f8AQ&BW&$YPw5pb@RD8I}z;Onc36ONt`nF`NWWr!^ z_HqTB3LxFIel6L)GGWqU&zK2tbkq8`Wc$g4LE$`PCVIj2HY$+#UF$h?9IBqfGZ7)gPHxO5Hb(UvHp&)6p!2ft)p`#7{VmYp zHO{cOERGc{&r&^yLJIE2vvZE1fY^Mxni!kkc-9A4nr<_FCv(Y7W*6L#v^9a1ph^Sp za)}P)4WB}Lk>mX5-O1Fw>)e0t{v0odG;fv^ z4I+SJHT({0X^b2$g{zYXX+D?Y@a69aL)^YdnfW{r6lb`#HU6}0U>}!dCShBa zBK3f_hy2hi``YSgU%Mx;pD&qx?HV}d=Xqz{iX$&j>zGIVyq(&ENB#ZKeg+=(g;lLo z2jpK^c%saszOcHLx_+_QGLQPgL9KvVqFEt`1|Ic=HLVkCVlyR=`of{D6XO*cN*?uv zBU&fM3pA8G>I;u;op@~QYyZtW>I|%i<+|ZI+9?jm zr=Fer7gmJ-2FECa5Lk7{AbgR+b(x4l2zd|=%A-Oa6dMpIf1lDn?1Qrc-f5r_pf&!{ zj5eNH*3P$;MOZyT6sxcZr-6jP0^s6UjpwOK7Y5-pP!MVbZZ%e5teGLTIt>(rnt@x5 z88F3tggrP76olG=Ta6tMVikXbwCXfa5NZf+HHKh^nIWk<4HSf0g6|v7$vQJbN_842 z2uuOS&X|HN*{m~NecfPS*eV@}+XLYTu8w#m6u^$^`v^Z!gH0i;il$+EGA@OE zHmNz-EQFFxnZ&bMfk>=nt77cHyYd5Xr}9S$A&D2GZk2Ucy}%Rwi=c|+Q?%|S)H;8d zFyZTEPj@*bMi$_IOl8l3ZE%Vd<0&Nf8|%;oN(dJTZL_=}ZwS$t>!9bh*^0Ij$G$SG zGe<`s6Q{`+Yik1|5rk<akf2GG=OnDz#XVh(TwDiF4z;1-aeOAYc`^Yxz1kMsw_la%8 zG$vp*71`0GsnNpd7AS_c^ zSB|KR)EFo$8?yTU?U2l;%Zvw$;+86;rL3KK+ZDPMUKhmoYyk@;^2r|0gYD=TTS)xzDH#}Sg5(F-$hb;8^U-Oi3dDKxS`G$AF4#JsC&7vU_TinEM zRS)Om02eEyYB%kjQHP6yi9dMrt%fBFt3k3f%c53I@p~6W=P%#_X|LTyNKr z{@U#ryxCL2Vjtp$jgTWG>+iq3O}@6ye``JGglc*mVlAInJ}z`vN;0;{9~t4Fuz}B> zgGMYxq$q!SL>Q4W_hBMGhZFfR6GVQ@jnvFJjEK|`+4{rh_NV?z{mc9nHc-4hjkmhK zHU4wJe+&>oRzf{eA0deJ2&yUT-K6|04fP0odf)ST_i4!GIQ>tC-u_O!eLB{9=i}@j z5NH3%%$Y;!d05X0gls;Qz%X2Mthbg(uo^#tvp{(S2DCha9o9!UO2-NGEYkW2j2jPM z5Gxc&U|b6%FmC+&*L0jP&mygmz_{`5H|RJ~o<&+Bf$_2$35*9d5^gW6k-&IRBjI-A z*NZl8=p@9mD5#NeyL$CfBZ0A?M#Ak;jReMm8VR>YH4+#LY9!pQ{=C#kU@WMSaC=lE zfw7=Q!tG&nXAw0LZVziD`XHzS_PyCfMm7YXq5EKHX~s)y$y*uG9#cM^z(w!X{Vy zR|Qf%NBO95PA6^Gm38B+bmyIZ9~DMwNd+PZ6xeV@cVC6lb} zzqdI1UUc6?P`o+RT^edzf>;K+mdLRAVDYz zx=a0=>51h-{C|NYEoNf(qp~h5N`u^m$7P#(HjewWv+o6pIz8F&iqv!(6NF_%Q3D{! zNZxA0{t%KR{|h#n4e$6b}(Szg-vHQP#)eMXr7|aYiLf%xYXW_s1Tn0z$F_#vzTqJcs z+--u2e2upDo7@BLwj>omwrZ=_#s(ZZ(c|w?|D*9)v!b6~WgMY*9y1!(6uk*5jwd)* z)>|wpS2S(GU0YJN;(U#8Xq(ne-JZ#Wwd`@Wc%pA#<`sP_zjIJ*JXq5em2QGcO}eHl z3f%53XRcf{6oMTwg`Vr#mh z!p$AQnyx5tb4ReIE9%?a5v=Ko@-}w_Yr2!zV^mx`RAQuk%Qf5j$oFtopp?%Wx>GKxyI`bYnX8LfaW$eN8-)9(Px_^9Jc6+kMoZ0=id#FEze}OJ?5frWTGIbFZe9w)j7m zLN4wW|5{$@EaAUKGLSRwmou7C+kM<`V&e!33%Aip-Nu~U1o=4bl!yZ>fd!U+ny8CP4@+5S>yNU<+n1$T!& zu5ER1wOK2=@LMGdvB+9>K!Qy(AIrEq%A2=l5-({19^1=Q;i-%pXoJu37J()LM40y$ zLEpa`P4=xv_&z5yOmkI{wex^xwygex6{(J2Vu0>wcyi(u&JGB#dLs-pP z@hy&>-A6X5nc3%?&1vzhTKIs?ub9S$17``;y&ajWkv#{pbH;sNQn0i`eE{kSW(ZlG ztJ_%SPWun$cpd#0^E&c%ULTUj)}A!`%h`v^AIl|>clS%ZiesqZrqK9Qk_I%#$yKd$ ziLg9OSJvrtWzA4lD*5N;-C*ALgZnL@_`jN%{|74DQzceH_jJa5+G%))WaJ;D$gp=! zSzFc_W8~-Y%9%KSXIs{Rr*K|j@E%36A*iXPia!u|1*O1PRPo309yDIiiDn`y_``(p zfdr+%H`u*~ZCM{Q9*~#>CZcjbe8c!Zf>K~2s`kS~38lb9RP2WdQz+yY<{MG1A0|wd z5YJ3RrGA*umSo@LG*Oiw29>irlfkIS4})6cXA*-^jUNWJ#7~OBsKgJ0O4zMsFsksw zpwAg1Vw(J7w92@GsH*M+{m#ru@zB2 z*3T;SU-Tgi62zA z3fcEZ5~(tADyK*-l*HqKKnwSx#=2oQzg8sGHzVT8q3uzq-9H90{fxC@9Y=;TeXh!M z-Dbp@=GS6U2dBO$61|f@F^Z>g#?CJo>VtbhD9MJLvx9NwM<2uCypBA9*FUKwk3p|b z@&@$*U~o#NI3hE=*eT*_3kE5-|bA*En7v~LaEO_h$<>G8{k}ovxLXZ!bR;*t{ zj!~wj$_gUv>O7x}h%OUW%K@PxY2VeLtzvbo zsT?H<4$)Vx%>j8@V=ZZ7TPBoesb*j`eUIdWlrA9oE7i_|j?~wGNK{{W#S&-VcEXEc zxuiq1T)mtxD*ceB#b1$@t67th&r8VyNy#%x%hjw&$-}-kDo;}K%+OdaYf|#e7@ZgJ znQ6J2H7R*!jM5Wh$aiQemo+JQW{lR`VP3n3N55CI0_FW>c75eXxeCEHazv`@7(P@o5VV?1O^jG~G ziCq)V3*4Xw@KYS5xrA)S|1h0ZE5%z~l28G-FS7S*R&l@dbA&LhyFRJT$p`q5bKgep z$4E0rp|a5r*2uiYTwLbSf}-K-85Rwfmahg3V?$(%6O3_1+sEEmIAnj-nEZbk@ihEm z>AM{DS6v}s26UiLD-HUq!ZfDwvhs^ZLA;0*L0FOGaL)1%@2`3_F?bbj>CM5?$C(MZ z#q4JOr@ty`kGcPl{;Ig8rVpePt7jD=&;hlW4UF`GM9z`=u)ivwIHKI0`NC&(IR^aV znS2s){*`&{`#WA`e^uts9D-k*lYYtF`NfCmuX>Sekb3T~`lrP~tGKG#_WtV6QyQrF zqgvVP{Im1XV@Hoc1z1ZT9VLq3Vc8pfHqJQCu;W?W)-&Jume3EPs*m)P9K~La`xAOn za&4@Zp!ctP_#51el>U=yf0PML(26mzjEZYyJ3y-{EaP-U$noawZAp}>fM$-5wggcn zFU}RSi}5mo+KT*umJyu77gcm-1a?u{VYS%OiJa1(=LTkx!9FeYNOZh=j8!~2u!>An zwb)Xv=N@Ae4>uF=^6kDYwiN5R$JoRYFW>IhVoR-_dyGlkCU;Kh55CdA#g$ki7fKRKe-{YjTJ|Lxy-@A|MbEr|U>?M2HbA6Az_8TATi}@3K=(YuYQ+MLT zYW>eeDr#d+Aqn<>X~TCy&HNM$P%KFq4wjN{2MHb8z1AAxl_> zX`r=c4y_`XWNz+XRIb=SM}1T0a}`QFjQXZV*MEq9JJkliQZn268%WZOA60r~O^>?n z)XUCotiPD6ujC&F(3Q&msS9NL5cE%Vl49tUiR8}xPTDXKV}sN>g@M?|)&{D%#4{xZ z;@!B##j&;^Sp*{8W8Irlx z>WPL_A_5Or$jTwRWGy`Wy|8ZI=h5+0N&E9lhb>e`1uaxZNl@p@cG< zO+25VTX($l|6%{s|7ZJS2?ZGWG4e{FLgZEIV*J}xC3*FUCYH;q7UYn_t~Q5_5V2m( zVFbH-?5C$p_q?%NBv)` zv5HU?DZTRi#^o3s1_4vYI;no&Sg8xlTs&(Ba@ZKEdNUVK+c9Ts)v;zSp5tK7m@6up z%HIQ29qXj}ePgly!jfh#p1I40z-rmwF&9tWF=x^o|6%6hxjW`eo`V{y^1XQSjyX+q zz`{8I#5&eV)qt!oVH}WktdpvNSv!mavyOFAH9+gJjK`B5oL`e2WHJDo@~M>U2>h9V zg)=If+^RVbfcclPY$&=KczX!1;H^j5?q4;bF>11xA4)v+uO@T%$tmS59QiD}o{^uD zH)QgT2?mBukIq_2yDT65j__~T|5O03voXN6_EV+X&(1^lQ{6yt-t6bz zyPqmh5yLE4No*%qJcZt;Q9srD3C@Q+T{)ivGP4G}v37mDLUEx|*kZM5AtzP9a>)Z3 zmkN4&5Q{Zb@jPjgm+435k&+D>Bl#kYp7^!sAvX(iLInf5t{zUR-TW^3B6XsrFL*1i z_jvHyTZGR;gwgx~HDt!E@GiufU5GW?O#}^$xcC`k{cBlka-9)g`%0Q-?{T*@?;>tF z_v7sF{$?%Nh7SwiDnVOq{xo6jRIAl=Gr^$EhVgTNE@F z6}u3&4*_%g%sOl77x=d0U6E)J)J}lfUPLo+V3!+bxx=l7e*qm{D1M2bNAh2aQZ?@t4e8wCH-^ZcO#rFJ}m&EE^thb^2WD<{nh{<^4tMZ9eHpN4m+hB-g z`V+odYc1)+z43JA_N=B4sD(RkFMuE`vpmsCj~o6)M4<0Ls*TXx&B5!(%@LpO(OEcl)+I)~|Jlp#y>AZr1g#RW3HTkCX9nytD3dA14vC zCFl=M|3~_RH`B58XCW2nZqqBSLrLe@eTg zN~hNSrc*0-O{Z4aA<35X^3(nE6>BNtvDQfJslb!+#V_&SfI{lAxi7O~3?P&I5m`5xSdJ<8wGTv6?i~5ZzM0){2reL~E=izvPStSKXJtYjD+tUc$9FWIc>( z`;Us+j>1TR@b>76{#b?gI{sgh-}8{)b?&BSANkD>=_g$vxss7`B~nQuall@#YE{3Kw@J4qq>8y__v_^1>yiU#9s`I3tYTmD6&VS$VKBySJNmN#zd9(J=mxT&c? zv?DilgE>yw^7N{9QkNpyN8%dvIhG1-bSK(ljZXpv(8da}MFw zojilL35OfFbWukJsgg z?D4wX$aoJ0G?u?>kJsh#evnV_Tl{BO#^ylK4>BsCQLjF%u75FtkzF>VjWWBuUJp&f zH;?)yj+K6py|bx4rXM8VuIL9@ul*o<&yquEp0ZjQ@qs^V(AU}zGF#aX@?o$Cr41#Z zXT_Qk*)@E43C;SK03I;@!N&Q}Hy#znmTY-*V7F`uB@3Gui)vb~-;JXYZ@KOy_6OI2 z?@{9OPQ?E2FSGwWntlkq*r4`H%j~}Djb6h^hMT_Y9eJ0g>ub4`$jE;aBfplwFLqvy z{M8uw`q^8%8Tpgd$fvBO-{srdb^Q|L23poaW8k0C&Fb|Ca;`X=&8nDxx~@}AW39FH ztAQ4X4E$`4D-^NzV&L62ilG$fOx@UtQy$j?ndFYZ#2ahg&uaRx%6w?e`&HJ=nTmRe zta(eBH4mDvoBiqnE)O?1wB}~N$_Dm*>{s7s|8?M##-2wF*r{cNJ+ElM&fcg6dtO;A zr)19q(%JuCsl9P~-ec$WFP6)DVAbcGmoH|GMPE1fH7SG8(fAq54N}Dp!_PWAQyh><6?z#u0)IveQH-5)B*={c&=GqJ+ZhxcP-(zKp^_O~Hu5ag-i`376-gB$Kgo1_#f> zYWxg-j9gRw94mSj5Fvum5%Ppq4hSAXGaYi*=hgZ47vVkXbs2cC;Lc5Ycg1G16(45i4u%8JNgponwe6Dmvfa!*UXeMyv&qH*UXeMyv)Q&*SE$=*Ag9wNY}R-1f(Hd zOKcz_UEgXV1L|)#9Eg*yZ&fHdq-%)@M5OCmH6j4%S|S1w>H1bhK0>;dctAwDzEy#b zkgg>f5RtBLRoo+_Yl#I!r0ZKX5)hECZ#97cGQ1i0HMJXT>xbcAn<&7Tu#umX3zF^p zX*1ITbY%BqyRX+BRKG}R*mm>l2Ix3O4jY~4FcaUC7{Da?#G7H$bhxYUU|z$xc8RB< zbvOKa*csZ-Pl?yyc()M-FnDl1|9jwgr-bXagx*klPOt+sMyxOE_g^&j zTp1Pz{EvXj%Xm`_@92Q3F!MDG88IbY>FVTbJWOLI7@t3z(lRd;s2&>jxtwW%kr6oi zD_Qow$~)37mqW2!(&ds^YS^50l-2lgUDPG|QOG_z-i$}|qmX?hT^2Y?L_Z4IM~c>I z=#1z`A^T`6!pZRw{U~G~J!HnoV1@LfJIxyZg_&R@67rAkG)vqw6EOnPow~w_Zp9f$ zcj^MC#!M&Zt&oCrr><{m%yfd@3OPu3>hh+>Oq_&tr><^l%ya_O3Ry^Z>f)9GSV(uu z;+9UW5E|6RPx3A}E|E<>VR+XA3;7U1-PV9qD&>y4LOV?>$D;K*gY+hpmQATH}w7$_)dsfYAJyg6&dqCHQ(DoFJ& z^M>DoMLSiqjigx6(WW|*EZV7>ZsbQXD*D7|)lSuPBNIkL3+|BfuxzJlx{(Q^paplx z1nYLHrW=_s`q@-Rl7%}}(~Z#2jCwAu+^L#wWTJBAPStcH6O}7>s-_#6h_BqKnr>t; zzH+B(x{<;7%AKm|Mh4?6cj}N9TUrbo`dqMbr)s*9!EohHjrenRuyXO{!$nJN5?Qq4 z6VyOD+N@kzu)tGy1PgYI7+0XGF>QR>uRjr6u%mw?pF}O+tHWJ=uMGxJJNrfk{Pn> zhx1Cp-2a#|NMkkChC$aO1Y|Ag;+%eeCGTCw`a=4<^;h*FxytafJIt%}R~2;ked3>$ zpzNEO#+mWYWLFYHlm99>dJad6J1E|!|9uF0;sT0;>EFf&c-H90xz!v8Aq zx)KijJiecCpZ4p-@_-?KSzOPMhp^3?1`VT zZaAMK1!O9}a!m|R0l4DbAQjct5})%6!kUCVq24*fjVmD)#|{54LMjrH=#}PZ(^$QN zM&fUjAQkvBGDxd~3P^=eZkV9eK?S5@h?(dPsrVa@h;Pv9paN3yXEV_qQnAKNbca;j zX(qZuDsD0pv^pqCltU`cX0RKiVhn>IPRk(`M>0?j zsYtUQDZ>}$1$Wc~o`UfZPXQ{)L_Y|2;DQ8r3K_*qef$hjc$bZS+Psb&`7!-GY&5T- z-?^6qIwW8xY6EE$JjEL5kXUEyssH3Z;52_1o}z>FLAYN#RR2_xA&Kc#u3t8`r!b<^h-bERtBiYokv*kczeP}G~v414TC1&aDUGs7OcP=TWUiJ4)KT_{6QTaAro zhJALS97!GYeJqqCse`_cg>ocy&>yN$j-(FyJ{HQ6)bxEUlp(3j`o&izyN)_D_%YrT zr1PVyvQq0uRd-4!(dLgRH$6o4o;5tsb=!${kk$|I)T4LsQDpk$I-~MVmsiQRzqh{o zJNrK#MGc#hzI*rnk3VPWi@xhA?{))(sP~_D!_ptb2QqoL(OCI--mO%x_7Hfmn*R^- zZ(PyW<%)XDzg;Qv^?#aw6F^r`t@=&Db{(o(waLF-D&aa{VpO6wk@x5FDPUr$Ao3pN z-zIWg947X6oNbf+D`sY{>|7m{G(F-Z3x0l{d%W( za)gTs^KaeoW*@zvgg48T@MeOWq0z*XVI{*W$%|bf`QQ*bgO3q(3$*@ z>O!Jf3gfc`_rZcCxCwOTbF$em(3yOqh5co|Xb}q`&fbb*bvp8?7Lzxl=7wyKH9n_m zR1h@y$QPG`XQW2@SpPbVMPS#%@?YMC$+_Vr6 zl-Qa{Zs_r*e!#X=ivO=XJgkB^d2hpNYx&`osG0BK%6d0QjE2^sxu?7VKzaUnGjo4M3>(YyY)W$Qk)ay)v5g{VYG(Vqzb*Z zrI_qheb2O|*b)}e1ugVKYJ=%Yp`jyBfirT6lm-?c!NJ9fN`b1&rGr_K*bvjzOjpOJ ze_*C1#KZI;rcD`LgK4>zZ%SUBsT!tgO5dFS&rC^TovEQr4UJ9Zm>MCG0B_0&rbfi3 zKFpM))|on%sbgbP^c$KoifPHMGc`)4TmjGs&_QeI_6(qzN)$o&LqXm4EdHrBWV?Dw z#GvqR)`;PGCSn-Wwm4Zb*4~{a*d3&GUJ%ieh@nW&s8XQY_P%PF#LnwyvOBSsy@Q}@ z%XgNTh74=akkDj#(2xlY8ZuEHG-N`9hD?+P4VloOArs|6Lnbt6 zNMWJ!pdk|)G-RSYXvl;H4Vfqp8Zx0lLncZ=Lk2Zy$Y3dG$e;!d87u`28PuR5gQcJ$ zgBmnsuoUiQP=kgHnxG*AfI3ZqA%ccdbzzi>n~}9rfcxhkV$+g*R)dE&)J}@Dnfet! zVnS*kBcMBB)vHKK1enlw5J}X~_sB+$i$dSSn)Fjw-*faej2lWJUX2?fycMse?R z4X~5axJ-9#Ua%R$er4R7xZ$&f#A>34#J*4ug8RxQo3n}ScB;p`)0*)Ql>YI zADWUwuN8=mW|t4}|EBS_*1%|?3hx#*R6Note#A*VEtNiZ`uhSfr_->L(hyYoTqIwj zvq!@`-dHQI4C;J-nNRIoBnCJdd6vN9U}EknH|2R>0REX&@36{Ul=l@LF==Hp@t%3# zZ=rZ^M1!L+H#lcPNdQ|~JTi5Z)hI<_WTak5689cCOU7D)F-iqmE0414kF>tC+FH3; ziV-I__$P3OdY#?!vgeA${4eEYKh8HbFFQj{(L-Jqe6Ni6ke4O;A~QYYWdnS64|&<% z<~u#)W!psk_L!G_!p!uLm;Jq&=^-zx%DjiXtkrm(`A+xT>{s~f-E*@SFxovgdk&-B zbF&n!?jbiznI$P0R?5vvzl-;kon3pv`^wJ#n!_R~9{C&jBnhm0b-1hVWxNJ{kJw)k zW0mKBTz+;mKdP?F_sGwV0cxekRrDW0Q4!>d^&c5e96v~KorG*k=HSOV^aLmee=i1{ z%z^()inWv_4KP?y(%>VK6F|m4jbVlA7AYmo4^NjVAprz`5g&}CCX{?zrGc7EMkM3mgeiS;i}OQdLS?Gz0q zXeywr9*nRd>sCp;zuKV;O!26?Rf`WG0gDzK=geFU>VEbrL9jOOKOVaBsKiDo0<+G` z^sWKj<$ays)tUK-<5iK;y_|dig^zfabbP}1qk(%q(YBO8+dk_j&E}+ab?{ zGg2gG(YVI-R%2dHRQyq`TuqFzdBX^X7e6fbP{!Eo)wq7%Molmvd(@4&lmmE~!pkhO z3)6Ycxqr4+oPj@VLV>gA1QjQ8Tr{;yMF0l3kV}V@EiLKB$p6N&^v}40!5|uOsi|)xM8E)XPK!PttX33adJaZ4@`BPxCW`1GV4g@m8ZR847nb zojcskv~`}(zJe8;OFpNaQ(r>Er?TFR#QZ-x(!^6rxB~3+Wf?D2BX}Kus+YUT1R!l` z*J(ID``RXxQ1j`i8|&Xw5n2u&kwli|*$A=So0kZlm{xM-3FssF-EroT5L(twt5IzE zGfaep_0RL3*zy#)A}1(PaXn)^pOH7~asD{_5BwohV<-0@?@XzRj|F;$__FPeDb=fZ zT;j`_)Y`Io6|Leoy3a=OWumCmtC0Az(A9SX_}`KBK5gn%$i8l@6vgL<+$+hX5%FZw z(}zeVaePfa0nBpsoMYhb<^^qj=|QKjU?xH$Z&=4?uk5X;<72n(er*)ZHT)h-&yu7@``IJ~A42tuefJ!1F{l65{!iz`P-W zZqB(I#rv%hz(@@NdR%D9Zpsl++?7<(Wv9*lfbibi4DWsPSNSB%{deYd*aN(p{cArhLfv`7@GfmJIhbd(FyzOVwwO$SOIaB5 z<4apiCcvdE4Egb;EhZD-QWl2%cq2=KOJM?8S{U-~fusSfm3qx*vSP!cMMAgEO8z0ug>YyIh!jKyu*2C&RY!>Ri zlRp&J!&=B-K!YD5Mao$ZA|YBoLd9o%C`T(qjwp&2$PpDuaKa8LM;{y^hGb_TMG1`>PXwN5K zc1MH)cQS!Of@JMCDgS7gLo0+a^M{leNQ1Z{X`nqu(jlfzU6MX`kJ#QHq?&{jW(qh_ zj(2rxpd$)F$uKR5iphv{3RqUVV_P{fd>}RRiS;+;i$_7R4C0|viHELV@VZoKBsH~g zAhqkQB@LWHDEcD=zcHrNF090KD7b&7pf7<^y7vZcVH|NH)7t*Q=n3H;9VJcc<<@fE z0v3r>jHLStp&mM~z&=P53|)$Wi-cHq9OULjw=Uq$2u0MID*Q{j|8zcX z_79uG0H`$bZ0y3@G>uf^Rs2UuEy$!9Fz5JgdxlwEb(WzeER054p|(2+ybRVmGoEu^PU_9nZe9OCb;5 zRS5P*&2ns$J(7F%+$pn9SN6~@;?v{iTlbzrj-y}kbhbmOk6TOsQ}U1Af6F#V5>;LG=3OUFLKW>+}gYw z^Lh0-WM=kL;+5|;bclvUe(P0!r&P-C0mG90ELW59t`nPXYKEYC$UC*-;u#9?LDN`Q z(iy;uxeOk6NE$K}V05iW@faT67+M)`3$;ehkXH8Q4LJ`0#fH zO|Zv)P8-~JY!_1PxL>>P#5jWM>?HkgS|@r#?+-=zdczT%&~uaR>m_LIcoV8yCzxbL zz$*HVEIIFb2|Y7AsC9zLWtisI@PMy39Ki|Qn`~ciID!+pH`%^^1epxZ*1gI0^@bxj zp?j0<3FI-ZFXIS4B=H91IO@yN5fBBxY2>)tpM@}L5SNxsDrr{Jze_{~yVmeSG1Mz3 z9;_b^BWML5+Mi}UJKlJ*WEYYpd&X)YdQHOcGO}b}p{L|-r*3yH_1C$_hB-e_*vVD? zk3?6L@C68$k$b-XDvvH#JQ)M#q~4Lx^6vIEf!xzIlZv7AO9#cBNwzNDy%Uj5QqYDR zqJNu2nN5B*)+aYT2ma78*;3aR(MbIuHPE|VIY@ablWBiAhARc`ohI5seb$VBb0se%9xmOXslFLI^%sE_IxP{|H zvZRYIQ6I)v*4y=;kd`!QYbAc6KF)&ip9+LOx<8)|yh^vjAFsz;$J6EKA^ag1MO}k6 z{x_+AX7qLt^BYt5r4P(= zl4@9Xfc?Gp{I%p9bQdUi7lVwNm>>*?nYJ2duxuEo!sNwZqbBwSRv)w$ILFLTVe(?I zQ4{;fjM+uhni(ogUJN#hmYvL)ZG^$Sze9z|i@`=s>?<>7AECy8#sbWMjhZO!e`9S0 zxB@CnUJN#BqBMOBx(fV}`(%bu^`!t9jK3YDK&o zgtkdv0SwKW^p)nWD*6g!WMyi?DxGzGyJ0&bzais3o=bG{2H8)(| z!npSu(pTq_a8|b5wSK|-WWrv4rk@cl>^|aO!$S8a>9#m*$Z4l~2D zo*XXgvR8O{f6i%HSF6pS3 zsT59~94_gom#Gv^og6OdsF$e}PNh?N^2@Mt?O48?J)-OzA>Bf^k6xrtvT8O(vGb%rDct%TPLWJ&)|Hj;-fm@93wlzW4B| z{;c>J@?{{1Nb@`j&doGqt+xa4u%4gOTR8pNaL zXOb7nxo`S6VqKzfVU+qGWX5rK`B@DEzUg1c5%T$XKC_WdOXj81pTQ{GH#x<0oW-_H zAL)``IjxuAAI7nOTyn1OCkO(E*Y_u$Rj-FerF-@AH+{J4;EkGhse8-+cRq;TaT;E) zw(eclj{_Wc|E#5}=AJzZO2NFr#bv!1JDYE(=M(?maKC({M*mm&BB8z3>*TZi!{Kxn z%lF$y;NO_9ahicxu|zL-u^i^KF0SE4{_(att?zoZE*=rQa~dA5rr)&Ujh7yrd!$@c z+X>trXlt3`ymhPiKYpxz!L;)o_f2Q!8}yNKyi-3K+)&$-rv<$OWED4CE56MiDc-1m z9nZ@9aj#wn4~Bmct&N?M1HUg9BW{0k>;1j?hF)~uTP8=(a&MB`3U0xh*Ae4tre3@< zX|5MI8pxG~HGT5Q)i^f9dfLW0sW;uBi|4e9L`!9lEO$>Eo-n&k&%D<8yy5uiWcz^DR;X|J{pjCf0b8q*`GY|bi zr*&EQ6RZK18~KxA{|25aDY{;46dE3?;(I)lp|x|5<_93_#mBO&7r#TMc&}W#Q(PuD zl5-Dci?_G43Ue5Dw;yxWoW_@!9x z&27CkrrL-27|xPi{CM4Z_l-<)vz>awnz#vjVY|Q%{-|>cs>-IQZg^ppwKNIM#x5?X zZpHh1hlrLf#Up#gj^wavvCktO>{Y|UC4BJ>@-xY`?kaZ|ifh;nRjS)wV0SoZS@W*m zvX{CHhS`A~C3&|lt4g3Yn1HHr8GTR=PzHY%p}+%lth|hR3)`BlWEH%QRW+$MuG}cK zC*8J&m)^D$YmzOgwz<=DGuO!J>sA$$?oPeGoz}#Sv`ugix5@I&J;Rx~nFGFCHf=Yo z=}i{}_wc#Hb2FdR>AL8~CaiW7i-}XQtV_Q?oAd!Jt%*`#i|0*b*}7$w{lONE59VC` z+3W}8OSzd3KPXzFFmn}Y((KapbmQ>zeX6K48_T3-8_DEyBK6=E<6|w|%JbFG9l!7V zfli8oqt=oi@MrS^nd!iNEfjB%Wmi~AYPFdODPPZ{w{G}nV&hRQ`vsgQS5(Dtt~cmd zyLgkVEve%#e{HN?R4rn=H^>V6gUD&Fw4AfyRoS~om?gk06BwRuTR0 zDD;tb?vD4n%Je{?swFE`a(`Eu9w_vcX6{T>rUwfBq?bDrmFa;(e`)2;L}hxQP%WL@ znW#(;6b_R{?o3ps2MPnEk2@3b^gv;tv~g!Jo*pO+k}mEH#?u3Z!P3N?!FYP0FhqK| zGZ;?~6f9}s&S01x5SGL5v`Vgaa5wY@(gUqHK3|hYqa6|}<{&MPD~U5HFU>k;F>}a2 z2kEuoAf+={!)26YKo?TQ>#%-^39o}Enb*G4^)WE;Y0}9aZ0fNuUl1c?-CUrh><@?ceI$MXYzEOXgK;0Nkl!84d;X4?PGd z@p=_dr{UmHQR?my$%BY+UJ?i=e}Fy8gg`paGot{^Cb2`Ih#xDjv_nCdK{HHZhcY21 zpRz+?27uWlb|@2K0xCNcW&oH?VuvyzCZRjb45Xw<>`*4eM0A~*0bn+X9m<55jQ-lp z05F@x4rM}2NF~6=-+`1gi5<#>l9Xy|2S(YUOel%zr5p>mY!W+^2_-pI>LsJ>Pzca* z-zunD3Z7ARC=*JO`XSCh;g3n|P{@9VqDtY9Nuj7RAsze{lBEGqZ&G>CjU**5dualx ze~MD#@)233wT*I-biFgC8yagkA4O27@i3{9+%M?uFrAMguRk%beScwIUtcF-kE@igO$cx&x7*!eCh=_;SHWir@_8Z%FvUweR zrFrdpmApp#10?1jZr{FRzkmBCa1Cn)7Q|VwT&k=!D@t00W0p8_X zYAV02zHDGBwR=S9%l2q0KgyRXMBl+wro~iliHp92sZ951DjiH^x<^y#U@Bq6U^+^{ zJYy;yOl7)9Q|VwT(>2UD5u(NsE^%5;yW(!o@wyO~M{Ql>|#$(q*R7DVfUj`!khvO(~g5ZG+UasXQ4B9;UKaU@A}HqnOG$=C$v? znAi7XDruTR;uR~2sl)*8&S5I8BVI4K&2Vt?iRK&;Jeg=KB*nMIV$3}b46f{vOc+|s zuoMl7P+yKqDahu)kmA;YCG$ThvK#56$atR1u!si+ROBZxp2lvfz-S~zHh?6Dj1Owv zaEa!gWjlDvMPzg|!KYxdSU<7ShOp#sZjrEf)8Pb13gvj`tugT6ZMKm@?^FKvknw{ZR zx-zF&FN=Hbm=f*?#Xu3k_kHCHXn2$cJbCwE+o+?15UI3R?E}NXF6u7KE~?{+Ny`=Q zmAxPZDhdM2{#xzj5=fEsK;IL&MYVWW*Ip{EMX_#E9C2{Bvb!G3=9a#!PU4NgaE zPE?3it~d=qi3+46brTeQE&hD{pTy7Qp`GFG;mp=u8xhlc)dWh=hKbXzV?wxK4j)GU zPL68cInH*E{Vwp7tVG~O{#pkKxZ<7jtr_G;FE>pI{}}x(GGtTQ&kpy)P9M^9dC8+X z#Syk!pYfW+J?D&ncADEkezz_dSp0;YI){!$hK*>v5pvHY3 zu0+ABx-|n-50bpKY$sbiVqjz4Hx_))N$f1RJKKLCu}Fz{W$T{z7q=6F=JP>~O>%HA z{~HWBUV}I*k@pceF~)Pb2IL+!IN40_qd3V&xy!5NH!(pfoYA0Nmj_gSCL0Nl0kJ;N2D#oaZG^{Subj)%w&0qC2B~s^%3KbTY-NpU7ey3k);g2X}~vU+)lf43>d)7e7HN z<6W;iBz^oFfaOS*pXYx&@k8xkV4i=*o1WkokPex|0m5J4Z5Rxhf$a{}(WF0%B@E ze<6lOZtM~bn`rpdze9dDxmg)=bgW`yCQrUcqf&}8BFAb}9HNZ#8^oZP{*-}N_IdTn z4jo~Pdu4f+AVCb%hpR61%>F0Bh}oV?LtX(O|KlQzCTan+_z|{P28nDC$z?%{8VxW; zK?^=|XcV*{@^IP6pSB}Z-qm44%AfI(;laLn?Yq~!zPAzidx948hKom59v9ojR*_-ra@N>+^?8qGIeE3vgbh_F(-4 z0Fh6#Eh@M>0_Zcz<3e($CXS`90O8r4CsF9@aA4J|ofO<)Ysp`r!$YA23i;XN(IHfT z$SxmFfJim3LbTSh3!eg^r+GoU=m&##EV!>2bahDwdfx>4I36qQKysTyP=^#pQ>rv$A7F@zZ>*_EI%4Z0h-mWSLyguq=|B zc@217qg!~7saeL=eNGMiTAgeU7D;5>+s|`}aLB=V=^YsacVQGgjH-Q8R8hTbZumKk>Ohy_3*pL4ff`2+bY z7_nXLKTsp!-$wuS!GAYR@wRB5~LKyvPDPZl)YA!UVaS$zzZZkde#W1IDq|= z#7tRf4lAuyDvhwx9B&3o>XK+l;jR&TY@Z;L*ecdOc6mAZDr1s?RCvo(Y>rAjVlDgq z2UyRzMycbhrML4QSI@g9fo1BIT*G-TvF^>(UZN62pA{nE4%nMXRkPgwR-;tjr~8T3 zbS-SjTycI?t|&D`_BeIxLe#92A}m-B6p`=c5>Ei~(0(EVw4Vse^$V|Y#~l>^DD+xz zd14*L*m0khM~S-KV>R>_8fK(`L`BTVdDFXid=t82Ox@&jvXEp+=M~F5#E}tyT+Tb| zhGPE=(90#e!ARJmQg+ExnBni|b3?PWyug+1Z3R=uzr_JU^>)$+0YX=$mrNbS#HFW_ z0q6!*{g<$r!w_@F7vLf@0LszB9DnIr11ncm;W$KO4sHe3Ao}uc9==2V^i?!qp{jJ;8{AzXb zO1l6#j|`;Q1NS5~^yXRhpFK=EKT z@`<;cREuLx+>`gF?=P_0o6beBa>dUFEA^SOmHMdFxQq2>R%$NwmbJ9NX$z_Uw3_S> zN@{yZK^5lud|k7w@AdSADx{jN#x@gGJsBzOoXTgh&S%# z9pWGKtQsy+)lkybBHT0bm^d(w4ji>Bjd0s;FRO87DBWj^#xDXyFVfSC9bny_l63F0 z8b@(uYJ#@7tDAT7t6Xq6(ydmrlT)a4PwQnZ`!*{pu~8-b@sfm((~~33;GU+4Y>Sz2 z04@gtohuF(R$;Ou`2CUTao;Tt!Pt#;ADLfY+TOYSyt~z2?Xi}9i<6p7-O|OpO|HxH zctxcliZlHFEGqfl6xpz?lTt&|xPiTtvoTsA!0F$71ow5H#3O?qYp&=WX%r=Fo5g_= z=zo$ZfgBG86XJHM4ww<>fEkevm?3{S&;c|44jnKN9Z((U0J>9^bO5M1qXf`9S+-{0 zpu2g89$@v^sgCj9xF4ViXnd%e;1;6^?5bAU>hf=KaEq!5ZZVp`u5P6tZfsID!7WA; z*n?VWY8y??pXc3TG=W{yY8y?Ur$iInVl;t0wAD76z)YO$-C{I>J)+e%n!rq)?A>BC zfqiVNZ8U+IKoi)byjxTg*hUj<3K9Angseh!OFGOw!A+|scp~`*MapkeO#oe0w1-`2p*S5D zz*VpSHam3(a)JVQ171jYG8p>Fb^b3nhkO&+G~YZ1*_Uq?ifO*NC12N4z&&gH4&SU> zFW-Fvm6TW~-~AS80My_NaAa(q>t+2(9khM(Q9~0^Lunk8vv5!f?9@*|{*9Z8CrnjP zxv@aol0=HT!N1*xG^iVVCN?s3gC)9>LsOMIDAHv6U9?cW>K;eDrW}>r9iYAi9ymdv zgw-f}^g`+>tLe>wqI)jqSDM_DXYnJZRbQ{`=2`UTQVk;qe+o1p8roitU%W-02Y&JK zCsw)^W2tQ=BA)J2_rW+6&i#B8KB@kZ?BL+pU=7gh%Q#tESoGFH&t&rcI6 zp`csfzj2KaNYxXWVHkfG;LyVOQ?(SRA%-F~gt9`JG~88PEYugPej^Fm+5jH7_g8|5{{U6IwH0@^CxySO5I zX>s`~b^WdoS7gufg#TkzK#~s>FT_c9v5^YA5Xbxc{ya3$rZ0__Refo&s@d4Z{AF5F z?L&*0Rm~nF)IBJU>lx1#ui?LH`g2*0pX9Ssw_gNbd=YU$*7G; z?7}YRr=L=CrDac6&q^YjbJ^MT&tn;V-kq`QInK!H=KX1J@IDIvF);dr9LDR&B(Gwg z2?^SNl&GfjApbLEHqLVTfKb-Pp$-L!-P8FSFG%1J9M6;mM`gSl#YSi7E;_JSXQ%3{ z#utYnCHTvftZ|>uxI2hl%a+VJ1#gZT8}$9r04#_uyVzScB*0AxC(p2!{Tc&}Z|^o= zdA^1(cU z(I2UJ1S3DJ&!=r1=n!|;{c`Um*0KgnB!EGZ?Cre!GMkT~62r_V*RbW3a#}T6Hk@z3 zoV>M|u$H~`oWR15caMfw@hsdRc|>CutTKDE)T0YlqGEa#6LzYqcHW&q90QDh6vwd9 z;G4xSb$6%>ne!HzFvb?{3!+~eyGt6tLW2r2!=s)GmG|o7O3FLYr5kwaSLPZdh9SM* zx+-EAL7e3N@MktVPAA%NI`Z_=1utuY7}E)2&|GcZEVrN4@Yj*DXg|kVUxucyP> z+h{ec!x-g@vj!20!Ro&1)a{ZEvW*A$`3=2$3+7)fwu!`qZtzi|8~n@7p(z?}HC;^P z3ZK(nJ{+GjRQBreSWWw+dhKt-wL|Ax1D zL9IjIa}DuZ!})-iJL+f>^DooznY;WQVg`ae znRz zAe#^!?5~8ql55xn{(NUb_nB7HZ6pHOfm+Loyz#%o|CEP19pPLjd6eooLyD)T#u{2B z;UuM1LI$<&J$+U%Ov4bvsvI+CkhOAby8iTeG!$6{LvEda6n9q2&l^cuh@`Bu8mf;G zN%;bj@;M}ByHodUF7;>j$85SwMhcFrk??LV+qD})IT>O#y^RzYmq-FMrh#%8pjm?G znXMU!D4s>=57~=5jGX+CAH)#6+2(1JRbD9sD>(KkA}3SiO&}*zD&>UOOt~kNYksLJ zB}q3UC;f~ggq+BZOdKKL{?-x5$(k%hbiAQI;GH-^|C_vbkB_3h7r$8&AVA0j1VoP) zT4T#rZApujRjV1?O?F`;K}9KArNvTgdo+fH1ZyLZkYu_YMcY%`o>qJ8>8YnZt;g1) z=xIv=gjTsr3fuIR8lig5n67Dq-LNZwA|20%|JzHxgn97 zfr`*_Lm@RMDMB?9-Q~H8P%9IjsHinw_fPWBp`&VkCf%A)xE-I&2+t<5IN_GTM`w!l zvgFf=^c-xSd&u#BIbPbUQXnsXpykrxUHC5OONEY@EnsRSGBv=|R>jnLf~k=O{xX=_ zs`bB$sZ-0QMgmOj@DAX$b!#=s=BGa0`&D?kd!NaC!n=;x-^xQ6hl`Z4w8oFU*s$M< z()g4zL#feijYVFynn!V-)HE=^Vo*a5Is7rr;kOz;rVE%aG0oq1A2#{HQe@lElgF}V z@4FA1bnnV&F#k;dg#~_(>#6mAuYJ2 zk|I{@KBQyO$kOM7Geb;d(>y!;7nNG`Z1<)Tmc%D&Jf%2M(d$s}_E4t7GLf=TjH~F( z7yIO*>pBEeAUE8n?4K|DvT^o}vSIZOInQ4hH&++#Ao-qZ9ou^Td2)1Vd1$H!qj|WzT%@WZiVxuP7zVy-tZx9 zz96yjk>Y^FxGDDr`WbWxk&R#A10XVPE7HAaq_w(u>iFzE?d4AVJWG{zBFEa6`~n%4 zOixHecBbf{vA1hk*5RmkoIs_4>dq0nz?<^&0703D0V57gX>xE(gkZ1tBCA= zZ}@Gf8-#B>XsUmNZzP=Oc>)u|!TnFjr7eDJZ^HpN$Mm2OdQ0@OWXVFSd7|(RTyf>X z6OLziN6gu8HGW3dGVCMj-e>s7>AIfbAFLY&g7L&PG7N-u!$IEA^$Z7L-LQ~tx}ISn zQP(j%Ol7-4Z zluLa2FZfw@ZrX51Lv z>m9OXtD3#Xr73{06X7eUM;U%H-S86}9m-N_3Dyw85BN#L8;7-zs?vjl7YXNT(`iOE6l|Z#C^tR`dkFu#gub6kE_0VJe+6X6_k2iSL*aA6hO= zUH@036ecKX_Lag#oFd+Y<{R1YzREv_ZnOTywj~#egsx2Ea4g-EfN@xjC0J>A78BP0 zY|3~R|H?FAsEv~A56NbOee|O@mQg;}o`T{chlPFgqqqBYu<$Y-gs;=>twg}s?p<2f z6O8q(hj?uF0iisd7)c;*FRp?Ny}5HO>8n9M4QtxIXyhfUd6G|V*BEl+0Zm1Z)yTL^ zh=&+vIVs9$lri@^hT5cAhIWfCH^n>v47t&)LCB3WOf3%pLvQ5!0icwp+?4VFFa(G9 z005Od<))GcN;DL=Rsj_9l$$~x0EXm#sQ|3na#P0xz|fr7McOC2+?4SEP@-F^<9o|Z z6%UI_b+>AV=yFrU!=jSiOl=TdZfbZ~RJyxV`$LzT5*`+n@Xpuv(B-Crhef44DtOAF zy!(Xmw1S5g6XY(aAjkgOsnmzWTt`1Xg47u~UI3*P&_5N@B0yE?UN;^&4yB14|1Nf- z6yl2SQRKMnEAf3#Hjv{t`U~S8@HZ&84Fq``MfyJB(Ov+;i_w|S7v$S(nQppQ3D0gg za9A9ZQ3qOlfy_5HII6zY*T;8+_k|9{B70NkK#gFM9W)g%J^8Sa{wi|qbv z14Z^8D%Uc|?$0(*WbesEc7L{kB709Rviq|Q6xn-nk^PYzWbesE_D6D%y(bshAIU-X z9%|My$o`0r>^<~D&mj9FKC<^vv6eyhM|@=OAySe-_D6hV@1Yrb2H79+k-dj5q|s6lfeODbVSn@b{jgg7d2<;mY0_$yf(noBaLGIB(MP(2cavI#oKldgac8l?Dt{1nDdN+rv^V@20xM0@pE{=9*yw&{9 z5N_wcH6nhLd^z^gXV{T5td)DOlXZ@V3Bsa>4u-UrB6vbtc_F;w`!Ecs$(x;U90 zP9|FFiptXMjQo|hgsnF2*=VRWe8ejxye8^JoK9#OVYHeb63ybjM9*mOSocC+Ay<{8 z1nCgi^=Oi0E3(*l#0E;7v(CQ;qd*kCz@v(3+z03Rbh;tVC$DK4v!G z+(aV06jxFIRe|`guIiUy^j*G~pIV^3yD5X=i<9%vFSX!jLJ!)dP$GAdTEJgTE#RRt z!uB7;^vHZWr6;Q$F7y0)$uG(~wI_>^UK=hf6VgNeWt3C|o#4J(XJXYEwW5AV)owQuAt4 zKL;R3J(WuHYEwQ3AV)ow>6g`}dX6zgITE`YiCt}q=K$nL>~17>wW*y0kR!3B%Dmc? z&H?Zxb~h5c+EmW5=u2#=F|Rg-b1eE2yBmpJZR+M&^d)vT61&=z&9Uf9Y$-6WHdS*h z1`@lPX+*xnrfQBUs77GJ&<6_av44WswMCKF#C43k9?g=UyGO9@xOTU;LfxT7* z_WOU#71-Un*E{6D<*y2Ca`!&MG!zY$-lF1cszDnaAh6>h%G2xHG^TP}SBQv-9Xcq& z`YePn7!=5AQ#R)tga=iSw?|1p#_00~(Hp@imJ|P^T4q*ASJLYX#&UBA^RZgx^Na(+ z=WUGfI}78H4NK08Grv;9$*EiVg_5J;4)4=k+4scG!_GU&ccp%n{{!Duhxa#Jkw!;u zFX(Ey5_% zKn_bj4#w0Qj{$%jmV6wRTyH!E0CGGA^~PhsVvfh4-gpdH%<&l18;=2tIUa+0<1t_{ z$74`$JO(TVEV&+*ygXw>;XIeBd2;sQu;X#cmBD{2Ldu=XREH52jb4^*(y4$_J#8@Q z&w`U)cd*xs<`DnPm`mr+l|8YdzO2i=L&E;TxOx6Yj>o`n&;$G3fa^ckV-SsW)Zj7T zSdHKrj{yzLlZ?;_SaR&Py~2}Yp%-J3HsQ%z(EC4%C*zaa7;Ui#HH5tXcp3j1QG{Ok z=dgF>Q!sW@;ZN`j+6cF6ixW7!_uW66L*JG|U-do#p(PsLRQ;Kx53A{HE+sj@Q>}(E zY#PIfIu>hX9=lyTo#(tU|g<;s7|#DFe1p$QnqBkPvL;Bk0@p$ew&o4}uV`r!ip;I}Cj{bFJ? z)cFOt(XzO6R!P#?Y&HE-EH-I{w{l=By!)|j(^ro3 z%#`NVLph!Bd^-y#T>eng2k%XF$eBKPoqiuYT8e8QJj`$U;O(x(_eM12gYZrYYN!n! zle!^3zk`gZ2T_yLr;{TU4Y$WguBkZ6R8Hp-On&Ku_dZ8FIS{^faKnkg&LydF@gJ($ zdxg_Y3W2_xHfLx&onNxN2a7tl7asjU3iQp&LoYcqr_wg=PrIdQq)3oGjLwy>ilgA}AYYRvo`pGPYyRpUb#w?KLW$O(%3s58jug zv=$`OV@q<%bF9bk2IC*{rcf3zwswMF030LuO0AX^ixgRn?~xP@E+#0xKJ09+bPiJj zcprtomEq2)dy5qRB_pq5lT!HW^jgioBk>n~W-`TEZZdQz;T-I`SNn7N?yCF}DF-Rj zmJ-K0Pv83?+%5l{3wRVfMf8Z%7HGEfu##)T`h_{|E)AWV&rLGcq&4++h^?N*g!2-gH>a zWn_ZJB|YOx*&sgy@2({C;ezZ98ZW9V+~{?*XfaycCGy!w)8KHU-vKdd+}Q?#9_M?> zGp%Xz3`D%)M#BSQ6gf}svq9bAM#TeS8ZAl`7Kr%6jgAMzbXtV%3Iw_9hlPNcR*RCt z1VlXIM#}>ty%w#;doGIPy{ z|K!d!>!>|NzeVY_$bi}o(^O+iGPFzEE#@HuA@W9EBd<89gEl61re}bp`;o)p{ozDk zpGwVG=??En%-CnNiGZ?c@0XHcbM7*^j^O)eROD^HVz-Xl_|S|%5&GQ*boknhC3B_Y3sw<)ZRU8=)YiT&=U zUc{X`Jl=lM#iT4Vh*NS*#%{*rO&bYS$*a1il1~!whoCWrdv{652}L7(Me3|?#zh)U zkBLRbTPv?&TgY}$n05>omM||xho>;lNGd|D#-*51$;ei#=_w8*jEtlFF0}+pyG41F zAu0(pn#MgGXG&{~Pkd}i?UzFxb_>|#yer{qCPN*z8nz+j66tc-(e)HAOJeT^;gF_q zS&G77Of0@2a!ji+N;!3`bJSWf37tLQNnQy%;E`J=L*?z3u_ZyyZJ#MVxS5}ESBZ^g zt1nhY%UF-?;HqKN9XrS<{Ed8L9#cek89gV!c0Lj5Nt%1BrVIuQONihyztRg)>sNci z@O^v(pFgVX(~hjgT`P5;CKGq3%&kUt2Tjw1nlF=@)W(>ldrfXqhsjMMo2g?ODwgk= zZ8kZER|nHsw5Y*q`UMZ-HjBN;)WTpkiw|=YCN>|iU^0s-hPcyhHaUh@2Xk4>`WM}1 zlVf;wFqOru+ivrOPQ6Yrlf|ru-DZRY{o<>RqxmeU$mF}pdCDxeWbd!yB6u+{e;Eg!MILnM6I$aZmJ0wxKt?SwUO{xx+ zd2c64)r~@sre|?hs`j4|x*J~-UJ)V>!$@AD_7?k91uJ!@-B$CXMLfQ^MjE+PTt{#l z!K%%RO}j@;s2CtvWq<>RpF*&j_NbatVLT_u72_cJ0OaGGQwY`r1|o6h0fLnj0XgRs zf)(i@kW&a&(;ij4B>e?ziuS0-PZp{RSv^^((jHZ2Zx0Zvv`3ZM+XI9u?NMd+_5h(O z$rb&CYLX7WB2uw6RFsM%A?XyBBwZbINT%~il2pJdaRYIB#V`5dp`(&0dB^!SJ0ejX z^LO0+{9V;wo=RpU2^D6(;k3hSyvzU8BX0V?kf*=L*2?g=kCLa}ui-epkj%)(OQ4t> zm04J;_=>7vz*mc;SDV2bPYOKj-n&h%z~7x{i85l0lAfdD)U1+dV#Le|Y9pE`NqCsQ{q@kB6)UjyfZL7Hnrlqr4masvhGYWIG1R9Q(gh*0 zT7qT_jEt4XjnW)5Flakk0ts_~z>L})HZauYXbIXe2MEm2_b3B{zN00OF$W0DsLn^A zR(=l(kCvbzbAZ5%^8A8=Vgg-RkLSA@!=C1}aO z0f{pdUS>d$db9*p88{$yiT*QZKqTnqK8&H~7*XNgh z4))+ksRrmRYqRPS*+@?q^xaSK(8a9y;wfE-3bFm8T<)9v)MzFH7&4IQBs zc;i>F+Dz({ zlX#_!4k7KsA2(P<8JgiWTf53K4hwv&V-sSqI#kV)GBG6&)z@8a>J`@#C6N8}xiM*! zGJ$QQ3U5kYHWpQwl#%KDU+b&F5*Jogcr^zaRk+ru!kOL)l8o8-KF1N&O@!Vzs_>MO z+OLNW8&&u(SylKp;RiUkjcY*^VmM?uTJga^BhD>TJ`8YtGTdntN8opz>}<1E z6suw^-V(2f&4zXq;wdH69&emx@)LTEPJ9RjJ~uzXRM`ai2^pREKe?l%Yokv|`y8i7 zahS4WPwQ-g6b0#v0RKF>`+@3hASC**D8A3KnbQX4Rcen>n@t~-!IGz-`mj{o_(OyO zefYSh>Z1=AIs^4#X@u~D{>8_$f+h&6cl!EplhKD~1w9aanCin#MjxIPv_LTWYNq&j zR?q>#tY?akX9W!q%zCEycvjH=z^rGAk7ot#56n9H@T{Qt*zbPO8WbOAx*r_X?gvSN z+TrIYJ|66C7QHn`6Yf5RCVUsv6HnLD0tE|Aknl`d$hJQ)_^4{|*8(;8H4dTcL7d`a zVv?lfiw-M6S{Z)Xm;#E%9eUsU{HX*w%&NaYf13VdMn={eMfrOmk}ApR3KZqt$27(W8eb95zxOLjmoj#}SOxH6*e7$>DIe?>t6-zIU%X{RZqaP894IS4 zgnOtmJvyGgl#4F@b=Lv0du6B_uC_pH*eV?72O1*Ps$qMLDQDQpC&E!eODcTZRhjf^ z#t>%;p~T@=g-d`dh)Gb3JXeb#qdCN!JyzqFbU9aZz_Va9hiMARRU7~r#o?0*%GDbH z8NH!ULAh!Jpsd=U$<`UI0g%xec7Z!;7-W5S)(g4V44L?&*uF?R=XbmeB zl&drVQmx^3H4rjN1Iwy4+@KahMrmMKwT3b^5i&{x%c?bm)kerD4J@nHFh;co_HxyR z)+Ew3irnKn@kwC2d@?O<)QGCYQL9vE2qW()rK*adR}g<4s~+i#hT~c!p-;618Td9w z6^J}mZ4y-_Z(CFd*_V9mtv~iviNU&%Q&(k6L?Fn=Hqljdh!dhiY>DBA(kyS$AYLiZ zfoA09%ptVO9ZP<;(_zzTB(zpG&?#c!)@W$6=oPRC=@)EdS}?7AkiD+w7py||cr!U$vL3d0 zKO{ROM?ZNGz7Q}fDQt=*)3>0=*Hc;bidI&Q9mt;ktm!2|NpG7(B%xVKp-xCC)GHE^ zgm=~X5y^gxh2J+T9L91zKSaqoQK)Z2{O>H8PA?ncF0%_Nofk>iWZF34 z(mtu&=#ijpFYz{Sj@}%pu@w8uIpmpGWSh_!E7i$4a&z?0C!~wEC5a`cMJ$5=#ug59_9|swA;we01vRlE2Z8S=H`&CdWmO@fMjEqgV2NO+QxR)+gY? zBCV>t)u@T)yGb@FKW{Z3Wyu=^M+0Sg1b;fbU$O*KG#9*!Yp`Q3IEbqoKahQ0!Z|$q zS~IQe8HwyIKQ8||`{>GGl^=|o0cK8Ddf0OfDH2@sqhm!NRBtkvRQu`r5G?*bbQipjfamDi|u@L7P zE&L_9A&kO{R{ZKpvCW6XI7*CtS+0_WC=0SPPj)K&oocJG1XXP1j;G-MsKfukr4VyH zmF`l4Gu7`V+}r3#eA^L>K4IIq6sia`vD;ngY?YM>Bopg6qyl6hDlk39wznS4hu2t* zE97F4V@bDUbkZG5XM*3!4Mz$~tQC*4^^SE%8UBX@33u9HYjlXr+|LrbZXgH~J}OZH zqgBNldWTs}PwJUSpsNwN^y)g+5l{a_AN``KhuTn@x#NNG7;R^NKq*6PfncylI}{0FNOL zVFph@U3tzpB;RQ@Z(==Wt%e_Nx0m(wrS{X*BN5tSt#}MTzx!zxMS$ny+%YlCAO2nw zinUx z=?%YsD-HM}J8bKFZLxyqt;S!WGsGKkqk?7+u}xeiacnPjIt(`bij};Kt69yz08lBK z#V!0e-LmiiQ7y?YPO?^i)^4F!%qyq@0Py7;$3_Fdo$1CzYjq9w=AF_y${dr&F-&SS z$LNL}GniurTa6NT=Q{X`D5dm|(G58!k7G#tUu2FM!ZAaFV{}7~!ScM5h{sHG%utSD zj=lLU-H>C3aLf>^@d9%UgW--33y#qZIc6xw5PFpXr`!*k+;Qp_%yo1_jv2-=G~0Yl zaL%n6&N0J-V{}7~Dd3m_tMSj~m=PQ^A~;4j34qd?fIZsT+Zh0zN8$>xRG!ffuGO16~B&3gAVuA@EVaM=ky*;2D^1 z2&@QL5%DbYl|a^Hcvod;ORRLWjQ!;7$))cnTHnkU|7HGX(Rg70et?7!Jnou?XtWyl^A-%9qBTs%{}%ZFg#SRa zLQT`5%_Gs4tNRuo^!~`{=J@{b=LBAJ(EF)gp0=g*Qxm0ZVggFzCR*RlgIm3ahZIZ3 z^hxLTo#+%1t7KXoUHrD(da=a%?^~=_(z#&8KM8MhwsoGi=0iMAuZH({^8iVr z%0!V6lf3Uh`YK<%3ILto;J5+vLM!K+gs0Gv+1FOOUwk({e{*vF4rHFl30hz!LQ-r$ z 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%0DaR$g00UQ0nUCpF>`$e}PYP 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 +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventHist.C b/RunRoot/MesonexEventHist.C new file mode 100644 index 0000000..12d43d9 --- /dev/null +++ b/RunRoot/MesonexEventHist.C @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEventHist(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Fill(p4.P(),p4.Theta()*TMath::RadToDeg()); + + float time=event.getTime(); + event.getPCAL(); + float PCalTime=event.calorimeter().getTime(); + float tdiff=time-PCalTime; + if(tdiff!=0)htdiff->Fill(tdiff); + } + + counter++; + if(counter==1E7) break; + } + hPth->Write(); + htdiff->Write(); + delete outFile; + + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventTree.C b/RunRoot/MesonexEventTree.C new file mode 100644 index 0000000..1ee1ddb --- /dev/null +++ b/RunRoot/MesonexEventTree.C @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/README b/RunRoot/README new file mode 100644 index 0000000..f3c8d16 --- /dev/null +++ b/RunRoot/README @@ -0,0 +1,8 @@ +setenv CLAS12TOOL XXX/Clas12Tool +alias clas12root root -l $CLAS12TOOL/RunRoot/importToROOT.C + +e.g. run with + +clas12root MesonexEvent.C+ --in=a/hipo/file.hipo + +clas12root MesonexEventHist.C+ --in=a/hipo/file.hipo \ No newline at end of file diff --git a/RunRoot/importToROOT.C b/RunRoot/importToROOT.C new file mode 100644 index 0000000..f046a81 --- /dev/null +++ b/RunRoot/importToROOT.C @@ -0,0 +1,45 @@ +{ + if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ + cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.a")==-1){ + //Found liblz4 in LD_LIBRARY_PATH + gROOT->ProcessLine("#define __LZ4__"); + gSystem->AddIncludePath("-D__LZ4__"); + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Lz4/lib"); + } + else{ + printf("\n >>>>> LZ4 compression is not supported."); + printf("\n >>>>> check if libz4 is installed on your system."); + printf("\n >>>>> and included in LD_LIBRARY_PATH"); + } + + //Hipo + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Hipo"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/utils.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/dictionary.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/node.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/record.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/reader.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+"); + + //Clas12Banks + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); + // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + + +} From 1e037697d5beb8e3f8af02c68d3c72c9dacffc6d Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:22:05 +0000 Subject: [PATCH 02/56] correct particle status and charge --- Banks/mesonex_event.cpp | 31 +++++++++++++++++++------------ Banks/mesonex_event.h | 19 ++++++++++++++----- Banks/particle.h | 8 ++++---- Banks/particle_detector.h | 1 + 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Banks/mesonex_event.cpp b/Banks/mesonex_event.cpp index ed0867d..803fd25 100644 --- a/Banks/mesonex_event.cpp +++ b/Banks/mesonex_event.cpp @@ -62,22 +62,29 @@ namespace clas12 { //if CTOF save preference CTOF then CND void mesonex_event::checkTof(){ _ptof=-1;//particle tof index - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1) + _isFTOF=false; + _isCTOF=false; + _isCND=false; + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1){ + _isCTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1){ + _isCND=true; return; - + } } //////////////////////////////////////////////////////////////// @@ -95,7 +102,7 @@ namespace clas12 { ////////////////////////////////////////////////////////////////// ///Use PCAL for time, path, sector,... void mesonex_event::checkCalorimeter(){ - getPCAL(); + getPCAL(); } }//namespace clas12 diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index fba4d64..7b9ed1a 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -83,7 +83,11 @@ namespace clas12 { const int getNParticles(){return _particles.getSize();} bool isFT(){return _pftcal!=-1;} - + bool isFTOF(){return _isFTOF;}; + bool isCTOF(){return _isFTOF;}; + bool isCND(){return _isFTOF;}; + bool isECAL(){return (getCalTotEnergy()!=0);}; + private: @@ -99,7 +103,10 @@ namespace clas12 { short _pftcal=0; short _pfthodo=0; short _pentry=0; - + bool _isFTOF=false; + bool _isCTOF=false; + bool _isCND=false; + }; inline double mesonex_event::getCalTotEnergy(){ if(_pftcal>-1) return _ft.getEnergy(); @@ -129,10 +136,12 @@ namespace clas12 { return _calorimeter.getTime(); } inline int mesonex_event::getSector(){ - if(_ptof>=0) + if(_track.getIndex()>-1) //use track first + return _track.getSector(); + if(_ptof>=0) //then FTOF return _tof.getSector(); - if(_pftcal>=0) - return 0; + if(_pftcal>=0) //then FT + return 0; //if no tof hit use EC time return _calorimeter.getSector(); } diff --git a/Banks/particle.h b/Banks/particle.h index 057ddfc..351d716 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -59,8 +59,8 @@ namespace clas12 { float getVx(int index) { return getFloat(vx_order,index);} float getVy(int index) { return getFloat(vy_order,index);} float getVz(int index) { return getFloat(vz_order,index);} - int getCharge(int index) { return getFloat(ch_order,index);} - int getStatus(int index) { return getFloat(st_order,index);} + int getCharge(int index) { return getInt(ch_order,index);} + int getStatus(int index) { return getInt(st_order,index);} int getPid() { return getInt(pid_order,_entry);} float getPx() { return getFloat(px_order,_entry);} @@ -69,8 +69,8 @@ namespace clas12 { float getVx() { return getFloat(vx_order,_entry);} float getVy() { return getFloat(vy_order,_entry);} float getVz() { return getFloat(vz_order,_entry);} - int getCharge() { return getFloat(ch_order,_entry);} - int getStatus() { return getFloat(st_order,_entry);} + int getCharge() { return getInt(ch_order,_entry);} + int getStatus() { return getInt(st_order,_entry);} void getVector3(int index, vector3 &vect){ vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), diff --git a/Banks/particle_detector.h b/Banks/particle_detector.h index d5b43bd..ddb37ab 100644 --- a/Banks/particle_detector.h +++ b/Banks/particle_detector.h @@ -64,6 +64,7 @@ namespace clas12 { int getPindex() { return getInt(_pindex_order,_index);} //given a detector (layer if exists) and pindex find the position in this bank + int getIndex() {return _index;} int getIndex(int pindex, int detector, int layer=0) { int key = (detector<<16)|(layer<<8)|pindex; if(_rmap.count(key)>0) { From 66eef9141c32009d857a81d75ec1bddb9afac4b4 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:43:46 +0000 Subject: [PATCH 03/56] get pointers --- Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 2042 bytes Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1858 bytes Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1869 bytes Banks/header_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1601 bytes Banks/mesonex_event.h | 8 ++++++++ Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 2860 bytes Banks/particle_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1740 bytes Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1934 bytes Banks/scintillator_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1867 bytes Banks/tracker_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1847 bytes 10 files changed, 8 insertions(+) create mode 100644 Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/header_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/particle_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/scintillator_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/tracker_cpp_ACLiC_dict_rdict.pcm diff --git a/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm b/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..9f28652edecc59c96b116d71bb2998757a045663 GIT binary patch literal 2042 zcmXTQ&o5zMcz=h1fgy!~f&CW{cLUk^K+Filt5~26AO&KbcpKpGcBSBpng1CX8S3}F zhX@lUpD}<8YK(i$dY>T`Y%7BYkHu6_THyW2Ent zn3r9wpPZPJUzC}fT9R56pIlH7@96B4=^USunOqWI1S0hcl5-iTVh95($c126GBDNv z9k>dJ!7gQBVB;s`edfa;U-GR7>vsqFlF+QdOn5<#-rih`Ij98=2>`pUSj{^DBs{xDasdf zD=whr2v^q?XF*Mtzy&8tg~i>Us2*<>`#Qmy-}TW2W~aRkJ3hPrkd$#~lK#UqBeFku zdt8h+U(%AB`Q_JspG~pZeUC%p2aBf%Lzf$GmkZ;Ef975r6U^rvTf6FF7UQkB=C-#S zdJ9x{rf@A--ZJ^Ju}O8zQ&FBjc*Rh^`)4&wEpEe zo0j6ew^s1N|JA%3+I}#bFc$PROD$N?c6Y(2pOXS}Z%m!_a)#N?-xt_!IM80y|W{l?*#-9yU^scpfUp}u>2?7aLAvk5U8uwM9`o556_u26mC z@hrFQC!1E!mAMzYJ2rm($u0ejY9XAW6XrZhS!6xwi0QG{Jxzsuh4Ts^`H6d_l~EkM+-vmVG+2@Y|wq3%@PqTOj9d+i2Bc)ne6S z)l?-^DpJZ*Dl_%T2LAKU7Cyi4yy?IH!iv9I$qRS=x$acQ|Jz}* zpWu^cmjwfyii8`ZKSpsMdF5sEF8tt*pCant1m1C|25-_bcC30Iz`MNuh-N&C?}hT2 zw+!n~ZLX@c_1MQF%h_qm^|M>yr&qhRj$z=5c(#+L?<#EV^N-F z*Tvsoj;XEJTGjeq`lB+CKDt}yNPkSAZnVf|ZAHuaGqYdFWiUP1lXLvnmD(?lvW zo!uX8(iYl$SCN19bdQbNMw>62ev5QX`*F)H8fKXkiP?tTEt%N)nufok3Zcl@~P&bH&GpR2HPBq^4obz77lw zq72O75{`ihs1q4PBAM*~Hain2jZ{3a$H%+omFALcurJtP7OG>YGV{{ygyQ2J^O94GfkFY!zJ7_hsl_~yLPwz_vm_@K;#6R<2Q0)G#lePwi)vuO z2Q-X|MK#bkpcPapErCW+8e>2sD2f=MeyW9kJ~$$|5Md9ljHw#-z$DH7tK4)70|2Nc B;w}IH literal 0 HcmV?d00001 diff --git a/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm b/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..af5a09a28fb55ab12b41f8632db52cb743721d06 GIT binary patch literal 1858 zcmXTQ&o5zMcz=h1fgy!~f!&FLf$b`goeRW_K)j3v$^cRz*2#Z-F>hB2zL;LY$jDH? z?>$7AF!_i9WKezFYt{!0$zYR#wlOfUhPY+sq&n)C=NDz`C+8#<8ye|5gQ<}G{2U{F zr^LMMV*TWd)S}e9?EJF$P}fw2nc zxMe^Lb|uiA(S*FtEDZ7?XAoGwJIIHOZXo@fA^u5OjzvX@m3;B>0Y&*G`5^xlrxpu4 z<|!nC#1-<>6!Md@Qj<%HqkK3HGcg2lGE^|G4U5edb`-IlxukURHYb-WAqOA1i+)^M zJL$pU0PQaev#yAAg>Ac?@>(y~?u6gcUsJ*lx=-Bq;{C_;4vil#>@QTSmtQu$y>4nn z!n>I}Hy6LVYd!g9hKRgUzYIqg@4-!McK?*FWbf^JdFS@mMI2A6xm~~M=sr+gTEjRa z=faaiO6TLYX@?y?@nJKD{6xrmyOOe>S@-&*t?Gy#Fxrc+@*tr^A)^ z*|&Axcg*C{^PKx^$*JZgtFF2|`2Odc-*Zv+-&ffAI_!JWrYWc2SKI%@_1}lw=m3+A z32%8PZl4*R^mE;HXb7oI2+*A1R$Fd))e7lV9iQ5VM(>debxccz%)@@V2_4e}=bV+4@eyABZdy$!M zui-AWZ%1WbA3gK$KWE?koUqy7zs4W5TAY1i`3?6u{^u_4P^fz)rHt)gixp9-_Y+Pz?+<1J3_s`D_xsQ&? z@!Gs!yuoFT;{C5a6Q)f!_R&f{HG4y;%eN^(Js&samo*#A-TUW}g-hEXZq0L2Q`pu; zR~ttDmfW7nbid*ygSJG{9)^i~cU)q8()U0^lJVM8-mCzr8JoYweBzZUw_mIKosZ*j z=6=8I)3IjzzRliJR+FFle6OPEO6SZ6v$k$NIm>7F@tjq6b}OV@c{=lj{l-(_YxYjK zqQBF9-bvp{qA4rpKVZMjap-7C;S=S9f<{mL3!W%Hp1D^;R-t3_d7cezO19<`|8W=m zN#7yTa@TL`uBThem$BdN_-Cw_%`43%*2^Z#@s4@Psl`B{0B2vn z#N5qgt^CGz@3~RmvWqQIy6P&3=FIxZkai$uKMNqMcMkvIf=!FM*7ZRDkMKY$4K8P zF)zDVKP|tgJh3RHBr!cbwJ1KhpdjAS*(cLEJ|#1`B)$kl>J=pCGEm7F23C+O!7gQB ztOGi79T0`Q~4C5U9PmMD-fX}0-DisS zfr{B;;?pa>?z*}0RlDH%Gy^g2=`Sw|ngm=m{p7jeqeWJIUq;%ZL`|vi%B@*da{n(3lLGD;f9ewZ+^z>$KP_BZG5Ka$ z{*x41L&E5L^-aW9o-x8?^6q zO1dAq-%`)i14@c9L|VP7Py0Qw`MN9mo^38HU&FaFV1^% z%X0TON2|P@r~EG7n=ogMW9Ealm+6x&S8l!2v*boK_fAhurFj!Ycb0fs>px~arCJbU zzdFV&(#q}JM6n++&i@r2R~N0V$os?k)ykL-V| zYEQr1JF}}jarfiWxh-?^l0O%#Uf22m=R$YTS&1`iHqQMhy*s7$H!$7Dfb+d1I5#+h zasx{YYHr|)j}NIVNKHvi!=!0uFDu+HWg|PdUn@(W>0IRZ^1^@s6 literal 0 HcmV?d00001 diff --git a/Banks/header_cpp_ACLiC_dict_rdict.pcm b/Banks/header_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..155b199fb8e8778937d7969c5702770302adc645 GIT binary patch literal 1601 zcmXTQ&o5zMcz=h1fgy!~fz6SDf%Q6&odv{l*HPG|~u*pE%fOdtrW#**X>6hmhW$P#BBo-SQ={tj|ko^1{BYmgD zyzFBAjMT)G)S~$0f`WKQXP->x_>|1#lK3JJsaKGk%Rs4q23C-}fcOT`hvh(LEdXM$ z`xqElfUd>wX(l<4-&p#=`rSc(V{`!N=M3>r%5p3!O049Ij}IuyFUbe_tT?q;*fCEb z5hSjVpQezXl$DxXQXJ*OagLFppM{}^$s)3Gzixni+>f~&h6w)m} zcaam<+9!*abI#&_=eNOTgV6tm-v932{~KGIT3h$Fo_lllsPCVQnu5=1>1EIFoqdzJ z<9fjaX2*?+64wsAWnZ{Wxa`rnTQlWd7u*mPxyfmDz`d)F`w741&MjwdMiwV+mOQ#g z>Tp2RjfHD%GY(v4tx|9NW5e}VZf%d0p6kBjk>?}6?OX8BM&*FvN82fEX)Yn1uD#0^ zt-9*=K%P}`zout{^rLRaNK3A3y`MtuxvJ*x;&tt;OkTcZ+r-!$lihQ(w!Yi$fAE5X zq=s$3|77!~LkV%3_fo&*vP7Jl)+d+Ef^ODhwt&Q+L*RS4Ay)`_0` z6*BQ_(}#Hl;Xj;yxc%^(VSPSpbLULY3%B}iS6W_k-*dgrXVU)LZ0{eMZj|b<7IN=9 z(Dth!Gp}=Xqw=|H*Z$tP&lUBxWRrEkl$8?JnZBpK9{T2}{^VzL#h*`my13^DO+Beem!Hl@Wl$4zBq4kjjG8l+-k=DFc|6L>ZXDS%!fLs1q4PBAM*~HhULP8Y$(m$H%+o zmFALcurJtP7O?1E$sdBAeopqRhN>JE8b^$Gqg!VxUlfv#(!bZfY?P zBt0vXWR~QlLYxZBQNaAcC=NCZn47?P3TPO0@;=ZGpy^b}gFvGwjVz!M6vYWpKh=Uh Z3mk`Bh+qd7?9>W&U^KEhmYYst007Mm659X( literal 0 HcmV?d00001 diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index 7b9ed1a..ec47b3a 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -80,6 +80,14 @@ namespace clas12 { clas12::forwardtagger &ft(){return _ft;} clas12::tracker &track(){return _track;} + clas12::particle *particles_ptr(){return &_particles;} + clas12::header *header_ptr(){ return &_header;} + clas12::calorimeter *calorimeter_ptr(){ return &_calorimeter;} + clas12::scintillator *tof_ptr(){return &_tof;} + clas12::cherenkov *cherenkov_ptr(){return &_cherenkov;} + clas12::forwardtagger *ft_ptr(){return &_ft;} + clas12::tracker *track_ptr(){return &_track;} + const int getNParticles(){return _particles.getSize();} bool isFT(){return _pftcal!=-1;} diff --git a/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm b/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..985fd53cb09eff22055cc37faff4152acd124d83 GIT binary patch literal 2860 zcmb`Jdo+|=AIG0Dxenu+OO(qYDm5>KgGMu%A%$`4q9adZ3{9B9jA3${NW?iuyuxXs zSe@t`XHU z7fGWr06_RV004mifG`IDg?~Wv2&luLUcTwe1RBJ%qx<~2=gL(1=NDlxAn}3lv-{8O zTR;p-_McS<1A--F=xYEV?c+oVCF4=iw8#(?DU?XJutYgZ1|J$N)Dm@&NDZN*!pL+Q zl^g?-nPe&hB!!2ASVvciBN#{_F~CT%-4jj<1HKXlkQPTNi4=e(KtYy6T@oz-$fN&k z3uG>eGu3I6talb?3Ue2)m-itAoW({)5?M$P^oXP}XyQESWV$+*YCshG4QN3Iw1Bf@ z5`%uyRnA%lXwv~=U~~CRG(EgV$N1bGVQPec9%{-=xN6MK^3u*Rs`M(;P{*68$SPVI zJ|10(>n(^B6^e2vZXD9{GR7#V{j6)eA#Em&zhIVx%Sw8PSJ2w=ea=JalnjkMMkzLX z$Lk8d0|jn}46)Qz zO&`(e=VaYGlQP+Ns2;md*f&qF)GK~<=$GThRyVV+=ASTo-q`lk>j9&x+N^5JOKg|m z0ovZWFm%tv-M%bmDVFhNXQR}FM}+SkQS7wqXD}e_c+2iK<8~7Q_JC3$ zY-_mMer124q?r;f(;%hUY|B+V*0M#L-D%I#JqK@qC&-RTC;C+LnmZ=!YK!vqE|z0* zdCtTRJM*bvL)4Lu#2ahbUFo8oALSmcSx?st5)-A2lywIO#xAVysFil`7I+!N$}65W%4+{T`FO-9QXl;WucJt-*@O!#XaAbMW2r>A1HF!j(O*-F13tkVHf?NDMg1^a z;Gev1QH$(l4`ni7=XCszxmscF+{FyCXqa&y*BOi~E|KZ;W>|efJ4Q`UmTkR$7)sXwMq?)ZAX%z=2yT^MH?nbEx9R<~55KB?D_H`f6hN z{EMcyQKJ;)Hgv7qymgk!?`|<%lem1BfxIYPCTkmRF8uRzRGSZvwvz;IcW|$lhJ|OvwHK6yweNb zlAbWDsab%%+lyfd%hJyy`%iVpr<(KJJ6G7Y(S!&5W9X(z4~3KJL&dlFn`9VL?U!q< zRl5yWG?(MtG(%DY8wa~PdS%D0+tYt_ zeQSYM!ey}jli!4YlmC0LeP^*P4m8xcZqEC$^JHR$I?aN)Q~x7%K_(@8Om4*PxiPp+AtPuW;|;lPOkGrOk||nQw!KLRb0TN4`>tWlOY_ z1(&AV?N=u(bLUlkdl8~iuLCym3)j+Q9&0jo`JG44vYvC*kVwxme(*Q_qqY499N*=2 zPS(8`Yq+v9tZdpElT)CyxpA4ut2EKmt4zpM&adG#-OkNy9VwI^eSNrxlb;`@MO!Kj zDtK~HdXQU_sbTwEX(KOV;GN&L{-(q0a$QdrZi7>;i&si0v2U5D3+HAivfC;CS-IZT zaCLlUE7G-PJomTB-pz>@wI@k`FI@=U9^o>SvIbudSS3Pw(<;$hwnT*-#VREG?7vk= z0R(+m;p9Ma(En8+3;@IdaEVX@QqW3q6W0R(1^`GKQ1ihN8ALHb?C}JoAZseITcP(P zZ^8ipQ2wmxc6LlM$-@Olhg_1TEk=Bqt016<3|i!V3YFpT#fN}KUr7o&k`ypvq+A~4 z{SP6P1wlMDD(sKq-~7Mve_;b|67VJo*hK=K7lV;s!k{xEDb!#GH4wy7Nn|<{nTMmB zI}s{E6hF(e0fWK_C4Z(t1p*}ZFf9p8QrJKx0tEZ2g$)FRKJry63kdaBuLgwpOGg8( d|7s@?AvsEgfA7Aec>T(|4_!Tkd9+my@Gtb)ZW;gp literal 0 HcmV?d00001 diff --git a/Banks/particle_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..1482042aa2c7f5fac6200d264ab632adaf5ea870 GIT binary patch literal 1740 zcmXTQ&o5zMcz=h1fgy!~f$ao4E6io zLxc&F4;VlO)y2JLy~&USHW_Fe0|RS_TV_tGgMN8_QMP_^PGYg4k-jsS3dzsUG17NR z%*!s;FGwsZ$xO~kjZZEph<9}M$#jlS$xJSZF9MNz1E{gbPs(yEDoU*6i;oW|$}h!MHSZfBt0$k$**gmn>L2!#WNyHFh?#niZd6@s;{)6)`7=qZ@fI#KPy`Sd{OI5o5cz)kk zUjE*0{`~jzOs~lua^`Ija+bJu;P`!)dh5PRFFqztP$6!4t>om|KCL;*WTANeeEyna2ODqxUaY|RdHUU^M@M9n*GHFb z{`f7!rn_pdqd_faBb(KMU)Rq{f6+T^Z@+$u%gi0sm0jET=K1xjsjZgP*sB#Uwe`DM z`0N-x3sbQlNk7kgGCzG^_y2}Jmp`rV@y&X9ZH6-Q^qcG6-ru?>yE3gZ@8^+E>8F)6 z^40GLn@H#QZZkEzXcj+xj{S^%-Q{N%{%^_D`yvp5Ui$H_Vq#dZ0124C`U3!Edi_DJ>u_W6E$zbI>5dFCA{>EE`vKuF|R z<=3Sp2d6PV-aO-``0X1L3lGZg-ln(`m=t5c8Bh|OK%GGel=&%Y0_BR252-9jO-W6| znm8R87(^ME!8wxI$evwUaNl|8Ax}8vbyklN+YB5kKz}eR?F*miC2a=@}N-|4wQXx(SW@=y-WfTV+ z1}=ht*&1jVwTd91SwQotQV;-*qBOdIMo<(hK>bt;{2XvBav=g9T*FW=;DHH_?M%7p G6b1m|H&c}W literal 0 HcmV?d00001 diff --git a/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..2d27eda1119918e7da1efe8e33cc417e5e800363 GIT binary patch literal 1934 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 PE!=^rg5A8_bP59il+ktf literal 0 HcmV?d00001 From d0310f7d9cbacb819338a16fbf258fb49ef0a9d4 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:44:07 +0000 Subject: [PATCH 04/56] get pointers --- Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm | Bin 2042 -> 0 bytes Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm | Bin 1858 -> 0 bytes Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm | Bin 1869 -> 0 bytes Banks/header_cpp_ACLiC_dict_rdict.pcm | Bin 1601 -> 0 bytes Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm | Bin 2860 -> 0 bytes Banks/particle_cpp_ACLiC_dict_rdict.pcm | Bin 1740 -> 0 bytes Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm | Bin 1934 -> 0 bytes Banks/scintillator_cpp_ACLiC_dict_rdict.pcm | Bin 1867 -> 0 bytes Banks/tracker_cpp_ACLiC_dict_rdict.pcm | Bin 1847 -> 0 bytes 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/header_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/particle_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/scintillator_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/tracker_cpp_ACLiC_dict_rdict.pcm diff --git a/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm b/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 9f28652edecc59c96b116d71bb2998757a045663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmXTQ&o5zMcz=h1fgy!~f&CW{cLUk^K+Filt5~26AO&KbcpKpGcBSBpng1CX8S3}F zhX@lUpD}<8YK(i$dY>T`Y%7BYkHu6_THyW2Ent zn3r9wpPZPJUzC}fT9R56pIlH7@96B4=^USunOqWI1S0hcl5-iTVh95($c126GBDNv z9k>dJ!7gQBVB;s`edfa;U-GR7>vsqFlF+QdOn5<#-rih`Ij98=2>`pUSj{^DBs{xDasdf zD=whr2v^q?XF*Mtzy&8tg~i>Us2*<>`#Qmy-}TW2W~aRkJ3hPrkd$#~lK#UqBeFku zdt8h+U(%AB`Q_JspG~pZeUC%p2aBf%Lzf$GmkZ;Ef975r6U^rvTf6FF7UQkB=C-#S zdJ9x{rf@A--ZJ^Ju}O8zQ&FBjc*Rh^`)4&wEpEe zo0j6ew^s1N|JA%3+I}#bFc$PROD$N?c6Y(2pOXS}Z%m!_a)#N?-xt_!IM80y|W{l?*#-9yU^scpfUp}u>2?7aLAvk5U8uwM9`o556_u26mC z@hrFQC!1E!mAMzYJ2rm($u0ejY9XAW6XrZhS!6xwi0QG{Jxzsuh4Ts^`H6d_l~EkM+-vmVG+2@Y|wq3%@PqTOj9d+i2Bc)ne6S z)l?-^DpJZ*Dl_%T2LAKU7Cyi4yy?IH!iv9I$qRS=x$acQ|Jz}* zpWu^cmjwfyii8`ZKSpsMdF5sEF8tt*pCant1m1C|25-_bcC30Iz`MNuh-N&C?}hT2 zw+!n~ZLX@c_1MQF%h_qm^|M>yr&qhRj$z=5c(#+L?<#EV^N-F z*Tvsoj;XEJTGjeq`lB+CKDt}yNPkSAZnVf|ZAHuaGqYdFWiUP1lXLvnmD(?lvW zo!uX8(iYl$SCN19bdQbNMw>62ev5QX`*F)H8fKXkiP?tTEt%N)nufok3Zcl@~P&bH&GpR2HPBq^4obz77lw zq72O75{`ihs1q4PBAM*~Hain2jZ{3a$H%+omFALcurJtP7OG>YGV{{ygyQ2J^O94GfkFY!zJ7_hsl_~yLPwz_vm_@K;#6R<2Q0)G#lePwi)vuO z2Q-X|MK#bkpcPapErCW+8e>2sD2f=MeyW9kJ~$$|5Md9ljHw#-z$DH7tK4)70|2Nc B;w}IH diff --git a/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm b/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index af5a09a28fb55ab12b41f8632db52cb743721d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1858 zcmXTQ&o5zMcz=h1fgy!~f!&FLf$b`goeRW_K)j3v$^cRz*2#Z-F>hB2zL;LY$jDH? z?>$7AF!_i9WKezFYt{!0$zYR#wlOfUhPY+sq&n)C=NDz`C+8#<8ye|5gQ<}G{2U{F zr^LMMV*TWd)S}e9?EJF$P}fw2nc zxMe^Lb|uiA(S*FtEDZ7?XAoGwJIIHOZXo@fA^u5OjzvX@m3;B>0Y&*G`5^xlrxpu4 z<|!nC#1-<>6!Md@Qj<%HqkK3HGcg2lGE^|G4U5edb`-IlxukURHYb-WAqOA1i+)^M zJL$pU0PQaev#yAAg>Ac?@>(y~?u6gcUsJ*lx=-Bq;{C_;4vil#>@QTSmtQu$y>4nn z!n>I}Hy6LVYd!g9hKRgUzYIqg@4-!McK?*FWbf^JdFS@mMI2A6xm~~M=sr+gTEjRa z=faaiO6TLYX@?y?@nJKD{6xrmyOOe>S@-&*t?Gy#Fxrc+@*tr^A)^ z*|&Axcg*C{^PKx^$*JZgtFF2|`2Odc-*Zv+-&ffAI_!JWrYWc2SKI%@_1}lw=m3+A z32%8PZl4*R^mE;HXb7oI2+*A1R$Fd))e7lV9iQ5VM(>debxccz%)@@V2_4e}=bV+4@eyABZdy$!M zui-AWZ%1WbA3gK$KWE?koUqy7zs4W5TAY1i`3?6u{^u_4P^fz)rHt)gixp9-_Y+Pz?+<1J3_s`D_xsQ&? z@!Gs!yuoFT;{C5a6Q)f!_R&f{HG4y;%eN^(Js&samo*#A-TUW}g-hEXZq0L2Q`pu; zR~ttDmfW7nbid*ygSJG{9)^i~cU)q8()U0^lJVM8-mCzr8JoYweBzZUw_mIKosZ*j z=6=8I)3IjzzRliJR+FFle6OPEO6SZ6v$k$NIm>7F@tjq6b}OV@c{=lj{l-(_YxYjK zqQBF9-bvp{qA4rpKVZMjap-7C;S=S9f<{mL3!W%Hp1D^;R-t3_d7cezO19<`|8W=m zN#7yTa@TL`uBThem$BdN_-Cw_%`43%*2^Z#@s4@Psl`B{0B2vn z#N5qgt^CGz@3~RmvWqQIy6P&3=FIxZkai$uKMNqMcMkvIf=!FM*7ZRDkMKY$4K8P zF)zDVKP|tgJh3RHBr!cbwJ1KhpdjAS*(cLEJ|#1`B)$kl>J=pCGEm7F23C+O!7gQB ztOGi79T0`Q~4C5U9PmMD-fX}0-DisS zfr{B;;?pa>?z*}0RlDH%Gy^g2=`Sw|ngm=m{p7jeqeWJIUq;%ZL`|vi%B@*da{n(3lLGD;f9ewZ+^z>$KP_BZG5Ka$ z{*x41L&E5L^-aW9o-x8?^6q zO1dAq-%`)i14@c9L|VP7Py0Qw`MN9mo^38HU&FaFV1^% z%X0TON2|P@r~EG7n=ogMW9Ealm+6x&S8l!2v*boK_fAhurFj!Ycb0fs>px~arCJbU zzdFV&(#q}JM6n++&i@r2R~N0V$os?k)ykL-V| zYEQr1JF}}jarfiWxh-?^l0O%#Uf22m=R$YTS&1`iHqQMhy*s7$H!$7Dfb+d1I5#+h zasx{YYHr|)j}NIVNKHvi!=!0uFDu+HWg|PdUn@(W>0IRZ^1^@s6 diff --git a/Banks/header_cpp_ACLiC_dict_rdict.pcm b/Banks/header_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 155b199fb8e8778937d7969c5702770302adc645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1601 zcmXTQ&o5zMcz=h1fgy!~fz6SDf%Q6&odv{l*HPG|~u*pE%fOdtrW#**X>6hmhW$P#BBo-SQ={tj|ko^1{BYmgD zyzFBAjMT)G)S~$0f`WKQXP->x_>|1#lK3JJsaKGk%Rs4q23C-}fcOT`hvh(LEdXM$ z`xqElfUd>wX(l<4-&p#=`rSc(V{`!N=M3>r%5p3!O049Ij}IuyFUbe_tT?q;*fCEb z5hSjVpQezXl$DxXQXJ*OagLFppM{}^$s)3Gzixni+>f~&h6w)m} zcaam<+9!*abI#&_=eNOTgV6tm-v932{~KGIT3h$Fo_lllsPCVQnu5=1>1EIFoqdzJ z<9fjaX2*?+64wsAWnZ{Wxa`rnTQlWd7u*mPxyfmDz`d)F`w741&MjwdMiwV+mOQ#g z>Tp2RjfHD%GY(v4tx|9NW5e}VZf%d0p6kBjk>?}6?OX8BM&*FvN82fEX)Yn1uD#0^ zt-9*=K%P}`zout{^rLRaNK3A3y`MtuxvJ*x;&tt;OkTcZ+r-!$lihQ(w!Yi$fAE5X zq=s$3|77!~LkV%3_fo&*vP7Jl)+d+Ef^ODhwt&Q+L*RS4Ay)`_0` z6*BQ_(}#Hl;Xj;yxc%^(VSPSpbLULY3%B}iS6W_k-*dgrXVU)LZ0{eMZj|b<7IN=9 z(Dth!Gp}=Xqw=|H*Z$tP&lUBxWRrEkl$8?JnZBpK9{T2}{^VzL#h*`my13^DO+Beem!Hl@Wl$4zBq4kjjG8l+-k=DFc|6L>ZXDS%!fLs1q4PBAM*~HhULP8Y$(m$H%+o zmFALcurJtP7O?1E$sdBAeopqRhN>JE8b^$Gqg!VxUlfv#(!bZfY?P zBt0vXWR~QlLYxZBQNaAcC=NCZn47?P3TPO0@;=ZGpy^b}gFvGwjVz!M6vYWpKh=Uh Z3mk`Bh+qd7?9>W&U^KEhmYYst007Mm659X( diff --git a/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm b/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 985fd53cb09eff22055cc37faff4152acd124d83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2860 zcmb`Jdo+|=AIG0Dxenu+OO(qYDm5>KgGMu%A%$`4q9adZ3{9B9jA3${NW?iuyuxXs zSe@t`XHU z7fGWr06_RV004mifG`IDg?~Wv2&luLUcTwe1RBJ%qx<~2=gL(1=NDlxAn}3lv-{8O zTR;p-_McS<1A--F=xYEV?c+oVCF4=iw8#(?DU?XJutYgZ1|J$N)Dm@&NDZN*!pL+Q zl^g?-nPe&hB!!2ASVvciBN#{_F~CT%-4jj<1HKXlkQPTNi4=e(KtYy6T@oz-$fN&k z3uG>eGu3I6talb?3Ue2)m-itAoW({)5?M$P^oXP}XyQESWV$+*YCshG4QN3Iw1Bf@ z5`%uyRnA%lXwv~=U~~CRG(EgV$N1bGVQPec9%{-=xN6MK^3u*Rs`M(;P{*68$SPVI zJ|10(>n(^B6^e2vZXD9{GR7#V{j6)eA#Em&zhIVx%Sw8PSJ2w=ea=JalnjkMMkzLX z$Lk8d0|jn}46)Qz zO&`(e=VaYGlQP+Ns2;md*f&qF)GK~<=$GThRyVV+=ASTo-q`lk>j9&x+N^5JOKg|m z0ovZWFm%tv-M%bmDVFhNXQR}FM}+SkQS7wqXD}e_c+2iK<8~7Q_JC3$ zY-_mMer124q?r;f(;%hUY|B+V*0M#L-D%I#JqK@qC&-RTC;C+LnmZ=!YK!vqE|z0* zdCtTRJM*bvL)4Lu#2ahbUFo8oALSmcSx?st5)-A2lywIO#xAVysFil`7I+!N$}65W%4+{T`FO-9QXl;WucJt-*@O!#XaAbMW2r>A1HF!j(O*-F13tkVHf?NDMg1^a z;Gev1QH$(l4`ni7=XCszxmscF+{FyCXqa&y*BOi~E|KZ;W>|efJ4Q`UmTkR$7)sXwMq?)ZAX%z=2yT^MH?nbEx9R<~55KB?D_H`f6hN z{EMcyQKJ;)Hgv7qymgk!?`|<%lem1BfxIYPCTkmRF8uRzRGSZvwvz;IcW|$lhJ|OvwHK6yweNb zlAbWDsab%%+lyfd%hJyy`%iVpr<(KJJ6G7Y(S!&5W9X(z4~3KJL&dlFn`9VL?U!q< zRl5yWG?(MtG(%DY8wa~PdS%D0+tYt_ zeQSYM!ey}jli!4YlmC0LeP^*P4m8xcZqEC$^JHR$I?aN)Q~x7%K_(@8Om4*PxiPp+AtPuW;|;lPOkGrOk||nQw!KLRb0TN4`>tWlOY_ z1(&AV?N=u(bLUlkdl8~iuLCym3)j+Q9&0jo`JG44vYvC*kVwxme(*Q_qqY499N*=2 zPS(8`Yq+v9tZdpElT)CyxpA4ut2EKmt4zpM&adG#-OkNy9VwI^eSNrxlb;`@MO!Kj zDtK~HdXQU_sbTwEX(KOV;GN&L{-(q0a$QdrZi7>;i&si0v2U5D3+HAivfC;CS-IZT zaCLlUE7G-PJomTB-pz>@wI@k`FI@=U9^o>SvIbudSS3Pw(<;$hwnT*-#VREG?7vk= z0R(+m;p9Ma(En8+3;@IdaEVX@QqW3q6W0R(1^`GKQ1ihN8ALHb?C}JoAZseITcP(P zZ^8ipQ2wmxc6LlM$-@Olhg_1TEk=Bqt016<3|i!V3YFpT#fN}KUr7o&k`ypvq+A~4 z{SP6P1wlMDD(sKq-~7Mve_;b|67VJo*hK=K7lV;s!k{xEDb!#GH4wy7Nn|<{nTMmB zI}s{E6hF(e0fWK_C4Z(t1p*}ZFf9p8QrJKx0tEZ2g$)FRKJry63kdaBuLgwpOGg8( d|7s@?AvsEgfA7Aec>T(|4_!Tkd9+my@Gtb)ZW;gp diff --git a/Banks/particle_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 1482042aa2c7f5fac6200d264ab632adaf5ea870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1740 zcmXTQ&o5zMcz=h1fgy!~f$ao4E6io zLxc&F4;VlO)y2JLy~&USHW_Fe0|RS_TV_tGgMN8_QMP_^PGYg4k-jsS3dzsUG17NR z%*!s;FGwsZ$xO~kjZZEph<9}M$#jlS$xJSZF9MNz1E{gbPs(yEDoU*6i;oW|$}h!MHSZfBt0$k$**gmn>L2!#WNyHFh?#niZd6@s;{)6)`7=qZ@fI#KPy`Sd{OI5o5cz)kk zUjE*0{`~jzOs~lua^`Ija+bJu;P`!)dh5PRFFqztP$6!4t>om|KCL;*WTANeeEyna2ODqxUaY|RdHUU^M@M9n*GHFb z{`f7!rn_pdqd_faBb(KMU)Rq{f6+T^Z@+$u%gi0sm0jET=K1xjsjZgP*sB#Uwe`DM z`0N-x3sbQlNk7kgGCzG^_y2}Jmp`rV@y&X9ZH6-Q^qcG6-ru?>yE3gZ@8^+E>8F)6 z^40GLn@H#QZZkEzXcj+xj{S^%-Q{N%{%^_D`yvp5Ui$H_Vq#dZ0124C`U3!Edi_DJ>u_W6E$zbI>5dFCA{>EE`vKuF|R z<=3Sp2d6PV-aO-``0X1L3lGZg-ln(`m=t5c8Bh|OK%GGel=&%Y0_BR252-9jO-W6| znm8R87(^ME!8wxI$evwUaNl|8Ax}8vbyklN+YB5kKz}eR?F*miC2a=@}N-|4wQXx(SW@=y-WfTV+ z1}=ht*&1jVwTd91SwQotQV;-*qBOdIMo<(hK>bt;{2XvBav=g9T*FW=;DHH_?M%7p G6b1m|H&c}W diff --git a/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 2d27eda1119918e7da1efe8e33cc417e5e800363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 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 PE!=^rg5A8_bP59il+ktf From 8a3fdf0e5f9b99232a1a4f0024f07de90498e605 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 26 Nov 2018 09:46:23 +0000 Subject: [PATCH 05/56] use lz4 so --- RunRoot/CleanROOT.C | 14 ++++ RunRoot/CleanROOT.C~ | 14 ++++ RunRoot/MesonexEvent.C | 7 +- RunRoot/MesonexEvent.C~ | 66 +++++++++++++++++++ RunRoot/MesonexEventHist.C~ | 68 ++++++++++++++++++++ RunRoot/MesonexEventTree.C~ | 66 +++++++++++++++++++ RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm | Bin 0 -> 1179 bytes RunRoot/README~ | 6 ++ RunRoot/importToROOT.C | 2 +- RunRoot/importToROOT.C~ | 45 +++++++++++++ 10 files changed, 284 insertions(+), 4 deletions(-) create mode 100644 RunRoot/CleanROOT.C create mode 100644 RunRoot/CleanROOT.C~ create mode 100644 RunRoot/MesonexEvent.C~ create mode 100644 RunRoot/MesonexEventHist.C~ create mode 100644 RunRoot/MesonexEventTree.C~ create mode 100644 RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm create mode 100644 RunRoot/README~ create mode 100644 RunRoot/importToROOT.C~ diff --git a/RunRoot/CleanROOT.C b/RunRoot/CleanROOT.C new file mode 100644 index 0000000..caa5e4a --- /dev/null +++ b/RunRoot/CleanROOT.C @@ -0,0 +1,14 @@ +{ + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.so"); + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.d"); + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.pcm"); + + gSystem->Exec("rm $CLAS12TOOL/Banks/*.so"); + gSystem->Exec("rm $CLAS12TOOL/Banks/*.d"); + gSystem->Exec("rm $CLAS12TOOL/Banks/*.pcm"); + + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.so"); + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.d"); + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.pcm"); + +} diff --git a/RunRoot/CleanROOT.C~ b/RunRoot/CleanROOT.C~ new file mode 100644 index 0000000..556c168 --- /dev/null +++ b/RunRoot/CleanROOT.C~ @@ -0,0 +1,14 @@ +{ + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.so"); + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.d"); + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.pcm"); + + gSystem->Exe("rm $CLAS12TOOL/Banks/*.so"); + gSystem->Exe("rm $CLAS12TOOL/Banks/*.d"); + gSystem->Exe("rm $CLAS12TOOL/Banks/*.pcm"); + + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.so"); + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.d"); + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.pcm"); + +} diff --git a/RunRoot/MesonexEvent.C b/RunRoot/MesonexEvent.C index 516273e..defccd2 100644 --- a/RunRoot/MesonexEvent.C +++ b/RunRoot/MesonexEvent.C @@ -40,6 +40,7 @@ void MesonexEvent(){ int counter=0; while(reader.next()==true){ event.reset(); + int np = event.particles().getSize(); double starttime = event.header().getStartTime(); @@ -56,13 +57,13 @@ void MesonexEvent(){ event.getLTCC(); int nLTCC=event.cherenkov().getNphe(); float trchi2=event.getTrackChi2(); - } + } counter++; - if(counter==1E7) break; + if(counter==1E6) break; } auto finish = std::chrono::high_resolution_clock::now(); std::chrono::duration elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "< +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/MesonexEventHist.C~ b/RunRoot/MesonexEventHist.C~ new file mode 100644 index 0000000..516273e --- /dev/null +++ b/RunRoot/MesonexEventHist.C~ @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventTree.C~ b/RunRoot/MesonexEventTree.C~ new file mode 100644 index 0000000..56651ed --- /dev/null +++ b/RunRoot/MesonexEventTree.C~ @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm b/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..7587ced8c9906c4ca3fece533ddcb1e325403350 GIT binary patch literal 1179 zcmb`H!AiqG5QZl;MJ-ZL5$P>=!C=9gNJFe5v|36~1aVE%twh^w$ZlJED1y)6tvAob zNAM*041y2Pi}n?q-3raElqN8{%ffv7&p$&V#st9l8vyD6`T%1G&mo3}G1UJLxXIJy z=hww=e|_}&p=t2+KAv39UPmB7&o@804m1=QUjs-x$9|I@nOzn=m|oN6dwJ7Vo5NT$ zZ&uqu6$P4Q%2_}kiyayWViU_Q`8KKho* zR@IqP`6seYtt9hTo%7ng6-90@OGqVRg2^g5<(pPuxbog$4TIJ0sV8^=U<;O%Nsz+q z_;(%S+lsIBP5Bu@oL)%lv@tjPD#k8Ic4`Hmj%i;eq!_eYbA!tYtSeJa71)*FYzM1l z(E%5cAKV>o5Ml)$<#<)G%V%zj^0kR0hVVs`PHe!Q;3R3=3Z^CryMnMJCkc6ST9fD{ iVis)~A{Ocl<|o#GP#Ke%ny-Eq$(oOYrw_XOFYpHgLoad(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.a")==-1){ + if(gSystem->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")==0){ //Found liblz4 in LD_LIBRARY_PATH gROOT->ProcessLine("#define __LZ4__"); gSystem->AddIncludePath("-D__LZ4__"); diff --git a/RunRoot/importToROOT.C~ b/RunRoot/importToROOT.C~ new file mode 100644 index 0000000..547c1b1 --- /dev/null +++ b/RunRoot/importToROOT.C~ @@ -0,0 +1,45 @@ +{ + if(TString(gSystem->Getenv("CLAS12TOOL"))!=TString()){ + cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")){ + //Found liblz4 in LD_LIBRARY_PATH + gROOT->ProcessLine("#define __LZ4__"); + gSystem->AddIncludePath("-D__LZ4__"); + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Lz4/lib"); + } + else{ + printf("\n >>>>> LZ4 compression is not supported."); + printf("\n >>>>> check if libz4 is installed on your system."); + printf("\n >>>>> and included in LD_LIBRARY_PATH"); + } + + //Hipo + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Hipo"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/utils.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/dictionary.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/node.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/record.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/reader.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+"); + + //Clas12Banks + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); + // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + + +} From 9d26189a320720fdf2a02a5e6b539aa668f1c527 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 13 Dec 2018 22:56:23 +0000 Subject: [PATCH 06/56] new region classes --- Banks/calorimeter.h | 2 + Banks/cherenkov.h | 2 + Banks/clas12defs.h | 46 ++++-- Banks/covmatrix.cpp | 75 +++++++++ Banks/covmatrix.h | 69 ++++++++ Banks/forwardtagger.h | 10 +- Banks/hallB_event.cpp | 107 ++++++++++++ Banks/hallB_event.h | 120 ++++++++++++++ Banks/header.cpp | 11 +- Banks/header.h | 48 ++++-- Banks/mesonex_event.h | 2 +- Banks/particle.h | 4 +- Banks/particle_detector.cpp | 50 ++++-- Banks/particle_detector.h | 27 ++-- Banks/region_cdet.cpp | 72 +++++++++ Banks/region_cdet.h | 107 ++++++++++++ Banks/region_detector.h | 57 +++++++ Banks/region_fdet.cpp | 113 +++++++++++++ Banks/region_fdet.h | 127 +++++++++++++++ Banks/region_ft.cpp | 71 ++++++++ Banks/region_ft.h | 70 ++++++++ Banks/region_particle.cpp | 54 +++++++ Banks/region_particle.h | 105 ++++++++++++ Banks/scintillator.h | 6 +- Banks/tracker.h | 2 + C12AnCpp/Clas12/inc/recEvent.h | 25 +++ C12AnCpp/Clas12/inc/recEventReader.h | 39 +++++ C12AnCpp/Clas12/inc/recTrack.h | 2 +- C12AnCpp/Clas12/src/hipoReader.cpp | 4 +- C12AnCpp/Clas12/src/recEventReader.cpp | 62 +++++++ C12AnCpp/Examples/Makefile | 2 +- C12AnCpp/Examples/ex01/Makefile | 2 +- C12AnCpp/Examples/ex01/ex01.cpp | 1 + C12AnCpp/Examples/ex02/Makefile | 37 +++++ C12AnCpp/Examples/ex02/ex02.cpp | 75 +++++++++ C12AnCpp/Examples/ex02/ex02_alg.cpp | 94 +++++++++++ C12AnCpp/Examples/ex02/ex02_alg.h | 11 ++ C12AnCpp/Examples/test.cpp | 19 ++- C12AnCpp/README.md | 8 +- C12AnCpp/Root/inc/particle.h | 1 + C12AnCpp/Root/src/particle.cpp | 8 + C12AnCpp/Root/src/particleMaker.cpp | 8 +- C12AnCpp/Tools/inc/utils.h | 17 ++ C12AnCpp/Tools/src/utils.cpp | 19 +++ C12AnCpp/setEnv.csh | 22 +++ RunRoot/CleanROOT.C~ | 14 -- RunRoot/HallBEvent.C | 161 +++++++++++++++++++ RunRoot/HipoSlowDown | 41 +++++ RunRoot/MesonexEvent.C | 23 +-- RunRoot/MesonexEvent.C~ | 66 -------- RunRoot/MesonexEventHist.C | 8 +- RunRoot/MesonexEventTree.C~ | 66 -------- RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm | Bin 1179 -> 0 bytes RunRoot/README | 17 ++ RunRoot/README~ | 6 - RunRoot/RegionFDET.C | 85 ++++++++++ RunRoot/{MesonexEventHist.C~ => RegionFT.C} | 52 +++--- RunRoot/{importToROOT.C~ => importToROOT2.C} | 12 +- 58 files changed, 2092 insertions(+), 272 deletions(-) create mode 100644 Banks/covmatrix.cpp create mode 100644 Banks/covmatrix.h create mode 100644 Banks/hallB_event.cpp create mode 100644 Banks/hallB_event.h create mode 100644 Banks/region_cdet.cpp create mode 100644 Banks/region_cdet.h create mode 100644 Banks/region_detector.h create mode 100644 Banks/region_fdet.cpp create mode 100644 Banks/region_fdet.h create mode 100644 Banks/region_ft.cpp create mode 100644 Banks/region_ft.h create mode 100644 Banks/region_particle.cpp create mode 100644 Banks/region_particle.h create mode 100644 C12AnCpp/Clas12/inc/recEvent.h create mode 100644 C12AnCpp/Clas12/inc/recEventReader.h create mode 100644 C12AnCpp/Clas12/src/recEventReader.cpp create mode 100644 C12AnCpp/Examples/ex02/Makefile create mode 100644 C12AnCpp/Examples/ex02/ex02.cpp create mode 100644 C12AnCpp/Examples/ex02/ex02_alg.cpp create mode 100644 C12AnCpp/Examples/ex02/ex02_alg.h create mode 100644 C12AnCpp/Tools/inc/utils.h create mode 100644 C12AnCpp/Tools/src/utils.cpp create mode 100755 C12AnCpp/setEnv.csh delete mode 100644 RunRoot/CleanROOT.C~ create mode 100644 RunRoot/HallBEvent.C create mode 100644 RunRoot/HipoSlowDown delete mode 100644 RunRoot/MesonexEvent.C~ delete mode 100644 RunRoot/MesonexEventTree.C~ delete mode 100644 RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm delete mode 100644 RunRoot/README~ create mode 100644 RunRoot/RegionFDET.C rename RunRoot/{MesonexEventHist.C~ => RegionFT.C} (50%) rename RunRoot/{importToROOT.C~ => importToROOT2.C} (77%) diff --git a/Banks/calorimeter.h b/Banks/calorimeter.h index 81199fe..6b69b12 100644 --- a/Banks/calorimeter.h +++ b/Banks/calorimeter.h @@ -169,6 +169,8 @@ namespace clas12 { }; //class calorimeter + using cal_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/cherenkov.h b/Banks/cherenkov.h index a2573bc..b34537c 100644 --- a/Banks/cherenkov.h +++ b/Banks/cherenkov.h @@ -104,6 +104,8 @@ namespace clas12 { }; //class cherenkov + using cher_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h index a604b4c..461b93d 100644 --- a/Banks/clas12defs.h +++ b/Banks/clas12defs.h @@ -3,22 +3,42 @@ namespace clas12{ - static const double FTOF = 12; - static const double CTOF = 4; - static const double CND = 3; - static const double EC = 7; - static const double FTCAL = 10; - static const double FTHODO = 11; - static const double HTCC = 15; - static const double LTCC = 16; + //regions + static const ushort FT = 1000; + static const ushort FD = 2000; + static const ushort CD = 3000; + + //detectors + static const ushort FTOF = 12; + static const ushort CTOF = 4; + static const ushort CND = 3; + static const ushort CVT = 5; + static const ushort DC = 6; + static const ushort EC = 7; + static const ushort FTCAL = 10; + static const ushort FTHODO = 11; + static const ushort HTCC = 15; + static const ushort LTCC = 16; - static const double FTOF1A = 121; - static const double FTOF1B = 122; - static const double PCAL = 71; - static const double ECIN = 72; - static const double ECOUT = 73; + //layers + static const ushort FTOF1A = 0; + static const ushort FTOF1B = 1; + static const ushort FTOF2 = 2; + //CDET scint layers same as detectors + //static const ushort CND = 3; + //static const ushort CTOF = 4; + static const ushort CND1 = 1; + static const ushort CND2 = 2; + static const ushort CND3 = 3; + + static const ushort PCAL = 1; + static const ushort ECIN = 4; + static const ushort ECOUT = 7; + + // using indices =vector; + } #endif diff --git a/Banks/covmatrix.cpp b/Banks/covmatrix.cpp new file mode 100644 index 0000000..c2dc237 --- /dev/null +++ b/Banks/covmatrix.cpp @@ -0,0 +1,75 @@ +/* + * To change this license covmatrix, choose License Covmatrixs in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "covmatrix.h" +#include + +namespace clas12 { + + + void covmatrix::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + cout<<" covmatrix::init "<::iterator it; + if((it=std::find(_rvec.begin(),_rvec.end(),pindex))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + //_index = _rmap[pindex]; + return _index; + } + return _index=-1; + } + const CovMatrix* covmatrix::matrix(){ + if(_index==-1){ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=0; + } + else{ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=getFloat(_morder[i][j],_index); + } + return &_matrix; + } + + void covmatrix::print(){ + matrix(); + std::cout<<"Cov Matrix "< +#include + +namespace clas12 { + + using CovMatrix =vector >; + using IndMatrix =vector >; + + class covmatrix : public hipo::bank { + + + public: + + //covmatrix() { } + //vmatrix(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ + // + + + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + int getIndex() const {return _index;} + int getIndex(int pindex); + void setIndex(int ind){_index=ind;} + + const CovMatrix* matrix(); + + void init(const char *bankName, hipo::reader &r); + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + + void notify(){ scanIndex();} + void scanIndex(); + void print(); + + private : + + CovMatrix _matrix={5,vector(5,0)}; + IndMatrix _morder={5,vector(5,-1)}; + int _pindex_order=-1; + int _index=-1; + //std::map _rmap; + std::vector _rvec; + }; + + using covmat_ptr=shared_ptr; +} + +#endif /* UTILS_H */ diff --git a/Banks/forwardtagger.h b/Banks/forwardtagger.h index 0b1b1c6..b8b8ae1 100644 --- a/Banks/forwardtagger.h +++ b/Banks/forwardtagger.h @@ -19,7 +19,8 @@ namespace clas12 { - class forwardtagger : public particle_detector { + + class forwardtagger : public particle_detector { public: @@ -65,7 +66,7 @@ namespace clas12 { if(_index>-1)return getFloat(_z_order,_index); return 0; } - double getDx(){ + double getDx(){ if(_index>-1)return getFloat(_dx_order,_index); return 0; } @@ -77,7 +78,7 @@ namespace clas12 { if(_index>-1)return getFloat(_radius_order,_index); return 0; } - int getSize(){ + int getSizeFT(){ //watch-out banks::getSize() ! if(_index>-1)return getInt(_size_order,_index); return 0; } @@ -109,6 +110,9 @@ namespace clas12 { }; //class forwardtagger + + using ft_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/hallB_event.cpp b/Banks/hallB_event.cpp new file mode 100644 index 0000000..dc787c3 --- /dev/null +++ b/Banks/hallB_event.cpp @@ -0,0 +1,107 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "hallB_event.h" + +namespace clas12 { + + hallB_event::hallB_event(hipo::reader &r){ + _reader=&r; //keep a pointer to the reader + //initialise banks pointers + _bparts = make_shared(); + _bcovmat= make_shared(); + _bhead = make_shared

(); + _bcal = make_shared(); + _bscint = make_shared(); + _btrck = make_shared(); + _bcher = make_shared(); + _bft = make_shared(); + + //initialise banks + _bparts->init("REC::Particle",r); + _bcovmat->init("REC::CovMat",r); + _bhead->init("REC::Event",r); + _bcal->init("REC::Calorimeter",r); + _bscint->init("REC::Scintillator",r); + _bcher->init("REC::Cherenkov",r); + _bft->init("REC::ForwardTagger",r); + _btrck->init("REC::Track",r); + + //add some detector regions to their vectors + addARegionFDet(); + addARegionCDet(); + addARegionFT(); + + } + //////////////////////////////////////////////////////// + /// Loop over particles and find their region + /// Add appropriate region_partcle to event particle vector + void hallB_event::sort(){ + + _nparts=_bparts->getSize(); + + _n_rfdets=0; + _n_rcdets=0; + _n_rfts=0; + + _detParticles.clear(); + _detParticles.reserve(_nparts); + + //Loop over particles and find their region + for(ushort i=0;i<_nparts;i++){ + _bparts->setEntry(i); + + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rfdets[_n_rfdets]); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + continue; + } + + //Check if CDet particle + if(_rcdets[_n_rcdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rcdets[_n_rcdets]); + _n_rcdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rcdets==_rcdets.size()) + addARegionCDet(); + continue; + } + //Check if FT particle + if(_rfts[_n_rfts]->sort()){ + //add a FDet particle to the event list + _detParticles.emplace_back(_rfts[_n_rfts]); + _n_rfts++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfts==_rfts.size()) + addARegionFT(); + continue; + } + //cout<<"Warning hallB_event::sort() apparent particle with no detectors "<scanForParticle(i).size()<<" "<<_bscint->scanForParticle(i).size()<<" "<<_btrck->scanForParticle(i).size()<<" "<<_bcher->scanForParticle(i).size()<<" "<<_bft->scanForParticle(i).size()<<" "<show(); + // _bcal->show();_bscint->show();_btrck->show();_bcher->show();_bft->show(); + } + } + //////////////////////////////////////////////////////// + ///Filter and return detParticles by given PID + std::vector hallB_event::getByID(int id){ + return container_filter(_detParticles, [id](region_part_ptr dr) + {return dr->getPid()==id;}); + } + +} diff --git a/Banks/hallB_event.h b/Banks/hallB_event.h new file mode 100644 index 0000000..ef74f92 --- /dev/null +++ b/Banks/hallB_event.h @@ -0,0 +1,120 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hallB_event.h + * Author: dglazier + * + */ + +#ifndef HALLB_EVENT_H +#define HALLB_EVENT_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "header.h" +#include "covmatrix.h" +#include "forwardtagger.h" +#include "region_particle.h" +#include "region_fdet.h" +#include "region_cdet.h" +#include "region_ft.h" + +#include + + +namespace clas12 { + + class hallB_event { + + + public: + + + hallB_event(hipo::reader &r); + //~hallB_event()=default; + + bool next(){ + if(!_reader->next()) + return false; + sort(); + return true; + } + void sort(); + + void addARegionFDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rfdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionCDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rcdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionFT(){ + //Forward tagger needs particles and forward tagger + _rfts.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + + + virtual const head_ptr head() const{return _bhead;}; + + + std::vector& getDetParticles(){return _detParticles;} + std::vector getByID(int id); + + + + private: + + //reader + hipo::reader *_reader=nullptr; + + //DST banks + head_ptr _bhead; + par_ptr _bparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + cher_ptr _bcher; + ft_ptr _bft; + + //Detector region vectors, + //each particle in an event will have + //one associated + std::vector _rfdets; + std::vector _rcdets; + std::vector _rfts; + std::vector _detParticles; + + + ushort _nparts=0; + ushort _n_rfdets=0; + ushort _n_rcdets=0; + ushort _n_rfts=0; + + }; + //helper functions + + //filter vectors via a lambda function + //see for example hallb_event::getByID() + template + Cont container_filter(const Cont &container, Pred predicate){ + Cont result; + std::copy_if(container.begin(),container.end(),std::back_inserter(result), predicate); + return std::move(result); + } + +} + +#endif /* HALLB_EVENT_H */ diff --git a/Banks/header.cpp b/Banks/header.cpp index b51189b..9b2a234 100644 --- a/Banks/header.cpp +++ b/Banks/header.cpp @@ -8,13 +8,22 @@ namespace clas12 { - header::~header(){} void header::init(const char *bankName, hipo::reader &r){ initBranches(bankName,r); + rn_order = getEntryOrder("NRUN"); en_order = getEntryOrder("NEVENT"); + et_order = getEntryOrder("EVNTime"); + ty_order = getEntryOrder("TYPE"); + ec_order = getEntryOrder("EvCAT"); + np_order = getEntryOrder("NPGP"); trg_order = getEntryOrder("TRG"); + bcg_order = getEntryOrder("BCG"); + lt_order = getEntryOrder("LT"); st_order = getEntryOrder("STTime"); + rf_order = getEntryOrder("RFTime"); + hel_order = getEntryOrder("Helic"); + pt_order = getEntryOrder("PTIME"); } } diff --git a/Banks/header.h b/Banks/header.h index 6ed358f..7047766 100644 --- a/Banks/header.h +++ b/Banks/header.h @@ -5,7 +5,7 @@ */ /* - * File: particle.h + * File: header.h * Author: gavalian * * Created on April 27, 2017, 10:01 AM @@ -28,31 +28,25 @@ namespace clas12 { class header : public hipo::bank { - private: - - int rn_order; - int en_order; - int st_order; - int trg_order; public: - header() { } - header(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ - rn_order = getEntryOrder("NRUN"); - en_order = getEntryOrder("NEVENT"); - trg_order = getEntryOrder("TRG"); - st_order = getEntryOrder("STTime"); - } - - ~header(); - + void init(const char *bankName, hipo::reader &r); int getRunNumber(){ return getInt(rn_order,0); } int getEventNumber(){ return getInt(en_order,0); } + int getHelicity(){ return getInt(hel_order,0); } + int getType(){ return getInt(ty_order,0); } float getStartTime(){ return getFloat(st_order,0); } + float getRFTime(){ return getFloat(rf_order,0); } + float getPTime(){ return getFloat(pt_order,0); } + float getEVNime(){ return getFloat(et_order,0); } + float getBCG(){ return getFloat(bcg_order,0); } + float getNPGP(){ return getInt(np_order,0); } + float getLT(){ return getFloat(lt_order,0); } long getTrigger(){ return getLong(trg_order,0); } + /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort @@ -61,8 +55,28 @@ namespace clas12 { void notify(){ //printf("particle class is read again\n"); } + + private : + + int rn_order; + int en_order; + int et_order; + int ty_order; + int ec_order; + int np_order; + int trg_order; + int bcg_order; + int lt_order; + int st_order; + int rf_order; + int hel_order; + int pt_order; + + }; + using head_ptr=shared_ptr; + } #endif /* UTILS_H */ diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index ec47b3a..68fc1d0 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -162,7 +162,7 @@ namespace clas12 { double ftz=_ft.getZ(); return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; } - return _ft.getPath(); + /// return _ft.getPath(); //if no tof hit use EC time return _calorimeter.getPath(); } diff --git a/Banks/particle.h b/Banks/particle.h index 351d716..b04bbd3 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -82,7 +82,7 @@ namespace clas12 { getFloat(pz_order,index),mass); } void setEntry(short i){ _entry=i;} - + short getEntry() const {return _entry;} /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort @@ -92,6 +92,8 @@ namespace clas12 { //printf("particle class is read again\n"); } }; + + using par_ptr=shared_ptr; } diff --git a/Banks/particle_detector.cpp b/Banks/particle_detector.cpp index dabee63..52c7560 100644 --- a/Banks/particle_detector.cpp +++ b/Banks/particle_detector.cpp @@ -38,17 +38,18 @@ namespace clas12 { } //////////////////////////////////////////////////////////////////////// ///function to map the detector entry to particle index - void particle_detector::scanIndex(){ - _rmap.clear(); - const int size = getSize(); - for(int i = 0; i < size; i++){ - int detector = getDetector(i); - int layer= getLayer(i); - int pindex = getPindex(i); - int key = (detector<<16)|(layer<<8)|pindex; - _rmap[key] = i; - } - } + // void particle_detector::scanIndex(){ + // _rmap.clear(); + + // const int size = getSize(); + // for(int i = 0; i < size; i++){ + // int detector = getDetector(i); + // int layer= getLayer(i); + // int pindex = getPindex(i); + // int key = (detector<<16)|(layer<<8)|pindex; + // _rmap[key] = i; + // } + // } //////////////////////////////////////////////////////////////////////// ///function to find the current entries associated ///with pindex = iparticle @@ -76,4 +77,31 @@ namespace clas12 { std::cout<::iterator it; + int key = (detector<<16)|(layer<<8)|pindex; + if((it=std::find(_rvec.begin(),_rvec.end(),key))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + return _index; + } + return _index=-1; + } + void particle_detector::scanIndex(){ + + _rvec.clear(); + const int size = getSize(); + _rvec.reserve(size); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer= getLayer(i); + int pindex = getPindex(i); + int key = (detector<<16)|(layer<<8)|pindex; + _rvec.emplace_back(key); + } + } + } + diff --git a/Banks/particle_detector.h b/Banks/particle_detector.h index ddb37ab..ed8fbe5 100644 --- a/Banks/particle_detector.h +++ b/Banks/particle_detector.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "clas12defs.h" #include "bank.h" @@ -37,8 +38,8 @@ namespace clas12 { particle_detector()=default; - particle_detector(const char *bankName, hipo::reader &r) : - hipo::bank(bankName,r){}; + particle_detector(const char *bankName, hipo::reader &r){}; + // hipo::bank(bankName,r){init(bankName,r);}; virtual ~particle_detector()=default; @@ -65,14 +66,17 @@ namespace clas12 { //given a detector (layer if exists) and pindex find the position in this bank int getIndex() {return _index;} - int getIndex(int pindex, int detector, int layer=0) { - int key = (detector<<16)|(layer<<8)|pindex; - if(_rmap.count(key)>0) { - _index = _rmap[key]; - return _index; - } - return _index=-1; - } + int getIndex(int pindex, int detector, int layer=0); + + /* int getIndex(int pindex, int detector, int layer=0) { */ + /* //This function seems to be a bottle neck! */ + /* int key = (detector<<16)|(layer<<8)|pindex; */ + /* if(_rmap.count(key)>0) { */ + /* _index = _rmap[key]; */ + /* return _index; */ + /* } */ + /* return _index=-1; */ + /* } */ void setIndex(int ind){_index=ind;} //////////////////////////////////////////////////////////////// @@ -92,7 +96,8 @@ namespace clas12 { int _pindex_order=-1; int _index=-1; - std::map _rmap; + // std::unordered_map _rmap; + std::vector _rvec; std::vector _sitems; }; diff --git a/Banks/region_cdet.cpp b/Banks/region_cdet.cpp new file mode 100644 index 0000000..350507f --- /dev/null +++ b/Banks/region_cdet.cpp @@ -0,0 +1,72 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_cdet.h" + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): + region_particle(pars,cm,scp,trp) + { + _region=clas12::CD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::CD; + } + + /////////////////////////////////////////////////////// + /// check if any CD detectors associated with + /// current particle and store the detector indices + bool region_cdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcnd=-1; + + //tof 1 layer + _ptof=_scint->getIndex(_pentry,clas12::CTOF); + + //prefer cnd layer 1,2, 3 + _pcnd1=_scint->getIndex(_pentry,clas12::CND,clas12::CND1); + _pcnd2=_scint->getIndex(_pentry,clas12::CND,clas12::CND2); + _pcnd3=_scint->getIndex(_pentry,clas12::CND,clas12::CND3); + if(_pcnd1!=-1) _pcnd=_pcnd1; + else if(_pcnd2!=-1) _pcnd=_pcnd2; + else if(_pcnd3!=-1) _pcnd=_pcnd3; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::CVT); + + //was cdet involved ? + if((_ptof+_pcnd+_ptrck) == -3)return false; + return true; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(CND)->getEnergy(); + /// p->scint(CTOF)->getTime(); + const scint_ptr region_cdet::sci(ushort lay) const { + switch(lay){ + case clas12::CTOF : + _scint->setIndex(_ptof);return _scint; + case clas12::CND : + _scint->setIndex(_pcnd);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + + +} diff --git a/Banks/region_cdet.h b/Banks/region_cdet.h new file mode 100644 index 0000000..a3d0aef --- /dev/null +++ b/Banks/region_cdet.h @@ -0,0 +1,107 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_cdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_CDET_H +#define REGION_CDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_cdet : public region_particle { + + + public: + + region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, + trck_ptr trp); + region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_cdet()=default; + + + bool sort() final; + + const scint_ptr sci(ushort lay) const final; + const trck_ptr trk(ushort lay) const final{_trck->setIndex(_ptrck);return _trck;}; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _scint->setIndex(_pcnd); + return _scint->getTime(); + + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _scint->setIndex(_pcnd); + return _scint->getPath(); + } + + double getDetEnergy() final{ + //sum of cnd layers + _scint->setIndex(_pcnd1); + double energy=_scint->getEnergy(); + _scint->setIndex(_pcnd2); + energy+=_scint->getEnergy(); + _scint->setIndex(_pcnd3); + energy+=_scint->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + return 0; + } + + + private: + + + + //scintillator indices + short _pcnd=-1; + short _pcnd1=-1; + short _pcnd2=-1; + short _pcnd3=-1; + short _ptof=-1; + //track index + short _ptrck=-1; + + + + }; + + using region_cdet_ptr=shared_ptr; + +} + +#endif /* REGION_CDET_H */ diff --git a/Banks/region_detector.h b/Banks/region_detector.h new file mode 100644 index 0000000..82bc9d7 --- /dev/null +++ b/Banks/region_detector.h @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_detector.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_DETECTOR_H +#define REGION_DETECTOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class region_detector : public hipo::bank { + + + public: + + + region_detector()=default; + // virtual ~region_detector()=default; + + clas12::calorimeter Thick(); + clas12::scintillator Thin(); + clas12::cherenkov Track(); + PID(); + //individual detector components + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + + }; + +} + +#endif /* REGION_DETECTOR_H */ diff --git a/Banks/region_fdet.cpp b/Banks/region_fdet.cpp new file mode 100644 index 0000000..aab4316 --- /dev/null +++ b/Banks/region_fdet.cpp @@ -0,0 +1,113 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_fdet.h" + +namespace clas12 { + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): + region_particle(pars,cm,calp,scp,trp,chp) + { + _region=clas12::FD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::FD; + } + + /////////////////////////////////////////////////////// + /// check if any FD detectors associated with + /// current particle and store the detector indices + bool region_fdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcal=-1; + _ptrck=-1; + + //prefer tof layer 1,0,2 + _ptof3=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF2); + _ptof1=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1A); + _ptof2=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1B); + if(_ptof2!=-1) _ptof=_ptof2; + else if(_ptof1!=-1) _ptof=_ptof1; + else if(_ptof3!=-1) _ptof=_ptof3; + + //prefer pcal,inner, outer + _pcal=_pin=_cal->getIndex( _pentry,clas12::EC, clas12::ECIN); + _pcal=_pout=_cal->getIndex( _pentry,clas12::EC, clas12::ECOUT); + _pcal=_ppre=_cal->getIndex( _pentry,clas12::EC, clas12::PCAL); + if(_ppre!=-1) _pcal=_ppre; + else if(_pout!=-1) _pcal=_pout; + else if(_pin!=-1) _pcal=_pin; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::DC); + + _phtcc=_cher->getIndex( _pentry,clas12::HTCC); + _pltcc=_cher->getIndex( _pentry,clas12::LTCC); + + //was fdet involved ? + if((_ptof+_pcal+_ptrck) == -3)return false; + return true; + } + /////////////////////////////////////////////////////// + /// Get pointer to calorimeter banks for this particle + /// This should be used directly to acess data + /// e.g. p->cal(ECIN)->getEnergy(); + /// p->cal(PCAL)->getTime(); + const cal_ptr region_fdet::cal(ushort lay) const { + switch(lay){ + case clas12::PCAL : + _cal->setIndex(_ppre);return _cal; + case clas12::ECIN : + _cal->setIndex(_pin);return _cal; + case clas12::ECOUT : + _cal->setIndex(_pout);return _cal; + } + _cal->setIndex(-1);return _cal; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(FTOF1A)->getEnergy(); + /// p->scint(FTOF2)->getTime(); + const scint_ptr region_fdet::sci(ushort lay) const { + switch(lay){ + case clas12::FTOF1A : + _scint->setIndex(_ptof1);return _scint; + case clas12::FTOF1B : + _scint->setIndex(_ptof2);return _scint; + case clas12::FTOF2 : + _scint->setIndex(_ptof3);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + /////////////////////////////////////////////////////// + /// Get pointer to chrenkov banks for this particle + /// This should be used directly to acess data + /// e.g. p->che(HTCC)->getNphe(); + /// p->che(LTCC)->getNphe(); + const cher_ptr region_fdet::che(ushort lay) const { + switch(lay){ + case clas12::HTCC : + _cher->setIndex(_phtcc);return _cher; + case clas12::LTCC : + _cher->setIndex(_pltcc);return _cher; + } + _cher->setIndex(-1);return _cher; + } + + + +} diff --git a/Banks/region_fdet.h b/Banks/region_fdet.h new file mode 100644 index 0000000..17515fa --- /dev/null +++ b/Banks/region_fdet.h @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_fdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FDET_H +#define REGION_FDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_fdet : public region_particle { + + + public: + + // region_fdet()=default; + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp); + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_fdet()=default; + + + bool sort() final; + + const cal_ptr cal(ushort lay) const final; + const scint_ptr sci(ushort lay) const final; + const trck_ptr trk(ushort lay) const final + { + _trck->setIndex(_ptrck);return _trck; + } + const cher_ptr che(ushort lay) const final; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _cal->setIndex(_pcal); + return _cal->getTime(); + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _cal->setIndex(_pcal); + return _cal->getPath(); + } + + double getDetEnergy() final{ + _cal->setIndex(_ppre); + double energy=_cal->getEnergy(); + _cal->setIndex(_pin); + energy+=_cal->getEnergy(); + _cal->setIndex(_pout); + energy+=_cal->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + if(_ptrck){ + _trck->setIndex(_ptrck); + return _trck->getSector(); + } + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getSector(); + } + _cal->setIndex(_pcal); + return _cal->getSector(); + } + + + private: + + + + //calorimeter indices + short _pcal=-1; + short _ppre=-1; + short _pin=-1; + short _pout=-1; + //scintillator indices + short _ptof=-1; + short _ptof1=-1; + short _ptof2=-1; + short _ptof3=-1; + //track index + short _ptrck=-1; + //cherenkov indices + short _phtcc=-1; + short _pltcc=-1; + + + + }; + + using region_fdet_ptr=shared_ptr; + +} + +#endif /* REGION_FDET_H */ diff --git a/Banks/region_ft.cpp b/Banks/region_ft.cpp new file mode 100644 index 0000000..1bcdf37 --- /dev/null +++ b/Banks/region_ft.cpp @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_ft.h" +#include + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_ft::region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + region_particle(pars,cm,ftp) + { + _region=clas12::FT; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FD + region_ft::region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::FT; + } + + /////////////////////////////////////////////////////// + /// Temporary until FT banks updated + double region_ft::getPath(){ + if(_pcal>=0){ //currently no FT path reported + _ft->setIndex(_pcal); + double ftx=_ft->getX(); + double fty=_ft->getY(); + double ftz=_ft->getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + } + return 0; + } + //////////////////////////////////////////////////////// + ///check if any FT detectors associated with + ///current particle and store the detector indices + bool region_ft::sort(){ + region_particle::sort(); + _pcal=_ft->getIndex(_pentry,clas12::FTCAL); + + _phod=_ft->getIndex(_pentry,clas12::FTHODO); + //check if FT assocciated, must be a FTCAL + if(_pcal!=-1) + return true; + return false; + + } + /////////////////////////////////////////////////////// + /// Get pointer to FT banks for this particle + /// This should be used directly to acess data + /// e.g. p->ft(FTCAL)->getEnergy(); + /// p->ft(FTHODO)->getEnergy(); + const ft_ptr region_ft::ft(ushort lay) const { + switch(lay){ + case clas12::FTCAL : + _ft->setIndex(_pcal);return _ft; + case clas12::FTHODO : + _ft->setIndex(_phod);return _ft; + } + _ft->setIndex(-1);return _ft; + } + + + +} diff --git a/Banks/region_ft.h b/Banks/region_ft.h new file mode 100644 index 0000000..c93b2dc --- /dev/null +++ b/Banks/region_ft.h @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_ft.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FT_H +#define REGION_FT_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "forwardtagger.h" + + +namespace clas12 { + + + class region_ft : public region_particle { + + + public: + + region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_ft()=default; + + + bool sort() override; + + const ft_ptr ft(ushort lay) const final; + + + double getTime() final{ + _ft->setIndex(_pcal); + return _ft->getTime(); + } + double getPath() final; + + double getDetEnergy() final{ + _ft->setIndex(_pcal); + return _ft->getEnergy(); + } + + double getDeltaEnergy() final{ + _ft->setIndex(_phod); + return _ft->getEnergy(); + } + + short getSector() final{return 0;} + + private: + + // trck_ptr _track;//FT tracker ? + + short _pcal=-1; + short _phod=-1; + }; + using region_ft_ptr=shared_ptr; + +} + +#endif /* REGION_FT_H */ diff --git a/Banks/region_particle.cpp b/Banks/region_particle.cpp new file mode 100644 index 0000000..3d6098d --- /dev/null +++ b/Banks/region_particle.cpp @@ -0,0 +1,54 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_particle.h" + +namespace clas12 { + + region_particle::region_particle(par_ptr pars,covmat_ptr cm): + _parts(pars), + _covmat(cm) + { + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + _parts(pars), + _covmat(cm), + _ft(ftp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): + _parts(pars), + _covmat(cm), + _scint(scp), + _trck(trp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _cher(chp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _cher(chp), + _ft(ftp) + { + + } + + +} diff --git a/Banks/region_particle.h b/Banks/region_particle.h new file mode 100644 index 0000000..eef944f --- /dev/null +++ b/Banks/region_particle.h @@ -0,0 +1,105 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_particle.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_PARTICLE_H +#define REGION_PARTICLE_H + +#include "clas12defs.h" +#include "particle.h" +#include "covmatrix.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "forwardtagger.h" + + +namespace clas12 { + + class region_particle { + + + public: + + + region_particle(par_ptr pars,covmat_ptr cm); + //For region_ft + region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + //For region_cdet + region_particle(par_ptr pars,covmat_ptr cm, + scint_ptr scp, trck_ptr trp); + //For region_fdet + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, cher_ptr chp); + //For all regions + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp); + + virtual ~region_particle()=default; + + //////////////////////////////////////////////////////////// + /// derived classes must define there own sort + /// i.e. how the detector banks relate to that region + virtual bool sort(){ + _pentry=_parts->getEntry(); + //check for covarince matrix + _pcmat=_covmat->getIndex(_pentry); + return true; + } + + int getPid(){_parts->setEntry(_pentry);return _parts->getPid();} + + virtual double getTime()=0; + virtual double getPath()=0; + virtual double getDetEnergy()=0; + virtual double getDeltaEnergy()=0; + virtual short getSector() =0; + + const par_ptr par() const{_parts->setEntry(_pentry);return _parts;}; + const covmat_ptr covmat() const{_covmat->setIndex(_pcmat);return _covmat;}; + virtual const cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;}; + virtual const scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;}; + virtual const trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;}; + virtual const cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; + virtual const ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; + + const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();}; + + + short region() const {return _region;} + + + protected: + + par_ptr _parts; + covmat_ptr _covmat; + ft_ptr _ft; + cal_ptr _cal; + scint_ptr _scint; + trck_ptr _trck; + cher_ptr _cher; + + + //particle index + short _pentry=-1; + short _pcmat=-1; + short _region=-1; + + }; + //pointer "typedef" + using region_part_ptr=shared_ptr; + + +} + +#endif /* REGION_PARTICLE_H */ diff --git a/Banks/scintillator.h b/Banks/scintillator.h index fb73867..7c3833a 100644 --- a/Banks/scintillator.h +++ b/Banks/scintillator.h @@ -5,8 +5,8 @@ */ /* - * File: detector.h - * Author: gavalian + * File: scintillator.h + * Author: dglazier * * Created on April 27, 2017, 10:01 AM */ @@ -113,6 +113,8 @@ namespace clas12 { }; //class scintillator + using scint_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/tracker.h b/Banks/tracker.h index eee4dfa..c703193 100644 --- a/Banks/tracker.h +++ b/Banks/tracker.h @@ -109,6 +109,8 @@ namespace clas12 { }; //class tracker + using trck_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/C12AnCpp/Clas12/inc/recEvent.h b/C12AnCpp/Clas12/inc/recEvent.h new file mode 100644 index 0000000..2bf836f --- /dev/null +++ b/C12AnCpp/Clas12/inc/recEvent.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "Core/object.h" +namespace clas12 { + + class recEvent : public core::object { + public: + int32_t NRUN ; + int32_t NEVENT ; + float EVNTime; + int8_t TYPE ; + int16_t EvCAT ; + int16_t NPGP ; + int64_t TRG ; + float BCG ; + double LT ; + float STTime ; + float RFTime ; + int8_t Helic ; + float PTIME ; + }; +} + diff --git a/C12AnCpp/Clas12/inc/recEventReader.h b/C12AnCpp/Clas12/inc/recEventReader.h new file mode 100644 index 0000000..eac3dba --- /dev/null +++ b/C12AnCpp/Clas12/inc/recEventReader.h @@ -0,0 +1,39 @@ + +#include "Core/algorithm.h" +#include "bank.h" +#include "reader.h" +#include +#include + +namespace clas12 { + + class recEvBank : public hipo::bank { + public: + void init( const char *, hipo::reader &); + + int getInt( std::string b, int i ) { return bank::getInt( order[b], i); } + int getLong( std::string b, int i ) { return bank::getLong( order[b], i); } + float getFloat( std::string b, int i) { return bank::getFloat( order[b], i); }; + double getDouble( std::string b, int i) { return bank::getDouble( order[b], i); }; + + void addBranch( std::string ); + private: + std::map order; + }; + + class recEventReader : public core::algorithm { + public: + recEventReader() {}; + + virtual void init(); + virtual void processEvent(); + virtual void terminate() {}; + + private: + recEvBank _bank; + std::map _index; + }; + +} + + diff --git a/C12AnCpp/Clas12/inc/recTrack.h b/C12AnCpp/Clas12/inc/recTrack.h index f7c795b..57e0072 100644 --- a/C12AnCpp/Clas12/inc/recTrack.h +++ b/C12AnCpp/Clas12/inc/recTrack.h @@ -30,7 +30,7 @@ namespace clas12 { float getPhi(); float getTheta(); }; -}; +} #endif diff --git a/C12AnCpp/Clas12/src/hipoReader.cpp b/C12AnCpp/Clas12/src/hipoReader.cpp index 97d6c66..1ad08fb 100644 --- a/C12AnCpp/Clas12/src/hipoReader.cpp +++ b/C12AnCpp/Clas12/src/hipoReader.cpp @@ -23,7 +23,7 @@ hipoReader::hipoReader( std::string name ) { // read all the lines in the text file and add them std::ifstream inf( name ); assert(inf); - if( inf ){ + if( ! inf ){ std::cerr << " *** [ERROR] hipoReader: bad file name\n"; return; } @@ -49,7 +49,7 @@ void hipoReader::open(){ return; } _filename = _filelist[_ifile].c_str(); - std::cout << " *** hipoReader: Opening file: " << _filename << std::endl; + std::cout << " *** [INFO] hipoReader: Opening file: " << _filename << std::endl; _reader->open(_filename); } diff --git a/C12AnCpp/Clas12/src/recEventReader.cpp b/C12AnCpp/Clas12/src/recEventReader.cpp new file mode 100644 index 0000000..e228612 --- /dev/null +++ b/C12AnCpp/Clas12/src/recEventReader.cpp @@ -0,0 +1,62 @@ +#include "Clas12/hipoReader.h" +#include "Clas12/recEventReader.h" +#include "Clas12/recEvent.h" +using namespace clas12; + +#include + +void recEvBank::init( const char *bname, hipo::reader &r ){ + initBranches( bname, r ); +} + +void recEvBank::addBranch( std::string b ){ + order[b] = getEntryOrder(b.c_str()); +} + +void recEventReader::init() { + + _bank.init( "REC::Event", *static_cast(getDataReader())->getReader() ); + + std::string brnames[] = { + "NRUN", + "NEVENT", + "EVNTime", + "TYPE", + "EvCAT", + "NPGP", + "TRG", + "BCG", + "LT", + "STTime", + "RFTime", + "Helic", + "PTIME" + }; + for( int i=0;i<13;i++) _bank.addBranch( brnames[i] ); +} + + +void recEventReader::processEvent() { + + if( _bank.getSize() == 0 ) return; + + std::shared_ptr rec = std::make_shared(); + + rec->NRUN = _bank.getInt("NRUN",0) ; + rec->NEVENT = _bank.getInt("NEVENT",0) ; + rec->EVNTime= _bank.getFloat("EVNTime",0) ; + rec->TYPE = _bank.getInt("TYPE",0) ; + rec->EvCAT = _bank.getInt("EvCAT",0) ; + rec->NPGP = _bank.getInt("NPGP",0) ; + rec->TRG = _bank.getLong("TRG",0) ; + rec->BCG = _bank.getFloat("BCG",0) ; + rec->LT = _bank.getDouble("LT",0) ; + rec->STTime = _bank.getFloat("STTime",0) ; + rec->RFTime = _bank.getFloat("RFTime",0) ; + rec->Helic = _bank.getInt("Helic",0) ; + rec->PTIME = _bank.getFloat("PTIME",0) ; + + + bookObject("recEvent",rec); + +} diff --git a/C12AnCpp/Examples/Makefile b/C12AnCpp/Examples/Makefile index ac15a4c..1b7c4e4 100644 --- a/C12AnCpp/Examples/Makefile +++ b/C12AnCpp/Examples/Makefile @@ -29,7 +29,7 @@ LIBS := -L$(LIBClas) \ -L$(LIBCORE) \ -L$(LIBTools) \ -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo + -lClas12 -lRootTools -lTools -lC12Core -lhipo -llz4 all: $(patsubst %.cpp, %.out, $(wildcard *.cpp)) diff --git a/C12AnCpp/Examples/ex01/Makefile b/C12AnCpp/Examples/ex01/Makefile index 6ce3c38..1d0e8b1 100644 --- a/C12AnCpp/Examples/ex01/Makefile +++ b/C12AnCpp/Examples/ex01/Makefile @@ -29,7 +29,7 @@ LIBS := -L$(LIBClas) \ -L$(LIBCORE) \ -L$(LIBTools) \ -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo + -lClas12 -lRootTools -lTools -lC12Core -lhipo -llz4 all: diff --git a/C12AnCpp/Examples/ex01/ex01.cpp b/C12AnCpp/Examples/ex01/ex01.cpp index 9270d14..d6c10a8 100644 --- a/C12AnCpp/Examples/ex01/ex01.cpp +++ b/C12AnCpp/Examples/ex01/ex01.cpp @@ -11,6 +11,7 @@ #include "ex01_alg.h" int main( int argn, const char* argv[]) { + if( argn < 2 ) return -1; // instatiate the manager // ---------------------- diff --git a/C12AnCpp/Examples/ex02/Makefile b/C12AnCpp/Examples/ex02/Makefile new file mode 100644 index 0000000..91fed65 --- /dev/null +++ b/C12AnCpp/Examples/ex02/Makefile @@ -0,0 +1,37 @@ +#INCCORE := $(C12CORE)/inc +LIBCORE := $(C12CORE) + +#INCClas := $(C12CLAS12)/inc +LIBClas := $(C12CLAS12) + +#INCRoot := $(C12RTOOL)/inc +LIBRoot := $(C12RTOOL) + +#INCTools := $(C12TOOLS)/inc +LIBTools := $(C12TOOLS) + +INCHIPO := $(HIPO) +LIBHIPO := $(CLAS12TOOL)/lib + + +ROOT := $(shell root-config --cflags) $(shell root-config --libs) -lEG + +SOURCES := $(wildcard $(SRCDIR)/*.cpp) +OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) + +CFLAGS := -Wall -O2 -fPIC -std=c++14 + +CFLAGS := $(ROOT) $(CFLAGS) + +INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) +LIBS := -L$(LIBClas) \ + -L$(LIBRoot) \ + -L$(LIBCORE) \ + -L$(LIBTools) \ + -L$(LIBHIPO) \ + -lClas12 -lRootTools -lTools -lC12Core -lhipo + + +all: + g++ $(DEBUG) -o ex02.exe ex02.cpp ex02_alg.cpp -I. $(INCLUDES) $(LIBS) $(ROOT) $(CFLAGS) + diff --git a/C12AnCpp/Examples/ex02/ex02.cpp b/C12AnCpp/Examples/ex02/ex02.cpp new file mode 100644 index 0000000..3138fa6 --- /dev/null +++ b/C12AnCpp/Examples/ex02/ex02.cpp @@ -0,0 +1,75 @@ +#include + +#include "Core/manager.h" + +#include "Root/rootOutObjMgr.h" +#include "Root/particleMaker.h" + +#include "Clas12/protoParticleReader.h" +#include "Clas12/recEventReader.h" +#include "Clas12/hipoReader.h" + +#include "Tools/combineParticles.h" + +#include "ex02_alg.h" + +int main( int argn, const char* argv[]) { + if( argn < 2 ) return 0; + + // instatiate the manager + // ---------------------- + core::manager *M = core::manager::instance(); + + // output manager. Here we have chosen to work with ROOT objects + // the output histograms and ntuples will be saved it "test.root" + // -------------------------------------------------------------- + root::rootOutObjMgr oom("test.root"); + M->setOutObjMgr( &oom ); + + // We want to analyse DST in hipo format + // So we create an hipoReader. + // We can pass either: + // - a .hipo file + // - a .txt file that conatins a list hipo file paths + // -------------------------------------------------------------- + clas12::hipoReader reader( argv[argn-1] ); + reader.open(); + M->addDataReader( &reader ); + + // =========== ALGORITHMS ========================= + // Here we specify the set of algorithms needed for our analysis + // ------------------------------------------------------------- + + // algorithm that reads the event bank + clas12::recEventReader er; + M->addAlgorithm( &er ); + + // algorithm that reads the particle bank + clas12::protoParticleReader pr; + M->addAlgorithm( &pr ); + + // algorithm that creates particles species containers + root::particleMaker pm; + M->addAlgorithm( &pm ); + + // combine particle: makes the pi pi candidates + tools::combineParticles cp( "pipi", "pions + pions"); + M->addAlgorithm( &cp ); + + // ----------------------------- + // USER SPECIFIC ALGORITHM + // ----------------------------- + ex02_alg ta; + M->addAlgorithm( &ta ); + + + // Run the analysis + // ---------------- + M->run(); + + // the program authmatically save and close the output file + return 0; + +} + + diff --git a/C12AnCpp/Examples/ex02/ex02_alg.cpp b/C12AnCpp/Examples/ex02/ex02_alg.cpp new file mode 100644 index 0000000..526875d --- /dev/null +++ b/C12AnCpp/Examples/ex02/ex02_alg.cpp @@ -0,0 +1,94 @@ +#include "ex02_alg.h" + +#include "Root/particle.h" +#include "Core/objVector.h" +#include "Core/tuple.h" + +#include "Clas12/recEvent.h" + +#include "Tools/kineTool.h" + +#include +void ex02_alg::init(){ +} + +void ex02_alg::terminate(){ +} + +void ex02_alg::processEvent(){ + + // get the rec event from the temporary data container + // ---------------------------------------------------- + clas12::recEvent* ev = (clas12::recEvent*) getObject("recEvent"); + if( ! ev ){ + //cout << "no electrons!!\n"; + return; + } + core::hist *htr = this->histo("htrigger", 32,0,32); + for( int i=0;i<32;i++) if( (ev->TRG >> i) & 0x1 ) htr->fill(i); + + // get the electrons from the temporary data container + // ---------------------------------------------------- + core::objVector *electrons = (core::objVector*) getObject("electrons"); + if( ! electrons ){ + //cout << "no electrons!!\n"; + return; + } + + // get the pi pi candidates, formed by the combineParticle algorithm + // ----------------------------------------------------------------- + core::objVector *pipi = (core::objVector*) getObject("pipi"); + if( ! pipi ){ + return; + } + + if( pipi->size() == 0 ) return; + + // get a ntuple (it automatically creates it for you the first time you call it) + // the string represents the name of the output object. + // you will find a tree/ntuple with this name in your output file + // ----------------------------------------------------------------------------- + core::tuple *tpl = this->ntuple("tpl"); + + // instantiate the kineTool: you can use to fill the kinematics of particles + // ------------------------------------------------------------------------- + tools::kineTool ktool; + + // loop over electrons + for( unsigned int i=0; i < electrons->size(); i++ ){ + + // careful: objVector contains unique_ptr of the particles + // that's why we need to call the ".get()" to retrive the actual pointer + // ---------------------------------------------------------------------- + root::particle *p1 = (root::particle*) (*electrons)[i].get(); + + if( p1->getPid() < 0 ) continue; + + //if( p1->P() < 1. ) continue; + + // book columns of your ntuple + // --------------------------- + tpl->column( "P", p1->P(), "e_" ); + tpl->column( "Theta", p1->Theta() , "e_" ); + tpl->column( "Phi", p1->Phi(), "e_" ); + + for( unsigned int j=0; j < pipi->size(); j++ ){ + root::particle *pp = (root::particle*) (*pipi)[j].get(); + if( pp->getDaughter(0)->getPid() == pp->getDaughter(1)->getPid() ) continue; + + //if( pp->getDaughter(0)->P() < .5 ) continue; + + tpl->column( "M", pp->M(), "pipi_"); + ktool.execute( tpl, pp , "pipi_"); + ktool.execute( tpl, pp->getDaughter(0) , "pi1_"); + ktool.execute( tpl, pp->getDaughter(1) , "pi2_"); + + // fill the ntuple + // --------------- + tpl->fill(); + } + + + } +} + diff --git a/C12AnCpp/Examples/ex02/ex02_alg.h b/C12AnCpp/Examples/ex02/ex02_alg.h new file mode 100644 index 0000000..d0f3b00 --- /dev/null +++ b/C12AnCpp/Examples/ex02/ex02_alg.h @@ -0,0 +1,11 @@ +#pragma once + +#include "Core/algorithm.h" + +class ex02_alg : public core::algorithm { + + public: + virtual void init(); + virtual void terminate(); + virtual void processEvent(); +}; diff --git a/C12AnCpp/Examples/test.cpp b/C12AnCpp/Examples/test.cpp index 5337ece..ea946b8 100644 --- a/C12AnCpp/Examples/test.cpp +++ b/C12AnCpp/Examples/test.cpp @@ -1,5 +1,6 @@ #include #include +#include using namespace std; #include "Core/algorithm.h" @@ -25,6 +26,7 @@ using namespace clas12; #include "Tools/kineTool.h" #include "Tools/combineParticles.h" +#include "Tools/utils.h" class test : public core::algorithm { @@ -45,18 +47,21 @@ void test::processEvent(){ core::objMap *tracks = (core::objMap *)getObject("recTracks"); if( ! tracks ) return; - //core::objVector *e = (core::objVector*) getObject("electrons"); - //if( ! e ) return; - //if( e->size() == 0 ) return; + core::objVector *e = (core::objVector*) getObject("electrons"); + if( ! e ) return; + if( e->size() == 0 ) return; - //recTrack* tr = (recTrack*)(*tracks)[1].get(); + double Q2,xB,W2; + std::tie(Q2,xB,W2) = tools::utils::getDISvariables( (root::particle*) (*e)[0].get(), 10.56, 2212 ); - //cout << tr->NDF << " " << tr->getP() << endl; - + core::tuple *tdis = this->ntuple("dis"); + tdis->column("Q2", Q2); + tdis->column("xB", xB); + tdis->column("W2", W2); + tdis->fill(); core::objVector *photons = (core::objVector*) getObject("photons"); if( ! photons ){ - //cout << "no photons!!\n"; return; } diff --git a/C12AnCpp/README.md b/C12AnCpp/README.md index ea87e5b..d676e7d 100644 --- a/C12AnCpp/README.md +++ b/C12AnCpp/README.md @@ -33,7 +33,7 @@ For example, g++-5 or newer ## Set up the environment -+ Edit the path to Clas12Tool in `setEnv.sh` ++ Edit the path to Clas12Tool in `setEnv.sh` (or `setEnv.csh` for the tcsh users) ```bash export CLAS12TOOL=/YOUR/PATH/GOES/HERE/Clas12Tool @@ -51,6 +51,12 @@ It is strongly suggested that you automatically source the environment. The foll echo "source `pwd`/setEnv.sh" >> $HOME/.bashrc ``` +or for `tcsh` user + +```tcsh +echo echo "source `pwd`/setEnv.csh" >> $HOME/.cshrc +``` + + Compile. If you want debug information, export the variable `DEBUG="-g"` ``` bash diff --git a/C12AnCpp/Root/inc/particle.h b/C12AnCpp/Root/inc/particle.h index d40c2bc..52c6c4c 100644 --- a/C12AnCpp/Root/inc/particle.h +++ b/C12AnCpp/Root/inc/particle.h @@ -27,6 +27,7 @@ namespace root { class particle : public core::object, public TLorentzVector { public: particle( int id, float x, float y, float z, float t) : TLorentzVector(x,y,z,t) { _pid = id; } + particle( int id, float x, float y, float z); particle( int id, TLorentzVector v ) : TLorentzVector(v) { _pid = id; } particle( const particle & ); static particle* getParticle( int, float, float, float); diff --git a/C12AnCpp/Root/src/particle.cpp b/C12AnCpp/Root/src/particle.cpp index 12168e7..8307789 100644 --- a/C12AnCpp/Root/src/particle.cpp +++ b/C12AnCpp/Root/src/particle.cpp @@ -13,6 +13,14 @@ particle::particle( const particle &p ){ setProtoParticle( p.getProtoParticle() ); } +particle::particle( int pid, float px, float py, float pz){ + _pid = pid; + float m = TDatabasePDG::Instance()->GetParticle(pid)->Mass(); + float p0 = TMath::Sqrt(px*px + py*py + pz*pz + m*m); + SetXYZT( px,py,pz,p0); + _ppart = 0x0; +} + particle* particle::getParticle( int pid, float px, float py, float pz){ float m = TDatabasePDG::Instance()->GetParticle(pid)->Mass(); diff --git a/C12AnCpp/Root/src/particleMaker.cpp b/C12AnCpp/Root/src/particleMaker.cpp index f40dc85..c388bd1 100644 --- a/C12AnCpp/Root/src/particleMaker.cpp +++ b/C12AnCpp/Root/src/particleMaker.cpp @@ -25,7 +25,7 @@ void particleMaker::init(){ TDatabasePDG::Instance()->AddParticle("deuteron","deuteron",1.875613,true,0,+1,"nuclei",45); _pname[11] = "electrons"; - _pname[221] = "pions"; + _pname[211] = "pions"; _pname[2212] = "protons"; _pname[2112] = "neutrons"; _pname[22] = "photons"; @@ -55,12 +55,14 @@ void particleMaker::processEvent(){ // create paticles and sort them by type if( particles.find(abs(p->pid)) == particles.end() ){ particles[abs(p->pid)] = std::make_shared(); - std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); + //std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); + std::unique_ptr part = std::make_unique(p->pid, p->px, p->py, p->pz ); part->setProtoParticle( p ); particles[abs(p->pid)]->push_back( std::move(part) ); } else { - std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); + //std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); + std::unique_ptr part = std::make_unique(p->pid, p->px, p->py, p->pz ); part->setProtoParticle( p ); particles[abs(p->pid)]->push_back( std::move(part) ); } diff --git a/C12AnCpp/Tools/inc/utils.h b/C12AnCpp/Tools/inc/utils.h new file mode 100644 index 0000000..f46de48 --- /dev/null +++ b/C12AnCpp/Tools/inc/utils.h @@ -0,0 +1,17 @@ +#pragma once + +#include "Root/particle.h" + +#include + + +namespace tools { + namespace utils { + + // compute Q2, xB, W2 + // takes as input a scattered electron, the energy of the electron beam + // and the id of the target particle + std::tuple getDISvariables( root::particle *, float, int ); + } +} + diff --git a/C12AnCpp/Tools/src/utils.cpp b/C12AnCpp/Tools/src/utils.cpp new file mode 100644 index 0000000..afe4a27 --- /dev/null +++ b/C12AnCpp/Tools/src/utils.cpp @@ -0,0 +1,19 @@ +#include "Tools/utils.h" + +using namespace tools; + +std::tuple utils::getDISvariables( root::particle *el, float Ein, int Tpid ) { + + root::particle projectile( 11,0,0,Ein); + root::particle target( Tpid,0,0,0); + + root::particle q = projectile - *el; + + double Q2 = -q.M2(); + + double xB = Q2 / (2.* target.Dot( q ) ); + + double W2 = (target + q).M2(); + + return std::make_tuple(Q2,xB,W2); +} diff --git a/C12AnCpp/setEnv.csh b/C12AnCpp/setEnv.csh new file mode 100755 index 0000000..e3c0d14 --- /dev/null +++ b/C12AnCpp/setEnv.csh @@ -0,0 +1,22 @@ +setenv CLAS12TOOL $HOME/software/Clas12Tool + +#check if ROOT exist +if ( ! $?ROOTSYS ) then + echo "ATTENTION: ROOTSYS is not set. Do you have ROOT installed?" +endif + +setenv HIPO ${CLAS12TOOL}"/Hipo" + +setenv CLAS12CPPBASE ${CLAS12TOOL}"/C12AnCpp" +echo $CLAS12CPPBASE + +setenv C12CORE ${CLAS12CPPBASE}"/Core" +setenv C12CLAS12 ${CLAS12CPPBASE}"/Clas12" +setenv C12RTOOL ${CLAS12CPPBASE}"/Root" +setenv C12TOOLS ${CLAS12CPPBASE}"/Tools" +setenv C12LUND ${CLAS12CPPBASE}"/Lund" +setenv CLAS12CPP ${C12CORE}:${C12CLAS12}:${C12RTOOL}:${C12TOOLS}:${C12LUND} + +setenv LD_LIBRARY_PATH ${CLAS12CPP}:${CLAS12TOOL}"/lib":${HIPO}:${LD_LIBRARY_PATH} +echo $LD_LIBRARY_PATH + diff --git a/RunRoot/CleanROOT.C~ b/RunRoot/CleanROOT.C~ deleted file mode 100644 index 556c168..0000000 --- a/RunRoot/CleanROOT.C~ +++ /dev/null @@ -1,14 +0,0 @@ -{ - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.so"); - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.d"); - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.pcm"); - - gSystem->Exe("rm $CLAS12TOOL/Banks/*.so"); - gSystem->Exe("rm $CLAS12TOOL/Banks/*.d"); - gSystem->Exe("rm $CLAS12TOOL/Banks/*.pcm"); - - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.so"); - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.d"); - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.pcm"); - -} diff --git a/RunRoot/HallBEvent.C b/RunRoot/HallBEvent.C new file mode 100644 index 0000000..2c13692 --- /dev/null +++ b/RunRoot/HallBEvent.C @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "hallB_event.h" + +using namespace clas12; + +//just make the code a bit neater when using unique_ptr +using P4_=TLorentzVector; +using p4_uptr = std::unique_ptr; + +void HallBEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + + ///////////////////////////////////// + //ignore this just getting file name! + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + ///////////////////////////////////// + + + cout<<"Analysing hipo file "<GetParticle(2212)->Mass()); + //remember these are really just TLorentzVector* + auto el=p4_uptr(new P4_(0,0,0,db->GetParticle(11)->Mass())); + auto pr=p4_uptr(new P4_(0,0,0,db->GetParticle(2212)->Mass())); + auto g1=p4_uptr(new P4_(0,0,0,0)); + auto g2=p4_uptr(new P4_(0,0,0,0)); + auto pip=p4_uptr(new P4_(0,0,0,db->GetParticle(211)->Mass())); + auto pim=p4_uptr(new P4_(0,0,0,db->GetParticle(-211)->Mass())); + + //a histogram (pre C++11 !) + auto* hmiss=new TH1F("missM","missM",200,-2,3); + + gBenchmark->Start("timer"); + int counter=0; + + // while(reader.next()==true){// (map 4.5s for 1M events) + + while(event.next()==true){ //(5.6s) vector + all loop (7.6s) + // 7M =75.05 seconds Cpu Time = 48.65s + //(7.2s) map + all loop (9.4s) + //(6.9s) uomap+ all loop (8.7s) + //7M = 85.74 seconds Cpu Time = 59.70s + //i.e. using maps is 2.5x slower! + + + + event.head()->getStartTime(); + + //Loop over all particles to see how to access detector info. + for(auto& p : event.getDetParticles()){ + // get predefined selected information + p->getTime(); + p->getDetEnergy(); + p->getDeltaEnergy(); + // get any detector information (if exists for this particle) + // there should be a get function for any entry in the bank + switch(p->region()) {// (+1s per 1M) + case FD : + p->cal(PCAL)->getEnergy(); + p->cal(ECIN)->getEnergy(); + p->cal(ECOUT)->getEnergy(); + p->sci(FTOF1A)->getEnergy(); + p->sci(FTOF1B)->getEnergy(); + p->sci(FTOF2)->getEnergy(); + p->trk(DC)->getSector(); + p->che(HTCC)->getNphe(); + p->che(LTCC)->getNphe(); + break; + case FT : + p->ft(FTCAL)->getEnergy(); + p->ft(FTHODO)->getEnergy(); + break; + case CD: + p->sci(CTOF)->getEnergy(); + p->sci(CND)->getEnergy(); + break; + } + // covariance matrix (comment in to see!) + // p->covmat()->print(); + p->cmat(); + } + // get particles by type (+1s overhead per 1M (include fill hist)) + auto electrons=event.getByID(11); + auto gammas=event.getByID(22); + auto protons=event.getByID(2212); + auto pips=event.getByID(211); + auto pims=event.getByID(-211); + + if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && + pips.size()==1 &&pims.size() == 1){ + + // set the particle momentum + // if we wanted to integrate more ROOT we could + // return direct TLorentzVector + // i.e. auto el = electrons[0]->p4(); etc. + el->SetXYZM(electrons[0]->par()->getPx(),electrons[0]->par()->getPy(), + electrons[0]->par()->getPz(),el->M()); + pr->SetXYZM(protons[0]->par()->getPx(),protons[0]->par()->getPy(), + protons[0]->par()->getPz(),pr->M()); + g1->SetXYZM(gammas[0]->par()->getPx(),gammas[0]->par()->getPy(), + gammas[0]->par()->getPz(),0); + g2->SetXYZM(gammas[1]->par()->getPx(),gammas[1]->par()->getPy(), + gammas[1]->par()->getPz(),0); + pip->SetXYZM(pips[0]->par()->getPx(),pips[0]->par()->getPy(), + pips[0]->par()->getPz(),pip->M()); + pim->SetXYZM(pims[0]->par()->getPx(),pims[0]->par()->getPy(), + pims[0]->par()->getPz(),pim->M()); + + TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; + hmiss->Fill(miss.M2()); + + } + + counter++; + // if(counter==1E6) break; + + } + gBenchmark->Stop("timer"); + gBenchmark->Print("timer"); + hmiss->DrawCopy(); + + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "<getSize(); double starttime = event.header().getStartTime(); int pcount=0; while(event.next_particle()){ - int pid = event.particles().getPid(); + //std::cout<<" particle "<getPid(); float time=event.getTime()-starttime; float ECal=event.getCalTotEnergy(); - float PCalE=event.calorimeter().getEnergy(); //precal by default + float PCalE=cal->getEnergy(); //precal by default event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); + float PCalTime=cal->getTime(); event.getHTCC(); - int nHTCC=event.cherenkov().getNphe(); + int nHTCC=cher->getNphe(); event.getLTCC(); - int nLTCC=event.cherenkov().getNphe(); + int nLTCC=cher->getNphe(); float trchi2=event.getTrackChi2(); - } - + // if(event.isFT()) std::cout<< " FT HIT "< elapsed = finish - start; diff --git a/RunRoot/MesonexEvent.C~ b/RunRoot/MesonexEvent.C~ deleted file mode 100644 index 56651ed..0000000 --- a/RunRoot/MesonexEvent.C~ +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - - gBenchmark->Start("clas12root"); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<Stop("clas12root"); - gBenchmark->Print("clas12root"); - -} diff --git a/RunRoot/MesonexEventHist.C b/RunRoot/MesonexEventHist.C index 12d43d9..37cd377 100644 --- a/RunRoot/MesonexEventHist.C +++ b/RunRoot/MesonexEventHist.C @@ -41,7 +41,7 @@ void MesonexEventHist(){ TH2F* hPth=new TH2F("ThetaP","#theta v p",100,0,12,100,0,180); TLorentzVector p4; - clas12::particle pars= event.particles(); + clas12::particle *pars= event.particles_ptr(); int counter=0; while(reader.next()==true){ @@ -50,13 +50,13 @@ void MesonexEventHist(){ double starttime = event.header().getStartTime(); while(event.next_particle()){ - int pid = event.particles().getPid(); - p4.SetXYZM(pars.getPx(),pars.getPy(),pars.getPz(),0); + int pid = pars->getPid(); + p4.SetXYZM(pars->getPx(),pars->getPy(),pars->getPz(),0); hPth->Fill(p4.P(),p4.Theta()*TMath::RadToDeg()); float time=event.getTime(); event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); + float PCalTime=event.calorimeter_ptr()->getTime(); float tdiff=time-PCalTime; if(tdiff!=0)htdiff->Fill(tdiff); } diff --git a/RunRoot/MesonexEventTree.C~ b/RunRoot/MesonexEventTree.C~ deleted file mode 100644 index 56651ed..0000000 --- a/RunRoot/MesonexEventTree.C~ +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - - gBenchmark->Start("clas12root"); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<Stop("clas12root"); - gBenchmark->Print("clas12root"); - -} diff --git a/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm b/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm deleted file mode 100644 index 7587ced8c9906c4ca3fece533ddcb1e325403350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1179 zcmb`H!AiqG5QZl;MJ-ZL5$P>=!C=9gNJFe5v|36~1aVE%twh^w$ZlJED1y)6tvAob zNAM*041y2Pi}n?q-3raElqN8{%ffv7&p$&V#st9l8vyD6`T%1G&mo3}G1UJLxXIJy z=hww=e|_}&p=t2+KAv39UPmB7&o@804m1=QUjs-x$9|I@nOzn=m|oN6dwJ7Vo5NT$ zZ&uqu6$P4Q%2_}kiyayWViU_Q`8KKho* zR@IqP`6seYtt9hTo%7ng6-90@OGqVRg2^g5<(pPuxbog$4TIJ0sV8^=U<;O%Nsz+q z_;(%S+lsIBP5Bu@oL)%lv@tjPD#k8Ic4`Hmj%i;eq!_eYbA!tYtSeJa71)*FYzM1l z(E%5cAKV>o5Ml)$<#<)G%V%zj^0kR0hVVs`PHe!Q;3R3=3Z^CryMnMJCkc6ST9fD{ iVis)~A{Ocl<|o#GP#Ke%ny-Eq$(oOYrw_XOFYpHg +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "region_fdet.h" + +using namespace clas12; + + +void RegionFDET(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<("REC::Particle",reader); + auto banksPART=make_shared();banksPART->init("REC::Particle",reader); + + //make a link to the REC::Calorimeter banks + // auto banksCAL=make_shared("REC::Calorimeter",reader); + auto banksCAL=make_shared();banksCAL->init("REC::Calorimeter",reader); + //make a link to the REC::Scintillator banks + auto banksSCINT=make_shared();banksSCINT->init("REC::Scintillator",reader); + //make a link to the REC::Tracker banks + auto banksTRCK=make_shared();banksTRCK->init("REC::Track",reader); + //make a link to the REC::Cherenkov banks + auto banksCHER=make_shared();banksCHER->init("REC::Cherenkov",reader); + + + + //connect ft and particle banks to detector_region for parsing + clas12::region_fdet FDet(banksPART,banksCAL,banksSCINT,banksTRCK,banksCHER); + + + int counter=0; + while(reader.next()==true){ + auto Np=banksPART->getSize(); + + for(int i=0;isetEntry(i); + FDet.coordinate(); + // cout<setIndex(0); + // cout< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "< #include #include "reader.h" -#include "mesonex_event.h" +#include "particle.h" +#include "forwardtagger.h" +#include "region_ft.h" +using namespace clas12; -void MesonexEvent(){ +void RegionFT(){ // Record start time auto start = std::chrono::high_resolution_clock::now(); @@ -29,40 +32,35 @@ void MesonexEvent(){ exit(0); } cout<<"Analysing hipo file "<(forwardtagger("REC::ForwardTagger",reader)); - //clas12::vector3 electron; + //make a link to the REC::Particles bank + auto banksPart=make_shared(particle("REC::Particle",reader)); + + //connect ft and particle banks to detector_region for parsing + clas12::region_ft FT(banksPart,banksFT); + + int counter=0; while(reader.next()==true){ - event.reset(); - int np = event.particles().getSize(); - - double starttime = event.header().getStartTime(); - int pcount=0; - while(event.next_particle()){ - int pid = event.particles().getPid(); - float time=event.getTime()-starttime; - float ECal=event.getCalTotEnergy(); - float PCalE=event.calorimeter().getEnergy(); //precal by default - event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); - event.getHTCC(); - int nHTCC=event.cherenkov().getNphe(); - event.getLTCC(); - int nLTCC=event.cherenkov().getNphe(); - float trchi2=event.getTrackChi2(); - } - - counter++; - if(counter==1E7) break; + + FT.configure_event(); + auto calor=FT.CAL(); + calor->setIndex(0); + cout< elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "<Getenv("CLAS12TOOL"))!=TString()){ + if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")){ + if(gSystem->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")==0){ //Found liblz4 in LD_LIBRARY_PATH gROOT->ProcessLine("#define __LZ4__"); gSystem->AddIncludePath("-D__LZ4__"); @@ -38,8 +38,12 @@ gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); - // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/covmatrix.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/hallB_event.cpp+"); } From e2377ed545fb380d81bc676c1328be411a822edd Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 11:42:35 +0000 Subject: [PATCH 07/56] add ROOT stuff --- Banks/Makefile | 2 +- Banks/calorimeter.cpp | 44 ++++++++ Banks/calorimeter.h | 174 ++++++++++++++++++++++++++++++ Banks/cherenkov.cpp | 34 ++++++ Banks/cherenkov.h | 109 +++++++++++++++++++ Banks/clas12defs.h | 24 +++++ Banks/clas12event.h | 13 +-- Banks/forwardtagger.cpp | 35 ++++++ Banks/forwardtagger.h | 114 ++++++++++++++++++++ Banks/mesonex_event.cpp | 101 +++++++++++++++++ Banks/mesonex_event.h | 180 +++++++++++++++++++++++++++++++ Banks/particle.cpp | 21 ++-- Banks/particle.h | 36 +++++-- Banks/particle_detector.cpp | 79 ++++++++++++++ Banks/particle_detector.h | 101 +++++++++++++++++ Banks/scintillator.cpp | 35 ++++++ Banks/scintillator.h | 118 ++++++++++++++++++++ Banks/tracker.cpp | 34 ++++++ Banks/tracker.h | 114 ++++++++++++++++++++ Examples/Makefile | 7 +- Examples/analysis | Bin 0 -> 267048 bytes Examples/clas12event_example | Bin 0 -> 277512 bytes Examples/clas12event_example.cc | 12 ++- Examples/mesonexevent_example | Bin 0 -> 311264 bytes Examples/mesonexevent_example.cc | 77 +++++++++++++ Examples/readBanks | Bin 0 -> 266256 bytes Examples/readParticles | Bin 0 -> 266592 bytes Hipo/Makefile | 2 +- RunRoot/MesonexEvent.C | 68 ++++++++++++ RunRoot/MesonexEventHist.C | 75 +++++++++++++ RunRoot/MesonexEventTree.C | 69 ++++++++++++ RunRoot/README | 8 ++ RunRoot/importToROOT.C | 45 ++++++++ 33 files changed, 1694 insertions(+), 37 deletions(-) create mode 100644 Banks/calorimeter.cpp create mode 100644 Banks/calorimeter.h create mode 100644 Banks/cherenkov.cpp create mode 100644 Banks/cherenkov.h create mode 100644 Banks/clas12defs.h create mode 100644 Banks/forwardtagger.cpp create mode 100644 Banks/forwardtagger.h create mode 100644 Banks/mesonex_event.cpp create mode 100644 Banks/mesonex_event.h create mode 100644 Banks/particle_detector.cpp create mode 100644 Banks/particle_detector.h create mode 100644 Banks/scintillator.cpp create mode 100644 Banks/scintillator.h create mode 100644 Banks/tracker.cpp create mode 100644 Banks/tracker.h create mode 100755 Examples/analysis create mode 100755 Examples/clas12event_example create mode 100755 Examples/mesonexevent_example create mode 100644 Examples/mesonexevent_example.cc create mode 100755 Examples/readBanks create mode 100755 Examples/readParticles create mode 100644 RunRoot/MesonexEvent.C create mode 100644 RunRoot/MesonexEventHist.C create mode 100644 RunRoot/MesonexEventTree.C create mode 100644 RunRoot/README create mode 100644 RunRoot/importToROOT.C diff --git a/Banks/Makefile b/Banks/Makefile index b780cc0..70e63bb 100644 --- a/Banks/Makefile +++ b/Banks/Makefile @@ -9,7 +9,7 @@ LZ4INCLUDES := -I../Lz4/lib/ -I../Hipo libhipo: checkdirs $(OBJECTS) ar cr ../lib/libclas12banks.a $(OBJECTS) -# $(CXX) -shared -fPIC -o ../lib/libclas12banks.so $(OBJECTS) -llz4 +# $(CXX) -shared -fPIC -o ../lib/libclas12banks.so $(OBJECTS) -L../Lz4/lib/ -llz4 show: diff --git a/Banks/calorimeter.cpp b/Banks/calorimeter.cpp new file mode 100644 index 0000000..54bc79a --- /dev/null +++ b/Banks/calorimeter.cpp @@ -0,0 +1,44 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "calorimeter.h" + + +namespace clas12 { + + + void calorimeter::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" calorimeter::init "<-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in calorimeter bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDu(){ + if(_index>-1)return getFloat(_du_order,_index); + return 0; + } + double getDv(){ + if(_index>-1)return getFloat(_dv_order,_index); + return 0; + } + double getDw(){ + if(_index>-1)return getFloat(_dw_order,_index); + return 0; + } + double getHx(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHy(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHz(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getLu(){ + if(_index>-1)return getFloat(_lu_order,_index); + return 0; + } + double getLv(){ + if(_index>-1)return getFloat(_lv_order,_index); + return 0; + } + double getLw(){ + if(_index>-1)return getFloat(_lw_order,_index); + return 0; + } + double getM2u(){ + if(_index>-1)return getFloat(_m2u_order,_index); + return 0; + } + double getM2v(){ + if(_index>-1)return getFloat(_m2v_order,_index); + return 0; + } + double getM2w(){ + if(_index>-1)return getFloat(_m2w_order,_index); + return 0; + } + double getM3u(){ + if(_index>-1)return getFloat(_m3u_order,_index); + return 0; + } + double getM3v(){ + if(_index>-1)return getFloat(_m3v_order,_index); + return 0; + } + double getM3w(){ + if(_index>-1)return getFloat(_m3w_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _chi2_order=-1; + int _du_order=-1; + int _dv_order=-1; + int _dw_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _lu_order=-1; + int _lv_order=-1; + int _lw_order=-1; + int _m2u_order=-1; + int _m2v_order=-1; + int _m2w_order=-1; + int _m3u_order=-1; + int _m3v_order=-1; + int _m3w_order=-1; + int _status_order=-1; + + + + }; //class calorimeter + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/cherenkov.cpp b/Banks/cherenkov.cpp new file mode 100644 index 0000000..fa7c8e1 --- /dev/null +++ b/Banks/cherenkov.cpp @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "cherenkov.h" + + +namespace clas12 { + + + void cherenkov::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" cherenkov::init "<-1)return getFloat(_time_order,_index); + return 0; + } + int getNphe(){ + if(_index>-1)return getFloat(_nphe_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getTheta(){ + if(_index>-1)return getFloat(_theta_order,_index); + return 0; + } + double getPhi(){ + if(_index>-1)return getFloat(_phi_order,_index); + return 0; + } + double getDtheta(){ + if(_index>-1)return getFloat(_dtheta_order,_index); + return 0; + } + double getDPhi(){ + if(_index>-1)return getFloat(_dphi_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + private: + + int _nphe_order=-1; + int _path_order=-1; + int _time_order=-1; + int _dphi_order=-1; + int _dtheta_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _theta_order=-1; + int _phi_order=-1; + int _chi2_order=-1; + int _status_order=-1; + + + + }; //class cherenkov + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h new file mode 100644 index 0000000..a604b4c --- /dev/null +++ b/Banks/clas12defs.h @@ -0,0 +1,24 @@ +#ifndef CLAS12DEFS_H +#define CLAS12DEFS_H + + +namespace clas12{ + static const double FTOF = 12; + static const double CTOF = 4; + static const double CND = 3; + static const double EC = 7; + static const double FTCAL = 10; + static const double FTHODO = 11; + static const double HTCC = 15; + static const double LTCC = 16; + + + static const double FTOF1A = 121; + static const double FTOF1B = 122; + static const double PCAL = 71; + static const double ECIN = 72; + static const double ECOUT = 73; + +} + +#endif diff --git a/Banks/clas12event.h b/Banks/clas12event.h index 8e69d5d..94677cd 100644 --- a/Banks/clas12event.h +++ b/Banks/clas12event.h @@ -25,21 +25,12 @@ #include "detector.h" #include "vectors.h" #include "header.h" +#include "clas12defs.h" namespace clas12 { - static const double FTOF = 12; - static const double HTCC = 15; - static const double EC = 7; - - - static const double FTOF1A = 121; - static const double FTOF1B = 122; - static const double PCAL = 71; - static const double ECIN = 72; - static const double ECOUT = 73; - + class clas12event { private: diff --git a/Banks/forwardtagger.cpp b/Banks/forwardtagger.cpp new file mode 100644 index 0000000..0646abd --- /dev/null +++ b/Banks/forwardtagger.cpp @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "forwardtagger.h" + + +namespace clas12 { + + + void forwardtagger::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" forwardtagger::init "<-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDx(){ + if(_index>-1)return getFloat(_dx_order,_index); + return 0; + } + double getDy(){ + if(_index>-1)return getFloat(_dy_order,_index); + return 0; + } + double getRadius(){ + if(_index>-1)return getFloat(_radius_order,_index); + return 0; + } + int getSize(){ + if(_index>-1)return getInt(_size_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _dx_order=-1; + int _dy_order=-1; + int _radius_order=-1; + int _size_order=-1; + int _chi2_order=-1; + + + + }; //class forwardtagger + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/mesonex_event.cpp b/Banks/mesonex_event.cpp new file mode 100644 index 0000000..ed0867d --- /dev/null +++ b/Banks/mesonex_event.cpp @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12defs.h" +#include "mesonex_event.h" + + +namespace clas12 { + + void mesonex_event::init(hipo::reader &r){ + _particles.init("REC::Particle",r); + _header.init("REC::Event",r); + _calorimeter.init("REC::Calorimeter",r); + _tof.init("REC::Scintillator",r); + _cherenkov.init("REC::Cherenkov",r); + _ft.init("REC::ForwardTagger",r); + _track.init("REC::Track",r); + } + + vecPIDs mesonex_event::pids(){ + vecPIDs temp(_particles.getSize()); + + for(int ip=0; ip<_particles.getSize(); ip++) + temp[ip]=_particles.getPid(ip); + + return temp; + } + + bool mesonex_event::next_particle(){ + auto nparts=_particles.getSize(); + + //check if another particle + if( _pentry == nparts) + return false; + + _particles.setEntry(_pentry); + + checkTof(); //find prefered ToF hit + + checkFT(); //sort FT hodo&cal hit + + checkTrack(); //find particle track + + checkCalorimeter(); //set PCAL + + // _cherenkov.print(); + _pentry++; + return true; + } + + /////////////////////////////////////////////////////////////// + //Find hodo and cal hits to get time, and delta E etc. + void mesonex_event::checkFT(){ + _pftcal=_ft.getIndex(_pentry,clas12::FTCAL); + _pfthodo=_ft.getIndex(_pentry,clas12::FTHODO); + } + /////////////////////////////////////////////////////////////// + //if FTOF save tof index with preference layer1, layer2, layer0 + //if CTOF save preference CTOF then CND + void mesonex_event::checkTof(){ + _ptof=-1;//particle tof index + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1) + return; + + if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1) + return; + + } + + //////////////////////////////////////////////////////////////// + //Look for track for this particle + void mesonex_event::checkTrack(){ + //return _tracker + auto trackids=_track.scanForParticle(_pentry); + if(trackids.size()){ + //should only be 1 track per particle so just take first index + _track.setIndex(trackids[0]); + } + else _track.setIndex(-1); + } + + ////////////////////////////////////////////////////////////////// + ///Use PCAL for time, path, sector,... + void mesonex_event::checkCalorimeter(){ + getPCAL(); + } +}//namespace clas12 + diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h new file mode 100644 index 0000000..fba4d64 --- /dev/null +++ b/Banks/mesonex_event.h @@ -0,0 +1,180 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: mesonex_event.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef MESONEX_EVENT_H +#define MESONEX_EVENT_H + +#include +#include +#include +#include +#include +#include +#include +#include "particle.h" +#include "particle_detector.h" +#include "scintillator.h" +#include "calorimeter.h" +#include "cherenkov.h" +#include "forwardtagger.h" +#include "tracker.h" +#include "header.h" +#include "clas12defs.h" + +namespace clas12 { + + + using vecPIDs=std::vector; + + class mesonex_event { + + public: + + mesonex_event()=default; + + mesonex_event(hipo::reader &r) { + init(r); + } + + ~mesonex_event()=default; + + void init(hipo::reader &r); + void reset(){_pentry=0;}; + bool next_particle(); + + vecPIDs pids(); + + void checkTof(); + void checkFT(); + void checkTrack(); + void checkCalorimeter(); + + double getCalTotEnergy(); + double getTime(); + int getSector(); + double getPath(); + double getDeltaE(); + double getTrackChi2(); + + int getPCAL(); + int getECIN(); + int getECOUT(); + int getHTCC(); + int getLTCC(); + + clas12::particle &particles(){return _particles;} + clas12::header &header(){ return _header;} + clas12::calorimeter &calorimeter(){ return _calorimeter;} + clas12::scintillator &tof(){return _tof;} + clas12::cherenkov &cherenkov(){return _cherenkov;} + clas12::forwardtagger &ft(){return _ft;} + clas12::tracker &track(){return _track;} + + const int getNParticles(){return _particles.getSize();} + + bool isFT(){return _pftcal!=-1;} + + private: + + + clas12::particle _particles; + clas12::header _header; + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + short _ptof=0; + short _pftcal=0; + short _pfthodo=0; + short _pentry=0; + + }; + inline double mesonex_event::getCalTotEnergy(){ + if(_pftcal>-1) return _ft.getEnergy(); + //note FT hit use EC + double energy = 0.0; + getPCAL(); + energy += _calorimeter.getEnergy(); + getECIN(); + energy += _calorimeter.getEnergy(); + getECOUT(); + energy += _calorimeter.getEnergy(); + return energy; + } + + inline int mesonex_event::getPCAL(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 1); + } + + + inline double mesonex_event::getTime(){ + if(_ptof>=0) + return _tof.getTime(); + if(_pftcal>=0) + return _ft.getTime(); + //if no tof hit use EC time + // _calorimeter.getIndex(clas12::EC, 1, _pentry); + return _calorimeter.getTime(); + } + inline int mesonex_event::getSector(){ + if(_ptof>=0) + return _tof.getSector(); + if(_pftcal>=0) + return 0; + //if no tof hit use EC time + return _calorimeter.getSector(); + } + inline double mesonex_event::getPath(){ + if(_ptof>=0) + return _tof.getPath(); + if(_pftcal>=0){ //currently no FT path reported + double ftx=_ft.getX(); + double fty=_ft.getY(); + double ftz=_ft.getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + } + return _ft.getPath(); + //if no tof hit use EC time + return _calorimeter.getPath(); + } + inline double mesonex_event::getDeltaE(){ + if(_ptof>=0) + return _tof.getEnergy(); + if(_pfthodo>=0) + return _ft.getEnergy(); + return 0; + } + + inline int mesonex_event::getECIN(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 4); + } + inline int mesonex_event::getECOUT(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 7); + } + inline int mesonex_event::getHTCC(){ + return _cherenkov.getIndex( _pentry,clas12::HTCC); + } + inline int mesonex_event::getLTCC(){ + return _cherenkov.getIndex( _pentry,clas12::LTCC); + } + inline double mesonex_event::getTrackChi2(){ + int ndf= _track.getNDF(); + if(ndf) + return _track.getChi2()/ndf; + return 0; + } +} + +#endif /* UTILS_H */ diff --git a/Banks/particle.cpp b/Banks/particle.cpp index 9f100ea..448f798 100644 --- a/Banks/particle.cpp +++ b/Banks/particle.cpp @@ -9,14 +9,19 @@ namespace clas12 { -void particle::init(const char *bankName, hipo::reader &r){ - initBranches(bankName,r); - pid_order = getEntryOrder("pid"); - px_order = getEntryOrder("px"); - py_order = getEntryOrder("py"); - pz_order = getEntryOrder("pz"); -} + void particle::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + pid_order = getEntryOrder("pid"); + px_order = getEntryOrder("px"); + py_order = getEntryOrder("py"); + pz_order = getEntryOrder("pz"); + vx_order = getEntryOrder("vx"); + vy_order = getEntryOrder("vy"); + vz_order = getEntryOrder("vz"); + ch_order = getEntryOrder("charge"); + st_order = getEntryOrder("status"); + + } - particle::~particle(){} } diff --git a/Banks/particle.h b/Banks/particle.h index d402689..057ddfc 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -37,19 +37,18 @@ namespace clas12 { int vx_order; int vy_order; int vz_order; - + int ch_order; + int st_order; + + short _entry=0; + public: - particle(){}; + particle() = default; - particle(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ - pid_order = getEntryOrder("pid"); - px_order = getEntryOrder("px"); - py_order = getEntryOrder("py"); - pz_order = getEntryOrder("pz"); - } + particle(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){}; - ~particle(); + ~particle() = default; void init(const char *bankName, hipo::reader &r); @@ -57,6 +56,21 @@ namespace clas12 { float getPx(int index) { return getFloat(px_order,index);} float getPy(int index) { return getFloat(py_order,index);} float getPz(int index) { return getFloat(pz_order,index);} + float getVx(int index) { return getFloat(vx_order,index);} + float getVy(int index) { return getFloat(vy_order,index);} + float getVz(int index) { return getFloat(vz_order,index);} + int getCharge(int index) { return getFloat(ch_order,index);} + int getStatus(int index) { return getFloat(st_order,index);} + + int getPid() { return getInt(pid_order,_entry);} + float getPx() { return getFloat(px_order,_entry);} + float getPy() { return getFloat(py_order,_entry);} + float getPz() { return getFloat(pz_order,_entry);} + float getVx() { return getFloat(vx_order,_entry);} + float getVy() { return getFloat(vy_order,_entry);} + float getVz() { return getFloat(vz_order,_entry);} + int getCharge() { return getFloat(ch_order,_entry);} + int getStatus() { return getFloat(st_order,_entry);} void getVector3(int index, vector3 &vect){ vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), @@ -67,12 +81,14 @@ namespace clas12 { vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), getFloat(pz_order,index),mass); } + void setEntry(short i){ _entry=i;} + /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort * particles and or map particles by pid or type (i.e. charge) */ - void notify(){ + void notify() override { //printf("particle class is read again\n"); } }; diff --git a/Banks/particle_detector.cpp b/Banks/particle_detector.cpp new file mode 100644 index 0000000..dabee63 --- /dev/null +++ b/Banks/particle_detector.cpp @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "particle_detector.h" +#include +#include + +namespace clas12 { + + + void particle_detector::init(const char *bankName, hipo::reader &r, std::string items){ + //if items exists use it to select only banks you want to use + readItems(items); + + initBranches(bankName,r); //init bank + //base detector need detector and pindex items + _detector_id_order = getEntryOrder("detector"); + _pindex_order = getEntryOrder("pindex"); + } + /////////////////////////////////////////////////////////////////////// + /// load items to be used + void particle_detector::readItems(std::string items){ + std::stringstream ss(items); + std::string sitem; + while(std::getline(ss, sitem, ':')) + _sitems.push_back(sitem); + } + /////////////////////////////////////////////////////////////////////// + ///check if item should be used + bool particle_detector::useItem(std::string item){ + if(!(_sitems.size())) return true; + if(std::find(_sitems.begin(),_sitems.end(),"c")!=_sitems.end()) + return true; + return false; + } + //////////////////////////////////////////////////////////////////////// + ///function to map the detector entry to particle index + void particle_detector::scanIndex(){ + _rmap.clear(); + const int size = getSize(); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer= getLayer(i); + int pindex = getPindex(i); + int key = (detector<<16)|(layer<<8)|pindex; + _rmap[key] = i; + } + } + //////////////////////////////////////////////////////////////////////// + ///function to find the current entries associated + ///with pindex = iparticle + std::vector particle_detector::scanForParticle(short iparticle){ + const int size = getSize(); + std::vector pindices(0); + for(short i = 0; i < size; i++){ + int pindex = getPindex(i); + if(iparticle==pindex){ + int detector = getDetector(i); + int layer = getLayer(i); + int key = (detector<<16)|(layer<<8)|pindex; + pindices.push_back(i); + } + } + return pindices; + } + + + + void particle_detector::print(){ + const int size=getSize(); + std::cout<<"Print detector with "< +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class particle_detector : public hipo::bank { + + + public: + + + particle_detector()=default; + + particle_detector(const char *bankName, hipo::reader &r) : + hipo::bank(bankName,r){}; + + virtual ~particle_detector()=default; + + ///////////////////////////////////////////////////////////// + //abstract function to be overwritten + //this should include getting the item order from the bank + virtual void init(const char *bankName, hipo::reader &r,std::string items=""); + + /////////////////////////////////////////////////////////////// + //utiltiy functions, same for derived classes + void scanIndex(); + std::vector scanForParticle(short iparticle); + void readItems(std::string items); + bool useItem(std::string item); + + /////////////////////////////////////////////////////////////// + //getter functions, same for derived classes + //get detector id + int getDetector(int index) { return getInt(_detector_id_order,index);} + int getDetector() { return getInt(_detector_id_order,_index);} + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + + //given a detector (layer if exists) and pindex find the position in this bank + int getIndex(int pindex, int detector, int layer=0) { + int key = (detector<<16)|(layer<<8)|pindex; + if(_rmap.count(key)>0) { + _index = _rmap[key]; + return _index; + } + return _index=-1; + } + void setIndex(int ind){_index=ind;} + + //////////////////////////////////////////////////////////////// + //virtual functions can be overridden in derived class + virtual int getLayer(int index=0){return 0;} + virtual int getLayer(){return 0;} + virtual void print(); + + //////////////////////////////////////////////////////////////// + //override header notify, called at start of event + void notify() override { scanIndex(); } + + + protected: + + int _detector_id_order=-1; + int _pindex_order=-1; + int _index=-1; + + std::map _rmap; + std::vector _sitems; + + }; + +} + +#endif /* PARTICLE_DETECTOR_H */ diff --git a/Banks/scintillator.cpp b/Banks/scintillator.cpp new file mode 100644 index 0000000..e198c51 --- /dev/null +++ b/Banks/scintillator.cpp @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "scintillator.h" + + +namespace clas12 { + + + void scintillator::init(const char *bankName, hipo::reader &r,std::string items){ + std::cout<<" scintilator::init "<-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in scintillator bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getHX(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHY(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHZ(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _chi2_order=-1; + + + + }; //class scintillator + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Banks/tracker.cpp b/Banks/tracker.cpp new file mode 100644 index 0000000..ef6dfbb --- /dev/null +++ b/Banks/tracker.cpp @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "tracker.h" + + +namespace clas12 { + + + void tracker::init(const char *bankName, hipo::reader &r,std::string items){ + + particle_detector::init(bankName,r,items); + + if(useItem("sector"))_sector_order = getEntryOrder("sector"); + if(useItem("status"))_status_order = getEntryOrder("status"); + if(useItem("px_nomm"))_pxnomm_order = getEntryOrder("px_nomm"); + if(useItem("py_nomm"))_pynomm_order = getEntryOrder("py_nomm"); + if(useItem("pz_nomm"))_pznomm_order = getEntryOrder("pz_nomm"); + if(useItem("vx_nomm"))_vxnomm_order = getEntryOrder("vx_nomm"); + if(useItem("vy_nomm"))_vynomm_order = getEntryOrder("vy_nomm"); + if(useItem("vz_nomm"))_vznomm_order = getEntryOrder("vz_nomm"); + if(useItem("NDF"))_NDF_order = getEntryOrder("NDF"); + if(useItem("NDF_nomm"))_NDFnomm_order = getEntryOrder("NDF_nomm"); + if(useItem("q"))_q_order = getEntryOrder("q"); + if(useItem("chi2"))_chi2_order = getEntryOrder("chi2"); + if(useItem("chi2_nomm"))_chi2nomm_order = getEntryOrder("chi2_nomm"); + + } + + +} diff --git a/Banks/tracker.h b/Banks/tracker.h new file mode 100644 index 0000000..eee4dfa --- /dev/null +++ b/Banks/tracker.h @@ -0,0 +1,114 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: tracker.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_TRACKER_H +#define CLAS12_TRACKER_H + +#include "particle_detector.h" + + +namespace clas12 { + + class tracker : public particle_detector { + + + public: + + + tracker()=default; + + tracker(const char *bankName, hipo::reader &r) + : particle_detector(bankName,r){}; + + virtual ~tracker()=default; + + //getter funtions for items in tracker bank + int getNDF(){ + if(_index>-1)return getInt(_NDF_order,_index); + return 0; + } + int getNDFnomm(){ + if(_index>-1)return getInt(_NDFnomm_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getPXnomm(){ + if(_index>-1)return getFloat(_pxnomm_order,_index); + return 0; + } + double getPYnomm(){ + if(_index>-1)return getFloat(_pynomm_order,_index); + return 0; + } + double getPZnomm(){ + if(_index>-1)return getFloat(_pznomm_order,_index); + return 0; + } + double getVXnomm(){ + if(_index>-1)return getFloat(_vxnomm_order,_index); + return 0; + } + double getVYnomm(){ + if(_index>-1)return getFloat(_vynomm_order,_index); + return 0; + } + double getVZnomm(){ + if(_index>-1)return getFloat(_vznomm_order,_index); + return 0; + } + int getCharge(){ + if(_index>-1)return getInt(_q_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + double getChi2nomm(){ + if(_index>-1)return getFloat(_chi2nomm_order,_index); + return 0; + } + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + + private: + + int _NDF_order=-1; + int _NDFnomm_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _pxnomm_order=-1; + int _pynomm_order=-1; + int _pznomm_order=-1; + int _vxnomm_order=-1; + int _vynomm_order=-1; + int _vznomm_order=-1; + int _q_order=-1; + int _chi2_order=-1; + int _chi2nomm_order=-1; + + + + }; //class tracker + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Examples/Makefile b/Examples/Makefile index 2fd5123..f152c83 100644 --- a/Examples/Makefile +++ b/Examples/Makefile @@ -15,7 +15,7 @@ LD := g++ LDFLAGS := $(ROOTLDFLAGS) -all: readBanks readParticles analysis clas12event_example +all: readBanks readParticles analysis clas12event_example mesonexevent_example readBanks: readBanks.o $(CXX) -o readBanks $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) @@ -29,9 +29,12 @@ analysis: analysis.o clas12event_example: clas12event_example.o $(CXX) -o clas12event_example $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) +mesonexevent_example: mesonexevent_example.o + $(CXX) -o mesonexevent_example $< $(ROOTCFLAGS) $(ROOTLDFLAGS) $(HIPOLIBS) $(LZ4LIBS) $(ROOTLIBS) + clean: @echo 'Removing all build files' - @rm -rf *.o readParticles readBanks analysis clas12event_example *~ + @rm -rf *.o readParticles readBanks analysis clas12event_example mesonexevent_example *~ %.o: %.cc $(CXX) -c $< -O2 $(ROOTCFLAGS) $(HIPOCFLAGS) $(LZ4INCLUDES) diff --git a/Examples/analysis b/Examples/analysis new file mode 100755 index 0000000000000000000000000000000000000000..8a75031e8b29e214f1a1f3528e9044f1d6cedfa8 GIT binary patch literal 267048 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�c$S?-f5*7 zN}kEojqNz)Q9Y1~@Agf+vF5$3WuH`;53G5w@}4aw<=waHbI;8c(#E21nD@Fg%lV6%eQA;5LwbHoj!8&=4Zq|Lb}%dXBhDv}+O}){ zjN=BWVz=RE4NMjKq!RgVhK|6W(MA-b=MDn7(FZz$zk}qh*G?3}bTF)R$Vk=ayZNms zIFR1gxe(*0m*|}uU++jxodK|BP%CT)Z3rjYMmEC!8|K}+cTzJ|ge<(dsaN^K#d>4( z^z)!~y!nxNtu!SRUdQ)d@b^n79P|_nDICY>Gce)ueJIIf^xXdb_hB`D0Y65*qx!j4 z_+3DR@K=Y)H*|j=|4V3MLhi<#I^W(Ryhpt*1Md~wxhe0i+(xw=B7=`ks z*`_@w<(;Q#{uW6Tm?Qxc3179AH}gtO66}??&?JFRxlRf6EFfJ=p1>zv6W5w7!DtiF z7fILb6f3;ESCMqhPO-wvPLXuYPO-wvPLyG}@E zJwm#cTtG;=zC$wsKI!@nlL(-~n{r-PyFpk#1pnG(0Y(Lb{G?rwg!8BUE-64qq95CN zqwa|MMM}fAo8G805MO!P$e;2wli!mZ!0qygJ41e{%N;$x$Ze3T5ucnE8m3O35 zE(c?|WXdJE)L=O42&?h4dZ>%^qkw&MqFE2=M*;gtrY!I-A^j*|A1PX=p*^G@1?;08 z2q(`E=|=(kXti0Vf)&t@?lx!qS7w7iB;X(2ZH~BWHX;P1yY+;V-HI}h?$!fNkC}GR zTLA^>Zav@hm}v*S6>yO5*5gf&nJ5YAZav-fm}#fr8L*J<*266eu#oPS!!46qAvCCs zpX6Tfkytvu(`2~P?xnP>1}hjI?(Jtu7gky=rJYyN_QnGMnWI@QLGg~z!@ZiP6%Til zJd(q`L6X!< z)3p1f))-ReQaEyH_ZM<>O%j*$Dhw2qwDd!IAv&D3?9iSoFBPQv*SN!P!J(b1)kaDz z=xEa&Ne=B)EjRL`7#02T@YGJ#aw8i?LksSZ_u<%1)p8>nMnMbikPXi5R4q5MVf3@< zjwA z%Z)5XPwvzK&9;mfHuO3FnEMIA2JAr}?TLBv)B}cDK2e`Kp5Meo*|gB9wg_+c-1cSfY{$ zn*2BZv*+?`aRvQpu4h0*JnXIKMXkNR*ntY1-A3dwDT1g4x}+R z^JU(u935Ww4*2kX3X#Y--&M>+9mB{EwBC6UgIIdh)@Em}&%}1xX2>edQh`R2$i`8-oVrt&M- zMDP@VE8Y)MQEe^pcz;1yQ?Mu1JD0q1Ii%tvL;sVIikK97WjNY2PA|{_BrpQ0z?YFl zMjezvDui;w2BQwjAQc152BQw_Qb@($_=lF5FM?7#)_@f5O(mpc42qS>w(Invw?|CYHOGN0SP@7&K54obpK z)CSU6!~J#8A+gTZ)BnMLz-j(2JjFrE2SL2n)%;Y7A+h9&(cbgKG?JeQBxKbo90`LX z4pYN{oJ7FHKnrCxnUpm5skH%+_)BL5K;kB}zqqajWY~-K094qA`%zG#d_A9Gjoaa8 z>+`%Z%7DlgfyDJ;{FyEEDZvvzCS4yxJTU-4!4sc|?1p&adQilQCk9Tq*>EE&;E8KK z)cixm6IWXe?{IWYyj>B`^&cXpmGNBVICD`kiqizDHe!r?dklZs#dmSWwog~anQvlU zzO(K;TfVbC+yb7o&BO^VW53$MIzoWRXfGDn~{X}*jDn-+7n zezGfgb6TFfkaoW!yc7`U9kf9jL{PKfK?6AV)WOj{f;x3Jk7D~A3HZ(^>TgoJC`VC$ zsJV}yBr~q6?dwJ-QHsw;P}EXyM}~>9^JOS%duy;3Bltk3?luxDAFaC;`_*=V2dnx2p#H`ceM_#WV*PE7$k+dA z{Y?N}ez)qk1>4nCw`x;=yG+t`z{Kc8Z8GoA zY!PoJxETgbJQZ{@oI_pgDyatt&>4Kh5IVD;{Mloa)qu|A22|%`P0|>jBX|H7EXhrv zGhdWo!$47E;3HpB3Z9W3>7zaQ z-0RFLeIlJro{d#Zd!l`itR|nH&^^nKPD`d=KuE( z47wmr-rum+S~0L3HSXc!$zjpuP(!#EuF#eOIHpYko@-cxQMe+FgRhnHz- zUD2Q>%_c}QlVS^-=<+*aw?4#NinIN?I=w$7jn?qGbfMR=6qDVmADXcg+k+;$poLyY zY&KIVGt#DNuE}bTBKD8)Cbf?ds_EkIlBEc-Zd8wrQhlFfG^f zN~x=}Rl`LA@HZ*C-MrqQJ4NV%-Sg15<$c82j*(gmKvY|;s zHcFF*Y-rMujbhS}MNJyASWFtSs7XT>i%CNkHEGCVF=@!6CJk9Ern_0xq#=tYX~+Vg zPSaqBq@i?O7@^{3WUZLs{@W)ATH?=Y@=&OqG-)&aE8bv3dLJX8dtlY8NJ<8n)VH5W z)YSLzr+HqO`W~`fA9eIxskcGiP#W=S-Vov4Lisbyd!J)~owUYfyJOqJZ4ma$^WNkQ zpUubCl078%g?bR&S32I5j=gLr+N{RI=q?jCD~^*ky+Quav>bXpPi{25qL24C&9}Aq zpb=Ezy`qK+gEECrWfIRwr_Vj!0UyknY1l(+2s(W(k{2=AqhUUGto!HqeLla&qqgmm z100DwOJcDdnFsTY#O1A}JCTC=}Kt3d1iW9<4t)-7wT`?pCm;`nCoV|+rr&Q5jNbHrl) zr|Pnw<&|2Oogr^gp)L!)SJo@kWy!wCPKCOxkI$}9m+fv|Q=u-~D(bglUG_<{Q=u;V zd$UuaF00DCLS5EsyurMtb8YtP{PoVY*$Y_hT$??c)y}n9npRh+&C+H`8io~Xvoi1E zLse&oP*(X6)!B}ZMWlFmH(sRa|K4(kdcbP7eZNQSuZXeA^M74^b|gQlp34uY&yE6W zrOzvyKZ2qn$rYJDGM+rXU*I|k*_6t`&vfZYP!8UH3^Kk%I>ff3x3LcnB)s)wXevQV0VVxlgbi7@M)Lg+o#I{Him*t#&sHw&w|C6 zA!Vs$|0|NrvV1o}YzNBA8i};Ps zv!-7K`DL=G^sA8kve4D{0{GvZc0X_WRY+VnTAJeXL++Pi(y(YT>6tEyNj$$M7XxOw zcJ6U-cXNU^zwAh+r(h-mB5%;gXTQW&^zpHqdl$P|%mW0HbC-%=oYC2)h{_GYNNqY= zFj9M8=e`!P&2CZ(24C5o(=$0}Tg3flSiov}_pa?%igC63is+ zPRoX&?gn)xHncr08%o{PIunc9o0dhT?rNQhMQu*YVzG|}i`t!*MWya)ory(lPs^fG zceT#MqV}g{QK`FwSO|OgOcONA`3D}!aqodA!|jm1+?x2cEbmI+O;cy0?WSL6 z(!6U0-uoCXwJA$mbe*gHWG;4q24?dw2#w1-Mfv8VQdc@V2gjBJzgYmc&O5CO&L)Zz zr18E?tTjXaLHZv$Acd;pG8g+N>K)#|4_NGnVH$Y)-B}j4w*AWFt0m<~eO6S1%98e; zm$NOb_ef#(wIbL3{bk8KF_5MEkROG@VONW#P|NTIg z4p190vUD|kBxI>M=!bO>T*}oNdBX56hL}8=@964)A72bH*#MVvb-<4=hL~)COSw8I z<`zRtHo&D^9q{9gED0`!4P@!+fFEyUNf1?RAWK&V{P<`;tb-t`uGZL-%T-yTAJ#$o zVOK8u$eQiwOD4E52 z1{byp*$Adl+ljuN()^~qqPO=woHVX0cx>44h+S*r9d3AFO4PRfB`DzoEslSNuarH}EM&bNJ&yi9;rG$`mUz z(ZSDy{u94oFwvntn8;aAenls8){C&z^KI7q^muCTOfQl|Nt2%k?Q)*O2h8JSPByJV zcNFJw7UzkjN2M#IxsgDCEJt2EpEecetOIT>w&YWar7#jPB@hKthMw%r2gnG^yT+SYxyy}8`wrF8e6zb z>KzC3iJh~YnALEdep6Q0g=d|rDtm6=1d zc;$5s2Svjozx67=Q_AJ{uwltw#MPwS8^orYo*}3n>P{`Vc!mOe#0=Jzat82XE`zT- zAPpG`FuGQxcobjVC`K7*!|SLNrv$ws^$ezG2Xg_}&<#xH0@CMVJ*)2uO|arTr_IiL zwgahl%x|6dBD|pucAR-QEfd|r4+kQAqu~fns61r*MoC&{+zHh!6HGC~XBFKdN6x)b zQqS!6Ynfnb8D{u3Jm4D*M{q*tA=@_^j^KpOL$+@mMkRxH>pW!pM#B-D(0R!A1nL+! zmT&}DOTGa)4(GBQ^ofGsHga6;%|aM8iOa|)l{9PFKTAdhyVmd%G1T`@JW@X%M$k$g zv^~Rl&bZ^Ll3hrZY^T*g_L_p>6;#Q-&P>U@nYz8%#9!x~5Y+rYVaL~aKNVdO#?xet ze7WcKukqDo3nyd1GKu#jwY;}&oiF!H&7@-}^U^_ar{XP(_wGSt<21CPhUoo5vdjiI z6q%EooC|;GxO8#qiCJ$ymJXn4zoiXr&4E`0ZXDU{pu)YW#qh02}JSU}w<%fyy zb>^=n@4<9|yn6}AsEIMsaF}VUaR$eRbvjI50yb)5cVPAYXo0iM4jm>h0UI^3hwPXr zqSoxtVe%5NQH<IoCNBXSHL<7cm^ea>0fPnD0UI?@#{Wjf3UCEy9Hj3e&?3ilRFU$@dCNBXSHBp8>`ZEPqm>s%IUII31VsWIv z9Nvj8lb4{WC(7VQGg07TR@)EF7 z69>qu)~$|Xg*>-EO<2Al?V-a!1d{`%0KW2DL2T4MN+L zuK=BELE1JdusHa|hXvzvt{_$Ur*bS&jE%l!CnX zI?7k)P;geZ-1T1GJuhaj80)1(3p<;<>p1A{Bn^v$K`s~Z>Xf@uE3Y~q10zNI>0E76 znu|!)uO5FOdtj&C@RF5wGaTyTB-46p`6;}fZr@hpbne)snDTT{ZEb% zWOJ-j?(HTvHncivoI2SYYj(`B9;(OsAjf*LIo9l$WBslkDruZL*&J(j%(32Wb~x6P zgJWGX%k&_}dU9~AOJ`Wh#wRCkID5oMkGFQzr*UI-F%H zjZ-HFM>?EkDveVo2S+-bWh#wRnG|b|v_H#~mEtT@jx;`3y(Ev4T8d5T`PD=F^`jUe z5O11Hr;-?rQnDnb^q_u)bwLIu@h|F4C6>d?FVpm

*hZ9)2EA3(xbAygusa*^^uK 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 literal 0 HcmV?d00001 diff --git a/Examples/clas12event_example b/Examples/clas12event_example new file mode 100755 index 0000000000000000000000000000000000000000..9d32299f507d313adb27c3ca65e1ab4b6d5f3179 GIT binary patch literal 277512 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

kTYM4_>5*@ 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⋘Jk$VhGQde^ z^4Ma4^VJEzv&{gPwoZ3;8sG?|JV&bm-rWPm{}X9|BQW$F?FP8~CKKH}W`N6Yda;Mr zdgX&p&3TS+16vaD3{?b0iwz z_=J+@uo&R@beZQ+4e)**DB^Sj9G`UZ9J38@d~(urWEXA83HDFu(^H;0*?NlmUL90Y1b4Uul4!Z-B2dz=s;(jRyEI1AL7E z9&La(8Q}68S9E)e0e*o2f13e5!T{fCfa6nMo}<+O7oQGf_jCh%vjy26&kPo??Jk z8Q^IKc(nmO$pBwrfKN8S)tW=$sxz!_%3wvUYjSkz*rwKO4Bz0v=ty|RGFa&t@*Mt} z23Sy{dI8;cw|3wd@)*@=DsXRO_4}z#Q-HgP)$gD>xqf#etKUp@a{2C+tbP;KX_|32 zu=--Elk0a^vwAtz$(-C}tbQHU$<@2FS$z)G$;G=fSp7<>lWTWdSbaLx$)&qvSbYlB z$(6e!S$!ha$%VVktbQTY$#uIGR*$1Pg$VBUlK>1EPIYqO?p9VGM0IlA?rp4oHr2^x zyPH_OH`U2iyBk@(JJrcWyH~P$C#sWcb~mv4FPETBF4PM(fp@_ST)elmgT(diy z)%R1KT(UcZ)pt>yT(R52>N}`Tp^`g>)!(H$xny@FtFNazxnj4O)!(E#xnQ@#>Mv8B zT(7(R1oi(Jsz*}2mDL}kI=Nc+Hdeo%>f~bGO{{(g)oD_6H?sQ8R3}&KUdie=QJq|@ zyMfggQ=MF^yPDO@sZK7{UB>FyQJq|=JDb(#P@P<;JA>7)q&m4yw}sWGQ=MFfB|levs`0!KJTrO5 zOjY|aQ#-CMJCu!)l&3mFhmZzTtu|^l0I^MaD4tba36&poQdHN3F6h&nq*JT5S?>lj z0*v~x_O@P~6@3Nds%kCzN<33@Jj8VC5V#A~^9#huiW0Dm9sE zV~L3C9s1(1{vk%V^OY$2?*>)Z4H2df9dD|Vv{Yp z9SYvJohf+81SpuC3M}a@`Xp{vHMaKaCv!c8-5P$6qJ$drSNmBz`r=&*Avjar_2}zyD{!|5Ayc z!SQ1`{)HSrN8-OM@iQcTB*zco_}w{voW#FL;xqY?Jlnw``n&x?CZApGlF(V=PnY;d zh!Ej7ar{R){xcl^Lv|PP86@#HNc;wlKcC|-=J-!a{3FLifA5m`*&IKa<4@uE3ncz} ziEo$qF&w`a$3L6nPnP(1F#OnWtlIW#Rc*gobD%wAhRqdr<-cfz^!(yIHc;LMjgG!A zBn?)6VEzR5^EoOrRae-jxT;CVRP9SgKZIa6Q57Lr&ucnb^GBHm)WWzG<(dr?b$RP} z{!v17CEU-*M4!a-YV*m?s@ASH>zAk@o7L?n9T6aC6$E<_!C>^NClsPzO66#^WsAsB}O|-81HGpA6UgggFsiTAN*<5oXQ(e|l4dB0I!cp?9ntMIiWM$=Fqgk`yy{9Zt4S@6F#YgR z7--FgNZhXcityCB-Hx8b4;+qrJMK16$SNQnYG6%*?cECtGu;8&iE+R z35d;A5DCwuhHSEieCD{=>Pn3=tIqCLEi_7XO$6J`rrMW4)vEQt15?aa%|-}QK&q44 zGLgb!W%EQc?!&!XooA{^M@+S3NvdlK2>-;0M89vIAhZpsK<)iL#|#ZLu6T{hw1aB%;jp$?Jm=4c zFAv0)hmZE(!iVab9Fp$5F`SsOhHOfAo}ZrdZ%1T<)p=1Amol@6JwJ4GSZg*$;%4Q6 zbmztCbsdgyo7SOkq#N3K=~_v+RVy*WV@JqYDLKnvAa6i9irV~nn5wzMm$_x~-M(B)=00Lb2b(?sgvm%&Q-=vhkD6j%&$R zB&n_p$R4^nU3JZZd2Dx#RW+FWG(c5=r$K#c_~uFY06jgZovF4=Vn)Kmr%ev`jAv8n zB(tfP#oYETA1B%oRom?DNo^Yjv_kgJB0@HTYYr8tEfjjd#3wVlhS)GQYBnZy*W?J? zV<|6HbCAuqs2Zf8&%yYHH#k0;yhBQa>Z+mfD{e>VDY$KO4f$;3U|gQ1K_9y{Uvu_A z!KOVVik5|0p43?U_M#{VLtpM7dulMQVR^RzXL7Tvt9^F>?3jBPD5w6)n{E*I?$ z^K0)J7R8aMYBoVshcPdF(oU>1W8J5p-G)}c=WN8KeA!cJ!tgIJ41fJhVvvbj&@d4r z;rgwN5K3ej3}X9&Q^Ppe1OwDBLY)jbp24q=iV()FryxZ^B+dF2hk@dp7jAP7PESIt z;ODZ2qYZLdZTnTsZSYrN`dQR0h<1Q2cOIOJ`+E9wCH@%9fF`Da+R(6BaH`O_r>_4zYf1%bKM{m!GT9~RjXJUFd9-?a7 zD(5DfUJH#{(TTyFn7y>La8fTxGTbZ4Oi0qq=2+n;NxNSW@0m=beds|bc_xO!E*srx z(YqZcVb4_Bo}zgIGxj6sx@*ESn_xWeeT#Ty1rTJs0}nHBI6RDSPaap)GMQ2+O3P$g z$VmERc(1AzpTM!Lj#Mq z$jv(w-A~M?1+Yb#nW^R;RdWwgfX$`==Q-^dfO;tI*BtBQD6Kix*)gT&Scqc?V#>~t z;X0bZu+Z*(2x6|;2(4dr4F!9(0HaN3XVqzmP{)ToHfpd^nV~vUB1~&ThY=?58oc*! z^4xcZt`fJge)2p&hwewR=huZ6c%Ikxb!=;U-rF9l@A0cYkG^t#*nFgY!sD@jQ#^JQ zT~(#NH)H1UG2%ovCBd4yQZ&Sdm=> zlGJ8|OP#dMsws85McM3`{+FsXyE>MwN{RW>{Np{!dS3@OZ_rDNxni&x}K)p4R8!60V3^x^$mte4tQ<| zW*-Mi$Ued=2Y40s(g-MQG$~AVhU!9LFq(g@_ZrO}HyV&e!|aji?_YnVzWQN;_;q~^ zCRw?9UJmB0r|QdokOc8xp|5$6!0*=AgU!&_qj=I!U(*}8Ib`8CqiALpMAEI-;QKE;2yC>v>wO~B1{VVl%1=0w=uD>(5 z{vK}Xr1%WBHRPW3CyC$x68$~<^&imRXX~K9&+(+6{%&P#?$Z}Qb^3Rx1l6Adsi~S{ zp+@~BW6I(B`yTp}F4U{PS!h)1&;HeapZ@-aoPf~Z5uZ47=ydk2Grr_#PffN z4!{1=tHXJ})n`V4OZ{B%dZ2$ z7i1y-i2%+9XpGM!MC&3APFa8WPAugSXjWOBcST`(P^?%H)4HVjI1)M(=!YE93t57I zVq{msk8gW*KK}sZM?oh&#AE#Pz-!%Z)2;NM0;al_bkLpH-PW2G#AKmSZNu{$YEFcj zY8T>m&51Bm?ZvDRZmPY76bZLwP1_^a@30@Gwq*AJ0^s9m`J2?JU1O5YqPm`D4?9p${W&|u7Y)L<13Lh_^;ri`7cc%A) z(%U|6`><_C+cu!JeQvZ*ihl4=F!$m&}uM_d$ zmh%wvI&Y|AQL&a5sk-V`5EffbuEt|XuVo``Hk;CGQM`XX^1Y2n8}e(jJ>soojaDWi zQ#VYHz}rr=6Hfe?D3Ec_!fj5Etqlz0jnWSKP*N>r4MzcwqKs3=BjOtEd%UkogoUdb zf*|CWu;?6S7>Bh{!*CO(n~1k1G}@4ZsEuL~b=_{YWjz`}E3k3`H&Ms&x{GcjJqin1 z|2b~E`XC&}7{{9^y_pu+7&Z|$=W`6t=Bxrqq+uu-hfI>Gc2Z|r$~_T9@w&t!8x3zW z3%{Q3TpB@1r>W`Ag~M#x{`91;tfomHQ=-jmbuNv>`z?JoTCQuVj7X3E%DN0;X~)u~ zW)wiP`ucULT65 z)Jg(FXmpzk&4oOu6j~$+?H0DoV?rxH$G5DF@c@M)=969lDEes>+|*9se1 z3r=jVvKZBA!^D8Rt}6o?EQ?f~LS{A1@Jw4wwN`oysHLzQEAcSOc&L^O!R4gEY12-& zq-3Cg)nm$RcGa9rNG&O4yqbdC1|?KlQmQy!O*LI{AYnv9mktzHvI2@VP3FxtM4Ylv z5-1b~2hegh8~}_LOIOYcp={=QMWT%?I~D08S4sx>&Blp|k5s8mwb<|&Mt4=XPXBWt z49%*wShZ~=h!`9GB${e(q9j)mlHLxa6p$_d8FewCV7%D0^<*D!?-7Gat+B*}xZeN+ zB9Bj_uBHXHc*0cIOyWb+=s)Gf8+Vemj&E$G3m7Rg)&3HSV%<>(rq$CqX3b_edX5P} zlPmC~B}{c!6TxL0$$J=9R&4&Lga!}mAA&D1UDpcx@)DU?W$1GK)60D0$8q!DpV464S7HtoD_`nZ8jR6 z%vP*Ob=i^*<9T{HkD2LFp(^;xve~K=IUiS5mA?BkQs6mJtltncAzNJw5gIKSrlpkW zZD+AMY-P!8{X8@!aA59`8NjJgWg;m&TQ9kpSjmejON;HWjn9j!GS$);Bqa1CH43Sd z6lgUyDnoTKE2nZK=>h(bIqFozT@h;Ymtj_C{0M#2^Jve3R-lw&+Isz4?2BL~gvVgZ z^Udn``4OhtENX)rPZ!oPW;V6?bw^FLIrNmXAY66gay5;A zgj6=I-AZZKO>L(OJ1&k;;m^`-&SLJ*euVe=i2QwT%!!aW(vW)oZt2l}v@Sa#J=zI0 zS$+LGshSRt_L{1-sqknZR=Juy8qD-Z$7Cc9;na{xI4GSO$ik_i!{NG#lRZz>+_q@9 zaQ~*;YRE?T6mWePa{r4Q>r}w>!@wtZMsKOC+D7il&|M4&)d_!vG&JJXHz>*Ag!;9; z$w&!X@Fc{4P<5>$n^q;ZW%>5{|Ozl_!LN88Yd?kYpWrUJ&b?-v&IUmrp`x;74(H!Zf zDIAG*?xRh;Qexb%vH%+Pt-5AF49i-!!7lYsY~FBpM)RukEm8~lY&Gd;G_&hd0zO+! zKxb~14Jqg0-uTK-&d&pxv;L_7b1_sY3d>*9q3ZA4W z@Ig{8(T9F@`blA%TU2N3?TBRBzND0O{U=;?H{vP%Y4lk?z@FcrpM&Rl*nSU9E7t(* zjswp!ze#cIahAMwh0Q(#6G;ny&xWfReWf~l_3ubzf8U!C$)<!}?ZA z5RkL7IahJUR;(oc5O`30X{uepCIUQegENPfv-JYzg0|E08)Q6dvpTOK|8GnBUNuen zfcbwG&vO5d77@{&WsAm|27?w6tqBFR0{^e=g!_LzT{|oT+E;AI_?k_%XQN%KGi#VN zX)nF#=gSCF-O~UgkhMnd6oKs02oc1ZZuuJCmK>;~Kol6@#xUQ} zg9iI+ANok-b*#aKL>fsVY&yIH1gP&207Ok5-rUw5{a=81{-|S$)p;%Y|BEf@xa>dT z`5Q6Hztsyso%bF)5dC_;j`jYHbnORF0&_zFVhQ_pOCQ>ulo&i-ys!7{SwcAKSENF*ALIE=%LQqn2 zgzCx!>tD5`SU?Kn3~(yoZE6f!+sr3IgzFF}rF+P>^k!NHQ=q)jRGY>~e~MX=av)tX z)M>tDuBc{{IT>BESd+fti?C?$NO84___YUnE1>N()lDP{H5+I9gs&D15aJ%~ApnD2 zlWrZ@@j=nR=O2I$0cm#%VUbO%&ax`i*-%Zrz}&uvt=s9Pt}Eg8XRt+6`&_0V_iraQ zFk5-wquvIJZ^2qS+*jj|n5U54>`v4@csagG8|zlfgl^a@tMUJ$Om9TzQ zC&h7{s_mg@j|b4B_2)5lQ|MyWnr+%qVG63V&v5;N_vsGOZ`|J@HHTcUE&3O=`Ij&? zY1hKntdL}X?7z9h>be}Qeu7rB&?+K6DC{uhMTXjKY+!G$O|*O_sNSbq$Xs%XvN})@?w3VO=8`B1@6KaYe{RY zGsgC0zM0|zdPP4>O*(0+-2_aVa{*dC4{z^nPQ0bN6pp1`jYi0ffMm1U{Bsx?h8bH0 zA^z`F?TG0na?R|Wu+~iXB7kbu-nTY)AizFpTAs{22$Z1QIKsmZf_l zj<04DM*hK&N~Da5meyuV(y{&9F(5$y=|S`#lU?OkYy{dm+u=*>ptNzAs_6z5%J&_# zqPm1QT0;&62R2M?HZ6}Q5Lt>o9Yo1VCVlTnNY}oW`7{_%KUy4P2Zoh0pJP;KCR?WT z-p85X2Di8JBjm;)K-w(0mtuS_e;>WA`3D!*2pY2jG=A+d$Q&TN6JLRX=ckbltViJ(4> z<^G9sgMs@qaj&;OB-oGKkHLX4>86JqazBg;_(+RA;Qo{x+ZX=?IzrPnx-yL=9ix4y ziEKs0QoP&1s9FPMMz-zIzo))yEjH~7eGMMLJncBkM>vl$>j*Hw^%6`&H0#cT z|DgSx1BeCMUDT%cp(2*T{~}W|3?TpUiY(XXT~E!ABgx`Q6N`kc)Lp0D0^3NW1t(r3 zSYUI8eWXv3453Wzh&SHZM@DRW`k7HjlgcoD3+JF_I++vGD` z@rt#j+C+N~3Ql07H=~^qMf+(wo&8#hmxzaW<}d2U)zXLsO1twr9iUy68vnthgtUHn^Qhw*t2fw=$CYhG6m|L>kC7 zrNw^ZzL;QikuGEZBOAKJEnQzd;{z zKD27@k%Rb%d<6Dm+nhP@%b4NeW=yq1*+Ph7-nu4LOUAp9G+K;|&qi)%j!CN@*SRne000a#zU_7xU=;AuCXz(J1~v|^{6srCR6)bX>yAa=TY7$lcx zb1eaTw9PLD?AbIpL1!f#Azf!O<`NlmX%;L=EY37MoFXE`6vmp?*{WTONvZ-P9F7TA zKAaMVR&6h_R#!l#kHLejMLyH8oDU&Xn}(QTmtGBjf;J-Bn!Fy3FPk>E&>bw9s=%0q z)<&F3!Qj1Eo3q`B`3=^VH1rQcaUhzdd9uaAqgbZ}lEPboZp4l=BZ9<&)lp?Hw;Sjf zw1OY_5a&enqN(x+t2Pr|n#iBq4(8|?_ZAeq{IReP{NvS{-h>4LDKNsFM>xz6aQ?dx z|13?KISes{ryn6l2tQK)_+xb7-)w!+0=0tuW>na`;Lram+#vqR?uh?xZSf2*7~fTl zDezs20{o4(-aU*&psjD)O(Ml~nz)HbGCh2y?}i)JXEAxV=;zTLV4S%bz+?gJCV(LX z93g-|Y$V(HT0exF`dI?FPXIq5U?&FLpf6@u?0*pT>u_~fGL|;z*NB^Ui<{|mbGEo? z5jU%FmHMJVO8G3~i&$s?X_lm)Oto)8l!!>ps`K(l{N#{EFlkezaYP}fsg}(@&god! zP__=(NR%V8r6AOWxXx?p!`NLd6N1kq;{zQ;kS=(X%k z)(rb~X?7X{)26qeH{k`gT9Yy?1T27KPfU#+|EUl{(z}k2**gbkIg+kF@;Act-k~xo zJ^IJk4*8zpB@`gE>gz|QYKNN-4`^G-pU1li+PQ-MV|LItp|QFqZ0$!LBHXdI?PJE0 zdp`BivzJW98{+o^>}NCBCqr(UehI@I;fJIkh!*e8F_wq5MacNynPTSqE%CF5%OE12 zFrJ5BYWzgWAJe3-DWdF+&WoRb#xa&E&$MaB=%2^CQh`m87gOmBx=43zpu{jqZaDuHxQ_py}Otr<}p6eCil1=Lo zrDryi#BF%qR5urQy$qXfor=1<9DiV6jGtY!iI@L|(&yJI*zbM0>Y5zRt;(t)Sz*OS z3DOLrpxU3{+icD`V7vr2{=LmPDbnVQvnCzF3nQcx|B1zosqSS+3v-1Ut;1IZgUQyAW1p4(_6{17rToDpp*F+s9 zK~?s*MSrRC_g|*lUM4ESHoMa+Fq8HOfoc{-C~LrhqMFh+sHW6Ug$N7+VB`8-8%wS+ z`?XO+A*>+^Jed`n>dHXQr)RgGPcjw$0?!{sM5@2Lj`;KC?eEmQFK=X25JIG>b}!vT z_j{qeVBIf6_mLI^SMwNo*8Ov=(TBu_2Geb;iQY24sR4Tru&Dw4C(1QTy#4#BXPKAC_v&KlaM{-` zq=!ZQ0~wth$7l+#c45Wd2Hju76^r|(6+1BRxgWxWEc^`ecg}Ho-dd8f9@`jh^Q{QvX*q|ci{{K@~C-#@`jDSHy&_fKFw(C?obuz&fzHxRk60D|=Q-y_^J z?vM1Z)69=~pZ)CmCxnzgCTkz+U$4Pu6!1eVOdZ%ca#%l$EUV^Nhhq}Hje#GMq$bxK z3Q3DSiu8F1?Oa4WX|35DqHVx#MaNJ|o<9i+uFMb*2{m_zzMc36mC6r5uA@WSDQAEU z#`m*~pMQy8SF75`2ys)j^|VyE3=bh}t4wtjgkW~mHtCn3mGsH)Gi3O~2AQcka)FScLFC`lqrVOzGGO8PQG{lsz~f zTQ;k2NK}wFK!{>mTbV-f#QfKY?H2v%*IB#6Jw$P@E(oR1kp1A4RvRb{6_m0#r3fRX z@j)oj>s?OiZw5+xUgbRX<&?S@DSbz<0KHQ^l$IJO-6<&jgLrc#{BWBT8G83r5K1TU zJm<-7pkx)4mT^k&-fEz9O%O`2cqmOZQ0jPv_ih|f3eXdJ-OSsk_qkF}Tj{Bqjac)v zTy>56IJjZ)=wZE`kx5h5((icjE4vu{%Fg!FAgK9VghLos9otN6+u3KDU_3Jaaadmy z;JH5RxzWbw2BCuW=3#wB0Q>_-sU52k|00P$I{^MG3_sV1KTF~d3xHqC@NY2Umr49% zq!1*kjQyU$@b5L^-z@RB1i+7C_!KsJc-PlE=QJCs%_IES()o)eDfBt2t&h)kjgb(3S849u>Iz^hJSiFEQ1xBveFn#U1e?j<3>9?K0^v?E)zdyz(49tfrwZJDfpABd>Rai) zE1{flM+)3;UJ4+G3rzK^IPL<%9U*X=1L1aC-~i2IcLR@&LU@jIlP=f<(a&kN@XiACsKI=FOQ&dEH6h=c?in*jUV0z;ln02 z*IcvA(D0u!@W8XZmOw%IL94AxRe1WIm86QJ;PMb z@+q!_6~qI+Eyi#|1L1<-H|f4BVZM>yoi7BCLw{5KO&m9iaL*BRpCeo+elLS?iLvG1;j5w#kg#Y;c_xD$`tv~Oq-;Dak+`Vu0CNhlW< zr|+eTYr;eH^kek2Yr^eRzK56VsC+XoFQW2|yj)D>a$e4%ay~E5r1F)#Y^CxvUYC*zHbMyl_H8U82p=1lEO{?xPHg;c;4TllT7tPxaB=gu7EzfN1DtJ zgge$$|0u_Oop8qq+zSKY!o3x8+zo^)-P`GbaKS??#~ongVgGXh`0Zt?|Cw7}{q3OJ zTk!B&Al&mz_01f&l<3kYAgOOR2f{twRIhQ|WTJ~5%nbM1K)CUy`pY=(IHH>%aN`IU zhH)KT5g*H`cPdh*TTIJ)(<69kLYwFJ>0yBghkE9OF@FQ$FhTg!X9EZVLKAbsLHIw9 z;+_wL8^Y#<{r3S6a%LT?3xsz*n-lK88F)hl-Zg~hofBTEfg!#@Fl-;dYjHLr3Pr~+ zBxCwUCh5)^ z2)C1|z7~rs;F>A2#{!4po*M`^&Qx#XxU+~Z=V71z-O~YhIL%bwhvU9Yb3gV9GrF4s z;dV3Ce}*mF;Nc;{_00c)aJ!r8pWwLH6D~G>GrGlraKUd8$Nf9D0(p?# znxM`VxVHtuMRYZtpBF1~FvOh4g%z;G)~9 z*fqzpF`hZ@b%dKEaQ8fQiY#i5L2hLn_sr$MmG<*eAY6nNi5zz^(UqY^T_9Z0rT=39 z{I11>>~`r;;~;FafH9Pa~imT-a$FU%K@uTP-0 zt2u5e(Ue;I^zQ*=04E&9ao;6PNGJS!AY6>0Ll}_YwL8(3V`y0*+`*>$S2*r7L^n$C zJ2Mb2{Pp!5cOCT&qGNrF4up$vC6(j;jc{eSa^lGVeH&w{@4<1|xQG{Yw+F%?V)nP9(a61>JOCT&7>Kp8KBcOX_!sFCNz~ ze1lley-ahA^bJ2h5kLmeuUO9=Bpa9deJ>DhqN!f2=Z+F?lHm2xK)8^BSkIj#ex(d5 z1L49J#CmQo(UrDf4TOua(@O2S5^loW;~6{W2EskpGk3p0bm?2wgS{17kSLgm|exthv#yzHRzB3>?_axpJoP30V3&Y<#4UQVU5 zm6sE#Jb{--P&t;DBdI)um-|q;A1{YfxhF6Gdoju(yxdOZA0K0VJV0ePFYl!C9$x+@ zmACV96O}jd@+(w+gO^uP`FUP`kjjtpas!p`=H*%{YrI@V1nwKM}d@e8dpmHyi#rHnh{zzI9f53NLtL&4T&M~n& zd{)AVSP5T67VAXNik-$3t{%n@pY@MPbVz+84^Y|NT7!%q``sh5_}EK@pWgp$P5Q*N zd@@Eq+q93bWzxn9>=tm}3}a;ZXAL_i=|>qFzV(3uUZUbNRc!C%ME3DNwrdK%FNwsf z+s*iO=7MniI2Y@!)2K(BAGU$uu>J-y4?o|0L=1$S z#7+_<&bL$IeBD>rP=#&i*6|CFX+PqagZ(IMTZ^f7F2Z@0zEi^cfnEH%sctBM><1T- zre2fqbDss_?3?_ozvv@<<|>qJrKy~P<)$hV^0bA)lmDco1N}xOmm)>loZ}8y4R&58U!AU(7@?_veuU{wW3gtMTJcIOjRE;|RQ@5p5*n|6gL+UivR;e(is zxR`3+M;jK?Ynz(C3CE{00dj@jtUb%-0gs^V(c zIk~_A0y`>bs;H?(n-sM~p^~CCM^0oPJ<%wrc&A?!LA;6|6MbCpG&yZ_Urfm&-3R|&fYV#XV$D)Yt5Q9 zYt}@{zckBNL@JjVv%AA+(aNngc$l^0gaJ7i!@h_FzK9xUy0YKZT`(AUB^293u-BK3 zm_hl_wzhnuxtXVGoUHorn%hS4;u<=N*lk90L=wc4Qnm^r9Kxxs39O4+ zb+u7z{AgUqMkQXwGVS|AID-Qas&bdAXfa-QfBrycryWz6)7Vm2F%}z3ES(w?WEx8~ zE;Y`K#gwYPWxxqdC7dVGJOm$&vv)6Qc zxSx2zBB0ht3#dW^G#C7FxlbuQR z$H|rDlP8Lt`6Yvmr7Rjq)>tQ$)`-t=#JU`@%25T zubkjB4Ga)&uSnk?eGQJ(DI7V8@MXhWQWe#t+;|tcU;ekCvEALqZ-k@l#T+q(MCBl$ zoS#@jC*@>H@*i$Kh!#i0Y5b~ySn43wixd#Je^08Gk9dz2XYSwHcL|G2Fmh+|SekPB zI)aCaCF}qvj5$OA7c6GL5Fb+U zN#!z%c?!epAdHM@I9@te8f!iZ@rZW+!Hh6WrGpJk0>UfHpw*E3b z=@fFHOqvjxvdBGI^&JP?4Q|IQ`D~5*Aj8+CKVn6Exk;v+uPa&7p^A%cRF8w{CrF0E3`WO?$`Ov8TsQ>zHmI>&(`_ZWaLLwzLEh> zzll1(IwQYaWjoFq$xS}{91X#`>Z5dByg{{liWu5L+0isat&J(7tz0 z8xU*FGjUn1TSBe5#08&RZc)e@Ui`dBr}p6`{F}qdWYL&;DkV0&BtQvCp_diuUb;0u zRgM+{Ra`z&`#b*LPSBYDm_)CxihogmlRc+|N4yBtN z;c*L6q9c{e-oub7Dm%%^2%nn?|rDCP~$#em7?{R? zPxw5ubcX(Ymnv`HC)nq+Bugj%vp4SP`q?~?E;#k@nRuG1xC?(7IR8tiX&lsh$>jj8 zJ9F*uk9Td+oF(UdqR@igr~JcMMkPhgoTZz-{1}D}11hliTl?Nr+&;X_OCG3x38q95 z(@U#Wzpxk+S{do1y!6pt`VbV|Dj}<>(kHv%CvP8<(-t!s>Kt6iAryJyuPqjlCsJy? z6dp(UkE+esX#cf6Hr9V6j=WHuUGQ@%#*2>waE&bVs$J6>KQ?Mj%NvXL(FAFMs6cKs z(BU3)uL9&0%152?jj|MUIA#)SsY1b1m02Ukx|cI@IK&I&n`983M;6m0Fp2n5)e*2h z{fOMusmyY%@A0YTbjk~H%O8(I;NIg}?@{Xi@vTDAk7&-{;2v`Xg`I+4Z^(!cW!n1& zwWU3l0||IF1pPxhc3uL#vw>{HEv7Z+xS+DEwSKKYA z+u;6@eP8Kcfc{ZNak|>`qy~CnViJ~M`4v= zRJyjdMAF0j) z(J9>Tsh%uIbM%LTIA?)~NO$F1(v=12uCyww7A!=diQGvE+h$L4KP!^Xx^S!(GS!W4 z5%36d@7L@yMe>~mj|<>RXi>xw$n1jO>nvRnQPkw{qts+yfLI9kK*6LXGS&^qJR->Hwu;?N=o*<9BJF*SeT~!=OP^y0eG->~iJxw0 z0i1ZAGNLz=s8i57!kREj?%;DY$mW^M>dakZqs|S0-pF*dfiNzyW%+Im{Z;o?ru0$d znK!1KJSR|!%z_Rv&7#h4OCJJNSu49na#0Or>C4jAJ-S{u{4`!MoFo?lp0(5iRRuwha9Y~)0c7a(BBNO>9i|+w zSue==9wV;L*{0Ud!oct1_MxhEPnsxC@lwHSdflr6sgRN}<+_7BNCkF$y+Mx`kN6Qg zqYF3sb*@=@RJK|9i)N06W#O7iJh zg6uI@u5s^?^f~k7opRjLw#I!NF99?WIxw{;`Fr=H+tGbP7e}3$V>J(`^LG{7o)eu) z;wi*FADe}SQ5ZE&Q;6+!`!XKr5Q=~!PP0gQ|^>cxLma!VBU`YM7XRaMcn z60Q^q0MiS~fKhQ*C9$8YyI5 zRXxNU%6LVrrvzxjSx(#D&MeU)I^FFS<~)01e|uP|eTY2~baSgx*skk)9KaeO&vZPp zbO=Oq8X$xl3}dOWEM&X}ai~OP`FH2-?(D2K=6@23?doPUucQ^e%?YgL4nD6EqxpSO zWh+8qwRLT-c|V3>FzWsdAR@McFf#Nh(VLCt!-V^wlQOBl#H~UP%kGkK#~=X_3s}T< zq;ru0j+$Ve@$CqTpq;_%Ztzx7PNj9bFb?{o1zuC_}oczQUfaz9AL+IMH`N|x5+~EG1UT3Y>gmSra zMcnBAuohgY#h98NS+=k&fr$6IMab<=6Eaah2%#Xu)Go3J$n&HXIqtmyqw`oJ{+JL_ zUZY#F&FxFW9%~33gB55S+}@JBk`)-ASZZzW9!{2so?kbsM&dhxiY~C~kQJ)@@hEFn z`Ev_Dla6s8&U#&1*8NS-kCp6tHt^QCmtoZqYzH&M$1MVvI#un>ilHkLr|eMkV$}YP zFd^$8(J(N3suMKqytxM>07YQ$yg~gsCt$&Jbch?*jVM@+qKm-kVQUEb zB|4NlU2^OOw#=rRZpqW~f`;Z)57f0^DcQ23{K6fmB=I&2FmeLmzBBdi*`LPlI8Lh|-mgqdDT!UG@j5|0@ zeP`t6h};=D*xyh4=J!`_tp9-=Hb3zFl_6zegL=)@&kEEH@*3~#83!UH(HGf&ksx9~ zT0b-5M45P*{Je`T&vxpM8Ax19b+P3@+0P={BBbEouUW+wTKaCye}1p!;x6}VqN)ZU zMDJe9cJzC8jNY#=^W}S&c)h!4F*GPX(aL{FTx5OYsiMq(NDg8Bh@XU*njR!r6OUcP zD9tmU(Zkx=9W&`9!yj$@s^zjvMX+!1z~R6|KSf^cuGJ(N+vqsX|EXBT|*|7=fW$jQBD| zH!51yM&MS_s$`y5R7bR`qiFd+(UA`4E>o_sJF|qFJG=3GCQ)+Ek{7%c_7lNsD1B4$ z1LWYZ7s0A*?+8|5kkTcB)sILzK*S`C4?lj@e26bEA=-o|2c8+D|GKI8RYyo~v*TBt zAZ0WCS=9Zt`^RFg!r%*O3^Eb!9q;S?nFq#Tft?%Lf4Hwc3jZ9_%s^KD-pD$PM!Fzt z5J?9{RvgH^JKBi%^_0BqE8f=`2aflprw!%*^B=+2qci>|`1(*``=8?Lv*~-`E1!1% zZ{Uk5HS(;?M+ERua}k#(4rg{-DEBJAlb8-S^4hd)mnehdV^>M z=@v~}4pGZ`>f&H1wzGIf)iW3ra*}<0eZUC^f{qysSFV^oz%ki3TN37GPs1_u<l~*l&%8g>G_4?~o5b8sAGCI=^VtDo_s+b(rmnsqC*;fsn01|Q{xnG5sXvjrHk)`j zd~&OhRO^{-`2<|HT0(YFB-WDe+@@}3T>0(g`esJgTG+bYznO7i#Hr0C#GnygSe4Vx zpfan!%PH?Q9CR;V?4C>uDxgv3*^NJ|W;VF@lBqla*sF`R<#FdGNE%50)jO!#X7dWA zn)YGNS^2t%d4JPsCkO5P+{vZJ{Jtl1Q`#!-j4U;bpDweS6d?SsL)=x|KTa09y#kv~vL1`&iFK3)crCx}b4qRE zcUfQhYn!Q*P9{?M9%ZNYx3!`>6OCK^`T7VXws#3Z=n&D_Czipc#qJ>WqVCHrye#o) zqd$*crm&jHA4EAF9#qxBP_gaZC!N5*LGgY=UF8Ptw%lsYez#QxE>b_a=c=E)k-DZA zF~Px#ZEl`w@Q~#4Z2seP&F~UcyR1hnM5XMrIC$OdZx^S83RChBxmYFd?OpGz9X^_h z*hkWr(em3U#kf+oNq+g`ajt&izAup+&fu1-(p$HECy}I99o%g&wNcCf3ZpNm!SXP= zflcfbMn6_B-VMa}N-;=bIs=d;pOrpmsr5z3S|#D8c1Nt&v?3>_y>YCw?R+nO8gvKE z3@A4-{8?LYZtV^#7daybAOKcM5b1FfyPE+B5{jyO)0r9^6Sht(az-GfIw=vJJBSyU zab;V6QNA-GKaz*H6EsbVbwZI@_qMx0x|y{^ZV*vkoM}t()>+Zg?q>OF*FIP*ZPhtR z$1S0g|3-i8?z$%|tE4kW`klG@n|G$0*BRXr-KDqPjSYKs=GZQs!5-=LV-drp`f;~A z3MBaa_HXoO@9{}>>0cP1+B}3RCO-a;^ylB9w|)1grhcy>`X~K4 zBHf?I`S|}?fAaP@KGT`D|26(OhqIyH_^jn)Z}*33Npu@)6_z_|DdJ#nqu~V|q9CLl zPOC+-BF3skU&(1?vg%vvm~i`&rqg-`>yKAE92o6R^Mr}pa4XE9E*lSB5xUZ!FO?o+ z7xpAh_v^8iAagxS%er@+P$%w2&h?9e$#P{!VF8OS&qP zqN}C|$#u9{xy-ckOBWAefd#C1GsnvKX|8N~-5#xHk8qhgRX(0>qf=^m{Yp<5_0?A&U z-l^JoF{_=Az@#X;#Ak0b%|m2I1iOY<>#9K@(L;GTja&HkcH>wL?14X=s*ip?gAt8UI3+pLk8vBC#UQPTCX ze4zTCo=<@*$i2q78aCOcQ%sdFO!eQHu$h6?EYTa_stxYBxa}n0bN_Htm+?7X609|D z9|o?=_z=$`V!f?aPA`=Sicx?u8@b1-PZo(NQdUJ#GB?;c?ZZkblw%DmaepL)fq^hA zTM|xe|OdjD5{Jcj)x*^HKzIWd=W z+)3o<&|!~C8T)SnyE*i4qH(H&OZBG;Vdh1xle9q91)!~T_}r-FHhdc-m1$ipW$#vS zO>J~OkZm|M!jhmx~IGN1Eujg-|_FA!+V>SQW#Co1R-^f9( zgW0`fPrif*)j~H!ysxg3UmBy21Nnc5dnLUS3gT=_Y)3H&4;pvM8BWo%PN;FF*FG+fv5-71`_A5c5hNQRG5K1vm)rMEebi8_Ya1hiNWyD`qJR^VKNknKS8b;{6u@*Q|;wR zd&xVIi(zYB>la6d1M61omb8RS8ET$~H8akg9S#AS8H<5=Ve4v2M`V`x_IPG)5iG>1 z7M}%FfbYv*045c-FIh2fHo2Xya^d6w6Av~6J2^c=mUmpEe6xGzb#O)utC6_YB(C1= zwJ#QuHL_q_nGYKM@`Q^h-<*6EdkXOw>Q>5vQ3M$$vn1-X-=J!Z_|KoZ>&6M&iSfc3 zE0RX3J&8^RE45Fe+JVafw9UOnH8xc3&?H~X;1`iSoS`af{j{j{jvg z4;2*}aoN(0vY<7s#YERl_7Qtl20hkh(qp7@qx!Ob#L$aMrkxwLT6FovrX4{}ErEW| zSLGwn?~;bik;)e6u{I^Agm<&#)ImG(Kd&kkCjbzaDM}g&M2;+SZvrdIN|Qk!zPx=C zdCN$CQ*q0MB>NJ#eYs=(o66h%O5Vz~0$l{I$yTxwxK*Ijy>+Ze*?wDoa}4Uilci0h zv1O!0Qd`x)9LCogRcOW*7Da|WsgAzLJX2&^$eLP2O>Id%YjP%A|Kz0z+=%5>#6@Bv zar^62mSut_Pu%)+B2$3C*y#S~7eZ6iom}i52T%%=vL1<8YFjnxTw8qMh#Kd{5{PC9 zGPMk4K5McnL#)byg^1lJ(teieLXCCfK>i=Xdlfy)!2l53U2NQ`WE0zHC83u@gi4=+ z$pX>e`h=X}`61`x+(;d+R-a+*s#|II50ILN740DNek^YRERq%K>Qso9fo)w|9PY8b z$5N=Ygqlj-tv#rdxzH5RSU@DmhDqWE1Z+7jV$3Y_Ik8yWnD<`pF$A*EA9rP|khJX~&p681Ab!kEY{ zJPqpTnX;()_I^mwh`$3|Y9XtXGp{DKmv<8)l6~QFSGMY6b0`k6=)4V zl6%pwQ)-wxdpD>w8rY(a%gOx?T{k^dzm+yjErAc*Vro(MdoZS%mLe&a>ZhDk!4I#) z{Vqc(UQ4&}Rq~G1-HGZt`k?!OK*ZDYy_!r;I>nw4Bov%Z=OSfs3g13e)ws&GM~g<@$*cUgfA= zIrpY~={5;52d)Uxv_8Dbl*}9>y9fA2bf%}l#GwL*qR&)+%UM>ejyU~AsWh6m(iAih zv993i$i?!KjjFW1Vt0>}x5!OE9a!|87YGT=HQeCU1!7+ws&N%Ezd)!Ua6?cdX?9 z{fOOyog}5cYnS`)a0DzTo-Usz9#rL7Wl19SO> zFVUM5CrUByPif;90%J!C_0zQ2)i&vg+JeSvd#;1NY4QHJ@y!?{5Qrrw{#s_k{CksLP&k2}uXo<5cwO@1F}n{O|4uf3y3t z9vFRKe04kUeOa$7bZ2h}2lw7UUv<@9$l5~E0gjC>f z^z~2h^$UgWe~Pc)U%3~)7LoLS0bj^#T)BrAaTO?M#`En%(c{>-WHTqI=260Gpok={ zS>x#k|7rd$q?-rA??30?AE*(^M)5v;I)+`b7m7!dbU+k`|L6W3Opa=$#=SH6%L({A>~{zcs~qtf_+X&sB-bNPg% z^)H=iHN(h6qE>EyXXz?Z*2#yAl^TKixyEG1^8ThHYx zz)@Rf*1bx7;-P!yYWEbWwbJE2NH8Q04Ep>k-?uO9o=%UD*Qsmvh`{s>b@ikRJBZIYpJ@UaixAO8P)AJzvtJ zD&2_RDqVC2AMWK9NZvp%4-q4I1v;UUQDyw(mDY86i8IJ{U#7dlm(UMJ4yWHI z!*a1KTub0?mO0KXJMbZKAKJ}1nccz3Cy_s|T0AH6|6~T1cdk|Afwjfy{VJb@o{;f4E(Wj{*F5ubC8d}dKrwp@wY^^ zD{Cp;?ui-gX5mkjV^QsuE7(uDkzMNhK*0-lDDRQcBIBKr1*|z(nQ|iW z#D@XS{dy& zC0>_O#Sr2WO~9yLMO56$*WxY{q?KfeFQ4{P@Q1oxywjA;jQHGAwKI4`c7rE*4K_TZ z<+vJ{&=nF@Vr3Ns;+%dpA297;$k{BYQekX0>HV7i3+dfX9ci0^&%dR7os()9OdH9mXO%Y-iFn)g%g7*#GU53blxxqvE{rkBC{DfiJC*?if1 zKjmIh<cO7U3g{OnCk4`Q*_wVF`t_XR}jD{tPkZLte%;pyBMts|k1X`kO0S zDms(Hz4m33oDC^#L2@u)VhNCx$$`p8J7_fX{3X3yOm7K}K`-l1P``8ZFtMO6mbzBN|DfQy2uj70NlsvKV~ZI?bdE4Z5cZZufvsHiC?iw zf}e{xt9DUUeIrUv#gdB7ioYk%*K!f~k4(XTa>m()_1m(0AotM>5g)rM+1%D%n_SWU z?j&|+r!zvh6-W@NwFTnoRQX23@4OyeunfV1Wx!Pf>-Ay!EZv6!-3R8+w0%}o%q<+T z-Hrs>Uw`BpMvT4C)TB|Md~}BSHqH%shny|->A0dkYSnW`)WixPK}o$H}zYQ&h`xULfT6r7QdXjZ6S|v zSKg7;k85RIUQmt7$%G;lr)4S)4O23jD6TB5DpuCtBnzrJM}9f3Scb91h+l)!WM7Ep z3LeqHg6_2KWIO%79*TGq+c|hbec57Kan+FfK3)M)JFY8tdcQ@v=cFOM?zTD+w9lR= z%c7ljPmKKe&Mf7@y5if5wFhg$YHdyU9;~gLk;z4cUtzW8a3#`OGqyU<91vGXkg$!F z3ynEP1EFVeYB`sRou8DBW?Z9oO-WP{q0{@qE|C#o`Q zeW02A4mM^Ziy?=>ulxYq;A=uz&g)T7T4>5_;d}dQVKY7ST6ncapvY_?V9aild}r`v zX@SO63%{nISY}Ppx~rtkd3$|I)N#6sZPP z`W=dYSt{uj0MQnV=AHt>td~V1XsNCCCYa`X9f#^tB;COA(`Sm*dg5u7L3ldZJxp=N zLYjLArumuVlI4Tvr_b`zeenGBaimKJTc=5L#D|BBfdZzb1h}Z+mSI3jB5&PnACR<tlX)ytuBuOvtBd7R{Rky?nThXB-_L}k9Dt3i0BMBVtTFQQgT)P>~>8Z4%?NqY!45o}-3 zD&qVaKFbj2Y?8zkGTq)Aq`Ob5R#SrS{s@WIdJ%jIZ7IR`hzK?<_y(ymt_VI=Cbk{f z@`xI*!P^IC$d+DGuxkt7-(L$?NDaD$m8L+E*#eh#ROlA|TUzih?fBzf1rO(<0Rfd@ z^-_?)PD;!*Nx`n5JfgndM`!<%?(FcrTIkMgG`fYM(n8Q{;i$a|5;wm_7d%1=5|T!N zvUT`AKq=WDD4inqG*(`a53{gRXv}_7@}0rU2hjo^XR3vJ_A1B~5Wmy~pOS(EcTfed z+p8d*8>b82F9rS1h4v~)VDmw`;MRc@Jj$!Fn1bn9;W}3B=~*HAGNNw|NxmM$^y~}X zl>8SwknRg!KYgPBVDD>Q_@O|tuX$n1QOL^eXUTV37AqqYbA+-pJ*axbyr8wHG{4VQ zE$wr*81H5IK>M@82ru0S+D{)!y37{$OcFG#agTuX#optbezCxIxxnU}evUlX>gO}$ zIjo;gk>?@$`8)D_f_^?io=fzzAfFOJnyPj^(W`@g)M{P*!tD9vT|P?d z>ZYfw*SgoQm*zLPgOdC*pG@F*dx_}h>U>C>Rz#s=S&lfKTFT1=lOVC2`1KU@qpn>P{T~T;>S?j$FNxVlHZ++Avq}QTyep33l`hB7F8TI?5O2^|> zNw0Y6MwNO;X^yne9xvU_yZp6@{{C{2(3=#|c8J5lzC`*dqHsubadAZKa3>;}C8kg< zh>6m&v?%k36l3b>jthRdl$RvGWgFSB8v zg#JRWGB|3_Bs-7>MD0~Ed*kYLzp6Y0-9?*c!yA3RDu>;0EXk|$+(%p)KotjNBZ`vr zU0P7pD{b#^pq5nWm_+J{R(7D2<$I|LVpcapNZU9}N`^&ye?gBxN@aZ8%Yyq}(4(Bn zdX6lycU>SwWZ{D=s1Zkp(%5Dy9w^QPF$gTmOvhB~(TUT0+et{ZCUB+jE9Ch=>2igh z4)@J7IVJ8bLTVY1K@r$13ph)M>K$r;Dj)wCyucL=fAJ?C@D?sq$%OW%}O zfe7`IOM35)`%F5pdB20OzY$0seV^&CtJJU$z^6#9tlq>tYuZ@!Wx-G)vgxXjAowSm zs+lMSWJw<`>CcGL#otV`GOh@SbuWe~QE-5F@K+ex)O8^4w^S{ci;GB237C1B99gQ> zW};F^d!twVTs}x+MwF@V3%3J^l#mDofT$5jluaY9F0J7M=-^4sV+^|Rm>FwDr^kKb zTs7zHn@x4F0~8>sJaL7ZimISTWPqYe%>gnv99ji%wlEa*^yGWr&87$8(^sox{D!Fj zB~&W3z2A`nm-`(oX-6^4t?Q^zGt5h(@Y6S`G|eyxS`;Z59eTYOAAYD*A}!8*tg6Ui zP`LC$NwgxVffvRjUaI09@iLJ9r6kU0?kqS}h+hqh9@XAo4an}X`~Df(WFIXTx<$v$ z99(xkr4+zuq-?kSC(u&&NeV3wqjK+!mX*?`K;n^I6`=1$c5Z)4DO%HzeJNj*xNUSD zXWSAN!0_i9cGpHL?o@pcvytwB`{6%2xoM)bxbsOJV9n_rFOyc3hOQCoiR6xo7A=$? z`Jo23${WK=FVTzKV?7k9V+;R2f(S#Ts3r_#9@SW~64{Gt{stTw^T)35WDYEZT+vcv zwYs}c=iC1|HTzKg<>M4oThuzBD=i->*m3$@0b?m#D{Iq^6uxgvfB(0Ae*b~MOJ5az zGffO+nponcY2hIZpyrt;NS1lvY{~ZLf#zKzDV%=q3mK~!Zw<0{R|VI{km*w}?Prt}Z_j~K7|B!Tn{HNmumNo8C47awki~cK6 zUOp7vbB=tDlL4V-7bV|F(XJrbSJl6woOA^i^+p>HVr{>9PqHkf#j7Dl!$PxS5`b5= zNrX?72+geUH~K5(mbT9pZ%bDz)a9urM*NXIKzt3EiC^&~5KC0R#5!J*_sY{m+TFWG zqnT}o&V>9!r&MH~#KDr%Tcu#c(X}OJ@td~SV9j4AI<_d-#1P{A@h(g@5{hlVD)s`| zXBH*9i_xZfv9Dk+7%L@2t~ENK+vNdL)~czOo&F|jj&{rj|TYd%nH~d_$gnj(XtdNr22-YaH0M!_DfeuAqt%%U~*C+^o_V*No zAIjRGD}+7v1>plFT~IjU--Ga*pm6)@6o9Ai3&627-35iRH|z913?Mt75++EKi`FZC zH~4=ApQA2O7#*Gl_zt!B=t9y@tJeEae<7$7X60(x%UcH`Mp^U`*|Vt>1XcG>iCe!|Jy>b z>0YIp_*SZkCf$U>bZUCvd5U~?uaeR}rd1P0d<+8IT}^)Ca-NdEPCk_UW%2=&Dfx+g zHS{`4+*`_O zDz_q@BgR>8%Ne4h2#`_|(QAI(UfpM@hDb(45aO-j@S5_i6`he;3`OV6nfLNQ^G(yL z!`6n@4M!*ADZ4FoRPKfoExPF`PHaNwV*PlvA50sf6%RBGgbor#%IdV$ih$6R@rVeU!hiKQuW_`cPUvdOABk4tIK3ik$p{61^{xd&XIjFS0B4S@z#+h@h zNZxohOv5|NEPv0OwL?{L5)Z11Zr0-FmMKR|N1;l#hC~D4@My979R^o{3yBfZs3>G# z8IDwbUJreK=H4#7g%r%x)~ofd(JZ@bjP59ZXjN2C{NK0)k-mK9)_+g+<<2Zvj5{X) zQt|=t;hsXZiJw6Op8lVKeu$_ax#C#DpbtLiaKyCrp6?s<19mgL5bU%k2u_q!t9yZh zQwEV9z=x)~KJqo-kTH7_qE`Nx|6}^Po%XxZ*Qz)7MPF-+{yq9C%WA=$LgoJv`dWM9 z|0DX6`%t>jS5=C>zAL@`m+7mo?#uq^>rD#mpT3?V*Qc+)9+pL4s|W0xzBcoT7805C zb-koQUn8M2pT4xy?bzs#B_oPrOoJ%-Q^wUm-+W0dzh!TW90 zzp*Cyi!NXJY;F~&+|mokH3rGSJxfCvXK0 zGipKT8fY`F4D-^mKp{6;_|IZ}_MglAXSKH8AVtMcqq03(@zZ&(^`6=O8zqkd zxY%gqw^)81Vt(^%^6V}xlg>;X#o;^LiN%fCJxmQI5I@JI2jT(lJgW9O1l4Ov;lfPQ z9^%fUW7MK8xBeDkzUMB8dN4{hPC#Do7y1bv`#sH1HGA`r%etEw+Sn@rGp6?l1I8TX zF97l$7l1{isQIctbD3D}mrE+!83MBGd`K77P6d;zvefAI-OFFs$Q~HACls5`ScJy) zn7rkb@}+7&N0*D*kLpc6E8o{gCZUgPtB=;$GejS$soVg+y(9c~5PS6{;t=OP_8m20 z6xWn*h|Ge)P)Le+0JNrQFNUq{Xe3WZt*tfoBs7w34Nsbtv|aywZvV_yF^%SXF|^cJ zZcX{d$Se$&RCE##s-o^;s|CFTEmY_ky@a7+$Mb4_W9>or5#|mPtDhq=`&3+W*90sq zoO&F%j)I^bSZ%1xz4E_gY$pyOsnPxM#ey1b=!|G1Al&&pA48On{?{?!^#zSzMQxha z6{#pPzMFzk`?uOs2>OIJWzr%vHF`(3oERgODmn4F$O&CIB`XA88OxxIB~kv|&n}S! zcEAJz0X)5O>#xdQU)m@;aT82}36*;74NY@c$MMqKBDU>5;CzlM=m%(jU$Q{XSlU8i z%UAYfqj?he$CxbgBTHkWACSGw&5gWUkL@#*(M+LaCY4L1@S4h9 zwCnVH^I+NRI1PVFzKar*K~XKj0~@dGmo&NymI^raXu}o(L^ilL#N=I%iQd>9pa2F4 zZbuOA6Gr=vAVKtPEks8pVm1HhhrhM~~s6858Q@6_gHhrsU{=`$)>kCB- z{jgN@vcCC*T*1BbQ}-mmkxdU72|0QlXDgB(+@X1c4Cz4BnF<$OjtL)DGNW?B{A%`L zX_!8~n(X6^#|@km|DygpB9@nl@?H79KVKaTZ2&p@ckYd}k4Aqum!xNC=E=W)@yqlFGRA0+JF_`3L<#h$GR?L@i?zObjO# z2ftKHDLFopR-)EA(E~2INJ{UM+fNcGWvc@JKX(?c{ZhWiabBG=GX6e|_IbL`-36G* zc?iVhZza=&kd<^~f>SK|zF-2xx~E8OnL_853+Y8YvRB(h{HjGVQiJS}#Lp$y{cmbW zUql#>byBUg-0;UJb0c0jpNr%{WYkoChSkQK za*bv*1?I;cHRT`qoLcO0s&R)Lr&8Q%%>9cDw~_~KM)N_k=>z(!5F8npDU-BX8Imf& z(FXUuqkS9+nSm(xJFld$)Tpf%+ofXghTN$ak8xmCOrI?B_|msuoQMA|*x6iD`Bh5Z ziTy&$yBRd)$-8LzroHgu$vZBb^o;!fO5AE9gdQ=-TxgLXvmVSeavUpz`lCJx{?Hyu&F3FA+KI<`a{FX;%EXu% z^Bu5aR4N=c9^y~4v$~H#7AjHarXW16&SY^mi;G|4f2A)`drUBDf4|1s&}H5{n?w50 z(Z`&eO4-3=-h|2AAqqmVgZ*QFcCd^obAAnGM^nsd%)#0WCd znMkLD1!W@YHn<0CNDieNQ7+p)U3IijFMy{#PA4Cglm9GcV93X+;>3l0ui*+2f-0s^ zP5GXP>@1^+pTL7c4m!a`bb|gMhuCOQYiSmGv_2?#n3nzX^4{_t`XX+Ca3a@&k1DPo zCzSG605pm8!pa06yZ5598kBxbAv_JY+LueubhnVpK%%VJhyWbb3rpQoju1pg`QB*0 zmfSSJ#+~Qzp16g7#>~_3q|WOrc+#UG_l0oYE9mc+6I&=^y#tkUa0k0@2izUC{|mrx zL@sWL+GmwS?UPaRCY@WXypZ-^gIxwOPhc85*Vq;Yn*Q)kG?<5WGNt zM%)ph0RkSU3#@^ux>ePgvS=W)8imqLE5Fn|`*7)~AgbYrX!$x*TiT7go{(BRYkN=2 zm4+Uaq}Y_Ka0%h}JQQRN7VR%3f*lmAj3!ZO=%a6GjEY*pG^Xzv&Fa~m=;FRTR=(dR zk%0cBKFfyf_kw|J*u?Gw5;&#tp=8qiO?I6$f? zfSnPMM(dD9vMbUsCOsB2zw7t4n~cMhBlbmfY59S{2lt!}=>`*@Dc!LN=yQy@D-p~I ziF@GbpR)IIsv9nr!KuHUs~A(URF&M`&%w?1E&=n~hmV%(IoLVY`<>wZHp(w%CygJ} zE;jFGjulVf0{1Vpis7nOzdfYhR0RCsWr@3a8#Ax#eFFCI{$1|>D9d`+w`ZjLfZeKj zB_TX&XY_XR?-glm-XFH}1NQJidBX>`ew>@fbpZsx>w8c*&=M|RXx44FE(%&_6`27x zWcw@v-YxJelH*geJ-<}?f?X>pzZrUBSgzP~=TSRL8Q2+N3jxmiv-FO<)IzwS8$-vf zneK6PPMw63xl7MmL?RwX;Anke7BL&FEur$QQRnJzf#f0S{xF{hyffHn%&?GQP}sh!;+0A^0Qw6J|v|FAWz7{gKs zvkzBPT2o8H_PNDj>zqOMMWseOpC-s^Sslo+Ry0&_*Ja39W-K<|2pLO4#_Pt?_F=Nt zK@p}6>ZfvRg;YWX(gJoiZnvEEF(hDwTDSMLh7Ak{7KdVM^Fpnk=2|04X?{p3fSesR zDiqi*L?5YJWd`1k)GcpK^cP#V3U+GD5qVF%&U4)#F%&k%$xqyWkYw{E$R!=!)030zPF;+>DCi$S+ znVXZ3!d$l`QrSBBTSlxBOhf|2DL7}8@@eznjuMZ}nOYl0N9N*L2!(iSWslKO5FmoU zp2*1eEe*pqg$X(9;mb8=>R1W1y6Z1UuZ@T>|9+N~FWOdF(n%ayX1C!eJbjsF4wK{H zvF+y>v(*{d*!Ehi1+j&!PPp*`E)}BM;Ff`C(>~?7TKXaH@Aj4Vys*va*7dgu5IX(@ zySC680Xg^F#2#>J{hjBT%Io5jL#4+q3L5dzBSkGN_u%b?Alj}u1+N@YP z@1N0S*LkqoB53glHSVF-9q{8vAL)f6hXkN*vcA}FnHGbb+r>ORfO&g-mxcDA5u?I zs#`7f))7!S%EhW8np8~4w#fsHm<1$}z{aRGY(io>&$_-Bg_wk3&v_Jr6=xBh4)H5G z9wf=VzF0kN$TZ=Ryt-yb^sE%gpD*k4 zERy#GZHN1P1}{zV9qy-UaD9po+f~TWVJVt#gyyFnnC2VOG=HL!or`^Ut zpL!ZIaM;=rLUvjs1`25l0||56wpEh@K_dT;NOh zO6f=4h!fbUIFSQI%gv$rrN&*4E3WZoj1G4PV|idcxR`1c9~jN0!c@-SD|Rz4qTEl zTkCHrx}Nw)2=$Q^U58pbk-Huv$3Dx`j2y-|g(CEH2W2IICi<{5_@l2=aJgR;3MTi- zuao;4vB`Yn^Xho-d(aM_eDyF@j#7X%0Wf2v_)54n=)Oay^eLEFBLHS7wCW;Pz2C+q z(EuXgm7Pi}C`% z@g<#jx1adAB>qV!UhgMvm&AK@;@J$L6_Z7Xz}ZBi70ZDlMJv|hVIQ{HD7tna|6GL; zYVhgQ!t=!?D%KTG=N0kKaDDeeVrDN->rA7Bt*CJk|9;!2ixsuMB-<0(y?D-cQ0xx> z1KpN5$X}Mpgq(T*oy@uJ(;`x>H7^bk&=TK*ywGhmd?Kj!d4I$|WaK?>HFRqgX(s#r zh;Khm33eIwaeu_8J;~Z@FCU~RKeGegA2C!>9JC?4q&X?;{)mwmwtgHO(PISx+j|i5 zZ+FxpCLj90eV-twtIp4kN1<2?=0fN_fmdbO>bbZ6sO4@{^}&JhpSJjIOi~Q)@4Ni@f(@ z@3+MJE%SZ{s$Zl)#`3ENgI*$ozR3LzB*e{XdOlU>g=?J0Wcbu-%rtGq3|Zr?f(y>k z*jA?{gYJpHMNGEO5z>&q8tbtV9@$~ysf;J`26}n!uh2ZOqTIQdf+2?5%l zwXpb70Bgv8dM){~w&`?d@&ySBEs|g@YW+u%J5HyH@KD7<*2_$qLHB&pBbrRZJ^s;S z5q=-+BAy_|gnr2Z`=YB$Gw-Wlr3GD$Dw)pqW)zTE$+A*_dX@Q5?y4Bb@|k-~a3cs+ zerYtHFI*3PhoqOc2KY5IrYHCG9tz88c{2j;64qLw6&IhcdTh$VG?QG4v!0`$*_>qv zpC5>?;F!#{~{e!|Bu>#|GWQx*#8|~|3%WN{vWyj{&$o9Cu~S2%?{rE zC(hvaw}>txx;zWh?n>t~?IMgyujUDt<)PoejojNZ&|Q*GTaq&P4}9bmtu3MKgML|$ zR4G28#O=fhz zmf!Fd@>Dty+cTy9rr4fa>(7qu>0W=FwV9^-`&CiR_FPZ^U&xm}A6hGf$ARKG5tlDY zv^aM;sPf8SkRV@LRq>@>4pK7^9)#j!o65f4$)dV9v{0`6GA zHR1*-u|1LcTNTLTh+cUg@J2+o1PW9rlE7JW)1d*G* zK9njYeep{Pw26;}Fw}lRW-WpUg^k2Qo$ov-Sh7~AMAeAU-S5cUY>X;+eG>{JF)G(Q z2a)Ixnc~rQ+?Xm+g#NGdQx)^sa>~fU;3{29N;#7Icl};@@X~gU!hYgp4UeBMP|=@M zvx$RMz91L;+**H@V5(dpwg@1FPJHCLIp2sL5-rrY4?0LZOuCQXbbg8s5_2>1F+5sZ zm7&O)Ssb$7665^mMfTGoz}yGf3qbo&TlxALH}?b<5Pp(}Nj&6)d{?4avyFj9HL^5+ zvvK*-&Bm3j{9kbXM(LgxMwzBwrG=`j=?z5!ycluWPY~SPD!3V}aP!rMG|?^Z+|y-( zHJammLgiJLdG~pxXeDB;O_Q8Ec&pGu5iTttq#Gs$}33a(Q>coyOWtsH3poY&cA<>G-fL^v} z9`|cxEdQ#!^`CCF$QTQjFc%7f9*MBP0*A8u4*N-DqC<3}ejklRrtD&Zr#`=ltyvXY5xs&Xi5!evX+BWweZ}uTjdB zvrP@0LE6BGa|vmevm-bkMR-CWWUXjjpC8+481Xx)&8)xo z+g{{R{FnpmoJE{7bB%)nA>-+jqt=qxM}}M<7TZA`pUDR>m@)eUo+6d2jM;a|j99+C zgC*7r3KM9srzuwmqxoABLuA&=g1Zbw7UP|89;!XJz{Nhxrwm?lK^5~$uTNra0WOBQ zs52T^86jd!w@}m0&iVv!_f&n0R(^zimG9`q$x(oq^J`w%mNn*Bk~$RcBV&#_4=fd@ z+B0poj9OW&wqeo^ZKs-BKG&UOAAX7ST2-$*ES;NktS}or53%K6KOyQw@}>9ZIE4h} z`U^cU?UONqvrnFgP{NqAUZ+K3J2+*BQOKCBO#A|cloS6f;dAz-nXXj|r38@4N!4_s zn#E=YynH9+*^2-lCI=4RHRjw!k!tR;iw0J3&0S~xM>Vp>qhuto)VS?taY4m;@lkIQte1NJ6!dpLuy!3 zLt-QG#dIzxs;OL2FCKzTcR_+@%fMtwk;R$ZniWqMFX@t5?yCuP(Jl=+1&(~B}a zDbvfZrx#_^2Se(o(@r7zy~yWSora~5d{uZz{T1Z*Cclt;{MdAUZ}L^)A@!$|--rC( zB3KyLXZ!QbZJ-73g_3Hb?G>X@7hg4inucYh+8xt#3H6n$vg<+%^VwP_a z2Q?)kTEEOgq-_oINyRqwMH_If@E|3zB9)sP@D&0!DO;wD1$-DSUlzg5IIuZkp&4sF z7y05u3-d)LnKpwD=LL<;FN}&Dq5P($T9A1>3BEs0|oP102WK!HNxd?;wbVIko)idCh32}dZo;&qKP#kj4(ccQ?Q#D$*Y>$63cp zy|hl@`&&ip*0Z$G{-ogcRGB6p|5Wq~V)2~q6rLn*SOaAS%~S<_|I+4_Qhpxgqu{qp zJ}Opovm{$2tI1ei?(kkFaG)2QM{sm^rZ9bOG&|l6a~GB~?o-pkW!ahXRctL}xrNOl zaS&EcV9pfG@x(66y6^N2cQKvfdXU46`3q~D;el3HE)nK{_-*f?5XQC#jXBGBh}gpe zHO^^RnF|MqK#R2_X!4kgCgZfd*u(`)P1#>jR8P0-)zd;M!`9XRAY=AMB%W1a4(-pZ z^Dxii^;pLF4YT|ev;0dlPkbQRhK!Asp)7|e-_Ryab{j9;hAM0kpE)1ov_;F=jfNhL z*&?@PhKc=5rfsJ&U^?~XMW(gdEZ-Ta+!k>r6^U?;SUb4?rOLRcErbRfuT_O_ff4o~ zsL$jr!ZBULl<9K;Z{npEe~Aa?tV1KQT>;>Pc2lvU-x$qy9#z3>mts7s_ zg(UZ?uaaaW=C0l(_a?bF$%Xahl8m6-#XLBv56OK%5Mo9aLZ2RHB; zUoH*gW29LN)6YaMh<$JJ=ZXug#V`TXf2v{xP5o9y{Y?nh6vfXeqA|@3aYgUcCH24q z$VA!O)$NFF9SCop5_1y)LLJj%ZC~I@(StL-j2iR_UYO|-0mabBhagg##o`Egrk<^VLn9~ zO#Y?moX@RYxKJCnNgyh-a}weMa(S{AdYV^_b0(TsyK&n(SWRhOhXArMe<1TV;-WE7HTPsAK9Wph z{sgUX!P626zH06*@bwRLj#jf^X>#(&fvv^V&o^4Rf}_dFCkL+XrgOAP1w)flKn_eT zi$lKAiWK}zPB(Jk>6JQ1t52{qIo-*DrJvC`T4{ot$qAAJNB>giXjKVjCZ`8EFtm(5 z?PvuFUM8m}Iq);7S|x&&N$o{y&-ziMYDEZ6Cbf{%UiD{^s?{GDnbh8-7S^9Ys#bd7 zV^aH&+PmRUQiZc&<+BY^`e^#CDStB>SRO&gu|BL(zL2e7=2utz-KP)cG_L2yH%;`L zgJB-d8g02Hf$ym3GTd>D$Ul|i?&!srFagW5LWshcUkj0LnR`*EF*`(hn%QsBlxk#@r=V&#GNx1V>}gL{$ueTJ8Q5;4=4`a4QX0Y(szIBb1RHW;uH%JI%mi;f~urhK&=$sWa5HC-AM7*xKBf8%SI(@i#m@vWAagET|3~7Ynj#5)YQ83XtUKV32blO-o1Re6YgH*-*fs* zNmW*TdjCzuf3K-qd*O)Z;hY@nbxdZXs+;k=JMTTw0fHRPlMmewzSz^L{C;P^;KrQe z^AQ$xuhX${t(on*y50JMqG(`8$i6#=ZwXz2R)i%&Hn-4%7>FrfN6J@)Dp}?&my{Ap z7E{u=<3l9Gtld4?4aM6UHA^>X%n{3HV14LWvU6g)3qzJFFXw;8R9m-q<6DxXG2_m^ zBVa@04*TnrQ-9g|k8X0D4!>MfK(t{LVZ{HKuyIrGBf(|V85V#I2CsNOkkh*U5ENu| z-uw$V_QomZHG5fqS<_X8%ER)A`G8FO`MKA35*lb7BS*$bOu5>)U7R4AQ>GZI^u0Q1DPD^-WKX68QbAKBmQTdfk+Mo z+d|zXV@HQ%{6uFUkwZODIwfN#J0$fpX&7M~>e&|RA&FmOsI9+_L}YQOS6is3B<}i( z#0yD86o(4iLcJt$_ZAYXNJJ8cdbfoNC2te zZhSU>2bK@4e`z0F99gO%W-F#nIb?EqDO*N24c_*ytnBd0N9^!^ zqP)ZEDLxO4o9Q$8afkCgWsW?C-_{L>gjwI0Ju6Z%c^vxMxE}~xbE7lg4yd+vRNF(O zkTCU%e&E4c4x3r8)HwZb<-Q{rJX*fBHPMYZquO{nuiBXsnDhd18%;JFgr^fH(gDGb z-}U#|7YeL5U!uL|-+$qVHv+GCLQZWCgseY_bffLN1q~7VFl3wR^+$EcehBqi1FA=k%mVeOQPAjVUX&2 zBn3}$upYmNJv3yMg`L|ZtRo+FO4)GbE0c{HC;!lpT~x_x?WST8$Ta$H)af6TGvOd6 z|G5-aYATZ<=aK-WCq1TOCe?_GxyFq7tS`kx?m7499p2?;$44U1aM(B`5Dh@NER!E* zr6`h77SG1)rQCQR(lON5JuM!8aePWVhLrqMqVXe^8LZo7q3)Q5syDXdFj@FSj5C)? z)UG)(J~Z(fQE{D+mMp=C=Z4ybds6X2CF8c|lA1@Vl73n&4%In%(h)PPHNGilJ+#t12N=zO`3cC(UOp;;vax#LP6k7~(a*>vkQA}1M z15IB{zLyr0=7GdykGEkBXJq$4MGJ)8uP3kk_P#*>7F;U7sXZ!kGUO$a8I5=^dC4+W z4B~#|C95nYFZ*&0N2WY@4Ivmtfgt>^R2+l=thqu7h*RDY5h$uGN(Q|g{PCM2G2Zutz={9h z)fWOa#$)G6ndAEK5x++s$}dyVAhE~egirll#Da+P;$+2`c~QGpS}st}8}eCKxiANY zt>)M}=jD(K)z%UO!+B2r?O|kvCoZ>CJL8pL_=~bqiT>>i244*-rxtWK7(KsK!is1` zXgoOCOA*T8dGYrbbbi;Zn9GXpBkB#l(}HsM$LnPol;|0|PPx-nglt2J!ARqvB;p zU`A%nZ>_hgy1J)F%|82kp7ZUqc^>WVcU9F?SHJ82Uuy;YKA+Q--+wkjISw1BG158+ zt-R4{{+!3{to2tB;5Hd%Kh9%z2m?e4WZWjh>q9+WhfpCx0D@t41uQk~#|CPw6d3@) zaQd^dN#Jw{14RTtFpR#=5Dn3J{^@1K*h7Vjh8&h|*GBz=Nqy}AA4FAyemD{AoRFriAi<6Xng!B6|p zc|{0v&n`?aX-APlZi}=|;USpqyr{hc$3yzfsBWi)$|Ir;3#zdXz4$zO@zR@&PE6FI z6qms(DR-XXmDG}M!z*7pMppkKPJ?~Fcm>KEeQCwBMJsMnt@sT&QMBSRv%k@biCWYm ze+wnwO+By2DYA}YgvfLGgJG8G9wCPZ0RrWz&3q6PmTTqPvYnJBnGUwV9%5%XR3<;}uYq9Q$oIls2rFqQI?9)y0Z zKtBeq#gmUIH;vk5UWbl}a_5jFgy z>-Nfu+Wd4`3-rCwF0r>3emWB)vo`M&*1hNT*!Ac2EErEfns8)$gv`al8bcjUsP?=b zsPkX+{W+2%+(q>5rUS#Q6<^`*oXst-k>WkQ7PS`Hn#!GlfYWGF%DDphv31ewYWdr1 z#J(*kcKt2XOovbRXWTE*RJKD?w<*!O@%%MxRr;r2OxoN~(F6quh-xC`^)I5lU8v!+%1dhL$cE{Y9$PI8lh5v_Jvt*qZ z^pc2qu^QVVR}-tTmhF(YXjy~>QC4RiA+-LPC_#hWbDZH;(=^BwdRL@#=Rw_*s(XgU zR31LrokoJALpRX%`K#nn!>Ic{gi4u$HRL0g1@EXs3Gx zUu}O==P(}j>9yAKBiOy}7vFAbv*f9^5n|xqlCCb<3Co8J2jcE76$wGHItE8ux}`m8 z`I^qhw}k8nNY_r{Vut`Io2g>aj>lJ z7Jr{(dEiGq@fcfvizur(R(ETP-#GRptM4a(_r(UXwtdm|gfz~&WLrNfy}6 zRY}~^omJJ=P!%Q$GRMsgAy5HvNLvF{6+9F@bKwFvR}Du%sBUYZ*eW2L@8(9nu7r_o z4OAlrgfrb-O}i3m+8Sy?gcID{n3t6>rmbO2h%lV1k8^Y5p6}^tYZxa4=W({wK4PlJ zOD$NZv#;efI#+%z65SU)uySzzJd^hc_|R~uG#EJWbe~Fd&T8*?QLr6Ubn#oKjS{n$ z98e{8{cTum3HK+W#2!?Zat@~V?XuU5u)HO0` zP2O$CI;<7*I6W!tN?sOcwdo+aMxZSsS0g>Pv)gL^7HWrevW);;WW9e+!oA<9vZ;nf zx)G#{&;|(2sIpHQ8u`WI^0y9^c-a?OhplJ$s*H8niSsA3PU3NfugX{-Dp9i&SSRy1!&haj z4roy~ z=tq>C$Hp8s-r_LB&wLs?Tt4w;RE;ioS8i!lrFK9V8;*bCQH(EAAwV9i?hQ#RdL}_0 z>xnM;xXq3oShU@Co>l%l*alh6`b!4W-Eg@&z+E=NaST?XMU4l zD?~Xp?Tx5DjBQy+3rPap^8oK$pgL+d)+^CO5*MnRu9Jwkvyoa)a^C}qOhq<{zeZwB z@NMg=vWjopB>IV8hppU+YKH7sm63C0VksaSw`BCT6zXVIup@7f#R|5J;Pc)k;^39vqbO2SDxXi9eyVx zoF@%K{{C6GSrSRsU0uY#qU@g~-A3z3{5kDjQXyVUjdM`{q;Dj~09hmk67Dk6W1aesCT+NxHbRbnj3TvIOLlU(EX(Xhu z-bq6e#RI7ZQdskR9FnLWNMj&{bq_mb+BnFfd>|R^v)TI*j<=otPB)vp3V@SMPY1G< ziD(NN=<8^p)w0oL!|TR4j^JxLM}g9*(tP!0Hb%Zf5d+5XGko>d!o$S)tC@Ew_Q+*D z@%qbp=I>$`+sYv#!6Io|I7kp`3l+(g zL+ISM)!4D+>_aScV;`oRUCM(PF!111c<@bl5OYwZUwy|SV-E^KL2N=boYL^X(jSUI zHO3*G%U~U=DUPKS@L>wO@NL6^L(WD_7$!7p!iNd#zW#HZ!5D;|321S)Ox}x>wF5UR zKW-s*ox%ppsvY=DrtX{)Bs7d(ES)pQrfVJmue;7&S5VFy;Bhs)W4&W@J7 zgf^}`W1v1vnI~N^4UbeFEwv48-#DC%!TG_);jL_H-#DC@a3s_SKDDJojl+q;rxW4R zi5{O$Ebyrx&olg5-ag#^f%f5Mr_0!fzi_&gVP8`F@L@apH|)bHY9DSIm`K#D7p{&1${^#v`{LVp$LX&OvSS zb=M=f#&B$AC>*<0kT>9wXTHfc>%pVT@Yg+m4v^9b;4Ay!S7UnyaaxaSzXI1T4!9Oi z4w!2GMt&K8|ET^f;$QC$w)5RQ4mO^h)ihf&8|v06`}!W7?F=z)T?_o{FQ(l|xOD@a zVMT5o35|1LK98qU!iRnGbdU1%47{u|Jk5|T)v<=BJFTWqaa@?EPZOTDK9r}$V&QSW zih3w;b)|Ck6;ojeVyjZ8J=EkyuPV{*XL0UPp>vSJvDIq zl)4a}UTt`KYT)-73Ov2q@buKc@iP>7dbQ!{se$KbDDd=Z!_!j(*UwPk>8bGa>ag$k z6u-mYec$hZ=lgwCe80|>!}F)XuYSBl^{=otn?@YC64ri94~?@gC6>@BptShB(F7}nkMXOr#)zT^Hh9+tJ@7|u+} z#GP5Zv736rj=Lo7$;cbmy{Fi9Uln%Udx~B6Rbkh?r`UC06?WZwie2|rVb{H<*mZXX zDz?SA?mc1GJ>fcG*S#m~x1Vk(Rv` z>e8QcA6;pvf)htbe0TXQZ^nL6-dNq0AM+MQeL)wz{VeuZ!GCY*(|?a`Ui3sc_nnku z;J!z$RtoRgXOM_X#);D#5+MU|JwIR|YxDSKTYU=9G;(*qM z{ypv;h6hIA0XKC~KQgtVwP66uX8TKflBTW-mMdEcNxFBKo&Sn1SF${?wV{$_v*{n# z<$){@YHb+EvI$k)r^|y_u4-)TN@6M zb=l+d=QVW=X6?|{hQYF?d;5Z>u0vTH(%NvStm(e~d{Y+=|J0$aL_%59J^h)cuA!_A zYi$@RYr3D0ZR#Q;In`=y7$$4Fmt~=v53-e88!QUbY%-F#=yr6saom&c#jM~220OV% z24|7O)}0KL@%*DjcABlc@{bWlhO8~@Jh}y0h%Pf$r zlWMx%gB@Of zBW54*I}N_db|nD6TOx6u)CMS!cDASYA5Tgk^YFu?$}mmf>B+GJK6M!@G)Q_!?h^cNNRP(VEW_6n$?!D= z84lKYqR8-x#u3)-uHyNRcSrgqqPyV(jl_zCzMCZpLrkJ-`TogG@_)G$>j|v}P?v%!13BhV8R^qUs?Jsdyg0S2{ zIzofBXRy1uf1eyPqcB=j`*GS6~ql@SiGEI`2gV>^sX`tnnfkXoD9IqZc* zqP2Vhmr*CxT6#Wj^WWfq*n@KH{%2uK4H@&lxAOOUm&m_pF4Y2=R8;GtsCG$1R2lml8n zfUr=|dJA~TV$k|V540Yswxzt}zMBWe`T4GsdR`wBem!B~IWi>RAa9bnoBMGD_|hb^ z$l8`y^FjV)-CB!}RdM~)&u&{T;BxsVgOmWG3;sS)OYt6Qf2;Wvkg7fkGsk5oyNOW- zWd3_O&vur}U-=VvA^6MXdQ+QGq%kyjBZcX+Bgy_L7 zZmE}>x~^8F<%fW@cNmcNYd~tI6oa(CV)IqS?ENFwbPBTwc~0H!SzBPOL88CMH%+Cnix@>L!JlmMtL6r=VZH55=v2B|F+ z1GNy(mU9BAwonYv;>U&(V6}x}U>1uFB>-#-ML`x9aisvUEvpK#IGfb~vMsAVUa2R* zY|E;`D~{t>o~{9H%c_Daz*X3Y%0Jfnux*3aW~W5=BN9)lHE8XTwJBFo6$;iqsW#)8plwaBuuEB_Ti>5hyc2+2NO%O_rkZZofy&&X?lM}QK-E47u!A7)~k zFYN=by*BrOLa^VWMPwVuR%*8vs3#3EK_7*FvJvJ2{yT@2Mn>IrKozPG4M$? zmlL$q3T3GMSUDL##Z0~ooU~cT#>x08X7D|RanCU{Y@CdrVuof|_cMlujg#?H%+L(; z9%X3QI2k|149&2wSbU(4uyHbeiW!<=;Fk;y8;9-;CdCZRuyC89@rz~r6f-o##J@8% zY@CdrVuohec$J}H<7E64Gc;x7MS_-+^%Aty1%j56^%Aty6hTYLdI?(U6Rg9y89&9$ z^_8KIkhM~@lt@m+Ar67B1uk_`ZH6Kn_%>kcE!N?Nt?}NZ0;3FD-+epyLxYua*7p;PdKYe(n=b+*Yps!mSvtH5fZg0fxazQGjvN8HM=qhw!t9gZdtc5aZ7( z&mIqV**Vo`S?7Jm4vcVD12cyAw%Cp;Q#6^;h2_~8q*DdYaQ2ghLIvAVo+R#kgqA8q zHlQU{b%Rt!EI?N+?M{X3=`HYicYdXSl_i-x4qthP7>PsO-^yJ~s>SWCMiBAzPB~SV z9+S$38Xv6uY1RNM-<%FrER6pui<~fauACs%2zcSuB{=2$r`U>OZ>Dpn+D=Wc`i1pc zzcA7S$eUM3z?K#1D8d5kF%PrbhfUg4Mi1rB6u#!w)|#!bj`70x+{&%NIW2<5c*hDd>^{ zhAc&0>DU%)#RaExZ4o{a41-A!K8>LQh8boR(bHH`z;LReAb1)}3K*pBmMbB48cPZo zr0y09LZ`8$fZ=r`0uVWkB?S!I3|7CqqHpG?o-F{K8NWHjO0(45H<@14K<@ zaRI}3Sw+w^78fv_$0}l`5h)WYV3^D*LZ-2}fZ-%o5iyO$1q_F?f_y0yFc>~7$QQ{e zo>ZHa*)Sqsyc#cx7ev0Cj@i)OhkTj-Yn3m4-NM;?6!~(Cd9A!nUO$?ANypZft5-1c zMam0{>lHSh8kR2~T;DYkQKJ5vSmPFULLgVVkSj+TxgsV-Q~=h#baCGOK8rS1>dSq&E62QSTN%U{T)|={h1il6}l-AQ)<8XPQxtHRwWjSC-nR)W2j`^ zB+kN{)~Z8!a2e+%5e{0^IRclXw5aoYCk0I3%U^J|5=WGR&XzpjxUxl^sn|wq#ivi< zx>D5n&v+jcD#HJ9eBXYis&l3?Y&Yy5M<~QYWu2yesT=l>BN*bLx=vHS)D8Q`5e)HA zVdo%oHP}CnU;teLUl@zS)Gu|z{&56DJXG3g>X*8Cym16WJXG5$nHg>v_KzbN;-TVB zi6KIP{o@FRcu?Kx*DrO${&56DTq~Q@&Y*s&8}^SQ6yk*%PwJPtVgEQnAzmo*q<*Oz z_KzbJz_{=od^~nH>>o!c#0zDf*cS+1pZ(({b)FSW19)5cpA;{#@IU~holOM+pe3GV z42)^N6ag@DqN(pZn@`IB=C$%Rc`f08?JZPI^0G{QC-uLjIP9kg&Z)ofD&S-P+4}@br3F=fT7S_Lp@Y z1fPmVE9*Q6J{4M7=b@9|1X@|=;WIpv&( zFS1_FdGPdlFX!O|jxXmtfKM%T9twK>KkPSL{<9*#;R-$qU#~N-l@H5nAMt=b{fGVK z;sJg64>LX)*6-!(E%JYXVTtUi=B#@U-6=eax6uB~?@*zeLMoI@hizCik)yuiAxM1%Q{{8Joz5xT^>Ooui#8rsUSg5DYSYPo>Ikkz-`!ycu+4x zoC^A8UPZ*@%|j(?rvAide=1dvZ-}nWI)4*8#MC^W^71VO4?t%0nv{{)BhE0jg2a+7L1KFRY+Oa0@K3HMsBE_$<^l88Mb ze#H>{iX*9~X#OUE)TH!|-#OJC(@&6t_!UF0$EirV-y)B+2hZX;J2yP(Y?-I^k4y^T zZpsxwUe{mb%9$Ey3~C_1sf#}-jx+i(3reV8)H<)yy62#}>mp89k@MUqlr2dnHkum9 zEq)(}{p1o$Y9LQAGJ|YlNe$$1PtXXIqNoOPzu{~$ijBoJkh=|moMK50WUC>NRV=B2 z{5L}&tyoe6d6OZKS1hi9yc(7#u~=LKNgs&)WEP8SAn60KU$MmD8pt?{a$Xc%m62D*U1Dz+NC6KkeF9|Ew{a81o zU;oG_5hLF>ua!-_N@Tt$o+$F8O#P$QGh?2I?E~r`we~SBRglI%@ai8kW$GV0mo_6IzTQ}*0UUx)S)yghj@Z;@S- z8YGUu^}}r-MsOC#j6I515<414==j)bzyHI2&KphQi%0=fVd{5;YfSqGxOwDazx_j( z1`77j{-M9^&W$X5Puiz$S0)4dzwXE}ye23#$ zS~#e7-$Cg<~!FE%d2|ERsX_~b9Kpall~-_V}B z$p408uM*muBjowi$i$&>`a8+JRLRJVIDe{6_Qf3M7!FIuwqI(UE{>ORr72glt z#rLC6fqaFu`{juL^(3J6z)hY4(ty_2Ri&KrO%or+ihG_#(^O^?Ad zr*m+}{IdA?N35lH0{ttXYpIxwmVo0Ac;NV1NI@SQFKhT?vjTAZemgfYHql!4EXKW< zisiuZR2C?Zb^|??GP!Ah<5LwGXB)*TS)8q9=LbOA)R0tckJa>Rj>|IbP>Lk8bz3sA zX+u65IKInT`h=jCgSts6nMk;O!e|fSrcDKlbmuHouu$S+V6?wPO=T!clt)=*I|uM% z#j0<~_m^V)D#`a($r}$wOXDEFh{fog19V?5#nGl)UIa(GRe1N&uj@BlfFFEd(Wb_GO0RP2-wD0x_q@70c9ZNwgSai26M1o~= zkxcHeY;4{9m)S51jxX5X8Nsusa{Pkx3@F~zH-CWy@;4;vTvWb%E6%)@FUMD2C1z=4 zYu|WxuYUQ@Y!U-|a|P@EU3$5l4}`@13cU&dZ}LWa%g0mjWXIyt`sIEzxr4u_#A=Vx z+8CVC0c-go+=YR;OZD=r80Oo=YDZ7s>{l-bi-hBEPUhI1WG)}hMqVhCFCQx*#9W=Q zXAN&j#N(BRs+Xx1GmLo)fVqrTt=KRoRV(YVvGvxna{|Wv0##%%=H(oh&80oY+?Y8n z1!Eq>wk=n+0vB5MUPblsXk|jLitMU>rDbG8xwQ|jP!TTlD^zHeVk%VNLQ|qr6#&xu zU_}%Mc=odODIq+&SHKLeEL^}0y4^Vl7yd$F?u)nD9-Mt$BD#wbm83i54j<00MP<}_ z1aNk*Oiq&iRB9PGd#@s9G0veHID2UoGjMjTDC4RDoZZwn183KQGAIF@-B5tDYdsm1 z0M2eGz}dB&3`ziJHx#c#MXSj^pp-djRdUa*MihmrnH)_<}F(D3sS6UE&CpyI-cidyDiUpy}j4U+xx zUj=eRzY+B9D8Ubno5v0_tqQE>Un?uO+1eN+?aquyc?*p9G|aQfD{nc}l(!5)=l(13 zAFXcrpE#mg-EtLsY{+Qjb~$~k;=@$C1s3-qxUP*^4Iaxiv3lt zzC~^!$}QNizs#nHZIA-B8D7MHNP zrcG8(XW)h*~@DO4E6aa6T=yuUM}6>EoL z@R#HLLdBY~aL%BRz-VO=2!p~}IV2Fg;+98gJLGHS&LXYcX|(cfJlKp^+%my-I#nxA zz;;I~iwSKy1oqj~K;!{Y-`;vz>RUuzt6nbDw{&`X`9-O3Njlq;&XXb$cxUvoSKyM2 z?y_T@=;hmeiSS>rz@?X7p6eI5!~(s%&Q!L%%&(Nq_0Qx+qfA5+?96Y~V}h0<*7DD* zB!H8t%`}q0RI4rfq)Gx~|7P7UV1Q{I%*1)s$=sod*x=$qk@|VG@xJd+s$UEts1%9M z8&28FV35ekdTLkwQjsqSd@zVF7Q$-Q zi>PlYNX$yT5tOB^u`a5?x<$lXFZ~<5_76rxY5ND-m3xgJp8d;6j*}viEXDd>_Xi-z z&n9DC)`}!&YxjqavB(X&Kcw85{acd}%%js$?W};Mn>nDB`C|$927|~s))0Ww&8%om zO2>yA3>;^$A%LWtS=pMb5Q4$tyv-eODS&h{2eu|Fg<#TRI}HIG-ONF)$$>&JD4aEh z0E}*CRclhZJghb_V~Lb=DNuAX4{1$S3Bh2DT|)pwH*;`n@(>{?fc`R$20u6R(AMN& zSyW{4Y!-pf%^cF2l&%h|6;?czMbL9Ihqfk%$f9D3V=Mxmn>nmCIaC%EP+ZF*Nw1k! zYjT(@8WcSX^m16ODEg#@0KG!XK>(whHV##`^l?C6gp3v)hzxpN(ZW?z-SbZ-z|d}B z^ft|<1TyDWgve(_5~t)1DEew|Vbm1fcyS<+Z~V7Kfy5u!&tZRG{Ty}%1tE5HOER)0 z=;yFSTo8fIi{GpL90ui|q8wi13`>gQSl;$5^mE9@sNHya-eEKlTgX%sqw||jKZ>pC zv}Byu($THP3m!;A+q$$gZ;xVKZzn=lZ8iM`YhF}rCYLrU7QgoqYuR@^70cWqRO~jZ z=@vciLR2jFw(~-!?&)moZ&vdjF|cXUu&L$1fXKtqXH4HCHLt9Wh>GT=moz%G>KnZ75KGpdHVBt&R4Ya3=Qj{Fm7g`FA)*D+qyA`xS)G(YP)Vln_!pNDay(QamU+ zz!Uy?TK`}YB?Y|G#9(`C@*@cyJhh^Ov$cw_szwB>R1wYu34sQ{#Ic&sQjsndgfl@w zs1~@@XaN~3%<-gFXM%!IHE^p@1BV+5iPf2)AXE?BYV?2P%1&r~;IoQ3by@6cVa4K|!Dkpcq}CyP!#G24{kTKp8+$ zWw4mPP9k+CCGF=m5$tI%+ za_Pur1D&YblyEkS@IU#)t3~+3j$Yy5_!DFS%Gf%kbXOi&Y!*gM)P=AIwqHZ73r9&Me7*Q|m(XHl5%$M)d=7L&Dn~P(Z1jN94&9)HFp-cp zE3@*35RJKybnY|86-7rlm->C?nCN5TG?`p&t*0csFioM62x*0mt9*a9L{E6}nFU@$ zALOXjBt3ZoUEwwKp>OMM6EQt~R-h{g&dj2IgYr*@o9YB#l7O$5o=?m}2Vj(-iOf{b-PpAdVn#N zMa_NIg_`?_8}>1-5_I2TWRK!FSg3U*K^l+gVLN;H`DgHS0fiZ znIH`(zfCMh!Z##PBv>mSQu!5JqF_Ik^eG{a@-?{wug}nF)N)85r)dUg^FTnPs3vKZ z@nX@upHc|~MA{vKF&Ue~Kqg$=$X*o>=U@QmJ|l74H17&&mGVO38kpahm(r&}goK)x z*-{~KfgWdsM5bz@6I>FmNuJ_%<;%=1$b+dT)-%Z+HQPH+P!f>_g138aYC;{`r@7%V`_)?``6m zRH7aYTg&HrACq!eS~9lEAF0WIY%`zT6cVuzk)r+SVSYr)d=C@(8BXNK5QzMkFH$}4 z5F%2CCF_UJA4LC^`j_}CI8eMjnYX&XHU86?e-scwQbIk_AHj?C2&yUR-k|kY8tM`F z^uA{^&XW|EWAtzLt^GY%`%J8L&%xO56k~sT;JgnyeQfxk*z%aGuXm4$iU^RaN zV}bSvENFWK+wYHXgsv0lS*-mLST`2FAXaFQz`8a_VBOgFujx8rp2gZBfpufuZ`O69 zJd3qO0_#OR5?J?oB-~!qBY}0VN5bvKt`}+C)J2GAvDYKvcD3rIM*?eJkA&NU9to^@ zJrZsYdL*#s^+>o~?Rn{uz?#=1;r5_M0&8B6gxme-&SH8b-0t^C$bgthsG2yvRvl-7 zDtW`I3#(l=l)uXyA z>*SR~MqR`kU!RHm6USTQJ2v~bOrf||i6>+07Hvy9FD9Iqymp;08ecr=VCXXu?R~6! zTGY}a(2lg*v1b;H;k?CL1l;t#HdIcoBn$I>QtF}j4l|g^CnRdodS+W*{c6Xy5M#&7 z_6Rb)e0ui?s-DLHT zo+sUJ+`E-4wB$(oL0fmdW&cUyo{~w{@!wCS_C4pk3!}L6=({x1wkE%oh`q_QYEBoP zxSChx2|xT9@PvteCf#2dzc=6s6Z~YogeOewll2mwFriP@OL)RWK3Ol}2^08CxW6jl z2^05Zy@V%B*pu}TPnf7DYayO6K~L5~JYiyGHl!is-`cT_i%8zIYdFedi05%|TLtbEc?vb< zIk+z*W9?S+*YM0#9{c`nYoxV7f>084m;N`iA}fdGzfbQ1Q4@O~k$qXx8ssi4F5C38 zNjXoZ_U)pn)ApuUq^HvaFDxU18URT`0tZNHqVh;;ftIYenUkd{^FzEA_he?&I3443 z5NvT%W>kaOp)v@z=^%lbpeHjVvq_Iv5|NppB{L+mPlqUp&`i*g8Iswm6232O$owM{ zoq0-01ZTKwQ!JZse`Gf7Uz9|2CTPbD$?Vx*Dv9t+(2W_AY+F;nLcm@~1ZiZh03_YL z-!1ON%(8CabBkLsv#fhKUfhY9W!=Wn;zrCY>rOU}nE7NvH8NAc58qD!^Hya-H5yO$ zWIWL{iQP|#(uqTYG)$1hKyjYt*X1kIyjdMy%vzP{CofJ|NC+K}EjCSo^I`r?Wds2ap{)>b1EEgHGi5hxGqw ze%kElC)XN7=-{J9;+m#6UdQnW*GjreMC6L3%{m(j!d8s0niONxdWqZ9AXqCN!^IPM z`x39nTlt;6X5-$TF6ngRb!yT*UDD{rGe&ezm-M;u>=E75C2ejzlSKD)Ntc^DLVLQT z$;}<1Jzdh{=8n*wE@^RdM`%x%bhx?0+tVctZtn2*bV+}kJG?zz(%$9{Z%=m-dkmV3 zC)_)V_VgWvJ*_q`ySB!8PIq(-MMslNTk+`ADuEyS7Hw`oxk@iH-LH?bATpd@PaEr~ z+2UP70GKMFW#?<1!Pt8^%!GJEGT*14x+^c{wUC$Eig;GD1)06Sx18RNh!)A+DRO!v z7b6{N&3mTGZYnFM^GT}vny*J{eYl+71KM%!C2IP6egW9feA^S!_vJwTdt1f8&>l}$ zvHdd&a>d*qC)USX4~HAwC{4TubswbP&CA;i!#uHp+buMuxvItR&)+u|E#Lg0Ir=vb zm}NcXt^8fM9o`+BBOy~%N-YnK6k$;7v9nb|?v&CBe2LLna z*k)_#&v}#o7yd`y%%tqJQBIm$luM<#R1#n5OZXg;gwaEERl4B3L%PUz9?4Gw-7CPC z>b!+XX5Q_k7mgfrpQe68YCi26Dv%az(RhJCEg;<2VA;$lpm$ z8|n_RFc0LfWLc&PrzpKotFPs}{$L4Iv^W0%fi&CJd-@BXs5 zgcB5YGpY9Lsa(bQ33^O(?L|;Xu`gRo?GAHX+w0zIKjtz9%`cHG#A0hjrv#g3Kbmk} zEFRvPh&-5-%d8NPmO|=cYA*^Oye;vop9Ux9>V(vM{InAA3OFdxAD`v3a z_rEDn_YQcjT6_+8=adO70hUhDAAo*>2|`w9sv8UKb)zpgCIZYNJDh1#?R!LA4K-oEN}Q{Ft*qu@8OgX-48`}wg%s!W_Jm7^C*nKsXSe`4R&VuwW!pgcgz-!-ou|5$J03Fi+q&Q z2WN)Q$)-5xY}TQVzt+5ty^+_yDko1su1|G`3;YIzez?lhxVzXl&8Or;i1_&7h3+g=@f-T#3Hr1KRE2|N)= zPP6%*xdCbCu~N|{qod^;wtY>$VV1 zv@Rg|E8Wh#iPYB~C!(*oV+qq+2`~EXlKL3AdI=|L`Qe2ssbu78(xl`w4ifJyv&zWT zq)EwBeQ!kGL_=ZZYSN_Sp%|GbDS3+X7`d7>DS0SH=!r6f!ce)SNy$SoQtw4WVWeEr zq~xI(vA5As7$}!CDS0SH?nz3Xt1(V4X;Sh~jNp@$JQRk>B~3~mib}r4tTIL}X;Sj6 zs_3J?nGBIjnv^`Net$C=A(u2Mc~<@YW->r7X;Sj6`u)vh+-lOKw63|*o3nZwAKA=9_n6npcjUE1 z{`FbU{144nol`3^t(hmxGyahIs(&Z3YvOsH8T1$IloZ@tKsIB4n8~W8?5!q=F94k9 z@cmkp-FJS45T_Y4rue2BkM&>}m=WxA0UzJZBQEbj^{gQ4+ufBLYpM;%{I$vKa zkL6YTt0H@*kNV=Y%uDWFU);xh)$_$cDnDQK@o#&h;wox82B|$yYoOfE)YtiX>QiIX z`LUKgGEM}+L*g5KDO_=!z~focUcTP=X5S8?tB=f-9EUH*_mlFZ=!Q@)LHCDmiI{OH zqxXA(jEXRd(bJ5IYs4L3R27^mvEG0j2MA+5G_>A6Rhp;wo0 z4{f!jNzXm13*($lUB2n+$)c)4uP)!VT5TDldXH*C>hf(g;XTF?=rwm7e<09@yFGWn zo1?l{=cu9(@rR8vRKD>Jni28lsH#ig@>{_oqkd>!hwd`3m9Oxs`?oj$fKMy!-;;`I ze?VFrfA}2LXAq-c*$euxe1DIO&KsYY7xgFl&}sMPrtZOrO-cXHi*p~l0wT2eFDqZ+ zKnHVE7jhR`co@u04eq~>c{^1Gzfw@!`Wr~nj2~5IWz7nv?$nFtHZi}1yDzOj^q?!H z^HUdz`{2z_O+`h~YbBC1|E9R9KnyL?>y!$_0k#fMO-FVXDiH6+EY3}|1<4{1>9T{f zb|}*A7|0Ap1?i>(RCRC`15~GZAeO8S&H@qJjq}!Pfa=GXP*koAsZa=fxI$L?oRW3< z@DIbf{e(xyQzh-sFYS*|9p{Zu9VbE2aj1`R9@cG~34{{LY%%eCf^NO>(*K9^Q~#fx zk0m9*@Q>kF0u{oq(ih_oUoY@$o@in*ziLAcIqW)fSdFmtIu0Y)U3Q+Tw)8hu{I(9F zpvwUmi_Wyunchcj&5M@pe#=S&=w=87+2l78GK69w)*bzSt>y|sRiyNa^Bd$VWf3rS zXp-trjFy^VXyL3K$YGJ2TNwu5GL)fhty=k1^wb=A+%09A)3ss6-hte4r++)Frf zm-Kru?BM#E>>!f?*pyF&WQS+ZcvU##lF=QS^8lECG24cwtDdz7 z^9tU2ob9}!sl0KGZe}F$)Hh7#?l04et8nDAcs*m+$s00x*Ln-1T6ohde+Tr(Ee0(R5vk@%p)xu zG)D3@20ig>F+*++>VyskOkEvLs@?o9ncN`3YfDW}#+eLW`zfjCA;M_>fGRR$R=DS) z&CW%e?InT+MqKQSiTSJ9YjU3fUi(spX20b;)$%5e`~1(~;r-oOx*Ho7z*U5?+Wcw4 z+Oalk`HcjJ0(9mjpflT2(cLICL1#MiXT)<8=RT#Nv7p(7RQnJxw@<6HmVK48Q||ZZ zIFGC0p|%$@3>?_ymO0MhR@3)Ehi7wNtWbPPglO4wfrd6 zaA&;@AjnFrjI=T1hJQgJ&`lK8259aU@Aoo8!o6M>g;F3&rhE-&hJ=&p77aIn$6jVg zIQAQ!bJ=>J!hG;yrW^m=} zy4%c(E0h9thiApzErN-Po1hfPqe{dHV31@^p$4TuN|jQeyUnb)LMf1;TnNR?iYt@? z849I9ch^w1&DDZZAVZ-P=x#GBu22eOC|)Vh-QiN8eb`evB~>Q19x#(y`PNKor8*?q z8ejRz{5guX6!zF)IQAsqNtxU?_-}AF_UQbV*f9o>N&fN>4~0_4y@@^QHM;Q4O{@7C z44hC;nwhX}VP0!VOB$jz*3#c{MT4uZb+(_>TJ+fuqso3jQQJWn$z$HKrs&U= zd9UIB1^zt?{@v(oZOOyGnPCHE3M6+jR_;VPNklsBm0B$i4{NpjpCo?bRm-QMQs{4N z)Qo4N(!?lO3|Gq+OjN4npCcOPnW)=&+h?`BF;m~dn=NCe#yr*z%+$^1IIWgvR&^?N z5v)A|)1aK08U|bI!#{xnV`IBYokoRnwgMtJ0UDssTP4{VP@J?|9s|A8X?Usm-~ z(2EZ0xTr|)tK8^!ILUA`cYS}xVd(k>ZY5Cim!af05coyUtCGJGC0{>xM=vFRf-3o# zwd_Znty9-8gl{Ozy4)!EC)8QJ7Di6z=Hjf1`e*7o-842>%f9VNfk45}<+yAPZ7&Mm zX{Q-VmdVu3T^QwIIgp6H=&5+4%?Db`KdwCQYx9AnJ#(fbUIK02TBOar;p@gEBd^&Sx!Npdqrpee=Y3|>+`ac z*S}WG@19nlcUC5sG#Y*5{MV#e&daLyrA3AZ>G?e|CMo)B`WN1y2h$QiVt?|f<0*}w zvE3-Dc+u2n4Nv3-Ct}%trW}Dkqm3vg&Km)8V=(0i9tF z*pT^eaU;e~FOoaep4^d`Is;(MpjN6Kv>}{G8zBV!H_X-h_YyM|xGY@UVrg1vGH4H9@I*9n21`9;?fC-91{@oP<#Kr+0X zQ7F2GQpoT^DHL5pDP(w|6pF5)6f(R}!bR7&hKsHxIuI0H-)az$rs!H?13}UCttK*{ z_I6Wexaj&;g`!h*Eir+h==xTT2vBq_5rLrS`c_3gQgkixfS~C5Rs}v%bS=?Km z#XVAVEwO;0==xTT1b9W)x0*lz8Qz5Rn(7VQ`cc@|CJHdYALJ+Pg2bIadAlt@N4y`~ zdA+Vj?IJD1wp(7WFc4okZ2SWpX5xDi1Nf_a;?1ZHy4+oP6|a6=yHKa0eK`7x1H4}* z4nPoq>I|Ldr-j$xcy|*9FnDmi{)garr}_J~fZkAjPOt+sMrbbUPo6XSTq`U(^Pd2f zmvE<>x}#3hVdgt1GGa=))78k=c$mgaP(FV%tz~v)=^pCOxtwi*kr6oiD@lA`tvk{w zmm|?!GUbw3sz01{oYnjp-PDEhBft9S7_%OfANkcsgUotRe&kmlDO#tgD=0tmtB-cT zocz_G{K&69T4UBhZ~5g%cbYx^8$-Ym@#~N7G+W#?giry}ow~z`ZiOq5?$ixVkC`se zTYd@Bow~p2G1CQl%dbJYQ@1xgX2L~Cck1q@$4nOqPrnN3PTkzHKo!!RvbkkaD+LXz z0U@~46Ip@sMC(@ zNyc7Ua0J&_yiGHobWmYVYjyrH0!ZMI_Vn=7(}2>LJ0UR*-IdH|WuDB&{P<@Cc}gnf zo%~9+e3Evb(!EW#t_k9@U!?*CAuauoc7=ztmTcOyAAH|61V}o5gy`t3~KwZe4MnVhjkTck}(>2`)!3b!<9YSE= zPS2{l`I!;Vg`GQH(~S^HckXmeH$o`gxzjb>2qC<4r)#>A#qiFZ zuIWY=!#j7nrW;ud@7(FbT5TCIY|7`nojYCAjV$^*cY07iXL~yrYu?|q^d^x_J2^rR zq$ADFl?@9#^+j*PP7vh^R5c`xPd=KTA=t3v$H^xV%g5_-cjeyGyd8X;F8KZ|F{>>K zME?l&bG`O2g?l^G5jsUaL%|RYk|>^I|60u{eqQnt_L6q9U)Ql;C(C}->dmWPOS@;Y ztNZ6WaiGM=S@E>&+{Z}*=J!w>D|QY$t15pzZ4MK2<6fO=o48=(jFHnmBL6-uGi2Kz z&MOJ?{HL{oG}KdV6y8Dl1Y8eT~VP5wLY=y@D1=Ac-c`JYgrCnlg6nEBiIK%I5|a^g~Q0hzB#1S0=! z;&lZa_*tBvaGuQ9iRJ-A{*suUej#FKegh}9FZz5pR+xSd)51Id%2wYlJJ+6N&$MUQ z&XY6GQCv8X#?0&&xKt@RyzV{l;X^!p_;m&!&M@+Q?Nw(nh-E-+ZF=^GRAi@ZhOE*o z6=)=p?2LPvfqYAo?J8^4$3!0ZgH^H>{rcU{0t|c*r1!siNbi3&NN?x502I3F9F7!_ zsr<^-Av^`(iVuQRR9Q>&Twf5@B2@)s;_o~nuFt505=h10452rqV!a{shE&{X2)!W{Hy8q= z4vHZaSC)fRe3L~+9TY<4onaaPa&&Vsh`DI;&pt|ypDCv>!=^{>f4=fbHIKH*ooMH8wF3X zo^nXEv-QNk^B-`Ue+W;ppY(z6uk|%=kz`0DzH(yzS$rCa&-fg&>O{7L!4U_cVV_Sz zU}B(!vKo&|nERw!A4t6T(>{>61?exQs{t7v$GQ(HJc0LNP@z1YS*-Co_A7c^e$pCl zqF=fIB(4wq&vb5Z5uW%F>G~Mpi2(=-p7u1orZ%Dsp1ArW%|BE; zah28d9=B)w?Xq~Te-}0_kLN1InTv=~oF-7U_$l)A82+-GXK~6qlgi`F_pmO{>|-1) z&+G(V0Z-ay;sZkjuHokTCFTy4cv&j)jG)e?t~@td;N}ULBQS_CU&^7H7In6v(G|Qo zEl+kO-LFYq3W)P=+8~XR%WNK6bVUMQt@pG=;x|pPem6QhReBv&BeiZ|-BZ z7)kBThsqWsslB<6*K_4u>-DEspk^E&D_d6j(ohs(QvaQ@>F^sp(&yAPiK_%CdI zk$2_tZmTGW`sjH#G<^>?kjcA^N6UxvZiRleec-{W|3ApTaYz3wcT_h2cB$~!|7reB z09{_U>URa()mOJ_lYhHN!gavJ=tONI@6Tjnz{Fx+`FqoPC^{Lzm0WQYRzxBeKoq0w9Z*~Ypo#5%C&Nq0i+xY>!9H{b8!>>+yiNS<5z=ZvXEMX8vXK^PjL#O_M-?o=O`tPh z7H7jiXEKpi{L4(vA{IiNy$!*d+MkKFn!Fi3H^e>G_?(JSLC|0$Ur-F5ksj$2^Vgs( zJiYF>|8mbI|GvfPY}q5QuWIl!Pg+YamTKI4hevkASH?0-!xH$63v&gTwM)9w&f0Wz zXJ7D{(`j#Z1cj!9up3VMq_s?%wFKxHX`|Fe(vEhyJF?6~an7)sb^+#8_|j6m;F+=;Fe1B|9gk~ zT@V}JZdzxp9A1i=`7x%fyGmj-j1DEo^C+falp6LWUMKpW@f0!dNjDHbqh#8HmuYHU z(V!;GCP*_AVhft+@;jopKEhmzGrYVyy+0+4*7TZmq1Uk#jc&z{%~*=3{3g1fg?7a@ zo2e8UI&u{_BezIvU;z^JEKyVnrMlcYm=%c)L9T*a6(-+e$P(g#JOr|7qiZlNS97N1 z)ge_wsxF+l@avEyu?}e@q>&*~8d8l!0^DgekZMAtk3*8wI;1g>#)L@B8=5u_vgFnw zjT4e102%>0XfNIJ0GjDU5!4^@`nD&rPjw*Mb*Bau6!{x9VtAH`7<#=ePLPbXd#4F@ zdug3r!denB6z&;U2z1--w=I*{dHpoJ6Klmm7+qtAr^!`_8N%!uGfdE@EEF_kS%Zdz zCX0iH5Hx5Ap*Uy=K^k~6$cF=XwVQsanKNg1`Qz;2Mr-; z&=5i)Xvm@l4OuJ%4O!HnA&Z5eA&VL`WU&x5WKn~LEEdAuENak@MH4h+0Z^xDFhtN$ zx-N`Ub~C(I2yl;@fYTCvT7!pD+DVf()4yT}1nGSYgYKcKURhEiz=XcNNTPOK9`UHN-`_2Y)ph*#r=Fz*)9pF!OFOattsH7?}tZHu;1uwNSYCT{q2HnNWB zA+aySgW$fB(UxT71v}PZHFqMrjNhy{PTKVP@k7&c=(Q}d(d5d(`M+ztt<6(fh{C%? z4CO|oa-T@Wo|I0Xd-D4{FlVZ153M2S^to70VzNim0^V5nUh4Jv{3f3|o{|{gc=%ZY zi$jUIE8i67eF69WE1z8^VX?eXm3Cu110*FgK@8qa*=rX>LU92&-9| z!pKU!6iM7SVvek}dTX=_wC+8^t{-9Dw9dMBn=~ViZq9#aa#D=&MdXw3gmUiLGb zsd?G+8CCng{GI`lChEgUk+uu;iCaJd*^0nu-ZE}dj_k$bF(z9E|Z(3&5|?>E97Qn-o;1C&Yn{H zk+QQ#b6CK|W5>xSNnjnX%iWc`NzQn7kLX`vW98@ny!`BVepKC;ACjM)0Mts4E15rn zpd!c>nm;m`IKG$QIv(DX%)!rf>2XjF`L|KvWDfGbrCCc+(g1}OBn>_xIRSY53n=DL zRg$&*Lb8aOEJ*Vve>VRE--!?y$2&;`G@@)niGU+HKa>FIL}X;ShuIiNa`a%1md~e( z!PL~I_>lZ@AXWIFvLS!6fLKTXR1woJBmnY!Qo%0Czs~$fPNzw0z8Vg1U;HTv{KrfB z!7yc0LjLsin|V&%dqk9+$B6Z>j7y|we(f|3C1@(3s2_|}L)NX8cz?|&X#ukqN7u@*MYj9yH*gaEeDPvvN$fXMVi2DbQArnL3g?I=IWQ4{cy^yAf+>|qlMqgu+o zxoLWr3Ih!N^gn4)wv42kApe`l)<5M1;#pqfiD@bKoCrOUSU&j~mU$h280YXhb~LZ{ zpZG)lOhoW_-M6N(YAUju=H|?4-bpx6=WQNiHRmNm;jCkFhqH~b&I|D?*um-OGdel- zc_e%+NnPN=2U0S`Q(CwJ?90nGzFd{yHTPK|G`+ zwCp`1i7d;rk-~O&LBxAv+R2qCppWEOz9x0*a2tR{#+e4O<%hu?__5{3c~5M4n%q&! zYf{n4nmm{OTtI@w_Wk@J(_<(7An#18icfoThWN7WOeplLcuY=7#5NT5t7sFu(RteR zt02Bi6qSAz5?_{b^}PW8Urf4RF#RgTubU`M@%bU&mSj>*IGOZhAIT(+ug*k(S+1Km zn%dorpv^DpNmUAF!Y}0Y`}n*qz7>6Z?AAerZWi+afn?leVi%`$wkfP~jXzSGjuwp6 zeyew1i(sVo0#4Ux>}fLOj6{>v7`F~YF11*tvuXnR@+TDq%wCKk0fEsI*Zt9d3CwK*+|g+3N6YIj-|wRBhWOe|`9S{Ai* zSMy9PYJXZ5wRCp`3qcQ`hG8lpnIofd*J@Mu4tSo(Mno)M5}2zZ$mX=OMXcXy0gO}= zpvQ!k?4}$M#9c`hU3~J>*eulZn7a4z&+|v7b<~Nx8vnHWHlV_ssrk7{Z zxNDiZ_etDpOPaRmI#>JgOk^Jo%ofZDl*@Ys{^qNaS2`m@jV&8~vjA?L_u5-e!iy86 z@mr}#dy4pj^gnb!3ROg9F7{8=I=qG-u+R^~H1PDgvn*=w_>GBIOUN=ednhscDkC`ABMEBVKbV)yfj%$YBm15Lc*9HG3aDD%MO^qpcxj{0ONCl^ci5GEUb$p4{JZ__j12B-tULCA4JvVer>$p4{JaDurBv&2P1}r)O!OtE z#%H(_2ow?|>$pMdk4B{!g)m{^utEjW5bj6@Xit!Ih#6BCMaw;GyZ1{s32Dsa)kLM- zD`SVIL?CD}Oe?HnG9q09meuLlR$3GvNX<-S)9Os_2uduyc<6NEp_>-HE?pW)O-YyFC#3%92pL*0UoGt} zVv|V6NT#n4>S6K<)dz8cq3bYnh==lR4iKQ4lyDLcOiShJ{m&H3{}o?4=`gXqO)8Pv zdO!;?InrA3DXx>Nw`29zvI)FRyH}I38$@2|HEYEb`5WQky_6i7;k`e{a*%Y0OxDiG z_=jzN08|EfHg}_0&ES_pnNd3SzP0qToM)08pR<-rRE-*hx0~85d*$bXas#i#=u-Z; zpW={-oHE7AOmy(#pugl7^d~yh`x80qiLdBH&U#^%dY)#zR~}F9o#{mqC~5KHpncAB z_>g&=%*m!z=#IiX&cZygWE8xt%;Wsif7JpbehHc9c05}$;ujcQ;ZNwDB_Jx}UlPA% zRwYq$hQchwzAhQ#I{)x+F$$9i9@EGv(pvH&GR>3o&d~ElXL9}hX`UUMJh`ET2MZbN z*ENr^ev^CZr;zYS6F^aRr#YytP1#dXpaC1*>xJ8G=N&iR)kAL*pPsbPy6+5f90PNo#2t!###;98l7Dm;dHnmh zwc-e_2DXum#ujdqe8>K5Z08&&Vl`c*PwHa$_iU)`nYt~)ziV6e56F;!Y5q8>UihA0 zxUFR`>hsDo$jls|#VhAE?H36P|JE!2PAlc#PE#fOCGIBSUL!i)^bA4tkauds#4{zp zJ!Y`3q%(jQa~nKvzi7ym03&OKizo2tCNRoC8(xRGI3eg2$!9P<+n)=#mTq7&7mz*| z8(4i`$^^^KbK2}2v>l3SC;i?z7^)H6Xh)fc(>BE&`DdSnuQfG-4dsVyUn@cDl-p3% z)?ktuURBXevgO=sCG-q+NLz!+WtidD)B#^>Y6Kg4581xf)Ce~89YMt2?qJU48F!x%*S8{vEih09j zgqy!kBul3F67^yI-g>+KR2fMVx9-I*)W?}M_EVPdNAKseAFI;YpP#J9T*K4l=OO$d zH$`8A_4&&f`(os_7xNog9OoVslpl>ifqP+Y;$ZflN6Js7GX{3a;9rq?CSwH(>&uj5 zbjci;XC&3Iq7(mKXZ~7p4W@D8`L2xc7r}n7jaN)Rao07(YUl0fPmgfQ_0W z<9|bA1-Kd=CNBURHARL#dQ$}+;Cn)$ncD?mqZs}P#bm2)GZZ>ZUH~>~iVS`9W(uq{ z6uL}a05)n$VWhyNT!}7|7a*yp$lymaQQ&-5(U}*3jbeN#tD3cHV3jVD7l4hLGE`PI zZACwlgLIj^0BqEhVX~@utI@0w=k}%vOtC`ykDNB~xA^DX?|gz{Br_N|PW)Mw72~jQ zJ?hgg?NSNbo&33>gx+X5DGo{86eY!F>OfpYa9oZVe#^_qFr z`4}iE+D~U{7bcn3TPsfFe7b#G&9iu86JpBJMUkIH zwlz=OFRR?)(QIodW?LVw+gci@Hkxe>#cb>MbyG>>)JC(d zp_py`qM@*@8~trvG|O~9+q%);)XP(D}`C6Y-wz+dI=uIH5D7z z{i~byS{ObNZE2)aNrXlzX#!KaQJ1nV$iO)EMZL+yvYGj1THZ7z9lD>#ew)LB{XFWQ z^;37{cwW_>6+5Fi4ZGItW6F=>W*^5MH(A&xxXd=hDLvy7*n{3SX7{j%Tam9g&6&vK zNj%ah(^WSy+cbe(NB#}sNB8l6<>$XhsX6msq{WT&6m{Ope;ngu?xkMU2HM4lbV6`4 zY2ZPu1yAw3oli*t2z~q0(z~BOIKf)}0-8t@F%R=5zg-lT|M!FZ%RBir>$sfx;gZL3 zHs_}^)gT-_KaIRl+Ics>8toFSv-KzB{|QRUc{88XFyOoSb2&mjAH!!H>9}NGy7K3- ziu)#)n1!*}9vR&&zj9n}A%6(R0&+<^`Fw;Ruz!Dll-M|$*spA!k~ zwOu2h(PEK)&JsB+)wZOX7x~BAs<^)E*S4g_dzWf@sET>h ziZ@=?Gk=8KRQuUScK3j`782L3Tg(5kW9=C;&q+D&re?px9I2Fh(x<#H)c(>D-s}L` z#VywLKj4q#R_kBKvT}dkuU}7({}++k=qWkyCvr1l_D6U8xj$#ZxwEPN@E`;~mfg!8;4jraob z;Ff+Ye>ma%Qt0l|!lTlBiT6P3)>5W9XfXxW#89_n+-u~n@|W^M7wjb(@6SKhf9MMa zx9P8DzT18B%zb+>)waU_3D$$k4eUvOegjXH6kR_Yg{CzXoX0~MSv&toegLvwd@Ra( z@jE1P_sOlNax3JEq@A8*?pAr&V(id02yIYxmOEymO+t>89uLI&A<=BvPS;rX5}31= ze~o9IarP%&ekrzlOM8EfsSY4MhOuPlK2x{Jc_$IwX2;&KrffxD*bcCR2b8v`qKHIy z!*eUFWl_p(?A)TNHmtvcM6_&a9@#H+B!^Xrey(}2Uo{(-@Wpq@&qOykYn?X{T%&p_ zRkrQII~=m2<<0)$OI=KbS?7xdezz{Jh#)o~P^xh;b5J^IgFlB*U?&qRFQ(tZ?iMRr zL0!k%>exG%Zjs)TPJ7ey@7s~}(bib|{8{PQ>*exwYjaU&kAA;B)|4%bO>lw+)Vu+E7rAx_1%F8uyD>4Vu?Q>4Kb&zs1y zb@N*LpIS9On0EAMv;QI|rDs2+gFCXb*ODepF5AR3j(lc71$|~inbc%6nOrWU7QAA7 ztYtfRz8bpY_g#2sDmK3saO5rg*^EGD_G7+gbE{v{Cns;?6p4|>@z z;yUS^3WhV?A!F>^4YIeSkH7r2iFQtZIC?q$UAbO7fv73AaAnKHhJVJAx*;TJABK(?YaIY0=d>49ve40DH2njXjwlv(Z&O49?`K{Co6 zLTP#+TP2g+A(W;EvWLhZcL=5Ff$U(J;|?L59>^XlW87H`rw6h_WQseB;q*Xus0?vu zF`ORA4wD(~EQZqqSxZK^v*@P>q{`tB+9g*fxSR3@(gST6KHrf+qx&UR%t6{7R}yE^ zUYdQ(X6BHud+9arAT4LG4wqGu0pE>?K)86+Li0NGujaL~RbM^aS!iBHP|x*(U(fXp zu@$1;YcHk0bZ0m}@Zwtp=V^MkmFTL;vptfDJeMNW+`Mf{!M^FMo+|}_j(RTPzA6to zIej>q*{zV)nH?wi`rmdNdJOOXQ>*Q~m$xt?1noG@^Z)DCW}Ul4gnMk1AEF*Ds%dA2 z$un&$gtz2hD!Se~5}klqSXI}Pi0!tTJ`V2&jQkkBzwM4Z-Snpy1_pkh#ziJKsn&LW zBv(7r9XW=#!pqjG^J}?uF@t8J9pxD`LzilL7s8<5;O_{7rpZ29%cmnzgh6elu?7tK zU3l1M(EH0UDDiq_&{R{;5kcziVabCCb6)5%Cw~ARrNQIQv&fJ{8bVAe0XF^)MM+cfP#Owcs-qoP#Y1T*u<1n{3%G159!f)jPqp-t zRXh{|bbN1R)YCZ@aM@Hml!gMQ9>*$;Kc?cLkp1>qmBt@aeO84a6Z|eGO9P0p<_c!iIGI?!j>c1l`gi9%$>QYAC zVlDeAH8x^>zbXHFA-=MX0ptYB;RwplVIM?Kbo&zQHGTkL8Eg3_vEls*SGNMVOhjH& zet=bMXN|DO8a6IrCuJAm5fs}Rqu4H$ef|&gN{qi!;Fa-G7F5bBYfchgDIJ9pR%UTe zneF$L*}60%%~rhsNv_rhztHpjzxm}qmtTU>2}ZY7dAbdDDbj6*UsSh+N|h-a5%v(> zrYv(~r}Daw7tL$s9(fJ?132bCUBBIAe{}sOeDtRDd!IKr&~EvQh)((WElGC= zYKmEEV$q)EHcu3%A}Q!Y==mW80zChcYRBkX_#ybFZPtowsw7V{z*_Ooa9VH~k6r6< zba#5Daz3iaYhi2!vtV4}lc{+Mm%Eb&$R`rU9<$Gv92OyKYsKe9KavkvJ~^x?ml2M@ zH#%LNPSulWMB(yGuA(;UylFeCc+YezP?hS_S*t!hrVRVP+n1_b>#544B=tg1|*D&u8UWeQapFRLn3sLFU*RhdFn#(SyC6sj`b zOI4;&mGNGxGKH$7E~i9QrcjmfUaFE{X=}VlRi+B6GXBw2B~w!hs#3=wl~1h(QNz+SC_sIs99luPc#0IW7A#r*pM-Y&@A)~X9N_bl$N(EI=^-@3l8)zFTB(&f=pm(J#zvWq+sk5(%V8dZ6+L@9?KZ<6T*Mk&G5ayG=`pfx83mdLqs( zb6Hc7cRa;4*{wKMAzJC&OaLXykSXb#py+F{=j;C}b}kR?lml;bW$Ugju<3oO0wrhz z;pDdgW6FHL;c`&(ql zrgePQ_lHvhNY7;?kDAKW*iL=IT`uN1SNvP5r32)5+oD5rr`oYIm{O#s!SNZwkphrdh=Y@+kdq93Osd$P`+j$0%aDG{$^ z-Lv^69fY9y+@rBcxy}4{SxUK0Vypz#hiAkX%jJKw_wM0U)YtxhHUtO|G650LdZBHs z?5aJ)Vr6^H(7nlQ*js{EO0CjTDYjN)*pOfqfrKQ}-SO5Q?N$4=rrM1H2hv`eP(uc0DI1Pp5I@;=jZcCW&+0jtO>_83&4(*JSfjaTXS;I01-y1eNBkmGp!iSX^q8|Qt=Tc5{tyItS9gy_!c zo~`Q&3_9^_;e#?6CliL58VnrbF(xBj-S_7>r6tm4iN}XJ&gINEX5SWiDCM1m50de|MxJW zwlg&3l>p@b_dJZoYe8u7dQ2=6iEJX02RJQC)xnr^TCmHZIj04lhg(i9{X0zM-5xfi z9L+AnqrPPR4*9D2``;^(|BcgP@i;+b105ER%WMv{%2B-1y;Fn<;wL4Bmdxs$6jv>A zgUI2Fm%PK1Ai_oHOhzQImV3*2pJb5yCZx=nLe7^S44!d0gZw>pt`fVZ7`fdq9B_1$ zb`Pb@YTA7kCNFl^q};cX-q}s5Xj|O7CPLm#GPZ-8b9=3(H{qpZHsU=glEhss@*Mfp zH6_+p`)5J`OS6~Qv5U$UKbnrcvt*nsR7_rE5u6t)pGl#w(S%jEIx%vCt(AWx9i9|QLLt9=I`$nEAQH{va1g2F)ex;`u)?cI z=xM3#7WrVJ9n zms~Buh)#JY8O2t^^(>`mR3hG|A|ey1Cy>Q8i86 z-B(o6pQps`V3OpNd-r+HVAjWt7d$&5;f{!V_vP#JMC`fR;&^s^Ldt}Fh_R1qV70FU z8^yahk~%9@Hdz&l2AHAJ-Ti5A>_ZaOGRMx2sU;+Gr@O7@$MP#Eu|3^CRwdv+fde9^ zAij%(&5pj1jO{aO0{uB}$+*;om|sg|l2uTCUnbdY*zd9ydKPAy{U?nrq&=}Tc;3l# zN_PyIWhdm#vMY#7kWv^;%T5B6ylnbt0qMkMdi zo5Pfvmzz?+HGGfV(}jqxV(z1tn^~_iDw&W9uUXkVm01Lwq!E9q%fJ48Y26g z@{TZS)`{U3oJuGn=OrVX2=dT=A|te)2-EeeZ}Y@G6#qyU)K*72P{xk?qP$AP?LMo1 zn51Fm1dyoQIZ5y8K3?DSzPwD`=uVkPGNn@*%Ut5fh(9IiU37PLSe($ym3xViutlWo zk+(3%?`6Nf#cED-XZzcUspG#DL4@jWSUw0Mbd`HqsiT;<^i(ndx{lPO-9TAz{|9`&!;AioOe!^``ttB6e9(2jX~l zneg0ch3(S{^B?cGN;J{A(~8=s73CA}QlbgYomSjFEk8JSv3Hk=&7D@-KCQI>tR>fa zcbU-KX=B@`jm;x`(YtE`bDAL73GLG+(uy#-S&j6}Ca_cs^$>m@E%X1X&tBQ^|CJZOzn&xr;WQ!Zl#(8;nAA)P zdrk@!M~tIGj#`ajZrd%e8ditgeX&UVEP?1*dU|02mhbE5?t@mtMD9#g&{ns#Wj9~t z%F%GQYR$u3Lb>~@0;}o!%&bVKa`?u64xgeIhntCesuJE7HQ^Ar958e;J5I6+qdmd* zho`4JkS#&kO?KBWnc8pOxkJ52RbTD1n!d+HjZwF11)I^16t7oA8mu_SAI7AT^Qy#P z>yT1ISMdP*DQ9D(KoF;Y-x!|j3Gqh;J=R>2JJKjhvTarbLSWdLA_S7W7*vScr!rtp zAOq&)WWXHx;Xnq=`CrI@N@PG$AOq-5)h`2xnlnNGxs$*&^NJs33pv2-vtvEeyeU6M z643ZiCBgkh64-_9wAJOm6~QB_B)H#50=uZ4ezhBBI-5vkCuYr+Bbbz~xld-i{<36m=boOep0B$1-V2e|JC@E0@2gnNv zFGhxbw8Q@u*N`*eO>^eS@V=ax&Q@^d)>L_08hF<51I{d8C+BWLBt<&p-0!grfEb)Z z92utbRGEKL2kqbz#84$-r~-g;5dbBPrG6ItZ(u4&n5v-iV1cw{5h))A|KU}*L1FNP z=*SQTi+3f7q#6iNq{;R_kU~>c_Beu?l2mec2=z_#!f^^ktcIsl_Pk&Aod73=%_@aH zlFa=OW_Ebh`#~dibBP_K`-PRkZvIp#g^U(-d-*guAry2A`~~+&0;wXAIVR)pN&qbx ze=3#&F~m?#3?Zx#CM_6beeL2*B6m`t2z|wF=?I|+zDRnCwL*SjZ300wTm;dE+D@Y4 zmSo_4kAU&tj5L&WeP8=LNoeo zop&8uGP~J6=WA@|+J@rR=kUC-Q{}ivL^Jo4sWi~Ey1{0yIjYAy@61(T} z8!wCFkT{;I+VOGk9?{Wpx{Hp?mfNv%tKk(2P!QETkCHX+OL2D>zH2eboU=f4)Yzc! zk2+w9=(4ke#2_Ku6nF9*tLgVBXt2H8QuAH;RqVCB-QUGUDo>yGZiqzbeRs>n8(!k! z@KS^x)jWqr@cid39@UTe4$b!5I&+o&O3>eNc&AQ-}_6_dF@j-k-Is4ij-; zut@e{%6$XlW32cvQ_-g}Ii;LdX##`u0GX2yWg}M82RkJ!{B-vu@+x+a8zir2a_t&p zo5eQNu13TZWFvO0ux#B!rwNP7w6#JCzK z2F=wv7Pv#L`oEtlllCjj^`*!s^eopuOye9-qfFd2PJJ7*nW$N7<(te z69ZwbPK@9^6yu6P>%Qfb?~x9&4Tt#rCcS$r z>R&as@x+8Mczg(hf4wDCMdPf->+xKHIql|gV9rq3E8?*l4;I7t|1OYIQtGWo-X)

wn#cz#c2R3&UXyWr9AmLfpI7Y&&vH6S$ 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 Td|mJ_-f~QhZ5#CX7W{t!qs%jD literal 0 HcmV?d00001 diff --git a/Examples/clas12event_example.cc b/Examples/clas12event_example.cc index 9e41e19..40d90c3 100644 --- a/Examples/clas12event_example.cc +++ b/Examples/clas12event_example.cc @@ -15,13 +15,14 @@ //*********************************************************************** #include #include -#include "TFile.h" -#include "TTree.h" +#include #include "reader.h" #include "clas12event.h" int main(int argc, char** argv) { + // Record start time + auto start = std::chrono::high_resolution_clock::now(); std::cout << " reading file example program (HIPO) " << __cplusplus << std::endl; @@ -59,10 +60,13 @@ int main(int argc, char** argv) { double ecEnergy = event.getEnergy(clas12::EC,i); double pcalEnergy = event.getEnergy(clas12::PCAL,i); double sf = ecEnergy/electron.mag(); - printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", - pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); + // printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", + // pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); } } } + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; } //### END OF GENERATED CODE diff --git a/Examples/mesonexevent_example b/Examples/mesonexevent_example new file mode 100755 index 0000000000000000000000000000000000000000..846e97feef95cb71991991915d897a04b25b97c2 GIT binary patch literal 311264 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�grK)Yz-5B8+-v_`91I$g{DwOljV4jKZU+YcB zjC`NQHI%w`w8hJKZGj|$Ad`WC$pKKWIX5|7%zUA4}-{G5+7nu@t41c4`WD^ z!uiXO5Uesj6rzowzpOyX$cNG2{uVyGgUC}35&?b)UFazI5XW35;{(QvU(|yWaM-N> z-{R)<^yb2FlGe?4IECjb{=JSL~G z91PW;rDyr!bqE96b`-b(TR}qG71hXhY zSqSgJL!t_VLs;LP%C!yn({N>t?22pE@)3hE(TzNx#uwEdjCG zUIPR%h_J2NCz$(YelOtPmcYLSLK@4`Yq>*{BYSTQ5dM#07;GF$IO!d2OHQ+;SRQKh z?m~6YllWGNZ{zrDIsRK5{|GgM)QP`b z;xqmcKU+Z|_<1+Se}Ln!m-wS4{!0u3{05Gn!|`wA`1eZuvn0Mp;@5Hf1de|>$9GBm z&kl?JPL=rC96y5NpTY5mOZ=B4eqV_n&+)h3&iJ#NU50g(__s;?V^k6KSK;`Na{Q+` z{x0?u{Fx&08zp`ddIbL5#PM(D_)kgv-V%Sg#9zVjQ#t-Pj(@YnKk~KcZ=u95@w^^iGL5nPx#8NZM{L&K2tqkv}R6q_@W-@+8*Z8 zr4PG|`Zwx0*<&u={g%hSzELltFirJEJw+8JA6K<6-RB|oHjavz4t1G%vN>pvGvOIi zjPp(3sGA7UH|$1MO~0S9!fv9%&QziFujcxyMqc zkKKJ)JKmA1FU_hZH@c(r1BXzfXT1$iEBCA3zcS?7J?>~~?k#%geT8KYd~dXpv%Ln? zT&HS>(YSvkdJyb#oiX3>6Rbd0HFs>Z-h+IvFY5VQi52Y=8uB$yBvIt^P(}bFD5W{9 z`qu~@fOhF^gvKBFJd`957%}=ggwfal0^shKQBFej4H|*&0)H1unx~mynkOF72QEqc zlEN=4zhv^ubbjGss;7XL%J`*pAv522lM1POx`n%6w7M2qH0!6RH$e#zvQ>HLz-FO&z@JY`hyc_?ku=%ES) z?a}g9TV^E`ZCMO14(%E0C8ymcQ5rpQ!Q1%YZIZkN?eTgEriwwnQ()!r4f}}GJ{={^ zlT8?!r=DL{^GgH2Z046He%XZ!w2=xv4^7b+)9fY{o6r2>-&? zK}9ROTXq~5hxSh*8ybN9?DEy<;4S6d=m0{DywyB5+=4-I{1VSEN&J$+FDfpYCzA?| zp6R&Iq4)k4WzPoH5ELVk0Br%NgBZcjJFhidU0om z-r{MzV5fe7rHO8djT5>tK|7&;AYeA3>-stYh*33WxDM?r{dobi>i5Ex`b*(;PrNP*Y5j+62NNs9&@?+YYChxR0)*pt6?eXYVnFz+ z@=MkG484LOhX#bh`fK#iyNZ-Z_5E`fF8UY{gw(0S$JAH96m&Vf&ycF(Wl~-+nG`!* zd-Rta6 zYv{0Ef`$O2F!F?`fS>Exs)a1>#AihY8$w=4&aHT(^W{X|hU3qcBHdWh&r>bSrI=f}kHkv?O zN3j+ta7JSqo$Q2J?sj7y_Z`I~_n`}TG2NS?cvTxs;ocB&St`PxvC(|J<%C`PkWrVs z$-OAu+dmzd6~t5vN2=bjF=}!va(3=MD)>7V)ukf~55TPjs;4SOSxqiUwPdWv`2nYf zrt0hKZoNVEPO=e2->BMK?l0(d_4B~%3;U^_1;N+Xsh0E)TGmiMJd5HK_nBan&D#$1 z?prRQS{>ScSQKZh|3#!N>j;WaHenkFuIJ_52@Rr*p4qi;5gMLA&#Z=ZB)C0LReP)w z+5c^pS})PBecW_SUXm2itbf3?s5`xghNdAh-OYN_s26@l`ZY~yd6N1Kt$3v6 zGfb2Fx5u*8AUxA`{3G=T8rG{48rC=#egq^pj)jY7S0s)wW{!;)#Uyt1G+2R>DPYst zRqKdK{^e$sWQ!*S{JNx?t~fR=SxOfb?>CMuqua(ME9inl)yCSOH1TTVl9e0+GL|$1 zZ#T60cK5}c$J4Go&(UEKuY4c*unmwpEG00% zQN8W44ilq}jCvi8zcQ1o&GKes9AN^lF8KU`z;kcpO7R%^jKKRh({mepe@!H;LcFi- zJK5CoT(CV>-fJp9hrZUJ&lrSg{ZrdXOQ38{W7m$MtE!auCWt#kiIbqjzOm4zj<776 z6h!M=U>CIwsoF-%osXbK)mId2P1qys9Zo>|nSA6bU}4%>6wzKu)f!%p1tweegsy^F zmBcLVp!W>bvo6xN_~g$&|NQ;dUYq+?<8b@6wQK#>r>d(VlJvEzZ(KWV6AX82in2*v zjUk_oMXG0adpnYb(Q3bgYVx{y$*T4>&CC{jf(6+15vj?0EwvOMsNU;ilVCs>G6QmG z&6UH!yO5~HH|ibC6Z9AHrrmo*teSiaYSpm1rQfiR$lRyre+n~Mi$YyE{m4TK%X2)s zvS(0WTjoPxmyy7bkJE*~pfnTF7)$Je52N;?0f>?*4bw*^zxVz~d7Xz8-LK255An*^ zW#`Fuiv3i1Z6rGXEAo2#D?gDu=0Ajl;jmvd1+8y z=T$*oSCPCZvn&NB^cr%z@8@;_xz+CBa-)njnR_6|0BwOizWGPWkMhR9F2A$6{4NHO zA;z|v#(X^rT>kIK?@VywciY?bCm_F6ylIl(*Th!X+cC&dpA4GA%J17^l3%1ze%B&0 z;_^ER`AHWVl;4hj2j#c%qyIVi{RP3ekl*9s{UyoosAUGcZI>A!v<(@i?*4Dda4fhX zWjKfQ=(qUHZG#!Hw_Qpi(CHEr6#w@zZj&&6b4_Mb4gH18tt80Hk!Vwt*HR6a~$QB!? zqJVXYAA>UAx|4c_X(+wK6K%JG{MtR1J1O^-?ptt@o+RwCdm0gwMaH)D&#&{Gh_uwq z!(-2hC`-+i>?Yb$a|a0$EVC!?v(#)NLMTp4)%L31D|YGE%)x|uBSL6U@MlnImr(Z6m%#=;K{OF{fI45*3bP6~02Dsp@-U zIWGFSwCL=M+FXd3*SoNazm;KAeYHyoi{*6B#%m6*D_ix>oK9KaSl+)7{vIY71@jIw zrw7=(ok_1UN%bv^(_@ghMmy0&kA)cQe-)2;eQa)Eus2F<>z9&fDXV=a@F>bS)gBSo zAiKTzP!cp;)er<}J5_CJY@ERkYho#V4b@$3CmgKTs=k_77E#ykQ5)Bx5wrp=CvXFG z9GlMQG1B*7dv6Fz^>s%$3>&9yJ+vN3Dih=IKFjbN-YQh7;-MopdP40 zGojyp`(lKpCl@WU;s$S5-?AoMYprdlTJ6wIpeie>s(eLFMhljjEtrWryp?eilD~Cm zM^NjBY$n&AXwp7)^!r9#3|m8G=i-Jcv)pkXUePvV+t1QFa7Uf9k}}wnH@Y#mJgj$R zJgAAS13F}DU>cMKTfqnnrqN^0w68u0GR;OzyMwJ^F{Txu<6l{75-FX7Wo^<#6`W*s z!#1N^I>UY^c#8>*_~Qb9j-WH5C&ZtHsPk)mIU3>o`PNP=zMMb*MtzJw&740is0#e~ ziui-t-QyhI1>g;W{T~Ay$MOhjL_Uz$*mHu`I-%cj`{LtNspYPoU@;EsjKF!}BVR=c%SE4kSX!bm_qD3U-5A zPlI)nhbpI}y#xw@!2vY7-~gb!n7VRO2xSwOE0Rd0+3B$V zB^>uwP)`RW7DKmWicR9W3s<~TKroh$Th>IDS)rnVX#MIKVEZbnP)O1>$_~OwK{@}$ zwARaX#qQZ?btE6g`?Pe2fh0nR3jVTey6Q#F$5&OQkED9N7sj%FgVBU+_sv6Sv>;AP zE7M!BZ3JcL%7W?o#b`?4K;6MJfYW2kXuSf3>H3vOJ2||0v1J(vCmkd6Vyi4QWP^l+ zo}|Yjb&>|DrpIQgKBnb#ZzDOtA2LUsj<_pEUHfH}-J3X2|M@wz=SC|KN}RS%FTp-+ zrb2iPx_pyW9eGoXrN&8ZaOLTsdeJeaJ7rcvW#l-#FOn76eUSsH#rO%e$1F8D^p>|E zTJ_>`J=s4(Du>o;*S@BNepjK##n`6zm3xB2Tg?60ckn*j$={!aF%dkc<;_j+NssoO zeentD(N3Vr>RaAO*K~NaS5>V=g-1hWm8;03K~2ANk9BzGz^NgVa8NomR12qu4oB;y zyxNOZ&F|>v7w+G3mxpwO4*|DyAooAty+#F0pY%R=XAWP1&8}_Wo($cEL8xB%tITMM zS6^!(iGxepC#l%boq{*P{)4J-CFwl5)1BNUz#&>{E`UD3fK;SJ@Z=)eYm88bWK6Dv zLRT#f z74YklYP#b1Uy#VwlfDH{JuDv#?PL~%*(aN<{1uE;y{lG&QmiA9;_5e&Zuu72^aQs5 zZULJ{MClcT363rRqYd*1ny-s6mFJAV1&2L{pr#~d8XOEW1PmyYF2<^5?J@G+HVR_D z*W3!WJ`Rad55OyUeZ0QQ34-pW>mzJ8PY#_kv4mfjYIh!wFEND41zfQ)p z4!d_I`F}_9QPnc$1Lpr(Jj?z6X6FCTb@aoW21bjB)`A6loR4)-XeF|U%vi5$vL?F8;Mg*~zI}X4l@<4X!$K)N^iY-XB z)ILs~KoJIR4D;Qc$=J^UeFl#FgRM9+j?@!J*l>6cDxkiD0bn(Gcx%fU=>J^A^T*ud z?A{yD{~sO6Kgs?hp1&1V{u7jaS9x&a~*U~hY0_6>s znhaL;M;H|;x6siF8Zq87SLE4fO-0vIXe}6?_OPyjJrq}~h+jLiRRL|6rFJyc;Mp)e zBz#SQer>tx)x&miv=t*25w1jJ}g%1)?Ao|ILo-nwe)1;+NhSc;@9hYgva zZdlsI$SqU3ij{=g0=zLq;j0mOctNb5_4I~NW6CjyExjXEbl%q+lY-adn# z(OM{@hv}i;f+8P>F?K>mY~UOWp#BiO73dYTfOYH~QP;&#kCtX*zU37EasvKk@u8*Q zpTn1D$^%v(yO((PIc!miBEAh9s9oA$64@lt%Awr?_uawY?PW@c{ZV{W+2KveHjcjtNyzz1{okL)TLWkbdL- z4yifh>mB`mRM-9(r6%v5_o^M7yr9nRy~^&p2CeQyt836{M0^m~VamsmpJZPDNyZG8 z3EO}<#{r<;%RuR|Re?!c7wwoFQC_SE zq)DXvU&B)}=mrMq=S;Y3 zv57SbPe8xoXrD*FYIRxtgFzzcOYN3hljzF%hED7K){>TE^ONUrMCAe1n-Pt<9}-(I zMWzc}6go*I;%%~?80yn-?w=?(*mi$Le-i8uF?PHEF*q>B-3bwg{12l5Ix-Tz@P9;( zEe(5IDKs5VS0=IKpFs`$Z6jICv_o=bh#8Xel_dJJB{IE`I5#z{~+ zhP~d_@`XNv;jY(TVAp;6_oDoWDDPYY7cM6XZ=p7w_=ho8Unnp(;>z^~vBCIo`;`}9 z7@|=Z`<5BOi&&rbVJ57*=@wJr_ehlt24uEZgw>x;IW<3yB#SRYOcMH0cfGC@2t0`< zoLELkfzBEBH+Q7QAX=Jjl3pYQ^x`Y@^g85>5D+YkCgUCmwFo*Cj90#>oL_1GDb(@H z?JogF+wB+A6Vbe054p?jd{gm&`a%8#dnSUhF!L%H_9rnHrfs(O`vhJDv+nlTQDv$5 z7x@fdqGE4sq$DVIIa&VH02uoXVE0&kAZrko;hhjYL2JfP5Q{C0_J~HrToWR`b|Zh% z&aQPJJ|YaD6d!XZEa8XWK@}4x5zD|NBJtvTlYHq>(a3W< zFaewKr3HEba%jaMq!LllLd@eg#DusJZqIDbhQoKocc5AEk3ko>T?O0<+&0|GAnF@} z$?b?VkZa0F_{x7J;nqCSNZd}VKAuAeI&v_qAryq0vD943CPEbR);6eGD%L_WXfiS~ z8@avlG_Pq)VKEd-woIVqTE5nH8Tv2*A(D+!W_GOQ;wCGO;^6IUZ7wav4riU>ZEu%R z7~QZa%&ryD`YEzt_=N?O#!`D58>!%`XiE4Xv~Pm8ACo@Nw1*Gi*r`DT+Obp4Qu756 z)REIc;6b_*1hQ0!Zvn`omAg8`)(#C$5IJd@0b^4fBQA*%myv=gNeXr_VmUxWh-r*8 zt-W2l0fSTpEF6vrTHc=$hj#4~BCWQ7R3FBJtwn9v4~@03FT@nP_3EF2sinoVGz2{w zpEg|r%Gi{t3WTN5+=vq?2)rL_hyEGNp6rbo=pRh67m74aHm2|>mVdm!QqzgZ@n*&l zTQEDS?B@3a9Y!n0XZR5BX!N3?@>{z$4P6=y4#QDx1#$F_e=}}^^hx@$w5B&;flqSuJLrj50Ht$Eo5yH3WJFxEP|2JN*QyU>xkiQlMHZGXyUx^1q zKj|IO->D^$;f15SiV+36OK}5#qpkDD5eu|+EqjQin87SZ2qgNkU*7{atZyQEF__;< zPk=G^H2_}}z(N7cA>cy-I2AyeQ8);=L;$Z6z!3y2XTbIPL3YLd2QE{6H_HA>M$&ry zUGcDoc=!fAoGu>Li-*T?mGUAZrF@ogAr=xqnkD&rOU*yQN<^eq)q9PNZN+6%0N5;L zlM!f&@rOQ$(MZ`kU?WkE$d-aoAL6>8s>iXXS{4|eMal=QKm_TdS18-OkADwETiX)N z;|%)F#$+IEtNd2g#^bHEEge|gMsVmC!AX7DtVF{U36;YISIw|rmqw?)P;FWT{p=M~;Yo{&0124x1!8LKv`q&SlHYRgU~3NEawJ{9 z<150n?ob&!q2G52C*?ZBi?{*Ps&5&Tt{q-`xM#}>{yx?wXy*$0kI`E1`zp=m>1Por zx!-Kr!ASDoM12hGC6n=n_+Aa%G}|XbZd%pQZ*qhml7PTktewM_<62^5{O?V(^8J?B z?mZbS;tAt9wh77KQ}V|$<^V;MXQA^*8PWXh9`qkx;T(r{+|jRX9;g zmbS(v93$89LQ2gsyY^A#Od2j~mw|=}{eG5f>jUN5dPlalKL0}Uj`S6px7zZLcm~1C z{ncWlND5*m>;^)Z9jzu$k8u~0Y!kpUzJgQ+C-afROB=+|ulWd^plki8XS`dMnqn}L z%N600L+c!?uX>rf=fDb-rFJ%+1_`#@IUZ$yIq|-ZXoatq`@0!EL5bw!_jD@lXJ_9K zvTI0I*s)Q9B!eiZ=6m=yhj$hTFM*C9b$G`hZ#M)#3c!L9(uwb2a$~7|3EaY1q4v{d zCjJP?kY(a;iH0lImZBPa@=W3jNP!X3NC*bRlZJW=Q1x0?CoNIYo&@@JWfh`BErD6IM+oGZAKV|0?e*y&2^NG13+=zDir^5Ko1_!28D#k?Q@~YoWCLoj4Fm8z~i-V6)VGLJ!gX zoA6?|?w6taNDG3hw_gf$|3Z7eLt;aN<*rp!-(tS00ecUysR8|`nvK5?_y|8Qz}$X! z%SF=vGLcd`TvRmS@;>`@4O@Q4KETK+_$$p64c)R zS${H`QSiUmpL_}ePv4*9*8hLrpERQj;S4J1Pi}r8U{L>Ef6|RL^t=7Z?&pcV)9@#~ z&|bLi2mQ$cRy}j4|9|!;?&rezlm9ipe`3;X^Y>36y{+Fry@&nFgYZn(@sITPN7=9U zgFe$-rjZ}xKHDGqJwnRwQne5DvCrZIC-@;2h7Rl;Ijk>%&ZwT_C*5N*YQMk_Nzzk2 zhaxf(jv;*>K|2=_PhyX1gti{L72TIo@D+s`d|45JD%9Lm@vj1~JP_UzdMnsJ` zDp^p85+wqf$OL+D;zmJ55f_b%sHi9tz~u@~5@?%N)?>w8chz0b^}_XHQ6vFLKt%!X zYl8<;!+=4QOM(2q-&fspBm=tp+u#5H&qtZ+uGg=sUcGwt>eZ`PgO;u0uGmJnm6oz5 zPElw5{z<$?FhA;z8`TNO(s~5i=oB>}Z&6>Fym{8~sM$lXM-L6*6j0HW15*l~ka=4O zLF>T@aM`S$-aid?1E?s*YgK~@z2*s4yGeBdRe<#GF{H>_&vz*>eFp1?#`Jswrr9p0 zC4U!8^Aj=sX&;!ly{j?Zmw;)Ii>XRus!POl{ys37F-$WPFn#~HZe4GUDU^t*<32F$ z#rL{SzfHjOgp275*3Bsz_LfI{&}lKTr=ZgdF-+$sVET=V>0V+=@fEk5b@|-S_4=uR zUxi=Cnx|>h=*TF1E9=Y_RUw6!rM(761}uVLHyMz9mH#+&^HETTFsxcv8?SAVFtT7C z&;HS(@=|=)N4`5H@w=XQz3i$B?e{UlEZ618D6z~HDo@!%^PV?}f1_Cx|f0pq}Zp`JVyXH-dNY9(aHGKg>6f}jFym|3rG!1l z#k=Q`6m0`6mvq4UuSD22sbDjWx(W?@%zMC_<>GxL73?shj()1Z`!?~O>%!iW3bv0? zw~qNv(N@Bq4dL{h0B4awW)tUQmSGQ|4N;sBKF2d>srBS9XONFDoe1L$%42#DaX5oIGyR=T zr!l==r+;Wf`eU6|Os~@E&zNq|>D5fXsMD`A{e(_0WctrK{S?!`*XakDu0RiuG*FR{T7#}3-IY=+e}!*I+Z$fCM@4HguVjD zsk4aN8FUoC&R~W!=wPO|KP2gFrZ?*Ju4PF7OQ$z8y;i5cV7gJK-)DM}POoJ88J%9t z^k12_mTS9M%qHn_I}~3|2`%qXd5bapB6L!kX8E7g)(7!@TaGR^>W83^9SSw<11l2ha84@NgN?dfn)5oK zsf!S?RqA_KD%hiqx&{r~LcEAtEwCFONI{2#j5y-8n*r~Dat=V=7jES)QK+KV#3AegnkWR#3NV++y}5N zE+b+kpV9C&nptxRvyI;&$`aENo!(iG^yfOgiRm>uy^iVSI{hBg|J3OfOh2vDuQL6R zPA_2k9-V%eX-lW)Gd*3W=Q4d0((|}5^z_j(7= z%PAU58Z(AJ`|gQUuo*^O4Hj2`okx8f3mk!+o(lFGYx=&u9Izf80_|Z3(aY7STdJXRS&OG#%ty9| z4)5$?)ZM0G%UFw}T-cUBrJw|~s|z&jIO6rRt7WNRG4XZRu;U5qO?>yZhaGgg)OZ~R zF=$ao=sVn6T+<#pymJi3vxePB*ehJvL8)LtH%9yi-alZ1iP7!gRIpGj`fJ!9iPuvt z*8edDC4g6l!7Dl|5$``!!FDt17}gGTNT&(_*I(&pCmFVQFt$AJ)^Ni)5kLqE+;5ZN z^!fz7cA18Kov>c76{muQ5cX-l9 ztxbm0{R`RPuIEl=`JQaJBo!?B*ImzD%ksVcJt-Az|JZtN5@Czox~8Xs1r6Nw+zi&& zqrv<4rl0|M!ClW?PP`s3Jdp|(V`m-9b&4`D=f%e4^i;4%#pdpli5E9Y2;ZEa3iec) zyPv^)7QCc#M(CO7o zzo^r%GyQ~4FJ$`9I{g&Wzt`ypnXc98yP3X4r{^$zy-rVK`U;(%!1RSWeHGIIogT^b zAe{~}U8vI~Odqe){g^&Nr+YEoMW=f(ovzclOmDkK=#a&9M5lMYjP&O^y@}~HI=znR zXxqT2y4er432h?jEUBHuW8 z2#)(q%8@(6q`hck|G01eFf2DsZ@&QH?Bn)N8Xb5>rc$a0f1ya06jd}6asGh(1ybC$Bnn+72R6-EOb^tj&Rrq1mFo^I`C}c9XHPbYXB}F;6XU;;gFdyqm^McodZo5OmI#v^0D_3 zun#kfw;DAyB#ko+h<6B*f_DPePK2g8voBl&0u3rVdPba{7ES}fG(8Mh&7Jr~x?~Hy zt#%4(APU##Bgh#}KsAMW(plqMphmaiGjj{-SGD+i5!BSU%)4ARix`)+V-nSIS}QX+*0FU9KnbLmRJg{{M*2c$%v??ot)^%e{Yw*a(n{mG60_3$=v?61bn(E+^kFZcqQ%k5~tT0wu`fZrRG~Up( z)HE|zSn}2mldOCa@`g!UKJnMIg@~rH!qnu9`~$U^$2Ly9RyS@5sKmw{ERD-R+djY> zc4m-{x39z1a-EAU(GVxushW?onh4Fp%2zutI+u@w_IMDg6t!~jx{%-Wb zN{dXE*IS?#Y*ZPH@3396oE`;_Ok(Udr_y+>3)6LTY9rrx$m#wPUvegg=lkcT7AU{M}K-{L+>iHRRJulIJz`lb+oR>8?lgFVbr>jG{ zARch#+DLOPZb%>%6WUXW1GgI3$-2|D@120p3s=Ii&vdfjTAmyEJ3flTgYcyiAD34x z&LhQfJw(!m2=41*f%R%lHHKd$JUQ>uIDzmb1XV$;T3p=fJm4lo4OMi(&8Df$O~ zBp3CxB%h-i`H$#){&@Mx^Su&i} ziO3y=?3RVGFCvHHoyf6Q)}f2l2p8mGfEX{WcJW3w&qfa??q8esY*xVRJzJ`?Xw_T# zPY!4q&o0$bfaCny*53yrm6>$ zGz+$vl`DZY1A58i0t-Oa(7abDotlQ`1^TozkBnteXj|?0rv*+uQB&g zv?pjkTY?8hY?$*Xst~kiSKvA5JjSvpPAC?{$7phm#6z^hBLRTgBdix(o$lh3QFA80 zMafrAmtVLkjYG-`vm{J{#M!Vu!>rsKw4UsXho&%V!aryLW?12j;c{c{2oj+w%ojrYAJ=Y7_v}t65L`u8;T=4v)d7>DH4(ZWb)XvFps*wKLAe3EjfY z2;1Kem(&HFKJRnI5bYl47YOhiMi%H9!#A*(Y2(~%36@CfLhG2{x*8Bw{~}qXR--Hh z35Dq8)b};Hnxr?`sKT|>%I^7*zf*Uo(LV& zhfVtqfw%7^_3>Hs#rS8>w)<=zh)$Zi^o+cWskqJf!b0w1#4qLni33e6P8xp9u>HT^ z{kk~Z3wodYv2o}XZ>t>oX!f2wcy6VhikpV^B0Vre_my7+^FrEm-%&$^&_>*N zXJ{|HAL+gyJ$fBzi5=W5^y_#Lo)Yo_2E z`xP1Gq7BVs0Xz<}M;-rxd{3h4k3;hD4%Hb|ij0E<0ov$4`OmAUe)L_O%qQ;8!A*=4 zU|%R5jV$!_p|QS}C>+r*68$sx&HrHC>^qc#6Vc<~k4Lr}2OrKPS-f!&sb-tAzdSU>IQSf!tQ-f+Uj+>K zag~gqz9+9fgiSJzgOycn#=#sGpvS>c@3Q1q;^Sbve7r+tp-TH12k(QUe#tnP z=jt!c1M4UkQ!rh%AdFD>?JPA2?Tw53Jp@~#x zEx)g;aeI#7EJF~T7ku12Lrfj#DPLc{1wdZ8Gb1;04~i1IHzfOU&;dYyC|xgTCjZ~%VMj3VS>}o}8c1?dYPydYOW#2P1MR;ws~K zWXNw?-@#_z*(_*4c%6*Q5p#AU7!QsjcMV;^gSZ*iVc3evGUcE>ki;5j)K;Un!NK`h zFBR{_<_*32(n7=eRfi@xNHEv^5}_Y^^Zg4f$~r9ilxO!qIc(39kf1me=kYUxJYueF zR(J9J?0I|!9B#2}Rtw;z0!;)Bn3@}XR5eV6?pu0s(3v?-j{!OVS-2f*SoSVP;-+y) zWEcr!K_4M(tMmtS2w~uWQ%flou%E8S4;6k;*pIN4w!DW4EnwA7p-lT0MJ}lTdXA51e4Rq$6C z#v8`lrN&!e4tXg%Pio$t*48rPrLRlFyE_=QYf%cmO-ug-ca*wFjM~remRn&$)rNH$ z=6o22K~eQLR3czY4FdySq~2`Q9?sDRKIujL`Kkma!Q>_xbNjK1uz&?@hm8yLc4UHC z=-Cm3p`D`jkGrcVaCW9?Ji7v2f5l{uoMv^zEi5G|H2w%M^SFfJny{Y4itLFD#1#C} zTg!C^nrL;LUyIgB{#Gyl$4L;;qft$j&w`+9qs&L9FxjG>Myr$7Yvf$+&%$Z>v2~!8 zEXFYMO$W;sEK9(|?QXGB8&Cu%>Ic9mkYVD*KmmCQOR23#K`=UxGishCBV|reh1*pY z3U-GE>v6nPtwnX=>$O;caYs+q_UZs+QS{uZ3#s`LwL%lH>fj2Me@Jr8%0Jb40~^+? zvNlSUYPjyNennOtA#5Nwt5LfF0BYwXh>x3DFFDok&Wfd%M^4)%^CB*8;~>O3h#CgW zo^pZ zP0KDpBe3E=;;{^1h@cFw3(u%R7Y;=i!hYVS>M!$CR2}gK@adzEX2hht`*GyQ5WY*8 zFIrSDpp$vMLgsZw8K0ue*qnY1dM#2Ub9#w%mpj*=&-bSLo-JPo%!21nDe)Xjc*Zml zdC}B>`lD;4m62}b$9d?{w(+CdK1Y5+W#iSK2hpwfjr7LxUQgH92F9ep;Hn%h9k|r4 z!W_Lry~RRpxrPDPEj$itAxHzLHN8Ze$nOXGp#4ZS$!L$Bl3I_NOoAooQB$Z#QHN5a znPXRB%WS%-9(;ih(9oQ+z8d>k%%S)GO?ZDF-nvPLm&%MECdhIZ@o*-myRGy(G> zmi|rLm4)Uqbf;{>3mu*8NJsZRV!}8xV=!tRyMfm@G@)bMebTo3>n2oe9n!~4*kXUj z-PAB@C?8?Rfz1bQAV!QrFzX zjP0Q=9AB5A75RAkz-aLM}5tkCK0=d zoGBqpQbbBKo<(3XIDot@d?V4)wxH`IS{mnh;W|W1+l#6R74{LGt2^8VaE0PI`S2X* zAT9&}s494Xx6D2wsP$$Oc=DA8&)o=Wz1l}m^P%K65!6cYYCjRXG(EidX)l5KG9&$B z{Aey5tN%Jk{Inz4+T{3YeF&TAPvxHQ-4_)zgo3ZeDTs+sQ?NdPg0D{4KLxYxjM9CF zo7419CRSE^V(qxG9kIHi-2D@)2DNnW2t>TO7x|DX-rU*yk2j~~;r2KS?vv|&8NKGB zDf{EN{nP7hq4v+xtLcVz^!ggF{%_C=Q|iie&PNC!C36uj?;MKRZE2_rq+w( zo)PRS>DijxIqBIRn*6Lc8yFi#GzfM7c=jhkP|-+23o|0~SoMY5akBV3GzR*Y)G($` zS(CfA!H?%yF6W2IN%3t#$SG#=z185}&|nt62fK$*T|D`Yvtpk>{pHPD50Q%Yg$Ng2 zOK`JbwQNcje>C|Mtv_&osO^5FX*1{;*Hahgl!kxIn^Ce528Fa}S5F^s{OLK4nd2{B zGrhNCV&80~A2-Vyj+w=z-PtfJR~RpMHj2NidbhNAb=BLt1VM_H>h-}k?@*(}69~pn zcv)}oco&sJh|N|QY?e2MoJ+=KS)?P&Q|K=QL&^;I~y@YUc*R^;yoXax>`KV^`~&L6x<% zVWW35=+b~wk%17GhJR^ES`#`Iv-(GfGSG}b3k54w&+DO{LPUec@v}pY6w{*aL8f>D zn0Ci-Vyx%HxSgVW63hs$z__%YXx#KC{q`E7 zb}zx01=9&0dSRI6sgOJjAXw*7kw(C2dW{mQ#z!Rji<|X=76U50v*V;b_&0~%Z%|jQ zp*f8iWr#h{SdxB`{A8RbKba#mrq^JC!%%Eg%fu3PXmmAuEsmepS?3FOu1740O762b z@VeXAE@nOu#^fR7VhNv{+TNKwbPNz-A4y+^j9+YC@w3_0{KX%Vb94&#&5^5}qWV9^ zw{CwJi&wJhz-1a!r_c-_6unm7U|@ymV1*?4Ec%=!{=22t z2Ml+HTfE=WiX2UQ*I=D(XSwnF{Bq}Y?*bEsKkIuqS9b&{mpLPPLjbI05c6v$b~Mw$ zkl?7wcb%y@WBt~^TxU3>R4X9-bNb-{gK=$RR&JIvJS&h1Zzu3H-dKHd&C2)HpRZ;M zP)=-hUqw-#xXYsX!h~Mm(Jc5xor``9AgX87QE6!8f6yMgqizY7Rcy>rUSqEM<&Ej! zHbyr@H|c$~nthhsnB&?s2KGp|9bq^iNIULS{Xqn8y!{95Y2QDwCjA@zlaaE2_WZV8 zlYXXup2YO!_Rkp5&)0W5dc8xRNWjfNNOpn?#0I4z@Og%~TNzLGWtlT}xrV`8+gtR8qkPUr;L z;lQvS=n4~6^*am(x$M4lbm`^Zd?|X2-T45-iC-12&%s=erDf$uPH8LLjhykza-s!d zN5KLXxUV(F*U-+A>b>bk4IGxzkjgM> z8S>S7yW!ho(!X1?3q&}}8JUB|^9T&o7VMOT24_UO#O7OKHI`&`*FipET+dRS4n;SF zmt`>M{knEkH)^%dcmm}~Pn7gtyOJ`~qX)WrrO}Yf6#InjmWIJ z&ABNPp)k$2u?>XZ+hO5uZHGLZ740w<=MB30&`Sx`AEwb}vHD*`2I5n7B5ZC+o%QGy zy0e}^rzOwdzr4Th{9%9nWz6|2I%3~_mSxmDr28zpYN~TnN4L3X_KfkmsfF8l(Xs9` zux(*I85cXa+e2C3!+Jr6<)&7!I7MHk+hTbyL!)O6rLjYrLunCyfthp;o78yCv$CgL}0zbltewCW9)A zgX)iobu-gH!4ka+qYC$(!fhw|v6?-mP5*S@3#(ZjgpO;|KVmz2Usg^_dXdCXfMGUL znexdpidL~IQps$w)0zhR0F-78&R4&uLW2V~ei%Ybr(8$*4dJrBf2j_aBP(1cv3>Jm z%M;Om;kNd9VJl2V#e?%pjQg9S@96e&&l-A$8uc629jW-t3|&380;HkA`tHKv*82@# z)D~16N02&K9ZD|n zqYDXzu+3=CK?8>6&%h4L1rk+xE4Na!2blTOkJNjY&Qy~ZmRKXWqlbUgKVir7TjP8> zH20fqI`0x)uExNohV}ljTYF-EiJQ?}nIq#5vKFWs0K63s-yF15)v+K_FTJl7vv*6qrcP0(Vox&qmYRzCuxMBht6LoZbI2ui)Z_J*^i-E#Tu$pf&VLeZtZ+MXK0@zxxC!dc9>Es*SxKLKYUlfKm_Qn7G z)#Yd%IS6N4!n^W#=F7O9XNaj~^(l9zSG>Z>sq{6t0ig$YR16tV@q<1uuCmrov83({ zRTYDGt>5-(4R)>Z(m?2_?;0;>VQ#x{WW$D>hIP4};GDJ=5u5uMHG8Ep*jZj3?G}^I z>^dE~9sN8-`nd%CTwjHo&2Ul88~A1bZ}r+a{ou%AsZ|1B{4S9%aLFV1VoLsW%%pP2 zZ3MPto#|u_{~WLuThUkD533+*kLS|rT{(7%&zSu&(K=mDz8%|A#!G9G*R!RVS27XB zu+#`_YS@#3o!ic6+!V7?0ropsGd8MAz9msFoPy}qo#n*}_eG#`dmxkN9R_a1ilDV3 zx74|;M~>f_nByN1^5sk)%&v(19qgJgo={%LSb3Q&FM2!VqTgEIu=yB&`ua6{_%6aJ zL*{u5&4hE0-NArn!p7=6zjYO$1Dqw&FT>1D!Lp4@YcAjH)43M_lM1#kbIgLRCT>S8 zUOKt=#6!&VA8~pHS?+O-f~~6OC~#@mb*+h9g}rDgpB9p4E*S630vSDcm>deWM&E=z z1@S;C*K)x~L57oAj5_WWD5V`wf8XVoa@f&$Vc`N)SM7IZ3fZPX)6xPiKz#OIvX|I(hOojYg#K1-8p&??O6%@ zSdqw&f#NOlWoY<-i}I(Phl7e5euZfVAg5M>f6o{A0Qh%h)z(09J@~OACZ{-dljPLF zKf?dK#CJUU282r#B~{s!Bg@pUK^3vmB=CnPZ{LNyMNj@xaf^GUQil(;=aN0z0pCvH7H;S|6+PElX{ zkvs+5(G@Bil@dyFJ%Tg1oVJ3_)p-{VFL!Rp2h;S2Ozj0_K54RIq_Ur25eV1^1)7FP z6L6rjFaGb3=MuCm4F-Vlo;>4rkxke}%P(C*5z02@M6;>C9aQQJ%_?;+&InY()oKH* zU6pI?9_e_S2`k#c=6qP*(qWM-l_`{pG3Vi@{OY&*QKlvw^9)T4p|8`7G0iTR7C73(=bJkdpKv&a?qJ zs6!6+LFeK#p;WK9RpBIXpc}8t-NLP5bJM6Opq0k`^~Ou}s9M*^G|HAofWn=(Czm7` zi08o=mHg~vKeVxD+Hkr+KnQX7x1+i@g7TXNm#_ecfKidL%Cm1_zP_m){MCe~i-i6} zodIz9?wN}cWvR#~?x%kUys{7#T+lu{Sb#lb6+jTO z9jj%xWi#tlj6hN?rZIRgJPAzeN8{Fq@D}@qSRU~_eGZ=BQgavnJ=Ym{GTZlwngMdt zPI(2+1y@}wYLuLv>*oume=o<~ct1$nO-n6Tsm%gQ`sb=YI}K7lK?RH56X5Mj@UlGm z(d|%|qATci^jCZpog2G*^FzI_{VHq3eeH4{WVRXuxN;As!K_?qG@2pz7U3NHW3zGm z_Aeva({pWTsvbn{p?2yeh;slPHORZ+ut57#Q{v_5=_DHU@Bt^e?CXpK)}k<(cZ;jdVG3$QHsB;fR*QfSm} zLs1}fz#5IKM_2Hnol#8lFDBwZK|ODh+5wB)yTD0W##m5|1oF`{=RT~dHR+T zi?#y4@lqj9#CHR`egYm)_Y9|$C`WT~mUM+t%k4XK zaXA;-I4oJP7x($-SDYyz+ul(bXj1?eP_fSCxB;$BjXilL{R-w*w~`Ceug}p$+8FtO zdc!?lEfG%f5(k3-qAg$%3fc@FeNyQ?qqDT)Id{jL^l zbnykTdTG}A@9j@+0_y$kPj-?u8@I#vwE_Ms^h4VX@DzKx$DyD$8{j2)wVypo;a6|} zn+);4yPx~Z?pu5H{Qc9b!~XAE+au&g$0v9T&YQ&z+h%n+fS@3s$>kLIcp3I+c{}mF ztP8YYE|fdV(!oMBq4|(7s2rBd2?{H=6+38Ti{TFoe_O#AdIs-*fYUSzS&UOTY3hez zEGhH{ykF$S=7S$SSk`ZlQVb+(B*dE#3#*=9w%v zj_;m*z^!Tncl|!#o)$P#QMaQk0Z#ij=*yU&1|^}qs27p1*LyDgZUce@`e7w@q8bD9 zf=53eJH0*qZjo}S+v{>ykqcAM;pu{ntV0fFBYO{(R@!n?E~;ET`s(x#0CTZd7^fTGLs8@ zo6SdoRSPM#+>XXUbwJ)a9Sq_O>WUAbAj2?lCt=04Mzh|jXg^7JCNL-1Yh3<&Z(0)n z$@pCdyNSntE6|D*{C74=EnOJrzjEmxaW6_5m-%hrj^78|T2v!Z9_*1yx5xLKz{UCH z{e8gwUf|;6^67oR-Pi_SZ30{(5jPLfMBIjaZ~St?fk)79FxNyw#fU{P@)pFri22); zK!oMPhUm8k`#qnMHlQww)hP*c6g6xZM z_UWRM&=gpA3s)Al7JeE%U(YM3|535}pPJw+zY+Vui7nv$I{oRhRl?0u?FEP{=RcZ+ z-98)>f60OUo=S=ZCRgbtW%0P>vSg9)MSho#NSL-&sh>q9%6Swziv(KzeJ0XGg z)gA=c!?GS#u_uiL$;Tv^18aN=AHpY0I%OJ`x#>`iQEipS7NH;3;g{Aro+TTD5L@}C zGuKxwWb^yR;g|6iCqR6_WKWn0?h=~NRCf> zs;2Ekw$trN93B%}Ea(LF<$Kerk%H7`KY(}b8jalPQUka}EJ&{dtyT!y07`&u#y$W> z<1A;Ectox_c7^tcj93i~5ziyC0cS2UaE0Rdxi_SGf$fUTe|>EoH)dek%s{>259FzHz> zPB1+qXsuO^Y&DGE%y%`|JasIKv%WNYyS)Ns7T0F3HfE1UmBi?R`-Dmev(BqD=AuK4 zx)SC)MOBkQ8~82&wprZ`K$cLQSi%zdIzS|waH^Cr z0>*w+w1j2mxBC=P*cs3VpSDcGr__uIxZ`YA?!sQ!4$9~A20SOX3Lo~=A1+G#@HGIE zO9KOD;Bas+=(jT1KcQXokhfsODwAy|(OWr)pyrQ>v*ZG)G0$=0J){YY%fhPj<^5b4 zzp)hnPVXDF2e1yaUZ+HeTN^Rk4|?Sas4fq(8I0ZG4vN@%Vki+Z+!=SHVk2WIiu(|Q zra+2=P;;y2y+7D}?^Vxxze}jILw(2ndr)f^_#~z;p)RMeE?rp{6jcurbIhV%IJs=p z{H7I)g_n^Tft`-$=bS;UV*vm4S%7y2eb4kqI=zAEw{-ebrt5Y39j0GES~UX?1Zm_3 zpyDsq$MSo!`+FdMMXDy~HzHqMQ}AAh*!{~_$Ca%C`{G|FTVLHm)@fBW-?2TAl;!r- z`M+GQ^3+zK_;t$FeB4hfai_%~C8Z(O)K$OJtxk0r`g`2=!x1wVyc z?ScBGlB=Es?Liv53>25O9pr6Fxf&hB25(Sd{8Fw$TEA}89FLlpg54llAypy2)N$Vf z&J&z?*$b<OiEfq$`K;iix@-lfDRAF;Vy4K%$3a1GFhS3pnMs zR&7S95a-?SS%Nr+(Y{8Ask*eVxi3hmF~QdhxL}N?;1jaN1mBa8HLh5CeE?w;1)so# zcS1xwDg9OS_{|Bj zfmKDUG6Et{kO1bUs>*UAwD_?& zMdPl~fM#Oj*0cjep!R+m@R93*@o2Z`#{n3h6|TjqJw7Y!UJlVW8?QV)2-CACcw_Qk zh|_*vsFwGs=7qCZi&XQ%-$p@J&SAw}Su92-%n@Q|Iz?!Nc|lJY@$r6`l$3I|_(_np zpDn&}-?yDD-o$%Ohs&x+hGz99_>J}+XHZAhZBu`|b_V@)Dbnk7x`pZYbowi%SLpPI zOuwqrZ!*0=rL{U@fYb@~pbLpmL1dK}W~F4iA&2-5PK=l*Wn zoBW=qFBAMXw0*gi`}5S-w_!fv!SsFU>zGd}w61<(@_h0UK8ow=rmL%0sPP+Fe2eNA z#V_WQ2{MH0*!`8=aStBC5FCQ3cL?#+O ztQOwo-Yy>2xexs#9|Oi+AJv=oTwlH9-0fQ+zpwfh%CA-&;Xx_VtH!rQ-p=)$&7Nf@nL$-_M||f5Ddv;8N=1bZpz9CPFeZMok3>6GX`@k@E+^Fm=3) z0asWrsyAjI(Z1E{(>d;DLK~ZzYt$^o3b5^LxEe^f%J_)Cm<hnbQuq1zysh(8qK#8ld`UIA)L%9fg(f0n1TJtR% z#>g+h;vG=R?snfwjj_7vk9XDb&QIGt06QIVC^yD$TpHZ1yFFyvDDzX|+=3D*1%m^|)A(?fs6<+vc~q51RN!#7LL?doS4`GP{2b);Mf+kBXM>uB zkxJ&5ZqdEk<>7J3Emq@CO=kPuupo$zo7lN(2%uzyLnDP*_P;@v%CBQ&nbR{BS*~Q6 zsJ6#;Tdq#QcIv4@m)CU7zU3GBsu4|xb7wvlz~I7WtcAzO=#)0lY@}PD{`D0G0L%cb zFX(_>PM3aYe^6`aH9iv770Eja>$OlGfCAZvCBj^Tb1%I_FLIyf`~NxLAgqmuSwCv# za?LfzrXtT^l$S7nJatuK$AXay>&vYM<@Eip*6NurW3_rWKUJ-smh!rFL0<{2#oDwh zM(-Qq-`|z;`|J5Vs4M)9X`(NtiA&sfT6k~($UJinUUMG!%W&DJh(8b1|~x z71$lCz~(Pv4LBsR0%32faucyZxRsERCd6$R@44?`jiJgDn~h$T_b>RU@4&XvPj)xq zg=Exjhd6=`OYJGqwgEnc@c^D;t*U+zbmvQUYW)#t;dJ$ldIgJpN=K1qchK7G40;+$ zgSwL$uoMddkZ3jW!;MoLJ^H!zOEH%oAz346mht9N@2kC1*oatbz4za^@4eP~@88CI z*1Yjr)}>j!jXr>>g!UllzpUjZxGAZ_St25}A#~}o=sPiqM9531DrJd>#L<$wT-C&=c@he++JCVK7wb`x zpe+!X`@Z@ON64S^@lr$_z8ym>;A|0ec$V)dNzA6&703g_r8U;BW=i$zL)7jxSxYSY z)Mvmb`%-B0&P?d95_xN zOsSzd#lJo|)z_W)wY^wadcb0ie<&G0oXD42cG!z$+{fnlkB~=AV*+7{Mfz~fS-avV zJUiX;ld1t-Ls#S0kCCg#dwE3ah3n$;RjN79@#ajb|Z1dc^i>$VA{W7GR>x(Jcd9;KxSqh>4wxVjekk;{;Z z{x$kw^e@r-O(+rn@J3Z)K_$AN=yQa4DmL-v%QUb|f?XjeV&WOQCN-SC13@R`QtubmcsBu{5;+=_k<6LM{CN=^PRt&D% z=VJF2>oV;2H z?%AP!M=Cg7aTe`gpl!Jm!jaO`KfrpsMn;T#2nA zYEL+plBZ5Y=Sp?KVhE9wTWVkK4-{|WO?VqrceWO+V8*syt&faa?yjMCM|xe0I~qlg z$EA*F%LbLD+j4tSU5wi&pi0sEK@YVI0FnE^1Frs`Kz=aMBgmy=2|B%~;Ub7>>toM1 z=nafdH>5Y#4J2>`6J)FU5})W!L<=wuO}P&9GQI^jUIlIxf6V_ee|0~$J%4@hZYus- zm;0ab*Fv-~&cW&yApfuM*972&ckTau{^I=_ZTPDs#$Sur+JBqB9zI6evTy#XB%AD$ zzsiv7@z)h2lKAV|qf_(Otx``4iA4U|je3y3$nPG1X~Fd#_doV5S%`rWz&;3L0JI7) z{1Yl5Z?oWmQi)lj5;H@{dSC#K~A93$p*Vbt7(%%s@~=Yz4Z{FgfCC;+#M zVc^A=<^1$P(5{5oycYA*CWuJLv-c<;kEBfD93{0;e+M1}NRY{?2fR`WTZ1_MHwYqN z=FGdzK`6f3nENDt8q_hk{$!RXUv&G>sDNDkIvCv?bOQz0*CDX(x1pY#CmAz^f?sSz zM+1m4!+5>jdU%9Q!5KB4{%TQK%<&?94IRw~PJp{1yCQ5TSmF!*%27CRanq_5q+~Vf z#`{6td9eFlZytOXDX#6IIUfj~BpX3JJQB$ZhnHch!#bani}QlJZw2!fed`lF@N0bI z078GK9o!Ui8Nl5ghRt*vzW2PcBBX2657V)wmAR!EO@g<4D&z+7OU~`h6FE7BdM3}<)vk9 z-9k_rY9!mOjFf}-{k``{SGZ|x|BYml6{n4czj^$15JMVi6KQqnk!;M=kvI$ncVfCR ztC!hRtnnfQ(Wj@l^OWp$kksq&1{W}zc7N3uV8Eg+x84?Emg_DE^~=MN%HR_LcIkE_x;DH#-3;qJ!gOP{_zQq|3s_-_6q&D{LhXXs3t7##*v?>;x%0s$ z%1#9)SFzOS^3`Rlbk+L??Fo6NGY&#yJWSp^HG8S-=V-W~{gmG1v$8yWWD@j|?V%tp z$)!G0UfhE5_94gH!Pu+Mr$d}NySoV4yz+vUz$^?fjIdlJP_^o5ulcQ=&`4emTHDI) zNzh2PSG`~sqwLV>xJ@!y#WZT~fuW_`Qso6(0<&PS1fr9X5JVmQRz36*Xrbh1=q2bX z?08;<-*8iodJ=Po39FyO7;q9NTYYo{YznF4_d9{OqZopzEuezQS#q*M(JN?Dqs<(0*833PC>dCMPX~I)>hnEGM?3 zMp{m6qMXpcF#u;THR+fxEN-ZzCiaT81gr}4Sv4Tz7h z*;3pxY}zNR%8w+C4ebEib8em@9?00_3Y~zJ z7=&gG>V+2DXN%EHNMZmvBTw_TWCX_U7XCFiI|jm^65j=J#$UJ=!UHy5?w3qai{D^N zL(qmT1f*zDf4-H^x=-}R?kjnk784L{pQDcht%;4m_xVygN+NqgiJJ8$hF=3-RtDU~z?n#( zsnydk>bM&Cm1#qOX+?V~ng?HV_~@y_z60I30@M_dwu9#RrMQ$1zdi8l*PV__C3CQM zt$skMpuX1~Nxh)D>0ThKpcl9S@W=}EurswkZKW%*YaA_&ts|3V9(#_S2_b#}IjA|T zX#Fs7p7n*dCU~hUa}(L>D%6K>7O-RWd~VcS23ewpAt!PHQf@z1fr0~lYB(y%!{Ik! z;guw*jN323tH@OR1N|Tf=7=<5qGsRZM26xm9Q#pL+cKo{gyvCYc5kkBbd`)h!b ztqS=6sprn;L$mrPnU*-&Gu}Rp_Jz7v&BYhdc@T)vhnZg7r}ro!TS6vF5tfoT^zump|}bb@4^aQ#u+qF=>4)>hK{Rxp-@i)#bRogx6+P{ z>wn0&eyZGBPqZw#>WLucMtI?DqU3?dC@IcsxgDe!S4gXzGXKQ)!4>5U1`-PTw2cameFe&eX1>d!! zi!1MNfuU!_c#bMVE>(u>K@v>+)cQYwY%^+yky6%oUYqTd{*e8K^sQ6%h*rColSR@k;fx8|rU0x@x7<3BPoi49XM+sf% zrCzK`jC*h^J;s9g3TC3IMBa;)DDfPXj#E*fjN;}YFCGIvKmfteWNwpeR;!R}+V@M` z98AwWVux90aiGn5ox>qvf@b`gDlpy-^+K)|PuurUJS8xSar?V?75N7LkdFyF4uwR% zlox4*o1=H|y}0tDra9_bjj85A2(idZt|ZHiEI>;A1z*M+g~9B#D_b4PnnOAr3FeOv zXNm96g-X!5F$ZH>&Sc?i7A_L0c@Av}+GBHq_UYwTOPhIf7!HktkG{moshAy%^CkwF zT44wmVQ77|FFRPml=)IQ%#J3_YM6ty8H~%us`5a=XMtJR&evM&Zq%lFTE5>}hbi|6 zp7X*kdjhGw`A0Gm7i@a{$eEV3?W61VN*wu&zeS&m6C`#X|8gvXL&akKg=yD5$aF3O z=d1~xj`h1~pNHXv6~BERxYf*Q90F@E5Ax#%v8Ewn0ER{gX()&It5I{V7l-gBtla1u zdfu|IsBVmmo|@Pjn4c2lt6Wy`8x%x)p9Q05?Wab~d%y+x>ce%fs79}-7Z(l@#N2&b zRQr7Ne9)eVwfJ?=^>&n7Ka?9oHc&bq!Y-q?8tz*?NP6iokTHnMqX!A0JL?7bv;`pY zQ^1*r#S{d>vn4f%bNX@BXbNG8u~S~KH^7~3bWR^6P%F_%wm>K8!9_Edux})FkJd+- z2h(=p+N3=2xAPmc2NKIH9+?-qhMd}f3YvCjG<5=e{5}qHHOh9~f^aRkrM-YH)6K%X zfSQOE9U=&h@|}HZF!teV>x1~-sJ$Aw@d_KapNr?n&G={RJYAnp3hNW<6Xyore}OIb z9B;oKv33I1hqMJT3P#NiNSB~}B`SVHFN8D-+C%b#_NiE8Fsi>X3z-+VJp= zXXG&M*vdW>L&vlns4UhTpa~R@CSAb)MvX(E1p?Hg30Q*zb%WrHSyUi1r*Nd1R+dj) z+L;X{p{kAy7OXe5rQf*YAH?EX`wy@b3wnUB!nfq5Ekq5{aEN!AY4|^ONsvGQ+EJ`G z5RnZdMvOK=7WCbLnxa%|FpcVaGm~0&J9bb!doaJ>&d4~6qfg1h=5Zf z|6(SZpN@v@tN9Z+n5Frn1iduBN1$MnD=~~ao+rLpT5239QUmQL=J3>b`#%N^8bI?X zLMXWW$u2va{1MdrL0%<=lE_m6G&6gpVW8mvtL6ag%upJxhcx7_Ox4(UU(EcK*VYc~ zhg*(J#dLA`1-m}ngIeMRMmC7(fqQ?Q#aqjN~_jd|^VfNDWk@yGp%yBv>@oOj*hO-L&v_PIDqI=G$ z$Y1d^c3#`~`1a5qZSJ$^mGs>9z6sdPYS$v5V8x6sPS!n~4b1s|J1gBD+Anix--a(U zG7`$-v7c4a^cUl+aSVMBnbZiJ8v<&rSs4+;6Z_K7FAKT&u3ro;b{k$?# z%>#BUr7)Z!Y&rg(Ve60=TZmU7EG}<>R7GeU_7qFR$fxH`MAp3qfspkDP>2~}eP3Fz zE$Cd;Aw7C%yicHjr1P}#S;k9;VsE6Xgl^xm3{uZ^gpJAZAC-3Bjy+%?M4c!y&WL66 zLv=eqcoox9R0DRCqL$O$2>hB^3hN`|0g-s0i5vp@zTlH_1z_ShZlYm{KfrzT+b8&~${v1uQjXu6 z*vB5y*&5u-Z{N_>Z(TRgZx89=w+83IuvH4P6Rupersn(Y^YZ-Gx&7>md`3+cia=KV zC+TU{nyNzF-B@b8ZLBcfDK%D>8mo*qng(;N1w|ZX06&mhYls90SOV;PxUF&4mtX;- zv|(pgYj9tG`ij!^U4UrzSwM+0$ zV>abI;!mEZZbDbsC}v}A{fv`fYpz(x3b^AuJk?CMgLS*BGK`h!Z@?@vqHZ^IhVoXCUu|L?F z;oOnpQ|Hz@i1=jA)CxazbX=s0u)l~umbU;61pz1s?1||4u0B78P3H*Dns{=}nL3Vv zLpMDO>9qwS%)4(S<_outOG?H?#q35^sw<|M!+9J%yz|#aot)7P@2r5eBD@rm&+NUk5Ks)%XI`BEuZ=-iBd)Nqgd0ij7qO&y|{4@dlG;yG9qQ~+uiNczq znF-ccYhpjfqpi6F-85?#IjO2Q_=wD7yu<52-%j8mV+D``BUlLE5vSk!u3>#fX~WkU z4ZFIQ7HkTCky&23+d8*DPDraB*5DGzFH#zVV}jXx__$f{tZFr^bA4d7K=Fsh>|&H_ zR&Fyhy>?BIc5tNp$YvdkNBg>dnb-Brysp1ZM}*-cfv6&VRj_h1LQ)#Dp9Ok*cnO5Z zI0%RP24gV!A@NosKyVNjg;F$0jKs#t zeT}e%ngr6f1g*gnBGZx9>xI|IOk~&rPlI9UtfJq8`Gt>te0^RLe^(H^Gv80adzZg) zBEAB;aB;)5Y`Kqz`aSPIbh|H z;abtJes(;F zP><_s-u@uUEJc|(cIyqmwXJ()J27dg;mPaB3&Khzki&O-e0)X!*tifT_FHTGFtX*S zIm85J#>!mJvm$MS?kM5>V}u_CzCilcpan7iN5QT2w-{en{vC|^WQ?y%8(JZE-GLn5 zkf{f?sCz2p=f9Iuz!vlmrKJzghwHNulovNu+*Lz>@%>=-9sKLL~@ zrDD~nF#1Tw6&sqPnvlsh ziQTBVn`JD7xZvN}X7Ms(b}e4vD$+j_fb#WNaK$iZAl8~$m{cIS?r*OWDn`IvOl z5w5gq3t#6T%E}4uyhc9&`^9wtv2YBmCFt~|wbod2*X4*(Wwr^N zOl|fMaij*)V$?WvqOqi-6LZEX@T(kb*2ZXy{5@Ob&| z{S~wnt__<$5xv2I?jzTzGg_F&FJjdeul5i(Ng@B}S&1l-#K;Tm5qPGhCp zWxi5u9Iq3BoS>S?IvGwKA6bpj}5p6^yK--avFY? z(j;60mzIQnNcs-Wg`p0m18&Hlexpz`Xnn6bpmC(;IIO9~{FEy6j?;`^R>>3~2Sqe?Q)IvNMq`^&T2NKg* zzPS`oA^6%zv!(u~mC)`se6$M8a7q63KBaIiATCl{hCXoB_%7pkNmQ^!&Xd_D z!Q#!D$u5mCS<6pt$kLX{W?(CbOjZnPggVLC2!jPZl917&yAnv^G8!u#`88?{c}b@s z^4D;b#ZfE#^d%qG+RW% zMQ-LdF%iu1{~F)B9<)K{>3LZs=%(DU*2^P7TVu%*Efrpzj|`|c))tC}&ge`yHDqBt zNk4AYe7N6!G-}=l+oCUxxo-*oZi>kR*cu^-LJuyFYi7C=I6mQ|!CK(&8t+U=qOUon;t)GmVJfR}4@!k@}9>-F5b~kExZjvnp zSC)V)V^q9=ee5yhRUl9snw{m+tn<&4Y*b7xoJ6GiA=zT?n!x~x(0(K0GCUhqPZSF$ z{_wLDTTc_ND+IJih+Z4Gc^e$k1l5c*%*-1kBHMQyaHoe$QSu5P>?CmKx}_Z z;)Z(YKqyPRn`u&B5>H$lYhaL_xt|7phN0~?u#DqN?zS)!8#nCxHjUE)FY?>=U9dUc zqK83}=<4JyiatGd9`#q%5qprvlIJNA3)kX0seWUv=V`#B%KN8Xs1Sa?+OB^O+@^oS z_#GP#^P6;uOJJ=Y1Je+aJW(-y%QaRgHs!oevr_lIC4Tb$H{?OS6_kd=i~)O~*l zP9zbDAhw(SA`xJ4Cfs1s2{U0|E{vC{j;x;tFP6=3A_}cM!~zlrUo_7bgizs8W%HU`Q~KEJFL-6 zt1PE63;jw761V4L9i#PmZ{1E43(xeZOpa+-GVvh_x)37j6KDW*mAdac=Cq5~ed!@M z{yZ9aDi1C5^nV(9aNfwXx1&-0O}o&v&xaoORa+(%F5)rXW)u9TwqQ63AHq;Bb^1-0 zwjDQ!b#b~)FF?!4g80(88J>Fh`XBN&&(Nr=4gFmyypm#Un}JWuYOtN#AWBiUk`y@f z8D_z8Tq+!|p^AcIw8oK@gaft%)Z0zhBae{{$CsF&q;DS* zk=bo@5{{jML&s$i{>V&)<1ZeLK^n)ANjT61)Z>77J(l2#KFWzCdR*$^_?Sc9>Gs(P ziS)p6OW{dp?W=r{5{8O#GNF6 z4D-7r=D+9WM|!g0fy{pbV=MOk0ylr952LM-TZ4Le+2W7NX*Z5^8=Dkhxf>f=-U{61senjS0MR8=AWOKU+?C3l6>ygMK+^f zV&C8A=0}cY`~A$f67z3%^H)kfz5FA`BVSpYD6iew%A0+%_!5=r49@UopXkTY52No# z-;J(`z7t&)eKWdp?7YJIgv$w_x3_(coC~Mt`0@?<2%OV5%AX^n zl2qjeQngE;a8I~M9e)yj3b*5Y&jP6i40De&fj_)^&U?4eeP=qQx#jT9%;f>1dhaFD zD-zPHy)qMGsMDS|&cBGpf~*-{U?%1=}3nH^bn6)E@pAz`TF}aLBLZvo|u7rTh`1x6L?IV-zggq!l?s5KJq zkF+Tv^cOjW6!&^P>Kj^U*)#4@f>=i+5?KgqXQ#~qDMdzuzCtfq-+hcwK&G92Yqbzs z$9|F?*h1u*Js4d{6H0T%2rvY4;F>jp{K1YBZW)m^hVQ{=IKR#J72bO!vRfgyW4x+s zqFF%|!O&*HOwKVDU%ed9_)>TiAG^3n0KQ|`_G?vFPJr?DdME&Djx+$Lvq%^ER7*t0 z488>o7ZEkYQwBSnyDZr|Sq+b1?dh>n>XLmkp}3ppL8x_7j*JYB3OzhXh@pxegBY9~ zW*97>0Y)ZX<+|fFag3q@J7y5I@LduWPWeh#^lJwpxpZVAr@fh~9h&H?&=Tl-jhp3Quq3+`HBrCaWXm$|1 zzwVKNVcnt*J3<}E!Bx%xCyE(xn)XC_P-Z*`V{k${;{MH?qjU}s$CHTC!q3Q$sdEH>#zl|JTLTs1hn**}Xncg$43Y>yz zCV=ajb3@m11L0+S70MZF9VRL6%7z;=ypjT(lTh5W-$VKE^egOsV#ExTX$m{ARsFps zzYeXj1hvL6Xk8sIsp=0hgf=Jxt0yT(JfKv`mmKdly*B}msyrM18AwQgzzGV93zfF9GKwu& ze9b6rb8rS`>0OnKP3K_U-?>uK)Z0zCYKcnRDOIdCvCS>vJ#bm|yA#uCjiz;;W`V zmx&M2`nySY(H>r|w8;HKo2&v2je1ZOKytfa9_1}B;aN#FFA|vi%Q$~1=O^UPuS$M_ z8|L9!Zeb&r-PxOVF%T7H%-g#E*zn*EjwKeai!|Am>lj4ZKm)8;zrtfb_!M1LB_!8w zcu=(r8QJ)1Wy@KNOf}pgm$v(@j`wRNT?W_8tii2hShBzPY;IpNZ-0*DaM@pEw|1&} zDbvoVs+QmFkX1ak$|S?(?a+{&-tr&p#xi%Uor-O)EtO55Z+R}to$M~R{NZJ8rB0tT zVmsfhB2m|ly<;snMp!{zUhJ+YJPsCPiC(aT7MrVEpXPogfU&Dz%vB3?+||zHI;(ZN4*2Ce30II0sWZQ?2h}AmeFB9ixsr^ z3p~iIT^VOjVvH=B>=b!0lNT@iMcxliuMeiBqQYgKh3Zm``_ZX7l8tSpl0tCPB3?qO z@wKv4WPj@fS%*~I8KF_6#7n#+>$EllsKx{JHK0=gUF?D0e^Eyrm#k~OL0->ify;xv zpzvAu71Ylm_@c!RzR>GAd*m~5KZIEIu04VO_o+RE|3_+1V(cD&tT*cdbG3WLI`cqR z8_*pg&_(9j%UkCM@9%$({i92*sQtrT7qfp3M6iFrwIq4_K0h`5X^Rn)vi{wZn@E1c z*45T1ga$(nxHyN;obxF(l^_!k0fzgQ?=yhOWC_&2hpU_IkCq$hRIC0?R`>RnxAbO2 z2DGFb9vdbMP|NbX%4qwB>#I>3BPIN_{xRot#)|{r*~a~2OEoeP=~lf`4bzB?HqKB; zT{Owrke+%{(Tr674s8=r6ZYc2&)Il~4v~imJgID6!z-%wY?bT7J-MFep?Zi@)l=5R zoiWF=L&9?yZ|nznN<0tM^P(nj?Yuc^{W*SS=D0m?4&&weOKy&z6q{qTKgTI%j&qC5 z@txcpQ;N;;7B5quWs~uwe)`bv&oVMM$G~E9EcNHO!p!jop7Go}HSgoKoY!xy_bu|? z$2a^r2ADa1p7$)gO1{f4b8{>xHpd8mjz1VL=mkaQxF9!&U2KjQpZDI!>1K|Ky!T=5 zV_0sE14PPo`?h!bb8JUevOZSky^l_Pmd#@8XvM3Rhl|ZI)t}=BW{!D9=2()OV^*;_ zD*ZVmK8yRPDKbYoH^-P_b3FZ=_dX=QhB+pY#hUxJW}TMj=6G9n@jUG`@TM*{bEr49 zznqVesMumXeg zFZb|`iciY-u?Yb@#;rCG>kvo!_QNEjhug$H*o*xFA?tbU)5ix?e_R;u$}vP&W0bK zRl&pbtiN3NZV~y^#uKQ_pNw0YIfmxV(M^9jqSzdN_vdIW*EzNf2;WCH{pHy`MegHD ze~v|FjysCX5z=37DK^I_e~wR^Ilh_qEJj|3^p{MrIa>H2`aYHuhspb>Dl$h%f9Y3j zj^FxoeAUdcncalkcQN-7(qC44-!o4Ky4as%uLgAt{YAg<9Ok=(^p| zvy03T(qFz%Y>wyFd++0OW{&go<}lwjq`&NYr^vUx&7b2bjc^&-JMVoM9Vn!~JWyqXk1G+x$HhT7Z<>BvQ?&AqD z6pTKXeY?o}sQ2eM&CGFskvVS2&GEZpbJX~AY&AOal||+lmz(2~Vsq^Or}r!~%^Wj} z%+V%FzIm46#pZa(pTjb9oK$3vzvt$7{;eYKqt>6}k4DdauPppdO~k^LxjBAPY>v_X z923nPe=Rb{sN5V=ip}vB5uy5RUqx?$_OC87M~fH==6wt-Hpfzbj_b`FCl#6Fx4Aji zwibCG-|*)+%FOXz-|p|@;@lhyip?>?pW{Ik9G>N`MdmmvBH@`ufS=5`F!BZX(dv-{2rmU;m)g zT=reu!_1Po`u2Z$`1=*VSn%Hp;}?7QTNGa}_&#C$H$41R zioZedcZc)Q{OnCBa;_$viJGmO8@!@o-+gR?*q zEV5P@f0c*dp!mxK|HrUC{xc7Mzv9*2k+N5TK7WmezeVwC@4O1v2=LQ9{8frqd*}Kv zeqtYU|5FsN_RdjZ{I=c(KSuFtk30w!2J<(1_`!<5Q||xlF#b+&{&#UWI}6la+AV9u zw@2#z=U2SiOATTCCI0g(UhSph!uV0%{Nf+?;!0Lw`UdltdHAaoulCSIVf+s7{--Ej z?V%3L-r)R4{O4D^8YOq+@P+o!msz{nM+kOp*{~Mfb<~rh+!h3{Oavo@IGM3M+e59* zt*cvCwKldcZ+*P=(bk7sA8dV~^=~=SDsC_R0GpsEd+8#@DLv=eOM5T)_w1GH*YF&5 zJ;b|wU6A?q(rz3&zP+?*PtIPN^KV|itN9?;e?^e_*S~`6%X>eUYiqpAFIlV-@A462 z&G-HvV=tX9Yow^X^n8=ipk-<7p0JFD>aM^nBov!AO;yzqjs^;`Y)} zOqS>G{psqky|iC%rn|j#5P$DoPsmqjZrQ*@|Ej%o>?=mbstT^V`hDcW?$GDEsB#h5 zOGcNihWmT+{lwRb$mTU%Sak%?-@B```y3&EZ}!z9bJY8Dc>dl$7MUaD@BLk|Icoel zJb&-CdC$Tl;3Ey$OP3UzV?QrbpT+a{Ru`EgWG@XbHpfH$9G<_og`I=kJ2m$avX`Fs zzD1s`Q|r&+`FsDmKRk!Abwc*iPm0Yk+MnYOM*sU(kvT&4(v)IzytT@EAE%o+zLz(L zSsx*LX<)HAmilvShdr>yuFHELW=|nxFRk5KWPNpRKdhf&Y_dbv}hj||%d+ERq^DKEf?)giBv^I@S?ZN9KA z)FEG!msY4l%8qHv4(2J)A3ucif1JN}Z-=?${iH`Z3snEe^Y?D|@V6*l^`AU{??WE` zD#c$Q`bnO@cVfGle~RK&zbXsskK6Vc{20Zn{*mYJZS?Si6|eeRp1=1_Z~k{blKWTv zD$n0r@7>=9#jAdl=kLA5e}2WQew63$9p%k`i{e$k$@BM?dHAaoKTe)M&)<8i|NM$q z{pKM4-f!~}jlcKZ708-&qX?q{{pMR>WRYCK*q-&9oWFL?)PGO^=vvNodeT2$5oCe< z$GPO|A7|sc_5HPb&;IwWfBnI(|Ml+I-;Faz-pkfE3;eaS8SCqtrCHvF37aa*{)v%9 zapsgh_TxKRwqic9dHN68UHxh{#>v#Os^_3rFU5b0XJaGewKiF}+gq;rKo7T>L#J*B z<615?z^8rSYXY2PfR6%n>fQn(r^f&~b>fyM#^wFIaOxV9^e%;@{@;!dK2+9RQGMy2 z#|6_(U%LEd^ri2DYZ>{EgX&99?v>Yg;E|!cftWSFca1-Xr!W1z$Q&Vk>8@gPjP>XEfzi3< zuZQl7i-jlR_QAhPD@heQ|^=u4-7kvIM&#{Mh%(!?+Sd-}?{Wn8Bxed(`)%-5H` zgb%{kmp;8cr!O_1@$X%K^1-fuQupgG7Z(!mMdCx%UvnidTl_T>7;E$;)pzD_Z|FNS z^uug#S=_3JUo(fEzBAJR(>_r3ov#_-sXkDYoR*XUj`V?|2ephfz{7l?s9r6{7+{GH z{6K*H4e-6)vI@65brSm9@*!zN+~MtSi(;iUN>HqJ0Cehl@k~;>$>?tqpO?P$NsZ5o zXqnHCGSQ~=rH$n7EM+Dt-A%WyDE%F?hobXLlF67AR#fv;>^%$C%BY+59wc4Ct=S>C zizVuKn4s!G3FJySSfmH_RX1<}t9}N%gbOx4gpNr&y?f=F?s@xC?v%Ead)WsW_u6-* zofc&SY0)tf6!tL5q%;r6I8O;|bjtk-unVX#yo{v$D~agc(73CluHCZgZ(_D&j9~Dz zTQxZC4mr$PxK=@A7g+QE!B6SS6d`jz<&N)d4W`D>gD0h(wRJnKWc0mc-9F}cQ%-TcN64P%yeH({h0-ioJm!6;W1Uvrnqq$`BuP`@GcH$Xio~sD=X9kb8&l+4^tIW|tIcxX{q@<>v7OXwFpjW)oq&b{o@N{g!!1>Uyu0r`GAs1IxoL`m`wf zJh@E?@!BiXZmL9{{>yGfg|+a{+-|brB&wTHcRQP6gtcgwfu-v9(bAK6dTU{=_`~Eb zWL%1bdF&p};+KIiN^WFMt6thqI<03O@3qKyYMb&tk~C0#&RTRcGbXHM8`6;t_6_^G zYIkO&76VsEMV_?gUj;VrJ{O(GGZ=bhjzbcQDKKg+J1de{Jhe(@J*&6;>Mg(e$S(>Z zPW}6tl*s%0mAw9V!y)qVW7!0&ti)P)jG4^4zthO*8JgYWTj(k zt%cJ1IptmzNjXoaqEyVSt*Xw@tAHgomEJP$S(TaChKxI<()uxJP}VZ({1V$}TR&bI zFW$g2DffJfuw`q}?SL~<;pPs0Sj$dIy5~nyb?p=} zU@m*{7^{9K1P-*fwd`ua=m)NWNP63guhL=F#F?8heHhc5F;w5=Y{v9qjGn-lyUdsp z#`IxKi9e=7`Z7jOV9beTOc`VP zGKSc1Gp39&dIDqmnK6+0)n$xfJ)1G*jL{Pq^SUe{_xyg0Vdb^=^T+gKjGn-lMl+^A zWBM^h=}VryKV$R+#{Arj8NitSj2Yn1Gk`IALUrvAxlRT60pMvwYVM^1ybi9ey%79B z@DX!Rz4a+An|~1b!fR3Q`#SAn-c4de(687WhFv&H|?g)k;sb(zgQ=V8y1R zTQZR+6Jyp&r5Bc5k~GD}w@NgV$GV~f%4>wP4K9Ijn^=HP&&j6AC*$;~(f~vn2XT2a z1hypW-q=I@b1L$#u$X%3#U+cmbzqL4z^A0RA+&P_wE55Y;z?asQSXkN@s}%$Xndy+EbYT`P8su&)W70(o%mSgSgF{1vk1~> zZW%jLG+A!-<#hC)DcUAQ-pe|?_Cx?;?V8@|+w9Gbn)Wlz<6-eJu@TiBknuBG))l7PD-9&O2f0-WAt&(Hs^JpZg+ z*^}5H)uCBb1NNr%o$_|GQ#n-8mR-*sw4C^7)oOD76+d4#ed#WORU^)DD?XcaNXQcjT9YS-7t4F2rm|VU{Q#>lmV*lK;7S@4 z^UhNwmblj`d*HT{Nx~l5dp}FlF{~5?4y)ByHc2Q%GsBU?WwVT++>%(XVssngRh1VI$_k~IZBbtW+g>@ zKF*Q)W0vy+nRQsIZhwS%BJstv1G*3%2Jjph^ZwpIdnes%ddC-^8L{fednowv{yw1k zfa(LPw^c9obL1@8@ct4|C7?<`^|9(JJQUn_e<`R^P^F+stonCZ8gdp)cYj|{eL?jF zRch65@lf#E{biuaK$U^&Yt=vMpcKPl8(MI$&DXNADlFT@yqUz&!i)b zGzG}evJI_p$@K9s#NPD!iHwIK@)=fCren`u-IC^$*S!MsqelDIbZlE~h0z~=OGGgR za!8X;N1sYYR%H)Gz{7v*+E5Mm^3=kVNP4ayBd7(XsL@)~1vKrfFy~7qb=@ks*$TwZ z%(i6g`8jVX6*y}k0#^SiN(g54J7a3EfVl=Meo-YCGsIA@>z%n|9%ulbXs)CeXlKb@ zh2}LIeyBt08Y}(lR~r3K&YL3Fzxu80WQKYCnX5;5ixbg1SK2qUb=AI;{eGUlgN%T0 zQv$WQW&Ki2OEGPE{>P2x+KU&6Xc0Xv@{DL^yR(=h2nHBX#%Z?dpWwdf7?V7KTyLW< z3&#rS%Nyjux;H}d^<~KicLr-tx-$iaUPIYPyE5y-Z;jpzH<iSA9uR;JzYO3>I7Y4;*JE3AOLS0u_;(o9}>R9y!IeS!RP zR(hIO#vPC5)ojgw9a2-x>riglT1Iv>T9r zz3 zUoyIZMi9x!8ljH)uRzAxiOgx=&>1;mMct0xbuE#s@!rafWcvvD=sjhZq6f(fbr7lB zHIKCEx9l-AkV1+)70S+jS{M%{cAe(z8PI=A;&-Cw#K~(u>3F)qUbiErdt7IR@%r~MYZ$6V>xL5oa znM-#}JNr>6r$ZY?9x6$b0KhR(Pv6v7MDK5gUx6R zU$@0vx3;u09oc6$+}ewCGrVy3T09YyArLKy4{>crD!Rpvp>wYn$OuLbW2E(?m*Eie z4)n*>LiZ-rEOSX~(LX2_71?D!47yj{fePEv@zT$5dcwJ}FXsZ1i&;0l0E4w>9De_` zr~IPv)xOdmRO=y(MjJ*EhW$^ETUQMHIh#sp_w)#4aPky>H|{zV1sR>UeBml(m{W9OK^!>{MB-Pn4lDA)GG^5$Acd2%5>;|Mt`9oaiQ?tGUvC>`;J zFUi<=4D)D`)FgD)#PJ|FtH11yIzJg{%tSwoyFZ9Dwvv6k(|YiSJj(O4A4=1UiVj#@ zfknHCYI}pMg~OyYocn`!oBHla&g<&rvev@MBasts!+Rn;9+6KW|I+A%dtXU5?kY>k z8-6mmcN_JfV4+OrUyh+u=!T{7M+PwJ3f9^Gea+rBcegt`kbPBTW(3?mDaf zbRG{FjM?tpWJeGUkG?OWy#9EDfG^v9n(W?!_&{V_{a}NDE!!ncb{|1}C}O9+jq5WN zT-h#dvP%T<5hP;OZ#M{-vfa1IE)~RHVIB2N1_4jD%bM)If@p*GtolD01T5JuZ?ek- zv5#0mul{^pCmh-ChtesCc7gzFujj%rW4nKo-A{lWME+6fpso{MY!7I%`wMXY2LPu5 zgcaKrP4)l*9(W&M4L~@tJ+O&vD}bGJO_XHjPTrCKM}nBYo{IeJ1-3-{0^du|3KSiBEDzea5=EgIRns-wMe` zb}cVL<+k%k9+kh&$Q+d`Nk6#_pRKq$rE2R1>ODPqHZbk-1>50moG8bTdO+v)jO%?O zKlZ2K7&H9WGG_OoaqRn%hPIDIZ<}$dkaY&HuI-$VaP}n{s%4N6^#(Sa;bf4RvpVA* z{rzNQB?O+1e%P4pi_Az^5B5p8*G6VPmXbya??RJRB%77C!6n= zYBPj~59vhFXo?~U)lEdtV${5z#6~p9~x#)9g_vmt|!N7|tc_er% znOLjseuc{3m9y`YI~Bp>#jIk9)A@Ux^FKQxk#uyQezmtrXj zXB6YvTKJ?CMua=sO=UUu`18*M?9o>Kr>v1;7AvsZ#ZY&Xmd;zZ?{G1EQr7q<={{*K zs^dhd!BGEgO%pw?IL$zN1MLG;xu0Q+rx{EiFePA={TaUaNrNc?Qwm1; zpJ9w;22%>AFBoNjhBLk`PhZ#87fcx#<$#7YZZeoMFy&yB1sdM?u)&mr=?6x6pka=8 z8%#ei{lO?B6z*v3P_EM-%m6UT4V6V=SG5fQS^-qqq4LPD0IdKz5UBD)Ws;`@9SC#~ zP-Te9B~Jv(;+SXw9Tc$1!-25tpllL^<@3oDd{TTd@X1w%Po{BMsXM}Flh5baWb$Ba z(%AxOxKqm_V^*-Rhu+8`e+OL#k@waD%1&S(*lEG7+{B;1-!uFWJiI;NdGl7hC-((qc>`egqJN$MT z+n60I&QY3rF@FJD5OzMSb4pJ0zQ8=|s2x~uWdUxTA@J5Cl5VWTA0JD9#dA81}jD&LPZuLVKMl4y=JP2?q*1SK*P0T;+ikFL_9zC$!g_jVyG z5s{w2tgWgvM5X404njVbARhzMV%j>TrlA*_zXN|~{+9lUzq%f~(^V0>!jqG1u5`02 z0y&wCu1iKb*~G<7Kb%!H?;S%2zCEE!bxwjGQ*icil{`?Nh7eYbAkAZyXrxI1TEpj;lhfMQHx= zMHrlVlakK&;U633yrr7Iy=;bn7-LQnx01150lDlJ}F= zV;dXW`{3%t6=nC50%jki-0RpOkF`i!4`-iMS9S<5vf)hpEmwA?qaTS5AYz_~gj>}g zEE_mJFy$V7YrLV4^Lgw)%$j*CMWL6Cm{%%M-W!I+hFJ@?%1@*$%mObf7jduZosQx( z*goAEY}K6!n#R#3sfP2w?n;i?mW;h*Etn#!&OMV2it{Si5wPk$$GB9(W%PussYs1! zNuG9Dg;jqju^{hftjAW+1-4H-vNGE4exFBct7{*`%N|!{Ej*lg-1Fb9YqsRAHsfO8 z-@J|vSqTd($cn-W5e`A~YZQ*=RAWoj#-^UvwH+>HE&NX*Rd+6TCc2BWnx&6L*Z4NO zXV(#Wa2N-W$;dIR((keNH{H5&1qPPY+32rxG!N{k&Cjsp*Nd>4Zgn;#`Npwlf$oo6 zgX6Kjz&6d<6nC0AePdVMoBORpnx)(C{-ith&(4AA*4zz^ua}F=SV^nWc&vH6d-QLt z`Ze5}+fX9TKlhxH<_WZ!zM5rT03$&%WOPxUy=+eo{!xAD#LwEOi)bZ>Ou;{Mt5 z%)U=RhlWC>Vfn*Er}Q8+>8~X8Y^#86r9&j&I%R~IJ#U{1v73I4#uj()5+U}ul9Y2G zwf7}^xv2>K0-bxUv~}N0sm9jh(#}f>_d?6A>ll)-#&5S{t=6KMoSs?DI@zj3NB z%D@>>c9_Aj;YfK+Ij>aCGoq}WFUy?lI8OCN88{=#UN$(k9P!D@d1YM*_u(@2k%@lD zdF(k(^+g#tSw2?%?+uPk$Em(31J_SIWj7ieyN*+RQ3kHRILoePKDHgF`l1ZDw1=rZ zA2?(^)fZ*JWhK^*2hPUhR9}<@+3a??;qHiZOHI@7KuAKIDscVN93Oa9j@&avm8o?AV(bX6Tut;kU>U zKZf3^;Lg%B_3st?gs`Fb%}=9zu@yqdgVnh@VMR~J$zyHqki(63Y~P$sw)2A0x5_iS z?$teUXL~{-DYnL)ZH=##+tCdP{N1q^W{u#axf_JueSepGE_$MseN(qWYUrJvHFD1A zd){ikzNK}Gkyl1&tSVQ=`B8st8cAF}J{?~o~u2?(Pd$O)X+R^5$Qv@_1^6t@}T zqcg=lMc++F_Zt7(xU*(d3W}qYJLD|u!Bg><_s4DCa5x^M1s8I1Q(vrx%S7&^@jVk* zkcqvda_3@Ri^!dH!(@>==`l~HW6xL%X26U@?xe9>^!0s7U*Gi=jIAKAEjea)Dz=;b zeTYzQzpJsUPozB_-4zHPYuOjAg`=4!?w%oXr)KdNJ+Z@gGR%1_?MU25gqmd|$-0kH zo4cc|pLv}|>f8oZrQ9n^#EKc_9ME+xOqdx&4;$L7x&sy2ZJXpZg$5yC%P36TlLQgrMr%Z8`Q-TySXM$-iVI@ zv~Ud2<)HH<&QA?m2px0<=&;PWo-;-0fT{!)mO9@6C1MBE5Kv*clL94z2h=c7VafAZ zP$GIj9Stfhdsr!FjsPvf2b7UM>%5O}ob9wZoh zye^E-;CxLr(2x7nWNdfsYb=axt40hM#m~^yp4o?p@;7Ye0Q8Y-x@xMg>8gE+RctGT z2nUO#XbCS)jCDvrSqR4^-Rojpe`_jsz?$C=R%a^(KF*@C8+Vo@7FSfE8yY>fn0|2_43z5U$f7h0s$0EzTxDtSVAe4_v48xL!&xp#x@A58Rd> zvn?Ha!CLSYj~+9s2R>=l-N!g|MNbcWE*U!yJ&+nUMfE^uYvXQQ8`piYufEL3SYtWW z@Cc>RLfz2zmBaBUoCjA9?`Bc^%Him^Bd$i`QyW`VIUFr?IvP41?a}Gz9G&|9JVUR= z^}|gE)eqM>9Y#O=h0~z~`>N`PPukHJ(GMr8ez;y~t|tXiI#1g@YKX#tz!p~#zYnIk zj(9Pc;!5HKFvYdRQDBOziFkm{fmHt+dSXTiP>587AFE{^20})J-;wFqDiMCqWjD(h zXJ7U{sgC5V$^HR8;n`z`R1X!KP3#9X)~x#PLwM}1he(zP08${GEEM|`rZE(o9tg#5 zkjNY2k*86Is;&!*F3r_FdyXKbof1=$8D_sy8&f#29^(0;8|pJe;BFCC2KT6j*&8*3k44L(`K2vrnR63+TXT)Ii~v8;F|&7IKw-xs40F%Nyhp{3^ygir^CoA?yhly<;LN+q zo43+hb|ev*cJ)#6IOb7)i%zHdxNMTWm%S1x>Ddu;t`fwCeBlU?XN0yT8$5hKe8Coovi^-+Dhm zi1}_Y-q|~|9~PrMwRbxo0mJ=GOUTt2?k^E4xZy5Af&-MjKlcc-t$wiwgBD{Q*Q zT_E0DK-GTe2dso7z@3dCPcap211|ns8|XH|upC#_Ck<@E6ADb%^eJ^61Az@{nlMmcx}HBx_gY|9(}Y0+ z)3q#sN)BWxH%+ieOtaaM#6-8F+l}F#aIXM@5g4rGVFcO?V-H(bGNFtYd_s7qS<2lkrFZPFdf3?W&G#ly0_(QR4WMjqJnTE!2g zVdxUT<*ml+-)tpda835)ZLCw-Rd_c$3>I#aO{&}NUfAJHx1#ppzfJ)OOSVgv?1A`cc&e;L3*>ZJwZG;EZrOYu&NMy`?+Ej7E*R$F z9bq00F3iI_!aN*Yn1^?Sc{sQ*5AVq5;mgB3yd$57FAwwZj(i@zJj}y8@_G33Fc0s@ z=i$qJ9^R49!+0$kB2YM@o-|DM+*-hZ46;u?#iCW z{w>lg9^DQds3%r9^cX?rRB^b2 z!~zigQkk8N>uJU{p61k)B$fq|B@i&H1tuVz*S5%p)QW6e3b^Gq60L=^m`06MYyJiN z%zl&qp%2Q~wih5wbs6)&J=ur7DYDc&6LceJwxY7v<3g5Uo$|ju*;hb^&iWgp2%*Rx zFBTf3Ph+&`#Jten*{|Z&PdMwcx65XaDzU3dvL^wQGia^_U+}!v*&{g5cGhM;1KG!& zm$YPp?Q~_gp`gnu5tgzqO9eQ&`PKNVFzt9ZKGX!6|5?tnorQ9h zhqw!gzg(y{b@PEEWVQ^#p*`)qor-QI$BGE;37-;hZPmL?iCzRDdf^s7t(KemQI&AZ zj|tM=YJ#-iB&23yevtOpY#vqA-oK+wCsBKeGmdDG_CLM;j&)r@kao)bdzE38V<7=X z2T|IBF^uv^g9*a41!LHxR65|CAWmB_hDpA`O8^rDY754Q{ih9vC?ylAEf^DOA(k!Y z1fkl3F@Y9$8cYzYEf^DKG1p*%fNjBOki})p6hv$bR6{Jz0vd#D3)GKS>I!1E1*+i{ zpJ6O-*92_~RD&ysmat)!f3Nbxw%JHPhh?Qi+hB>Ks!X)@kSZ^#LW8wORVAIVRbHre z6$eAAJUyYR3SKt6{LdPv9fJ|F`_!K!{ti6L{4G6S{s!>~U_$Xq&Bfyn)3J3|_YkkW zDTvo5+wNtJ*S>DNDzir3_Y_}Y;p(qQG6>86H6DXAjcAViFvxT%yF zZ6!X<`%sc3=R?U5;`698=1{Yc3wzofQ6(%6a)~z844iYk&JP<`9I?l5-p|P zFl*tQPjJ{RTB>!dL>ATw^_plYm~wJ20m~#=m>6P`uOv3Pu8SCAjg}(ob*r^#l#(pb zQj3(J+R$>+{uVR)WyDDvI66++-(n`d#}Mw>28WK5_P3b98PYw);Lvf>{uVPhL%c^B z96CFKN=i5 zPTJpM24~3lW`je=N&8#O;FOT(NVJr|3!bB2wWSiQESt$Au$8xpk~nbSJ#rUgt1x>jVMM&WlOI_s zpl2krVVEDRybKt@%D1ON84Jhm1jq@)vvPuDBVdJB7Q`uMKhIKB|6;?bwll0-{=zEF zUl?K>LJ-c zmw$QeC$)D+i2V=`ChX^En5khulZn;5MY&Hw0>e-KBM55_f|+G5pZTQS8f88y61pUT zAwyDEDz@HQbkR8GmQc;h4MTwWOb#V5NZu`^1M8Vwkic-N!N7PX7bGx9-Yw_Ab|x1j zFi74l7?{pv!dk)!3~w100Lz(Nkif9fU|=|t3lbO}G8ov+fcI;4irZ2192# z{vvydqpC8*x+{P2a=b`h5dJa_wV|a4{<7hB%3u7vg^e5ve>w8^`nU8`^7mikFR9py zV)+V&zesvve!jw*Q^Wk_;Q3ucU?pn5i8gMbCj@+@1HN*E;VYt2L?yu5=Pu6s2jwmc zKSCad^mRH}<_A-U^d*Y#%=(0}`4J zvd%7C=grFdSSmE^4eSM9t506KI;63n#+QAFDZ%=Tmvw}0O4yX@FTT-m4i;B|hT<_j ze`XYwjGMq%c*nYV052}>yeiB=lR6K@V*7jU<^c;Ko>^iF!@WJkbez~p(d2tY4VpkdA&6-hMG`rr|hM2 z!;pUsjG-o!+$lapFpz%@jG-pT?)3AQIwAiW7(n&Gztjo& z*T58Na!H=#FLgrxH82HYTzCdQ9=j9ruYoDlY8BQqI~O1JD%DA_~U(UkL*kGTP*KZsbVm|JNS<%ijX}KUjVz`M-s6*jsSUslD(9 z=}PaXBioabu5>A)Ch!k_T)xt!Y8uq^n*K3#xFe4a<0$zpQ@%+O{H462OIJ(jB|~Qz z4j!Ee$;v;p{G0mL@WHVaDnsO|)3y?JO#$Xs&MvU5#!-&Odc{GPCbNs?Pfgud8Cl?zhOM=#p+P`J>SUIZpMQr*NYkt zlgv3qjR%QOMWPio9u70OqQ*lz--Ppu8V@fU9N)0J@vze1iW(0RpURv?jfWczu9)#~ zHRlvF9?l0|%y{tRdNwWI~}$m(Rc&- z6;E(t?*4Pn`WV7t|EWud7k(VULn^dd7M@VWcED`d z0DDj?LyQXQX8sV5$vXpN*G%n+$Ny8Z9^V#OopD|iJ;dZZpZpCFz6BvB$VfKXH0SZe z^A$t-$aktn@Li6*kz@W2zm>lTTg`zix7mY4d05W>G%YjPFt)1oB;Hp_@*j_gyEl4y z(d*=tc$D=M%njv$|+{#yj3CJ0z{o}1(z-Af_|u`4QW!l+2Nm$Q$w3(MkVyJ2v` zSwBbs*Z*1NkR|U|X>u2l6(9U|%sm2l9GIo{h!)97yUww6U|8p94u9h&GKS4(CAD z0Az15KL?UJ5N+%w=I1~j1|UBN@&;}RKkyXvK*B&h{{!B5j)zovNs!q6q8~`H7?T27 z#qR>Q;{A8&g7otrITAL~Vg8o(`KfHI2q@%F6#h{p|55X_P|w5q0r`)b`)JEQB#c}*6_g_6Qtp>Vc=%2&2qEPUcpE2Q&S7KA zq5M4Y3Vy=7#!e7F0`rHS#6kp0hO`0hj1kI?$5C4T*fHqJYejW0X}V1=mP6RI)g zAE4$TbN%uU9qK69Mfr!`wmTy-`*EdZtpTwody7U8#Ibg~`+wWJ|4~)`?YG|{ER2#L z!qhU(6Y>nd2gc)gkFk^^ZfBG}MqzL8YdI!nC_gw zJ`a&SGD03?3ZcF*h`7UUS~Hp1WQa{-5vHRDY&QjW62Hf80XT1H!ALtCb_4AopS(R-WX=+x6p&Nb_{$UR`nG3jj31KwiXXAjkIO z40+OoGen=zo-xON!r=!P-T2O-@_vTJ8{$5>V$C!A`_Z;^iH?8d(~vF01ahjLS5T zy+V>?X3Y9@?97UPEjYfzn!j11mV>-WNtuYdJ%-Wt#Ww4OqV!~*D313c= zmME{X+;;Y1$BI_pnC&ge_~o+SUoJnqFj@)+`AIBB?(C!ba$y{8s__-#Xg5e;`~(sw z2M2Mq1aT41V%P1IRF;JEWWss+40r79{E|3Yo9%qr<8DkuHxmZ%e|RA6`#lEIp2_Ar znu2Dq=xUh_2g@`>(hY}XVk>K3W5H-}d`|yPOFVnBfiF1I1jU>D=C81U{7vyX=cO;- zjWMt3%QcICC~9eBL(lQm}IT2%*0k%3(gJ*^DAVL zL73MvF4K_m2y;#Pv?PRi0HwEw>}6}&56M10Qi;&ZBKu*l!Zfmh+}go2RD=rs3>8YH zm<$!D(4?r82LWk4kRpPEc=n?CDWQ0FFM*l3vTy=3(e2IwsPGpW=010W?S-?ij7MK0 zMJ3@@+~bF{Yf>4x9zi&}mnJ8h{$y&IaQ1FV%%YrwHR0@qSukc= zHK7bl5YBEegtKct8JHlP-Czi3*K{&4K{&g?cquBHO?Hq}<|LMxm&%-m3VnHNs8QnC zSt93@$P($3Zs?zhH3~JZ$!=GQ6@i(RLIT#p8;R6bqO|I+=OxBQSbR&gYJyO_LH_F=N!0%P1Hq>?4@C%5iZEvPVbPkKuL zWSjB!Tzbn6kL*cradE4AQh7cnzgES*q zq>`vGlyPLWd9?prS~J!Lpzs%?{anVH(Qv*BQaQvByyTXrDLdp#<@P+O z+-{`uuX(X)FS%u;?X;^@9*ORbR2CK5R0!;`sDbbUyuRJ#vgEgjxK_EG%WrA-ijVvB#InvY$p@hfhEndG~c>JeR;ijt&Vh=Dv>PzD#Bd_eEw72y~}U%uQ0i!7Kk@Sd^B3pj^3E z_~C^|hcHf(NHQerd(|HZL4F|->#!CjI9sbfv<`=FQ2in4PV3#2h@c*gL$m`SmTp>~ zri2uIxWz=|eA*xgrJGjLl#q%Kx0rC8{suuL-L%rCM2R3wEY7>!0aFo3H?40|LTWwS zVz$MeGYI17rj<1%`U=8C;fQ0AGYF%bR^F75Di2Fcn6Y@uK@deZtzT23To5M4*fj`( z=%)2=O7s(i2GC!_XyWIl4QNXA7obKKUkZ@$xoH(mi2(xCu;NJoiJqG_uqja?K#eJm z0VH^C+MuSyKmlq%aTP!|y{1`Bi9rH1QS<<)<*-Df=o1zU^!u6)LNK~1<4|r(9S7t^ zNNI_S0YUV-MhlluaxXX$2SbYqqi&!MfSdJfM82_bfLeIl|xsOPX=Ob`j37rR&MIh19$kPfeYhIuVvKbE&V zbM+iDF>*JapLqxc#Aegg#K`>maYwNe`lXEJp!+q^nLnku4PpWS0L@Uw%uK?HJNS2eQrTYA5RbsCa*)7d?qWnN`nIz(J?8mL>_w}7mnhg2X;|C1 zuTSL3=r&XL2ytpHBhGfLuU$7AN!0DRJi~Vb87kEoSP_fW;5s7N&_5k}zV%rN*3WXA|a3fs5n;r8OqWngK!#A5Gn=kHd0`;!LYSDjVK5e19uxSaG1fcu{whU^{MFB?l(GL`A|G z5v`{zDJCP0<~rG(`URu{Uni%!#zm7&L}BDok;^7@V$9mOvrd@*iGRF7m_Ov`B@P~Y zuK+|W+^?9<(rZ1y(7z}kEDt0OLVeOnm~@!UhcE zgZpKE2KD)VnM%KMNTuhNsTAjEC5yb$bB0OB{W&ua7n~nV;{TtcK#BLcW`TzZL=9kI;AFX-%{if%vFO&aYK9lBi{q5?0)@_Z} zG6)srCHqCT`}B&soiy`MZewVmbBSb8D@4>;Kaf> zdMFL1-$D3BkN%rrUnS?iDcDze%IvG)zj-R`zhPg60ww=P@2l`Fg5s3j3Y63ovX9Y* zec-=I3HxBhWH%MEkF#>@V`3irh$;Ipa@k9sehlvgfgmi=mBLDf2`f1w=P?PF5;-DN z@*~7bjvPZ-+9RZxh!zrAnLPnNj&8cEi$pS0sVi{rCKwEq%T9c=C>t|IYjM4I4$ZFK ziNKq2reEws)UaVPLU#SLuWpyq)?`0g%bcW|egd+V<7LlCIxHm_o8%(HvY%SVv73Y= z<~&lAKRv|vNSWs_o}a;ZehdQ7k9m;Fnf>rc9g?UXTw6x{m1@n6T^Zr$iTu>{t^S|( z?9&7hB*fJt^$|Qzk3=;k+*>sNN?kn?KE3yawDT;<JZ7hbtUM&s?pK0NiN!V(C*L z0k{@O0B-dAHx-VXXRcOA0B*GVbqdGJGgnI_0MDzD0NksQur#km0&uTJ!cwEx3pcLo zz{NAytC6r&wR)+M0L-hAur#QV0L-hAur#QV0L-hAuvGPVsgVH8tC6rYsF487tC6tO z_wLN4M#56RMnam1nYfCHaaC$KOQ@2k!DBg(sA)uRe~ZQQVc4XoAL>})bBGqtD`zg@0Y&}8QQ`RU!Dp76T@5mJ2vaLNTRrAi6>$!=WI+k zuf&~Ky>gwe7+XBypy<;PZ9m#QC2A=VXh&M?*tS_mbKczb65O<33o0k1TJ#UtQV;oe z=)uf>Lc9v8XO`vlZ?tX<5q3?{8bPL(Pxl%@l{0C8D>Z^l1QwzRj z1QwzR?kJBSc3|K(Nw`yF3u4MMaCatREmr;4vCNbo`}S>9q-laUp~UGf^>5CJEFP5o z0ksQ6OzeJ2)@4Cyko(ZMY*WuB={%d<`w~T+Hr2f@HJwI!ZW&?J_FcuyB`^)5{Ecx=pc!L;ylmS<&i1gtOhS?ZHcbz z55H#??Xmmi2fq8w9$pvY<7eCCA^ z>4N$;_jqf%puEjJ-kR>f_ZSoxkGuEet?7GmYg%<)R_!q7WnIz3NIDv8%8Eyy*L9lt z4rOkLa+O+U0ys7eKzKN{p4N;ZXNzBP3BXhiEh}I142GY~FyrD8&U}g{S~?!O$8{KV1~14Qf6}y_?rI8iLup zn%m74rTJl_p`Q=eHMHV+O3J?8)AT+2P&6+2S%qq*O71{Jj7RM9SFQyDM~O z6qRbu9`O$_grX)jvSz)t@NWdnq+;u=`9J4J_ILb`eKWIVr-gD-+@egCVyXnT(pRxL zWD`b*C{(K8yvKHt?L3t|ljvRve5uS@sAT5XZffDkmPiiWu_dn0rBSMSXJQHpChPiG(2c<@mEkKfws zp6o)*wHCFDv+2^OzDq{!O#OJtki6*M8BEMoT>HF8g$$s=C z=QEjU()uTM?}C{xlNg*wK(pDgzasAZw(30YMgG?Cm-_CvRZZXrZZ+$sA2D`DA2Cwn zGtM@~X~VcG@&OxPH;oNDE|XCAR%otLYz}DW*)Tvn&684K>j{{+Y1 zV>g?>!(Zg@a(Qj7QDa}u7%Ue{MWA=*o4p!FQo~I{<6}`8(0oGfYK?=3A*!^K%Th{YN%I9(O zGjaZ#ZCMALz`T;ddpO00NKMUE{2_r?q7;Ay6@QZM<3cPRQUm@IlGqv42t{!)EYmN00uRF0BVV!7{H*!4?s=WtpXTS_yMT(Km@>lkLTC- zkt#G^KUQLE34IZ@)JxU%`my5LByzzk@*n2jt$?a;g~T<7wkT0Mk9joxoORP0M*1{;y3+KRjgT|VuSKK| zjDAxndKZ@%!P_`_+c!+=gEQ5qWRsk;5jgl``!k%s!w=!_Ka`S3!q+Fc6@3UWI3eCJ zEIy;RkTkYFLYW+oBdq!_N)9f$IPYm=!J{W=F3y%@^rgmkAmnz_iuLQzG0aqQ;e?K} zL%8iF!Q=i03rPDb<~HzzB{}uxIUD+1Nv6lXdsfJS%&WK#y5@|Ou zHW7Pb4moBehc-|$jlQdUG5xuIP`3nj#$KG%EfHQOSuO37illv4y|#+wp{8<_B`i<&t`6 zxq2lhYWm^D%BiH~YQk*Er=?_pY{`>oN6XcO*^(#w-mpB`k_SU$xrEu02V;1iY{`S6 zDn#v{2mOL24^en}u z2673rB@fiEZzkusHtxT1flL#D`88XRvKi!DgQHlR?EFUt2y?keO3+oV+%@( zl@w=xpS(o#noGSttDoYKg+B0d^SAVB`CGvMddz43Z}nH5UL`!Oo;S=p{+Rx%AF{D) z{CS=l^eB2t5^ByxHlu%-&Z>pvttyGn0GyYx{Th|r&tswD-1xF8Cj&T0Is2jek&@IX zsciIvH8kIKQ9jMX1%<qvcdD!`LLUg%gZXMO#NN$@JJ?HAMg4f;>%rvGiRI z`m5d~!3^-gEUh%?uS%vdjh8jQcm#UnCm2HpO|1JGhQAQF5~_a}R}1`i{p|D@U73`uMQMlCWJ@PX2JYZyEE-&Bi+hj|vo(GIb+%8W}=?~5*YqF(O&jUsxHW>tY z`F44eEtPs6Faq&U27%pZ_iM7HP|pMT@(@J-CR^(CJfPyx%geV1G}%(7=K+<5US7Uk z(PT@No(EJIdU^Twz$ROY^gN)lu!h?sFW*%41gN6W%geW|CR^I5KA@72ynGu;_<%74 zy7e8$9th;&cF!E}`l#;KKB@>r>|rAem2SL2QzKpa z>zld@C06TyenLrYo<^1Gd`;H z$~q_Lx>GHd+vw~(?!GYp&tgRa9b_{45qY~++4OF#p77bL-^nzG2+Bl1d*iMYM zZVgmFMTeqdX-K(5;KMXzrN=H=*AD);Shu@)b-Y!!{rS><3)K-`3)K$LPdw1Z> zJ_j{a<-G9b9XQ?SAPc9R5bIDURTE@=F>r#cL!DGjm~|33Vb-BeswU8SH1P0d2lMM@ z2Rj)An{t%f?C|s%FAHZxBDz)gJP6Fcf@MR|RZrW4cqQI?gzdboTX`cUyXhhLQ{Of_ zcc)Q+IGlwe$71yiA1^=H$?NX{hT8lP`z~+)j?f>oADytGcHVyU0m;9?{wWB!PJ{xk zwVx{8es=ZTPjwy6d1KFgd_Pq}MNDSFGJHF!h7;(08uU|r1n0aFSy`{2YTN8e;*GWI z<5e0LDupdpnig_W1uPY9k2_S*+XGpwqKfBnliYY;b{;9&pgxkX)98t>MGv{@h!ZLp z&~c}7;(`vMrW^Q zt;ur-@!D6@G<%P;rSTmM_u5mi@IJKWZ%2nE;3`5}Z7z*lJJxJ1ycOqA5S@7?(V5N3 z=yn8}L}xm+Q)?PV&)A|tV?nVC$@alvZl5;BT5t(xC*7;4IFD`UMQzWe88~5=>!&-1 zS#>`kIy}>GNr^UQWp823u2k$TYr#}cmZjVoCg10LGmdWuH z#!Zk4tAKzq@rv`eaVYTai#wer+-Y9%`)+Elanr0m%mYboTh+EDB$ z!jsYs-{imknb^~{ud-rHKqmW_{k$lYG2ENzqh6s4U){9ox1r#KYSK)DbaVY$3rf=9 zt+D3+ff-F)bt%_1an+e#l55dpJ&bbuF^$>|+(;hr7F9)muEcu-|Ig9y8PM+wa)|Y=g z3C2cul{}3SrED+UI+Um3rOWq1bN0inJ9r2Cafh35Yp)mNuX)Ew_j{_kk}hu=laVej z69h9~~O9|&C_E7&!2Nl`u&C&SVrXS=|pT-v( z8t~V~^LxhQ^B&&{%xX9W7F>S zgA592RI3iF>)#|Td2-n#ZRE-2wK}wheDk1R;%Mmy**g*IWBNfN)eHJTR%<`V-qU3W z%~MutM!csFo9Jup2bn1B2l)iC2RVb1pl6LW!?SDh;l(wZy_nzuk-L(|OZvuBlCdQw zZ;IG0TU^PK&5J}eE!Xcy(FnI(Pe%56_kr$_%jcbl{NI-+|BH%#5_*wAt(WD=edQay z4r4Ri^j&XDJ2YKi&8-AN{u+e*Y8=1Fc@^^4A>^xPZ0#oGk5?fdvliUJ+1hpeV(5mn ztZR*c->k;!jSzCGVFt#kh=01SQ%z&Fwcy(x7YGFW48~;|koF?rofe9rWavy?-+@vd z<^%EQE1rlq(!8&=@Uu$uzBKP!STkn|>?M%qO?lGXYrbym)j8ZAYOXKMjlGHi`!Cq5 z|6>1j!Y7S94;rvj%LsYS4sSr~EA1$@Q4{jKuvkt`o_k4W|6fh*4a@VQo!7sfPw$>o zpLs^QAz>u?n%Xy|Sk7xI_Wfcxg!KFwACn~g)%}hi$ibBOk651^wQf=W8Ox2NidRg2 z*5G(U|9C9Z%cLW487)LHdgh@-ZuBP|!NWj#tF;ovFl`Jg6*A)0nO3Mvo(&IbgQ>Ou}Y1B%#gBFAnZX<}G{)U;ocQ-aug2}??!n)8~QfWM_r? zwNjK&@;YvP$;0QRa8Oe)NZ~kKM_y&Tc>${C-K=tjq_Hfem z-5QEc(zW;mf~4!a)gwUCwRi-Ar0csi@{y!#@dpG+*LQ2+BT3id4G5C1@7B0SlCH%U z5F}mSt)2ic>H2Qt2w;ad?!2jT1G9c8`nB-_jPx7%Nx2{~=TAJF4FutrC`oUP=~BH& z)3EKvw@OTiuM9hO9K(!%PkaDhlp}r&O(?jt^Z{FW(VqPrQF(E9ipe`_Hx*{S zgCN7Fq$^#OeD#N^&jjJ~qA4x&QikfGexJ)r31{Cg;q0#`uzfY}NV{APL2^l#OMIz* zbJh`7{VD3E%B3Iq*+<71c#wYNXCFzI1!f7-kNoT-jn=8_2-1)I?4zv^C*yI%oZ70y7qR~I-nW;%%8@>7uR)%8t{ znGT}2{2Zivb$L@`CY*$HudZ%t%ybZ_2o^x`R?`L~| zwx7!4mQJlCG^mW9;a+umC=uRe5UzwfpOV$Y3T7AglBg71rPNZw`7_+!XaGd!D9R;K zypwcs&*QM%;{Lqs$>Lt9!#zVL>2DssW%7@3*hsR7aA9J4@Y-q@Nk~oLjlG)ZNHL-<3N{-HlB2UAeQ=-N;1# z%AKX|Mh5d&?ksgTGMK+|XQ{i9!TgmwYxIVgv=}z&bN>L=B{q&B~PpOL*#Q{(_w%!j(|fJZ^mU0~hBl*va3QJz>i~*5RHZxB3I) zexw6|Ju8kF4MaEVw_l@GS<)_ zN0O@y?|#kvN`F;}?tWDCvs@_qcBWBgybG~P@}kLq<{!O?qeUGQZPWWU33{Reih}7q z#147Z-coQWxq$Rn1%dGX3A_#i!H)x<&iQfYd9PF?4>9Dgi|QF9A|COc;-rrALp^9= z`W&W&xA*5~0=?{-*zDNVv8!Uv^H*P~ap8nCrWU-)rTRvPm%c}Q_(%CIoMh>A_T%UXLSM@o>XeC6W2cnX3m{#r;yk+ss}`VwJ{!yc%2 z5x8;Rkc!jC{})3lLgMI^=4hr5QWq4M7g7Pcmv9GK9rOvQkdzxHXq?_Bq++z0pw&UF zcSyy%ydut^)j^+-ia(i&{vj3X%|!o@il3T^{vj3jmr)q~at7dWTd*u}6Bv7p5fcXn=SM#)EhYqLK{y z0oZ{G;>T0SC|c^{_yYNz{FM1UZB#_}$BpAR&^r%sK$ie^!Zx5riKkc}#8bS(4&gNa zP&`E!?t{Qy`=EY{I733w)lKLD6nYH#zmV}8T&O*Zho#X`*6Iv*v(Wt=O zXO#qj#69SS1oEP?w!r;Gbu~eTKVm!xD*P$ieFKSiFveRr?Ik_Vo2D5Md4a@bS^G1Y z8Qv?Nc#Bkh%*GQFASm&~XF$8$hKVOGBZ^q#i3um%W^yA2h$k-oyZRq$JaLg#{~qtk z*xLifbG;*EI&eH!-#Bw&F&d{ys9N)<uCr+v+Z6!t{iCRF#&^*-iu&*B`*;q>xU#mJ z3{S!ppU#V-7JoZ5jE$Y{6GeT2nZd?R_lcsOWM;6j(|w|-hng8|>~xbH1z{2grU zbe|~d?PdlWJKZOW`cX53jh*fjMg4%8!NyMailVj}8q5rKcDi>YwcqzK-8+)n@B5hU z9ZBu?hf4R3r1twhrh7+H)AupmE0Wr*UvyQx>##EuKgLE{IzK8a%e8(~cBkni+Wb)h zG35~Dd)9cL*FE#8{CMig+u0SGK4qF=c^{Eq@wfkNe)kXdf1E%Kn;gIU>-`^p$kG>n zH;~_LEeTP7zuyf>e;ggi_}wNW<@5b+xq7u95D!-Tf58979er8uXh8p4jnLQsU;mo~ zbote)4@qp-2UV*!{WO&yHh0k0>d9w*5nhry6xbR$Sl@x2qM$bqYr8b;)l*`?jrYDMXiB3kNe5m^| zOQrb#x-mf&#F+=`Tdmb&`bN!s3su%#D;N!}L-Fza5!EnE4*Lqf68(31i>UXw8^F&< znfAlW)U~eBpay1>NHYVmWsB(Y9g$mqM_-Cde7`!iKLtjse^aW^Yg>w$ZsE5~TZ$b) z5nZB%UW{xrT`3egay4*9ZjsW!5=d}-g+`^2s>`htvm)3K(?v`d z7^izy9%#t0f`&koy+K1J6f|U_H)zO&8q`em1`U}|(2$AVpdk|q8d6xOH)zO&f`&}= z1`U}|(2$AVpdk|q8Zwas4H;C>kii^i$e@CT4CX*X1{E}9Fb5hksGuQ(Ik=la1q~TA zpdkYUb(#W0fQC|aVUm)Yp|u>q{V!pRmhf%`4`ZZuQl!n)ulO1hQu`PJ-Ah)zlB6KO zK;J%+sL=OmwH%j)zQ--my`CZG=x=}`}j%4QpMEU+42n>~-!C z3~(~^EWqL@Fn6V!-hN*K{Ns^9L6y6#-&gX8aVwjNzv=h=8jSaDI5-S*n|&cE3B;CW zPKr#h8l)(UjFd@|#3Lu&AY&W+F-iqm>n6m?PO`q)YOUKY#fZb(ypQmNdY}FLvX_a( z{4e=s&*x0_%g&KY4B(fo!pdWO0KY6Iv&;eA@SAPaIf3*5RHZ^Z51k9+AI7#!AoRseW*r_CMsGK!D>p@P16OmR?Q+ z1Xk8*@JaCrK;xf5Fz00@S&j4YBC4|>$%c0Y{}A5^6PU!7I09xOZ1WreCv$$D1K%cem7)b+di%F_2hl$@u*`d3Eq$c7@$4s#w_FjeyaGn0q??Wev{6htTpGM z4;v`(#zlU`i6l2o?NT9tQR_aUN!ikpZi@Ufm8E~)=Na??!7AImGDJ-zhR>eMFu#+( zZhlX@pWoP{{GkGa2!34GttqT(hhC<*IenUU0S9Wo%`>b9PdpS(E1f%>?X-1Xf?dH1 zPKNhr=hRo=@R5W&C$!}EwlwjS60QXHd9sX`st{bxpDJ*kF#u#t+I5;7pTiw9aj1EJ zkkymLL;66={woq>S>BB#w!4c%{u|RuuDk(#B|rGEc_l#0+G#b5El+16z?NsQ4Yph* zcVzoTDsE?t_jB4xJrk37|@UPYVe zjn3{Yz6^>=y$ZpXC0+e(0{&l1xSuigD#WgvDn;@6kO#z>G%??q^!x`nlQ_OO6(Y>C zbh{Q|;iM&A_p95lBQO75?VOXx3MJ+)fDR-6V#kTe~g;bUYEw!m= zK}+rZ{p(s}TWT-nbVXw?lqP5OlJ-6$v|%WGsm*E#{7j5#SP125j9MJ{nV8VRv`iSa zIPfzup_OTwFluq&XJSH2(=uVy;=s?ugx02I!X!eimp4$~MHI*kEl$gXN!|UanZN}z zL#xv=VN!PkKNAyLo|Xws-BmvmgIb%GK~3FNKNEvmoR+~{9Sa7vIxT~mx~qOB2DLmb zgPOXlekKOBJ}rZqx_c4>*&03-qm@I_M@DhiVw3ky@I1&yNHkv@m}^7u=A_du+HbK0 zj1&XVqe6>!Q;x{uuDFVBJ^M4KOWu2j$$OuCEqk)ue_(#c{fu8@zxKghsk>?XOqAWU zo>M=Q;;sYay-(v-TauJT*S^|YQ=!9z6ED6hD_q{o(KnBZU+Iz*IkqhLZ4z+nyw}nA z8djV{8t=D59X9xb)IW5H6ezbprzl)x+ekN&{B^ER5cz27ycWxv@xKiTrNDc)UA2& z-w0^wFuoB(OH0W|f|fP}^{~2#OIfOxCmG&36O)5^M@xhJ_?(H!1aT=#gZ%iMiOB?U zDN6%qZqCGHg1D5WL4LfUC5cO60$N%c^2h!1)4~Zbz>(kLm>RNERR32e}j9o}Y#dQuUb`5SxrFZ}%X){umw z*ei4m)^$j-5t&AvXZUhT@y*!kVcyqK(zvf+-(b{!|u$`hIsp-tJ0&Q$nyXJSBb zp8zNXB9PP7o6 zBdw-Sah*(AEK+8zn!;w%y%Ue!F#JkyT1}PmH}aeJl5$|0_kIt}LEItISvw`|AGQYo zs5J6y=t0{wjbCzUM#;$g*2;@H&p0_QwHgIgBM0F?eVY|qeQ7q`z)vx%;g1I{4(Z4# zU93!sk&lCZpD!46bSMita+ZOwXh+U6A(k@UW|^NJkMEuCMFNzx_&DeX_H+0f{W$59 zO{vhGxqh6veqxC*@v_p7^U?oT6O8y0($DSVEXh!iV03%Xp?9_fQ5pLZ{MNK_r76r3 z^y@xtTx-YYC!^4b;Aurp;nw08k#3%xcZr^NN-8rb=;qnE$>$rIc(8=Fen%J4*020{ zStSmSBmjz%JHVoM(*GU4xQxUY-c5D%={);^EjWsSa!d&FePUd!FY-Q^V#oPw3 zJ4hNbDZubrq2ejLx+%0W(1O?bR2-M+74c`#Jv*p#(M&Zk=?h4mi>DZUU(y5z?B}%2 zITmwprA_;}b1W}!Xk#o)Kb*EockE*U3EyRM1S4 z)X1lM&VPefm&|+u0cJ;z3AFrn=X#&+>6%H!Q2M14#T^f~t$2GcBparn4L(HgAwii< z+)!Sh+~^|mhfYc4y1tk`xwhsHokF%^pFX*hw102EKDlRc@x1%ZMwJPWfQi5o<(1|k zXxD*L<&HPzGva89_XHE*(bph2n?;h>?6SdZ%7wYRw8~rH_{L%mYbfHx`U0%5!vz)if=K=nZo1(74dhaXLKQnyW z$Na|j#<_=O(~nLqI;I)Z(# zJ%25^2HgeH?mQx+Dnr0T5Ahg~@ruMpX`yP5{P;xWvp*VR9a^QI&&b##j+0 zW`+ur^N5Y2WhXPnj4*NU$EYwlkJzZnyuJb|3}`IC46#v_(*8HEtpImGg~@ruMpfo@ z75F{R$qdEZ<`El3^H0t(-l~Vp3>7Bl5gS!0O&|T90;|moRVL>V8&#QWDNw_es4_VZ zPF*RDA5BMr>lj65&LcL8_Mwcb*Q$b1s!Yx!HmY)zjH=s;dL+lFGC7afsLIhYs(!0e z7y;+@y9rcUdFv0KHuziga`)y>l8j^;14qH1Ransu3)7=4=~6Bg*zW8nz&WIafEXlE zlav&dt^-kJ!BIJ8^3OOX2YLT**%Qe7*E-xYl|^K>$FlnrP9CIg9xXEi*GPzv&r*5kgq42QF3%iZav z-OEF<)fakk;lj>l@2f0ycZQn9K_i!IIXmvIQO~RP$3RF?emYeWmEt1e^(#XkNFLr5 ztAE8xxHgMA*U7ZZYC4nisrGF(%w{77#FTbt2Fsc^9;DSt;nbOCS;yT6%(6CVby7HW zrdig^m}Na)m$ej5ooSXeGiF)8uZv0wr_MCXni*przh-7w)-!`;-K&>r7t4BPu&jIa zGL^!qGlON_tCy)1PMsMn>ufJmDV#bpSkl>ErcyX{X0W8Qy-cNW>datCXM34S;nbPI zlFs%rmBOiXiZx5x?`6tJu9qoG8l9_5z@wH9`_gB>lyMxepR0pJ)^f9w%M#>(vPBM z9Y?krFYI%W#dg>!HRIywgZ?sR^{|FFz+W+%Q=zR1EYdLDRX5SwG!9>f|4D*b5dSxD z{})L$r~iwTxRIKo&VKJ4l#d&0{HzV6i(%dj#k^Gz->8)dPhW!o|N%2B-q?*xt|$R+7` z9@!X(_Xd`EfvHIS#H46Jf%mUlj~%~T{Vt{Nd9~~a-?8i8DzYAF8p;8-(|yCL=Gu#I zAnbPWs7zAR4YeA&Vxqrg*FRZAziEv(UUj_oB)O@M6L~zMt!0YqmNxS*dTi{f ztFN@3L-vA$^pUdNvp(fNP{$82jI=nmtl}1H%{TZXnY;C`qglD%D=0XAJot-nZRC_3 z_-(lvQTxL?9~;COdebSlNshk3xknz$e*|}NS6;4W?v z>6m6m4mo32EO|Yi`B!m=ZU*_GFxmTtB690vkHj}0~Y#9mG zV5sdWce&h^SHp+S=}Q#eul;E7(iabJ)30Wp?GbtBfj(%rH3gqwJyE$?eKP3Zz+1&d zSAd~V|3o3@@lwW?)Sk=-!0W|sFRvHhA)a|eZr#o_$%7=FeLtxIb3?Y5bIw+vt>Cgx7Gp7S&i58u2W7|!sSb`+*>*ZDW*CYd<?!6V3utdJ*ezWK+w&L1IhYN`~2y*K+i3-C7ueZ7>0Z zek*-Yj!*{w2B5$rbgaCUdJ8YNSm8qQI+}|k2W#4;_N3EM|H}KZ(E9L(NJs7LFzM)Li~UYcN-lWvaX4y0dOpjo_gP;@+P=|R%Zy^nh!Jy_bg+wQOWx(CvQ8xm3__g8)0 z1L+|fXy(pDU-v+IsPuAYqOW@(Jxp4;Gtt*QkS>x=?o9M`52R0!M(#}Xbq}P6OCNV8 z^4$aJ5z@w;!F=~XdZcu5XE5JAkRByX+!@Sw52Qy+4|fLh-2-V$TDUV9w9AkzhhJ%x zT-{5<38;ldrN`rum#zA9pxrDXKaK4l zbH`p}>eCAW6Mmq|MJh9`B<9>FSG&v|dn%hk%huZKO1N}y0!@WG2PV)IRjR372!Vc) zzas>i#QSJ9&Vr)|fyU^@nkCR%py7Z(e>(tyg4Zj7+V#gLWLXI%Stt-Q(F`-NP%851Q!Er_2r!$0g;J46pkkpgLx9-~ER>2o z3VqGYkd!n73#B5DL^qll0?cM$p;YA2=+Dgz0cJC>P%83>Q~);q4oOKfuuv*;RI05V z7{x-V$dTznjwQHk1{O+1j!rf8l2I%a06Lyq2~|tMGm3>$k)za)aRmy0%)mmy`yG%f zg+FElq{@VJ@LP(PhJbqG$|K!KT;gI&1El^T>k^k;XqDDBnv10CoiR0Ntnus$p(YT2 zR7oD{_jagYm*G)s%*Z2TJ zGFIaz(cyy*R}T_!84taw^Z=>EoF{}lo?zhuJ1MycjUd>bFoLZ{*7-k7D-r%mj#eg1 zT2NnFdEzXgmACE1SQ{n#PcrfpW! z@*?rm47QrS45ei+jeXXGEoqsEiIMDs4n%bU;yQBPyc{GrH!bJ_7jyhqLRFvKBCe_R7U%WO2E<$(O#m`&WXzC-zO^R znvxTh+6HN0QF%(2ipm0CRDOtE5tR$f?~s2ozkiRYq-hF{SEMAO5&`&j5>aWL_!bT6 z$iYd4T9P1mGSQI^i*Ad=s6Cw+T(OZ13@u_4%=@s=Zk8Wq zh391q3waC7j3Oyw0OA}nI;gdFzWScU96a+nJUZ&&(_pf^equR;FsE0G`VrCp=$p9^%>R4!&FA0grEl(FSBU6z;#>J0@-g%K zw~5HN4Cy~1L}c{MH^nlHfW{_i{-+U`#xmSVS7reZRt(%RC9nuZK!MIf+M9iFZfI zLTN3EbgQyO!QF{-7uWb`Y==w&px5FI^6(#%LG3Z>qfJ6PZ>#OuRxix{AEw zQ4Ff0lKVLF#;f#u@Yc^}US9NhavX0z5xjkQ+@M|cj#M}5ZyVQv(&G^pdHT? zJ|K&6Dq)zZ!Kg#L{4yKR(FEc1NB9JhxO5tbufe%}92zz^fn!N9!#xH~(< z7myB_-~hoFc%KZ02b}}4%$T~l@yMQCQ`RRRF?Fc76hR{oHeX>Ag-^YIlg}m(D`U2f^)bxk%?~J4 zawsEotU?61$=5Q?2ZS5ypJ2EX5K8#4vrhN(0U8e-K8*b}bEgB>?%q z4`DQ@1);^8F|kY}vWZCU1zHpuGoIgQ(m)f`*j$u*>kM-R5`5 ztLFD_3z2^Wv{*b|G_u}+#Urws1F6!7Ryy|xGlBi2#L$veo#o;xCB7(p_~Q5e!jr(l zh3QO%CE&}w^}K&&ko+dN%#UR{pL;Mkc{_vrp0-CPJNh=06?!V}97>thwDU)Ze5BKy za^6U~XEmk58{+OYA@XjLk=@*!(`_~V8CptaLhfV2Nu0&P&*4uU(;_`}j}rn|oVg?x zxu|6E!|BLdOU8?%V(KD`;JkRr@v;g6BA-7OABFRpANq{*I33=rj$^4S06e?*;}rTD zLs)gI9U(W^TKS)(!;?ZuDCD(gVBb*zBC&cr0FiQD4bgfEE4+$?o|d{!;SVO-G41@> zL|5l{p!*dAiWQ;;71$I>6NXQ=tt*s&8kt~zj8J0z|l3zcsYw|j_5j9QR-Dg$M|3)V}{Y8=$?w#k^ zgYl0W6g)FA;S7(vU(c84iO4f`BjcF~2`LlyKE^(x0dL<%Y!vsFQ0mN7$y6068eoP< zcMhc8u@6dA%bZx|#5zJE_c%Li?w7xU5Zl*zzX}2GQ2>anfVc~QEf#(*8QE{d1oCtK zlJThvF~63`B8yUfUl!Tz*ze*CJrgr6_FIiDq&=}Tc;3TvN_PxdWhdpWvMY&8kWv^; z%T7iqd$TaQ`l|qdR|!6P(L_5l9Q#QyQ&yVIN^6r!Ba-*%&S6Q-&n_v{HL%Cd3YkP! zvG$S6tMOMEkxWR1yIRR+LS(bm^y?3?o>7e=r(3Ij!Zxa&`_&MVsUW&&+viI>b* z3Zl;nNVrYx&5XhuoMBdjRNkliiPd=LL|Ldy3X>VBA+p~t-55m8+7V#EGC~nKFB#fO zkcajY8Ls_ASgxOclPB(?_(!^+t~#_4VQf3k%d3Rl?zifPap4>T5*9Hh>CW!q^;Pub zW$K3a$U>4Oozht5(YB0u(~|B*Ycs>*gkG+En;40hu#|oB7Up=}?ANzgtJB=sfi`05 z_-}|QSM^_cj#z;7J3t|xPY4UrAyqOTH?k;P^M&NbtFZ-xX=_*(#>pJtOrbS6L-8@e!pSNXa3E37do%hVg8QBPYg zc!sJY!qdB)9@dgO_Loji%Ns@EL#VRuv~NqqE*^DM9CwWg&n+)(D=*A{yr1c$iOwxA zYAY|wpIoDpCOEfzWLtTDaPDGvjfu@IFK#O@&YiX7I(Ll;%`G3>Rz5aw;xc#5MAkGx zuoK(LC+1Cj!d+tmbIVU{D?c@FVhqPla@S~FZuumca5n2lfPE-qc6OM)Qg1*M3q#=@ z;RCCSyv-7qD=Xa|Tq`yVQ9MYEROmfBvca}0_ov+1-Dy^P<7E(5GV?iqrS9srQny$Q z`&e&gr6wcqS*y}qHXV7#YK(nYT-&45$}l&jN?T-oZ=xquI?`e_te*tDxRK@UoyrNZ z@S#*>yU`XQpgBv%8P>oeFZVga<)iaBgNet7GhklO>zcJ4gyN5YHMIDA{Xakxl{K6R z_s_BhoGCNhLRbTy2w@E*-Z<4=q8|**8s;l&$Z=~S?l~z$95IeIIchbAxMNO%)vzw0 z?u&)vX9z^k(9;VGuylWpx({0olejY#K|7q*mc4wHtHwaxDm9OC38n6<3#_JZu(Cq! zO5soED14e;9BL-+sY+;D#Dq=YvQN;-%y`Kv40rk8ADW(aUuHDIZmP3+Nm_%&jf~jT$n(T7lR0KdXxvu@p-_UEDx9?f7s^%bN&GyPzetx z@_7K=sd7Aks5!#~;5!LSGk4^}Y{3UueX&SaxjXHCI020hl@r`+I66A-j3B7C880w4>`Xl;WNASkafoZtvXdKyk3t2%{~Ah)V%Ms79y zjA^r~laU^4)rSL4upIw2oFJK5jBMX*mmU;a*xo{^5prD`KE-UPJsH~J?f3oews+Sn z=tv|wKwTq~kteOj{aB&t%xtm%ZYK+1yIp!DDNz6i$qNZCMuvWPqxU1OA!kCH=FC%| zeK|9oiE`$SROyB^>RH1#IkR+=oVyj46xt}~ehoJOY;X>7WSGunvi_tF+TkUzp-R|L z6b0oX6qGcU`kBzbQB%=`sR}9&=5t$|Ncn2;FJFclR1Llm85yX-g03XtRJ|1xX|nxS zxKNq$9$U1gB$eE4LVeS`a6qAu)$lvzJPFj6z{Q#;ICD00oLk0!?;_X`>-o zMqON_Yt1O7PRM{8k&RZ)mW)4TOFkQ7D9eUmRxpzm z6!D%m0h7p`6jg-2Vz+J#R1vU9dWy9&{oIoY7|{vBh_=+V6BRG#vJhTC=#Gi9? z&TygWfj**hOKx);4HKFks3T_lGj5~dLDK_m#Ei$>M#F-p2g-;U54(+q15FQf5i<@0 znm);G%vVKP0|vBHw0BWO4$$KA4eI*cCaTE()gkYD%7DZlC|Zae?!l1qwGi9=Tz85z z(8e!LmQ}sbU)30PdHOOfsSd+M%&Nx52zU>S<1WUNnXmGH5&gNWhRfNvOS^^eMHdkj zWTSUTm8o<8wAf^2tR%cSw_ZHuB_yNA)_E_z$Q4=LY@hua z+gbRJfyrYyjNj8v=2yfskYMchf@<22^N%UBagjZk2xV;?YEzKdIhVijq5y})@l@4K zh`V=-jE>V?bVQ~!7AdtFUZMa6QO)xyS>wDAcU}X#7L&|A6K#$f8}$8A0G5cZSZ0tI zB!rs+C(p5(evW`fw|81hRT3YZ9h0fPB{%6T2*W2|79 zsqlJCPAR8VoWS5bNao~&nUK}=-W~}HKf^hhyo%lA2FWX$TGwoBv&fdZb+DL%Oehv9 zELr?hAIBiZKZ|3;;NaUuFLhp16*B2AGcd*uo{L1k4y;QWz>)^#dxj@H7clSE({s!_ z)T0JG^(&M0f?-JSx1K&2hL4kES)s8w?X1OV%iD{l-Gl)#W&>i-Ty5hG&QPoVFQ>_( z{VZ#JDf|gJ%k_`aI0vm!7H+d$zk$_E)U37g&S#Gw7d%5u#itd-fLSYuv3a-R3}}g1 zwt{59iCgoyw2x#kq7(9k+-Xgj(av~rK8AM7tF@Yb!L4L5jfdEgw=0;&y>gH45`$@+ zhnkag6Ugh?WbL(E^&1gJsmu){fnt!lZ`h^#q=Rh35k9|3@7{sYV@*!z_(`H| ziYUCJ#CG0A+q|m8rti5z{MLAOAah$4O)&pn93H<$KMt?P=2ODp|A@62_Zj>%F^5tj zIR;PbqfH5vEsSZl#Pn>(OBD-mjYSTWyCZ)I%SQ=OMe`oR;42H;$T;J_UW(>DhQn88 z8^iift%~M7hQ(KA`@$L}aIt%j;qjHlZI!(h&3g=!uN>P}*;~=P$8h<|Y*ScssZY4~ z7&c#dYFlL=MYD2}dyn$@N?+0B=x&~^ky>K6Z7|2|7$V1v*Zj_%avge+h&STV zfWHb`!%&j?1&NR_B5xhpE6MtOM7Qk?shw#xK7=C>3)E`Lu;G1^e>4wuHpID6{3u0> zMrY2AOf_khz)6}`NiwMQ$hkN8!!!&rS(Q^3jkMNHjh3Cen1&+FWXNswCh%lA|Gc4; zrBKR7tG?(Ip_I=UbRbiCnJBtKE~+I2`O@14Tbkp+3wsH(8*}4@qMVks6+zL zm~?utNc<3R^r&Jgifkt!>5y~zH|aM z(_0ftw!Bgp5vQA>lc7ctf=8l8>FeFmbR}oraD5R#J zB2+WUU6HQ{wb0>-j9P=bf1HO79aQr(<<^A48^C0SdocowlWr6~I#aBdCFdkFbFg{t zB*y0n!x?1beOU}360x#A25Yuf3Cw6^+{;dzWabF z8+)G)V+$uVX5W24){)h)T!$&>lhBBL_W>;#`{nv>%K0QTUf+E{3&zf^@1~efLZkKF z2ee#lWqmiFFQKve?gO&+YNyqAQ^+Twk^1ffnsfW%`fe)rBs5OneLxd#$)rdWyANnv zG@|tR;Pem^*)%^E{-a8*`7!sp5{3j5HApESDtaC2-7eB}7{*gJigpzpg<_wa9e-9< z3giZS%Kl{8myOddmkq0D$VvXdxam4@E5Y|<>%^?*o+CzAV}GS78o|FabJ?|939nF?)W16ppQ)(!Px{}>Ow5sU1q{g8w;wFFU3#)szT z*6x*N zfqqp&S z`EB?1;LFc@$0tW729IMn#zJ|RlW*{c^Ed{NGqLRC+~Zt>H^PrIb!QsB;g_MV7rt?y z$^H?(k#wHp35*X1_#c-`t9^J+{cCWJ=|Lj&=JESjaXV&$5uX>lhyLh>mA@ z2;+u{JgDPYCc?PkB27A;X@YMG2FBVkNA z$@$c&WlT8g~~vbOPtR0hIax% z(^=I060iCzCf9j9fhY2byTI4z!A8Kf+rOE<8Qx8p^nX= zXX24JYbQ~u%Gn&WR`g3v`<)d%SzlPl3lWN|(G_7T9nxkl>r(DdQ?vhMl)@w_&Aw8& zh*JbjXu6gS?~D9n=r)Hhwk|nKBy>6h;8?mV3FELDO0d#E7L(TRH)fH=KhX^sY9r

Ofp4^Tmt-rTvC)YYJ#hE@JzJo19oG{q;kD-5~ufF`5IYM|*L#DfpBf)Hgi%7lBD zp*AU&q1B=*OfnA>hTO<<7jokalgq<|p*O;#m>`v>!ld#rVF+%wPLRn{VKRB3L_=}S zIzb{&g-PUL!jRmLbporl!sPKVVQ5b5BCQi$VbXY*P@-F^?RzUs77v3;bzjg5(G@0% zhe0K~nOY#a!sPHUsC0LM)`zYzDLf1+;Z4@^&=n?whe4%0GI%PWytP7kn!!Vf31Syi zkYoQntJH_YTu(hdoYYx4UIe8TQ9l*Z!a+RfvHI8c3osdXpvC8jd}D*7 zmbLi$`1bINp|=x}J+-GpjjW_tP*lLwJ9%U%)Y!w++=1pmrWqyTO=6+A#j4t!L zvdcV)GU}V40^!cjYNqaIEVI@x1Pb#PJ9?=u_HK$h^j_@U`HS7}ZJ>+2o6NQBV)uI+ z=wk2AU+jKw16}Oh`HS7}ZJ>+2JAbi1l(*Qs^B4O=d5gU}f3ZK5x7fSMS<5c=hy2Cf zO+EDNVt>eA?A>InWf%KH{$lUOQ<7cm5BZC|n_}qM#r}}L*toFU%35!2`7<%K zJNV;akJjmt*K0o-!`DP{4I^bFb4`LIgZ{l8W|@ImbNky@Yae&-Bk*TG?4`i_EXy`u z=wP1VabJiUGzYRIzfQEd6p}}XqY@}jey`zIqBb;^WKKGAK%7wB;)IIfgc1mI8!R^E zY$@ITxac;i@S!9?i?b`{>^c0dyv>EUU8wpEju|9_S|BOJ=99yN_1N-yVQe)H@axbB zLWh!>p$eu5rs!0FG#>I@Po`3lk15u3LO&PTuOXVuL|Oq zi7C8^7iyNkn@{$FH{r0G4Z8WH;?II^4ps2ms&}|x4t5uy-5GB+9Rf>o|3f|E2Z@(s zFLQD%aUGA9s;R(nah^chV-`uH1#lAO%I4>@$aH%)O(D3A#WsCm7oNv5ZL*X6v0+R zvGK@7fY_Odk&{JDZ=teRGo}y<&Z05YBAwZUzMeNF^-R^*`;1+BAW3P8hD#XDp;^h$CVk9Yyt(m2c(q(b@v9=i zuP*BqVDvS*i8wYy1!;foXV&?~gy`$7*|rBFO~5?a8oh8FNpSz-HEe0oH_4TxlI zfXh7hq{J5u9vI2OrPm6CWn6m5-<(Tthr0B-+>zh@e+$V9LX0Gcv=^LJ9>7_%5aDt6 zN~CrH{mgx_{T0M^-2H)w?NVA$zjF9pRZ<1$kT|%*yC{w2R$28&&`zJf5N2#OeN@y_ zGR{?EcOkK>O%|Q6o=OMIYSdF=QMhoPdMdf*)h2ZxR!SDW-X zCi2u%>3&&lvgc@1lqa#fkl58Gd5(!ZiQR?7t~R-IOyo&y$uh4tsdG&D61xkDU2QVw z81yB!lev^n1( z+^d3oL!1C)fE2HQ+6YFmob(6PGIK&YO|35&%jZIvkJT!lFMmz=d<0hbtipyLS#(_L126*m?c1E5%j*4(zJk`%j=qqa$x9>TCiLWDCo@WNf{_G3zwylYcw~$b96Y`+I8KZU zS`|zfxJo6*D5~L%i5tiY(b4Tq2bC6)Bx-{9&%E&5+mH~Mk8(S_k5uG9?fg{ffgGQg z_p!@=AMQ+mvyHrw(UGD6X%gUUCSqfwSiYlg@F#rWtZfOFZ&BIk0BLIXTrQP;Aq~X6 z=?h6lo|6{>cs5)lFE3Yia+s4b;xah-n z#=^j{BU@?-U)b%PCYs_7@9VocjJoww90&Y9$~!tEhsL!j;%UnpIwKE_Yx5CLMF-9Z z-chr+?LS^&|_1)@7THg1)_5R0t0no5Kv1JGp=gJt~?gJl6?uriM&OMj_l0b;N+k0lFY zuq;3fR_3u}K@64!h{4J{mV5-3yv!g533o*vOFjZiUS<#jCh}PF5mwAHgBUQ8$C8i0 zl9w68fQdZBV3|P-7|cTqmKnr=!92uZnL!K~%tH*88N`6WJj7s`K@1oSSn@Jh@`|hx z1$Zu5^Th1KVaEf?Md81dA?40d)nPR4O1*&i5JVtk`p)X5uTg~ z?M_5mg(q)D@Bbj43?|hUUv1%P2zftx349GNLXZ5j-@Eit7`w^v$N2?qgg0o36F9v0 zwI|G>`{dA9ypKU>$@;fce12RHkY1Sz;5TWd3X5LKL{tZSyNwC{eOy`IRmzw1SGjW z(y9{pK#Vz*sB)ZFZH(dkcl-L`+J&CvQhYVgS_4AyKrrp(X zDNXn;#S0h4GruT^q6%i#N<|kt^Pptag4+~}elaN?>bMwgwA^-1ElD|>ti~UU#U`cj zR`o4~cMrC0=F-ylNUsgI;xo1?cLbI2e#KNQb7x_%DZdilm&{zz@3aiwW1zML*~2Qx z(XA_rLuN(Pe)_!yieZ#D$F&*#xW$ARKnX7q1~aXxOR!u%miYj;^7Sm zf@>-d(v{OWACq6|;JwEYkMx~y9#nsHkaK?RIQv@~)N_f`MF@eun^tG2ohd9?(Tzo& zUki_VAVvCS<)N3Hl9y>~JB1~&-^$_okDMKQTz37kA9h=_oY?u1z@CdsgB#jD?UbUC zB0+Z1I#<3bK*1eD=s`v>X=?CD0&l1n)L~L>{W5w}f`(*ev>Zd;%QvU(h1K+ZK7X77 zz4iC8vEnEni~Q_`Y*Rc@3xw1k9Z4Ll)(6SuSD)#pRa~P5S z>-gyLlCimH5otj@6&O*1{LUN9v}Er_**SZt?D#=$7qFdh&blw@9OGD%XZ>lNmk>Yg zFM@mGNj|Iszg5z{a#NwVlg{4GHCmt3hpP%pBpoEGB_$4byt(uk+^z8RGsyu4DWXQ4 zmOzU+4=TCVKe;fk+@+y&^I7ViXYrmH+RX={+@Kune*{yulbxZAS!;&!CTz)rV^#Ul z!h9I{ETgvkTD*lMeevq$gN)@R<50f!yc#BCbgF!i#j-;@58IRfjcq<1u3@E&j&LAa{MY5HqIK;&;r9AmT>LV@7H%S`91AjKJbX z&0|IjF8&jLLvV4U=P|04HLhk=+qWQnMB%~DD>C{g8fS>uH}PAf^8dTvlA)7JRH z5?S|Oeb~sOTPI83Tv_K^%6wA|ugWFSP|z-#2Q1bNWL#Lm_XkZ?a@IK1B+J$_uJW}{1kGgWBch=xl~ zl7QX=lBgP$3ssqBOUIG#_`M|{e>HDYSR1=!hutmqyB~UCJ6{3u_LDBAW*ZUBR}HZ9$lF3}=R9KX zwQ>qNd%%;t5_VWe?pLI#d~EgDk|5^xxJf?v9Dl~WTWqwLVzJU%#`?u}t{O(&i3Jgb z|69H>k0~NNO3evYJD-T~B#pgQQw9TuAw+Q0&-6mn`q`c^e1E;Mo0M$nx_lNzkXAMzk> zlh}*2@(X&i_;ZfViOt7c(3!;~L)_*znHa+vL0=X#{u#H)#2C&9y0Vz@nAm9&ImfPm~oOVW=wLMG{&&P1mS*gvc=~^ezFC%$$hZC#TuEk4rXw4yRSURoiZrmsZzAX@_f~~E$8h^#fsZ2Q`6~tnZXH~jAO-Za1 zgVRkk)nzbn{tmDP|-)QN&^QDA3(60 z@~9e8VUQE#iUCO8XYp~)0D|>3Gb4WHK7tjGshl%_VEwt789=ap)6Db}thJO!JE|W-ttr;BMGQ5{SC|av+)l9 zlaILZACRZN!q&?2w-1u1-p}ATzL3ny$Md0>Je65kt6)V{FyI*?>D6ZN#uEY$yZ3IC zEAaa)TB5WVBcW@f$+{3GpwS>#AiAaBlLTbirF)Z+TSoR}0rd!p0xcnR7u2gsbE?@?wB`i_@C#vCAXMs+^Go$~jf@OTLtG6%?@0eNoJlY1BFT;BUgmV<0WXx%rhlmD7?%}LF(}mRAuIwQb_d6oB^%J zOVE{>V^~4a*$hMM@e-6}<``C3^iqbQ_IL@}GII=mNbOpv}aL$qKbq!8#bUctIMd6mv0ZM^4Tt6K6!V{of;y>_NN(l`Oo$|o( z=r2^{&4PB3w$1_XY|%KxN;F2Hs7c;< z0gXDW-3X`Pfp-p4gGbak>1!B;5m2h9cNGL_(yIB#Q+TDc4k7HrZ#P&)8k*rXTRNjz zzygeQY*GwXhpbsbCZ>sv>#i{Qip_WlWIuC8LJFl!WZS618&emKMHMDwWIF%X`Kqw^ zg;f<^$ALx_t~07|wswL9V>Z0Uad>r;q4$g`JguberqF()3jZ;u3g0OFAe#gv3NakA z0kTP<>c3Zu}-ffj)dhL-o;zM>>7=VJU=gZ|~&e zSwRs5)jNHCxY6jtvw|83{+#N=jYc1y6_h|Q`f4`$cvesW!Hj2tb#W0RYA+@r7bMp6G==ODRm9I1~WweG>I+d?9Fr`|1`E{Bs5DZ)KN)=dRaV@@UE};9?4#eh2g*>*_*Wp z4>KOgJjODcKSatpUZ}4^{D+oIr>8dx%cz!EdzyLD@^ zswA*ve7tOe#BXfCtlHptCdNgN@fMjEqgV2NMm<*i)<@yOBCV>tb*PEvyGb-Df8J_3 z$dFe6M`Ou!%lc{ee#{U|(OmF$uECDEU;$S*ew)};NoW7nSDJ2RPfZ1G%#~IBl{K=I`2wnx#wxXY=^1kv7zIE&r>nk`EH4LdXi2f^ium4lV~tQF2BE^;0yQ_Cr@F(<{GQ{CAcAs!i!e?$||wV zhn&YzV(iOsl?+T{Kz8QK&iVdMwbf99Dz<9-qi}!JVU&3hbKPloDbAVdcarXnR3yIf z07jp%Z6Jjz98K(YrJXG@GLc|nZHH8Z3`7N{#@I70dkf(;R>MlUSmbcZEg6$?$5NT# zmvY0AktNp3pRjevx-|;^@LJL>A7qUQ5t(}~zUz9NFyVvZB`{i*UEedzYLsj;l|VBP zxzy@9+-_&Ss}KGK`%|ato3K_rBy%gCl=qb9ZA)Q}*4Kf)J%$6Y06bb2kF{<#0Pgl= zaCQ&ZeXYSDq>6Oe?AVVoJ(+@mv(@7-=<%Zer6)96?J|Sdt^G zrZzK1uPnX|lCm|l>Gl$3x)OC7GILxe5maaUf4as*{O&b|c zSnJ@2&%~B@AFq9tq8`c6W^3gynCNvsO`-_!e4Kk?0`rI8D?*9YSCz=st{5a+gJf&4 zYz-!X;nz`nLG7>S^E$!t`F1=+f|XHdHD17#?v|JgT+)^NowQ42wuwkzITgDl6(LmN zNi@2ov<-Fsm<+!oX453@O&pJ9q$aRHaKfhCD~gF%BVxYT`UXXB`1@a=0AFN#%=$)a zqUbrR;iu>fc0DjE%j^NR@yjF+?;%fz#-`U>sSCN9)$~Iq(xO?+tqZ@L}2^@2R)$kp2%m|Jd5gel%a?Eg!8D9I({GE}^lc{g+MK@%A z1oIC;nH!Bii+Cj# zYbv}W9on2I-6U;4IeTj9d&!o!3I)F`JQs}@hBT%Ss@%ZJ`(vFa72c;xsZ_!zQzes# zB(>|`*iTi0WaxmfiiY=*5VDRt%Mp!M!>hanL#JpB)4|^Y{7?7~L@U%Z9ojq)Up?da z;=SJEoNkWqJ-=1vYxa8I)5}w~lzM8Slub%PY1~B1zQJ&-cR@(8WK5lOZr_Pd6R}F9 z)xpL48pJ4 zDw*iG_A_*i&DHl1d6!;b0-iz#uD&wue&!u}!KT!L?Z`Zl6O_P8h9ud3$Shc8FUcpY z-blWxRAe`Swyz|u$}QlIa`dM-THX}vTykIn(RUWZvQsU`d{TEBN|tjWt6?_+Br6Jk zz>tc)1AJ8k;_V2;8ie6ZNI%vZgGfTe;B)>OtU(M)@J%2F+XFF};X;T(TFZ{H8XuFZ z0tC_4@)vBX45T>&RfP5;0|_!NP7x7<3WD%Rg|{0y_>5cu>b4qHE{G*IG+z$NYsiy> zYm6L}cb6vzgY~EK@JqlZsj?|IjlBkIAH{C& zdrEnktXxDlhLc)}Nukc(eqamf+V-aL?tY^z+f9a`-20B?CWa8!`bgIu)MRpWglSNXS$ zLx>b|ZHX@LIbQo3O_J@Q&;rK#5hfn$G7BQ9Kl}2z^>BcOartlzeUc zwTi`R#NuWsU6z(jD4Py9V5j^Q)k#k7JGNfWD+c~M2 z6b5PZ;7gcLsd%XzohKE!9#V0t)$na2Jya?t-GwR;nG}IojX=EJOsha-T4kY3BMYmM zh1Z&Cm4!^J7?f$mU^Qa!A~UUGkZF~GGK~bRMgnS_j9a4;kZBcuGL7)7M)(OB%ss2{ zV_M~&Oe6QIk$W$jX_b3StH_gSL|!!_uh~qi$YWZiolGO`s*!g8YNl1%F|C45rV(`2 z2)dPKS_K``D&u4t8CN~L_DkHB$~dM}yvY>et$IXliYXOuOsQm(DI{C<$l6k-RI)Lp zLQSR+YSp6_k7o+lf1%1V8AhH}8+leHe9jJpS}V4uUTnmdb9J$Iiwdvha$S*MU(SqST@=cOF}lh(?gvoB)o)GLl1cRG+_56J+^ zf<55#BDX6<;TV~BEeCXbiHrLDC+LrzTJYM{S0+Q~9yE`9 zYoWEy5`lEf*LsOKg|$Um6|Vy9xOK=pre$}M>|F2fOqHE4`a4mp;TZgwu2|w~KyIZ< z-k>TT>B1%Nq}}UEkWxfSF@^NPu;?62-UxPq6u3oTfwsn+=dG2Z=brglByaIN9iwXoy7Af}a7%BQHkOG6w4EXtB_<5yr(dC>i_W(a% zc-#(o(dEaE*S_89=sH&u^ppHax%E`!C97$s@Hgb_8Rk5ZEWi|cT~m|rEqySaktfZ2 zJnt<2TF(ERxxjWvX}X=;S*9zEINi}?^3E>y{zIh3g~X>?P1ni85_6Zj5F32uFxiW= zS&eHrf-rcTa5crm!zRN|rVHW3HjG;05}6UpbqF)KSr@{DZFscDXJBRs zGeemHE?o%!wPDZleVM^h?it1mF4l#xUK`FVaf!?jX4yk=Q`AnlGczz{u^*V>%k-SU z3|Q$x7_QCptS~btFf*JPpwfl#TKk0Bf8uy~^bw5WUR?;AwTIVU&FBb5M>2|cbs-$q z9#MNKqazs|#VF3zg)mopWNnzyQH=6t;lJ=+Mn^3^iP6!FDBERZGS0|UFh-~8fE@6*|NYuzWJtIx64-9&WZEnMZM zLHrKlcQC($%QH7O6r+$dOr@Vx<`WRFb4#IDt*q4W-`L}dlVtnjp-gd=tB=zGM1Ye0 z0Xa23EcYIHr}lOU#trWhNCv1kPY=DD&t>-xeHPq=roCzUu7v3zc7PCJ*56rAtNF6Y z*WX0(ym>U=UkV#Oy?CFU!7?FaG28<3W`{O=zvM65&QqO@^cF#3>$ov>?6{IHT)Pfh zUEUo!xw-z8L1d46Ut%AwoFsRw9NO!6kz=`woW5%Cw#^1_>lVDNB}pX!V|xf^eW9@z zOKvF1vpO(2_8YwIDUK4^21FKpMU4&Fn*C4VCPr+*tvdHP&jBhw#xXRBwZ3 zogl0WGqe5(JWtWAS$q{)F3Ns^v5IrwLl5kWYw7cOVrkx;qFQ>r;u&(j8ZlMwt{;qZvt?ymA4~>R-1mrhJbsMtR@97eNXP`W*-&~8B`7hmgxc;a{5wdBv8 z{{{$VHH_yPdG8CFkU!RWkIx_ehCROn!$S13wDY>Ymt<&*wK6SKlK&l>%6JHUuUIvw zBvzj)IN)4xKx*pA7C7K_iUZCC2fR*j!0UcpB{*O;ak25tDYASbUV>Kx4p_joa_SvL$FN`o^<3>e{cT;y;KrP(MBNInZw z*ga-yL~RvQ#H`K5?m0S&DeN9IHL~_RrYO`l7rW=Ez_r*tW@^;pQ<$RE<6K2?gJGm_ zTo{U2IPh5Po;|7XOX<+FM9}BiJ%^-M^DZSTS?_RS!S#r^Ml63ya6QU*h~2}Y61zu@ zBwPMQQHpYs2HZn$q*nMetKs`-@vP20)@4BC*Hk~sj*`| z$u&A2xsyfnsiPJ@su^Lngt7j_&F(<_`cn7YYG+BJ? z$X}swvXe%<-aHQJbhCg(;(AEacul&m;+{^@fry*LSO*nKh2N9jL{mist=!3hI9fYC z$@dcYm*_V+PJG&4nD2`Q1P2AUe#xp|z_Gtooi8g#t##zChPvrfQad!doT99Ir@Lo` zlaaqzP3Os#-NI5j4p>c7WQSYB-Wkni(!Cw~tjlVWhYIjUI|E%mg`fwGcG9#C`b*7Q z@@Y4=?P2v6ibJvX`#0s5no7E(cr@SqUdT?3)ZSbD-ZCFiju`E?FX`GA(CG{mF zMMd70xtndUbsarY%qVu{G(ADw=1*nq%3^~P%86IwKI6W;Q5@#$@z9sG>UUiI|0C~Q zz@x6NML$Ufh)I}$n-x)!TZvrH9e{1jmypn;^d(Qpt{k}Wj zm#mq!pa1<|d%gDBduxxk^dare}M+sIOGBxyr&25T;=J4Nm8zr-L6O zBRW~J_s9Xn#B!(znK1w9dwcFkUZYpFS{XE9N3NuotZkPe!Gf|UCE|y{{;xR)^{9v` z>ylZFSEV3xmEV~e{2nbD`3x2)2OVdAlCdi(F7H|1E7jAB_S z$4Xh!mNT`>+WIiZR4Ttp8MM7VdCOu*TZ|(T47W-dl)XM>%VG#yPU|MY@T!zS*Xzw& z7DLt&mrjD=R4Ie1*N@t=7@|I)6AYh988p3q^p?et^q+Nt;ZiAsqSuevvKWH?rA{zB zDrL~~`qV9pA?JWjfcJ?*r3`9bf5w)@slFB(Hhd{%(DC}TEsM|aRe&^HDP>Uc`t&V} z(|pAs4NpoLG`v1z%i?rjK1jonQU(RDAG>97hHoNB!;ex1{jRrcSvle{@ky2RPk8@vFUh_+B~bM{*wo{?FwWyYDJ!?}pU{5ZH=8iC>ahk_q# z-Ougc8~jm3b6ZHi`rf6RiVytB#?$>7dNc*!oW)A4Yg5Q~HXi8IzE8=5PDW749-cR^ zi~sNq7Ynib2oLAmzC!6XljWK$bkUts2j4R#ca$G-6hVlDjq65#Mgr@`q0F6`AgrFF zfjcbt927R1U;Hm_e@GvA@hL8G{|kPud)kHe*h4W-M@d%Pny*ONysjeIjD4oe+>U10 z*n7U^ENpxHCFt%i;U#kWujC??zIx)hHg#>Zax?^L{5UrqFQUT|J0#V_i116;X@Cfq z7Gp%X^dH@1hzGLXaTz*=r=u{nNDfzfn1>gI^G`n52$H>HOi|8XB2J#2U`3$jqTq(r zQ+Hr|va4bjgfHcOsd8{qfKoSIZHHN)Zl5S>D|-lRo1PFGKsk>BMpZUR-%dKQF1!Va zVtEuugd$e}d$?2es{_K2*BCl&ftU`ER3COFimk_g$dl8<^ib`UjnHbXJdS9!gmXo- z+WFu_t7TPkCSOlOtCh%Hm<;RGOZn!OsN$(82kzULg>-zgoKK!Wt9=}F5k`)`TNK(@ zHP)n9^T(p!dX*bM)ZLkV*Fv|V(9RT%1g(}-L#u^edGF9b-+vsCS8x4664M}%%0>$?#L9hF>&inYkD3p}>B;D$%?b2mHIhnC zW_o;W=pr+5<1hm z`C96A=Ra=U{HoGvy?By7S{T@Hd8PzqvhH4{Dn?P*MHsCp!}e4*9sHxpyb+-iLQB{r zzp$SQM24{lWxYe)r6X+U07)olvvG?i6$KWd0ME3xS3xi!zf17}oJWgL61*tDEocd{ zt5uRv6S&_sun2+RMFDO>Pmt64B?(1g0H@I+6a_B|a0{BkI3o#FVE~8GB2)!03UCX$ zg4mx@3T0scXVD^*1uqJ43);f#MiT160FI(Xs0&^c;1=|SJw_4=!vIdAMG&bM1-J!` z;Q=EF1~PzyXb~!d7X`Ql1z3~`X$!?+0O!ym6bCN~aLXCKb%I897{DpC2-U%h0^E}3 zTPbLihXEWyi%=fCD8Mc0K9`_T9|mv+Ekb?pq5!wB{w-(}hygr4i%=lED8McFfdp*< zg$m(C0dBEG^aWSWGn~ML=k6KV#I?qg^a;AJ_zqmIB#t2Y*qrx-C+WSYyn*|gnQ2Vo zGaVT4Y*7;}7(Wmzy|Np?qA$YDL=@-;sEX{QC?( zr8HtprM_n`6F$Ya2wi%Ew<(QQ_=}+rFG5ua?&e=)o}EG;o*&hRITv?~p%b@L8ZAS# z2kY%2h}}atdfRzQBW_?h(8YqwNA8?2J^4?10t?05W0jgm+?d2kdqVb(R4xS!L13EJ zzu=qOzst?pD69k!18jA()_A*|#-rr!r!>K(O+=?sxtwBwzf_2tuo~>W0oEGpA@_xl zySPfls3Qe)Z-BL)dZ>LN)ZPHK%T{etu=WO6Yvc}2ZkQwmVwbJjq+sj~u+~@)tuKVu z8=&>KbPBfK0Beo)korPMy#Z41(J7dE1FSXHL+J~l^adzhwrW!wmfiqkTMwZxgwPux z^ldr?LvH}pxSm(O5IS#2^=%|SHr@d1jP;QCLP)&f3?HlX^_X}AtTWa_;R~VghBV(2 zuvmBltTWa_;0qz}hIHQ?uo!p)tTWa_-wUDdh78}gz+&GGu+CTyc`t;#8^$(ef<-~D zhq@O+-3=B`4o405xz@%Exu?!*lh3Vw&*5>qEg}o<^QS=Gp7f`E2Or*DHsJ<9fChndNrrLbO*~3V|_oOSH`$${dFkL z<>~3THC|~IhKg#<;ui|oxQRuZLg;E4*7o0;MXHo!x@KocTzJkv5itct{-ZFB3{S@# zmOa06`z`)g(CzzDZWoPZqs3M6yxV_umM7^L0A2R6usdpwvBtFU3@RPrjtbjXZZ5u1 z`s`;)=ohBCHqkM>QpBu+;ec~D2bB1~5H0mkH8VcvC`(dRjJwij*@a}RZps-`qn;s$ zE9qIOf@Auyx8I8>!FxywE5DL8{9CBQ+P)@LR5glmX6;)juSNd7sIDIPHj>>ZvR?dA z0sC>cf4^IHjj)(1`3)7;CE7zPHPNsAeJ)-H5`s&>AKoq3k#Z1_JO6e6vpEsalXEa1FU9eQZvz)(3PJl#a-kA_NYSL&zAXcz)Yx0pH&Lkex&q?~-<16T z{ybSkBJOdCdU?cxdi?LYavpc(e54$(E{<|k+Z&;<2^$3N$r2*Yk6iqQ+h zzA2n&c<6i+;n^)jHhSUNvN>OsG<*@rZ=*^uJa)c`@bi{*64HECD#7sC`6j~BTQW!>Zcil` zUOV4JxO&T25;A<3sRYAs=bH#)Z?TYo-l7ul+~F7jX$8sZRV%&Xg`rG(a*)V4?fg%= zF2#y*rSPJXf_WbnG3Aqiy22%SL{x|#-dFpwGL!E74`FZ>B(eD{v#4Vu20reJ z4fuPLu%|)!H)aJp$<*oQuulJ1{wHBc{=f81)#ZP%nxtU8q_-Vq3VqB2$}DpSB(iFk z^^P3o3Om!3{+~;y;J)H_ZzT2Q<|ArS`g@p@G8ys9F){UQ^ym3%#bgZ6z&l!nDXYmj zTjmWHVycSraE@YOeP+Gm1!-E);`(RL!sfT-(IgWirrOUG&aaC}eDcfq{r^lJ(P+!BXx>%oW6%WO;FvwzW$uSP*4unpk5U=1Jqjw9(J>U^0e%<`8fC) z5+f?F#E$Z_h1SdCFE%`#_RQc_sutd}D5A?fgw$M$9K@EoQJGBzth2y$+<{vMnqR}u zsdc@(P{dsMuUOkcF}j`$r*F6Z~onp%`ywo z^*EMm0yV3k;19yOp4=q#63DKHC(7H^5s^>kdB=z8pQ z3ADuMdJ@_}8Q28-Ti_7XrgXh@(f8!av6iU5M_ifcdvfVmOH|(@u1vJQmWaLw-4t<7g&gyQSM+sM4z2S!^Ilc@ zp4y{|L-Z`s_gJ;VUcugBjoK|vZu6B|-x~<)d#i=cWAr&!{_9$wdr9d~t&9XiF;iA* z9+r2?vdqIRyh7Gs9&VAfn3RqUxI`-+dPuTz!82Fo<@Ed4n}a`O`f2_$vVP`~oIi&W z0J}Kmj@h4*5wkzV(_zlVcF$u5cB6kiBl_2XD~H34(Z70v2uV~xbO|*Niu_MoH+@W- z^0+Kn`QPyPGbZ-6d`k?g4B}YLIWkRx`7*~vYkRL#_#S@R6ouInd>4Jt+5S#bZr*c- z!*YKxJCZy2qD&lBFnF{2NzQ+HJ)z*w&`$e)O=B_Z+s;i-_%3xK@e;wx{J9(J9i(2zi@hv3J~MqHqz*>wyx2)i#JqFXt2E>2c@0ln<(x zJXz!syv@4xRrvR9$J6i#TYs=0Z7_UJ?N2h;PWy^|C&}Ex!?CEUP+(ljDyRRp(Ub=x zOT`d${>q=aIym{5m9R|NNj`SxN|82l&R<}@oNapfY7oRx?E2treod+7 z7rUFxi`jaO?ETbPePfbTLfWK&q_I2whd_3#pZ!N#GTGJXiidN=Pv@vUU-EjALaQA9 zwd`;I%+Zl6IUV^|a#-8frJ){&oDBK+qQK;9IYO~0XV5_m!LGx^JilrE!}oZASJv%R zenED`5Si%8d0wAgddNcQz;{3C9!&sZNcJ{ZH(#91vjjSZpIq7_N0o9+DayJF?ST{4 z{4YK#2bmHb?2?1OIAzUcowu9deq2?TP_IM@f9rg{u#$yhoz$JgtlDpF7e6mJxVSyJ z+n&Vy{i8lj;S!wy6St>y+mj_hpQUi7PJoBo&E57CNzf-L9Ho7#f`!{hb=%F7pwCfw zLnpw&?W4Qxqa;C}qR_1qVBq#K-FD7X4g67`TlyQF0ROh9cH75DfZ~Vej6l=+n(NSPZMPLywV}~wmqZUo-RmrTxkJ0VcYhx z-S!MYs?$m@1<7dIE#3C9f>eiF2-%Oj?Nn z7VV#B_>r9QUc_uVSDCs@4mSZMWUG{ELKfqYHGT^5^{n6-G2!#RV9 zI=@tGty(^KI1<>C z^r4>Na#(Mc^#}dDyYMuBh$)}+$|ECZx!v!No8^1RXv}i)qh)f2fSTmbU$2Ja@(!Re zu{#A7p4j&4jgeXX2c7rAKTF<^&$g>s{Rm`iI()IA_f^l5Xe=F%sHywQ$U>hueTbggE{hbL z;>;ysNgNj-$Kb&Y?cGjOlpoIdR)ing6~n`RhsN0aBOXK|Jf%C++;tb~}T?Cfi zF@b{kI;`#AR_yC2t^g+|(m4$_SgNu3>YW@&=Tz)Y^TAm<1y{Y3cqW^@VtTD5n_151$;t53z1hDl_$g&iG)7yTV+uOcWj`Bg%U?2|tu0bA%s` z;?zXphv9ku6dW$$yl0O8DVYkRQ~!4|^_lldnPIkPtJy9J&HGo=aNxU2m-z|b-Ts5d zteutrk-FhytJW;ns&(b(d4j&=4QSod$z zLY64`VU`e9cg~;|G&FsF6syEq;klVX8KLmRO!c>1ocA|ksz;`|kK$^YPtW8_+fj6# zlBDi2NZ%fgZ#O16xa96a-fo~x&+%^=bDV^f?!shA&{JFvm82GQof30*VTvT^8U8sV zMgqD{$*Ar^vn1#V{;Ezu*C`p@T{ub-^!(nf6JUBJW4a4ROM;%>|Ed$v6G~FM3&%); zp52`~0bQr$jPAlzNl?1ZcWD@1rzEYr@C-q!dA$lGx=u-YcVU_!)wEs=5?!Yxqq{I& zkZM+QitJHzoszNLg&BfWllo$is5K>)?!vKxRJzVtAXutsQ@T!}=sLU_f~?TsQ;8qc z^BJ3z8IBTD6zCK^huf3YgjTcOm9$T*IVwlIn)BvTD47Ybr}NwVlIeVDse+>}1Jd5e z`Mi$^PBotk38i?!&~KQ}h?Us+e5juVJi3a8z0a7>MM?O3dYek+w4bA^xDMwl&VzwG z99syWM}ywq_w_8Cv;lM0rRIqQ!nopML5%qiIio&@24B|v# z+q1SF2yem%`GLfBuFKM?T=4qvb)lKdIm#ijK7_VGEZrw<1Kj8<>p}kgyWVF{ z>zs*l!NIfYegn1P7)wmz*PoR`U3mlcKZ)iVy&q1!3s0c-m@BZ6>ke*YV^R%EUU)h< zyB+;JcpKAyRi_-YC}+2`mW@BlZo;GQ=Nv6AJ@80CINsO+YulA#Q*?NTh*ss0RXJ?+ zd6DNF4|SLF53@WJK^6tfcR7)}e%xlyVV~T#TO_lDVEa*!@jc{Ew{F_VS9M-2UPVG_ zcjJU(XZCaW!dCguw6=YPk>>9BHuuvOkoo~fzI%v=+2j?nBO=2c_%`Qc;zxdwd_^5g zSbHqUD9Y>g$9b=F z!WSTLjO%eBhRykBawO!VA~xOl1+BjwA}k{ZKFKYoZ@`H-u}K(bpq8$Qn&LkO@v}n_ zgM#%rF&sIPIE$H*r7o6IyDICuu$8PsyOh3%X7N`f!PAI}UJ*u|D%kDX^)BbTLf9{y za1iN{6FJ|NlVmvGm6M@PSkKzW?d?uZa0$%#H@|W10$u3lwr3X7%2-#$%?=C zz(|=)%CMUcj1;7Jv5nN&yANLEJ$xx=cjK^28t{L$>wQ8axc11M{+^(+0wW~XAJ^nAa zevuu2$Bq4ZcJ}MJ=^-~M+O6|mbI9t>I?6g_V0T!UyHN> z&zdHulL=m~x&2qI2;+crr;#ku}(%u-Zlzc#+5&F1JW9LC>_+)X?^dX_54^k&v z4@$#Fi<72L2@U8p_8ydm&lV?59TVC_88#oVh$n5OOIzxk&>O%r#Y@Adi-T7Og*w5r z{h%~_yf}DuQs@-$ME#V8&ld-;jtV_Ta9qClK=i0kip)SNME{X!eO*V{7^0W<#FIimAvn#rNF=#NPe|M{C+m%dkYhz{QNj zv9`I!nM~E*A?1z_xR7fD;+C`fGZv$SS7$1(xx#S(!eZQJXRY$5b>t$^lmt7E(r#im za2<#+h?QaoQmXx3<}IKBO3;E$;&tS3BzP zHj!e_*?AC0(sN-c=6`9|$5>t)=Hk2>vfh3n&!q+1_Yh1MD8aTw3%2i>jGKLsTblPT zIy)@bQ0-x;Ck(-M+i@+|?qRZqlZlgQNHwgQuv8Oz6FNVM zT+4rcm{@z>e_WAy+uI1W{r=ZD%U@)g|FsyA_Jlp>!~ElgfpNbIOSHRBDbemer9`{? zq!R7!lS;I^Pb$&wKB+{z`;-#x?%@*c^WhS$IxNwyQ4!5DANH{72$3AeL+k3e)YEYm zVHCc1pp)QhlE*&~JRe<^MVw#`a<)^ZTV~@~GF``7A6_ZCrM3NsXf&*v$4u5w)sjz- z$NJkn+(UM8alnz3>P|v~QjX1i)M$sStanHhnw^^koLiR3WR?5uh|SgW)Z?EwQvZAu z8d8oLHCf&MBdDGUrfN`*nG?EE`e)pHHI93jFMSBl*h6Z@wq?o~h#IPfb2yA7BKEG1xqb`EG;T3N3B|4Y5IZM2a#{P@^eetaW-#usupUYrQxP|miyr!t z*s&dT!)LI|n8B{VN5TH zG-e7Lx@j*OuhvcV6b|dA;VJyjF;h6(n8Mk{6wa0@oXr%@Hl}cPbP6LBw7=m0)I2sn z5T3{XKWL_rdCZ1a#4-L9J!y=|yxFWKGY8Yl)x6wi^KtMwm9YSdl>4}dq~lmF4wvRg zzI>;tiSYH^MAAQQ=6qV>w;Rt#9wl??G)Wec2+e;y*^ujUFi7LsY?n`V%ybg_zO9S! zpe~|=xZC_Q&WH}n+sMj}Y$lYYKW-%z-)Znxc0a_}v-!R2#wki|gr6)A&0GmTxe_}G zAt`5j<~*wm)lM`BJNE$ZIz(*UXl~1dS7<*{2hlacFLvWmpU1vsWv`-ODrRIDsSR+5 z>k#H2Ak2AgCGrp7tjfpRrzX~!x;?TCo-Ztc^=NC`ujoufj<*cK=ZbQUd2&Kpn$KCR zMLEAjj$8jQi*@j`Ix=AjtPyRJ%f-4!<0X`X{&ss4!1wwGv|v{ zs?5(kZGJxQAJTIAJuyDHG|B%Z*8Kw#Y`gJU!}Q#3&-o~S2s!pX*@~eW0Ig0F9zuMMO>3)lccC(Yvvb`{wJ*wK7a;3+tRR$UcvnQt3f|;}9 zYTX^QDYFAU#|5|q@C6s~sx;pt2K_(YlOI~Xun4P{oF9Hoki@4fSIgeaKH)+VnG(EG zB^miSk|x3rxgGf|NB-Gt%0GjdsW_oUY32$!-$2^rQ2vL{a?Cs%?zbE6_Z&w}!u|dT zWpz67`-sloAF=Ouq2f3LKbMFVf?Mo=M6oxyzj_@-;-H=A6bDCpXS;SC=GL%-_P~v3 zVq)IE>d1c^WkQNdpvr5aCK0HDC8XDAIbeujX}x!fU={FsmDU-!R~z^0>;R6lBSo*$ zlA=v}*=9mrnD)!`DlIA6u$OHnq+r-D)2p5((l67iw4`W*UU&;B81&2ZDlI8u&igik#gt#BS7^a1Lw*fd4Ebex zg%+$b&~*drSko!k*diZb0Z z$){ByvER>|e1#qw^=$rd``r$O%0UETu|JLh@0b{4!8^HM>sh=1pkkTILv3$+ zr{C#+i*6Gq$-aTG1%JSvf6&_gJ2?ERPQy-DC;fEKgWqVk)2;8j19Faia&R+LEB1G+ zyp{-l>u))hQRKGB?5AH3$FZQ-Gp&O~crP7+Yb7+xe%o>F$XbDz3jA1Ib@QKMPAfMS z!;%T9zosdiU9EduU%krdQ;xvRR(spvIEQuKhtB*j*iTGp@np#=D2^;o;OgY=1xX=s zC0pAi_6jc+$dv8{$)T_Z>uiN)8`ah3?gc5JHH8Zu0U4zwDwm0L7~|?b#-d@f-zi=_iIhoKT~+TgIAx?y&zTanyBwk zc(zSloz}hJ48bdsZscGLaOvF((gddndL@o2a2eeT(gml;c@a)2aAUg{WC%_X^OZQH zz*)K%j1`s5ao4^u;yQA+Wk~fS1f1#g{Iz@RYH_8I|Bcr z8FQCPi1K9;Gy(sMN{F&$5;O(hsS=`GnFK|`>($vV22%#9Xt+{2R}G#FQW0^9@~j#x z8Kk1(S<06b!SA8C%WUtJ*?uf|Jry|ouLY+fYJ?C3dt6;cYxkcBzNysA0(C!- zvDuKQ?b`;R;f)fz&4osMb+a|+FL__;K<+ocJVB4TTorqC6ehuXOb^ExVzHqPSD=tn z&s3bY_^9rb{ebq4R#SmQaSz#(?#bd?R7wgNja@li6afw(+b}UZi6icIb7I3zU0B64ZSmxMF+85>WgX9COBBx}3dqQKrbfocH9UaZ?H`cs)hd7ywk`Xt z3Fvl9WU+)r>MOE$i%oOKMbxUcUB4xZxa_&+#YsSuTLPNqGRwdbyj>U{&@@RW5WHO& zAJ8PX-BE&oro#Aurq38!5(sE2j1OpfMJEu@R2U!7v`Z%t&{P;7(DZ;#z^z^wAJFsz zoj^cSVO&7dEi_C(Q(;^{Qx!-8nhN6rn!F$hXex{gXqpX@fTqH@fTnMOB%rAC*tyn z#$~)I@l3SVBk}%XEpvXGIGCTcZZer^DjL(I?ZmjarUjodI|7N~nv5xL%y;A&J1y+~ zPMOV*!Vx4Sxl^XI^#@Nv$es>~>NqC8QldH{8y9{?P92{lI~R=bqzyR9i5-jIxgZN# zU%e5zBfjl@p?i5LF?7F6(Y=%698P3y|5VJ-wh*tzt~V`oTif+fGNG7F3r2*}6v&&* zF`E{Q03|s;gM^q(3r2j>aUPO{m`w{tc+y)sA!gHp5uNmePJr&in-+}Vq#Zf|x({z! zFk+K_q!VH`Ef}Fm8+Ag=#swXjR85a!HZJJEq*9PE8y6yRNuijH3py<65^~0DT+mTT z=g=*XDk@1fE*SpJ9NwmoaS}H$b5?u;`ga9XfRaQ|3jGULX8%H8V)~yPp?|(9`q%KB z3SdI|=aOiBKRkCtNA8F375e8UyEyun7<__}dR!$1`uQy@fA4b zQlNH)n!O^em=4bBYa&|>JUZKjr9jMMW3Pc-Z#I}nJVf=GY9%!3BmAZp$xeggl8sBB z+wVdOF~1!WS-*EtV7ymt9y;Pgdg_qcp!E-zaed~xKO%jIRMvi&fB|gP);J zkZ#0r=)kL?;QI>eh{Si8CkCGdMLZ-bmQ7Z>&e0K7662#Hsu*V^k;@+&PIWQ!K0cg^ z@`=`+*$H6(bAos(HS(wj_^WTmUrpRFCWsEI`kV1ou6&L$!8tZy-E3v)NiSqcJk^&d z5aD<#`h!L-$4Z5fMS+Y?XUCa#f1Zk``ZO9(^$CGa9a*yJW7B(lO%PATnTX1fy_#fq z$8|WeT{zQT@#H-zmvP6$Q^`s+XRs_FpN^+;5l{83XST#sy#=?HmFOqzy9QW^elolg zJv^SuSayzyr!tnE&x9d50^b)yi5*-7&Fm+NHpkAHdAEhMGyBIf0|FcA8!yx0|BI4n zHnnU8k;^Q$A+>DAvXxC+2C?x}FNt`9+GFCW-Zw|ro%0QUw!^<)nYC^2D~I-R6jc_U ze=5t-IJDnZu~ay;4?6Pq*PX{A!&R9}4w|w#mhEqg;F_)Fav~mvhia ziw}i*L|f)^E;(tK<}smAk7(!8d-Cqu1~ETSmcpS>k7)b+Nu3rS3iXIK(X~%?Fg_IO z5giJ3w=NeS3iXIG)^DM$_)w@vl)Ziv`1nw$N0iCF5PW)JkQ% z+a%khKa(wDwqLkQet|xxN1=yCwJI3nhr*D@(vG-OW8F~p{DG6jL%kdm5B01wX&@30 z^{h5?4SiDLp{&7k#S4!7G;U80$Ge9wPaYNzCF`>vG|uyMobBmI3*Q4A9HNeJC={Z` zddFRuzQO+?=5{AB?7=lM#c^hp;Ujm)u2-;rE9(_aoP(iPR>-ebEoA-nEY@$&Zer)F zEZ^=)4zJ6Sp4E7!EMRb+hF-(ilhXF|z=XHn^QK5a)9Z0lLD-Bpwm^yGY`wUim&*acfJ*X*Krq;+tB z&_^g8n~uOn>}ti9V`&kmoMp@94Mq7cC_z_Ds;lG1;et+XRgu79PoNk<_nftD3i&+T zTTN&dE4D+fyw~0Nu%M4&39@4Q<*uQWq)#0=Z*ij#rz~kncZGHH6zbs|^0sc`hOaPI zY;QZRS2x9Oj!3y@kaB;CNI7H4Ry@-#IVGCW!nOO9nrnEyj{MCQLg2U%TX z-p3vxK4DS!Yx*AO(30+&R8CfnO%%suphF9~Yclq+OD9rtT~nY#M_65xxvwx*&aDV^ zXfb!qxP67OVs3t*BMXm{D{xKLzQR~3cS)c_hgV%QeqUj%ki$y8#un&M(N%>}8TZ+6 z8P^b&aW^X&*Gjihyk)&sj@Ejv@d9^8o{P&s@?V$r+Sh}hkPVVyo%Ai4wzB?ufj$3x zy--S_==$pgtiNhJ>#w`iN@-Rj=Llbr_oaR2`K*<8vses01%IttcE~y@yD2^m)}cE@ z)=6(rp2U4xPcC6P^WGiR-uU&=56%uQhu?(ftHfL$3(AN)0*jH@vfgt{ulKYoiqs1} zDt=NeZOTGeCggcg1a%Sq&`1C?+k(Rm^tYY)C#-jPsX#?9{~KQr=IpyEW_eRqeW*hp zt^}HmH^n&6W!>k;T3k<7qE)ULDaL^=D?dNhvRW2|D8aUyV%9cg?dQi@P#@z}kif2+ zVwN^#_2H@c41R)5-Db36Q#@^xL1p3 zrIM*jM2cD1RI5Puh8H&F?vP>@Hq|=Nz2SvTxiX}fg-x{*bZ>ZJQ*H|>W?@sU1>LJe zG7Fn>QAjZhn`$-a-tfYv+!0dD!lqgex>x(r!LS~5ua?Fv2s!*{#)MZoa^BEP!4X)E zezZObvHW$tuxT)jx3u)ll$RJ;%~YpIOqqURjPRW_Lw+HAFPyE=L!(j*#5uF%OJu(a zN^^8w=#=vKSo8C2GgoZISlu+@lR5ioKW3hN*PE;hJ!wyR#hL$h(|O`4eohHwPESP? zpBLPQz+}Di18wi>eP;%-5|<1e_XI~n^a9@_d_YG^e54~K=2BLPHtX%*65%_Qe|lXj z>hOMoLQenwU=Cu~foJ=dEE;ucOE!2897g45-Ap^7nwMNG;c)T_4_fA`Z$+Rb$E=N^|eZHncC&DLIN9=z&rPB0g zDHKd18T;>!RH-36zxDYiFNq7?6PWbgcWkC*uE3Pq2AgTA9R-{n4ms~i8?If0DSg+x zj@xY0hdx{0tKssP`)q@7_&>IX#vMe@U^riE`T);!YRsO%nCJOykMKn5BL`nO?u5C| z$JS6)URhnc+P12?rpi{;QognxSl>{$x}kinE!*YxmgLwZ-zAq^Vk4=%QKhb{uB@_^ z>q52VYpbSCooaH{l-D;_RoZ;jYpZ72OtwZ0g2<=%ii(=@#=Pk>>&qK_)fF{W&PbA} z_pA!L{Hl8TY5Ps(jnx$^8+{G*Y1XWjMJp@nYWdYv;j`5?)zsK(>wLC#(4rhFaGTkC6BuhJW;zSC4KjoKRO znr&BsGZO0>Dytdoz|jn%hQW#*GGF2B9a8<>Hp*s)YXMDEC2%dAZZ3UpZ}hZr+uV zq)54G)BdhuIeBJ-*r!dCHdgY9{crqGSe>kUBKahz`p6ff7L!TUvq6$JY~bI@4eEOs zthBAL+0@{a$;eLA4XW?_ux%Jtk6<>eT**IaC<<1t%&~1C|5SND)L6!FE1YC2Q~AOj z($6IoNH^o_k=Caf)v7|0gKQV;x1OLL-4znZDc_?&_d}>gYFr`1LmzF?46)-(BRo~i zf8z&L$^%R#RSlA=M!sjS%u%_?5UJ;?|DKOgA>(9k^3|=bs;z2(_$qA`b#Tg?*4qry z&$Ct6*=jW9OBcvrR99KOYCY4p%C@$=y4F@xS66TI)!7=Gs(n?q^>s}Rw%V$yO3h9$ zs;;f5X`;$G6^*`1Dw>-XMOD|qDyz!Z&P@xyHd7>Vf-w53hN){NL<>x)rE`KYnbN9j zeX99v`BL7nx?-}eVoiAiT%RB7a%|t#RWh!$J8M=&U6ao?XO3;cX$g=Cl2w(1LDtNs zD(b0Tl`ZYe&6CRc&8M**7VKL^AL^TY3y?^YCroObFj;zVeclZ@vnAX2Y*jS~A&LmE zky68Z#3Vhns2bTFsb|`>Fem$apfS=$d7G_BUZJO?#A|D4s;w1);#<>D*R*<#t!f?O zrqNbjTZw$-F-c1cw`&uj)`V!PTcrqLRdqw7&sJGgQC`yk5y2>HE7nL;v;*I-smeB9 zXKhuBFFWU|s}PY@IlLp%`NY2>)v)a%-W6{_i@f2l13J7&eQeI+1-6m}wnAsIbBVpw z>98$udz?0%cu|_^qQ85#=mEOORtkMDonKPCv~y%Yq_k4kCub82J zuB~cpq-#@Zs%lsJ)?Ae<$kij;^|QU@C zloT&;7cN`kbhwxBa3>kfXgep#FuVns{U*~zw)tzSDsHw3B~{d|t#4qAP@N1GTV2&? zP!f|uO*-4fD{5EdUUu2_mrY-L{Uw*&APOQX;;OnPrX^3PG?H10TVHIR3of|L5Y2;sW#R1+_k!_JU{K8tbeo- z>0V4br}g}d#4X|HH^wbd|5o2pU4QBho~nQDdDlfcc#&=1GPlR!E-th=mpkV#E49yq z?Rb}z6fUtB@giWRA`d(w8*Oj|d1$Y;QnG!>hbrGy6JqjAnB0imtf+$CVz5&yDim?X ztL=?VHz78M>GH8zL`bK}KdnwGCM&Yh77}-5}8#Eh(R(Ne7p|RAu9GLs}e;PYleN5Em!B4`o(Iw^iqCbM8B%n*4H)oY^!VP zZi@VBJjqCY-5faI+2DjAZgvDR&UQ$wAYK7JhG66wFV2~zI&RPmBt(CulZgsI-70^=#9LI7 z$yVxeFV!*#IL{4v6g%AZ;#sz(*Vw&Yp_h5rmO7V)<%LMk224}_YU>!>3hcK=UX&qK zv2AB5Q|`1xJe8JLu0!-Zf`XU!4ylC)|HAKT()!E2~;~w1)Eayc01go!70BdimYM>EOk91AZrfO&lYEwP%C>bez znmT=zt!N%8M)kI;h6aR%CWF{oqX|5QVUOolR#%8Aj-47~tTTQ_`sI51u5848Pz9aD zXDTT92ePV9*uGbW0Ui#~ye0GeiouZlE$7c={LM6Qf|u|2H|W0_;5*;Zf29Ua(&W3% zc{S77w$xo%%%!(WoV+T2Tqkf+O;egFO$hQ5E$l>2!b>Y{iashXy)-WmW20W!2=r^a zxk{1Ocf zYNyk5hGuJ%rcA$FC!8WjhN{Fot)8XsXJ!}Qt&_C)k;O_{rca#XR>Ud1Rh3Yt$M9k%)eZTFgXk(XiLj}VKJ%1@KB+OL=xk{!k{`pYYRX)l zO=tQRqqcHVV@`ZNVfnS<#E}uepF`c6ma|pHNPW8SRP-Hj_^1++A(FnfYHdaR`fQ_- z>vM0IY}972tP~|FJ7=;gbcvL&Ta`^mq`Y=a&6=er!(^NOEl+EB&V=#%#KtjRpyDRt zUoxhTd@;OgP>(OB0$zv>Evsr(b*(T@UNY1s%-gioRkEbis zC;Oa9jdQ6*lVP}X-!pPY5~kwmEpHIg{jO=U=?2sFGAG{u-e73_My>_tuZF*E{5=Iu z@bdRLe<`=Z`}iy4Zwr4r`0FE|;N>rqzm>O9mcPgNdxyV_+o=;Mc=@a0Z_;v`G-*QK z&t>?u>#Hxl`1Z>!3fFN&b5+9>YO+CCXs~YOoD&fp`EoxOg3FofbrUTR zZa{1jgRkY?8U-`eb-d^s-{YZ zmN@6nn&mZo>iU;c{0#c*{PLQ*2Hf#Htwt=Z;L+jGKbd|1^T<2(J%Z>66x~8k{Dt_(*Vp_*BDMR-vu3GEmjXJPIe6>Xi;*s!*>d@-JLp z-j(46hn3+HP7_Q?4TFrrtXb8y=o_Y*^7TBhxb0T2H`SN>)|g}+!?dQwv}V0&%`K6N zjW3btOBJ(W-kgkq|{#k8)) zv~Im=-7UO(vDr*{Q)fw#Nm(jM@^eA)v(HH%*T z^+aedvOgDCFvnyn1J1aL_JK9PF5njF-;2~E{R3vev-*Lep=G{wA~Xl+1=aw2fjb2r zBwsrC*XR$h>x~m3pZsP)bUQHj%@d&qWI*3K5jqI$2lmVFw@-x3oFsS%SPHbgdm?l{ zuoHL?*!$jz&}0ksywCUmJNr(A9s*_tPlS#D%RZnTdBGntE`;y*0!xAYzz4?BkE4te zF!LDoFs}7OCqk`2uW2yUO8aHNZNPfq9O~%>_5iyetSkt~W=2;BZU_40_o%_pcA$6k zVCV>N2e6*@4vj%J0Xx%?O=nS02K50u$I=eaW*rQj03JG%_Bg|-{%qtL{mMOeFl0WL z{-1{o1ZDy~KpU_OxC3|}a66~O9+C9%^y@szeS>^J+l0Z;R$#%T!BCgLse_>c=%#@C z$@=9vfuDo#olbf1+b_d@IG=ifGX!#*sSnr%+yd+c-UmE%-=_u2Oe597&-v-7NZZ)?=s+CU_I~vuoYNIePtzsp@)F2z%1(90XzUKSTY#e zK)szyX&2a4Iv5&9ef`TQ$9%F~O}~K!z-_>K-~+%`;A6l}U@vex@Eza|;89=~FvG@k z18qRlHP8nz6Sx9s1J(m`fnM?#08_t7J-``2({l0y`+-~J_qB{SFcY`~SP$F_Yy}>W z^y?@;0X#4l*ahqX+ODTxz|0lcix)9oz<%J48=$+1l)sVsf!>vap%;L*GU)7E^sAh4 z1|GVJ_X=#~#EUr>gRde#uyYml0}riXJhLfZjh+SU0=59Rf1B|F9wPp#7g(^C_s#Qq zfe!)8fIYxYU>~p-=#~D~G5++g44c+AiS!0^HegrdU}z_>-v>R@A6pae0q9-Fe8}N< zGx>mJz-_?J7U&$_cMQhUB86xa~X%<(obOhzw_L* z)A|r}OnK9PP%p6aVfsNm-bZLZkNm*Nz(YU}upd|kG(F1v17-rZ0KLHbfIEO)^81g_ z9k2|TF`asV4q*R(k{{UHMSDQoUfM$r*dAw`fZKsPf&Ja^9r^tPd;$4zXg~7{nA=M_ z(DWSrx}17|Wx&n@&=L6UKr_F00JDHy!0o_-m(kyWy}-;X$oC5U0d~I1{0Fuk;ynP% z-sHVqNx8QuKa+OerhVY{cXnCi@DT72_O(r1nvZG2R;Sd0Xzik0)7rW z1k6~#a|3Na(>tNiOkh2*Retjsr-3QymL;a7mdvEDWsFJfOd2EN)-;~K+^0^2n6i;i z;`}DlL~=;}L!9xGYvzk3bAcsmp*6iZwbk?w7tFrovWaju-JU#J-(x32se&**s0XGM z{PogaatyAX?@xh4%}}2#{OkdOE#XBKQ#vt?Q6QN@~zj;3sg8F`tJkOGKXUaT_EnuE!$=*83Zpqy| z+HRTIHm1R)}5$@JK>Cqm!j_lW+jj`ok~Z@Q1X zndri6WB{q>PH8)k;L-ZFI_lWJ@;V5ot@cbAYlA^j^QT!zgW*acE0% zSZv9qX=>c;mQ+W&sfJ`T^*=z~Lz0(v0?EAUtun@&rJc4>3oW_Hjx^N@wdg0Bm!4b< zs?cJKpcbS{rUfw=d%7bYp~iIsed~GjMCg|ciupm_EH$2DTs@YqucwSjOE|7>8CRj9 z9-d($_5@m%Ri$Kg#TsjrKUw_}&c6&vO@n16H(oe|n}#L;H*Ckcnpo{q>f zr9$IA?3vXg`uCkkKkVt(MEdGv;H4ifp6fx%seYvW*Za{)KkhqlBGf#h9}SUyxKux! zYRncH{ph71?@&(l<1S{;e{nprAeI+i{`>o}oc@o0&U^kW-zV*VM*MzkMM-W8<}w`F@$$}33; zJF-CLn7r#5GJ)vJVX5;UPf}+rKP*drjv8rY7&m0@Os1+0qv7w&!6kej&fC|8pJ!2& zw?9b!Uh?}SzdL?@CSPsI0>xNpK6`+?6F)x@+K?!3MU>CFNH>o$nOev@m3J01PKoD{ zH@Q3ED8Y&3nY`4s;)~OJCYg7wdgQ)bki)BK|E0{-FOGW8%YS zwj9sq|4U;cJaZiVDuCzr0L^t6j)`bJN-GO3{mChF%?$rYeGkn_>#q{b_!#~@r_lRK z>Wrm#Tk>ZSdPhT)KHNk8gYV$SgMXXn#`OWc&(JxeG~=*zCZ)WboUjifqE($osIw2> z;q%gmGyZ0sg_f?Qlr@RzP3f`1e`aPduh97u>070wxh`P+ihS}B-D(ZEiQ-=r1mk)- zy48J@>7tBG9r(Ln`(Mnw~3N#-yEo z_nQYpUlZQiiK8PrF7&<4oN_%c)-Z8o;O9_gCuI)eZ+%Z>aDy%r5W8S&3S|s^z0gvY zGM=*1!H9NlS8X1p{MNL=&^M$_amJ`Nonj*?JvU`Ve4EnG$vjibSQZ=LqvomMGE}@- z+N7VyN5}QkMVaLmlc_XoFw`93d-U;6$v=XI;d?2cCnmQ=>0au3koJ$BGZ;E1^t+cH z(PzV6h}IW7FR{a#5?6>+(e}bo=^r*oBKjSNaeB|?@pP9BZrd=N_{=-OiCQEd87nWi zgXjN!bly&x7Um1DMt$Tx-viDE?zl02Bjlc@%SVP$A)1w*CkH4$ecB* zN)M9u4)V`yi|<1}xEgR_o-&bq<}=|>;KDXXTXM38s^+Jc@ZX+(wN%(nzRBe4BHuq6 z@5GpQQ9D_T#G4tV`7zVZm7Y>a$HXk2AGVzx>GdOW-8c-hFuiIRW`6kHK14qbu=epa z`XnC@e?8#Fv99roAh3T=F+W7l`b|Qig{uAZGyB!Ml3Pyhr#|JAG1{0x8?Cha1{D=S+K$g-&C4Z948gMQu^qi|FX99ed*)- zlVist%9ol$0%rD^zn+`0$~#k(Vr;M$^qj~pR&8~>nXX~= zNuOUZ>I=6kW6=k0@9z_jr};d_n>*NI>y>rpZ813EgYw*+;AD)=*TJ=vulfeXvn0Kg z^zEcim-M;e^eUB}4X%bdb9v4sd^Z(Ge6r~E4H1v*o^Jgv?jdg_d2f`wd_*UBi27wb z5A)sp7Bvo|IcJ3C*2BYMEn$1QjLQ+~EQ4-Pebh&ALMSW1p<=0z;KqSl4(_@bTsFA- z!C^M458TN#2i$gW!+hCDKYZ=TY(sTbwvfE%8uH7U`f8~mPB%_o5*`2H z&&b!7>_ZTX3nbO#11Fc!wXjA$Pk35X)+OR;VpDHT$cLQi*CvvIvXp=fbXmM@V>XZ8 zIx1kkGvx=&Z<;hsK414=y+8Ht8|jx*`8B*`m_eW4CZBoP#m4iYSGT3$B2WHDJsO%H zZ6!|&b(x`+eBm9eYmAWBQNAqC;K8G^2V=gQWre5k^*@a&@eJ;+{g%|F@m;M<__Pbt zlYg2pK@>*e#}eOAN&kEK9wR4CBFB;g2`e+?gv3VlQCH9D)%E>^bpMWhn-^kU@YawH>;t5_BWZ3%DML7(oUPnYstK2rBn z)ZIhfKbN|XBhgM-_wJE(<0+Bn&A5<$p8oTm^gT$Q%IN1ivj;^-CD8MZ;89M|y3%?XTs>=k#eibuCllG$FP=c(zfW z7jAQ0i;sv3%-DNqe)8AR59SVrN`z<87lUUd;=3+c3;jl7{fU{aee@fozJkF}Ex%*r zfw3m0JteZhmrL>kd4r+Zj77}2M#rHf!8pJy<()`OV(R?C(Dg>y5xm8F=7_99)2$(SGI@KL7cy4nH*B$eDOR$6K}6OsNMHHC{ax8C(w;o`Jtana zxBs7QZw~Ec(8L<=VCV{YzDc^h5%X*r^n-O2XByID>90r1FE;us0~@8!|Mv08roD&0 ziM&|CJmh;!TgYnkE}RT{7HI#1VkoLQ9G^q|8prJVu#6 zN||%w$|(P3@;}Fy@sjTdWn4=KLyJ-H%^x%Iqt6r7Z({w2JIpC(CHCv9en_1Kj8EzE z!H^RNoB8FF)ETS8QRkDVs56r~w<0FIjCmv9e#=(#nhUTy9=N-XsV*9>* zbjll}Ef0(?wCot&1hiYgOi0X$c^Vnh4BDMZjAJuvbLKMIP<&(l*wL;Zq}*u^jM_T7 zxNS^|XLK5|L^1#^l$i;$nMhy%Z>%3ZMB6jB4E{g0ezcr1@k~O0sAG?#F=t}^0nCie zqo9Yj(H^GD50Ll67Aqa;$+wKeDxaUw+YX-DS5KTRve!I2j@}Zj3l++`&<_&}9<`n? zb(-mKYlBheF%*sHy!hX$vywW!ICr-a&ssn~W9mz!BOqZ@(xr3h@{i5od3r6BSAQ}(IUIgY;fZyXFgoaDAoH*-c@0WSp|X9Y%ns7G zl5UoCK7!i|Zp$#-0dVc$*c#@Pc#eM--hpO2Iz_8 z=_AiJ$pejykRiOl=n7X3+EXv%9cqwZt zAnOB^E2W&SbxuewGe%D}V9pCkP$N3$8@63n-(BpA*9U_k>o}WeS zHMIsM;{WK#AvfwMqmCnY4~Bjj|K8v)u{Ixdq*Nw&Zwu0;ANNzo@*fU{<|1ojo)y1J zY#ocJBP~H4^Oc_6M;)aO{)aQ|1|--&~KwhH;Ly zI~GGEchI6xz1F$3pH1!}xaSwq^>3m7HQ=@l!%2*OCpgp+^~vRbC%C8XJAIvB=FwC1 zbIm^whW4kbmS0u(ZIVL7m^5&Aa zhP>ZTl(#M#gC*m-g1iMkjUQKeMj!Z{)X@{Eg8?+wpA*?N4)Q%fnNs#4d}x#zp^rxS zvaE0Y$ue`%h*{;O>`}(|1ogZF12wPFV|9wU7FxEOQ|?O45xwTv zPhAIp5>Jyfq2yx*3lN?E5nWf6d20iAUkpy@cLunlysy)xUk_#KX?Gjr`4h1h960iM zFQ<6VSK~J*J(;?aO?^A*!$kUZI&=0N^0tuoZ_QcJS2B6PBljjApUI?c-xWVT1>hcx z!O8f@9-(_^@9!C(PWm|G;lWT+y3j3)Q-6DW3dSUS&#rVCp9Az^2K_pn@iFJ2Kauxz z#wVA&Cw@F~eB`+$oTit0{+{RFLcyBd23>r3TF-q-y6B}3kM*41bDtn@<`bv)+}S9k zGZH*^CeJN}y(;M#^^7fMVbm;6J@=hG~ z%rZ1GRu7Su^{nySN@q{*mVuPCUed-VC?`DV2x&Vg*EohBr=DM4%b}!{If)sm(jle3 zIVeeo4h)7~rR|vdqP9}3+`?8mnwX)f`h;e-QeXX>@i9xXue%1EG$9|!_Yk->;4V=Z zjq3r|9#eJ$X$Qfzf}0QTjp<)hN00Vzk=V=g$DV|tI1(!9ME0a7WK=S=h-uCeU6Eh%Mu z;s+JSfQ;|BE11u1Lm_^ukF=2u?sIT&$>fdFPNFuJsWzTT{IbKbGcDA&?I-LTM6Hgg zFVVXxwshT=l)N|L*eKgw`rJc(FFZ69*;gjGgW!6>W$;}-y3|{tYdccSMpoad>$`roVha$d46>BSPddWZe;h_+ur#>$J zSAts(ZdM6D5{+G~?%I_^WN8BRg@KdzutWMYDipf+!nnH7^Ap5X62r19vF?foRR66ZJ@sT98Sak z+x0Cz1wWD{BGtdAs4p`&6lxQLD$zJc=R10RQp&4|NmS94^lyAV@AL9dDDQ9c%OdHY zgw7^-a}nC8p}vASp@_XFZOFdfIpBVB#!31dOB?-3DIX?oLyf7>UoZ7-b#fjD-{m8; z{SLS-;8-SAdrXA3CGQFFo#1i*s*m90PWcDHO)zjmzp~f32izlR{D_WgqPbdPX-!UM zr&hvYkh`z$N|7!0`;Nz%{yx(Zl@*zte12QZLK_nao7DXdV zvK<1E4;chLw2~me_bu)5Xk^VIX|yvVW3wS~IF|s41B5F9oInVK%Up(p#1Ua}3<<1~ z1rm|~+He>`0^YE&knG0$uUAzw-90_N@JIIh{kDI$UiZK2)vJC-RlRzzdphiXmhXYr z_^I2rwSg}k_W6NLIc?iEga_?G*h|1>08@QN*t@_E1_qO853(0iuxQo^?0cAxg+3<& zH8KzDp!LnVa5c(rij)R*U@!hy75X^nabzzpLHTPh+_vp=(|zR^b!@S27Et+n(fBGY z2XBkig^zml5_)!e=lhoH{PjWaf8PWQL&zRP_hDdTz%)KVSR=5X1h56bHUpz!Ob7Kj zdT;!nfbB~F^lX>(xnarg?VsmKezoy73;ui!_$YX!2ng$UcHVb9y?eX3wk;dh>Fo2q z1U|2VkNT&?4qw%YPsf8D<2*6ZxX#;?%%c^~)=B2`mCoyv%=aDVl}YBkD(7D(neR+= zeml{;JQ2jmG=1SR43NnFU*Fff9JzJx^Y%4crlTv-t?GHtMQ*4t_g66GjxPT-a$|-0 zju6j32AP&SUvkV@&ZUldDRL}M!Rcbhj8_o+ZiRD^WB##{&ev5s7dqxadp=g_yijS* zagg0?`)Ye+_QjFQF-?A~!uhYt$Pc4{uc>sNsEll`#Ob@0&aIBQ$#K5pMDL?4&p6Jn z9P_lg;0H66mhPtFn3ZF zK=!$j)|sD2H1$%)*-&R5oP6LF`{0W*UH`t1xns(G73bEObEZ0%)kS_d&B6J%_Id)X z`Hec~_Bvw92l0F>;%tlH?O5={<%hbi0@(D1E->NhhQ1x8qTol1M(CMwt^Nu<0z36DAd6nwny~-3$ ziT>~>EB~X?e1Yh%1U=3zm*3Z1UTbcy1$s~I6H%N4jonTn-V$|w9yL!yN#Rf(91_`o zG2m+>&JQDz??-UDCF1-pV$LUG?{n510bsH7S#t>yf#1h3s&LM$G70zbI z{I=oz*}j{GEUFL3bs z&(fMdM$KK3=C`Bf^@wwO)ZA9FKagKnI6$^aEyq5-*g%LEE7m#YPGSTW`oDU{%@OSI ze?=a$`nf*Vm8RtCz8(Hlg$|p%=d*A&QB(pZ57VLlg$lL=dsD=tCjBPMAZAb z3fy>TqJxWjCV|V3CZ&jSTcpKx?w?{-IM+=v+aeBL8-ynM<`nZr)VX7d`C_H>{VC>0 zm3PyPHPy)XC5&o%w{Y86KX4raVZR=6ohSE!w2$p$eo^6Ezqk2*w13TXb6chJXr0;Y zIOk8t*G!xzr<>nYIh&@NpG^2-1VlfbOgDZ#*|~JOdAyp=U!CH7X}Wo9igVR;^Jop7 z|Gwsi2sYqeHr4swbaP$I!TBvQ=i%w*IeY$U%=wpn%=6PI^J~+bo9fK#dpRiin!QPi zJN7}<{9qqCg_Qr$>%3WO2AnOm<|`G>3$p<^H7y@cdhx^1Ui3if^%1`d21q_|9PTwN3FSOGM(Qw*}1LO{KlUDezNn=HRiQy z;`#5@&hMs}$7{HEOg(8ie1HmPW2O0eC0qeW6at+x==@-sxgz4+F%9<4xp*37xh-a% ziJpFQ%&e{Y)N3*GbS{~#z^gIil`y=@9s|8|*0r-4mePp!4JSF<( zhDh64#%zi>m)02AJ!AeHalTw*9-!Mlgx64G{zRu2pqv`>1A4;8qs~<|=3IJ04BfBP zVCdrXXO+(7HRfV^tScSoq8jthboxujxv<7uPLFkcm2-ZL`8l0p+?-ouzDiGc^91Mf zHRc66{p|$jr77k{GOKq^bS?(%#BWzxxv#De8Q-oe$oQ{y1sUI}E6DiMx`K=^))i!Y zuC5^Cf7BIZ{I|M-j4#v`Wc;tXf{eeaE6Dg-T|vfebp;upt}|Om+&@fo{-w^`Mk;T^ zBcDB@+he*wBs&?=e#x^?r!W8FEb>@*N zIDK-8gAne8G|n!oabB-8Kc>@XYMhtr%$LaiUt8*BD8zo&P=~_ugCEY4%{Y^~YDd`$X*GoDsY3!R!*Cy$(r0XOd zlhoYIbXz6mE5w5iJJ_Cfik!lk2rl zan9J&%7IfYXZZVk-L{d_u`xeg3_g(eXbfDBN;zW(^0aZQq?%_;?|+2vk4viemj(FM z&*1u6b|}-Ym2}--U(C|^wj{2LKZphNlD z3;gMq=h?cE`3(PnQ{^9fkgvz&{(4Dc0sd>t@ZT)_>wm(0)=8@T$3_`9f{*{0uY>%@ z%J83Y1h>b!r#N5z(~?R(7}_*Nht`Xx0r?I6k~@xI{r{uzUoU*eB<*}g_}W~Er%V1| z{ce{0W6v>t=ktE~8h^fh`LvW^`ZbDy<51kj#68!TQrlw+C+6MD_@qXzU%HQ<_pju- z|4^>S56SgfN%xoZUAg~Zxz-pdK7E-X=xR))=x{hO4`MBl4vodmmV!krvuQrx*I4*| zd}-<=)r6(QzWJkAJ}JgD3S)}#(lLP(W8=Iy-+T!JijPZBQRRNMmhV&epAIb_Gd+7K z9X?5JpAYqHp+C#@_-B}In_R1$_$;}l|LkhMkKb3e*Pr9dJ^pvbk$!!o1sr-gpS4Q5 zP|}kn?UQt+q!&nfrKC4Yx zDI(hZVslJpr#Uy<}3Nvpmh?KrDe29UZjf}7q|ZqD zilpyIT6LwAFX^F@wo1BC(vv0alXRt|7f5=gq&G{tLDEfkAsCl-7r+e)WO7elfAp-+zyrKmQZ;GfrBLAFCRvpVffhEOh5p|SaJhIgWf>FKT z$0r)qCw_bqzM<_!_&jPR7xbI=Zq!s4^t>ORVq!8*{dkRO3+W$GQ)@ay@u^1bhM!N& zY!!Rr$ETTL`XFZDh?>33__Ja7-e%&yl>usldfvyVee&Ln!dj?Z^5fHu3HZBoKMLy* zrZ1z={%T+Rd|({|{ge6ZZ|XyFwVp*TWS=X|zilfbd`5P+0`+We~G?6 z9v5og{~9M@e6XZw`K-H}8Eh6lx0k^W03Rw>=Rv`8n*!zDSEk$+;j``)f4ScjT<2Fo z{xbvokHL5gdoFS_NzS$?PH^aRHGrOQowo(~HwXBCx(xs0g^$krf_z#6eCYeKVR9}L zK3khvPMz+}0X@m7^T{Cp)&Tz;{FyNRUBYK{p}!s;E`!H0e5l;9A*Q$QfT8}5gJWjp z$ur&tx#{RdxrFO{Hz?<+!_?3cdJRw-_ z(SdSrg~J+F?nBD|0e`tig5H)Jz^@ft;}^klKN%?Zu^p6aM#IYu;@?$yWS|7gJtk1@ zt2-#S@rm$qgZQ&juEuAAOO4U? z3gR*Fp?1`GQn1{%K)G#Y%8d&jjYkFf%nk6N-vSP+2mEBGm1o(_BDf@{3BE3X4+|JA^+{-LpYTs#|OZ8BQ>q)tfTKZBy;U(Z<^8Z%&tbc*~kKKz5UbUEzTK-!Y zw|k0#m#c>(Kp%lWQyJp7gq2Ib%VbQcUqm1CikQDLL4WuZ!DHfYV3^y3e%C1y;?JBd z^!o+;lZ$}Uj;Nr&bgke)|LP9Qr_?Wc1o&Pog75Ehz(0z18GVM~F1dRq0uW*JYb_4? zIb6>vp}$q|HRSN%&~V@jnFd2BO#alg{tk1lPEi;{O*o$#0%# z#`b-3oJIf-+P39tNmDqG4=y%$ajv=k9~xn zSIn|mC-kvCM(mzy(BC8Yx>}}JkMmi<+awP9aS{s0dlu(&@89F6vizM#F(1`GUjX9EMD;$lo(@bSYLfI79u62aR}VBCHW1$R~o zKDLzW+3rsTewE;{txOMdZ;xA*|C4-ezsrf!M+6_fhw;}rF;5Gw@#G@}r|)wfgk5_Y z_tidDg@>hfU-LUAq;KZZF~j0~?)|%>41T5X8C}BiKOmVN0Um=M2#(*!%kZg!U?flH zI_9%P_{0TY|26~q;=(C{uWe*{`VJBuS&Q?z_wS=+@Rxy8Khe0R_Vei8EYJEOu9!Aq zc96xrocVmE(2v>=6&qvsSL9q$0Q?Jnyk&^Y#>AFjb8mmH12r=i7k{;RXsPg%T#+Zu?&A~AhPYdHp}wUcNge*8MxI~2Q%KliJ4o+c;kAeyNDBPQ4E)V)Z*yR zUtk7pLjRKB8uv!E*yE3uzg&2d>8Pl%`Z>blwIL0_JvaHwH7{PPwY67xCgf7*kjz%3y~+8 zv9Gj?^v`CwcPwz~Ke}FlX0pf0z)4PBU(t5Y3BI=7-;PgMKGRL3t}h9nEx<|6SS8b| z{8M1ai2pL-bEME8E%^AkOmE*G!M#U;6Q6qeVGbNx&%YFW%~Ga+$liq=#E`T7?O4W} z1fLE(tlj69!LJfNZMQH3`b{G`9uZvEhqQiPuzc`b6S>@jnB3H2VIr*Dj{>KDqU)X7 zPd;hsQUCWagV%-662X^EV*Y9`(v}Z$%eoHKuRT61^y@_5KFQh49fIpRsmk^P!N+CY zNA2wE!e7@*@tF3Q2!l@YkITBz@q!-$oZ8EXy;v&vCoC=(p5!FUCuVfrSo{Bg@Yi)J zG`Br275-zV^0@n`;NMbwlpmDdi>0F)4gmFsw&(a-s?}@)PV(z|tJeRx&}+O|$EkAw zKUYi)zS{i;!Ruw5s(oK1_^|jn%IEKZYa6jd{P!lIAFXBi>6_7XJSg}&3S{9pN!sxl z!DCl4ut@MqEDULz+6?k%Kj2gky1sd~;LVmE_45D&X9~Ww44=OPPW7hijoL1sD?|T1 z;8d=z-{*z@81S%qsKDox!sMrKs!_RZ5--*E`V?^DKR(8cPZIu%77?G)IPj&GKkUef zTw$$JZ}dB!R?kR$SljVu78j$*JqAsyEgM z{hBSvj6<5;Twc%5yGGWfb$s0gocL@NKm3=J3CGC?5q-?)J_<||?6Cqk(KkND*Ij~7 zz`(Kc{DOg7_%Y0HfZKYwoh7mF8-nCrq1SyM>Q~1;M)ak}$1IL|uI38XezidGpdafh zzKP4laJI(~aFWyfny+UvJM*^CcYcxqnXZ_94rY4YhcF_1T7lc=5_@ESCjj?)1UKJd zLX~q!=^L28bT4zg@UQb@zRx+#`XL{Odo;e3pp(-w^syu@_$!`cc8_ zUuEF8g715%@G;CFDtHrcdM@4n@~Geo1UDT_ulg!$aUt>~mni*{Oi$lkpyT(zN&eBm zyszf4@OD4l;^=QOj*nTrNDxq{GAOGY*`}UGps_{)FVA-?ydb8v8B-;vSh>1@DxO_IE=6h~UdM zGC;rCL&x8OA@OOvnXixJ#JmamF#SB^2-ZuwpGEb58}KkaaDEy5YKy}z9LM#1w3NFM zxUJ_48MnWAgnOTdV1&o+XZ)`?G0y=fyRa(YfBqYAdaiY1Fx#a+f8?(jAHJ6hlwoXI zffFCyC#BCt->RW^FBLVJ=6gx<_&0aZWz33yn2o^TY)qx++NCcN&mxQDTv zz6qSkZs)x3pGC;p+ zN5{S&=W^Fboa8iyO^e{2_c5SxmD7O}AKizhe#nT>$1dS=?RU$Nb)(?pvVX2p_&*1n z>R~kC54>&hn9==yI0_?IjnyZ|Em!c-rA+tN#BPqIn)GzRq5l6fS5>ALw#pr`sAy@Q$9-#*1@MV#dy z5A>4*fQOCKvw#zywJ$Iq9e4Dtk}&!ai=#itzCrqy79I5a(lqWmS8zMhH!|t?v*1Dh zcCVRCKPLV5lT2>r04I5L-y_t5J(dW)?x$4Q(!k08(S4LLp+8&bM?cQ;j0t{+@YnsU zQw4ui=#AJfc`Wmk&1J;)fIE=9u7(XEJ~Kt|J}wEmHph{wE5)bsk&TbLGKY#fKO_gxQ$0fm8jr$voQr zb^z{u%hC&xCwZg{{wi>47v2A>^-MoyNcCVo$>rK_8i3!vt&ERe#LsoSlyRisu{Df8 zDvm-Y@M&0=(R~gvzHL?r{dyTkUBc%)OYad}PQL@3o;TPZeky#%k6^|ahW2<#@X>u3 z-z??6YjGj+Bui%Ta}CS9RqG)IoXQRA!_NRG{bR(g)eEm{gwNPOpKF1WoVp)%Kf!MkK6n?-BJ}+@ zIwsB`{-wuhW$^PYUTf+z+~C!cb)Dc_MQ|P0^gRcXzfI;H2MPTj1lN7S>fe4E{tv~m zgK^qk@r#yyk>$7Fzyz<`1Ya+4QEf;1wgQ#A?oBT66={I4K;Rhq=kc;`DB_qGK~L=- zoVUi|2oay*EljEHxIpl>FS9)MJDMP&Zy*qTr_3W%U)>9w`0M^<#eZq(Rf=NzhVU7E zfHAe#`$HjHdG6(MZ{WnxHw?nsakIQ1WWzd-xXcZI%Q?7|g7 z|7*b;A7enmh~__m+wuDw#?KQuuQ*2J7yW6!Z3L3LfD?UiJ?jafU;k(3L%*R%N6WF{ z&%4y(7%wvJ{tuIze*jMWb-%yX|JQ{+wlDW*`&}C3c?dYw!?^e}^}^?0gnnI|1(9tc z=6Awh_jhYQneZuo-nG&nU{>rA7krJ(uQk4UEO6?d!F8MyEWKp*Bxjewp9OB8_bHZB z{i{C!pXSN0r$@B0oQs1-k&%?cpYYO ztpAFisr`Qea69f~9HoT52RJ?NsKf#6??vL?7Nr-xS0VHh<`bXNV;*qgqwh(4NJ#n= zzcpf!F9?3N;EjhcE^62OTyT94Mf>?Xz)Aj~-JG<5@%7@*e@yrv44nG^szCprCG?$A z52|nH3BF8l^@~1jabfC7J}2}+dwsd`5&a<3L~~;qJ`W208tErmZ%>q=e@*D|qp4OJ z`&)=~)*jw22LY#kqVH+IGTGx;OAmc@H}g4_6O$2qSnQ+y77ubG2g;2VLO=c@6YBip z;NzG+sLvMwCpm-b_-3j|KR?IyM#Vye}8CkVd_af z3J29b?-mBnmwRUkuJ6sLzcFrc4+A+pyo1}lQRa!N2ik#CJ**XjJV)B)D}o2-N8bh> zHr^jDga6v%;D0|0vO?r}Tkv7=dljF00?QMeZyp7_Uh;aA4xtaOJEVYz$$7T&U(Z~| zg<14OF1JnQxoTey5xj8&_uC25&))zZ#(&--Zm)6C8>%O}1YawGCHmb%Iz|Lv-^?BP zREEttf;V2rxcvqd?p*_%^w_BQ?PzX$+$Ho|196Ne1z+iH z_uaI;dX&#BZYcZPNXU~BJQ!Cw*Ww-l<@6guzfAneTERzwQ@LBk5y%OC=u)Y-xm>Q= zuXBJ?y)_=mc$d&$qx3Sd(E495^!nc4?}h#u;PrCuOPL9z*(7KV0~KS?Jg8$M~Cq-vfM_oO_ekg->vOaGUUH6uW$c zWSWKsqWWnQe@VyJ;lRWAj{v9k4f-2vE$)?s&+ioaQJLRqyKF2&Zw6Dj%us4oYGrCD z@1|BI28Rby4auZ&k6W~K-rPm5n;Ti~cDRFy^pJ5+>&`El?YikqdMKU8<&y6FEZ0r0 zS{0ASo0cbX>7<*>XVXI~I+ES_cs$vk$h!G#BAw55B-^_a_|qP5au>VF%n;~ClKGBK zKr4IP?pbbkzNxV%Aai0xLpqmDG{hTc?V0jUlmch(sK9tjunv|d zhR$e64iA5@g3N3T$}y5p59IcoAUoRv@pw>>Y%0;4%CaQ>?lP3=MK98-n(cNiM?XlV zI?~OoC zvB-$Y`5^0{X%D#{J85iZLb3Z>KbM5i$exCY(+RG0?!m;sKxa19mtGa5=}Y9uC(bW`#zG+r zyXG!#ciWdNa9vy-x8x+Z{dfV7U(iK@=Q3`8VyJf@Wfpw80W2F_cg3nz?rXNyOJLV%t&*J$7hCaD_anl3j@)!bzF0pjs!tVASw`cCWMeQWYFkJ3@ zpPTGIqpj_@MIH0zyG?kbUq@+w4+91gL#Bxop`)F4f)%f2-(KkyqH!4GODC zGc$)r^6g0x`IJ*!5!u?l7OUl(sS4UVPfVsMhv!DTF)=)x8tPpFj_v7mS9iX3rPT}_ zeQ+H6+Np$|lb5t62NJn>(`@afTyVZM*`Lh}WoEi3H^rNBtIav&9r|HF*cAl(pxoe>a_iW;Di%R35!4m&&U5><(vg?Om94QN2nn z&4IVUI$}X%`^w;0u;T@8aXvjXlJew21$s2of;e(&Q;Gi)pM&DNGMW6mY+?vy}39Sh~ammQw@>I6)v{u4dS@e-~R$G$m!QPqA6(BX^YkRGmZtd{1 z#G|q!m6eN~T2p^L-kL;}*!F2sWn8Cy>4DVpk-pG+ZGo+W;`1vJk{+{F#6GA4p)V2# zL_=n!b8ZHDEQH+3<89hFRc5!H5iEjX^@x`0MO#r3C;^o~{L_7iucQ)#p(4`2DrtUE z0`ZwXH#1NkY|w+NN|h$WN&Cf zSb`pXHhQ`pp40_=By_*t3 znc6I^N*Xdg;f>p|6d}Ie^pHD}OTkGwt*6JU+-7t4L+3;NmG6Qa3iRtBtrw^_^mE&L zT~YYx*XS>K80|CB!o4mWwoEc8m^`zn9_n!&uQc!Lec*rrDF)4W+VcYD{8Znv5A0&8XI{;llkvnI5B;a9^iJu4-x z49Bslp~ax(22w+QEYN4kA3*SUFgZ9}N>{Mh1L;A;a(kDKrEXZebCDq14mis5k_ z`$g=PiDoVero*I3W3S5*edsvBj*mjmhfOQ^M;%^0u#<}c?Oi*E)xds&X(CR^68)WGBE^cCJN?&L5&Q0V&e8h2^iG72nf1qlW{sO#^m<;pWQEyNha}AQ!RmOe1HhPgMwNwHMq1nCULq&v^)?q_W-6 z&K|Ajn}3#j*4-J3RK}hh&O03~h?4=7`4#n zMkoWFN_l)*8+2%jlcu0~WSEAu9Z=P1BjzaSzSRri&9iBeapEnDr<_y>&C22}1rG`C zdAUhMiHh-->T~;az6p^#hU`pCG6&&>im)WOOyrbNX zdzvgQ$c!vU4X|_HooVSC7|HdQc#fXl?@<7#l44t@hmzUUAZotM%)3mz@UWEF1I96y z70Gu?EKjeDljlfLpq!h>L=^oD+9=>bK?FE_>|PFJR$%&6PStBK6Psc+L(ydJ&Zwhh zPFjulQ( zZ({w6#=6X}>=@bOa_{1*>GlQ2YUZBS{kte1O~sO#;nir*g>Dm~Ybi`FU2Om0*_ky8 z?V+(`$liHk_X*Z86uL#xWOVho)~FWdBfY6yK44G_2HN&Vn$ZleF6zR#jiO8U=E((g z2m+3?61^)aNLW_y7h(&2*!aK$^eX7uuLF4?1h_D1w_n2nuR=2zlgNvC@D^M)h@XI3#JV@vmrmR}!?a9cpGfEo3Xh9T zB|9;T0vX(JsA1aVLB)#x(K%+xyiH`8$Je_<3Pbx%$_YdFc08rSjIMj8R~TDo z1)qcJTAcS{#Fh2u9BkIYJQltqT6%ZP5$sC$Tvvm1ElJYhh*QqSy4{)SUIZ$OVQ1UA zqOg5>)W-XZQQz(~E$^w}0&5$0fTdcME}3a)wHN2od)mX5k?ftwwAzc++;NKmf$ar( zn{CjRDvOr4IuLlIaKj*+SHFis7TOcfDi~ zNE04e6k zlN1RQ-9fDFBm|^8TqW@LWbfRyI68@8cYYw(fpHLAU`t`nt5{$xu6-khkIe+Sv9+Tco{O%( z7CUGT9W+>U+iMOE9Pa0DHIn_%Vr8DVQ(0(g6n^k?L&yG(BTJ*~?joh{Ay>ut>!pc=5DU0G5 z@;2#ChoNN_&K@%Fim)nJ!YdRJqE&91I+SQ!8W+XYa*U9I86&~u5p9oqs;wz<-Qm>^+h@%9M&D-KF}^F6qX*4j*S&7 z?-b4Jm^4G%4ziU{z2xtz(ilZ?gGIu)#amrB1D_hvI&}@gwo`;yyTVEmW~eh=m6!K9 zsm?2mjlWPR<9(ShL^{-jVIin6S%62pm}d*9Fl^uQtDpvYji6*$lpET+GnfmbLQNd$ zFxr2FFzrCNeG~u4=R*RsgELG6vi@TyP1lXQ{-=LDN}x-<>QY-QXLl$C*?8u{#L~;Dkitip%q2;E&6y)5o_X6(_o6O0&8lr1@mP$DePj&hB>=;fm+5BJhdt_ zu(w3r9+{lj`ja(G-9s{Hn?EXZqo%WWHUjQ%63e%j-jOf%pbXzCIi(o0pqViTfXkc&59w9&k zws#b^SJPS?3v5By(D0b@*%=w-YJxqkUvW_ev(Pe&GCX&rP-SlQP!i2B=%2D^tQ;;5 zf*a_Luow%VLV8owdOsIc_F-#8 z&3LKjY9F08{N#3fobPbUq!=lTwqk!NEaD-w7j(6kbf;T#sni)O+6R!Q$;OGgaowBF z`bm9mm2b;Tp@ny3B4p-RpqIWLCm)XWmFmo5XY_B~-LodxrM*YwvC+15e=p@|F$=Zx z&Tg8WPtV{g@bzp(q?Opvt(!U+cE<={RPY*|*Ti$7KEBUD^^HDzZzrg>AmPi0d1Z+Zk@OWMHG-ED&@E zR7+yOZrU#G+(qXEe##lxWIx0^!gMLd4u0w4WMRoNNRWr(Tg6~QLDzc}WS0H3MhcY4 zOa;2p>!Q)7W&~G(27+Pe4SUW5-{}nxP21b?hsmc;9r$Khg)U!WFx04VP1?P=v-6oV zQbROj-MzH{j|o9wj0Qm~JTtt$AtC&1%6c5$P)@LT~0@ZSe_ciN20(d}frq4wXenrad8_c8co#h)B4NZ6v$nFZ?)veH2M#l;ywvcBL zP(+votV3K8@Rs3Q4A+V`WJAC^v6bB?Z=q>rn37?kVXC`mg5ym)r0Nj=%)5Cw-79Zt z?8zaxs{z~{3`Fe}^2l}vA$eEy+}`C(@zH4WEqOQAHKTq~*vMS;1M#%Fxw^Rnv*WN3 zoj9=kE`r@-wkWfL_t5Qz`GR9j8=dV7^zDO#)LVQF%i9e-VV6>)LSw3^g9F<*aMK+~ zFHgG3+=!j-Z70SA z4Iy9k(bH-lFBA2)?1iQf2P|1p)(y8|`_gx3SGv`V8f)0@hBqCmtV?|x<;1_yd5UlD z$P*o_5OV`q9PSvx9&a|lwhMSy(|XIVrrA8Odfkdw3!dxqup<@TK4wEH}L zeiv1DaM?;>wL_~X-VGF5VED3VaSc>WnT;9*9mtTT)@598Zw-kb`4@A%s>;qa$N|SP zFaBoLm4wD&mGGBvwcgJX9bQz`_@=Ed>osFU;DLgEB-f`Wm>w2*fD5|Z*8`|pY))~P zbZ4hFu}`1)Mybp`B;bMQ>n=MHvph}&Hb89Gk+3q#EUSs~;qB41eP3wzJWEudUAETe z^be~&I}s&Yw1Zb6@ycE*k;S_RGDpXL4jP9+HSf^_zJ{?LXVKtk9FKep>>L-xhn z_8q-cl(eyv!7fi&N42*$eRqZy{DX2)m?57U7=RrsxmE19fmiUjN$t)F|1SN4G4nfY z+@Cvo79*UgZ}#Kmb$YMAhc>2q&7fB^vFIlaok=b$)`vz0sb1&L$IIT<|Mhx*yS|s= zeJx*Ls|9@>$SZlN5|`LL`Vc-cK+llw>)26C?v~3_2-nf4urSx6D0n+!S&eQB7NCZ6 zScgJ*E9>IL*Tg{1U6~l@nA_yiCp_>afbI_ZhZmPH1!={cqc=0?ChU5CVaEY|N{iL- zuBr-Bp=|5hyTT?KMeh$4RNRiD_Q$?!!O@To+9n61Yb|_YWy;Q>=t9?*eMYdjET>MB z9ci}b`sa+Y;90bN9N!>QRa}_0HdJkrSN#-X3cl%JxNg#s7$O9(HcFUEzcS%@a}zom z@(iShQem&6p~=ydo>fG=;!6?a4p~LSN2|(rD{NhayW3;GbQS(Gk=1SfcaK9o*|6uz z)0D=BVI*2z5|8!FFiS)5a|*jl+0V8`h{5CPNNHU}lH|6ZEl?;uNJc(=6<@roj1b$IWenS~01E+bt3_5)0A$A?HPX1O0!slUVz^optEGQECz% zYhIsG=7fC1_jwEKHt#KLKI!Sfa7Kmi@)kaEHf528hN`#X=V4LRzR_LyZc1@nljem! z_V}5_C6FC0nfcd6!6j@2W!VBOH%SX}!y+@^cO#@wFt+U@W^sXKPKTh*m zz9VbUz6%%kvZ;XtWstLByq4NPdm>B&P8(KaaDsi%_-id^LpDRJCZ-|PFCR4O?*$XR z0{0|dOm*l(Pnod$eNdu2#Zk7Dne){{`ny%3g>`VS&`F98M50A0D znhpd62$uhYK>qP(Ilrbej*)^T(Rx$#u|WQb`*I1IK3=VqoCeGP6=3S3TFd>19&8Ew z4`s@=oUQOz%hz-Z?o7ph&Ht|Ce^>G=oifmCP2a)|>OY#_$al!iVO;) +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + +int main(int argc, char** argv) { + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + std::cout << " reading file example program (HIPO) " << __cplusplus << std::endl; + + char inputFile[256]; + char outputFile[256]; + + if(argc>1) { + sprintf(inputFile,"%s",argv[1]); + } else { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + + hipo::reader reader; + reader.open(inputFile); + + clas12::mesonex_event event(reader); + + //clas12::vector3 electron; + + int counter=0; + while(reader.next()==true){ + event.reset(); + int np = event.particles().getSize(); + + double starttime = event.header().getStartTime(); + int pcount=0; + while(event.next_particle()){ + //std::cout<<" particle "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; +} +//### END OF GENERATED CODE diff --git a/Examples/readBanks b/Examples/readBanks new file mode 100755 index 0000000000000000000000000000000000000000..cb0cd14cf951011be7ffcae2bb20a6e3a6d7ea90 GIT binary patch literal 266256 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 z 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%0DaR$g00UQ0nUCpF>`$e}PYP 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 +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventHist.C b/RunRoot/MesonexEventHist.C new file mode 100644 index 0000000..12d43d9 --- /dev/null +++ b/RunRoot/MesonexEventHist.C @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEventHist(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Fill(p4.P(),p4.Theta()*TMath::RadToDeg()); + + float time=event.getTime(); + event.getPCAL(); + float PCalTime=event.calorimeter().getTime(); + float tdiff=time-PCalTime; + if(tdiff!=0)htdiff->Fill(tdiff); + } + + counter++; + if(counter==1E7) break; + } + hPth->Write(); + htdiff->Write(); + delete outFile; + + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventTree.C b/RunRoot/MesonexEventTree.C new file mode 100644 index 0000000..1ee1ddb --- /dev/null +++ b/RunRoot/MesonexEventTree.C @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/README b/RunRoot/README new file mode 100644 index 0000000..f3c8d16 --- /dev/null +++ b/RunRoot/README @@ -0,0 +1,8 @@ +setenv CLAS12TOOL XXX/Clas12Tool +alias clas12root root -l $CLAS12TOOL/RunRoot/importToROOT.C + +e.g. run with + +clas12root MesonexEvent.C+ --in=a/hipo/file.hipo + +clas12root MesonexEventHist.C+ --in=a/hipo/file.hipo \ No newline at end of file diff --git a/RunRoot/importToROOT.C b/RunRoot/importToROOT.C new file mode 100644 index 0000000..f046a81 --- /dev/null +++ b/RunRoot/importToROOT.C @@ -0,0 +1,45 @@ +{ + if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ + cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.a")==-1){ + //Found liblz4 in LD_LIBRARY_PATH + gROOT->ProcessLine("#define __LZ4__"); + gSystem->AddIncludePath("-D__LZ4__"); + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Lz4/lib"); + } + else{ + printf("\n >>>>> LZ4 compression is not supported."); + printf("\n >>>>> check if libz4 is installed on your system."); + printf("\n >>>>> and included in LD_LIBRARY_PATH"); + } + + //Hipo + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Hipo"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/utils.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/dictionary.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/node.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/record.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/reader.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+"); + + //Clas12Banks + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); + // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + + +} From 134715e62631b007687c123587c9ef180e26bd5a Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:22:05 +0000 Subject: [PATCH 08/56] correct particle status and charge --- Banks/mesonex_event.cpp | 31 +++++++++++++++++++------------ Banks/mesonex_event.h | 19 ++++++++++++++----- Banks/particle.h | 8 ++++---- Banks/particle_detector.h | 1 + 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Banks/mesonex_event.cpp b/Banks/mesonex_event.cpp index ed0867d..803fd25 100644 --- a/Banks/mesonex_event.cpp +++ b/Banks/mesonex_event.cpp @@ -62,22 +62,29 @@ namespace clas12 { //if CTOF save preference CTOF then CND void mesonex_event::checkTof(){ _ptof=-1;//particle tof index - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1) + _isFTOF=false; + _isCTOF=false; + _isCND=false; + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1){ + _isFTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1){ + _isCTOF=true; return; - - if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1) + } + if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1){ + _isCND=true; return; - + } } //////////////////////////////////////////////////////////////// @@ -95,7 +102,7 @@ namespace clas12 { ////////////////////////////////////////////////////////////////// ///Use PCAL for time, path, sector,... void mesonex_event::checkCalorimeter(){ - getPCAL(); + getPCAL(); } }//namespace clas12 diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index fba4d64..7b9ed1a 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -83,7 +83,11 @@ namespace clas12 { const int getNParticles(){return _particles.getSize();} bool isFT(){return _pftcal!=-1;} - + bool isFTOF(){return _isFTOF;}; + bool isCTOF(){return _isFTOF;}; + bool isCND(){return _isFTOF;}; + bool isECAL(){return (getCalTotEnergy()!=0);}; + private: @@ -99,7 +103,10 @@ namespace clas12 { short _pftcal=0; short _pfthodo=0; short _pentry=0; - + bool _isFTOF=false; + bool _isCTOF=false; + bool _isCND=false; + }; inline double mesonex_event::getCalTotEnergy(){ if(_pftcal>-1) return _ft.getEnergy(); @@ -129,10 +136,12 @@ namespace clas12 { return _calorimeter.getTime(); } inline int mesonex_event::getSector(){ - if(_ptof>=0) + if(_track.getIndex()>-1) //use track first + return _track.getSector(); + if(_ptof>=0) //then FTOF return _tof.getSector(); - if(_pftcal>=0) - return 0; + if(_pftcal>=0) //then FT + return 0; //if no tof hit use EC time return _calorimeter.getSector(); } diff --git a/Banks/particle.h b/Banks/particle.h index 057ddfc..351d716 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -59,8 +59,8 @@ namespace clas12 { float getVx(int index) { return getFloat(vx_order,index);} float getVy(int index) { return getFloat(vy_order,index);} float getVz(int index) { return getFloat(vz_order,index);} - int getCharge(int index) { return getFloat(ch_order,index);} - int getStatus(int index) { return getFloat(st_order,index);} + int getCharge(int index) { return getInt(ch_order,index);} + int getStatus(int index) { return getInt(st_order,index);} int getPid() { return getInt(pid_order,_entry);} float getPx() { return getFloat(px_order,_entry);} @@ -69,8 +69,8 @@ namespace clas12 { float getVx() { return getFloat(vx_order,_entry);} float getVy() { return getFloat(vy_order,_entry);} float getVz() { return getFloat(vz_order,_entry);} - int getCharge() { return getFloat(ch_order,_entry);} - int getStatus() { return getFloat(st_order,_entry);} + int getCharge() { return getInt(ch_order,_entry);} + int getStatus() { return getInt(st_order,_entry);} void getVector3(int index, vector3 &vect){ vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), diff --git a/Banks/particle_detector.h b/Banks/particle_detector.h index d5b43bd..ddb37ab 100644 --- a/Banks/particle_detector.h +++ b/Banks/particle_detector.h @@ -64,6 +64,7 @@ namespace clas12 { int getPindex() { return getInt(_pindex_order,_index);} //given a detector (layer if exists) and pindex find the position in this bank + int getIndex() {return _index;} int getIndex(int pindex, int detector, int layer=0) { int key = (detector<<16)|(layer<<8)|pindex; if(_rmap.count(key)>0) { From 7f84e5da1a356d2f9188383550ed81bff1cdbc99 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:43:46 +0000 Subject: [PATCH 09/56] get pointers --- Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 2042 bytes Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1858 bytes Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1869 bytes Banks/header_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1601 bytes Banks/mesonex_event.h | 8 ++++++++ Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 2860 bytes Banks/particle_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1740 bytes Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1934 bytes Banks/scintillator_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1867 bytes Banks/tracker_cpp_ACLiC_dict_rdict.pcm | Bin 0 -> 1847 bytes 10 files changed, 8 insertions(+) create mode 100644 Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/header_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/particle_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/scintillator_cpp_ACLiC_dict_rdict.pcm create mode 100644 Banks/tracker_cpp_ACLiC_dict_rdict.pcm diff --git a/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm b/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..9f28652edecc59c96b116d71bb2998757a045663 GIT binary patch literal 2042 zcmXTQ&o5zMcz=h1fgy!~f&CW{cLUk^K+Filt5~26AO&KbcpKpGcBSBpng1CX8S3}F zhX@lUpD}<8YK(i$dY>T`Y%7BYkHu6_THyW2Ent zn3r9wpPZPJUzC}fT9R56pIlH7@96B4=^USunOqWI1S0hcl5-iTVh95($c126GBDNv z9k>dJ!7gQBVB;s`edfa;U-GR7>vsqFlF+QdOn5<#-rih`Ij98=2>`pUSj{^DBs{xDasdf zD=whr2v^q?XF*Mtzy&8tg~i>Us2*<>`#Qmy-}TW2W~aRkJ3hPrkd$#~lK#UqBeFku zdt8h+U(%AB`Q_JspG~pZeUC%p2aBf%Lzf$GmkZ;Ef975r6U^rvTf6FF7UQkB=C-#S zdJ9x{rf@A--ZJ^Ju}O8zQ&FBjc*Rh^`)4&wEpEe zo0j6ew^s1N|JA%3+I}#bFc$PROD$N?c6Y(2pOXS}Z%m!_a)#N?-xt_!IM80y|W{l?*#-9yU^scpfUp}u>2?7aLAvk5U8uwM9`o556_u26mC z@hrFQC!1E!mAMzYJ2rm($u0ejY9XAW6XrZhS!6xwi0QG{Jxzsuh4Ts^`H6d_l~EkM+-vmVG+2@Y|wq3%@PqTOj9d+i2Bc)ne6S z)l?-^DpJZ*Dl_%T2LAKU7Cyi4yy?IH!iv9I$qRS=x$acQ|Jz}* zpWu^cmjwfyii8`ZKSpsMdF5sEF8tt*pCant1m1C|25-_bcC30Iz`MNuh-N&C?}hT2 zw+!n~ZLX@c_1MQF%h_qm^|M>yr&qhRj$z=5c(#+L?<#EV^N-F z*Tvsoj;XEJTGjeq`lB+CKDt}yNPkSAZnVf|ZAHuaGqYdFWiUP1lXLvnmD(?lvW zo!uX8(iYl$SCN19bdQbNMw>62ev5QX`*F)H8fKXkiP?tTEt%N)nufok3Zcl@~P&bH&GpR2HPBq^4obz77lw zq72O75{`ihs1q4PBAM*~Hain2jZ{3a$H%+omFALcurJtP7OG>YGV{{ygyQ2J^O94GfkFY!zJ7_hsl_~yLPwz_vm_@K;#6R<2Q0)G#lePwi)vuO z2Q-X|MK#bkpcPapErCW+8e>2sD2f=MeyW9kJ~$$|5Md9ljHw#-z$DH7tK4)70|2Nc B;w}IH literal 0 HcmV?d00001 diff --git a/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm b/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..af5a09a28fb55ab12b41f8632db52cb743721d06 GIT binary patch literal 1858 zcmXTQ&o5zMcz=h1fgy!~f!&FLf$b`goeRW_K)j3v$^cRz*2#Z-F>hB2zL;LY$jDH? z?>$7AF!_i9WKezFYt{!0$zYR#wlOfUhPY+sq&n)C=NDz`C+8#<8ye|5gQ<}G{2U{F zr^LMMV*TWd)S}e9?EJF$P}fw2nc zxMe^Lb|uiA(S*FtEDZ7?XAoGwJIIHOZXo@fA^u5OjzvX@m3;B>0Y&*G`5^xlrxpu4 z<|!nC#1-<>6!Md@Qj<%HqkK3HGcg2lGE^|G4U5edb`-IlxukURHYb-WAqOA1i+)^M zJL$pU0PQaev#yAAg>Ac?@>(y~?u6gcUsJ*lx=-Bq;{C_;4vil#>@QTSmtQu$y>4nn z!n>I}Hy6LVYd!g9hKRgUzYIqg@4-!McK?*FWbf^JdFS@mMI2A6xm~~M=sr+gTEjRa z=faaiO6TLYX@?y?@nJKD{6xrmyOOe>S@-&*t?Gy#Fxrc+@*tr^A)^ z*|&Axcg*C{^PKx^$*JZgtFF2|`2Odc-*Zv+-&ffAI_!JWrYWc2SKI%@_1}lw=m3+A z32%8PZl4*R^mE;HXb7oI2+*A1R$Fd))e7lV9iQ5VM(>debxccz%)@@V2_4e}=bV+4@eyABZdy$!M zui-AWZ%1WbA3gK$KWE?koUqy7zs4W5TAY1i`3?6u{^u_4P^fz)rHt)gixp9-_Y+Pz?+<1J3_s`D_xsQ&? z@!Gs!yuoFT;{C5a6Q)f!_R&f{HG4y;%eN^(Js&samo*#A-TUW}g-hEXZq0L2Q`pu; zR~ttDmfW7nbid*ygSJG{9)^i~cU)q8()U0^lJVM8-mCzr8JoYweBzZUw_mIKosZ*j z=6=8I)3IjzzRliJR+FFle6OPEO6SZ6v$k$NIm>7F@tjq6b}OV@c{=lj{l-(_YxYjK zqQBF9-bvp{qA4rpKVZMjap-7C;S=S9f<{mL3!W%Hp1D^;R-t3_d7cezO19<`|8W=m zN#7yTa@TL`uBThem$BdN_-Cw_%`43%*2^Z#@s4@Psl`B{0B2vn z#N5qgt^CGz@3~RmvWqQIy6P&3=FIxZkai$uKMNqMcMkvIf=!FM*7ZRDkMKY$4K8P zF)zDVKP|tgJh3RHBr!cbwJ1KhpdjAS*(cLEJ|#1`B)$kl>J=pCGEm7F23C+O!7gQB ztOGi79T0`Q~4C5U9PmMD-fX}0-DisS zfr{B;;?pa>?z*}0RlDH%Gy^g2=`Sw|ngm=m{p7jeqeWJIUq;%ZL`|vi%B@*da{n(3lLGD;f9ewZ+^z>$KP_BZG5Ka$ z{*x41L&E5L^-aW9o-x8?^6q zO1dAq-%`)i14@c9L|VP7Py0Qw`MN9mo^38HU&FaFV1^% z%X0TON2|P@r~EG7n=ogMW9Ealm+6x&S8l!2v*boK_fAhurFj!Ycb0fs>px~arCJbU zzdFV&(#q}JM6n++&i@r2R~N0V$os?k)ykL-V| zYEQr1JF}}jarfiWxh-?^l0O%#Uf22m=R$YTS&1`iHqQMhy*s7$H!$7Dfb+d1I5#+h zasx{YYHr|)j}NIVNKHvi!=!0uFDu+HWg|PdUn@(W>0IRZ^1^@s6 literal 0 HcmV?d00001 diff --git a/Banks/header_cpp_ACLiC_dict_rdict.pcm b/Banks/header_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..155b199fb8e8778937d7969c5702770302adc645 GIT binary patch literal 1601 zcmXTQ&o5zMcz=h1fgy!~fz6SDf%Q6&odv{l*HPG|~u*pE%fOdtrW#**X>6hmhW$P#BBo-SQ={tj|ko^1{BYmgD zyzFBAjMT)G)S~$0f`WKQXP->x_>|1#lK3JJsaKGk%Rs4q23C-}fcOT`hvh(LEdXM$ z`xqElfUd>wX(l<4-&p#=`rSc(V{`!N=M3>r%5p3!O049Ij}IuyFUbe_tT?q;*fCEb z5hSjVpQezXl$DxXQXJ*OagLFppM{}^$s)3Gzixni+>f~&h6w)m} zcaam<+9!*abI#&_=eNOTgV6tm-v932{~KGIT3h$Fo_lllsPCVQnu5=1>1EIFoqdzJ z<9fjaX2*?+64wsAWnZ{Wxa`rnTQlWd7u*mPxyfmDz`d)F`w741&MjwdMiwV+mOQ#g z>Tp2RjfHD%GY(v4tx|9NW5e}VZf%d0p6kBjk>?}6?OX8BM&*FvN82fEX)Yn1uD#0^ zt-9*=K%P}`zout{^rLRaNK3A3y`MtuxvJ*x;&tt;OkTcZ+r-!$lihQ(w!Yi$fAE5X zq=s$3|77!~LkV%3_fo&*vP7Jl)+d+Ef^ODhwt&Q+L*RS4Ay)`_0` z6*BQ_(}#Hl;Xj;yxc%^(VSPSpbLULY3%B}iS6W_k-*dgrXVU)LZ0{eMZj|b<7IN=9 z(Dth!Gp}=Xqw=|H*Z$tP&lUBxWRrEkl$8?JnZBpK9{T2}{^VzL#h*`my13^DO+Beem!Hl@Wl$4zBq4kjjG8l+-k=DFc|6L>ZXDS%!fLs1q4PBAM*~HhULP8Y$(m$H%+o zmFALcurJtP7O?1E$sdBAeopqRhN>JE8b^$Gqg!VxUlfv#(!bZfY?P zBt0vXWR~QlLYxZBQNaAcC=NCZn47?P3TPO0@;=ZGpy^b}gFvGwjVz!M6vYWpKh=Uh Z3mk`Bh+qd7?9>W&U^KEhmYYst007Mm659X( literal 0 HcmV?d00001 diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index 7b9ed1a..ec47b3a 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -80,6 +80,14 @@ namespace clas12 { clas12::forwardtagger &ft(){return _ft;} clas12::tracker &track(){return _track;} + clas12::particle *particles_ptr(){return &_particles;} + clas12::header *header_ptr(){ return &_header;} + clas12::calorimeter *calorimeter_ptr(){ return &_calorimeter;} + clas12::scintillator *tof_ptr(){return &_tof;} + clas12::cherenkov *cherenkov_ptr(){return &_cherenkov;} + clas12::forwardtagger *ft_ptr(){return &_ft;} + clas12::tracker *track_ptr(){return &_track;} + const int getNParticles(){return _particles.getSize();} bool isFT(){return _pftcal!=-1;} diff --git a/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm b/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..985fd53cb09eff22055cc37faff4152acd124d83 GIT binary patch literal 2860 zcmb`Jdo+|=AIG0Dxenu+OO(qYDm5>KgGMu%A%$`4q9adZ3{9B9jA3${NW?iuyuxXs zSe@t`XHU z7fGWr06_RV004mifG`IDg?~Wv2&luLUcTwe1RBJ%qx<~2=gL(1=NDlxAn}3lv-{8O zTR;p-_McS<1A--F=xYEV?c+oVCF4=iw8#(?DU?XJutYgZ1|J$N)Dm@&NDZN*!pL+Q zl^g?-nPe&hB!!2ASVvciBN#{_F~CT%-4jj<1HKXlkQPTNi4=e(KtYy6T@oz-$fN&k z3uG>eGu3I6talb?3Ue2)m-itAoW({)5?M$P^oXP}XyQESWV$+*YCshG4QN3Iw1Bf@ z5`%uyRnA%lXwv~=U~~CRG(EgV$N1bGVQPec9%{-=xN6MK^3u*Rs`M(;P{*68$SPVI zJ|10(>n(^B6^e2vZXD9{GR7#V{j6)eA#Em&zhIVx%Sw8PSJ2w=ea=JalnjkMMkzLX z$Lk8d0|jn}46)Qz zO&`(e=VaYGlQP+Ns2;md*f&qF)GK~<=$GThRyVV+=ASTo-q`lk>j9&x+N^5JOKg|m z0ovZWFm%tv-M%bmDVFhNXQR}FM}+SkQS7wqXD}e_c+2iK<8~7Q_JC3$ zY-_mMer124q?r;f(;%hUY|B+V*0M#L-D%I#JqK@qC&-RTC;C+LnmZ=!YK!vqE|z0* zdCtTRJM*bvL)4Lu#2ahbUFo8oALSmcSx?st5)-A2lywIO#xAVysFil`7I+!N$}65W%4+{T`FO-9QXl;WucJt-*@O!#XaAbMW2r>A1HF!j(O*-F13tkVHf?NDMg1^a z;Gev1QH$(l4`ni7=XCszxmscF+{FyCXqa&y*BOi~E|KZ;W>|efJ4Q`UmTkR$7)sXwMq?)ZAX%z=2yT^MH?nbEx9R<~55KB?D_H`f6hN z{EMcyQKJ;)Hgv7qymgk!?`|<%lem1BfxIYPCTkmRF8uRzRGSZvwvz;IcW|$lhJ|OvwHK6yweNb zlAbWDsab%%+lyfd%hJyy`%iVpr<(KJJ6G7Y(S!&5W9X(z4~3KJL&dlFn`9VL?U!q< zRl5yWG?(MtG(%DY8wa~PdS%D0+tYt_ zeQSYM!ey}jli!4YlmC0LeP^*P4m8xcZqEC$^JHR$I?aN)Q~x7%K_(@8Om4*PxiPp+AtPuW;|;lPOkGrOk||nQw!KLRb0TN4`>tWlOY_ z1(&AV?N=u(bLUlkdl8~iuLCym3)j+Q9&0jo`JG44vYvC*kVwxme(*Q_qqY499N*=2 zPS(8`Yq+v9tZdpElT)CyxpA4ut2EKmt4zpM&adG#-OkNy9VwI^eSNrxlb;`@MO!Kj zDtK~HdXQU_sbTwEX(KOV;GN&L{-(q0a$QdrZi7>;i&si0v2U5D3+HAivfC;CS-IZT zaCLlUE7G-PJomTB-pz>@wI@k`FI@=U9^o>SvIbudSS3Pw(<;$hwnT*-#VREG?7vk= z0R(+m;p9Ma(En8+3;@IdaEVX@QqW3q6W0R(1^`GKQ1ihN8ALHb?C}JoAZseITcP(P zZ^8ipQ2wmxc6LlM$-@Olhg_1TEk=Bqt016<3|i!V3YFpT#fN}KUr7o&k`ypvq+A~4 z{SP6P1wlMDD(sKq-~7Mve_;b|67VJo*hK=K7lV;s!k{xEDb!#GH4wy7Nn|<{nTMmB zI}s{E6hF(e0fWK_C4Z(t1p*}ZFf9p8QrJKx0tEZ2g$)FRKJry63kdaBuLgwpOGg8( d|7s@?AvsEgfA7Aec>T(|4_!Tkd9+my@Gtb)ZW;gp literal 0 HcmV?d00001 diff --git a/Banks/particle_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..1482042aa2c7f5fac6200d264ab632adaf5ea870 GIT binary patch literal 1740 zcmXTQ&o5zMcz=h1fgy!~f$ao4E6io zLxc&F4;VlO)y2JLy~&USHW_Fe0|RS_TV_tGgMN8_QMP_^PGYg4k-jsS3dzsUG17NR z%*!s;FGwsZ$xO~kjZZEph<9}M$#jlS$xJSZF9MNz1E{gbPs(yEDoU*6i;oW|$}h!MHSZfBt0$k$**gmn>L2!#WNyHFh?#niZd6@s;{)6)`7=qZ@fI#KPy`Sd{OI5o5cz)kk zUjE*0{`~jzOs~lua^`Ija+bJu;P`!)dh5PRFFqztP$6!4t>om|KCL;*WTANeeEyna2ODqxUaY|RdHUU^M@M9n*GHFb z{`f7!rn_pdqd_faBb(KMU)Rq{f6+T^Z@+$u%gi0sm0jET=K1xjsjZgP*sB#Uwe`DM z`0N-x3sbQlNk7kgGCzG^_y2}Jmp`rV@y&X9ZH6-Q^qcG6-ru?>yE3gZ@8^+E>8F)6 z^40GLn@H#QZZkEzXcj+xj{S^%-Q{N%{%^_D`yvp5Ui$H_Vq#dZ0124C`U3!Edi_DJ>u_W6E$zbI>5dFCA{>EE`vKuF|R z<=3Sp2d6PV-aO-``0X1L3lGZg-ln(`m=t5c8Bh|OK%GGel=&%Y0_BR252-9jO-W6| znm8R87(^ME!8wxI$evwUaNl|8Ax}8vbyklN+YB5kKz}eR?F*miC2a=@}N-|4wQXx(SW@=y-WfTV+ z1}=ht*&1jVwTd91SwQotQV;-*qBOdIMo<(hK>bt;{2XvBav=g9T*FW=;DHH_?M%7p G6b1m|H&c}W literal 0 HcmV?d00001 diff --git a/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..2d27eda1119918e7da1efe8e33cc417e5e800363 GIT binary patch literal 1934 zcmXTQ&o5zMcz=h1fgy!~fxQoiC4uZxAZ7&OZ7fg*kOHxeEoIkxyHfDQ(oKwv4E6io zLxc&FpBO*}wa2|?z0HsfHW_Fe0|RS_TV_tGr+#^UQMP_^PGYg4k-jsS3dzsUG17NR z%*!s;FGwsZ$xO~kjZaA}Nlh-vFN#ktD2R7-_Q`aPPsvO!i7x_?dIib33{*6VffeLh zu!|WOn}Ckp2E<@j1KmBHP*5=2gM7^H2iETn@-br=NIz$Ye^QoXQBh(gUwnK(QGQ82 z$iKy@#lntx3W*?bh5R&y{G=?PM~kC;INmcc_^~roFzyXK>nGwU@NZdp18XBkMuKbV zB15Uo;yvt}Z{}DnlI!VEl1ffe+q}Ek=g$0-XEHu)3x6+X@#1#HhgZ@C7h06_7lfMH zdUJETYtLM@ZvMJe>sGzHIHRIRNJc=zjYZW>>c_YCgx8Um&i~4utKb{?O|t6)>#YOP z%e?dq?kPQeC3|h%i9YqfS%&8A8}DqiP$_2Qo$~dG!3hhsNS~n1N^YAH!?);NZr_v; zC)?QeyObeE_%GAa#@T8sBmGuQQV(5y)NzvQTE7?D59{Ql{%vvQWji2u@$O?uE0vs6 zitpGnEo{EBiD<6lj5A7n!V+v9cxV09S&r{*B}_JO%=v8_zwj!LTL0^*N!lA%^JQ<{ z_;^kyzN z{%S3|qu84EyJ;G4>zG|<-EOj7UHk4&f!3cDZ@*7AyBWQqeoNWjn%J(Y$d4OcnDf~+ zbcJg*M*RAsiFfZ5PczQ2XlJgRKZjX^H^!(vM#Go+|CG+))jXfn zUp`svd1@--ocAvN^>S~_uU4uYUsC<>%I75O@`V|{QxASF+ZbDace>?aPmS|WH?7-$ z^UG!xo~0)X1ysL=?Vp|&ck%P8|4MHH%)>6Pv2%KBx@xY0Z)N#nsS>NdVGi#U`T?q zk25Iyuz*C7vJY2$d`M+MYD#Jv)~w^ez#z)N3@&LHn1DKwK_rsd4q&rC0;Q46W{;0| z%`43%*G>YGV{{ygyQ2J^O94GfdyHBv#(!bZfY?P zB*QC|WR~QlLYxXLa)1R0qd3?waFGctbby9Yy~qR_3bcqS!+4K)i+p$^cRz*6};rKD=Ei_+qvrBO^oo zzV{Ge!sH7EkU>pxuUYRhq=8Ka+Qz`Z8se6jlj@>ho?n!$pPZ9eY-ptK45mWz^K*>! zof7l1i}j0>GxJI^b8-?(@{8h=3ku>LoqaN$<5Mz|OX7<_q+UUCE(3K;VPFNh5$sL| z##*2g*8nlttw7ht5efii0gyjAgTeaULH=a)0qN%q@lVQfEGkN@7+i6NMip@MO3m~Z}N2Z7p~OH|`swN|YNn!s_N zqcGE7pgT*-JYFge%G-Ze`# zD>bXAMb{Kp@%|L~-Ld(jrPT8y{&x+H*c4Vz{GIe_ z>jK8<^K;kSZv1=W!qVR*)<|-tqUf9 znpMKO`6PSXanDnyy^jk9Jz1{NpTBNeO2b)=-!qw6$_ienGoLUmJf?qR>aXhyO#)26 zCGGiF`C4P8Za6=O=GB=_)rWRYe4SJF*8Jq2#jCY#-=_ynmet^mF)g!+i3=`t9wz*F`tJ&R%zUV{+ZD&a=zC)TG>XzF0~$e5%mDRM bEdmO_G0BApd~oGP-M|N?4|eZz(Coeji{K)i?r$^cRz))|h(n71nhUv$+nGBVWf zdk+yNOx|Mv8B`nhn)L}oBG_c0Z43;oA#RyDsrLHi`9<0K$vKI|hDQ3%U@9a(KgUSl zDKRg*SihtwF*!T6C_cHMAl}j0C(}7TB{R7sz6eC>6(r{}P;3ALE68PF*D)|w03Egn zh`}xdxsi~!nFT<;<4ghTcL({7(FvrVGsHhB%dw~^v63%7KA9r;?!bc$2^5Z zkhnsAnnHe3R%&udag-0o0Vbdxh6={DVcz+d9R%iCWEM`c3u$R^5ESeXQ`CFQ=_(T@ z5WvsM#2e7r{@7}r(AK`@w_&Zp>;5oa;kNx0{X9PPUYfvU(kvsjnCZtK_O(%*e@^V*pWm*S@J3nU#rcN}Qj@&X8Pa6m#6&N@ zx7sFYv!vUVsHT}SEPDIPd>LnGbN^Dn|IK99k>Q&!^SVz?eu{#2HMAmSGv2JIL=f1}Bx~W&<;p_+H2j@5KPx296 zx^}wn_I$6Hk_EbNl@BH#T;H@sP{VplWIf2(Jafr>oio0#f9-d(`I~Hz7QkaT_s!ulw?`3gBfEGnXrK7=tmdq?jmejstvT-B zl&|0J^gnKFu;IDX@9xgK^G-(gpXS%KU-7uu_HuQvQkr4k^4V)W#Je;aw#%N-I3k{~ zAU<*boRoNlZ`0maHgj$2X3Xt5Bpq0B?vDA5ct5Q((TelWIx@DNNfPFADJv1+<2tcZ zx%VW?E%(F0TNXaI-+18nL#Co&pNG75JmM3yGm07y3u;c$Txgl`mI%^{9cjN*{_aOKMN)t zlc@535pVQStNO3$^4<2EPkcFS9?*OuSz37`Yh+E@vj5u?zAU%Ap0Vw3Q0DQxw`Y%D zy^y(M-rSDIf6vGp?5ud%+_JtiGcmf#t8ml)jp9v*fhj)*oZBVA`N0{KA6SA=^8;6W zd`M+MYD#Jv*1X`rz#z)N3@#=Zn1DKwK_rsd4q&s_0i}`h8hd=aYhGzC$p-s^4Q2s5 z+7o0jD?7+wzA|9$%rCMjE-A{)OScn>k9W*VPAvus1vvZqCFZ6U^FVU2LP=&xPAbHy zz%m3_A~1@B4Fi{Vz)}Qg7?sL9piw~MsZ#6!jiNNRfJRUhDM0;H3;S$vByu6b9bB7H PE!=^rg5A8_bP59il+ktf literal 0 HcmV?d00001 From a7018bf11807c61997cbb089604aef3252b47d3f Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 21 Nov 2018 16:44:07 +0000 Subject: [PATCH 10/56] get pointers --- Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm | Bin 2042 -> 0 bytes Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm | Bin 1858 -> 0 bytes Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm | Bin 1869 -> 0 bytes Banks/header_cpp_ACLiC_dict_rdict.pcm | Bin 1601 -> 0 bytes Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm | Bin 2860 -> 0 bytes Banks/particle_cpp_ACLiC_dict_rdict.pcm | Bin 1740 -> 0 bytes Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm | Bin 1934 -> 0 bytes Banks/scintillator_cpp_ACLiC_dict_rdict.pcm | Bin 1867 -> 0 bytes Banks/tracker_cpp_ACLiC_dict_rdict.pcm | Bin 1847 -> 0 bytes 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/forwardtagger_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/header_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/particle_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/scintillator_cpp_ACLiC_dict_rdict.pcm delete mode 100644 Banks/tracker_cpp_ACLiC_dict_rdict.pcm diff --git a/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm b/Banks/calorimeter_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 9f28652edecc59c96b116d71bb2998757a045663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmXTQ&o5zMcz=h1fgy!~f&CW{cLUk^K+Filt5~26AO&KbcpKpGcBSBpng1CX8S3}F zhX@lUpD}<8YK(i$dY>T`Y%7BYkHu6_THyW2Ent zn3r9wpPZPJUzC}fT9R56pIlH7@96B4=^USunOqWI1S0hcl5-iTVh95($c126GBDNv z9k>dJ!7gQBVB;s`edfa;U-GR7>vsqFlF+QdOn5<#-rih`Ij98=2>`pUSj{^DBs{xDasdf zD=whr2v^q?XF*Mtzy&8tg~i>Us2*<>`#Qmy-}TW2W~aRkJ3hPrkd$#~lK#UqBeFku zdt8h+U(%AB`Q_JspG~pZeUC%p2aBf%Lzf$GmkZ;Ef975r6U^rvTf6FF7UQkB=C-#S zdJ9x{rf@A--ZJ^Ju}O8zQ&FBjc*Rh^`)4&wEpEe zo0j6ew^s1N|JA%3+I}#bFc$PROD$N?c6Y(2pOXS}Z%m!_a)#N?-xt_!IM80y|W{l?*#-9yU^scpfUp}u>2?7aLAvk5U8uwM9`o556_u26mC z@hrFQC!1E!mAMzYJ2rm($u0ejY9XAW6XrZhS!6xwi0QG{Jxzsuh4Ts^`H6d_l~EkM+-vmVG+2@Y|wq3%@PqTOj9d+i2Bc)ne6S z)l?-^DpJZ*Dl_%T2LAKU7Cyi4yy?IH!iv9I$qRS=x$acQ|Jz}* zpWu^cmjwfyii8`ZKSpsMdF5sEF8tt*pCant1m1C|25-_bcC30Iz`MNuh-N&C?}hT2 zw+!n~ZLX@c_1MQF%h_qm^|M>yr&qhRj$z=5c(#+L?<#EV^N-F z*Tvsoj;XEJTGjeq`lB+CKDt}yNPkSAZnVf|ZAHuaGqYdFWiUP1lXLvnmD(?lvW zo!uX8(iYl$SCN19bdQbNMw>62ev5QX`*F)H8fKXkiP?tTEt%N)nufok3Zcl@~P&bH&GpR2HPBq^4obz77lw zq72O75{`ihs1q4PBAM*~Hain2jZ{3a$H%+omFALcurJtP7OG>YGV{{ygyQ2J^O94GfkFY!zJ7_hsl_~yLPwz_vm_@K;#6R<2Q0)G#lePwi)vuO z2Q-X|MK#bkpcPapErCW+8e>2sD2f=MeyW9kJ~$$|5Md9ljHw#-z$DH7tK4)70|2Nc B;w}IH diff --git a/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm b/Banks/cherenkov_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index af5a09a28fb55ab12b41f8632db52cb743721d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1858 zcmXTQ&o5zMcz=h1fgy!~f!&FLf$b`goeRW_K)j3v$^cRz*2#Z-F>hB2zL;LY$jDH? z?>$7AF!_i9WKezFYt{!0$zYR#wlOfUhPY+sq&n)C=NDz`C+8#<8ye|5gQ<}G{2U{F zr^LMMV*TWd)S}e9?EJF$P}fw2nc zxMe^Lb|uiA(S*FtEDZ7?XAoGwJIIHOZXo@fA^u5OjzvX@m3;B>0Y&*G`5^xlrxpu4 z<|!nC#1-<>6!Md@Qj<%HqkK3HGcg2lGE^|G4U5edb`-IlxukURHYb-WAqOA1i+)^M zJL$pU0PQaev#yAAg>Ac?@>(y~?u6gcUsJ*lx=-Bq;{C_;4vil#>@QTSmtQu$y>4nn z!n>I}Hy6LVYd!g9hKRgUzYIqg@4-!McK?*FWbf^JdFS@mMI2A6xm~~M=sr+gTEjRa z=faaiO6TLYX@?y?@nJKD{6xrmyOOe>S@-&*t?Gy#Fxrc+@*tr^A)^ z*|&Axcg*C{^PKx^$*JZgtFF2|`2Odc-*Zv+-&ffAI_!JWrYWc2SKI%@_1}lw=m3+A z32%8PZl4*R^mE;HXb7oI2+*A1R$Fd))e7lV9iQ5VM(>debxccz%)@@V2_4e}=bV+4@eyABZdy$!M zui-AWZ%1WbA3gK$KWE?koUqy7zs4W5TAY1i`3?6u{^u_4P^fz)rHt)gixp9-_Y+Pz?+<1J3_s`D_xsQ&? z@!Gs!yuoFT;{C5a6Q)f!_R&f{HG4y;%eN^(Js&samo*#A-TUW}g-hEXZq0L2Q`pu; zR~ttDmfW7nbid*ygSJG{9)^i~cU)q8()U0^lJVM8-mCzr8JoYweBzZUw_mIKosZ*j z=6=8I)3IjzzRliJR+FFle6OPEO6SZ6v$k$NIm>7F@tjq6b}OV@c{=lj{l-(_YxYjK zqQBF9-bvp{qA4rpKVZMjap-7C;S=S9f<{mL3!W%Hp1D^;R-t3_d7cezO19<`|8W=m zN#7yTa@TL`uBThem$BdN_-Cw_%`43%*2^Z#@s4@Psl`B{0B2vn z#N5qgt^CGz@3~RmvWqQIy6P&3=FIxZkai$uKMNqMcMkvIf=!FM*7ZRDkMKY$4K8P zF)zDVKP|tgJh3RHBr!cbwJ1KhpdjAS*(cLEJ|#1`B)$kl>J=pCGEm7F23C+O!7gQB ztOGi79T0`Q~4C5U9PmMD-fX}0-DisS zfr{B;;?pa>?z*}0RlDH%Gy^g2=`Sw|ngm=m{p7jeqeWJIUq;%ZL`|vi%B@*da{n(3lLGD;f9ewZ+^z>$KP_BZG5Ka$ z{*x41L&E5L^-aW9o-x8?^6q zO1dAq-%`)i14@c9L|VP7Py0Qw`MN9mo^38HU&FaFV1^% z%X0TON2|P@r~EG7n=ogMW9Ealm+6x&S8l!2v*boK_fAhurFj!Ycb0fs>px~arCJbU zzdFV&(#q}JM6n++&i@r2R~N0V$os?k)ykL-V| zYEQr1JF}}jarfiWxh-?^l0O%#Uf22m=R$YTS&1`iHqQMhy*s7$H!$7Dfb+d1I5#+h zasx{YYHr|)j}NIVNKHvi!=!0uFDu+HWg|PdUn@(W>0IRZ^1^@s6 diff --git a/Banks/header_cpp_ACLiC_dict_rdict.pcm b/Banks/header_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 155b199fb8e8778937d7969c5702770302adc645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1601 zcmXTQ&o5zMcz=h1fgy!~fz6SDf%Q6&odv{l*HPG|~u*pE%fOdtrW#**X>6hmhW$P#BBo-SQ={tj|ko^1{BYmgD zyzFBAjMT)G)S~$0f`WKQXP->x_>|1#lK3JJsaKGk%Rs4q23C-}fcOT`hvh(LEdXM$ z`xqElfUd>wX(l<4-&p#=`rSc(V{`!N=M3>r%5p3!O049Ij}IuyFUbe_tT?q;*fCEb z5hSjVpQezXl$DxXQXJ*OagLFppM{}^$s)3Gzixni+>f~&h6w)m} zcaam<+9!*abI#&_=eNOTgV6tm-v932{~KGIT3h$Fo_lllsPCVQnu5=1>1EIFoqdzJ z<9fjaX2*?+64wsAWnZ{Wxa`rnTQlWd7u*mPxyfmDz`d)F`w741&MjwdMiwV+mOQ#g z>Tp2RjfHD%GY(v4tx|9NW5e}VZf%d0p6kBjk>?}6?OX8BM&*FvN82fEX)Yn1uD#0^ zt-9*=K%P}`zout{^rLRaNK3A3y`MtuxvJ*x;&tt;OkTcZ+r-!$lihQ(w!Yi$fAE5X zq=s$3|77!~LkV%3_fo&*vP7Jl)+d+Ef^ODhwt&Q+L*RS4Ay)`_0` z6*BQ_(}#Hl;Xj;yxc%^(VSPSpbLULY3%B}iS6W_k-*dgrXVU)LZ0{eMZj|b<7IN=9 z(Dth!Gp}=Xqw=|H*Z$tP&lUBxWRrEkl$8?JnZBpK9{T2}{^VzL#h*`my13^DO+Beem!Hl@Wl$4zBq4kjjG8l+-k=DFc|6L>ZXDS%!fLs1q4PBAM*~HhULP8Y$(m$H%+o zmFALcurJtP7O?1E$sdBAeopqRhN>JE8b^$Gqg!VxUlfv#(!bZfY?P zBt0vXWR~QlLYxZBQNaAcC=NCZn47?P3TPO0@;=ZGpy^b}gFvGwjVz!M6vYWpKh=Uh Z3mk`Bh+qd7?9>W&U^KEhmYYst007Mm659X( diff --git a/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm b/Banks/mesonex_event_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 985fd53cb09eff22055cc37faff4152acd124d83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2860 zcmb`Jdo+|=AIG0Dxenu+OO(qYDm5>KgGMu%A%$`4q9adZ3{9B9jA3${NW?iuyuxXs zSe@t`XHU z7fGWr06_RV004mifG`IDg?~Wv2&luLUcTwe1RBJ%qx<~2=gL(1=NDlxAn}3lv-{8O zTR;p-_McS<1A--F=xYEV?c+oVCF4=iw8#(?DU?XJutYgZ1|J$N)Dm@&NDZN*!pL+Q zl^g?-nPe&hB!!2ASVvciBN#{_F~CT%-4jj<1HKXlkQPTNi4=e(KtYy6T@oz-$fN&k z3uG>eGu3I6talb?3Ue2)m-itAoW({)5?M$P^oXP}XyQESWV$+*YCshG4QN3Iw1Bf@ z5`%uyRnA%lXwv~=U~~CRG(EgV$N1bGVQPec9%{-=xN6MK^3u*Rs`M(;P{*68$SPVI zJ|10(>n(^B6^e2vZXD9{GR7#V{j6)eA#Em&zhIVx%Sw8PSJ2w=ea=JalnjkMMkzLX z$Lk8d0|jn}46)Qz zO&`(e=VaYGlQP+Ns2;md*f&qF)GK~<=$GThRyVV+=ASTo-q`lk>j9&x+N^5JOKg|m z0ovZWFm%tv-M%bmDVFhNXQR}FM}+SkQS7wqXD}e_c+2iK<8~7Q_JC3$ zY-_mMer124q?r;f(;%hUY|B+V*0M#L-D%I#JqK@qC&-RTC;C+LnmZ=!YK!vqE|z0* zdCtTRJM*bvL)4Lu#2ahbUFo8oALSmcSx?st5)-A2lywIO#xAVysFil`7I+!N$}65W%4+{T`FO-9QXl;WucJt-*@O!#XaAbMW2r>A1HF!j(O*-F13tkVHf?NDMg1^a z;Gev1QH$(l4`ni7=XCszxmscF+{FyCXqa&y*BOi~E|KZ;W>|efJ4Q`UmTkR$7)sXwMq?)ZAX%z=2yT^MH?nbEx9R<~55KB?D_H`f6hN z{EMcyQKJ;)Hgv7qymgk!?`|<%lem1BfxIYPCTkmRF8uRzRGSZvwvz;IcW|$lhJ|OvwHK6yweNb zlAbWDsab%%+lyfd%hJyy`%iVpr<(KJJ6G7Y(S!&5W9X(z4~3KJL&dlFn`9VL?U!q< zRl5yWG?(MtG(%DY8wa~PdS%D0+tYt_ zeQSYM!ey}jli!4YlmC0LeP^*P4m8xcZqEC$^JHR$I?aN)Q~x7%K_(@8Om4*PxiPp+AtPuW;|;lPOkGrOk||nQw!KLRb0TN4`>tWlOY_ z1(&AV?N=u(bLUlkdl8~iuLCym3)j+Q9&0jo`JG44vYvC*kVwxme(*Q_qqY499N*=2 zPS(8`Yq+v9tZdpElT)CyxpA4ut2EKmt4zpM&adG#-OkNy9VwI^eSNrxlb;`@MO!Kj zDtK~HdXQU_sbTwEX(KOV;GN&L{-(q0a$QdrZi7>;i&si0v2U5D3+HAivfC;CS-IZT zaCLlUE7G-PJomTB-pz>@wI@k`FI@=U9^o>SvIbudSS3Pw(<;$hwnT*-#VREG?7vk= z0R(+m;p9Ma(En8+3;@IdaEVX@QqW3q6W0R(1^`GKQ1ihN8ALHb?C}JoAZseITcP(P zZ^8ipQ2wmxc6LlM$-@Olhg_1TEk=Bqt016<3|i!V3YFpT#fN}KUr7o&k`ypvq+A~4 z{SP6P1wlMDD(sKq-~7Mve_;b|67VJo*hK=K7lV;s!k{xEDb!#GH4wy7Nn|<{nTMmB zI}s{E6hF(e0fWK_C4Z(t1p*}ZFf9p8QrJKx0tEZ2g$)FRKJry63kdaBuLgwpOGg8( d|7s@?AvsEgfA7Aec>T(|4_!Tkd9+my@Gtb)ZW;gp diff --git a/Banks/particle_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 1482042aa2c7f5fac6200d264ab632adaf5ea870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1740 zcmXTQ&o5zMcz=h1fgy!~f$ao4E6io zLxc&F4;VlO)y2JLy~&USHW_Fe0|RS_TV_tGgMN8_QMP_^PGYg4k-jsS3dzsUG17NR z%*!s;FGwsZ$xO~kjZZEph<9}M$#jlS$xJSZF9MNz1E{gbPs(yEDoU*6i;oW|$}h!MHSZfBt0$k$**gmn>L2!#WNyHFh?#niZd6@s;{)6)`7=qZ@fI#KPy`Sd{OI5o5cz)kk zUjE*0{`~jzOs~lua^`Ija+bJu;P`!)dh5PRFFqztP$6!4t>om|KCL;*WTANeeEyna2ODqxUaY|RdHUU^M@M9n*GHFb z{`f7!rn_pdqd_faBb(KMU)Rq{f6+T^Z@+$u%gi0sm0jET=K1xjsjZgP*sB#Uwe`DM z`0N-x3sbQlNk7kgGCzG^_y2}Jmp`rV@y&X9ZH6-Q^qcG6-ru?>yE3gZ@8^+E>8F)6 z^40GLn@H#QZZkEzXcj+xj{S^%-Q{N%{%^_D`yvp5Ui$H_Vq#dZ0124C`U3!Edi_DJ>u_W6E$zbI>5dFCA{>EE`vKuF|R z<=3Sp2d6PV-aO-``0X1L3lGZg-ln(`m=t5c8Bh|OK%GGel=&%Y0_BR252-9jO-W6| znm8R87(^ME!8wxI$evwUaNl|8Ax}8vbyklN+YB5kKz}eR?F*miC2a=@}N-|4wQXx(SW@=y-WfTV+ z1}=ht*&1jVwTd91SwQotQV;-*qBOdIMo<(hK>bt;{2XvBav=g9T*FW=;DHH_?M%7p G6b1m|H&c}W diff --git a/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm b/Banks/particle_detector_cpp_ACLiC_dict_rdict.pcm deleted file mode 100644 index 2d27eda1119918e7da1efe8e33cc417e5e800363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 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 PE!=^rg5A8_bP59il+ktf From a417f03b5a941fdf1128722ef7d00347c9100ae2 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 26 Nov 2018 09:46:23 +0000 Subject: [PATCH 11/56] use lz4 so --- RunRoot/CleanROOT.C | 14 ++++ RunRoot/CleanROOT.C~ | 14 ++++ RunRoot/MesonexEvent.C | 7 +- RunRoot/MesonexEvent.C~ | 66 +++++++++++++++++++ RunRoot/MesonexEventHist.C~ | 68 ++++++++++++++++++++ RunRoot/MesonexEventTree.C~ | 66 +++++++++++++++++++ RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm | Bin 0 -> 1179 bytes RunRoot/README~ | 6 ++ RunRoot/importToROOT.C | 2 +- RunRoot/importToROOT.C~ | 45 +++++++++++++ 10 files changed, 284 insertions(+), 4 deletions(-) create mode 100644 RunRoot/CleanROOT.C create mode 100644 RunRoot/CleanROOT.C~ create mode 100644 RunRoot/MesonexEvent.C~ create mode 100644 RunRoot/MesonexEventHist.C~ create mode 100644 RunRoot/MesonexEventTree.C~ create mode 100644 RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm create mode 100644 RunRoot/README~ create mode 100644 RunRoot/importToROOT.C~ diff --git a/RunRoot/CleanROOT.C b/RunRoot/CleanROOT.C new file mode 100644 index 0000000..caa5e4a --- /dev/null +++ b/RunRoot/CleanROOT.C @@ -0,0 +1,14 @@ +{ + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.so"); + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.d"); + gSystem->Exec("rm $CLAS12TOOL/Hipo/*.pcm"); + + gSystem->Exec("rm $CLAS12TOOL/Banks/*.so"); + gSystem->Exec("rm $CLAS12TOOL/Banks/*.d"); + gSystem->Exec("rm $CLAS12TOOL/Banks/*.pcm"); + + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.so"); + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.d"); + gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.pcm"); + +} diff --git a/RunRoot/CleanROOT.C~ b/RunRoot/CleanROOT.C~ new file mode 100644 index 0000000..556c168 --- /dev/null +++ b/RunRoot/CleanROOT.C~ @@ -0,0 +1,14 @@ +{ + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.so"); + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.d"); + gSystem->Exe("rm $CLAS12TOOL/Hipo/*.pcm"); + + gSystem->Exe("rm $CLAS12TOOL/Banks/*.so"); + gSystem->Exe("rm $CLAS12TOOL/Banks/*.d"); + gSystem->Exe("rm $CLAS12TOOL/Banks/*.pcm"); + + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.so"); + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.d"); + gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.pcm"); + +} diff --git a/RunRoot/MesonexEvent.C b/RunRoot/MesonexEvent.C index 516273e..defccd2 100644 --- a/RunRoot/MesonexEvent.C +++ b/RunRoot/MesonexEvent.C @@ -40,6 +40,7 @@ void MesonexEvent(){ int counter=0; while(reader.next()==true){ event.reset(); + int np = event.particles().getSize(); double starttime = event.header().getStartTime(); @@ -56,13 +57,13 @@ void MesonexEvent(){ event.getLTCC(); int nLTCC=event.cherenkov().getNphe(); float trchi2=event.getTrackChi2(); - } + } counter++; - if(counter==1E7) break; + if(counter==1E6) break; } auto finish = std::chrono::high_resolution_clock::now(); std::chrono::duration elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "< +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/MesonexEventHist.C~ b/RunRoot/MesonexEventHist.C~ new file mode 100644 index 0000000..516273e --- /dev/null +++ b/RunRoot/MesonexEventHist.C~ @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + +} diff --git a/RunRoot/MesonexEventTree.C~ b/RunRoot/MesonexEventTree.C~ new file mode 100644 index 0000000..56651ed --- /dev/null +++ b/RunRoot/MesonexEventTree.C~ @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "mesonex_event.h" + + + +void MesonexEvent(){ + + gBenchmark->Start("clas12root"); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<Stop("clas12root"); + gBenchmark->Print("clas12root"); + +} diff --git a/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm b/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm new file mode 100644 index 0000000000000000000000000000000000000000..7587ced8c9906c4ca3fece533ddcb1e325403350 GIT binary patch literal 1179 zcmb`H!AiqG5QZl;MJ-ZL5$P>=!C=9gNJFe5v|36~1aVE%twh^w$ZlJED1y)6tvAob zNAM*041y2Pi}n?q-3raElqN8{%ffv7&p$&V#st9l8vyD6`T%1G&mo3}G1UJLxXIJy z=hww=e|_}&p=t2+KAv39UPmB7&o@804m1=QUjs-x$9|I@nOzn=m|oN6dwJ7Vo5NT$ zZ&uqu6$P4Q%2_}kiyayWViU_Q`8KKho* zR@IqP`6seYtt9hTo%7ng6-90@OGqVRg2^g5<(pPuxbog$4TIJ0sV8^=U<;O%Nsz+q z_;(%S+lsIBP5Bu@oL)%lv@tjPD#k8Ic4`Hmj%i;eq!_eYbA!tYtSeJa71)*FYzM1l z(E%5cAKV>o5Ml)$<#<)G%V%zj^0kR0hVVs`PHe!Q;3R3=3Z^CryMnMJCkc6ST9fD{ iVis)~A{Ocl<|o#GP#Ke%ny-Eq$(oOYrw_XOFYpHgLoad(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.a")==-1){ + if(gSystem->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")==0){ //Found liblz4 in LD_LIBRARY_PATH gROOT->ProcessLine("#define __LZ4__"); gSystem->AddIncludePath("-D__LZ4__"); diff --git a/RunRoot/importToROOT.C~ b/RunRoot/importToROOT.C~ new file mode 100644 index 0000000..547c1b1 --- /dev/null +++ b/RunRoot/importToROOT.C~ @@ -0,0 +1,45 @@ +{ + if(TString(gSystem->Getenv("CLAS12TOOL"))!=TString()){ + cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")){ + //Found liblz4 in LD_LIBRARY_PATH + gROOT->ProcessLine("#define __LZ4__"); + gSystem->AddIncludePath("-D__LZ4__"); + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Lz4/lib"); + } + else{ + printf("\n >>>>> LZ4 compression is not supported."); + printf("\n >>>>> check if libz4 is installed on your system."); + printf("\n >>>>> and included in LD_LIBRARY_PATH"); + } + + //Hipo + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Hipo"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/utils.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/dictionary.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/node.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/record.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/reader.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+"); + + //Clas12Banks + gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); + // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + + +} From 48c61774928e768219728702cb864b6df05d65f6 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 13 Dec 2018 22:56:23 +0000 Subject: [PATCH 12/56] new region classes --- Banks/calorimeter.h | 2 + Banks/cherenkov.h | 2 + Banks/clas12defs.h | 46 ++++-- Banks/covmatrix.cpp | 75 +++++++++ Banks/covmatrix.h | 69 ++++++++ Banks/forwardtagger.h | 10 +- Banks/hallB_event.cpp | 107 ++++++++++++ Banks/hallB_event.h | 120 ++++++++++++++ Banks/header.cpp | 11 +- Banks/header.h | 48 ++++-- Banks/mesonex_event.h | 2 +- Banks/particle.h | 4 +- Banks/particle_detector.cpp | 50 ++++-- Banks/particle_detector.h | 27 ++-- Banks/region_cdet.cpp | 72 +++++++++ Banks/region_cdet.h | 107 ++++++++++++ Banks/region_detector.h | 57 +++++++ Banks/region_fdet.cpp | 113 +++++++++++++ Banks/region_fdet.h | 127 +++++++++++++++ Banks/region_ft.cpp | 71 ++++++++ Banks/region_ft.h | 70 ++++++++ Banks/region_particle.cpp | 54 +++++++ Banks/region_particle.h | 105 ++++++++++++ Banks/scintillator.h | 6 +- Banks/tracker.h | 2 + RunRoot/CleanROOT.C~ | 14 -- RunRoot/HallBEvent.C | 161 +++++++++++++++++++ RunRoot/HipoSlowDown | 41 +++++ RunRoot/MesonexEvent.C | 23 +-- RunRoot/MesonexEvent.C~ | 66 -------- RunRoot/MesonexEventHist.C | 8 +- RunRoot/MesonexEventTree.C~ | 66 -------- RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm | Bin 1179 -> 0 bytes RunRoot/README | 17 ++ RunRoot/README~ | 6 - RunRoot/RegionFDET.C | 85 ++++++++++ RunRoot/{MesonexEventHist.C~ => RegionFT.C} | 52 +++--- RunRoot/{importToROOT.C~ => importToROOT2.C} | 12 +- 38 files changed, 1652 insertions(+), 256 deletions(-) create mode 100644 Banks/covmatrix.cpp create mode 100644 Banks/covmatrix.h create mode 100644 Banks/hallB_event.cpp create mode 100644 Banks/hallB_event.h create mode 100644 Banks/region_cdet.cpp create mode 100644 Banks/region_cdet.h create mode 100644 Banks/region_detector.h create mode 100644 Banks/region_fdet.cpp create mode 100644 Banks/region_fdet.h create mode 100644 Banks/region_ft.cpp create mode 100644 Banks/region_ft.h create mode 100644 Banks/region_particle.cpp create mode 100644 Banks/region_particle.h delete mode 100644 RunRoot/CleanROOT.C~ create mode 100644 RunRoot/HallBEvent.C create mode 100644 RunRoot/HipoSlowDown delete mode 100644 RunRoot/MesonexEvent.C~ delete mode 100644 RunRoot/MesonexEventTree.C~ delete mode 100644 RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm delete mode 100644 RunRoot/README~ create mode 100644 RunRoot/RegionFDET.C rename RunRoot/{MesonexEventHist.C~ => RegionFT.C} (50%) rename RunRoot/{importToROOT.C~ => importToROOT2.C} (77%) diff --git a/Banks/calorimeter.h b/Banks/calorimeter.h index 81199fe..6b69b12 100644 --- a/Banks/calorimeter.h +++ b/Banks/calorimeter.h @@ -169,6 +169,8 @@ namespace clas12 { }; //class calorimeter + using cal_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/cherenkov.h b/Banks/cherenkov.h index a2573bc..b34537c 100644 --- a/Banks/cherenkov.h +++ b/Banks/cherenkov.h @@ -104,6 +104,8 @@ namespace clas12 { }; //class cherenkov + using cher_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h index a604b4c..461b93d 100644 --- a/Banks/clas12defs.h +++ b/Banks/clas12defs.h @@ -3,22 +3,42 @@ namespace clas12{ - static const double FTOF = 12; - static const double CTOF = 4; - static const double CND = 3; - static const double EC = 7; - static const double FTCAL = 10; - static const double FTHODO = 11; - static const double HTCC = 15; - static const double LTCC = 16; + //regions + static const ushort FT = 1000; + static const ushort FD = 2000; + static const ushort CD = 3000; + + //detectors + static const ushort FTOF = 12; + static const ushort CTOF = 4; + static const ushort CND = 3; + static const ushort CVT = 5; + static const ushort DC = 6; + static const ushort EC = 7; + static const ushort FTCAL = 10; + static const ushort FTHODO = 11; + static const ushort HTCC = 15; + static const ushort LTCC = 16; - static const double FTOF1A = 121; - static const double FTOF1B = 122; - static const double PCAL = 71; - static const double ECIN = 72; - static const double ECOUT = 73; + //layers + static const ushort FTOF1A = 0; + static const ushort FTOF1B = 1; + static const ushort FTOF2 = 2; + //CDET scint layers same as detectors + //static const ushort CND = 3; + //static const ushort CTOF = 4; + static const ushort CND1 = 1; + static const ushort CND2 = 2; + static const ushort CND3 = 3; + + static const ushort PCAL = 1; + static const ushort ECIN = 4; + static const ushort ECOUT = 7; + + // using indices =vector; + } #endif diff --git a/Banks/covmatrix.cpp b/Banks/covmatrix.cpp new file mode 100644 index 0000000..c2dc237 --- /dev/null +++ b/Banks/covmatrix.cpp @@ -0,0 +1,75 @@ +/* + * To change this license covmatrix, choose License Covmatrixs in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "covmatrix.h" +#include + +namespace clas12 { + + + void covmatrix::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + cout<<" covmatrix::init "<::iterator it; + if((it=std::find(_rvec.begin(),_rvec.end(),pindex))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + //_index = _rmap[pindex]; + return _index; + } + return _index=-1; + } + const CovMatrix* covmatrix::matrix(){ + if(_index==-1){ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=0; + } + else{ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=getFloat(_morder[i][j],_index); + } + return &_matrix; + } + + void covmatrix::print(){ + matrix(); + std::cout<<"Cov Matrix "< +#include + +namespace clas12 { + + using CovMatrix =vector >; + using IndMatrix =vector >; + + class covmatrix : public hipo::bank { + + + public: + + //covmatrix() { } + //vmatrix(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ + // + + + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + int getIndex() const {return _index;} + int getIndex(int pindex); + void setIndex(int ind){_index=ind;} + + const CovMatrix* matrix(); + + void init(const char *bankName, hipo::reader &r); + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + + void notify(){ scanIndex();} + void scanIndex(); + void print(); + + private : + + CovMatrix _matrix={5,vector(5,0)}; + IndMatrix _morder={5,vector(5,-1)}; + int _pindex_order=-1; + int _index=-1; + //std::map _rmap; + std::vector _rvec; + }; + + using covmat_ptr=shared_ptr; +} + +#endif /* UTILS_H */ diff --git a/Banks/forwardtagger.h b/Banks/forwardtagger.h index 0b1b1c6..b8b8ae1 100644 --- a/Banks/forwardtagger.h +++ b/Banks/forwardtagger.h @@ -19,7 +19,8 @@ namespace clas12 { - class forwardtagger : public particle_detector { + + class forwardtagger : public particle_detector { public: @@ -65,7 +66,7 @@ namespace clas12 { if(_index>-1)return getFloat(_z_order,_index); return 0; } - double getDx(){ + double getDx(){ if(_index>-1)return getFloat(_dx_order,_index); return 0; } @@ -77,7 +78,7 @@ namespace clas12 { if(_index>-1)return getFloat(_radius_order,_index); return 0; } - int getSize(){ + int getSizeFT(){ //watch-out banks::getSize() ! if(_index>-1)return getInt(_size_order,_index); return 0; } @@ -109,6 +110,9 @@ namespace clas12 { }; //class forwardtagger + + using ft_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/hallB_event.cpp b/Banks/hallB_event.cpp new file mode 100644 index 0000000..dc787c3 --- /dev/null +++ b/Banks/hallB_event.cpp @@ -0,0 +1,107 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "hallB_event.h" + +namespace clas12 { + + hallB_event::hallB_event(hipo::reader &r){ + _reader=&r; //keep a pointer to the reader + //initialise banks pointers + _bparts = make_shared(); + _bcovmat= make_shared(); + _bhead = make_shared

(); + _bcal = make_shared(); + _bscint = make_shared(); + _btrck = make_shared(); + _bcher = make_shared(); + _bft = make_shared(); + + //initialise banks + _bparts->init("REC::Particle",r); + _bcovmat->init("REC::CovMat",r); + _bhead->init("REC::Event",r); + _bcal->init("REC::Calorimeter",r); + _bscint->init("REC::Scintillator",r); + _bcher->init("REC::Cherenkov",r); + _bft->init("REC::ForwardTagger",r); + _btrck->init("REC::Track",r); + + //add some detector regions to their vectors + addARegionFDet(); + addARegionCDet(); + addARegionFT(); + + } + //////////////////////////////////////////////////////// + /// Loop over particles and find their region + /// Add appropriate region_partcle to event particle vector + void hallB_event::sort(){ + + _nparts=_bparts->getSize(); + + _n_rfdets=0; + _n_rcdets=0; + _n_rfts=0; + + _detParticles.clear(); + _detParticles.reserve(_nparts); + + //Loop over particles and find their region + for(ushort i=0;i<_nparts;i++){ + _bparts->setEntry(i); + + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rfdets[_n_rfdets]); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + continue; + } + + //Check if CDet particle + if(_rcdets[_n_rcdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rcdets[_n_rcdets]); + _n_rcdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rcdets==_rcdets.size()) + addARegionCDet(); + continue; + } + //Check if FT particle + if(_rfts[_n_rfts]->sort()){ + //add a FDet particle to the event list + _detParticles.emplace_back(_rfts[_n_rfts]); + _n_rfts++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfts==_rfts.size()) + addARegionFT(); + continue; + } + //cout<<"Warning hallB_event::sort() apparent particle with no detectors "<scanForParticle(i).size()<<" "<<_bscint->scanForParticle(i).size()<<" "<<_btrck->scanForParticle(i).size()<<" "<<_bcher->scanForParticle(i).size()<<" "<<_bft->scanForParticle(i).size()<<" "<show(); + // _bcal->show();_bscint->show();_btrck->show();_bcher->show();_bft->show(); + } + } + //////////////////////////////////////////////////////// + ///Filter and return detParticles by given PID + std::vector hallB_event::getByID(int id){ + return container_filter(_detParticles, [id](region_part_ptr dr) + {return dr->getPid()==id;}); + } + +} diff --git a/Banks/hallB_event.h b/Banks/hallB_event.h new file mode 100644 index 0000000..ef74f92 --- /dev/null +++ b/Banks/hallB_event.h @@ -0,0 +1,120 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hallB_event.h + * Author: dglazier + * + */ + +#ifndef HALLB_EVENT_H +#define HALLB_EVENT_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "header.h" +#include "covmatrix.h" +#include "forwardtagger.h" +#include "region_particle.h" +#include "region_fdet.h" +#include "region_cdet.h" +#include "region_ft.h" + +#include + + +namespace clas12 { + + class hallB_event { + + + public: + + + hallB_event(hipo::reader &r); + //~hallB_event()=default; + + bool next(){ + if(!_reader->next()) + return false; + sort(); + return true; + } + void sort(); + + void addARegionFDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rfdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionCDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rcdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionFT(){ + //Forward tagger needs particles and forward tagger + _rfts.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + + + virtual const head_ptr head() const{return _bhead;}; + + + std::vector& getDetParticles(){return _detParticles;} + std::vector getByID(int id); + + + + private: + + //reader + hipo::reader *_reader=nullptr; + + //DST banks + head_ptr _bhead; + par_ptr _bparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + cher_ptr _bcher; + ft_ptr _bft; + + //Detector region vectors, + //each particle in an event will have + //one associated + std::vector _rfdets; + std::vector _rcdets; + std::vector _rfts; + std::vector _detParticles; + + + ushort _nparts=0; + ushort _n_rfdets=0; + ushort _n_rcdets=0; + ushort _n_rfts=0; + + }; + //helper functions + + //filter vectors via a lambda function + //see for example hallb_event::getByID() + template + Cont container_filter(const Cont &container, Pred predicate){ + Cont result; + std::copy_if(container.begin(),container.end(),std::back_inserter(result), predicate); + return std::move(result); + } + +} + +#endif /* HALLB_EVENT_H */ diff --git a/Banks/header.cpp b/Banks/header.cpp index b51189b..9b2a234 100644 --- a/Banks/header.cpp +++ b/Banks/header.cpp @@ -8,13 +8,22 @@ namespace clas12 { - header::~header(){} void header::init(const char *bankName, hipo::reader &r){ initBranches(bankName,r); + rn_order = getEntryOrder("NRUN"); en_order = getEntryOrder("NEVENT"); + et_order = getEntryOrder("EVNTime"); + ty_order = getEntryOrder("TYPE"); + ec_order = getEntryOrder("EvCAT"); + np_order = getEntryOrder("NPGP"); trg_order = getEntryOrder("TRG"); + bcg_order = getEntryOrder("BCG"); + lt_order = getEntryOrder("LT"); st_order = getEntryOrder("STTime"); + rf_order = getEntryOrder("RFTime"); + hel_order = getEntryOrder("Helic"); + pt_order = getEntryOrder("PTIME"); } } diff --git a/Banks/header.h b/Banks/header.h index 6ed358f..7047766 100644 --- a/Banks/header.h +++ b/Banks/header.h @@ -5,7 +5,7 @@ */ /* - * File: particle.h + * File: header.h * Author: gavalian * * Created on April 27, 2017, 10:01 AM @@ -28,31 +28,25 @@ namespace clas12 { class header : public hipo::bank { - private: - - int rn_order; - int en_order; - int st_order; - int trg_order; public: - header() { } - header(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ - rn_order = getEntryOrder("NRUN"); - en_order = getEntryOrder("NEVENT"); - trg_order = getEntryOrder("TRG"); - st_order = getEntryOrder("STTime"); - } - - ~header(); - + void init(const char *bankName, hipo::reader &r); int getRunNumber(){ return getInt(rn_order,0); } int getEventNumber(){ return getInt(en_order,0); } + int getHelicity(){ return getInt(hel_order,0); } + int getType(){ return getInt(ty_order,0); } float getStartTime(){ return getFloat(st_order,0); } + float getRFTime(){ return getFloat(rf_order,0); } + float getPTime(){ return getFloat(pt_order,0); } + float getEVNime(){ return getFloat(et_order,0); } + float getBCG(){ return getFloat(bcg_order,0); } + float getNPGP(){ return getInt(np_order,0); } + float getLT(){ return getFloat(lt_order,0); } long getTrigger(){ return getLong(trg_order,0); } + /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort @@ -61,8 +55,28 @@ namespace clas12 { void notify(){ //printf("particle class is read again\n"); } + + private : + + int rn_order; + int en_order; + int et_order; + int ty_order; + int ec_order; + int np_order; + int trg_order; + int bcg_order; + int lt_order; + int st_order; + int rf_order; + int hel_order; + int pt_order; + + }; + using head_ptr=shared_ptr; + } #endif /* UTILS_H */ diff --git a/Banks/mesonex_event.h b/Banks/mesonex_event.h index ec47b3a..68fc1d0 100644 --- a/Banks/mesonex_event.h +++ b/Banks/mesonex_event.h @@ -162,7 +162,7 @@ namespace clas12 { double ftz=_ft.getZ(); return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; } - return _ft.getPath(); + /// return _ft.getPath(); //if no tof hit use EC time return _calorimeter.getPath(); } diff --git a/Banks/particle.h b/Banks/particle.h index 351d716..b04bbd3 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -82,7 +82,7 @@ namespace clas12 { getFloat(pz_order,index),mass); } void setEntry(short i){ _entry=i;} - + short getEntry() const {return _entry;} /** * This is virtual method from hipo::bank it will be called * every time a bank is read in the reader. Can be used to sort @@ -92,6 +92,8 @@ namespace clas12 { //printf("particle class is read again\n"); } }; + + using par_ptr=shared_ptr; } diff --git a/Banks/particle_detector.cpp b/Banks/particle_detector.cpp index dabee63..52c7560 100644 --- a/Banks/particle_detector.cpp +++ b/Banks/particle_detector.cpp @@ -38,17 +38,18 @@ namespace clas12 { } //////////////////////////////////////////////////////////////////////// ///function to map the detector entry to particle index - void particle_detector::scanIndex(){ - _rmap.clear(); - const int size = getSize(); - for(int i = 0; i < size; i++){ - int detector = getDetector(i); - int layer= getLayer(i); - int pindex = getPindex(i); - int key = (detector<<16)|(layer<<8)|pindex; - _rmap[key] = i; - } - } + // void particle_detector::scanIndex(){ + // _rmap.clear(); + + // const int size = getSize(); + // for(int i = 0; i < size; i++){ + // int detector = getDetector(i); + // int layer= getLayer(i); + // int pindex = getPindex(i); + // int key = (detector<<16)|(layer<<8)|pindex; + // _rmap[key] = i; + // } + // } //////////////////////////////////////////////////////////////////////// ///function to find the current entries associated ///with pindex = iparticle @@ -76,4 +77,31 @@ namespace clas12 { std::cout<::iterator it; + int key = (detector<<16)|(layer<<8)|pindex; + if((it=std::find(_rvec.begin(),_rvec.end(),key))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + return _index; + } + return _index=-1; + } + void particle_detector::scanIndex(){ + + _rvec.clear(); + const int size = getSize(); + _rvec.reserve(size); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer= getLayer(i); + int pindex = getPindex(i); + int key = (detector<<16)|(layer<<8)|pindex; + _rvec.emplace_back(key); + } + } + } + diff --git a/Banks/particle_detector.h b/Banks/particle_detector.h index ddb37ab..ed8fbe5 100644 --- a/Banks/particle_detector.h +++ b/Banks/particle_detector.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "clas12defs.h" #include "bank.h" @@ -37,8 +38,8 @@ namespace clas12 { particle_detector()=default; - particle_detector(const char *bankName, hipo::reader &r) : - hipo::bank(bankName,r){}; + particle_detector(const char *bankName, hipo::reader &r){}; + // hipo::bank(bankName,r){init(bankName,r);}; virtual ~particle_detector()=default; @@ -65,14 +66,17 @@ namespace clas12 { //given a detector (layer if exists) and pindex find the position in this bank int getIndex() {return _index;} - int getIndex(int pindex, int detector, int layer=0) { - int key = (detector<<16)|(layer<<8)|pindex; - if(_rmap.count(key)>0) { - _index = _rmap[key]; - return _index; - } - return _index=-1; - } + int getIndex(int pindex, int detector, int layer=0); + + /* int getIndex(int pindex, int detector, int layer=0) { */ + /* //This function seems to be a bottle neck! */ + /* int key = (detector<<16)|(layer<<8)|pindex; */ + /* if(_rmap.count(key)>0) { */ + /* _index = _rmap[key]; */ + /* return _index; */ + /* } */ + /* return _index=-1; */ + /* } */ void setIndex(int ind){_index=ind;} //////////////////////////////////////////////////////////////// @@ -92,7 +96,8 @@ namespace clas12 { int _pindex_order=-1; int _index=-1; - std::map _rmap; + // std::unordered_map _rmap; + std::vector _rvec; std::vector _sitems; }; diff --git a/Banks/region_cdet.cpp b/Banks/region_cdet.cpp new file mode 100644 index 0000000..350507f --- /dev/null +++ b/Banks/region_cdet.cpp @@ -0,0 +1,72 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_cdet.h" + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): + region_particle(pars,cm,scp,trp) + { + _region=clas12::CD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::CD; + } + + /////////////////////////////////////////////////////// + /// check if any CD detectors associated with + /// current particle and store the detector indices + bool region_cdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcnd=-1; + + //tof 1 layer + _ptof=_scint->getIndex(_pentry,clas12::CTOF); + + //prefer cnd layer 1,2, 3 + _pcnd1=_scint->getIndex(_pentry,clas12::CND,clas12::CND1); + _pcnd2=_scint->getIndex(_pentry,clas12::CND,clas12::CND2); + _pcnd3=_scint->getIndex(_pentry,clas12::CND,clas12::CND3); + if(_pcnd1!=-1) _pcnd=_pcnd1; + else if(_pcnd2!=-1) _pcnd=_pcnd2; + else if(_pcnd3!=-1) _pcnd=_pcnd3; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::CVT); + + //was cdet involved ? + if((_ptof+_pcnd+_ptrck) == -3)return false; + return true; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(CND)->getEnergy(); + /// p->scint(CTOF)->getTime(); + const scint_ptr region_cdet::sci(ushort lay) const { + switch(lay){ + case clas12::CTOF : + _scint->setIndex(_ptof);return _scint; + case clas12::CND : + _scint->setIndex(_pcnd);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + + +} diff --git a/Banks/region_cdet.h b/Banks/region_cdet.h new file mode 100644 index 0000000..a3d0aef --- /dev/null +++ b/Banks/region_cdet.h @@ -0,0 +1,107 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_cdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_CDET_H +#define REGION_CDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_cdet : public region_particle { + + + public: + + region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, + trck_ptr trp); + region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_cdet()=default; + + + bool sort() final; + + const scint_ptr sci(ushort lay) const final; + const trck_ptr trk(ushort lay) const final{_trck->setIndex(_ptrck);return _trck;}; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _scint->setIndex(_pcnd); + return _scint->getTime(); + + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _scint->setIndex(_pcnd); + return _scint->getPath(); + } + + double getDetEnergy() final{ + //sum of cnd layers + _scint->setIndex(_pcnd1); + double energy=_scint->getEnergy(); + _scint->setIndex(_pcnd2); + energy+=_scint->getEnergy(); + _scint->setIndex(_pcnd3); + energy+=_scint->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + return 0; + } + + + private: + + + + //scintillator indices + short _pcnd=-1; + short _pcnd1=-1; + short _pcnd2=-1; + short _pcnd3=-1; + short _ptof=-1; + //track index + short _ptrck=-1; + + + + }; + + using region_cdet_ptr=shared_ptr; + +} + +#endif /* REGION_CDET_H */ diff --git a/Banks/region_detector.h b/Banks/region_detector.h new file mode 100644 index 0000000..82bc9d7 --- /dev/null +++ b/Banks/region_detector.h @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_detector.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_DETECTOR_H +#define REGION_DETECTOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class region_detector : public hipo::bank { + + + public: + + + region_detector()=default; + // virtual ~region_detector()=default; + + clas12::calorimeter Thick(); + clas12::scintillator Thin(); + clas12::cherenkov Track(); + PID(); + //individual detector components + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + + }; + +} + +#endif /* REGION_DETECTOR_H */ diff --git a/Banks/region_fdet.cpp b/Banks/region_fdet.cpp new file mode 100644 index 0000000..aab4316 --- /dev/null +++ b/Banks/region_fdet.cpp @@ -0,0 +1,113 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_fdet.h" + +namespace clas12 { + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): + region_particle(pars,cm,calp,scp,trp,chp) + { + _region=clas12::FD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::FD; + } + + /////////////////////////////////////////////////////// + /// check if any FD detectors associated with + /// current particle and store the detector indices + bool region_fdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcal=-1; + _ptrck=-1; + + //prefer tof layer 1,0,2 + _ptof3=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF2); + _ptof1=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1A); + _ptof2=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1B); + if(_ptof2!=-1) _ptof=_ptof2; + else if(_ptof1!=-1) _ptof=_ptof1; + else if(_ptof3!=-1) _ptof=_ptof3; + + //prefer pcal,inner, outer + _pcal=_pin=_cal->getIndex( _pentry,clas12::EC, clas12::ECIN); + _pcal=_pout=_cal->getIndex( _pentry,clas12::EC, clas12::ECOUT); + _pcal=_ppre=_cal->getIndex( _pentry,clas12::EC, clas12::PCAL); + if(_ppre!=-1) _pcal=_ppre; + else if(_pout!=-1) _pcal=_pout; + else if(_pin!=-1) _pcal=_pin; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::DC); + + _phtcc=_cher->getIndex( _pentry,clas12::HTCC); + _pltcc=_cher->getIndex( _pentry,clas12::LTCC); + + //was fdet involved ? + if((_ptof+_pcal+_ptrck) == -3)return false; + return true; + } + /////////////////////////////////////////////////////// + /// Get pointer to calorimeter banks for this particle + /// This should be used directly to acess data + /// e.g. p->cal(ECIN)->getEnergy(); + /// p->cal(PCAL)->getTime(); + const cal_ptr region_fdet::cal(ushort lay) const { + switch(lay){ + case clas12::PCAL : + _cal->setIndex(_ppre);return _cal; + case clas12::ECIN : + _cal->setIndex(_pin);return _cal; + case clas12::ECOUT : + _cal->setIndex(_pout);return _cal; + } + _cal->setIndex(-1);return _cal; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(FTOF1A)->getEnergy(); + /// p->scint(FTOF2)->getTime(); + const scint_ptr region_fdet::sci(ushort lay) const { + switch(lay){ + case clas12::FTOF1A : + _scint->setIndex(_ptof1);return _scint; + case clas12::FTOF1B : + _scint->setIndex(_ptof2);return _scint; + case clas12::FTOF2 : + _scint->setIndex(_ptof3);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + /////////////////////////////////////////////////////// + /// Get pointer to chrenkov banks for this particle + /// This should be used directly to acess data + /// e.g. p->che(HTCC)->getNphe(); + /// p->che(LTCC)->getNphe(); + const cher_ptr region_fdet::che(ushort lay) const { + switch(lay){ + case clas12::HTCC : + _cher->setIndex(_phtcc);return _cher; + case clas12::LTCC : + _cher->setIndex(_pltcc);return _cher; + } + _cher->setIndex(-1);return _cher; + } + + + +} diff --git a/Banks/region_fdet.h b/Banks/region_fdet.h new file mode 100644 index 0000000..17515fa --- /dev/null +++ b/Banks/region_fdet.h @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_fdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FDET_H +#define REGION_FDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_fdet : public region_particle { + + + public: + + // region_fdet()=default; + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp); + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_fdet()=default; + + + bool sort() final; + + const cal_ptr cal(ushort lay) const final; + const scint_ptr sci(ushort lay) const final; + const trck_ptr trk(ushort lay) const final + { + _trck->setIndex(_ptrck);return _trck; + } + const cher_ptr che(ushort lay) const final; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _cal->setIndex(_pcal); + return _cal->getTime(); + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _cal->setIndex(_pcal); + return _cal->getPath(); + } + + double getDetEnergy() final{ + _cal->setIndex(_ppre); + double energy=_cal->getEnergy(); + _cal->setIndex(_pin); + energy+=_cal->getEnergy(); + _cal->setIndex(_pout); + energy+=_cal->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + if(_ptrck){ + _trck->setIndex(_ptrck); + return _trck->getSector(); + } + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getSector(); + } + _cal->setIndex(_pcal); + return _cal->getSector(); + } + + + private: + + + + //calorimeter indices + short _pcal=-1; + short _ppre=-1; + short _pin=-1; + short _pout=-1; + //scintillator indices + short _ptof=-1; + short _ptof1=-1; + short _ptof2=-1; + short _ptof3=-1; + //track index + short _ptrck=-1; + //cherenkov indices + short _phtcc=-1; + short _pltcc=-1; + + + + }; + + using region_fdet_ptr=shared_ptr; + +} + +#endif /* REGION_FDET_H */ diff --git a/Banks/region_ft.cpp b/Banks/region_ft.cpp new file mode 100644 index 0000000..1bcdf37 --- /dev/null +++ b/Banks/region_ft.cpp @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_ft.h" +#include + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_ft::region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + region_particle(pars,cm,ftp) + { + _region=clas12::FT; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FD + region_ft::region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle(pars,cm,calp,scp,trp,chp,ftp) + { + _region=clas12::FT; + } + + /////////////////////////////////////////////////////// + /// Temporary until FT banks updated + double region_ft::getPath(){ + if(_pcal>=0){ //currently no FT path reported + _ft->setIndex(_pcal); + double ftx=_ft->getX(); + double fty=_ft->getY(); + double ftz=_ft->getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + } + return 0; + } + //////////////////////////////////////////////////////// + ///check if any FT detectors associated with + ///current particle and store the detector indices + bool region_ft::sort(){ + region_particle::sort(); + _pcal=_ft->getIndex(_pentry,clas12::FTCAL); + + _phod=_ft->getIndex(_pentry,clas12::FTHODO); + //check if FT assocciated, must be a FTCAL + if(_pcal!=-1) + return true; + return false; + + } + /////////////////////////////////////////////////////// + /// Get pointer to FT banks for this particle + /// This should be used directly to acess data + /// e.g. p->ft(FTCAL)->getEnergy(); + /// p->ft(FTHODO)->getEnergy(); + const ft_ptr region_ft::ft(ushort lay) const { + switch(lay){ + case clas12::FTCAL : + _ft->setIndex(_pcal);return _ft; + case clas12::FTHODO : + _ft->setIndex(_phod);return _ft; + } + _ft->setIndex(-1);return _ft; + } + + + +} diff --git a/Banks/region_ft.h b/Banks/region_ft.h new file mode 100644 index 0000000..c93b2dc --- /dev/null +++ b/Banks/region_ft.h @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_ft.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FT_H +#define REGION_FT_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "forwardtagger.h" + + +namespace clas12 { + + + class region_ft : public region_particle { + + + public: + + region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, cher_ptr chp, ft_ptr ftp); + ~region_ft()=default; + + + bool sort() override; + + const ft_ptr ft(ushort lay) const final; + + + double getTime() final{ + _ft->setIndex(_pcal); + return _ft->getTime(); + } + double getPath() final; + + double getDetEnergy() final{ + _ft->setIndex(_pcal); + return _ft->getEnergy(); + } + + double getDeltaEnergy() final{ + _ft->setIndex(_phod); + return _ft->getEnergy(); + } + + short getSector() final{return 0;} + + private: + + // trck_ptr _track;//FT tracker ? + + short _pcal=-1; + short _phod=-1; + }; + using region_ft_ptr=shared_ptr; + +} + +#endif /* REGION_FT_H */ diff --git a/Banks/region_particle.cpp b/Banks/region_particle.cpp new file mode 100644 index 0000000..3d6098d --- /dev/null +++ b/Banks/region_particle.cpp @@ -0,0 +1,54 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_particle.h" + +namespace clas12 { + + region_particle::region_particle(par_ptr pars,covmat_ptr cm): + _parts(pars), + _covmat(cm) + { + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + _parts(pars), + _covmat(cm), + _ft(ftp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): + _parts(pars), + _covmat(cm), + _scint(scp), + _trck(trp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _cher(chp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _cher(chp), + _ft(ftp) + { + + } + + +} diff --git a/Banks/region_particle.h b/Banks/region_particle.h new file mode 100644 index 0000000..eef944f --- /dev/null +++ b/Banks/region_particle.h @@ -0,0 +1,105 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_particle.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_PARTICLE_H +#define REGION_PARTICLE_H + +#include "clas12defs.h" +#include "particle.h" +#include "covmatrix.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "forwardtagger.h" + + +namespace clas12 { + + class region_particle { + + + public: + + + region_particle(par_ptr pars,covmat_ptr cm); + //For region_ft + region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + //For region_cdet + region_particle(par_ptr pars,covmat_ptr cm, + scint_ptr scp, trck_ptr trp); + //For region_fdet + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, cher_ptr chp); + //For all regions + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp); + + virtual ~region_particle()=default; + + //////////////////////////////////////////////////////////// + /// derived classes must define there own sort + /// i.e. how the detector banks relate to that region + virtual bool sort(){ + _pentry=_parts->getEntry(); + //check for covarince matrix + _pcmat=_covmat->getIndex(_pentry); + return true; + } + + int getPid(){_parts->setEntry(_pentry);return _parts->getPid();} + + virtual double getTime()=0; + virtual double getPath()=0; + virtual double getDetEnergy()=0; + virtual double getDeltaEnergy()=0; + virtual short getSector() =0; + + const par_ptr par() const{_parts->setEntry(_pentry);return _parts;}; + const covmat_ptr covmat() const{_covmat->setIndex(_pcmat);return _covmat;}; + virtual const cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;}; + virtual const scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;}; + virtual const trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;}; + virtual const cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; + virtual const ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; + + const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();}; + + + short region() const {return _region;} + + + protected: + + par_ptr _parts; + covmat_ptr _covmat; + ft_ptr _ft; + cal_ptr _cal; + scint_ptr _scint; + trck_ptr _trck; + cher_ptr _cher; + + + //particle index + short _pentry=-1; + short _pcmat=-1; + short _region=-1; + + }; + //pointer "typedef" + using region_part_ptr=shared_ptr; + + +} + +#endif /* REGION_PARTICLE_H */ diff --git a/Banks/scintillator.h b/Banks/scintillator.h index fb73867..7c3833a 100644 --- a/Banks/scintillator.h +++ b/Banks/scintillator.h @@ -5,8 +5,8 @@ */ /* - * File: detector.h - * Author: gavalian + * File: scintillator.h + * Author: dglazier * * Created on April 27, 2017, 10:01 AM */ @@ -113,6 +113,8 @@ namespace clas12 { }; //class scintillator + using scint_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/Banks/tracker.h b/Banks/tracker.h index eee4dfa..c703193 100644 --- a/Banks/tracker.h +++ b/Banks/tracker.h @@ -109,6 +109,8 @@ namespace clas12 { }; //class tracker + using trck_ptr=shared_ptr; + }//namespace clas12 #endif /* UTILS_H */ diff --git a/RunRoot/CleanROOT.C~ b/RunRoot/CleanROOT.C~ deleted file mode 100644 index 556c168..0000000 --- a/RunRoot/CleanROOT.C~ +++ /dev/null @@ -1,14 +0,0 @@ -{ - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.so"); - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.d"); - gSystem->Exe("rm $CLAS12TOOL/Hipo/*.pcm"); - - gSystem->Exe("rm $CLAS12TOOL/Banks/*.so"); - gSystem->Exe("rm $CLAS12TOOL/Banks/*.d"); - gSystem->Exe("rm $CLAS12TOOL/Banks/*.pcm"); - - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.so"); - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.d"); - gSystem->Exe("rm $CLAS12TOOL/RunRoot/*.pcm"); - -} diff --git a/RunRoot/HallBEvent.C b/RunRoot/HallBEvent.C new file mode 100644 index 0000000..2c13692 --- /dev/null +++ b/RunRoot/HallBEvent.C @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "hallB_event.h" + +using namespace clas12; + +//just make the code a bit neater when using unique_ptr +using P4_=TLorentzVector; +using p4_uptr = std::unique_ptr; + +void HallBEvent(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + + ///////////////////////////////////// + //ignore this just getting file name! + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + ///////////////////////////////////// + + + cout<<"Analysing hipo file "<GetParticle(2212)->Mass()); + //remember these are really just TLorentzVector* + auto el=p4_uptr(new P4_(0,0,0,db->GetParticle(11)->Mass())); + auto pr=p4_uptr(new P4_(0,0,0,db->GetParticle(2212)->Mass())); + auto g1=p4_uptr(new P4_(0,0,0,0)); + auto g2=p4_uptr(new P4_(0,0,0,0)); + auto pip=p4_uptr(new P4_(0,0,0,db->GetParticle(211)->Mass())); + auto pim=p4_uptr(new P4_(0,0,0,db->GetParticle(-211)->Mass())); + + //a histogram (pre C++11 !) + auto* hmiss=new TH1F("missM","missM",200,-2,3); + + gBenchmark->Start("timer"); + int counter=0; + + // while(reader.next()==true){// (map 4.5s for 1M events) + + while(event.next()==true){ //(5.6s) vector + all loop (7.6s) + // 7M =75.05 seconds Cpu Time = 48.65s + //(7.2s) map + all loop (9.4s) + //(6.9s) uomap+ all loop (8.7s) + //7M = 85.74 seconds Cpu Time = 59.70s + //i.e. using maps is 2.5x slower! + + + + event.head()->getStartTime(); + + //Loop over all particles to see how to access detector info. + for(auto& p : event.getDetParticles()){ + // get predefined selected information + p->getTime(); + p->getDetEnergy(); + p->getDeltaEnergy(); + // get any detector information (if exists for this particle) + // there should be a get function for any entry in the bank + switch(p->region()) {// (+1s per 1M) + case FD : + p->cal(PCAL)->getEnergy(); + p->cal(ECIN)->getEnergy(); + p->cal(ECOUT)->getEnergy(); + p->sci(FTOF1A)->getEnergy(); + p->sci(FTOF1B)->getEnergy(); + p->sci(FTOF2)->getEnergy(); + p->trk(DC)->getSector(); + p->che(HTCC)->getNphe(); + p->che(LTCC)->getNphe(); + break; + case FT : + p->ft(FTCAL)->getEnergy(); + p->ft(FTHODO)->getEnergy(); + break; + case CD: + p->sci(CTOF)->getEnergy(); + p->sci(CND)->getEnergy(); + break; + } + // covariance matrix (comment in to see!) + // p->covmat()->print(); + p->cmat(); + } + // get particles by type (+1s overhead per 1M (include fill hist)) + auto electrons=event.getByID(11); + auto gammas=event.getByID(22); + auto protons=event.getByID(2212); + auto pips=event.getByID(211); + auto pims=event.getByID(-211); + + if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && + pips.size()==1 &&pims.size() == 1){ + + // set the particle momentum + // if we wanted to integrate more ROOT we could + // return direct TLorentzVector + // i.e. auto el = electrons[0]->p4(); etc. + el->SetXYZM(electrons[0]->par()->getPx(),electrons[0]->par()->getPy(), + electrons[0]->par()->getPz(),el->M()); + pr->SetXYZM(protons[0]->par()->getPx(),protons[0]->par()->getPy(), + protons[0]->par()->getPz(),pr->M()); + g1->SetXYZM(gammas[0]->par()->getPx(),gammas[0]->par()->getPy(), + gammas[0]->par()->getPz(),0); + g2->SetXYZM(gammas[1]->par()->getPx(),gammas[1]->par()->getPy(), + gammas[1]->par()->getPz(),0); + pip->SetXYZM(pips[0]->par()->getPx(),pips[0]->par()->getPy(), + pips[0]->par()->getPz(),pip->M()); + pim->SetXYZM(pims[0]->par()->getPx(),pims[0]->par()->getPy(), + pims[0]->par()->getPz(),pim->M()); + + TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; + hmiss->Fill(miss.M2()); + + } + + counter++; + // if(counter==1E6) break; + + } + gBenchmark->Stop("timer"); + gBenchmark->Print("timer"); + hmiss->DrawCopy(); + + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "<getSize(); double starttime = event.header().getStartTime(); int pcount=0; while(event.next_particle()){ - int pid = event.particles().getPid(); + //std::cout<<" particle "<getPid(); float time=event.getTime()-starttime; float ECal=event.getCalTotEnergy(); - float PCalE=event.calorimeter().getEnergy(); //precal by default + float PCalE=cal->getEnergy(); //precal by default event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); + float PCalTime=cal->getTime(); event.getHTCC(); - int nHTCC=event.cherenkov().getNphe(); + int nHTCC=cher->getNphe(); event.getLTCC(); - int nLTCC=event.cherenkov().getNphe(); + int nLTCC=cher->getNphe(); float trchi2=event.getTrackChi2(); - } - + // if(event.isFT()) std::cout<< " FT HIT "< elapsed = finish - start; diff --git a/RunRoot/MesonexEvent.C~ b/RunRoot/MesonexEvent.C~ deleted file mode 100644 index 56651ed..0000000 --- a/RunRoot/MesonexEvent.C~ +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - - gBenchmark->Start("clas12root"); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<Stop("clas12root"); - gBenchmark->Print("clas12root"); - -} diff --git a/RunRoot/MesonexEventHist.C b/RunRoot/MesonexEventHist.C index 12d43d9..37cd377 100644 --- a/RunRoot/MesonexEventHist.C +++ b/RunRoot/MesonexEventHist.C @@ -41,7 +41,7 @@ void MesonexEventHist(){ TH2F* hPth=new TH2F("ThetaP","#theta v p",100,0,12,100,0,180); TLorentzVector p4; - clas12::particle pars= event.particles(); + clas12::particle *pars= event.particles_ptr(); int counter=0; while(reader.next()==true){ @@ -50,13 +50,13 @@ void MesonexEventHist(){ double starttime = event.header().getStartTime(); while(event.next_particle()){ - int pid = event.particles().getPid(); - p4.SetXYZM(pars.getPx(),pars.getPy(),pars.getPz(),0); + int pid = pars->getPid(); + p4.SetXYZM(pars->getPx(),pars->getPy(),pars->getPz(),0); hPth->Fill(p4.P(),p4.Theta()*TMath::RadToDeg()); float time=event.getTime(); event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); + float PCalTime=event.calorimeter_ptr()->getTime(); float tdiff=time-PCalTime; if(tdiff!=0)htdiff->Fill(tdiff); } diff --git a/RunRoot/MesonexEventTree.C~ b/RunRoot/MesonexEventTree.C~ deleted file mode 100644 index 56651ed..0000000 --- a/RunRoot/MesonexEventTree.C~ +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - - gBenchmark->Start("clas12root"); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<Stop("clas12root"); - gBenchmark->Print("clas12root"); - -} diff --git a/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm b/RunRoot/MesonexEvent_C_ACLiC_dict_rdict.pcm deleted file mode 100644 index 7587ced8c9906c4ca3fece533ddcb1e325403350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1179 zcmb`H!AiqG5QZl;MJ-ZL5$P>=!C=9gNJFe5v|36~1aVE%twh^w$ZlJED1y)6tvAob zNAM*041y2Pi}n?q-3raElqN8{%ffv7&p$&V#st9l8vyD6`T%1G&mo3}G1UJLxXIJy z=hww=e|_}&p=t2+KAv39UPmB7&o@804m1=QUjs-x$9|I@nOzn=m|oN6dwJ7Vo5NT$ zZ&uqu6$P4Q%2_}kiyayWViU_Q`8KKho* zR@IqP`6seYtt9hTo%7ng6-90@OGqVRg2^g5<(pPuxbog$4TIJ0sV8^=U<;O%Nsz+q z_;(%S+lsIBP5Bu@oL)%lv@tjPD#k8Ic4`Hmj%i;eq!_eYbA!tYtSeJa71)*FYzM1l z(E%5cAKV>o5Ml)$<#<)G%V%zj^0kR0hVVs`PHe!Q;3R3=3Z^CryMnMJCkc6ST9fD{ iVis)~A{Ocl<|o#GP#Ke%ny-Eq$(oOYrw_XOFYpHg +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "region_fdet.h" + +using namespace clas12; + + +void RegionFDET(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + cout<<"Analysing hipo file "<("REC::Particle",reader); + auto banksPART=make_shared();banksPART->init("REC::Particle",reader); + + //make a link to the REC::Calorimeter banks + // auto banksCAL=make_shared("REC::Calorimeter",reader); + auto banksCAL=make_shared();banksCAL->init("REC::Calorimeter",reader); + //make a link to the REC::Scintillator banks + auto banksSCINT=make_shared();banksSCINT->init("REC::Scintillator",reader); + //make a link to the REC::Tracker banks + auto banksTRCK=make_shared();banksTRCK->init("REC::Track",reader); + //make a link to the REC::Cherenkov banks + auto banksCHER=make_shared();banksCHER->init("REC::Cherenkov",reader); + + + + //connect ft and particle banks to detector_region for parsing + clas12::region_fdet FDet(banksPART,banksCAL,banksSCINT,banksTRCK,banksCHER); + + + int counter=0; + while(reader.next()==true){ + auto Np=banksPART->getSize(); + + for(int i=0;isetEntry(i); + FDet.coordinate(); + // cout<setIndex(0); + // cout< elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "< #include #include "reader.h" -#include "mesonex_event.h" +#include "particle.h" +#include "forwardtagger.h" +#include "region_ft.h" +using namespace clas12; -void MesonexEvent(){ +void RegionFT(){ // Record start time auto start = std::chrono::high_resolution_clock::now(); @@ -29,40 +32,35 @@ void MesonexEvent(){ exit(0); } cout<<"Analysing hipo file "<(forwardtagger("REC::ForwardTagger",reader)); - //clas12::vector3 electron; + //make a link to the REC::Particles bank + auto banksPart=make_shared(particle("REC::Particle",reader)); + + //connect ft and particle banks to detector_region for parsing + clas12::region_ft FT(banksPart,banksFT); + + int counter=0; while(reader.next()==true){ - event.reset(); - int np = event.particles().getSize(); - - double starttime = event.header().getStartTime(); - int pcount=0; - while(event.next_particle()){ - int pid = event.particles().getPid(); - float time=event.getTime()-starttime; - float ECal=event.getCalTotEnergy(); - float PCalE=event.calorimeter().getEnergy(); //precal by default - event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); - event.getHTCC(); - int nHTCC=event.cherenkov().getNphe(); - event.getLTCC(); - int nLTCC=event.cherenkov().getNphe(); - float trchi2=event.getTrackChi2(); - } - - counter++; - if(counter==1E7) break; + + FT.configure_event(); + auto calor=FT.CAL(); + calor->setIndex(0); + cout< elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count() << " s\n"; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "<Getenv("CLAS12TOOL"))!=TString()){ + if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")){ + if(gSystem->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")==0){ //Found liblz4 in LD_LIBRARY_PATH gROOT->ProcessLine("#define __LZ4__"); gSystem->AddIncludePath("-D__LZ4__"); @@ -38,8 +38,12 @@ gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); - // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/covmatrix.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/hallB_event.cpp+"); } From 508a32cb95617109982a4b08ce96cd249056064e Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 13 Dec 2018 23:00:44 +0000 Subject: [PATCH 13/56] mesonex_example --- Examples/mesonexevent_example.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Examples/mesonexevent_example.cc b/Examples/mesonexevent_example.cc index 5b17889..3599b88 100644 --- a/Examples/mesonexevent_example.cc +++ b/Examples/mesonexevent_example.cc @@ -11,7 +11,7 @@ // Autogenerated code by HIPO 3.1 io library // Modify the main loop to suite your needs // Date: 07/17/2018 -// Author: G.Gavalian +// Author: G.Gavalian D. Glazier //*********************************************************************** #include #include @@ -40,36 +40,38 @@ int main(int argc, char** argv) { reader.open(inputFile); clas12::mesonex_event event(reader); + clas12::calorimeter* cal=event.calorimeter_ptr(); + clas12::cherenkov* cher=event.cherenkov_ptr(); + clas12::particle* part=event.particles_ptr(); //clas12::vector3 electron; int counter=0; while(reader.next()==true){ event.reset(); - int np = event.particles().getSize(); + int np = part->getSize(); double starttime = event.header().getStartTime(); int pcount=0; while(event.next_particle()){ //std::cout<<" particle "<getPid(); float time=event.getTime()-starttime; float ECal=event.getCalTotEnergy(); - float PCalE=event.calorimeter().getEnergy(); //precal by default + float PCalE=cal->getEnergy(); //precal by default event.getPCAL(); - float PCalTime=event.calorimeter().getTime(); + float PCalTime=cal->getTime(); event.getHTCC(); - int nHTCC=event.cherenkov().getNphe(); + int nHTCC=cher->getNphe(); event.getLTCC(); - int nLTCC=event.cherenkov().getNphe(); + int nLTCC=cher->getNphe(); float trchi2=event.getTrackChi2(); // if(event.isFT()) std::cout<< " FT HIT "< elapsed = finish - start; std::cout << "Elapsed time: " << elapsed.count() << " s\n"; From 106ca5e9ba08bf96e5553a90a058ad3180dee467 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 14 Dec 2018 00:27:24 +0000 Subject: [PATCH 14/56] update for make --- Banks/calorimeter.h | 2 +- Banks/cherenkov.h | 2 +- Banks/clas12defs.h | 48 ++++++++++++++++++++--------------------- Banks/covmatrix.cpp | 3 ++- Banks/covmatrix.h | 18 ++++++++-------- Banks/forwardtagger.h | 2 +- Banks/hallB_event.cpp | 16 +++++++------- Banks/hallB_event.h | 6 +++--- Banks/header.h | 2 +- Banks/particle.h | 2 +- Banks/region_cdet.h | 2 +- Banks/region_fdet.h | 2 +- Banks/region_ft.h | 2 +- Banks/region_particle.h | 2 +- Banks/scintillator.h | 2 +- Banks/tracker.h | 2 +- 16 files changed, 57 insertions(+), 56 deletions(-) diff --git a/Banks/calorimeter.h b/Banks/calorimeter.h index 6b69b12..9a5dd34 100644 --- a/Banks/calorimeter.h +++ b/Banks/calorimeter.h @@ -169,7 +169,7 @@ namespace clas12 { }; //class calorimeter - using cal_ptr=shared_ptr; + using cal_ptr=std::shared_ptr; }//namespace clas12 diff --git a/Banks/cherenkov.h b/Banks/cherenkov.h index b34537c..63432ac 100644 --- a/Banks/cherenkov.h +++ b/Banks/cherenkov.h @@ -104,7 +104,7 @@ namespace clas12 { }; //class cherenkov - using cher_ptr=shared_ptr; + using cher_ptr=std::shared_ptr; }//namespace clas12 diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h index 461b93d..923388c 100644 --- a/Banks/clas12defs.h +++ b/Banks/clas12defs.h @@ -4,38 +4,38 @@ namespace clas12{ //regions - static const ushort FT = 1000; - static const ushort FD = 2000; - static const ushort CD = 3000; + static const short FT = 1000; + static const short FD = 2000; + static const short CD = 3000; //detectors - static const ushort FTOF = 12; - static const ushort CTOF = 4; - static const ushort CND = 3; - static const ushort CVT = 5; - static const ushort DC = 6; - static const ushort EC = 7; - static const ushort FTCAL = 10; - static const ushort FTHODO = 11; - static const ushort HTCC = 15; - static const ushort LTCC = 16; + static const short FTOF = 12; + static const short CTOF = 4; + static const short CND = 3; + static const short CVT = 5; + static const short DC = 6; + static const short EC = 7; + static const short FTCAL = 10; + static const short FTHODO = 11; + static const short HTCC = 15; + static const short LTCC = 16; //layers - static const ushort FTOF1A = 0; - static const ushort FTOF1B = 1; - static const ushort FTOF2 = 2; + static const short FTOF1A = 0; + static const short FTOF1B = 1; + static const short FTOF2 = 2; //CDET scint layers same as detectors - //static const ushort CND = 3; - //static const ushort CTOF = 4; - static const ushort CND1 = 1; - static const ushort CND2 = 2; - static const ushort CND3 = 3; + //static const short CND = 3; + //static const short CTOF = 4; + static const short CND1 = 1; + static const short CND2 = 2; + static const short CND3 = 3; - static const ushort PCAL = 1; - static const ushort ECIN = 4; - static const ushort ECOUT = 7; + static const short PCAL = 1; + static const short ECIN = 4; + static const short ECOUT = 7; // using indices =vector; diff --git a/Banks/covmatrix.cpp b/Banks/covmatrix.cpp index c2dc237..2753061 100644 --- a/Banks/covmatrix.cpp +++ b/Banks/covmatrix.cpp @@ -5,6 +5,7 @@ */ #include "covmatrix.h" +#include #include namespace clas12 { @@ -12,7 +13,7 @@ namespace clas12 { void covmatrix::init(const char *bankName, hipo::reader &r){ initBranches(bankName,r); - cout<<" covmatrix::init "< >; - using IndMatrix =vector >; + using CovMatrix =std::vector >; + using IndMatrix =std::vector >; class covmatrix : public hipo::bank { @@ -55,15 +55,15 @@ namespace clas12 { private : - CovMatrix _matrix={5,vector(5,0)}; - IndMatrix _morder={5,vector(5,-1)}; - int _pindex_order=-1; - int _index=-1; - //std::map _rmap; - std::vector _rvec; + CovMatrix _matrix={5,std::vector(5,0)}; + IndMatrix _morder={5,std::vector(5,-1)}; + int _pindex_order=-1; + int _index=-1; + //std::map _rmap; + std::vector _rvec; }; - using covmat_ptr=shared_ptr; + using covmat_ptr=std::shared_ptr; } #endif /* UTILS_H */ diff --git a/Banks/forwardtagger.h b/Banks/forwardtagger.h index b8b8ae1..59df59e 100644 --- a/Banks/forwardtagger.h +++ b/Banks/forwardtagger.h @@ -111,7 +111,7 @@ namespace clas12 { }; //class forwardtagger - using ft_ptr=shared_ptr; + using ft_ptr=std::shared_ptr; }//namespace clas12 diff --git a/Banks/hallB_event.cpp b/Banks/hallB_event.cpp index dc787c3..e883599 100644 --- a/Banks/hallB_event.cpp +++ b/Banks/hallB_event.cpp @@ -11,14 +11,14 @@ namespace clas12 { hallB_event::hallB_event(hipo::reader &r){ _reader=&r; //keep a pointer to the reader //initialise banks pointers - _bparts = make_shared(); - _bcovmat= make_shared(); - _bhead = make_shared
(); - _bcal = make_shared(); - _bscint = make_shared(); - _btrck = make_shared(); - _bcher = make_shared(); - _bft = make_shared(); + _bparts = std::make_shared(); + _bcovmat= std::make_shared(); + _bhead = std::make_shared
(); + _bcal = std::make_shared(); + _bscint = std::make_shared(); + _btrck = std::make_shared(); + _bcher = std::make_shared(); + _bft = std::make_shared(); //initialise banks _bparts->init("REC::Particle",r); diff --git a/Banks/hallB_event.h b/Banks/hallB_event.h index ef74f92..6fea49b 100644 --- a/Banks/hallB_event.h +++ b/Banks/hallB_event.h @@ -53,16 +53,16 @@ namespace clas12 { void addARegionFDet(){ //Forward detector needs particles, calorimeter, scintillator, //track, cherenkov - _rfdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + _rfdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); } void addARegionCDet(){ //Forward detector needs particles, calorimeter, scintillator, //track, cherenkov - _rcdets.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + _rcdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); } void addARegionFT(){ //Forward tagger needs particles and forward tagger - _rfts.push_back(make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + _rfts.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); } diff --git a/Banks/header.h b/Banks/header.h index 7047766..9d6856a 100644 --- a/Banks/header.h +++ b/Banks/header.h @@ -75,7 +75,7 @@ namespace clas12 { }; - using head_ptr=shared_ptr; + using head_ptr=std::shared_ptr; } diff --git a/Banks/particle.h b/Banks/particle.h index b04bbd3..65337e6 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -93,7 +93,7 @@ namespace clas12 { } }; - using par_ptr=shared_ptr; + using par_ptr=std::shared_ptr; } diff --git a/Banks/region_cdet.h b/Banks/region_cdet.h index a3d0aef..e438660 100644 --- a/Banks/region_cdet.h +++ b/Banks/region_cdet.h @@ -100,7 +100,7 @@ namespace clas12 { }; - using region_cdet_ptr=shared_ptr; + using region_cdet_ptr=std::shared_ptr; } diff --git a/Banks/region_fdet.h b/Banks/region_fdet.h index 17515fa..d34bdd2 100644 --- a/Banks/region_fdet.h +++ b/Banks/region_fdet.h @@ -120,7 +120,7 @@ namespace clas12 { }; - using region_fdet_ptr=shared_ptr; + using region_fdet_ptr=std::shared_ptr; } diff --git a/Banks/region_ft.h b/Banks/region_ft.h index c93b2dc..3b040e9 100644 --- a/Banks/region_ft.h +++ b/Banks/region_ft.h @@ -63,7 +63,7 @@ namespace clas12 { short _pcal=-1; short _phod=-1; }; - using region_ft_ptr=shared_ptr; + using region_ft_ptr=std::shared_ptr; } diff --git a/Banks/region_particle.h b/Banks/region_particle.h index eef944f..d04ae53 100644 --- a/Banks/region_particle.h +++ b/Banks/region_particle.h @@ -97,7 +97,7 @@ namespace clas12 { }; //pointer "typedef" - using region_part_ptr=shared_ptr; + using region_part_ptr=std::shared_ptr; } diff --git a/Banks/scintillator.h b/Banks/scintillator.h index 7c3833a..63643c7 100644 --- a/Banks/scintillator.h +++ b/Banks/scintillator.h @@ -113,7 +113,7 @@ namespace clas12 { }; //class scintillator - using scint_ptr=shared_ptr; + using scint_ptr=std::shared_ptr; }//namespace clas12 diff --git a/Banks/tracker.h b/Banks/tracker.h index c703193..d54d835 100644 --- a/Banks/tracker.h +++ b/Banks/tracker.h @@ -109,7 +109,7 @@ namespace clas12 { }; //class tracker - using trck_ptr=shared_ptr; + using trck_ptr=std::shared_ptr; }//namespace clas12 From ebc3c2ef7445360ffe165838539444f11d69e33d Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 11 Jan 2019 14:52:42 +0000 Subject: [PATCH 15/56] add mcparticle --- Banks/covmatrix.cpp | 8 ++- Banks/hallB_event.cpp | 2 + Banks/hallB_event.h | 8 ++- Banks/mcparticle.cpp | 26 ++++++++ Banks/mcparticle.h | 98 ++++++++++++++++++++++++++++ Banks/particle.h | 16 ++--- Banks/region_fdet.h | 2 +- Banks/region_ft.cpp | 2 +- Banks/tracker.h | 6 +- RunRoot/HallBCheckTimeAlignment.C | 104 ++++++++++++++++++++++++++++++ RunRoot/HallBEvent.C | 2 +- RunRoot/importToROOT2.C | 3 + 12 files changed, 260 insertions(+), 17 deletions(-) create mode 100644 Banks/mcparticle.cpp create mode 100644 Banks/mcparticle.h create mode 100644 RunRoot/HallBCheckTimeAlignment.C diff --git a/Banks/covmatrix.cpp b/Banks/covmatrix.cpp index 2753061..a08801e 100644 --- a/Banks/covmatrix.cpp +++ b/Banks/covmatrix.cpp @@ -69,8 +69,10 @@ namespace clas12 { void covmatrix::print(){ matrix(); std::cout<<"Cov Matrix "<(); + _bmcparts = std::make_shared(); _bcovmat= std::make_shared(); _bhead = std::make_shared
(); _bcal = std::make_shared(); @@ -22,6 +23,7 @@ namespace clas12 { //initialise banks _bparts->init("REC::Particle",r); + _bmcparts->init("MC::Lund",r); _bcovmat->init("REC::CovMat",r); _bhead->init("REC::Event",r); _bcal->init("REC::Calorimeter",r); diff --git a/Banks/hallB_event.h b/Banks/hallB_event.h index 6fea49b..5e049dd 100644 --- a/Banks/hallB_event.h +++ b/Banks/hallB_event.h @@ -16,6 +16,7 @@ #include "clas12defs.h" #include "reader.h" #include "particle.h" +#include "mcparticle.h" #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" @@ -39,8 +40,9 @@ namespace clas12 { public: + hallB_event()=default; hallB_event(hipo::reader &r); - //~hallB_event()=default; + ~hallB_event()=default; bool next(){ if(!_reader->next()) @@ -67,12 +69,13 @@ namespace clas12 { virtual const head_ptr head() const{return _bhead;}; + virtual const mcpar_ptr mcparts() const{return _bmcparts;}; std::vector& getDetParticles(){return _detParticles;} std::vector getByID(int id); - + int getNParticles() const {return _detParticles.size();} private: @@ -82,6 +85,7 @@ namespace clas12 { //DST banks head_ptr _bhead; par_ptr _bparts; + mcpar_ptr _bmcparts; covmat_ptr _bcovmat; cal_ptr _bcal; scint_ptr _bscint; diff --git a/Banks/mcparticle.cpp b/Banks/mcparticle.cpp new file mode 100644 index 0000000..774e187 --- /dev/null +++ b/Banks/mcparticle.cpp @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "mcparticle.h" + + +namespace clas12 { + + void mcparticle::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + pid_order = getEntryOrder("pid"); + px_order = getEntryOrder("px"); + py_order = getEntryOrder("py"); + pz_order = getEntryOrder("pz"); + vx_order = getEntryOrder("vx"); + vy_order = getEntryOrder("vy"); + vz_order = getEntryOrder("vz"); + mass_order = getEntryOrder("mass"); + + } + + +} diff --git a/Banks/mcparticle.h b/Banks/mcparticle.h new file mode 100644 index 0000000..2039f99 --- /dev/null +++ b/Banks/mcparticle.h @@ -0,0 +1,98 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: mcparticle.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef MCPARTICLE_H +#define MCPARTICLE_H + +#include "bank.h" +#include "vectors.h" + +namespace clas12 { + + class mcparticle : public hipo::bank { + + private: + + int pid_order; + int px_order; + int py_order; + int pz_order; + int vx_order; + int vy_order; + int vz_order; + int mass_order; + + short _entry=0; + + public: + + mcparticle() = default; + + mcparticle(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){}; + + ~mcparticle() = default; + + + void init(const char *bankName, hipo::reader &r); + int getPid(int index) { return getInt(pid_order,index);} + float getPx(int index) { return getFloat(px_order,index);} + float getPy(int index) { return getFloat(py_order,index);} + float getPz(int index) { return getFloat(pz_order,index);} + float getVx(int index) { return getFloat(vx_order,index);} + float getVy(int index) { return getFloat(vy_order,index);} + float getVz(int index) { return getFloat(vz_order,index);} + float getMass(int index) { return getFloat(mass_order,index);} + + int getPid() { return getInt(pid_order,_entry);} + float getPx() { return getFloat(px_order,_entry);} + float getPy() { return getFloat(py_order,_entry);} + float getPz() { return getFloat(pz_order,_entry);} + float getVx() { return getFloat(vx_order,_entry);} + float getVy() { return getFloat(vy_order,_entry);} + float getVz() { return getFloat(vz_order,_entry);} + float getMass() { return getFloat(mass_order,_entry);} + + void getVector3(int index, vector3 &vect){ + vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index)); + } + + void getVector4(int index, vector4 &vect, double mass){ + vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index),getFloat(mass_order,index)); + } + + float getP(){ + auto x= getFloat(px_order,_entry); + auto y= getFloat(py_order,_entry); + auto z= getFloat(pz_order,_entry); + return sqrt(x*x+y*y+z*z); + } + + void setEntry(short i){ _entry=i;} + short getEntry() const {return _entry;} + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * mcparticles and or map mcparticles by pid or type (i.e. charge) + */ + void notify() override { + //printf("mcparticle class is read again\n"); + } + }; + + using mcpar_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Banks/particle.h b/Banks/particle.h index 65337e6..8569d00 100644 --- a/Banks/particle.h +++ b/Banks/particle.h @@ -14,13 +14,6 @@ #ifndef PARTICLE_H #define PARTICLE_H -#include -#include -#include -#include -#include -#include -#include #include "bank.h" #include "vectors.h" @@ -81,7 +74,14 @@ namespace clas12 { vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), getFloat(pz_order,index),mass); } - void setEntry(short i){ _entry=i;} + + float getP(){ + auto x= getFloat(px_order,_entry); + auto y= getFloat(py_order,_entry); + auto z= getFloat(pz_order,_entry); + return sqrt(x*x+y*y+z*z); + } + void setEntry(short i){ _entry=i;} short getEntry() const {return _entry;} /** * This is virtual method from hipo::bank it will be called diff --git a/Banks/region_fdet.h b/Banks/region_fdet.h index d34bdd2..2d75aed 100644 --- a/Banks/region_fdet.h +++ b/Banks/region_fdet.h @@ -49,7 +49,7 @@ namespace clas12 { const cher_ptr che(ushort lay) const final; - + double getTime() final{ if(_ptof){ _scint->setIndex(_ptof); diff --git a/Banks/region_ft.cpp b/Banks/region_ft.cpp index 1bcdf37..44e41f1 100644 --- a/Banks/region_ft.cpp +++ b/Banks/region_ft.cpp @@ -33,7 +33,7 @@ namespace clas12 { double ftx=_ft->getX(); double fty=_ft->getY(); double ftz=_ft->getZ(); - return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + return sqrt(ftx*ftx+fty*fty+ftz*ftz); } return 0; } diff --git a/Banks/tracker.h b/Banks/tracker.h index d54d835..952605e 100644 --- a/Banks/tracker.h +++ b/Banks/tracker.h @@ -85,7 +85,11 @@ namespace clas12 { if(_index>-1)return getFloat(_chi2nomm_order,_index); return 0; } - + double getChi2N(){ + auto N=getChi2nomm(); + if(N)return getChi2()/N; + return 0; + } void init(const char *bankName, hipo::reader &r,std::string items="") override; diff --git a/RunRoot/HallBCheckTimeAlignment.C b/RunRoot/HallBCheckTimeAlignment.C new file mode 100644 index 0000000..6e6de31 --- /dev/null +++ b/RunRoot/HallBCheckTimeAlignment.C @@ -0,0 +1,104 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "reader.h" +#include "hallB_event.h" + +using namespace clas12; + +//just make the code a bit neater when using unique_ptr +using P4_=TLorentzVector; +using p4_uptr = std::unique_ptr; + +void HallBCheckTimeAlignment(){ + // Record start time + auto start = std::chrono::high_resolution_clock::now(); + + + ///////////////////////////////////// + //ignore this just getting file name! + TString inputFile; + TString outputFile; + + for(Int_t i=1;iArgc();i++){ + TString opt=gApplication->Argv(i); + if((opt.Contains(".hipo"))){ + inputFile=opt(5,opt.Sizeof()); + } + } + if(inputFile==TString()) { + std::cout << " *** please provide a file name..." << std::endl; + exit(0); + } + ///////////////////////////////////// + + + cout<<"Analysing hipo file "<Start("timer"); + int counter=0; + + const double fPDGMass=0.00051099891; + while(event.next()==true){ + + + hRFTimeFD->Fill(event.head()->getStartTime()-event.head()->getRFTime()); + //Loop over all particles to see how to access detector info. + for(auto& p : event.getDetParticles()){ + if(p->getPid()==11){//e- + double pP=p->par()->getP(); + double HypBeta= pP/sqrt(pP*pP+fPDGMass*fPDGMass); + double HypTime=p->getPath()/100/HypBeta/2.99792e+08*1E9 ; + double DeltaTime=p->getTime()-HypTime - event.head()->getStartTime() ; + + if(p->region()==1000)hDeltaTimeFT->Fill(DeltaTime); + else if(p->region()==2000)hDeltaTimeFD->Fill(DeltaTime); + else if(p->region()==3000)hDeltaTimeCD->Fill(DeltaTime); + } + + } + counter++; + if(counter==1E6) break; + + } + gBenchmark->Stop("timer"); + gBenchmark->Print("timer"); + auto c1=new TCanvas(); + c1->Divide(2,2); + c1->cd(1); + hRFTimeFD->DrawCopy(); + c1->cd(2); + hDeltaTimeFT->DrawCopy(); + c1->cd(3); + hDeltaTimeFD->DrawCopy(); + c1->cd(4); + hDeltaTimeCD->DrawCopy(); + c1->Draw(); + auto finish = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = finish - start; + std::cout << "Elapsed time: " << elapsed.count()<< " events = "<Stop("timer"); diff --git a/RunRoot/importToROOT2.C b/RunRoot/importToROOT2.C index 5c72569..e69f803 100644 --- a/RunRoot/importToROOT2.C +++ b/RunRoot/importToROOT2.C @@ -1,4 +1,6 @@ { + + gSystem->SetAclicMode(TSystem::kOpt); if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ cout<<"You must define the base directory CLAS12TOOL"<LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mcparticle.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); From a52b28421c326b1e70dba02d5228a1095449874a Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 11 Jan 2019 14:54:46 +0000 Subject: [PATCH 16/56] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aab6ff6..2509927 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,4 @@ for CLAS12 data structures and convertor to ROOT. ## To Download -git clone --recurse-submodules https://github.com/gavalian/Clas12Tool.git +git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git From eae079c57bd652a48b23f16f2732e5cadef68830 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 11 Jan 2019 14:55:51 +0000 Subject: [PATCH 17/56] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2509927..7256fa0 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,5 @@ for CLAS12 data structures and convertor to ROOT. ## To Download git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git + +git checkout mesonex From 97138b8c38780de93b9a82e1365b6fac18d566b6 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 18 Jan 2019 14:47:48 +0000 Subject: [PATCH 18/56] remove benchmark as will not compile --- Hipo/utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Hipo/utils.cpp b/Hipo/utils.cpp index 6c5e5d6..5931cd2 100644 --- a/Hipo/utils.cpp +++ b/Hipo/utils.cpp @@ -176,13 +176,13 @@ namespace hipo { void benchmark::resume(){ - first = clock.now(); + // first = clock.now(); counter++; } void benchmark::pause(){ - second = clock.now(); + // second = clock.now(); std::chrono::nanoseconds diff_ms = std::chrono::duration_cast< std::chrono::nanoseconds >( second-first ); //printf(" count = %lld\n",diff_ms.count()); From 2be979fb5e4aba06804d0b8693de639f14212aac Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 4 Feb 2019 11:34:44 +0000 Subject: [PATCH 19/56] add git ignore --- .gitignore | 78 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 45a4c1f..8484bb3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,62 @@ -# Prerequisites -*.d +# hipo source +############## +ExtraPackages/rhipo/chipo/ +html/ -# Compiled Object files -*.slo -*.lo +# Compiled source # +################### +*.com +*.class +*.dll +*.exe *.o -*.os -*.obj +*.so +*.d +*.pcm -# Precompiled Headers -*.gch -*.pch +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip -# Compiled Dynamic libraries -*.so +# Logs and databases # +###################### +*.log +*.sql +*.sqlite -# Compiled Static libraries -*.lai -*.la -*.a -*.lib +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +.nfs* +*~ -# Executables -*.exe -*.out +#Dropbox +.dropbox.attr +*conflicted* -#scons -.scon* -*.log +.ipynb_checkpoints +.ipynb_checkpoints/* -# temp -*.swp +# Data # +######## *.root +dataset*/ + +# Old copies of files # +####################### +*.old From f417b20d99a37d3669945c3456f60bfbbf08d561 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 4 Feb 2019 11:36:39 +0000 Subject: [PATCH 20/56] changing to master --- Examples/analysis | Bin 267048 -> 0 bytes Examples/clas12event_example | Bin 277512 -> 0 bytes Examples/clas12event_example.cc | 36 ++++++++++++++++++-------------- Examples/mesonexevent_example | Bin 311264 -> 0 bytes Examples/readBanks | Bin 266256 -> 0 bytes Examples/readParticles | Bin 266592 -> 0 bytes 6 files changed, 20 insertions(+), 16 deletions(-) delete mode 100755 Examples/analysis delete mode 100755 Examples/clas12event_example delete mode 100755 Examples/mesonexevent_example delete mode 100755 Examples/readBanks delete mode 100755 Examples/readParticles diff --git a/Examples/analysis b/Examples/analysis deleted file mode 100755 index 8a75031e8b29e214f1a1f3528e9044f1d6cedfa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267048 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�c$S?-f5*7 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

*hZ9)2EA3(xbAygusa*^^uK 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 diff --git a/Examples/clas12event_example b/Examples/clas12event_example deleted file mode 100755 index 9d32299f507d313adb27c3ca65e1ab4b6d5f3179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277512 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

kTYM4_>5*@ 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⋘Jk$VhGQde^ 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

wn#cz#c2R3&UXyWr9AmLfpI7Y&&vH6S$ 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 Td|mJ_-f~QhZ5#CX7W{t!qs%jD diff --git a/Examples/clas12event_example.cc b/Examples/clas12event_example.cc index 40d90c3..4c4f55b 100644 --- a/Examples/clas12event_example.cc +++ b/Examples/clas12event_example.cc @@ -43,27 +43,31 @@ int main(int argc, char** argv) { clas12::vector3 electron; - while(reader.next()==true){ + int counter=0; + while(reader.next()==true){ - int np = event.particles().getSize(); + // int np = event.particles().getSize(); - double starttime = event.header().getStartTime(); + // double starttime = event.header().getStartTime(); - for(int i = 0; i < np; i++){ - int pid = event.particles().getPid(i); - if(pid==11){ + // for(int i = 0; i < np; i++){ + // int pid = event.particles().getPid(i); + // if(pid==11){ - event.particles().getVector3(i,electron); + // event.particles().getVector3(i,electron); - double beta = event.getBeta(clas12::FTOF1A,i); - double time = event.getTime(clas12::FTOF1A,i); - double ecEnergy = event.getEnergy(clas12::EC,i); - double pcalEnergy = event.getEnergy(clas12::PCAL,i); - double sf = ecEnergy/electron.mag(); - // printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", - // pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); - } - } + // // double beta = event.getBeta(clas12::FTOF1A,i); + // //double time = event.getTime(clas12::FTOF1A,i); + // // double ecEnergy = event.getEnergy(clas12::EC,i); + // // double pcalEnergy = event.getEnergy(clas12::PCAL,i); + // // double sf = ecEnergy/electron.mag(); + // // printf("pid = %8d time = %8.3f ec = %8.3f pcal = %8.3f sf = %8.3f beta = %8.3f\n", + // // pid,time-starttime,ecEnergy,pcalEnergy,sf, beta); + // } + // } + counter++; + if(counter==1E6) break; + } auto finish = std::chrono::high_resolution_clock::now(); std::chrono::duration elapsed = finish - start; diff --git a/Examples/mesonexevent_example b/Examples/mesonexevent_example deleted file mode 100755 index 846e97feef95cb71991991915d897a04b25b97c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311264 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�grK)Yz-5B8+-v_`91I$g{DwOljV4jKZU+YcB zjC`NQHI%w`w8hJKZGj|$Ad`WC$pKKWIX5|7%zUA4}-{G5+7nu@t41c4`WD^ z!uiXO5Uesj6rzowzpOyX$cNG2{uVyGgUC}35&?b)UFazI5XW35;{(QvU(|yWaM-N> z-{R)<^yb2FlGe?4IECjb{=JSL~G z91PW;rDyr!bqE96b`-b(TR}qG71hXhY zSqSgJL!t_VLs;LP%C!yn({N>t?22pE@)3hE(TzNx#uwEdjCG zUIPR%h_J2NCz$(YelOtPmcYLSLK@4`Yq>*{BYSTQ5dM#07;GF$IO!d2OHQ+;SRQKh z?m~6YllWGNZ{zrDIsRK5{|GgM)QP`b z;xqmcKU+Z|_<1+Se}Ln!m-wS4{!0u3{05Gn!|`wA`1eZuvn0Mp;@5Hf1de|>$9GBm z&kl?JPL=rC96y5NpTY5mOZ=B4eqV_n&+)h3&iJ#NU50g(__s;?V^k6KSK;`Na{Q+` z{x0?u{Fx&08zp`ddIbL5#PM(D_)kgv-V%Sg#9zVjQ#t-Pj(@YnKk~KcZ=u95@w^^iGL5nPx#8NZM{L&K2tqkv}R6q_@W-@+8*Z8 zr4PG|`Zwx0*<&u={g%hSzELltFirJEJw+8JA6K<6-RB|oHjavz4t1G%vN>pvGvOIi zjPp(3sGA7UH|$1MO~0S9!fv9%&QziFujcxyMqc zkKKJ)JKmA1FU_hZH@c(r1BXzfXT1$iEBCA3zcS?7J?>~~?k#%geT8KYd~dXpv%Ln? zT&HS>(YSvkdJyb#oiX3>6Rbd0HFs>Z-h+IvFY5VQi52Y=8uB$yBvIt^P(}bFD5W{9 z`qu~@fOhF^gvKBFJd`957%}=ggwfal0^shKQBFej4H|*&0)H1unx~mynkOF72QEqc zlEN=4zhv^ubbjGss;7XL%J`*pAv522lM1POx`n%6w7M2qH0!6RH$e#zvQ>HLz-FO&z@JY`hyc_?ku=%ES) z?a}g9TV^E`ZCMO14(%E0C8ymcQ5rpQ!Q1%YZIZkN?eTgEriwwnQ()!r4f}}GJ{={^ zlT8?!r=DL{^GgH2Z046He%XZ!w2=xv4^7b+)9fY{o6r2>-&? zK}9ROTXq~5hxSh*8ybN9?DEy<;4S6d=m0{DywyB5+=4-I{1VSEN&J$+FDfpYCzA?| zp6R&Iq4)k4WzPoH5ELVk0Br%NgBZcjJFhidU0om z-r{MzV5fe7rHO8djT5>tK|7&;AYeA3>-stYh*33WxDM?r{dobi>i5Ex`b*(;PrNP*Y5j+62NNs9&@?+YYChxR0)*pt6?eXYVnFz+ z@=MkG484LOhX#bh`fK#iyNZ-Z_5E`fF8UY{gw(0S$JAH96m&Vf&ycF(Wl~-+nG`!* zd-Rta6 zYv{0Ef`$O2F!F?`fS>Exs)a1>#AihY8$w=4&aHT(^W{X|hU3qcBHdWh&r>bSrI=f}kHkv?O zN3j+ta7JSqo$Q2J?sj7y_Z`I~_n`}TG2NS?cvTxs;ocB&St`PxvC(|J<%C`PkWrVs z$-OAu+dmzd6~t5vN2=bjF=}!va(3=MD)>7V)ukf~55TPjs;4SOSxqiUwPdWv`2nYf zrt0hKZoNVEPO=e2->BMK?l0(d_4B~%3;U^_1;N+Xsh0E)TGmiMJd5HK_nBan&D#$1 z?prRQS{>ScSQKZh|3#!N>j;WaHenkFuIJ_52@Rr*p4qi;5gMLA&#Z=ZB)C0LReP)w z+5c^pS})PBecW_SUXm2itbf3?s5`xghNdAh-OYN_s26@l`ZY~yd6N1Kt$3v6 zGfb2Fx5u*8AUxA`{3G=T8rG{48rC=#egq^pj)jY7S0s)wW{!;)#Uyt1G+2R>DPYst zRqKdK{^e$sWQ!*S{JNx?t~fR=SxOfb?>CMuqua(ME9inl)yCSOH1TTVl9e0+GL|$1 zZ#T60cK5}c$J4Go&(UEKuY4c*unmwpEG00% zQN8W44ilq}jCvi8zcQ1o&GKes9AN^lF8KU`z;kcpO7R%^jKKRh({mepe@!H;LcFi- zJK5CoT(CV>-fJp9hrZUJ&lrSg{ZrdXOQ38{W7m$MtE!auCWt#kiIbqjzOm4zj<776 z6h!M=U>CIwsoF-%osXbK)mId2P1qys9Zo>|nSA6bU}4%>6wzKu)f!%p1tweegsy^F zmBcLVp!W>bvo6xN_~g$&|NQ;dUYq+?<8b@6wQK#>r>d(VlJvEzZ(KWV6AX82in2*v zjUk_oMXG0adpnYb(Q3bgYVx{y$*T4>&CC{jf(6+15vj?0EwvOMsNU;ilVCs>G6QmG z&6UH!yO5~HH|ibC6Z9AHrrmo*teSiaYSpm1rQfiR$lRyre+n~Mi$YyE{m4TK%X2)s zvS(0WTjoPxmyy7bkJE*~pfnTF7)$Je52N;?0f>?*4bw*^zxVz~d7Xz8-LK255An*^ zW#`Fuiv3i1Z6rGXEAo2#D?gDu=0Ajl;jmvd1+8y z=T$*oSCPCZvn&NB^cr%z@8@;_xz+CBa-)njnR_6|0BwOizWGPWkMhR9F2A$6{4NHO zA;z|v#(X^rT>kIK?@VywciY?bCm_F6ylIl(*Th!X+cC&dpA4GA%J17^l3%1ze%B&0 z;_^ER`AHWVl;4hj2j#c%qyIVi{RP3ekl*9s{UyoosAUGcZI>A!v<(@i?*4Dda4fhX zWjKfQ=(qUHZG#!Hw_Qpi(CHEr6#w@zZj&&6b4_Mb4gH18tt80Hk!Vwt*HR6a~$QB!? zqJVXYAA>UAx|4c_X(+wK6K%JG{MtR1J1O^-?ptt@o+RwCdm0gwMaH)D&#&{Gh_uwq z!(-2hC`-+i>?Yb$a|a0$EVC!?v(#)NLMTp4)%L31D|YGE%)x|uBSL6U@MlnImr(Z6m%#=;K{OF{fI45*3bP6~02Dsp@-U zIWGFSwCL=M+FXd3*SoNazm;KAeYHyoi{*6B#%m6*D_ix>oK9KaSl+)7{vIY71@jIw zrw7=(ok_1UN%bv^(_@ghMmy0&kA)cQe-)2;eQa)Eus2F<>z9&fDXV=a@F>bS)gBSo zAiKTzP!cp;)er<}J5_CJY@ERkYho#V4b@$3CmgKTs=k_77E#ykQ5)Bx5wrp=CvXFG z9GlMQG1B*7dv6Fz^>s%$3>&9yJ+vN3Dih=IKFjbN-YQh7;-MopdP40 zGojyp`(lKpCl@WU;s$S5-?AoMYprdlTJ6wIpeie>s(eLFMhljjEtrWryp?eilD~Cm zM^NjBY$n&AXwp7)^!r9#3|m8G=i-Jcv)pkXUePvV+t1QFa7Uf9k}}wnH@Y#mJgj$R zJgAAS13F}DU>cMKTfqnnrqN^0w68u0GR;OzyMwJ^F{Txu<6l{75-FX7Wo^<#6`W*s z!#1N^I>UY^c#8>*_~Qb9j-WH5C&ZtHsPk)mIU3>o`PNP=zMMb*MtzJw&740is0#e~ ziui-t-QyhI1>g;W{T~Ay$MOhjL_Uz$*mHu`I-%cj`{LtNspYPoU@;EsjKF!}BVR=c%SE4kSX!bm_qD3U-5A zPlI)nhbpI}y#xw@!2vY7-~gb!n7VRO2xSwOE0Rd0+3B$V zB^>uwP)`RW7DKmWicR9W3s<~TKroh$Th>IDS)rnVX#MIKVEZbnP)O1>$_~OwK{@}$ zwARaX#qQZ?btE6g`?Pe2fh0nR3jVTey6Q#F$5&OQkED9N7sj%FgVBU+_sv6Sv>;AP zE7M!BZ3JcL%7W?o#b`?4K;6MJfYW2kXuSf3>H3vOJ2||0v1J(vCmkd6Vyi4QWP^l+ zo}|Yjb&>|DrpIQgKBnb#ZzDOtA2LUsj<_pEUHfH}-J3X2|M@wz=SC|KN}RS%FTp-+ zrb2iPx_pyW9eGoXrN&8ZaOLTsdeJeaJ7rcvW#l-#FOn76eUSsH#rO%e$1F8D^p>|E zTJ_>`J=s4(Du>o;*S@BNepjK##n`6zm3xB2Tg?60ckn*j$={!aF%dkc<;_j+NssoO zeentD(N3Vr>RaAO*K~NaS5>V=g-1hWm8;03K~2ANk9BzGz^NgVa8NomR12qu4oB;y zyxNOZ&F|>v7w+G3mxpwO4*|DyAooAty+#F0pY%R=XAWP1&8}_Wo($cEL8xB%tITMM zS6^!(iGxepC#l%boq{*P{)4J-CFwl5)1BNUz#&>{E`UD3fK;SJ@Z=)eYm88bWK6Dv zLRT#f z74YklYP#b1Uy#VwlfDH{JuDv#?PL~%*(aN<{1uE;y{lG&QmiA9;_5e&Zuu72^aQs5 zZULJ{MClcT363rRqYd*1ny-s6mFJAV1&2L{pr#~d8XOEW1PmyYF2<^5?J@G+HVR_D z*W3!WJ`Rad55OyUeZ0QQ34-pW>mzJ8PY#_kv4mfjYIh!wFEND41zfQ)p z4!d_I`F}_9QPnc$1Lpr(Jj?z6X6FCTb@aoW21bjB)`A6loR4)-XeF|U%vi5$vL?F8;Mg*~zI}X4l@<4X!$K)N^iY-XB z)ILs~KoJIR4D;Qc$=J^UeFl#FgRM9+j?@!J*l>6cDxkiD0bn(Gcx%fU=>J^A^T*ud z?A{yD{~sO6Kgs?hp1&1V{u7jaS9x&a~*U~hY0_6>s znhaL;M;H|;x6siF8Zq87SLE4fO-0vIXe}6?_OPyjJrq}~h+jLiRRL|6rFJyc;Mp)e zBz#SQer>tx)x&miv=t*25w1jJ}g%1)?Ao|ILo-nwe)1;+NhSc;@9hYgva zZdlsI$SqU3ij{=g0=zLq;j0mOctNb5_4I~NW6CjyExjXEbl%q+lY-adn# z(OM{@hv}i;f+8P>F?K>mY~UOWp#BiO73dYTfOYH~QP;&#kCtX*zU37EasvKk@u8*Q zpTn1D$^%v(yO((PIc!miBEAh9s9oA$64@lt%Awr?_uawY?PW@c{ZV{W+2KveHjcjtNyzz1{okL)TLWkbdL- z4yifh>mB`mRM-9(r6%v5_o^M7yr9nRy~^&p2CeQyt836{M0^m~VamsmpJZPDNyZG8 z3EO}<#{r<;%RuR|Re?!c7wwoFQC_SE zq)DXvU&B)}=mrMq=S;Y3 zv57SbPe8xoXrD*FYIRxtgFzzcOYN3hljzF%hED7K){>TE^ONUrMCAe1n-Pt<9}-(I zMWzc}6go*I;%%~?80yn-?w=?(*mi$Le-i8uF?PHEF*q>B-3bwg{12l5Ix-Tz@P9;( zEe(5IDKs5VS0=IKpFs`$Z6jICv_o=bh#8Xel_dJJB{IE`I5#z{~+ zhP~d_@`XNv;jY(TVAp;6_oDoWDDPYY7cM6XZ=p7w_=ho8Unnp(;>z^~vBCIo`;`}9 z7@|=Z`<5BOi&&rbVJ57*=@wJr_ehlt24uEZgw>x;IW<3yB#SRYOcMH0cfGC@2t0`< zoLELkfzBEBH+Q7QAX=Jjl3pYQ^x`Y@^g85>5D+YkCgUCmwFo*Cj90#>oL_1GDb(@H z?JogF+wB+A6Vbe054p?jd{gm&`a%8#dnSUhF!L%H_9rnHrfs(O`vhJDv+nlTQDv$5 z7x@fdqGE4sq$DVIIa&VH02uoXVE0&kAZrko;hhjYL2JfP5Q{C0_J~HrToWR`b|Zh% z&aQPJJ|YaD6d!XZEa8XWK@}4x5zD|NBJtvTlYHq>(a3W< zFaewKr3HEba%jaMq!LllLd@eg#DusJZqIDbhQoKocc5AEk3ko>T?O0<+&0|GAnF@} z$?b?VkZa0F_{x7J;nqCSNZd}VKAuAeI&v_qAryq0vD943CPEbR);6eGD%L_WXfiS~ z8@avlG_Pq)VKEd-woIVqTE5nH8Tv2*A(D+!W_GOQ;wCGO;^6IUZ7wav4riU>ZEu%R z7~QZa%&ryD`YEzt_=N?O#!`D58>!%`XiE4Xv~Pm8ACo@Nw1*Gi*r`DT+Obp4Qu756 z)REIc;6b_*1hQ0!Zvn`omAg8`)(#C$5IJd@0b^4fBQA*%myv=gNeXr_VmUxWh-r*8 zt-W2l0fSTpEF6vrTHc=$hj#4~BCWQ7R3FBJtwn9v4~@03FT@nP_3EF2sinoVGz2{w zpEg|r%Gi{t3WTN5+=vq?2)rL_hyEGNp6rbo=pRh67m74aHm2|>mVdm!QqzgZ@n*&l zTQEDS?B@3a9Y!n0XZR5BX!N3?@>{z$4P6=y4#QDx1#$F_e=}}^^hx@$w5B&;flqSuJLrj50Ht$Eo5yH3WJFxEP|2JN*QyU>xkiQlMHZGXyUx^1q zKj|IO->D^$;f15SiV+36OK}5#qpkDD5eu|+EqjQin87SZ2qgNkU*7{atZyQEF__;< zPk=G^H2_}}z(N7cA>cy-I2AyeQ8);=L;$Z6z!3y2XTbIPL3YLd2QE{6H_HA>M$&ry zUGcDoc=!fAoGu>Li-*T?mGUAZrF@ogAr=xqnkD&rOU*yQN<^eq)q9PNZN+6%0N5;L zlM!f&@rOQ$(MZ`kU?WkE$d-aoAL6>8s>iXXS{4|eMal=QKm_TdS18-OkADwETiX)N z;|%)F#$+IEtNd2g#^bHEEge|gMsVmC!AX7DtVF{U36;YISIw|rmqw?)P;FWT{p=M~;Yo{&0124x1!8LKv`q&SlHYRgU~3NEawJ{9 z<150n?ob&!q2G52C*?ZBi?{*Ps&5&Tt{q-`xM#}>{yx?wXy*$0kI`E1`zp=m>1Por zx!-Kr!ASDoM12hGC6n=n_+Aa%G}|XbZd%pQZ*qhml7PTktewM_<62^5{O?V(^8J?B z?mZbS;tAt9wh77KQ}V|$<^V;MXQA^*8PWXh9`qkx;T(r{+|jRX9;g zmbS(v93$89LQ2gsyY^A#Od2j~mw|=}{eG5f>jUN5dPlalKL0}Uj`S6px7zZLcm~1C z{ncWlND5*m>;^)Z9jzu$k8u~0Y!kpUzJgQ+C-afROB=+|ulWd^plki8XS`dMnqn}L z%N600L+c!?uX>rf=fDb-rFJ%+1_`#@IUZ$yIq|-ZXoatq`@0!EL5bw!_jD@lXJ_9K zvTI0I*s)Q9B!eiZ=6m=yhj$hTFM*C9b$G`hZ#M)#3c!L9(uwb2a$~7|3EaY1q4v{d zCjJP?kY(a;iH0lImZBPa@=W3jNP!X3NC*bRlZJW=Q1x0?CoNIYo&@@JWfh`BErD6IM+oGZAKV|0?e*y&2^NG13+=zDir^5Ko1_!28D#k?Q@~YoWCLoj4Fm8z~i-V6)VGLJ!gX zoA6?|?w6taNDG3hw_gf$|3Z7eLt;aN<*rp!-(tS00ecUysR8|`nvK5?_y|8Qz}$X! z%SF=vGLcd`TvRmS@;>`@4O@Q4KETK+_$$p64c)R zS${H`QSiUmpL_}ePv4*9*8hLrpERQj;S4J1Pi}r8U{L>Ef6|RL^t=7Z?&pcV)9@#~ z&|bLi2mQ$cRy}j4|9|!;?&rezlm9ipe`3;X^Y>36y{+Fry@&nFgYZn(@sITPN7=9U zgFe$-rjZ}xKHDGqJwnRwQne5DvCrZIC-@;2h7Rl;Ijk>%&ZwT_C*5N*YQMk_Nzzk2 zhaxf(jv;*>K|2=_PhyX1gti{L72TIo@D+s`d|45JD%9Lm@vj1~JP_UzdMnsJ` zDp^p85+wqf$OL+D;zmJ55f_b%sHi9tz~u@~5@?%N)?>w8chz0b^}_XHQ6vFLKt%!X zYl8<;!+=4QOM(2q-&fspBm=tp+u#5H&qtZ+uGg=sUcGwt>eZ`PgO;u0uGmJnm6oz5 zPElw5{z<$?FhA;z8`TNO(s~5i=oB>}Z&6>Fym{8~sM$lXM-L6*6j0HW15*l~ka=4O zLF>T@aM`S$-aid?1E?s*YgK~@z2*s4yGeBdRe<#GF{H>_&vz*>eFp1?#`Jswrr9p0 zC4U!8^Aj=sX&;!ly{j?Zmw;)Ii>XRus!POl{ys37F-$WPFn#~HZe4GUDU^t*<32F$ z#rL{SzfHjOgp275*3Bsz_LfI{&}lKTr=ZgdF-+$sVET=V>0V+=@fEk5b@|-S_4=uR zUxi=Cnx|>h=*TF1E9=Y_RUw6!rM(761}uVLHyMz9mH#+&^HETTFsxcv8?SAVFtT7C z&;HS(@=|=)N4`5H@w=XQz3i$B?e{UlEZ618D6z~HDo@!%^PV?}f1_Cx|f0pq}Zp`JVyXH-dNY9(aHGKg>6f}jFym|3rG!1l z#k=Q`6m0`6mvq4UuSD22sbDjWx(W?@%zMC_<>GxL73?shj()1Z`!?~O>%!iW3bv0? zw~qNv(N@Bq4dL{h0B4awW)tUQmSGQ|4N;sBKF2d>srBS9XONFDoe1L$%42#DaX5oIGyR=T zr!l==r+;Wf`eU6|Os~@E&zNq|>D5fXsMD`A{e(_0WctrK{S?!`*XakDu0RiuG*FR{T7#}3-IY=+e}!*I+Z$fCM@4HguVjD zsk4aN8FUoC&R~W!=wPO|KP2gFrZ?*Ju4PF7OQ$z8y;i5cV7gJK-)DM}POoJ88J%9t z^k12_mTS9M%qHn_I}~3|2`%qXd5bapB6L!kX8E7g)(7!@TaGR^>W83^9SSw<11l2ha84@NgN?dfn)5oK zsf!S?RqA_KD%hiqx&{r~LcEAtEwCFONI{2#j5y-8n*r~Dat=V=7jES)QK+KV#3AegnkWR#3NV++y}5N zE+b+kpV9C&nptxRvyI;&$`aENo!(iG^yfOgiRm>uy^iVSI{hBg|J3OfOh2vDuQL6R zPA_2k9-V%eX-lW)Gd*3W=Q4d0((|}5^z_j(7= z%PAU58Z(AJ`|gQUuo*^O4Hj2`okx8f3mk!+o(lFGYx=&u9Izf80_|Z3(aY7STdJXRS&OG#%ty9| z4)5$?)ZM0G%UFw}T-cUBrJw|~s|z&jIO6rRt7WNRG4XZRu;U5qO?>yZhaGgg)OZ~R zF=$ao=sVn6T+<#pymJi3vxePB*ehJvL8)LtH%9yi-alZ1iP7!gRIpGj`fJ!9iPuvt z*8edDC4g6l!7Dl|5$``!!FDt17}gGTNT&(_*I(&pCmFVQFt$AJ)^Ni)5kLqE+;5ZN z^!fz7cA18Kov>c76{muQ5cX-l9 ztxbm0{R`RPuIEl=`JQaJBo!?B*ImzD%ksVcJt-Az|JZtN5@Czox~8Xs1r6Nw+zi&& zqrv<4rl0|M!ClW?PP`s3Jdp|(V`m-9b&4`D=f%e4^i;4%#pdpli5E9Y2;ZEa3iec) zyPv^)7QCc#M(CO7o zzo^r%GyQ~4FJ$`9I{g&Wzt`ypnXc98yP3X4r{^$zy-rVK`U;(%!1RSWeHGIIogT^b zAe{~}U8vI~Odqe){g^&Nr+YEoMW=f(ovzclOmDkK=#a&9M5lMYjP&O^y@}~HI=znR zXxqT2y4er432h?jEUBHuW8 z2#)(q%8@(6q`hck|G01eFf2DsZ@&QH?Bn)N8Xb5>rc$a0f1ya06jd}6asGh(1ybC$Bnn+72R6-EOb^tj&Rrq1mFo^I`C}c9XHPbYXB}F;6XU;;gFdyqm^McodZo5OmI#v^0D_3 zun#kfw;DAyB#ko+h<6B*f_DPePK2g8voBl&0u3rVdPba{7ES}fG(8Mh&7Jr~x?~Hy zt#%4(APU##Bgh#}KsAMW(plqMphmaiGjj{-SGD+i5!BSU%)4ARix`)+V-nSIS}QX+*0FU9KnbLmRJg{{M*2c$%v??ot)^%e{Yw*a(n{mG60_3$=v?61bn(E+^kFZcqQ%k5~tT0wu`fZrRG~Up( z)HE|zSn}2mldOCa@`g!UKJnMIg@~rH!qnu9`~$U^$2Ly9RyS@5sKmw{ERD-R+djY> zc4m-{x39z1a-EAU(GVxushW?onh4Fp%2zutI+u@w_IMDg6t!~jx{%-Wb zN{dXE*IS?#Y*ZPH@3396oE`;_Ok(Udr_y+>3)6LTY9rrx$m#wPUvegg=lkcT7AU{M}K-{L+>iHRRJulIJz`lb+oR>8?lgFVbr>jG{ zARch#+DLOPZb%>%6WUXW1GgI3$-2|D@120p3s=Ii&vdfjTAmyEJ3flTgYcyiAD34x z&LhQfJw(!m2=41*f%R%lHHKd$JUQ>uIDzmb1XV$;T3p=fJm4lo4OMi(&8Df$O~ zBp3CxB%h-i`H$#){&@Mx^Su&i} ziO3y=?3RVGFCvHHoyf6Q)}f2l2p8mGfEX{WcJW3w&qfa??q8esY*xVRJzJ`?Xw_T# zPY!4q&o0$bfaCny*53yrm6>$ zGz+$vl`DZY1A58i0t-Oa(7abDotlQ`1^TozkBnteXj|?0rv*+uQB&g zv?pjkTY?8hY?$*Xst~kiSKvA5JjSvpPAC?{$7phm#6z^hBLRTgBdix(o$lh3QFA80 zMafrAmtVLkjYG-`vm{J{#M!Vu!>rsKw4UsXho&%V!aryLW?12j;c{c{2oj+w%ojrYAJ=Y7_v}t65L`u8;T=4v)d7>DH4(ZWb)XvFps*wKLAe3EjfY z2;1Kem(&HFKJRnI5bYl47YOhiMi%H9!#A*(Y2(~%36@CfLhG2{x*8Bw{~}qXR--Hh z35Dq8)b};Hnxr?`sKT|>%I^7*zf*Uo(LV& zhfVtqfw%7^_3>Hs#rS8>w)<=zh)$Zi^o+cWskqJf!b0w1#4qLni33e6P8xp9u>HT^ z{kk~Z3wodYv2o}XZ>t>oX!f2wcy6VhikpV^B0Vre_my7+^FrEm-%&$^&_>*N zXJ{|HAL+gyJ$fBzi5=W5^y_#Lo)Yo_2E z`xP1Gq7BVs0Xz<}M;-rxd{3h4k3;hD4%Hb|ij0E<0ov$4`OmAUe)L_O%qQ;8!A*=4 zU|%R5jV$!_p|QS}C>+r*68$sx&HrHC>^qc#6Vc<~k4Lr}2OrKPS-f!&sb-tAzdSU>IQSf!tQ-f+Uj+>K zag~gqz9+9fgiSJzgOycn#=#sGpvS>c@3Q1q;^Sbve7r+tp-TH12k(QUe#tnP z=jt!c1M4UkQ!rh%AdFD>?JPA2?Tw53Jp@~#x zEx)g;aeI#7EJF~T7ku12Lrfj#DPLc{1wdZ8Gb1;04~i1IHzfOU&;dYyC|xgTCjZ~%VMj3VS>}o}8c1?dYPydYOW#2P1MR;ws~K zWXNw?-@#_z*(_*4c%6*Q5p#AU7!QsjcMV;^gSZ*iVc3evGUcE>ki;5j)K;Un!NK`h zFBR{_<_*32(n7=eRfi@xNHEv^5}_Y^^Zg4f$~r9ilxO!qIc(39kf1me=kYUxJYueF zR(J9J?0I|!9B#2}Rtw;z0!;)Bn3@}XR5eV6?pu0s(3v?-j{!OVS-2f*SoSVP;-+y) zWEcr!K_4M(tMmtS2w~uWQ%flou%E8S4;6k;*pIN4w!DW4EnwA7p-lT0MJ}lTdXA51e4Rq$6C z#v8`lrN&!e4tXg%Pio$t*48rPrLRlFyE_=QYf%cmO-ug-ca*wFjM~remRn&$)rNH$ z=6o22K~eQLR3czY4FdySq~2`Q9?sDRKIujL`Kkma!Q>_xbNjK1uz&?@hm8yLc4UHC z=-Cm3p`D`jkGrcVaCW9?Ji7v2f5l{uoMv^zEi5G|H2w%M^SFfJny{Y4itLFD#1#C} zTg!C^nrL;LUyIgB{#Gyl$4L;;qft$j&w`+9qs&L9FxjG>Myr$7Yvf$+&%$Z>v2~!8 zEXFYMO$W;sEK9(|?QXGB8&Cu%>Ic9mkYVD*KmmCQOR23#K`=UxGishCBV|reh1*pY z3U-GE>v6nPtwnX=>$O;caYs+q_UZs+QS{uZ3#s`LwL%lH>fj2Me@Jr8%0Jb40~^+? zvNlSUYPjyNennOtA#5Nwt5LfF0BYwXh>x3DFFDok&Wfd%M^4)%^CB*8;~>O3h#CgW zo^pZ zP0KDpBe3E=;;{^1h@cFw3(u%R7Y;=i!hYVS>M!$CR2}gK@adzEX2hht`*GyQ5WY*8 zFIrSDpp$vMLgsZw8K0ue*qnY1dM#2Ub9#w%mpj*=&-bSLo-JPo%!21nDe)Xjc*Zml zdC}B>`lD;4m62}b$9d?{w(+CdK1Y5+W#iSK2hpwfjr7LxUQgH92F9ep;Hn%h9k|r4 z!W_Lry~RRpxrPDPEj$itAxHzLHN8Ze$nOXGp#4ZS$!L$Bl3I_NOoAooQB$Z#QHN5a znPXRB%WS%-9(;ih(9oQ+z8d>k%%S)GO?ZDF-nvPLm&%MECdhIZ@o*-myRGy(G> zmi|rLm4)Uqbf;{>3mu*8NJsZRV!}8xV=!tRyMfm@G@)bMebTo3>n2oe9n!~4*kXUj z-PAB@C?8?Rfz1bQAV!QrFzX zjP0Q=9AB5A75RAkz-aLM}5tkCK0=d zoGBqpQbbBKo<(3XIDot@d?V4)wxH`IS{mnh;W|W1+l#6R74{LGt2^8VaE0PI`S2X* zAT9&}s494Xx6D2wsP$$Oc=DA8&)o=Wz1l}m^P%K65!6cYYCjRXG(EidX)l5KG9&$B z{Aey5tN%Jk{Inz4+T{3YeF&TAPvxHQ-4_)zgo3ZeDTs+sQ?NdPg0D{4KLxYxjM9CF zo7419CRSE^V(qxG9kIHi-2D@)2DNnW2t>TO7x|DX-rU*yk2j~~;r2KS?vv|&8NKGB zDf{EN{nP7hq4v+xtLcVz^!ggF{%_C=Q|iie&PNC!C36uj?;MKRZE2_rq+w( zo)PRS>DijxIqBIRn*6Lc8yFi#GzfM7c=jhkP|-+23o|0~SoMY5akBV3GzR*Y)G($` zS(CfA!H?%yF6W2IN%3t#$SG#=z185}&|nt62fK$*T|D`Yvtpk>{pHPD50Q%Yg$Ng2 zOK`JbwQNcje>C|Mtv_&osO^5FX*1{;*Hahgl!kxIn^Ce528Fa}S5F^s{OLK4nd2{B zGrhNCV&80~A2-Vyj+w=z-PtfJR~RpMHj2NidbhNAb=BLt1VM_H>h-}k?@*(}69~pn zcv)}oco&sJh|N|QY?e2MoJ+=KS)?P&Q|K=QL&^;I~y@YUc*R^;yoXax>`KV^`~&L6x<% zVWW35=+b~wk%17GhJR^ES`#`Iv-(GfGSG}b3k54w&+DO{LPUec@v}pY6w{*aL8f>D zn0Ci-Vyx%HxSgVW63hs$z__%YXx#KC{q`E7 zb}zx01=9&0dSRI6sgOJjAXw*7kw(C2dW{mQ#z!Rji<|X=76U50v*V;b_&0~%Z%|jQ zp*f8iWr#h{SdxB`{A8RbKba#mrq^JC!%%Eg%fu3PXmmAuEsmepS?3FOu1740O762b z@VeXAE@nOu#^fR7VhNv{+TNKwbPNz-A4y+^j9+YC@w3_0{KX%Vb94&#&5^5}qWV9^ zw{CwJi&wJhz-1a!r_c-_6unm7U|@ymV1*?4Ec%=!{=22t z2Ml+HTfE=WiX2UQ*I=D(XSwnF{Bq}Y?*bEsKkIuqS9b&{mpLPPLjbI05c6v$b~Mw$ zkl?7wcb%y@WBt~^TxU3>R4X9-bNb-{gK=$RR&JIvJS&h1Zzu3H-dKHd&C2)HpRZ;M zP)=-hUqw-#xXYsX!h~Mm(Jc5xor``9AgX87QE6!8f6yMgqizY7Rcy>rUSqEM<&Ej! zHbyr@H|c$~nthhsnB&?s2KGp|9bq^iNIULS{Xqn8y!{95Y2QDwCjA@zlaaE2_WZV8 zlYXXup2YO!_Rkp5&)0W5dc8xRNWjfNNOpn?#0I4z@Og%~TNzLGWtlT}xrV`8+gtR8qkPUr;L z;lQvS=n4~6^*am(x$M4lbm`^Zd?|X2-T45-iC-12&%s=erDf$uPH8LLjhykza-s!d zN5KLXxUV(F*U-+A>b>bk4IGxzkjgM> z8S>S7yW!ho(!X1?3q&}}8JUB|^9T&o7VMOT24_UO#O7OKHI`&`*FipET+dRS4n;SF zmt`>M{knEkH)^%dcmm}~Pn7gtyOJ`~qX)WrrO}Yf6#InjmWIJ z&ABNPp)k$2u?>XZ+hO5uZHGLZ740w<=MB30&`Sx`AEwb}vHD*`2I5n7B5ZC+o%QGy zy0e}^rzOwdzr4Th{9%9nWz6|2I%3~_mSxmDr28zpYN~TnN4L3X_KfkmsfF8l(Xs9` zux(*I85cXa+e2C3!+Jr6<)&7!I7MHk+hTbyL!)O6rLjYrLunCyfthp;o78yCv$CgL}0zbltewCW9)A zgX)iobu-gH!4ka+qYC$(!fhw|v6?-mP5*S@3#(ZjgpO;|KVmz2Usg^_dXdCXfMGUL znexdpidL~IQps$w)0zhR0F-78&R4&uLW2V~ei%Ybr(8$*4dJrBf2j_aBP(1cv3>Jm z%M;Om;kNd9VJl2V#e?%pjQg9S@96e&&l-A$8uc629jW-t3|&380;HkA`tHKv*82@# z)D~16N02&K9ZD|n zqYDXzu+3=CK?8>6&%h4L1rk+xE4Na!2blTOkJNjY&Qy~ZmRKXWqlbUgKVir7TjP8> zH20fqI`0x)uExNohV}ljTYF-EiJQ?}nIq#5vKFWs0K63s-yF15)v+K_FTJl7vv*6qrcP0(Vox&qmYRzCuxMBht6LoZbI2ui)Z_J*^i-E#Tu$pf&VLeZtZ+MXK0@zxxC!dc9>Es*SxKLKYUlfKm_Qn7G z)#Yd%IS6N4!n^W#=F7O9XNaj~^(l9zSG>Z>sq{6t0ig$YR16tV@q<1uuCmrov83({ zRTYDGt>5-(4R)>Z(m?2_?;0;>VQ#x{WW$D>hIP4};GDJ=5u5uMHG8Ep*jZj3?G}^I z>^dE~9sN8-`nd%CTwjHo&2Ul88~A1bZ}r+a{ou%AsZ|1B{4S9%aLFV1VoLsW%%pP2 zZ3MPto#|u_{~WLuThUkD533+*kLS|rT{(7%&zSu&(K=mDz8%|A#!G9G*R!RVS27XB zu+#`_YS@#3o!ic6+!V7?0ropsGd8MAz9msFoPy}qo#n*}_eG#`dmxkN9R_a1ilDV3 zx74|;M~>f_nByN1^5sk)%&v(19qgJgo={%LSb3Q&FM2!VqTgEIu=yB&`ua6{_%6aJ zL*{u5&4hE0-NArn!p7=6zjYO$1Dqw&FT>1D!Lp4@YcAjH)43M_lM1#kbIgLRCT>S8 zUOKt=#6!&VA8~pHS?+O-f~~6OC~#@mb*+h9g}rDgpB9p4E*S630vSDcm>deWM&E=z z1@S;C*K)x~L57oAj5_WWD5V`wf8XVoa@f&$Vc`N)SM7IZ3fZPX)6xPiKz#OIvX|I(hOojYg#K1-8p&??O6%@ zSdqw&f#NOlWoY<-i}I(Phl7e5euZfVAg5M>f6o{A0Qh%h)z(09J@~OACZ{-dljPLF zKf?dK#CJUU282r#B~{s!Bg@pUK^3vmB=CnPZ{LNyMNj@xaf^GUQil(;=aN0z0pCvH7H;S|6+PElX{ zkvs+5(G@Bil@dyFJ%Tg1oVJ3_)p-{VFL!Rp2h;S2Ozj0_K54RIq_Ur25eV1^1)7FP z6L6rjFaGb3=MuCm4F-Vlo;>4rkxke}%P(C*5z02@M6;>C9aQQJ%_?;+&InY()oKH* zU6pI?9_e_S2`k#c=6qP*(qWM-l_`{pG3Vi@{OY&*QKlvw^9)T4p|8`7G0iTR7C73(=bJkdpKv&a?qJ zs6!6+LFeK#p;WK9RpBIXpc}8t-NLP5bJM6Opq0k`^~Ou}s9M*^G|HAofWn=(Czm7` zi08o=mHg~vKeVxD+Hkr+KnQX7x1+i@g7TXNm#_ecfKidL%Cm1_zP_m){MCe~i-i6} zodIz9?wN}cWvR#~?x%kUys{7#T+lu{Sb#lb6+jTO z9jj%xWi#tlj6hN?rZIRgJPAzeN8{Fq@D}@qSRU~_eGZ=BQgavnJ=Ym{GTZlwngMdt zPI(2+1y@}wYLuLv>*oume=o<~ct1$nO-n6Tsm%gQ`sb=YI}K7lK?RH56X5Mj@UlGm z(d|%|qATci^jCZpog2G*^FzI_{VHq3eeH4{WVRXuxN;As!K_?qG@2pz7U3NHW3zGm z_Aeva({pWTsvbn{p?2yeh;slPHORZ+ut57#Q{v_5=_DHU@Bt^e?CXpK)}k<(cZ;jdVG3$QHsB;fR*QfSm} zLs1}fz#5IKM_2Hnol#8lFDBwZK|ODh+5wB)yTD0W##m5|1oF`{=RT~dHR+T zi?#y4@lqj9#CHR`egYm)_Y9|$C`WT~mUM+t%k4XK zaXA;-I4oJP7x($-SDYyz+ul(bXj1?eP_fSCxB;$BjXilL{R-w*w~`Ceug}p$+8FtO zdc!?lEfG%f5(k3-qAg$%3fc@FeNyQ?qqDT)Id{jL^l zbnykTdTG}A@9j@+0_y$kPj-?u8@I#vwE_Ms^h4VX@DzKx$DyD$8{j2)wVypo;a6|} zn+);4yPx~Z?pu5H{Qc9b!~XAE+au&g$0v9T&YQ&z+h%n+fS@3s$>kLIcp3I+c{}mF ztP8YYE|fdV(!oMBq4|(7s2rBd2?{H=6+38Ti{TFoe_O#AdIs-*fYUSzS&UOTY3hez zEGhH{ykF$S=7S$SSk`ZlQVb+(B*dE#3#*=9w%v zj_;m*z^!Tncl|!#o)$P#QMaQk0Z#ij=*yU&1|^}qs27p1*LyDgZUce@`e7w@q8bD9 zf=53eJH0*qZjo}S+v{>ykqcAM;pu{ntV0fFBYO{(R@!n?E~;ET`s(x#0CTZd7^fTGLs8@ zo6SdoRSPM#+>XXUbwJ)a9Sq_O>WUAbAj2?lCt=04Mzh|jXg^7JCNL-1Yh3<&Z(0)n z$@pCdyNSntE6|D*{C74=EnOJrzjEmxaW6_5m-%hrj^78|T2v!Z9_*1yx5xLKz{UCH z{e8gwUf|;6^67oR-Pi_SZ30{(5jPLfMBIjaZ~St?fk)79FxNyw#fU{P@)pFri22); zK!oMPhUm8k`#qnMHlQww)hP*c6g6xZM z_UWRM&=gpA3s)Al7JeE%U(YM3|535}pPJw+zY+Vui7nv$I{oRhRl?0u?FEP{=RcZ+ z-98)>f60OUo=S=ZCRgbtW%0P>vSg9)MSho#NSL-&sh>q9%6Swziv(KzeJ0XGg z)gA=c!?GS#u_uiL$;Tv^18aN=AHpY0I%OJ`x#>`iQEipS7NH;3;g{Aro+TTD5L@}C zGuKxwWb^yR;g|6iCqR6_WKWn0?h=~NRCf> zs;2Ekw$trN93B%}Ea(LF<$Kerk%H7`KY(}b8jalPQUka}EJ&{dtyT!y07`&u#y$W> z<1A;Ectox_c7^tcj93i~5ziyC0cS2UaE0Rdxi_SGf$fUTe|>EoH)dek%s{>259FzHz> zPB1+qXsuO^Y&DGE%y%`|JasIKv%WNYyS)Ns7T0F3HfE1UmBi?R`-Dmev(BqD=AuK4 zx)SC)MOBkQ8~82&wprZ`K$cLQSi%zdIzS|waH^Cr z0>*w+w1j2mxBC=P*cs3VpSDcGr__uIxZ`YA?!sQ!4$9~A20SOX3Lo~=A1+G#@HGIE zO9KOD;Bas+=(jT1KcQXokhfsODwAy|(OWr)pyrQ>v*ZG)G0$=0J){YY%fhPj<^5b4 zzp)hnPVXDF2e1yaUZ+HeTN^Rk4|?Sas4fq(8I0ZG4vN@%Vki+Z+!=SHVk2WIiu(|Q zra+2=P;;y2y+7D}?^Vxxze}jILw(2ndr)f^_#~z;p)RMeE?rp{6jcurbIhV%IJs=p z{H7I)g_n^Tft`-$=bS;UV*vm4S%7y2eb4kqI=zAEw{-ebrt5Y39j0GES~UX?1Zm_3 zpyDsq$MSo!`+FdMMXDy~HzHqMQ}AAh*!{~_$Ca%C`{G|FTVLHm)@fBW-?2TAl;!r- z`M+GQ^3+zK_;t$FeB4hfai_%~C8Z(O)K$OJtxk0r`g`2=!x1wVyc z?ScBGlB=Es?Liv53>25O9pr6Fxf&hB25(Sd{8Fw$TEA}89FLlpg54llAypy2)N$Vf z&J&z?*$b<OiEfq$`K;iix@-lfDRAF;Vy4K%$3a1GFhS3pnMs zR&7S95a-?SS%Nr+(Y{8Ask*eVxi3hmF~QdhxL}N?;1jaN1mBa8HLh5CeE?w;1)so# zcS1xwDg9OS_{|Bj zfmKDUG6Et{kO1bUs>*UAwD_?& zMdPl~fM#Oj*0cjep!R+m@R93*@o2Z`#{n3h6|TjqJw7Y!UJlVW8?QV)2-CACcw_Qk zh|_*vsFwGs=7qCZi&XQ%-$p@J&SAw}Su92-%n@Q|Iz?!Nc|lJY@$r6`l$3I|_(_np zpDn&}-?yDD-o$%Ohs&x+hGz99_>J}+XHZAhZBu`|b_V@)Dbnk7x`pZYbowi%SLpPI zOuwqrZ!*0=rL{U@fYb@~pbLpmL1dK}W~F4iA&2-5PK=l*Wn zoBW=qFBAMXw0*gi`}5S-w_!fv!SsFU>zGd}w61<(@_h0UK8ow=rmL%0sPP+Fe2eNA z#V_WQ2{MH0*!`8=aStBC5FCQ3cL?#+O ztQOwo-Yy>2xexs#9|Oi+AJv=oTwlH9-0fQ+zpwfh%CA-&;Xx_VtH!rQ-p=)$&7Nf@nL$-_M||f5Ddv;8N=1bZpz9CPFeZMok3>6GX`@k@E+^Fm=3) z0asWrsyAjI(Z1E{(>d;DLK~ZzYt$^o3b5^LxEe^f%J_)Cm<hnbQuq1zysh(8qK#8ld`UIA)L%9fg(f0n1TJtR% z#>g+h;vG=R?snfwjj_7vk9XDb&QIGt06QIVC^yD$TpHZ1yFFyvDDzX|+=3D*1%m^|)A(?fs6<+vc~q51RN!#7LL?doS4`GP{2b);Mf+kBXM>uB zkxJ&5ZqdEk<>7J3Emq@CO=kPuupo$zo7lN(2%uzyLnDP*_P;@v%CBQ&nbR{BS*~Q6 zsJ6#;Tdq#QcIv4@m)CU7zU3GBsu4|xb7wvlz~I7WtcAzO=#)0lY@}PD{`D0G0L%cb zFX(_>PM3aYe^6`aH9iv770Eja>$OlGfCAZvCBj^Tb1%I_FLIyf`~NxLAgqmuSwCv# za?LfzrXtT^l$S7nJatuK$AXay>&vYM<@Eip*6NurW3_rWKUJ-smh!rFL0<{2#oDwh zM(-Qq-`|z;`|J5Vs4M)9X`(NtiA&sfT6k~($UJinUUMG!%W&DJh(8b1|~x z71$lCz~(Pv4LBsR0%32faucyZxRsERCd6$R@44?`jiJgDn~h$T_b>RU@4&XvPj)xq zg=Exjhd6=`OYJGqwgEnc@c^D;t*U+zbmvQUYW)#t;dJ$ldIgJpN=K1qchK7G40;+$ zgSwL$uoMddkZ3jW!;MoLJ^H!zOEH%oAz346mht9N@2kC1*oatbz4za^@4eP~@88CI z*1Yjr)}>j!jXr>>g!UllzpUjZxGAZ_St25}A#~}o=sPiqM9531DrJd>#L<$wT-C&=c@he++JCVK7wb`x zpe+!X`@Z@ON64S^@lr$_z8ym>;A|0ec$V)dNzA6&703g_r8U;BW=i$zL)7jxSxYSY z)Mvmb`%-B0&P?d95_xN zOsSzd#lJo|)z_W)wY^wadcb0ie<&G0oXD42cG!z$+{fnlkB~=AV*+7{Mfz~fS-avV zJUiX;ld1t-Ls#S0kCCg#dwE3ah3n$;RjN79@#ajb|Z1dc^i>$VA{W7GR>x(Jcd9;KxSqh>4wxVjekk;{;Z z{x$kw^e@r-O(+rn@J3Z)K_$AN=yQa4DmL-v%QUb|f?XjeV&WOQCN-SC13@R`QtubmcsBu{5;+=_k<6LM{CN=^PRt&D% z=VJF2>oV;2H z?%AP!M=Cg7aTe`gpl!Jm!jaO`KfrpsMn;T#2nA zYEL+plBZ5Y=Sp?KVhE9wTWVkK4-{|WO?VqrceWO+V8*syt&faa?yjMCM|xe0I~qlg z$EA*F%LbLD+j4tSU5wi&pi0sEK@YVI0FnE^1Frs`Kz=aMBgmy=2|B%~;Ub7>>toM1 z=nafdH>5Y#4J2>`6J)FU5})W!L<=wuO}P&9GQI^jUIlIxf6V_ee|0~$J%4@hZYus- zm;0ab*Fv-~&cW&yApfuM*972&ckTau{^I=_ZTPDs#$Sur+JBqB9zI6evTy#XB%AD$ zzsiv7@z)h2lKAV|qf_(Otx``4iA4U|je3y3$nPG1X~Fd#_doV5S%`rWz&;3L0JI7) z{1Yl5Z?oWmQi)lj5;H@{dSC#K~A93$p*Vbt7(%%s@~=Yz4Z{FgfCC;+#M zVc^A=<^1$P(5{5oycYA*CWuJLv-c<;kEBfD93{0;e+M1}NRY{?2fR`WTZ1_MHwYqN z=FGdzK`6f3nENDt8q_hk{$!RXUv&G>sDNDkIvCv?bOQz0*CDX(x1pY#CmAz^f?sSz zM+1m4!+5>jdU%9Q!5KB4{%TQK%<&?94IRw~PJp{1yCQ5TSmF!*%27CRanq_5q+~Vf z#`{6td9eFlZytOXDX#6IIUfj~BpX3JJQB$ZhnHch!#bani}QlJZw2!fed`lF@N0bI z078GK9o!Ui8Nl5ghRt*vzW2PcBBX2657V)wmAR!EO@g<4D&z+7OU~`h6FE7BdM3}<)vk9 z-9k_rY9!mOjFf}-{k``{SGZ|x|BYml6{n4czj^$15JMVi6KQqnk!;M=kvI$ncVfCR ztC!hRtnnfQ(Wj@l^OWp$kksq&1{W}zc7N3uV8Eg+x84?Emg_DE^~=MN%HR_LcIkE_x;DH#-3;qJ!gOP{_zQq|3s_-_6q&D{LhXXs3t7##*v?>;x%0s$ z%1#9)SFzOS^3`Rlbk+L??Fo6NGY&#yJWSp^HG8S-=V-W~{gmG1v$8yWWD@j|?V%tp z$)!G0UfhE5_94gH!Pu+Mr$d}NySoV4yz+vUz$^?fjIdlJP_^o5ulcQ=&`4emTHDI) zNzh2PSG`~sqwLV>xJ@!y#WZT~fuW_`Qso6(0<&PS1fr9X5JVmQRz36*Xrbh1=q2bX z?08;<-*8iodJ=Po39FyO7;q9NTYYo{YznF4_d9{OqZopzEuezQS#q*M(JN?Dqs<(0*833PC>dCMPX~I)>hnEGM?3 zMp{m6qMXpcF#u;THR+fxEN-ZzCiaT81gr}4Sv4Tz7h z*;3pxY}zNR%8w+C4ebEib8em@9?00_3Y~zJ z7=&gG>V+2DXN%EHNMZmvBTw_TWCX_U7XCFiI|jm^65j=J#$UJ=!UHy5?w3qai{D^N zL(qmT1f*zDf4-H^x=-}R?kjnk784L{pQDcht%;4m_xVygN+NqgiJJ8$hF=3-RtDU~z?n#( zsnydk>bM&Cm1#qOX+?V~ng?HV_~@y_z60I30@M_dwu9#RrMQ$1zdi8l*PV__C3CQM zt$skMpuX1~Nxh)D>0ThKpcl9S@W=}EurswkZKW%*YaA_&ts|3V9(#_S2_b#}IjA|T zX#Fs7p7n*dCU~hUa}(L>D%6K>7O-RWd~VcS23ewpAt!PHQf@z1fr0~lYB(y%!{Ik! z;guw*jN323tH@OR1N|Tf=7=<5qGsRZM26xm9Q#pL+cKo{gyvCYc5kkBbd`)h!b ztqS=6sprn;L$mrPnU*-&Gu}Rp_Jz7v&BYhdc@T)vhnZg7r}ro!TS6vF5tfoT^zump|}bb@4^aQ#u+qF=>4)>hK{Rxp-@i)#bRogx6+P{ z>wn0&eyZGBPqZw#>WLucMtI?DqU3?dC@IcsxgDe!S4gXzGXKQ)!4>5U1`-PTw2cameFe&eX1>d!! zi!1MNfuU!_c#bMVE>(u>K@v>+)cQYwY%^+yky6%oUYqTd{*e8K^sQ6%h*rColSR@k;fx8|rU0x@x7<3BPoi49XM+sf% zrCzK`jC*h^J;s9g3TC3IMBa;)DDfPXj#E*fjN;}YFCGIvKmfteWNwpeR;!R}+V@M` z98AwWVux90aiGn5ox>qvf@b`gDlpy-^+K)|PuurUJS8xSar?V?75N7LkdFyF4uwR% zlox4*o1=H|y}0tDra9_bjj85A2(idZt|ZHiEI>;A1z*M+g~9B#D_b4PnnOAr3FeOv zXNm96g-X!5F$ZH>&Sc?i7A_L0c@Av}+GBHq_UYwTOPhIf7!HktkG{moshAy%^CkwF zT44wmVQ77|FFRPml=)IQ%#J3_YM6ty8H~%us`5a=XMtJR&evM&Zq%lFTE5>}hbi|6 zp7X*kdjhGw`A0Gm7i@a{$eEV3?W61VN*wu&zeS&m6C`#X|8gvXL&akKg=yD5$aF3O z=d1~xj`h1~pNHXv6~BERxYf*Q90F@E5Ax#%v8Ewn0ER{gX()&It5I{V7l-gBtla1u zdfu|IsBVmmo|@Pjn4c2lt6Wy`8x%x)p9Q05?Wab~d%y+x>ce%fs79}-7Z(l@#N2&b zRQr7Ne9)eVwfJ?=^>&n7Ka?9oHc&bq!Y-q?8tz*?NP6iokTHnMqX!A0JL?7bv;`pY zQ^1*r#S{d>vn4f%bNX@BXbNG8u~S~KH^7~3bWR^6P%F_%wm>K8!9_Edux})FkJd+- z2h(=p+N3=2xAPmc2NKIH9+?-qhMd}f3YvCjG<5=e{5}qHHOh9~f^aRkrM-YH)6K%X zfSQOE9U=&h@|}HZF!teV>x1~-sJ$Aw@d_KapNr?n&G={RJYAnp3hNW<6Xyore}OIb z9B;oKv33I1hqMJT3P#NiNSB~}B`SVHFN8D-+C%b#_NiE8Fsi>X3z-+VJp= zXXG&M*vdW>L&vlns4UhTpa~R@CSAb)MvX(E1p?Hg30Q*zb%WrHSyUi1r*Nd1R+dj) z+L;X{p{kAy7OXe5rQf*YAH?EX`wy@b3wnUB!nfq5Ekq5{aEN!AY4|^ONsvGQ+EJ`G z5RnZdMvOK=7WCbLnxa%|FpcVaGm~0&J9bb!doaJ>&d4~6qfg1h=5Zf z|6(SZpN@v@tN9Z+n5Frn1iduBN1$MnD=~~ao+rLpT5239QUmQL=J3>b`#%N^8bI?X zLMXWW$u2va{1MdrL0%<=lE_m6G&6gpVW8mvtL6ag%upJxhcx7_Ox4(UU(EcK*VYc~ zhg*(J#dLA`1-m}ngIeMRMmC7(fqQ?Q#aqjN~_jd|^VfNDWk@yGp%yBv>@oOj*hO-L&v_PIDqI=G$ z$Y1d^c3#`~`1a5qZSJ$^mGs>9z6sdPYS$v5V8x6sPS!n~4b1s|J1gBD+Anix--a(U zG7`$-v7c4a^cUl+aSVMBnbZiJ8v<&rSs4+;6Z_K7FAKT&u3ro;b{k$?# z%>#BUr7)Z!Y&rg(Ve60=TZmU7EG}<>R7GeU_7qFR$fxH`MAp3qfspkDP>2~}eP3Fz zE$Cd;Aw7C%yicHjr1P}#S;k9;VsE6Xgl^xm3{uZ^gpJAZAC-3Bjy+%?M4c!y&WL66 zLv=eqcoox9R0DRCqL$O$2>hB^3hN`|0g-s0i5vp@zTlH_1z_ShZlYm{KfrzT+b8&~${v1uQjXu6 z*vB5y*&5u-Z{N_>Z(TRgZx89=w+83IuvH4P6Rupersn(Y^YZ-Gx&7>md`3+cia=KV zC+TU{nyNzF-B@b8ZLBcfDK%D>8mo*qng(;N1w|ZX06&mhYls90SOV;PxUF&4mtX;- zv|(pgYj9tG`ij!^U4UrzSwM+0$ zV>abI;!mEZZbDbsC}v}A{fv`fYpz(x3b^AuJk?CMgLS*BGK`h!Z@?@vqHZ^IhVoXCUu|L?F z;oOnpQ|Hz@i1=jA)CxazbX=s0u)l~umbU;61pz1s?1||4u0B78P3H*Dns{=}nL3Vv zLpMDO>9qwS%)4(S<_outOG?H?#q35^sw<|M!+9J%yz|#aot)7P@2r5eBD@rm&+NUk5Ks)%XI`BEuZ=-iBd)Nqgd0ij7qO&y|{4@dlG;yG9qQ~+uiNczq znF-ccYhpjfqpi6F-85?#IjO2Q_=wD7yu<52-%j8mV+D``BUlLE5vSk!u3>#fX~WkU z4ZFIQ7HkTCky&23+d8*DPDraB*5DGzFH#zVV}jXx__$f{tZFr^bA4d7K=Fsh>|&H_ zR&Fyhy>?BIc5tNp$YvdkNBg>dnb-Brysp1ZM}*-cfv6&VRj_h1LQ)#Dp9Ok*cnO5Z zI0%RP24gV!A@NosKyVNjg;F$0jKs#t zeT}e%ngr6f1g*gnBGZx9>xI|IOk~&rPlI9UtfJq8`Gt>te0^RLe^(H^Gv80adzZg) zBEAB;aB;)5Y`Kqz`aSPIbh|H z;abtJes(;F zP><_s-u@uUEJc|(cIyqmwXJ()J27dg;mPaB3&Khzki&O-e0)X!*tifT_FHTGFtX*S zIm85J#>!mJvm$MS?kM5>V}u_CzCilcpan7iN5QT2w-{en{vC|^WQ?y%8(JZE-GLn5 zkf{f?sCz2p=f9Iuz!vlmrKJzghwHNulovNu+*Lz>@%>=-9sKLL~@ zrDD~nF#1Tw6&sqPnvlsh ziQTBVn`JD7xZvN}X7Ms(b}e4vD$+j_fb#WNaK$iZAl8~$m{cIS?r*OWDn`IvOl z5w5gq3t#6T%E}4uyhc9&`^9wtv2YBmCFt~|wbod2*X4*(Wwr^N zOl|fMaij*)V$?WvqOqi-6LZEX@T(kb*2ZXy{5@Ob&| z{S~wnt__<$5xv2I?jzTzGg_F&FJjdeul5i(Ng@B}S&1l-#K;Tm5qPGhCp zWxi5u9Iq3BoS>S?IvGwKA6bpj}5p6^yK--avFY? z(j;60mzIQnNcs-Wg`p0m18&Hlexpz`Xnn6bpmC(;IIO9~{FEy6j?;`^R>>3~2Sqe?Q)IvNMq`^&T2NKg* zzPS`oA^6%zv!(u~mC)`se6$M8a7q63KBaIiATCl{hCXoB_%7pkNmQ^!&Xd_D z!Q#!D$u5mCS<6pt$kLX{W?(CbOjZnPggVLC2!jPZl917&yAnv^G8!u#`88?{c}b@s z^4D;b#ZfE#^d%qG+RW% zMQ-LdF%iu1{~F)B9<)K{>3LZs=%(DU*2^P7TVu%*Efrpzj|`|c))tC}&ge`yHDqBt zNk4AYe7N6!G-}=l+oCUxxo-*oZi>kR*cu^-LJuyFYi7C=I6mQ|!CK(&8t+U=qOUon;t)GmVJfR}4@!k@}9>-F5b~kExZjvnp zSC)V)V^q9=ee5yhRUl9snw{m+tn<&4Y*b7xoJ6GiA=zT?n!x~x(0(K0GCUhqPZSF$ z{_wLDTTc_ND+IJih+Z4Gc^e$k1l5c*%*-1kBHMQyaHoe$QSu5P>?CmKx}_Z z;)Z(YKqyPRn`u&B5>H$lYhaL_xt|7phN0~?u#DqN?zS)!8#nCxHjUE)FY?>=U9dUc zqK83}=<4JyiatGd9`#q%5qprvlIJNA3)kX0seWUv=V`#B%KN8Xs1Sa?+OB^O+@^oS z_#GP#^P6;uOJJ=Y1Je+aJW(-y%QaRgHs!oevr_lIC4Tb$H{?OS6_kd=i~)O~*l zP9zbDAhw(SA`xJ4Cfs1s2{U0|E{vC{j;x;tFP6=3A_}cM!~zlrUo_7bgizs8W%HU`Q~KEJFL-6 zt1PE63;jw761V4L9i#PmZ{1E43(xeZOpa+-GVvh_x)37j6KDW*mAdac=Cq5~ed!@M z{yZ9aDi1C5^nV(9aNfwXx1&-0O}o&v&xaoORa+(%F5)rXW)u9TwqQ63AHq;Bb^1-0 zwjDQ!b#b~)FF?!4g80(88J>Fh`XBN&&(Nr=4gFmyypm#Un}JWuYOtN#AWBiUk`y@f z8D_z8Tq+!|p^AcIw8oK@gaft%)Z0zhBae{{$CsF&q;DS* zk=bo@5{{jML&s$i{>V&)<1ZeLK^n)ANjT61)Z>77J(l2#KFWzCdR*$^_?Sc9>Gs(P ziS)p6OW{dp?W=r{5{8O#GNF6 z4D-7r=D+9WM|!g0fy{pbV=MOk0ylr952LM-TZ4Le+2W7NX*Z5^8=Dkhxf>f=-U{61senjS0MR8=AWOKU+?C3l6>ygMK+^f zV&C8A=0}cY`~A$f67z3%^H)kfz5FA`BVSpYD6iew%A0+%_!5=r49@UopXkTY52No# z-;J(`z7t&)eKWdp?7YJIgv$w_x3_(coC~Mt`0@?<2%OV5%AX^n zl2qjeQngE;a8I~M9e)yj3b*5Y&jP6i40De&fj_)^&U?4eeP=qQx#jT9%;f>1dhaFD zD-zPHy)qMGsMDS|&cBGpf~*-{U?%1=}3nH^bn6)E@pAz`TF}aLBLZvo|u7rTh`1x6L?IV-zggq!l?s5KJq zkF+Tv^cOjW6!&^P>Kj^U*)#4@f>=i+5?KgqXQ#~qDMdzuzCtfq-+hcwK&G92Yqbzs z$9|F?*h1u*Js4d{6H0T%2rvY4;F>jp{K1YBZW)m^hVQ{=IKR#J72bO!vRfgyW4x+s zqFF%|!O&*HOwKVDU%ed9_)>TiAG^3n0KQ|`_G?vFPJr?DdME&Djx+$Lvq%^ER7*t0 z488>o7ZEkYQwBSnyDZr|Sq+b1?dh>n>XLmkp}3ppL8x_7j*JYB3OzhXh@pxegBY9~ zW*97>0Y)ZX<+|fFag3q@J7y5I@LduWPWeh#^lJwpxpZVAr@fh~9h&H?&=Tl-jhp3Quq3+`HBrCaWXm$|1 zzwVKNVcnt*J3<}E!Bx%xCyE(xn)XC_P-Z*`V{k${;{MH?qjU}s$CHTC!q3Q$sdEH>#zl|JTLTs1hn**}Xncg$43Y>yz zCV=ajb3@m11L0+S70MZF9VRL6%7z;=ypjT(lTh5W-$VKE^egOsV#ExTX$m{ARsFps zzYeXj1hvL6Xk8sIsp=0hgf=Jxt0yT(JfKv`mmKdly*B}msyrM18AwQgzzGV93zfF9GKwu& ze9b6rb8rS`>0OnKP3K_U-?>uK)Z0zCYKcnRDOIdCvCS>vJ#bm|yA#uCjiz;;W`V zmx&M2`nySY(H>r|w8;HKo2&v2je1ZOKytfa9_1}B;aN#FFA|vi%Q$~1=O^UPuS$M_ z8|L9!Zeb&r-PxOVF%T7H%-g#E*zn*EjwKeai!|Am>lj4ZKm)8;zrtfb_!M1LB_!8w zcu=(r8QJ)1Wy@KNOf}pgm$v(@j`wRNT?W_8tii2hShBzPY;IpNZ-0*DaM@pEw|1&} zDbvoVs+QmFkX1ak$|S?(?a+{&-tr&p#xi%Uor-O)EtO55Z+R}to$M~R{NZJ8rB0tT zVmsfhB2m|ly<;snMp!{zUhJ+YJPsCPiC(aT7MrVEpXPogfU&Dz%vB3?+||zHI;(ZN4*2Ce30II0sWZQ?2h}AmeFB9ixsr^ z3p~iIT^VOjVvH=B>=b!0lNT@iMcxliuMeiBqQYgKh3Zm``_ZX7l8tSpl0tCPB3?qO z@wKv4WPj@fS%*~I8KF_6#7n#+>$EllsKx{JHK0=gUF?D0e^Eyrm#k~OL0->ify;xv zpzvAu71Ylm_@c!RzR>GAd*m~5KZIEIu04VO_o+RE|3_+1V(cD&tT*cdbG3WLI`cqR z8_*pg&_(9j%UkCM@9%$({i92*sQtrT7qfp3M6iFrwIq4_K0h`5X^Rn)vi{wZn@E1c z*45T1ga$(nxHyN;obxF(l^_!k0fzgQ?=yhOWC_&2hpU_IkCq$hRIC0?R`>RnxAbO2 z2DGFb9vdbMP|NbX%4qwB>#I>3BPIN_{xRot#)|{r*~a~2OEoeP=~lf`4bzB?HqKB; zT{Owrke+%{(Tr674s8=r6ZYc2&)Il~4v~imJgID6!z-%wY?bT7J-MFep?Zi@)l=5R zoiWF=L&9?yZ|nznN<0tM^P(nj?Yuc^{W*SS=D0m?4&&weOKy&z6q{qTKgTI%j&qC5 z@txcpQ;N;;7B5quWs~uwe)`bv&oVMM$G~E9EcNHO!p!jop7Go}HSgoKoY!xy_bu|? z$2a^r2ADa1p7$)gO1{f4b8{>xHpd8mjz1VL=mkaQxF9!&U2KjQpZDI!>1K|Ky!T=5 zV_0sE14PPo`?h!bb8JUevOZSky^l_Pmd#@8XvM3Rhl|ZI)t}=BW{!D9=2()OV^*;_ zD*ZVmK8yRPDKbYoH^-P_b3FZ=_dX=QhB+pY#hUxJW}TMj=6G9n@jUG`@TM*{bEr49 zznqVesMumXeg zFZb|`iciY-u?Yb@#;rCG>kvo!_QNEjhug$H*o*xFA?tbU)5ix?e_R;u$}vP&W0bK zRl&pbtiN3NZV~y^#uKQ_pNw0YIfmxV(M^9jqSzdN_vdIW*EzNf2;WCH{pHy`MegHD ze~v|FjysCX5z=37DK^I_e~wR^Ilh_qEJj|3^p{MrIa>H2`aYHuhspb>Dl$h%f9Y3j zj^FxoeAUdcncalkcQN-7(qC44-!o4Ky4as%uLgAt{YAg<9Ok=(^p| zvy03T(qFz%Y>wyFd++0OW{&go<}lwjq`&NYr^vUx&7b2bjc^&-JMVoM9Vn!~JWyqXk1G+x$HhT7Z<>BvQ?&AqD z6pTKXeY?o}sQ2eM&CGFskvVS2&GEZpbJX~AY&AOal||+lmz(2~Vsq^Or}r!~%^Wj} z%+V%FzIm46#pZa(pTjb9oK$3vzvt$7{;eYKqt>6}k4DdauPppdO~k^LxjBAPY>v_X z923nPe=Rb{sN5V=ip}vB5uy5RUqx?$_OC87M~fH==6wt-Hpfzbj_b`FCl#6Fx4Aji zwibCG-|*)+%FOXz-|p|@;@lhyip?>?pW{Ik9G>N`MdmmvBH@`ufS=5`F!BZX(dv-{2rmU;m)g zT=reu!_1Po`u2Z$`1=*VSn%Hp;}?7QTNGa}_&#C$H$41R zioZedcZc)Q{OnCBa;_$viJGmO8@!@o-+gR?*q zEV5P@f0c*dp!mxK|HrUC{xc7Mzv9*2k+N5TK7WmezeVwC@4O1v2=LQ9{8frqd*}Kv zeqtYU|5FsN_RdjZ{I=c(KSuFtk30w!2J<(1_`!<5Q||xlF#b+&{&#UWI}6la+AV9u zw@2#z=U2SiOATTCCI0g(UhSph!uV0%{Nf+?;!0Lw`UdltdHAaoulCSIVf+s7{--Ej z?V%3L-r)R4{O4D^8YOq+@P+o!msz{nM+kOp*{~Mfb<~rh+!h3{Oavo@IGM3M+e59* zt*cvCwKldcZ+*P=(bk7sA8dV~^=~=SDsC_R0GpsEd+8#@DLv=eOM5T)_w1GH*YF&5 zJ;b|wU6A?q(rz3&zP+?*PtIPN^KV|itN9?;e?^e_*S~`6%X>eUYiqpAFIlV-@A462 z&G-HvV=tX9Yow^X^n8=ipk-<7p0JFD>aM^nBov!AO;yzqjs^;`Y)} zOqS>G{psqky|iC%rn|j#5P$DoPsmqjZrQ*@|Ej%o>?=mbstT^V`hDcW?$GDEsB#h5 zOGcNihWmT+{lwRb$mTU%Sak%?-@B```y3&EZ}!z9bJY8Dc>dl$7MUaD@BLk|Icoel zJb&-CdC$Tl;3Ey$OP3UzV?QrbpT+a{Ru`EgWG@XbHpfH$9G<_og`I=kJ2m$avX`Fs zzD1s`Q|r&+`FsDmKRk!Abwc*iPm0Yk+MnYOM*sU(kvT&4(v)IzytT@EAE%o+zLz(L zSsx*LX<)HAmilvShdr>yuFHELW=|nxFRk5KWPNpRKdhf&Y_dbv}hj||%d+ERq^DKEf?)giBv^I@S?ZN9KA z)FEG!msY4l%8qHv4(2J)A3ucif1JN}Z-=?${iH`Z3snEe^Y?D|@V6*l^`AU{??WE` zD#c$Q`bnO@cVfGle~RK&zbXsskK6Vc{20Zn{*mYJZS?Si6|eeRp1=1_Z~k{blKWTv zD$n0r@7>=9#jAdl=kLA5e}2WQew63$9p%k`i{e$k$@BM?dHAaoKTe)M&)<8i|NM$q z{pKM4-f!~}jlcKZ708-&qX?q{{pMR>WRYCK*q-&9oWFL?)PGO^=vvNodeT2$5oCe< z$GPO|A7|sc_5HPb&;IwWfBnI(|Ml+I-;Faz-pkfE3;eaS8SCqtrCHvF37aa*{)v%9 zapsgh_TxKRwqic9dHN68UHxh{#>v#Os^_3rFU5b0XJaGewKiF}+gq;rKo7T>L#J*B z<615?z^8rSYXY2PfR6%n>fQn(r^f&~b>fyM#^wFIaOxV9^e%;@{@;!dK2+9RQGMy2 z#|6_(U%LEd^ri2DYZ>{EgX&99?v>Yg;E|!cftWSFca1-Xr!W1z$Q&Vk>8@gPjP>XEfzi3< zuZQl7i-jlR_QAhPD@heQ|^=u4-7kvIM&#{Mh%(!?+Sd-}?{Wn8Bxed(`)%-5H` zgb%{kmp;8cr!O_1@$X%K^1-fuQupgG7Z(!mMdCx%UvnidTl_T>7;E$;)pzD_Z|FNS z^uug#S=_3JUo(fEzBAJR(>_r3ov#_-sXkDYoR*XUj`V?|2ephfz{7l?s9r6{7+{GH z{6K*H4e-6)vI@65brSm9@*!zN+~MtSi(;iUN>HqJ0Cehl@k~;>$>?tqpO?P$NsZ5o zXqnHCGSQ~=rH$n7EM+Dt-A%WyDE%F?hobXLlF67AR#fv;>^%$C%BY+59wc4Ct=S>C zizVuKn4s!G3FJySSfmH_RX1<}t9}N%gbOx4gpNr&y?f=F?s@xC?v%Ead)WsW_u6-* zofc&SY0)tf6!tL5q%;r6I8O;|bjtk-unVX#yo{v$D~agc(73CluHCZgZ(_D&j9~Dz zTQxZC4mr$PxK=@A7g+QE!B6SS6d`jz<&N)d4W`D>gD0h(wRJnKWc0mc-9F}cQ%-TcN64P%yeH({h0-ioJm!6;W1Uvrnqq$`BuP`@GcH$Xio~sD=X9kb8&l+4^tIW|tIcxX{q@<>v7OXwFpjW)oq&b{o@N{g!!1>Uyu0r`GAs1IxoL`m`wf zJh@E?@!BiXZmL9{{>yGfg|+a{+-|brB&wTHcRQP6gtcgwfu-v9(bAK6dTU{=_`~Eb zWL%1bdF&p};+KIiN^WFMt6thqI<03O@3qKyYMb&tk~C0#&RTRcGbXHM8`6;t_6_^G zYIkO&76VsEMV_?gUj;VrJ{O(GGZ=bhjzbcQDKKg+J1de{Jhe(@J*&6;>Mg(e$S(>Z zPW}6tl*s%0mAw9V!y)qVW7!0&ti)P)jG4^4zthO*8JgYWTj(k zt%cJ1IptmzNjXoaqEyVSt*Xw@tAHgomEJP$S(TaChKxI<()uxJP}VZ({1V$}TR&bI zFW$g2DffJfuw`q}?SL~<;pPs0Sj$dIy5~nyb?p=} zU@m*{7^{9K1P-*fwd`ua=m)NWNP63guhL=F#F?8heHhc5F;w5=Y{v9qjGn-lyUdsp z#`IxKi9e=7`Z7jOV9beTOc`VP zGKSc1Gp39&dIDqmnK6+0)n$xfJ)1G*jL{Pq^SUe{_xyg0Vdb^=^T+gKjGn-lMl+^A zWBM^h=}VryKV$R+#{Arj8NitSj2Yn1Gk`IALUrvAxlRT60pMvwYVM^1ybi9ey%79B z@DX!Rz4a+An|~1b!fR3Q`#SAn-c4de(687WhFv&H|?g)k;sb(zgQ=V8y1R zTQZR+6Jyp&r5Bc5k~GD}w@NgV$GV~f%4>wP4K9Ijn^=HP&&j6AC*$;~(f~vn2XT2a z1hypW-q=I@b1L$#u$X%3#U+cmbzqL4z^A0RA+&P_wE55Y;z?asQSXkN@s}%$Xndy+EbYT`P8su&)W70(o%mSgSgF{1vk1~> zZW%jLG+A!-<#hC)DcUAQ-pe|?_Cx?;?V8@|+w9Gbn)Wlz<6-eJu@TiBknuBG))l7PD-9&O2f0-WAt&(Hs^JpZg+ z*^}5H)uCBb1NNr%o$_|GQ#n-8mR-*sw4C^7)oOD76+d4#ed#WORU^)DD?XcaNXQcjT9YS-7t4F2rm|VU{Q#>lmV*lK;7S@4 z^UhNwmblj`d*HT{Nx~l5dp}FlF{~5?4y)ByHc2Q%GsBU?WwVT++>%(XVssngRh1VI$_k~IZBbtW+g>@ zKF*Q)W0vy+nRQsIZhwS%BJstv1G*3%2Jjph^ZwpIdnes%ddC-^8L{fednowv{yw1k zfa(LPw^c9obL1@8@ct4|C7?<`^|9(JJQUn_e<`R^P^F+stonCZ8gdp)cYj|{eL?jF zRch65@lf#E{biuaK$U^&Yt=vMpcKPl8(MI$&DXNADlFT@yqUz&!i)b zGzG}evJI_p$@K9s#NPD!iHwIK@)=fCren`u-IC^$*S!MsqelDIbZlE~h0z~=OGGgR za!8X;N1sYYR%H)Gz{7v*+E5Mm^3=kVNP4ayBd7(XsL@)~1vKrfFy~7qb=@ks*$TwZ z%(i6g`8jVX6*y}k0#^SiN(g54J7a3EfVl=Meo-YCGsIA@>z%n|9%ulbXs)CeXlKb@ zh2}LIeyBt08Y}(lR~r3K&YL3Fzxu80WQKYCnX5;5ixbg1SK2qUb=AI;{eGUlgN%T0 zQv$WQW&Ki2OEGPE{>P2x+KU&6Xc0Xv@{DL^yR(=h2nHBX#%Z?dpWwdf7?V7KTyLW< z3&#rS%Nyjux;H}d^<~KicLr-tx-$iaUPIYPyE5y-Z;jpzH<iSA9uR;JzYO3>I7Y4;*JE3AOLS0u_;(o9}>R9y!IeS!RP zR(hIO#vPC5)ojgw9a2-x>riglT1Iv>T9r zz3 zUoyIZMi9x!8ljH)uRzAxiOgx=&>1;mMct0xbuE#s@!rafWcvvD=sjhZq6f(fbr7lB zHIKCEx9l-AkV1+)70S+jS{M%{cAe(z8PI=A;&-Cw#K~(u>3F)qUbiErdt7IR@%r~MYZ$6V>xL5oa znM-#}JNr>6r$ZY?9x6$b0KhR(Pv6v7MDK5gUx6R zU$@0vx3;u09oc6$+}ewCGrVy3T09YyArLKy4{>crD!Rpvp>wYn$OuLbW2E(?m*Eie z4)n*>LiZ-rEOSX~(LX2_71?D!47yj{fePEv@zT$5dcwJ}FXsZ1i&;0l0E4w>9De_` zr~IPv)xOdmRO=y(MjJ*EhW$^ETUQMHIh#sp_w)#4aPky>H|{zV1sR>UeBml(m{W9OK^!>{MB-Pn4lDA)GG^5$Acd2%5>;|Mt`9oaiQ?tGUvC>`;J zFUi<=4D)D`)FgD)#PJ|FtH11yIzJg{%tSwoyFZ9Dwvv6k(|YiSJj(O4A4=1UiVj#@ zfknHCYI}pMg~OyYocn`!oBHla&g<&rvev@MBasts!+Rn;9+6KW|I+A%dtXU5?kY>k z8-6mmcN_JfV4+OrUyh+u=!T{7M+PwJ3f9^Gea+rBcegt`kbPBTW(3?mDaf zbRG{FjM?tpWJeGUkG?OWy#9EDfG^v9n(W?!_&{V_{a}NDE!!ncb{|1}C}O9+jq5WN zT-h#dvP%T<5hP;OZ#M{-vfa1IE)~RHVIB2N1_4jD%bM)If@p*GtolD01T5JuZ?ek- zv5#0mul{^pCmh-ChtesCc7gzFujj%rW4nKo-A{lWME+6fpso{MY!7I%`wMXY2LPu5 zgcaKrP4)l*9(W&M4L~@tJ+O&vD}bGJO_XHjPTrCKM}nBYo{IeJ1-3-{0^du|3KSiBEDzea5=EgIRns-wMe` zb}cVL<+k%k9+kh&$Q+d`Nk6#_pRKq$rE2R1>ODPqHZbk-1>50moG8bTdO+v)jO%?O zKlZ2K7&H9WGG_OoaqRn%hPIDIZ<}$dkaY&HuI-$VaP}n{s%4N6^#(Sa;bf4RvpVA* z{rzNQB?O+1e%P4pi_Az^5B5p8*G6VPmXbya??RJRB%77C!6n= zYBPj~59vhFXo?~U)lEdtV${5z#6~p9~x#)9g_vmt|!N7|tc_er% znOLjseuc{3m9y`YI~Bp>#jIk9)A@Ux^FKQxk#uyQezmtrXj zXB6YvTKJ?CMua=sO=UUu`18*M?9o>Kr>v1;7AvsZ#ZY&Xmd;zZ?{G1EQr7q<={{*K zs^dhd!BGEgO%pw?IL$zN1MLG;xu0Q+rx{EiFePA={TaUaNrNc?Qwm1; zpJ9w;22%>AFBoNjhBLk`PhZ#87fcx#<$#7YZZeoMFy&yB1sdM?u)&mr=?6x6pka=8 z8%#ei{lO?B6z*v3P_EM-%m6UT4V6V=SG5fQS^-qqq4LPD0IdKz5UBD)Ws;`@9SC#~ zP-Te9B~Jv(;+SXw9Tc$1!-25tpllL^<@3oDd{TTd@X1w%Po{BMsXM}Flh5baWb$Ba z(%AxOxKqm_V^*-Rhu+8`e+OL#k@waD%1&S(*lEG7+{B;1-!uFWJiI;NdGl7hC-((qc>`egqJN$MT z+n60I&QY3rF@FJD5OzMSb4pJ0zQ8=|s2x~uWdUxTA@J5Cl5VWTA0JD9#dA81}jD&LPZuLVKMl4y=JP2?q*1SK*P0T;+ikFL_9zC$!g_jVyG z5s{w2tgWgvM5X404njVbARhzMV%j>TrlA*_zXN|~{+9lUzq%f~(^V0>!jqG1u5`02 z0y&wCu1iKb*~G<7Kb%!H?;S%2zCEE!bxwjGQ*icil{`?Nh7eYbAkAZyXrxI1TEpj;lhfMQHx= zMHrlVlakK&;U633yrr7Iy=;bn7-LQnx01150lDlJ}F= zV;dXW`{3%t6=nC50%jki-0RpOkF`i!4`-iMS9S<5vf)hpEmwA?qaTS5AYz_~gj>}g zEE_mJFy$V7YrLV4^Lgw)%$j*CMWL6Cm{%%M-W!I+hFJ@?%1@*$%mObf7jduZosQx( z*goAEY}K6!n#R#3sfP2w?n;i?mW;h*Etn#!&OMV2it{Si5wPk$$GB9(W%PussYs1! zNuG9Dg;jqju^{hftjAW+1-4H-vNGE4exFBct7{*`%N|!{Ej*lg-1Fb9YqsRAHsfO8 z-@J|vSqTd($cn-W5e`A~YZQ*=RAWoj#-^UvwH+>HE&NX*Rd+6TCc2BWnx&6L*Z4NO zXV(#Wa2N-W$;dIR((keNH{H5&1qPPY+32rxG!N{k&Cjsp*Nd>4Zgn;#`Npwlf$oo6 zgX6Kjz&6d<6nC0AePdVMoBORpnx)(C{-ith&(4AA*4zz^ua}F=SV^nWc&vH6d-QLt z`Ze5}+fX9TKlhxH<_WZ!zM5rT03$&%WOPxUy=+eo{!xAD#LwEOi)bZ>Ou;{Mt5 z%)U=RhlWC>Vfn*Er}Q8+>8~X8Y^#86r9&j&I%R~IJ#U{1v73I4#uj()5+U}ul9Y2G zwf7}^xv2>K0-bxUv~}N0sm9jh(#}f>_d?6A>ll)-#&5S{t=6KMoSs?DI@zj3NB z%D@>>c9_Aj;YfK+Ij>aCGoq}WFUy?lI8OCN88{=#UN$(k9P!D@d1YM*_u(@2k%@lD zdF(k(^+g#tSw2?%?+uPk$Em(31J_SIWj7ieyN*+RQ3kHRILoePKDHgF`l1ZDw1=rZ zA2?(^)fZ*JWhK^*2hPUhR9}<@+3a??;qHiZOHI@7KuAKIDscVN93Oa9j@&avm8o?AV(bX6Tut;kU>U zKZf3^;Lg%B_3st?gs`Fb%}=9zu@yqdgVnh@VMR~J$zyHqki(63Y~P$sw)2A0x5_iS z?$teUXL~{-DYnL)ZH=##+tCdP{N1q^W{u#axf_JueSepGE_$MseN(qWYUrJvHFD1A zd){ikzNK}Gkyl1&tSVQ=`B8st8cAF}J{?~o~u2?(Pd$O)X+R^5$Qv@_1^6t@}T zqcg=lMc++F_Zt7(xU*(d3W}qYJLD|u!Bg><_s4DCa5x^M1s8I1Q(vrx%S7&^@jVk* zkcqvda_3@Ri^!dH!(@>==`l~HW6xL%X26U@?xe9>^!0s7U*Gi=jIAKAEjea)Dz=;b zeTYzQzpJsUPozB_-4zHPYuOjAg`=4!?w%oXr)KdNJ+Z@gGR%1_?MU25gqmd|$-0kH zo4cc|pLv}|>f8oZrQ9n^#EKc_9ME+xOqdx&4;$L7x&sy2ZJXpZg$5yC%P36TlLQgrMr%Z8`Q-TySXM$-iVI@ zv~Ud2<)HH<&QA?m2px0<=&;PWo-;-0fT{!)mO9@6C1MBE5Kv*clL94z2h=c7VafAZ zP$GIj9Stfhdsr!FjsPvf2b7UM>%5O}ob9wZoh zye^E-;CxLr(2x7nWNdfsYb=axt40hM#m~^yp4o?p@;7Ye0Q8Y-x@xMg>8gE+RctGT z2nUO#XbCS)jCDvrSqR4^-Rojpe`_jsz?$C=R%a^(KF*@C8+Vo@7FSfE8yY>fn0|2_43z5U$f7h0s$0EzTxDtSVAe4_v48xL!&xp#x@A58Rd> zvn?Ha!CLSYj~+9s2R>=l-N!g|MNbcWE*U!yJ&+nUMfE^uYvXQQ8`piYufEL3SYtWW z@Cc>RLfz2zmBaBUoCjA9?`Bc^%Him^Bd$i`QyW`VIUFr?IvP41?a}Gz9G&|9JVUR= z^}|gE)eqM>9Y#O=h0~z~`>N`PPukHJ(GMr8ez;y~t|tXiI#1g@YKX#tz!p~#zYnIk zj(9Pc;!5HKFvYdRQDBOziFkm{fmHt+dSXTiP>587AFE{^20})J-;wFqDiMCqWjD(h zXJ7U{sgC5V$^HR8;n`z`R1X!KP3#9X)~x#PLwM}1he(zP08${GEEM|`rZE(o9tg#5 zkjNY2k*86Is;&!*F3r_FdyXKbof1=$8D_sy8&f#29^(0;8|pJe;BFCC2KT6j*&8*3k44L(`K2vrnR63+TXT)Ii~v8;F|&7IKw-xs40F%Nyhp{3^ygir^CoA?yhly<;LN+q zo43+hb|ev*cJ)#6IOb7)i%zHdxNMTWm%S1x>Ddu;t`fwCeBlU?XN0yT8$5hKe8Coovi^-+Dhm zi1}_Y-q|~|9~PrMwRbxo0mJ=GOUTt2?k^E4xZy5Af&-MjKlcc-t$wiwgBD{Q*Q zT_E0DK-GTe2dso7z@3dCPcap211|ns8|XH|upC#_Ck<@E6ADb%^eJ^61Az@{nlMmcx}HBx_gY|9(}Y0+ z)3q#sN)BWxH%+ieOtaaM#6-8F+l}F#aIXM@5g4rGVFcO?V-H(bGNFtYd_s7qS<2lkrFZPFdf3?W&G#ly0_(QR4WMjqJnTE!2g zVdxUT<*ml+-)tpda835)ZLCw-Rd_c$3>I#aO{&}NUfAJHx1#ppzfJ)OOSVgv?1A`cc&e;L3*>ZJwZG;EZrOYu&NMy`?+Ej7E*R$F z9bq00F3iI_!aN*Yn1^?Sc{sQ*5AVq5;mgB3yd$57FAwwZj(i@zJj}y8@_G33Fc0s@ z=i$qJ9^R49!+0$kB2YM@o-|DM+*-hZ46;u?#iCW z{w>lg9^DQds3%r9^cX?rRB^b2 z!~zigQkk8N>uJU{p61k)B$fq|B@i&H1tuVz*S5%p)QW6e3b^Gq60L=^m`06MYyJiN z%zl&qp%2Q~wih5wbs6)&J=ur7DYDc&6LceJwxY7v<3g5Uo$|ju*;hb^&iWgp2%*Rx zFBTf3Ph+&`#Jten*{|Z&PdMwcx65XaDzU3dvL^wQGia^_U+}!v*&{g5cGhM;1KG!& zm$YPp?Q~_gp`gnu5tgzqO9eQ&`PKNVFzt9ZKGX!6|5?tnorQ9h zhqw!gzg(y{b@PEEWVQ^#p*`)qor-QI$BGE;37-;hZPmL?iCzRDdf^s7t(KemQI&AZ zj|tM=YJ#-iB&23yevtOpY#vqA-oK+wCsBKeGmdDG_CLM;j&)r@kao)bdzE38V<7=X z2T|IBF^uv^g9*a41!LHxR65|CAWmB_hDpA`O8^rDY754Q{ih9vC?ylAEf^DOA(k!Y z1fkl3F@Y9$8cYzYEf^DKG1p*%fNjBOki})p6hv$bR6{Jz0vd#D3)GKS>I!1E1*+i{ zpJ6O-*92_~RD&ysmat)!f3Nbxw%JHPhh?Qi+hB>Ks!X)@kSZ^#LW8wORVAIVRbHre z6$eAAJUyYR3SKt6{LdPv9fJ|F`_!K!{ti6L{4G6S{s!>~U_$Xq&Bfyn)3J3|_YkkW zDTvo5+wNtJ*S>DNDzir3_Y_}Y;p(qQG6>86H6DXAjcAViFvxT%yF zZ6!X<`%sc3=R?U5;`698=1{Yc3wzofQ6(%6a)~z844iYk&JP<`9I?l5-p|P zFl*tQPjJ{RTB>!dL>ATw^_plYm~wJ20m~#=m>6P`uOv3Pu8SCAjg}(ob*r^#l#(pb zQj3(J+R$>+{uVR)WyDDvI66++-(n`d#}Mw>28WK5_P3b98PYw);Lvf>{uVPhL%c^B z96CFKN=i5 zPTJpM24~3lW`je=N&8#O;FOT(NVJr|3!bB2wWSiQESt$Au$8xpk~nbSJ#rUgt1x>jVMM&WlOI_s zpl2krVVEDRybKt@%D1ON84Jhm1jq@)vvPuDBVdJB7Q`uMKhIKB|6;?bwll0-{=zEF zUl?K>LJ-c zmw$QeC$)D+i2V=`ChX^En5khulZn;5MY&Hw0>e-KBM55_f|+G5pZTQS8f88y61pUT zAwyDEDz@HQbkR8GmQc;h4MTwWOb#V5NZu`^1M8Vwkic-N!N7PX7bGx9-Yw_Ab|x1j zFi74l7?{pv!dk)!3~w100Lz(Nkif9fU|=|t3lbO}G8ov+fcI;4irZ2192# z{vvydqpC8*x+{P2a=b`h5dJa_wV|a4{<7hB%3u7vg^e5ve>w8^`nU8`^7mikFR9py zV)+V&zesvve!jw*Q^Wk_;Q3ucU?pn5i8gMbCj@+@1HN*E;VYt2L?yu5=Pu6s2jwmc zKSCad^mRH}<_A-U^d*Y#%=(0}`4J zvd%7C=grFdSSmE^4eSM9t506KI;63n#+QAFDZ%=Tmvw}0O4yX@FTT-m4i;B|hT<_j ze`XYwjGMq%c*nYV052}>yeiB=lR6K@V*7jU<^c;Ko>^iF!@WJkbez~p(d2tY4VpkdA&6-hMG`rr|hM2 z!;pUsjG-o!+$lapFpz%@jG-pT?)3AQIwAiW7(n&Gztjo& z*T58Na!H=#FLgrxH82HYTzCdQ9=j9ruYoDlY8BQqI~O1JD%DA_~U(UkL*kGTP*KZsbVm|JNS<%ijX}KUjVz`M-s6*jsSUslD(9 z=}PaXBioabu5>A)Ch!k_T)xt!Y8uq^n*K3#xFe4a<0$zpQ@%+O{H462OIJ(jB|~Qz z4j!Ee$;v;p{G0mL@WHVaDnsO|)3y?JO#$Xs&MvU5#!-&Odc{GPCbNs?Pfgud8Cl?zhOM=#p+P`J>SUIZpMQr*NYkt zlgv3qjR%QOMWPio9u70OqQ*lz--Ppu8V@fU9N)0J@vze1iW(0RpURv?jfWczu9)#~ zHRlvF9?l0|%y{tRdNwWI~}$m(Rc&- z6;E(t?*4Pn`WV7t|EWud7k(VULn^dd7M@VWcED`d z0DDj?LyQXQX8sV5$vXpN*G%n+$Ny8Z9^V#OopD|iJ;dZZpZpCFz6BvB$VfKXH0SZe z^A$t-$aktn@Li6*kz@W2zm>lTTg`zix7mY4d05W>G%YjPFt)1oB;Hp_@*j_gyEl4y z(d*=tc$D=M%njv$|+{#yj3CJ0z{o}1(z-Af_|u`4QW!l+2Nm$Q$w3(MkVyJ2v` zSwBbs*Z*1NkR|U|X>u2l6(9U|%sm2l9GIo{h!)97yUww6U|8p94u9h&GKS4(CAD z0Az15KL?UJ5N+%w=I1~j1|UBN@&;}RKkyXvK*B&h{{!B5j)zovNs!q6q8~`H7?T27 z#qR>Q;{A8&g7otrITAL~Vg8o(`KfHI2q@%F6#h{p|55X_P|w5q0r`)b`)JEQB#c}*6_g_6Qtp>Vc=%2&2qEPUcpE2Q&S7KA zq5M4Y3Vy=7#!e7F0`rHS#6kp0hO`0hj1kI?$5C4T*fHqJYejW0X}V1=mP6RI)g zAE4$TbN%uU9qK69Mfr!`wmTy-`*EdZtpTwody7U8#Ibg~`+wWJ|4~)`?YG|{ER2#L z!qhU(6Y>nd2gc)gkFk^^ZfBG}MqzL8YdI!nC_gw zJ`a&SGD03?3ZcF*h`7UUS~Hp1WQa{-5vHRDY&QjW62Hf80XT1H!ALtCb_4AopS(R-WX=+x6p&Nb_{$UR`nG3jj31KwiXXAjkIO z40+OoGen=zo-xON!r=!P-T2O-@_vTJ8{$5>V$C!A`_Z;^iH?8d(~vF01ahjLS5T zy+V>?X3Y9@?97UPEjYfzn!j11mV>-WNtuYdJ%-Wt#Ww4OqV!~*D313c= zmME{X+;;Y1$BI_pnC&ge_~o+SUoJnqFj@)+`AIBB?(C!ba$y{8s__-#Xg5e;`~(sw z2M2Mq1aT41V%P1IRF;JEWWss+40r79{E|3Yo9%qr<8DkuHxmZ%e|RA6`#lEIp2_Ar znu2Dq=xUh_2g@`>(hY}XVk>K3W5H-}d`|yPOFVnBfiF1I1jU>D=C81U{7vyX=cO;- zjWMt3%QcICC~9eBL(lQm}IT2%*0k%3(gJ*^DAVL zL73MvF4K_m2y;#Pv?PRi0HwEw>}6}&56M10Qi;&ZBKu*l!Zfmh+}go2RD=rs3>8YH zm<$!D(4?r82LWk4kRpPEc=n?CDWQ0FFM*l3vTy=3(e2IwsPGpW=010W?S-?ij7MK0 zMJ3@@+~bF{Yf>4x9zi&}mnJ8h{$y&IaQ1FV%%YrwHR0@qSukc= zHK7bl5YBEegtKct8JHlP-Czi3*K{&4K{&g?cquBHO?Hq}<|LMxm&%-m3VnHNs8QnC zSt93@$P($3Zs?zhH3~JZ$!=GQ6@i(RLIT#p8;R6bqO|I+=OxBQSbR&gYJyO_LH_F=N!0%P1Hq>?4@C%5iZEvPVbPkKuL zWSjB!Tzbn6kL*cradE4AQh7cnzgES*q zq>`vGlyPLWd9?prS~J!Lpzs%?{anVH(Qv*BQaQvByyTXrDLdp#<@P+O z+-{`uuX(X)FS%u;?X;^@9*ORbR2CK5R0!;`sDbbUyuRJ#vgEgjxK_EG%WrA-ijVvB#InvY$p@hfhEndG~c>JeR;ijt&Vh=Dv>PzD#Bd_eEw72y~}U%uQ0i!7Kk@Sd^B3pj^3E z_~C^|hcHf(NHQerd(|HZL4F|->#!CjI9sbfv<`=FQ2in4PV3#2h@c*gL$m`SmTp>~ zri2uIxWz=|eA*xgrJGjLl#q%Kx0rC8{suuL-L%rCM2R3wEY7>!0aFo3H?40|LTWwS zVz$MeGYI17rj<1%`U=8C;fQ0AGYF%bR^F75Di2Fcn6Y@uK@deZtzT23To5M4*fj`( z=%)2=O7s(i2GC!_XyWIl4QNXA7obKKUkZ@$xoH(mi2(xCu;NJoiJqG_uqja?K#eJm z0VH^C+MuSyKmlq%aTP!|y{1`Bi9rH1QS<<)<*-Df=o1zU^!u6)LNK~1<4|r(9S7t^ zNNI_S0YUV-MhlluaxXX$2SbYqqi&!MfSdJfM82_bfLeIl|xsOPX=Ob`j37rR&MIh19$kPfeYhIuVvKbE&V zbM+iDF>*JapLqxc#Aegg#K`>maYwNe`lXEJp!+q^nLnku4PpWS0L@Uw%uK?HJNS2eQrTYA5RbsCa*)7d?qWnN`nIz(J?8mL>_w}7mnhg2X;|C1 zuTSL3=r&XL2ytpHBhGfLuU$7AN!0DRJi~Vb87kEoSP_fW;5s7N&_5k}zV%rN*3WXA|a3fs5n;r8OqWngK!#A5Gn=kHd0`;!LYSDjVK5e19uxSaG1fcu{whU^{MFB?l(GL`A|G z5v`{zDJCP0<~rG(`URu{Uni%!#zm7&L}BDok;^7@V$9mOvrd@*iGRF7m_Ov`B@P~Y zuK+|W+^?9<(rZ1y(7z}kEDt0OLVeOnm~@!UhcE zgZpKE2KD)VnM%KMNTuhNsTAjEC5yb$bB0OB{W&ua7n~nV;{TtcK#BLcW`TzZL=9kI;AFX-%{if%vFO&aYK9lBi{q5?0)@_Z} zG6)srCHqCT`}B&soiy`MZewVmbBSb8D@4>;Kaf> zdMFL1-$D3BkN%rrUnS?iDcDze%IvG)zj-R`zhPg60ww=P@2l`Fg5s3j3Y63ovX9Y* zec-=I3HxBhWH%MEkF#>@V`3irh$;Ipa@k9sehlvgfgmi=mBLDf2`f1w=P?PF5;-DN z@*~7bjvPZ-+9RZxh!zrAnLPnNj&8cEi$pS0sVi{rCKwEq%T9c=C>t|IYjM4I4$ZFK ziNKq2reEws)UaVPLU#SLuWpyq)?`0g%bcW|egd+V<7LlCIxHm_o8%(HvY%SVv73Y= z<~&lAKRv|vNSWs_o}a;ZehdQ7k9m;Fnf>rc9g?UXTw6x{m1@n6T^Zr$iTu>{t^S|( z?9&7hB*fJt^$|Qzk3=;k+*>sNN?kn?KE3yawDT;<JZ7hbtUM&s?pK0NiN!V(C*L z0k{@O0B-dAHx-VXXRcOA0B*GVbqdGJGgnI_0MDzD0NksQur#km0&uTJ!cwEx3pcLo zz{NAytC6r&wR)+M0L-hAur#QV0L-hAur#QV0L-hAuvGPVsgVH8tC6rYsF487tC6tO z_wLN4M#56RMnam1nYfCHaaC$KOQ@2k!DBg(sA)uRe~ZQQVc4XoAL>})bBGqtD`zg@0Y&}8QQ`RU!Dp76T@5mJ2vaLNTRrAi6>$!=WI+k zuf&~Ky>gwe7+XBypy<;PZ9m#QC2A=VXh&M?*tS_mbKczb65O<33o0k1TJ#UtQV;oe z=)uf>Lc9v8XO`vlZ?tX<5q3?{8bPL(Pxl%@l{0C8D>Z^l1QwzRj z1QwzR?kJBSc3|K(Nw`yF3u4MMaCatREmr;4vCNbo`}S>9q-laUp~UGf^>5CJEFP5o z0ksQ6OzeJ2)@4Cyko(ZMY*WuB={%d<`w~T+Hr2f@HJwI!ZW&?J_FcuyB`^)5{Ecx=pc!L;ylmS<&i1gtOhS?ZHcbz z55H#??Xmmi2fq8w9$pvY<7eCCA^ z>4N$;_jqf%puEjJ-kR>f_ZSoxkGuEet?7GmYg%<)R_!q7WnIz3NIDv8%8Eyy*L9lt z4rOkLa+O+U0ys7eKzKN{p4N;ZXNzBP3BXhiEh}I142GY~FyrD8&U}g{S~?!O$8{KV1~14Qf6}y_?rI8iLup zn%m74rTJl_p`Q=eHMHV+O3J?8)AT+2P&6+2S%qq*O71{Jj7RM9SFQyDM~O z6qRbu9`O$_grX)jvSz)t@NWdnq+;u=`9J4J_ILb`eKWIVr-gD-+@egCVyXnT(pRxL zWD`b*C{(K8yvKHt?L3t|ljvRve5uS@sAT5XZffDkmPiiWu_dn0rBSMSXJQHpChPiG(2c<@mEkKfws zp6o)*wHCFDv+2^OzDq{!O#OJtki6*M8BEMoT>HF8g$$s=C z=QEjU()uTM?}C{xlNg*wK(pDgzasAZw(30YMgG?Cm-_CvRZZXrZZ+$sA2D`DA2Cwn zGtM@~X~VcG@&OxPH;oNDE|XCAR%otLYz}DW*)Tvn&684K>j{{+Y1 zV>g?>!(Zg@a(Qj7QDa}u7%Ue{MWA=*o4p!FQo~I{<6}`8(0oGfYK?=3A*!^K%Th{YN%I9(O zGjaZ#ZCMALz`T;ddpO00NKMUE{2_r?q7;Ay6@QZM<3cPRQUm@IlGqv42t{!)EYmN00uRF0BVV!7{H*!4?s=WtpXTS_yMT(Km@>lkLTC- zkt#G^KUQLE34IZ@)JxU%`my5LByzzk@*n2jt$?a;g~T<7wkT0Mk9joxoORP0M*1{;y3+KRjgT|VuSKK| zjDAxndKZ@%!P_`_+c!+=gEQ5qWRsk;5jgl``!k%s!w=!_Ka`S3!q+Fc6@3UWI3eCJ zEIy;RkTkYFLYW+oBdq!_N)9f$IPYm=!J{W=F3y%@^rgmkAmnz_iuLQzG0aqQ;e?K} zL%8iF!Q=i03rPDb<~HzzB{}uxIUD+1Nv6lXdsfJS%&WK#y5@|Ou zHW7Pb4moBehc-|$jlQdUG5xuIP`3nj#$KG%EfHQOSuO37illv4y|#+wp{8<_B`i<&t`6 zxq2lhYWm^D%BiH~YQk*Er=?_pY{`>oN6XcO*^(#w-mpB`k_SU$xrEu02V;1iY{`S6 zDn#v{2mOL24^en}u z2673rB@fiEZzkusHtxT1flL#D`88XRvKi!DgQHlR?EFUt2y?keO3+oV+%@( zl@w=xpS(o#noGSttDoYKg+B0d^SAVB`CGvMddz43Z}nH5UL`!Oo;S=p{+Rx%AF{D) z{CS=l^eB2t5^ByxHlu%-&Z>pvttyGn0GyYx{Th|r&tswD-1xF8Cj&T0Is2jek&@IX zsciIvH8kIKQ9jMX1%<qvcdD!`LLUg%gZXMO#NN$@JJ?HAMg4f;>%rvGiRI z`m5d~!3^-gEUh%?uS%vdjh8jQcm#UnCm2HpO|1JGhQAQF5~_a}R}1`i{p|D@U73`uMQMlCWJ@PX2JYZyEE-&Bi+hj|vo(GIb+%8W}=?~5*YqF(O&jUsxHW>tY z`F44eEtPs6Faq&U27%pZ_iM7HP|pMT@(@J-CR^(CJfPyx%geV1G}%(7=K+<5US7Uk z(PT@No(EJIdU^Twz$ROY^gN)lu!h?sFW*%41gN6W%geW|CR^I5KA@72ynGu;_<%74 zy7e8$9th;&cF!E}`l#;KKB@>r>|rAem2SL2QzKpa z>zld@C06TyenLrYo<^1Gd`;H z$~q_Lx>GHd+vw~(?!GYp&tgRa9b_{45qY~++4OF#p77bL-^nzG2+Bl1d*iMYM zZVgmFMTeqdX-K(5;KMXzrN=H=*AD);Shu@)b-Y!!{rS><3)K-`3)K$LPdw1Z> zJ_j{a<-G9b9XQ?SAPc9R5bIDURTE@=F>r#cL!DGjm~|33Vb-BeswU8SH1P0d2lMM@ z2Rj)An{t%f?C|s%FAHZxBDz)gJP6Fcf@MR|RZrW4cqQI?gzdboTX`cUyXhhLQ{Of_ zcc)Q+IGlwe$71yiA1^=H$?NX{hT8lP`z~+)j?f>oADytGcHVyU0m;9?{wWB!PJ{xk zwVx{8es=ZTPjwy6d1KFgd_Pq}MNDSFGJHF!h7;(08uU|r1n0aFSy`{2YTN8e;*GWI z<5e0LDupdpnig_W1uPY9k2_S*+XGpwqKfBnliYY;b{;9&pgxkX)98t>MGv{@h!ZLp z&~c}7;(`vMrW^Q zt;ur-@!D6@G<%P;rSTmM_u5mi@IJKWZ%2nE;3`5}Z7z*lJJxJ1ycOqA5S@7?(V5N3 z=yn8}L}xm+Q)?PV&)A|tV?nVC$@alvZl5;BT5t(xC*7;4IFD`UMQzWe88~5=>!&-1 zS#>`kIy}>GNr^UQWp823u2k$TYr#}cmZjVoCg10LGmdWuH z#!Zk4tAKzq@rv`eaVYTai#wer+-Y9%`)+Elanr0m%mYboTh+EDB$ z!jsYs-{imknb^~{ud-rHKqmW_{k$lYG2ENzqh6s4U){9ox1r#KYSK)DbaVY$3rf=9 zt+D3+ff-F)bt%_1an+e#l55dpJ&bbuF^$>|+(;hr7F9)muEcu-|Ig9y8PM+wa)|Y=g z3C2cul{}3SrED+UI+Um3rOWq1bN0inJ9r2Cafh35Yp)mNuX)Ew_j{_kk}hu=laVej z69h9~~O9|&C_E7&!2Nl`u&C&SVrXS=|pT-v( z8t~V~^LxhQ^B&&{%xX9W7F>S zgA592RI3iF>)#|Td2-n#ZRE-2wK}wheDk1R;%Mmy**g*IWBNfN)eHJTR%<`V-qU3W z%~MutM!csFo9Jup2bn1B2l)iC2RVb1pl6LW!?SDh;l(wZy_nzuk-L(|OZvuBlCdQw zZ;IG0TU^PK&5J}eE!Xcy(FnI(Pe%56_kr$_%jcbl{NI-+|BH%#5_*wAt(WD=edQay z4r4Ri^j&XDJ2YKi&8-AN{u+e*Y8=1Fc@^^4A>^xPZ0#oGk5?fdvliUJ+1hpeV(5mn ztZR*c->k;!jSzCGVFt#kh=01SQ%z&Fwcy(x7YGFW48~;|koF?rofe9rWavy?-+@vd z<^%EQE1rlq(!8&=@Uu$uzBKP!STkn|>?M%qO?lGXYrbym)j8ZAYOXKMjlGHi`!Cq5 z|6>1j!Y7S94;rvj%LsYS4sSr~EA1$@Q4{jKuvkt`o_k4W|6fh*4a@VQo!7sfPw$>o zpLs^QAz>u?n%Xy|Sk7xI_Wfcxg!KFwACn~g)%}hi$ibBOk651^wQf=W8Ox2NidRg2 z*5G(U|9C9Z%cLW487)LHdgh@-ZuBP|!NWj#tF;ovFl`Jg6*A)0nO3Mvo(&IbgQ>Ou}Y1B%#gBFAnZX<}G{)U;ocQ-aug2}??!n)8~QfWM_r? zwNjK&@;YvP$;0QRa8Oe)NZ~kKM_y&Tc>${C-K=tjq_Hfem z-5QEc(zW;mf~4!a)gwUCwRi-Ar0csi@{y!#@dpG+*LQ2+BT3id4G5C1@7B0SlCH%U z5F}mSt)2ic>H2Qt2w;ad?!2jT1G9c8`nB-_jPx7%Nx2{~=TAJF4FutrC`oUP=~BH& z)3EKvw@OTiuM9hO9K(!%PkaDhlp}r&O(?jt^Z{FW(VqPrQF(E9ipe`_Hx*{S zgCN7Fq$^#OeD#N^&jjJ~qA4x&QikfGexJ)r31{Cg;q0#`uzfY}NV{APL2^l#OMIz* zbJh`7{VD3E%B3Iq*+<71c#wYNXCFzI1!f7-kNoT-jn=8_2-1)I?4zv^C*yI%oZ70y7qR~I-nW;%%8@>7uR)%8t{ znGT}2{2Zivb$L@`CY*$HudZ%t%ybZ_2o^x`R?`L~| zwx7!4mQJlCG^mW9;a+umC=uRe5UzwfpOV$Y3T7AglBg71rPNZw`7_+!XaGd!D9R;K zypwcs&*QM%;{Lqs$>Lt9!#zVL>2DssW%7@3*hsR7aA9J4@Y-q@Nk~oLjlG)ZNHL-<3N{-HlB2UAeQ=-N;1# z%AKX|Mh5d&?ksgTGMK+|XQ{i9!TgmwYxIVgv=}z&bN>L=B{q&B~PpOL*#Q{(_w%!j(|fJZ^mU0~hBl*va3QJz>i~*5RHZxB3I) zexw6|Ju8kF4MaEVw_l@GS<)_ zN0O@y?|#kvN`F;}?tWDCvs@_qcBWBgybG~P@}kLq<{!O?qeUGQZPWWU33{Reih}7q z#147Z-coQWxq$Rn1%dGX3A_#i!H)x<&iQfYd9PF?4>9Dgi|QF9A|COc;-rrALp^9= z`W&W&xA*5~0=?{-*zDNVv8!Uv^H*P~ap8nCrWU-)rTRvPm%c}Q_(%CIoMh>A_T%UXLSM@o>XeC6W2cnX3m{#r;yk+ss}`VwJ{!yc%2 z5x8;Rkc!jC{})3lLgMI^=4hr5QWq4M7g7Pcmv9GK9rOvQkdzxHXq?_Bq++z0pw&UF zcSyy%ydut^)j^+-ia(i&{vj3X%|!o@il3T^{vj3jmr)q~at7dWTd*u}6Bv7p5fcXn=SM#)EhYqLK{y z0oZ{G;>T0SC|c^{_yYNz{FM1UZB#_}$BpAR&^r%sK$ie^!Zx5riKkc}#8bS(4&gNa zP&`E!?t{Qy`=EY{I733w)lKLD6nYH#zmV}8T&O*Zho#X`*6Iv*v(Wt=O zXO#qj#69SS1oEP?w!r;Gbu~eTKVm!xD*P$ieFKSiFveRr?Ik_Vo2D5Md4a@bS^G1Y z8Qv?Nc#Bkh%*GQFASm&~XF$8$hKVOGBZ^q#i3um%W^yA2h$k-oyZRq$JaLg#{~qtk z*xLifbG;*EI&eH!-#Bw&F&d{ys9N)<uCr+v+Z6!t{iCRF#&^*-iu&*B`*;q>xU#mJ z3{S!ppU#V-7JoZ5jE$Y{6GeT2nZd?R_lcsOWM;6j(|w|-hng8|>~xbH1z{2grU zbe|~d?PdlWJKZOW`cX53jh*fjMg4%8!NyMailVj}8q5rKcDi>YwcqzK-8+)n@B5hU z9ZBu?hf4R3r1twhrh7+H)AupmE0Wr*UvyQx>##EuKgLE{IzK8a%e8(~cBkni+Wb)h zG35~Dd)9cL*FE#8{CMig+u0SGK4qF=c^{Eq@wfkNe)kXdf1E%Kn;gIU>-`^p$kG>n zH;~_LEeTP7zuyf>e;ggi_}wNW<@5b+xq7u95D!-Tf58979er8uXh8p4jnLQsU;mo~ zbote)4@qp-2UV*!{WO&yHh0k0>d9w*5nhry6xbR$Sl@x2qM$bqYr8b;)l*`?jrYDMXiB3kNe5m^| zOQrb#x-mf&#F+=`Tdmb&`bN!s3su%#D;N!}L-Fza5!EnE4*Lqf68(31i>UXw8^F&< znfAlW)U~eBpay1>NHYVmWsB(Y9g$mqM_-Cde7`!iKLtjse^aW^Yg>w$ZsE5~TZ$b) z5nZB%UW{xrT`3egay4*9ZjsW!5=d}-g+`^2s>`htvm)3K(?v`d z7^izy9%#t0f`&koy+K1J6f|U_H)zO&8q`em1`U}|(2$AVpdk|q8d6xOH)zO&f`&}= z1`U}|(2$AVpdk|q8Zwas4H;C>kii^i$e@CT4CX*X1{E}9Fb5hksGuQ(Ik=la1q~TA zpdkYUb(#W0fQC|aVUm)Yp|u>q{V!pRmhf%`4`ZZuQl!n)ulO1hQu`PJ-Ah)zlB6KO zK;J%+sL=OmwH%j)zQ--my`CZG=x=}`}j%4QpMEU+42n>~-!C z3~(~^EWqL@Fn6V!-hN*K{Ns^9L6y6#-&gX8aVwjNzv=h=8jSaDI5-S*n|&cE3B;CW zPKr#h8l)(UjFd@|#3Lu&AY&W+F-iqm>n6m?PO`q)YOUKY#fZb(ypQmNdY}FLvX_a( z{4e=s&*x0_%g&KY4B(fo!pdWO0KY6Iv&;eA@SAPaIf3*5RHZ^Z51k9+AI7#!AoRseW*r_CMsGK!D>p@P16OmR?Q+ z1Xk8*@JaCrK;xf5Fz00@S&j4YBC4|>$%c0Y{}A5^6PU!7I09xOZ1WreCv$$D1K%cem7)b+di%F_2hl$@u*`d3Eq$c7@$4s#w_FjeyaGn0q??Wev{6htTpGM z4;v`(#zlU`i6l2o?NT9tQR_aUN!ikpZi@Ufm8E~)=Na??!7AImGDJ-zhR>eMFu#+( zZhlX@pWoP{{GkGa2!34GttqT(hhC<*IenUU0S9Wo%`>b9PdpS(E1f%>?X-1Xf?dH1 zPKNhr=hRo=@R5W&C$!}EwlwjS60QXHd9sX`st{bxpDJ*kF#u#t+I5;7pTiw9aj1EJ zkkymLL;66={woq>S>BB#w!4c%{u|RuuDk(#B|rGEc_l#0+G#b5El+16z?NsQ4Yph* zcVzoTDsE?t_jB4xJrk37|@UPYVe zjn3{Yz6^>=y$ZpXC0+e(0{&l1xSuigD#WgvDn;@6kO#z>G%??q^!x`nlQ_OO6(Y>C zbh{Q|;iM&A_p95lBQO75?VOXx3MJ+)fDR-6V#kTe~g;bUYEw!m= zK}+rZ{p(s}TWT-nbVXw?lqP5OlJ-6$v|%WGsm*E#{7j5#SP125j9MJ{nV8VRv`iSa zIPfzup_OTwFluq&XJSH2(=uVy;=s?ugx02I!X!eimp4$~MHI*kEl$gXN!|UanZN}z zL#xv=VN!PkKNAyLo|Xws-BmvmgIb%GK~3FNKNEvmoR+~{9Sa7vIxT~mx~qOB2DLmb zgPOXlekKOBJ}rZqx_c4>*&03-qm@I_M@DhiVw3ky@I1&yNHkv@m}^7u=A_du+HbK0 zj1&XVqe6>!Q;x{uuDFVBJ^M4KOWu2j$$OuCEqk)ue_(#c{fu8@zxKghsk>?XOqAWU zo>M=Q;;sYay-(v-TauJT*S^|YQ=!9z6ED6hD_q{o(KnBZU+Iz*IkqhLZ4z+nyw}nA z8djV{8t=D59X9xb)IW5H6ezbprzl)x+ekN&{B^ER5cz27ycWxv@xKiTrNDc)UA2& z-w0^wFuoB(OH0W|f|fP}^{~2#OIfOxCmG&36O)5^M@xhJ_?(H!1aT=#gZ%iMiOB?U zDN6%qZqCGHg1D5WL4LfUC5cO60$N%c^2h!1)4~Zbz>(kLm>RNERR32e}j9o}Y#dQuUb`5SxrFZ}%X){umw z*ei4m)^$j-5t&AvXZUhT@y*!kVcyqK(zvf+-(b{!|u$`hIsp-tJ0&Q$nyXJSBb zp8zNXB9PP7o6 zBdw-Sah*(AEK+8zn!;w%y%Ue!F#JkyT1}PmH}aeJl5$|0_kIt}LEItISvw`|AGQYo zs5J6y=t0{wjbCzUM#;$g*2;@H&p0_QwHgIgBM0F?eVY|qeQ7q`z)vx%;g1I{4(Z4# zU93!sk&lCZpD!46bSMita+ZOwXh+U6A(k@UW|^NJkMEuCMFNzx_&DeX_H+0f{W$59 zO{vhGxqh6veqxC*@v_p7^U?oT6O8y0($DSVEXh!iV03%Xp?9_fQ5pLZ{MNK_r76r3 z^y@xtTx-YYC!^4b;Aurp;nw08k#3%xcZr^NN-8rb=;qnE$>$rIc(8=Fen%J4*020{ zStSmSBmjz%JHVoM(*GU4xQxUY-c5D%={);^EjWsSa!d&FePUd!FY-Q^V#oPw3 zJ4hNbDZubrq2ejLx+%0W(1O?bR2-M+74c`#Jv*p#(M&Zk=?h4mi>DZUU(y5z?B}%2 zITmwprA_;}b1W}!Xk#o)Kb*EockE*U3EyRM1S4 z)X1lM&VPefm&|+u0cJ;z3AFrn=X#&+>6%H!Q2M14#T^f~t$2GcBparn4L(HgAwii< z+)!Sh+~^|mhfYc4y1tk`xwhsHokF%^pFX*hw102EKDlRc@x1%ZMwJPWfQi5o<(1|k zXxD*L<&HPzGva89_XHE*(bph2n?;h>?6SdZ%7wYRw8~rH_{L%mYbfHx`U0%5!vz)if=K=nZo1(74dhaXLKQnyW z$Na|j#<_=O(~nLqI;I)Z(# zJ%25^2HgeH?mQx+Dnr0T5Ahg~@ruMpX`yP5{P;xWvp*VR9a^QI&&b##j+0 zW`+ur^N5Y2WhXPnj4*NU$EYwlkJzZnyuJb|3}`IC46#v_(*8HEtpImGg~@ruMpfo@ z75F{R$qdEZ<`El3^H0t(-l~Vp3>7Bl5gS!0O&|T90;|moRVL>V8&#QWDNw_es4_VZ zPF*RDA5BMr>lj65&LcL8_Mwcb*Q$b1s!Yx!HmY)zjH=s;dL+lFGC7afsLIhYs(!0e z7y;+@y9rcUdFv0KHuziga`)y>l8j^;14qH1Ransu3)7=4=~6Bg*zW8nz&WIafEXlE zlav&dt^-kJ!BIJ8^3OOX2YLT**%Qe7*E-xYl|^K>$FlnrP9CIg9xXEi*GPzv&r*5kgq42QF3%iZav z-OEF<)fakk;lj>l@2f0ycZQn9K_i!IIXmvIQO~RP$3RF?emYeWmEt1e^(#XkNFLr5 ztAE8xxHgMA*U7ZZYC4nisrGF(%w{77#FTbt2Fsc^9;DSt;nbOCS;yT6%(6CVby7HW zrdig^m}Na)m$ej5ooSXeGiF)8uZv0wr_MCXni*przh-7w)-!`;-K&>r7t4BPu&jIa zGL^!qGlON_tCy)1PMsMn>ufJmDV#bpSkl>ErcyX{X0W8Qy-cNW>datCXM34S;nbPI zlFs%rmBOiXiZx5x?`6tJu9qoG8l9_5z@wH9`_gB>lyMxepR0pJ)^f9w%M#>(vPBM z9Y?krFYI%W#dg>!HRIywgZ?sR^{|FFz+W+%Q=zR1EYdLDRX5SwG!9>f|4D*b5dSxD z{})L$r~iwTxRIKo&VKJ4l#d&0{HzV6i(%dj#k^Gz->8)dPhW!o|N%2B-q?*xt|$R+7` z9@!X(_Xd`EfvHIS#H46Jf%mUlj~%~T{Vt{Nd9~~a-?8i8DzYAF8p;8-(|yCL=Gu#I zAnbPWs7zAR4YeA&Vxqrg*FRZAziEv(UUj_oB)O@M6L~zMt!0YqmNxS*dTi{f ztFN@3L-vA$^pUdNvp(fNP{$82jI=nmtl}1H%{TZXnY;C`qglD%D=0XAJot-nZRC_3 z_-(lvQTxL?9~;COdebSlNshk3xknz$e*|}NS6;4W?v z>6m6m4mo32EO|Yi`B!m=ZU*_GFxmTtB690vkHj}0~Y#9mG zV5sdWce&h^SHp+S=}Q#eul;E7(iabJ)30Wp?GbtBfj(%rH3gqwJyE$?eKP3Zz+1&d zSAd~V|3o3@@lwW?)Sk=-!0W|sFRvHhA)a|eZr#o_$%7=FeLtxIb3?Y5bIw+vt>Cgx7Gp7S&i58u2W7|!sSb`+*>*ZDW*CYd<?!6V3utdJ*ezWK+w&L1IhYN`~2y*K+i3-C7ueZ7>0Z zek*-Yj!*{w2B5$rbgaCUdJ8YNSm8qQI+}|k2W#4;_N3EM|H}KZ(E9L(NJs7LFzM)Li~UYcN-lWvaX4y0dOpjo_gP;@+P=|R%Zy^nh!Jy_bg+wQOWx(CvQ8xm3__g8)0 z1L+|fXy(pDU-v+IsPuAYqOW@(Jxp4;Gtt*QkS>x=?o9M`52R0!M(#}Xbq}P6OCNV8 z^4$aJ5z@w;!F=~XdZcu5XE5JAkRByX+!@Sw52Qy+4|fLh-2-V$TDUV9w9AkzhhJ%x zT-{5<38;ldrN`rum#zA9pxrDXKaK4l zbH`p}>eCAW6Mmq|MJh9`B<9>FSG&v|dn%hk%huZKO1N}y0!@WG2PV)IRjR372!Vc) zzas>i#QSJ9&Vr)|fyU^@nkCR%py7Z(e>(tyg4Zj7+V#gLWLXI%Stt-Q(F`-NP%851Q!Er_2r!$0g;J46pkkpgLx9-~ER>2o z3VqGYkd!n73#B5DL^qll0?cM$p;YA2=+Dgz0cJC>P%83>Q~);q4oOKfuuv*;RI05V z7{x-V$dTznjwQHk1{O+1j!rf8l2I%a06Lyq2~|tMGm3>$k)za)aRmy0%)mmy`yG%f zg+FElq{@VJ@LP(PhJbqG$|K!KT;gI&1El^T>k^k;XqDDBnv10CoiR0Ntnus$p(YT2 zR7oD{_jagYm*G)s%*Z2TJ zGFIaz(cyy*R}T_!84taw^Z=>EoF{}lo?zhuJ1MycjUd>bFoLZ{*7-k7D-r%mj#eg1 zT2NnFdEzXgmACE1SQ{n#PcrfpW! z@*?rm47QrS45ei+jeXXGEoqsEiIMDs4n%bU;yQBPyc{GrH!bJ_7jyhqLRFvKBCe_R7U%WO2E<$(O#m`&WXzC-zO^R znvxTh+6HN0QF%(2ipm0CRDOtE5tR$f?~s2ozkiRYq-hF{SEMAO5&`&j5>aWL_!bT6 z$iYd4T9P1mGSQI^i*Ad=s6Cw+T(OZ13@u_4%=@s=Zk8Wq zh391q3waC7j3Oyw0OA}nI;gdFzWScU96a+nJUZ&&(_pf^equR;FsE0G`VrCp=$p9^%>R4!&FA0grEl(FSBU6z;#>J0@-g%K zw~5HN4Cy~1L}c{MH^nlHfW{_i{-+U`#xmSVS7reZRt(%RC9nuZK!MIf+M9iFZfI zLTN3EbgQyO!QF{-7uWb`Y==w&px5FI^6(#%LG3Z>qfJ6PZ>#OuRxix{AEw zQ4Ff0lKVLF#;f#u@Yc^}US9NhavX0z5xjkQ+@M|cj#M}5ZyVQv(&G^pdHT? zJ|K&6Dq)zZ!Kg#L{4yKR(FEc1NB9JhxO5tbufe%}92zz^fn!N9!#xH~(< z7myB_-~hoFc%KZ02b}}4%$T~l@yMQCQ`RRRF?Fc76hR{oHeX>Ag-^YIlg}m(D`U2f^)bxk%?~J4 zawsEotU?61$=5Q?2ZS5ypJ2EX5K8#4vrhN(0U8e-K8*b}bEgB>?%q z4`DQ@1);^8F|kY}vWZCU1zHpuGoIgQ(m)f`*j$u*>kM-R5`5 ztLFD_3z2^Wv{*b|G_u}+#Urws1F6!7Ryy|xGlBi2#L$veo#o;xCB7(p_~Q5e!jr(l zh3QO%CE&}w^}K&&ko+dN%#UR{pL;Mkc{_vrp0-CPJNh=06?!V}97>thwDU)Ze5BKy za^6U~XEmk58{+OYA@XjLk=@*!(`_~V8CptaLhfV2Nu0&P&*4uU(;_`}j}rn|oVg?x zxu|6E!|BLdOU8?%V(KD`;JkRr@v;g6BA-7OABFRpANq{*I33=rj$^4S06e?*;}rTD zLs)gI9U(W^TKS)(!;?ZuDCD(gVBb*zBC&cr0FiQD4bgfEE4+$?o|d{!;SVO-G41@> zL|5l{p!*dAiWQ;;71$I>6NXQ=tt*s&8kt~zj8J0z|l3zcsYw|j_5j9QR-Dg$M|3)V}{Y8=$?w#k^ zgYl0W6g)FA;S7(vU(c84iO4f`BjcF~2`LlyKE^(x0dL<%Y!vsFQ0mN7$y6068eoP< zcMhc8u@6dA%bZx|#5zJE_c%Li?w7xU5Zl*zzX}2GQ2>anfVc~QEf#(*8QE{d1oCtK zlJThvF~63`B8yUfUl!Tz*ze*CJrgr6_FIiDq&=}Tc;3TvN_PxdWhdpWvMY&8kWv^; z%T7iqd$TaQ`l|qdR|!6P(L_5l9Q#QyQ&yVIN^6r!Ba-*%&S6Q-&n_v{HL%Cd3YkP! zvG$S6tMOMEkxWR1yIRR+LS(bm^y?3?o>7e=r(3Ij!Zxa&`_&MVsUW&&+viI>b* z3Zl;nNVrYx&5XhuoMBdjRNkliiPd=LL|Ldy3X>VBA+p~t-55m8+7V#EGC~nKFB#fO zkcajY8Ls_ASgxOclPB(?_(!^+t~#_4VQf3k%d3Rl?zifPap4>T5*9Hh>CW!q^;Pub zW$K3a$U>4Oozht5(YB0u(~|B*Ycs>*gkG+En;40hu#|oB7Up=}?ANzgtJB=sfi`05 z_-}|QSM^_cj#z;7J3t|xPY4UrAyqOTH?k;P^M&NbtFZ-xX=_*(#>pJtOrbS6L-8@e!pSNXa3E37do%hVg8QBPYg zc!sJY!qdB)9@dgO_Loji%Ns@EL#VRuv~NqqE*^DM9CwWg&n+)(D=*A{yr1c$iOwxA zYAY|wpIoDpCOEfzWLtTDaPDGvjfu@IFK#O@&YiX7I(Ll;%`G3>Rz5aw;xc#5MAkGx zuoK(LC+1Cj!d+tmbIVU{D?c@FVhqPla@S~FZuumca5n2lfPE-qc6OM)Qg1*M3q#=@ z;RCCSyv-7qD=Xa|Tq`yVQ9MYEROmfBvca}0_ov+1-Dy^P<7E(5GV?iqrS9srQny$Q z`&e&gr6wcqS*y}qHXV7#YK(nYT-&45$}l&jN?T-oZ=xquI?`e_te*tDxRK@UoyrNZ z@S#*>yU`XQpgBv%8P>oeFZVga<)iaBgNet7GhklO>zcJ4gyN5YHMIDA{Xakxl{K6R z_s_BhoGCNhLRbTy2w@E*-Z<4=q8|**8s;l&$Z=~S?l~z$95IeIIchbAxMNO%)vzw0 z?u&)vX9z^k(9;VGuylWpx({0olejY#K|7q*mc4wHtHwaxDm9OC38n6<3#_JZu(Cq! zO5soED14e;9BL-+sY+;D#Dq=YvQN;-%y`Kv40rk8ADW(aUuHDIZmP3+Nm_%&jf~jT$n(T7lR0KdXxvu@p-_UEDx9?f7s^%bN&GyPzetx z@_7K=sd7Aks5!#~;5!LSGk4^}Y{3UueX&SaxjXHCI020hl@r`+I66A-j3B7C880w4>`Xl;WNASkafoZtvXdKyk3t2%{~Ah)V%Ms79y zjA^r~laU^4)rSL4upIw2oFJK5jBMX*mmU;a*xo{^5prD`KE-UPJsH~J?f3oews+Sn z=tv|wKwTq~kteOj{aB&t%xtm%ZYK+1yIp!DDNz6i$qNZCMuvWPqxU1OA!kCH=FC%| zeK|9oiE`$SROyB^>RH1#IkR+=oVyj46xt}~ehoJOY;X>7WSGunvi_tF+TkUzp-R|L z6b0oX6qGcU`kBzbQB%=`sR}9&=5t$|Ncn2;FJFclR1Llm85yX-g03XtRJ|1xX|nxS zxKNq$9$U1gB$eE4LVeS`a6qAu)$lvzJPFj6z{Q#;ICD00oLk0!?;_X`>-o zMqON_Yt1O7PRM{8k&RZ)mW)4TOFkQ7D9eUmRxpzm z6!D%m0h7p`6jg-2Vz+J#R1vU9dWy9&{oIoY7|{vBh_=+V6BRG#vJhTC=#Gi9? z&TygWfj**hOKx);4HKFks3T_lGj5~dLDK_m#Ei$>M#F-p2g-;U54(+q15FQf5i<@0 znm);G%vVKP0|vBHw0BWO4$$KA4eI*cCaTE()gkYD%7DZlC|Zae?!l1qwGi9=Tz85z z(8e!LmQ}sbU)30PdHOOfsSd+M%&Nx52zU>S<1WUNnXmGH5&gNWhRfNvOS^^eMHdkj zWTSUTm8o<8wAf^2tR%cSw_ZHuB_yNA)_E_z$Q4=LY@hua z+gbRJfyrYyjNj8v=2yfskYMchf@<22^N%UBagjZk2xV;?YEzKdIhVijq5y})@l@4K zh`V=-jE>V?bVQ~!7AdtFUZMa6QO)xyS>wDAcU}X#7L&|A6K#$f8}$8A0G5cZSZ0tI zB!rs+C(p5(evW`fw|81hRT3YZ9h0fPB{%6T2*W2|79 zsqlJCPAR8VoWS5bNao~&nUK}=-W~}HKf^hhyo%lA2FWX$TGwoBv&fdZb+DL%Oehv9 zELr?hAIBiZKZ|3;;NaUuFLhp16*B2AGcd*uo{L1k4y;QWz>)^#dxj@H7clSE({s!_ z)T0JG^(&M0f?-JSx1K&2hL4kES)s8w?X1OV%iD{l-Gl)#W&>i-Ty5hG&QPoVFQ>_( z{VZ#JDf|gJ%k_`aI0vm!7H+d$zk$_E)U37g&S#Gw7d%5u#itd-fLSYuv3a-R3}}g1 zwt{59iCgoyw2x#kq7(9k+-Xgj(av~rK8AM7tF@Yb!L4L5jfdEgw=0;&y>gH45`$@+ zhnkag6Ugh?WbL(E^&1gJsmu){fnt!lZ`h^#q=Rh35k9|3@7{sYV@*!z_(`H| ziYUCJ#CG0A+q|m8rti5z{MLAOAah$4O)&pn93H<$KMt?P=2ODp|A@62_Zj>%F^5tj zIR;PbqfH5vEsSZl#Pn>(OBD-mjYSTWyCZ)I%SQ=OMe`oR;42H;$T;J_UW(>DhQn88 z8^iift%~M7hQ(KA`@$L}aIt%j;qjHlZI!(h&3g=!uN>P}*;~=P$8h<|Y*ScssZY4~ z7&c#dYFlL=MYD2}dyn$@N?+0B=x&~^ky>K6Z7|2|7$V1v*Zj_%avge+h&STV zfWHb`!%&j?1&NR_B5xhpE6MtOM7Qk?shw#xK7=C>3)E`Lu;G1^e>4wuHpID6{3u0> zMrY2AOf_khz)6}`NiwMQ$hkN8!!!&rS(Q^3jkMNHjh3Cen1&+FWXNswCh%lA|Gc4; zrBKR7tG?(Ip_I=UbRbiCnJBtKE~+I2`O@14Tbkp+3wsH(8*}4@qMVks6+zL zm~?utNc<3R^r&Jgifkt!>5y~zH|aM z(_0ftw!Bgp5vQA>lc7ctf=8l8>FeFmbR}oraD5R#J zB2+WUU6HQ{wb0>-j9P=bf1HO79aQr(<<^A48^C0SdocowlWr6~I#aBdCFdkFbFg{t zB*y0n!x?1beOU}360x#A25Yuf3Cw6^+{;dzWabF z8+)G)V+$uVX5W24){)h)T!$&>lhBBL_W>;#`{nv>%K0QTUf+E{3&zf^@1~efLZkKF z2ee#lWqmiFFQKve?gO&+YNyqAQ^+Twk^1ffnsfW%`fe)rBs5OneLxd#$)rdWyANnv zG@|tR;Pem^*)%^E{-a8*`7!sp5{3j5HApESDtaC2-7eB}7{*gJigpzpg<_wa9e-9< z3giZS%Kl{8myOddmkq0D$VvXdxam4@E5Y|<>%^?*o+CzAV}GS78o|FabJ?|939nF?)W16ppQ)(!Px{}>Ow5sU1q{g8w;wFFU3#)szT z*6x*N zfqqp&S z`EB?1;LFc@$0tW729IMn#zJ|RlW*{c^Ed{NGqLRC+~Zt>H^PrIb!QsB;g_MV7rt?y z$^H?(k#wHp35*X1_#c-`t9^J+{cCWJ=|Lj&=JESjaXV&$5uX>lhyLh>mA@ z2;+u{JgDPYCc?PkB27A;X@YMG2FBVkNA z$@$c&WlT8g~~vbOPtR0hIax% z(^=I060iCzCf9j9fhY2byTI4z!A8Kf+rOE<8Qx8p^nX= zXX24JYbQ~u%Gn&WR`g3v`<)d%SzlPl3lWN|(G_7T9nxkl>r(DdQ?vhMl)@w_&Aw8& zh*JbjXu6gS?~D9n=r)Hhwk|nKBy>6h;8?mV3FELDO0d#E7L(TRH)fH=KhX^sY9r

Ofp4^Tmt-rTvC)YYJ#hE@JzJo19oG{q;kD-5~ufF`5IYM|*L#DfpBf)Hgi%7lBD zp*AU&q1B=*OfnA>hTO<<7jokalgq<|p*O;#m>`v>!ld#rVF+%wPLRn{VKRB3L_=}S zIzb{&g-PUL!jRmLbporl!sPKVVQ5b5BCQi$VbXY*P@-F^?RzUs77v3;bzjg5(G@0% zhe0K~nOY#a!sPHUsC0LM)`zYzDLf1+;Z4@^&=n?whe4%0GI%PWytP7kn!!Vf31Syi zkYoQntJH_YTu(hdoYYx4UIe8TQ9l*Z!a+RfvHI8c3osdXpvC8jd}D*7 zmbLi$`1bINp|=x}J+-GpjjW_tP*lLwJ9%U%)Y!w++=1pmrWqyTO=6+A#j4t!L zvdcV)GU}V40^!cjYNqaIEVI@x1Pb#PJ9?=u_HK$h^j_@U`HS7}ZJ>+2o6NQBV)uI+ z=wk2AU+jKw16}Oh`HS7}ZJ>+2JAbi1l(*Qs^B4O=d5gU}f3ZK5x7fSMS<5c=hy2Cf zO+EDNVt>eA?A>InWf%KH{$lUOQ<7cm5BZC|n_}qM#r}}L*toFU%35!2`7<%K zJNV;akJjmt*K0o-!`DP{4I^bFb4`LIgZ{l8W|@ImbNky@Yae&-Bk*TG?4`i_EXy`u z=wP1VabJiUGzYRIzfQEd6p}}XqY@}jey`zIqBb;^WKKGAK%7wB;)IIfgc1mI8!R^E zY$@ITxac;i@S!9?i?b`{>^c0dyv>EUU8wpEju|9_S|BOJ=99yN_1N-yVQe)H@axbB zLWh!>p$eu5rs!0FG#>I@Po`3lk15u3LO&PTuOXVuL|Oq zi7C8^7iyNkn@{$FH{r0G4Z8WH;?II^4ps2ms&}|x4t5uy-5GB+9Rf>o|3f|E2Z@(s zFLQD%aUGA9s;R(nah^chV-`uH1#lAO%I4>@$aH%)O(D3A#WsCm7oNv5ZL*X6v0+R zvGK@7fY_Odk&{JDZ=teRGo}y<&Z05YBAwZUzMeNF^-R^*`;1+BAW3P8hD#XDp;^h$CVk9Yyt(m2c(q(b@v9=i zuP*BqVDvS*i8wYy1!;foXV&?~gy`$7*|rBFO~5?a8oh8FNpSz-HEe0oH_4TxlI zfXh7hq{J5u9vI2OrPm6CWn6m5-<(Tthr0B-+>zh@e+$V9LX0Gcv=^LJ9>7_%5aDt6 zN~CrH{mgx_{T0M^-2H)w?NVA$zjF9pRZ<1$kT|%*yC{w2R$28&&`zJf5N2#OeN@y_ zGR{?EcOkK>O%|Q6o=OMIYSdF=QMhoPdMdf*)h2ZxR!SDW-X zCi2u%>3&&lvgc@1lqa#fkl58Gd5(!ZiQR?7t~R-IOyo&y$uh4tsdG&D61xkDU2QVw z81yB!lev^n1( z+^d3oL!1C)fE2HQ+6YFmob(6PGIK&YO|35&%jZIvkJT!lFMmz=d<0hbtipyLS#(_L126*m?c1E5%j*4(zJk`%j=qqa$x9>TCiLWDCo@WNf{_G3zwylYcw~$b96Y`+I8KZU zS`|zfxJo6*D5~L%i5tiY(b4Tq2bC6)Bx-{9&%E&5+mH~Mk8(S_k5uG9?fg{ffgGQg z_p!@=AMQ+mvyHrw(UGD6X%gUUCSqfwSiYlg@F#rWtZfOFZ&BIk0BLIXTrQP;Aq~X6 z=?h6lo|6{>cs5)lFE3Yia+s4b;xah-n z#=^j{BU@?-U)b%PCYs_7@9VocjJoww90&Y9$~!tEhsL!j;%UnpIwKE_Yx5CLMF-9Z z-chr+?LS^&|_1)@7THg1)_5R0t0no5Kv1JGp=gJt~?gJl6?uriM&OMj_l0b;N+k0lFY zuq;3fR_3u}K@64!h{4J{mV5-3yv!g533o*vOFjZiUS<#jCh}PF5mwAHgBUQ8$C8i0 zl9w68fQdZBV3|P-7|cTqmKnr=!92uZnL!K~%tH*88N`6WJj7s`K@1oSSn@Jh@`|hx z1$Zu5^Th1KVaEf?Md81dA?40d)nPR4O1*&i5JVtk`p)X5uTg~ z?M_5mg(q)D@Bbj43?|hUUv1%P2zftx349GNLXZ5j-@Eit7`w^v$N2?qgg0o36F9v0 zwI|G>`{dA9ypKU>$@;fce12RHkY1Sz;5TWd3X5LKL{tZSyNwC{eOy`IRmzw1SGjW z(y9{pK#Vz*sB)ZFZH(dkcl-L`+J&CvQhYVgS_4AyKrrp(X zDNXn;#S0h4GruT^q6%i#N<|kt^Pptag4+~}elaN?>bMwgwA^-1ElD|>ti~UU#U`cj zR`o4~cMrC0=F-ylNUsgI;xo1?cLbI2e#KNQb7x_%DZdilm&{zz@3aiwW1zML*~2Qx z(XA_rLuN(Pe)_!yieZ#D$F&*#xW$ARKnX7q1~aXxOR!u%miYj;^7Sm zf@>-d(v{OWACq6|;JwEYkMx~y9#nsHkaK?RIQv@~)N_f`MF@eun^tG2ohd9?(Tzo& zUki_VAVvCS<)N3Hl9y>~JB1~&-^$_okDMKQTz37kA9h=_oY?u1z@CdsgB#jD?UbUC zB0+Z1I#<3bK*1eD=s`v>X=?CD0&l1n)L~L>{W5w}f`(*ev>Zd;%QvU(h1K+ZK7X77 zz4iC8vEnEni~Q_`Y*Rc@3xw1k9Z4Ll)(6SuSD)#pRa~P5S z>-gyLlCimH5otj@6&O*1{LUN9v}Er_**SZt?D#=$7qFdh&blw@9OGD%XZ>lNmk>Yg zFM@mGNj|Iszg5z{a#NwVlg{4GHCmt3hpP%pBpoEGB_$4byt(uk+^z8RGsyu4DWXQ4 zmOzU+4=TCVKe;fk+@+y&^I7ViXYrmH+RX={+@Kune*{yulbxZAS!;&!CTz)rV^#Ul z!h9I{ETgvkTD*lMeevq$gN)@R<50f!yc#BCbgF!i#j-;@58IRfjcq<1u3@E&j&LAa{MY5HqIK;&;r9AmT>LV@7H%S`91AjKJbX z&0|IjF8&jLLvV4U=P|04HLhk=+qWQnMB%~DD>C{g8fS>uH}PAf^8dTvlA)7JRH z5?S|Oeb~sOTPI83Tv_K^%6wA|ugWFSP|z-#2Q1bNWL#Lm_XkZ?a@IK1B+J$_uJW}{1kGgWBch=xl~ zl7QX=lBgP$3ssqBOUIG#_`M|{e>HDYSR1=!hutmqyB~UCJ6{3u_LDBAW*ZUBR}HZ9$lF3}=R9KX zwQ>qNd%%;t5_VWe?pLI#d~EgDk|5^xxJf?v9Dl~WTWqwLVzJU%#`?u}t{O(&i3Jgb z|69H>k0~NNO3evYJD-T~B#pgQQw9TuAw+Q0&-6mn`q`c^e1E;Mo0M$nx_lNzkXAMzk> zlh}*2@(X&i_;ZfViOt7c(3!;~L)_*znHa+vL0=X#{u#H)#2C&9y0Vz@nAm9&ImfPm~oOVW=wLMG{&&P1mS*gvc=~^ezFC%$$hZC#TuEk4rXw4yRSURoiZrmsZzAX@_f~~E$8h^#fsZ2Q`6~tnZXH~jAO-Za1 zgVRkk)nzbn{tmDP|-)QN&^QDA3(60 z@~9e8VUQE#iUCO8XYp~)0D|>3Gb4WHK7tjGshl%_VEwt789=ap)6Db}thJO!JE|W-ttr;BMGQ5{SC|av+)l9 zlaILZACRZN!q&?2w-1u1-p}ATzL3ny$Md0>Je65kt6)V{FyI*?>D6ZN#uEY$yZ3IC zEAaa)TB5WVBcW@f$+{3GpwS>#AiAaBlLTbirF)Z+TSoR}0rd!p0xcnR7u2gsbE?@?wB`i_@C#vCAXMs+^Go$~jf@OTLtG6%?@0eNoJlY1BFT;BUgmV<0WXx%rhlmD7?%}LF(}mRAuIwQb_d6oB^%J zOVE{>V^~4a*$hMM@e-6}<``C3^iqbQ_IL@}GII=mNbOpv}aL$qKbq!8#bUctIMd6mv0ZM^4Tt6K6!V{of;y>_NN(l`Oo$|o( z=r2^{&4PB3w$1_XY|%KxN;F2Hs7c;< z0gXDW-3X`Pfp-p4gGbak>1!B;5m2h9cNGL_(yIB#Q+TDc4k7HrZ#P&)8k*rXTRNjz zzygeQY*GwXhpbsbCZ>sv>#i{Qip_WlWIuC8LJFl!WZS618&emKMHMDwWIF%X`Kqw^ zg;f<^$ALx_t~07|wswL9V>Z0Uad>r;q4$g`JguberqF()3jZ;u3g0OFAe#gv3NakA z0kTP<>c3Zu}-ffj)dhL-o;zM>>7=VJU=gZ|~&e zSwRs5)jNHCxY6jtvw|83{+#N=jYc1y6_h|Q`f4`$cvesW!Hj2tb#W0RYA+@r7bMp6G==ODRm9I1~WweG>I+d?9Fr`|1`E{Bs5DZ)KN)=dRaV@@UE};9?4#eh2g*>*_*Wp z4>KOgJjODcKSatpUZ}4^{D+oIr>8dx%cz!EdzyLD@^ zswA*ve7tOe#BXfCtlHptCdNgN@fMjEqgV2NMm<*i)<@yOBCV>tb*PEvyGb-Df8J_3 z$dFe6M`Ou!%lc{ee#{U|(OmF$uECDEU;$S*ew)};NoW7nSDJ2RPfZ1G%#~IBl{K=I`2wnx#wxXY=^1kv7zIE&r>nk`EH4LdXi2f^ium4lV~tQF2BE^;0yQ_Cr@F(<{GQ{CAcAs!i!e?$||wV zhn&YzV(iOsl?+T{Kz8QK&iVdMwbf99Dz<9-qi}!JVU&3hbKPloDbAVdcarXnR3yIf z07jp%Z6Jjz98K(YrJXG@GLc|nZHH8Z3`7N{#@I70dkf(;R>MlUSmbcZEg6$?$5NT# zmvY0AktNp3pRjevx-|;^@LJL>A7qUQ5t(}~zUz9NFyVvZB`{i*UEedzYLsj;l|VBP zxzy@9+-_&Ss}KGK`%|ato3K_rBy%gCl=qb9ZA)Q}*4Kf)J%$6Y06bb2kF{<#0Pgl= zaCQ&ZeXYSDq>6Oe?AVVoJ(+@mv(@7-=<%Zer6)96?J|Sdt^G zrZzK1uPnX|lCm|l>Gl$3x)OC7GILxe5maaUf4as*{O&b|c zSnJ@2&%~B@AFq9tq8`c6W^3gynCNvsO`-_!e4Kk?0`rI8D?*9YSCz=st{5a+gJf&4 zYz-!X;nz`nLG7>S^E$!t`F1=+f|XHdHD17#?v|JgT+)^NowQ42wuwkzITgDl6(LmN zNi@2ov<-Fsm<+!oX453@O&pJ9q$aRHaKfhCD~gF%BVxYT`UXXB`1@a=0AFN#%=$)a zqUbrR;iu>fc0DjE%j^NR@yjF+?;%fz#-`U>sSCN9)$~Iq(xO?+tqZ@L}2^@2R)$kp2%m|Jd5gel%a?Eg!8D9I({GE}^lc{g+MK@%A z1oIC;nH!Bii+Cj# zYbv}W9on2I-6U;4IeTj9d&!o!3I)F`JQs}@hBT%Ss@%ZJ`(vFa72c;xsZ_!zQzes# zB(>|`*iTi0WaxmfiiY=*5VDRt%Mp!M!>hanL#JpB)4|^Y{7?7~L@U%Z9ojq)Up?da z;=SJEoNkWqJ-=1vYxa8I)5}w~lzM8Slub%PY1~B1zQJ&-cR@(8WK5lOZr_Pd6R}F9 z)xpL48pJ4 zDw*iG_A_*i&DHl1d6!;b0-iz#uD&wue&!u}!KT!L?Z`Zl6O_P8h9ud3$Shc8FUcpY z-blWxRAe`Swyz|u$}QlIa`dM-THX}vTykIn(RUWZvQsU`d{TEBN|tjWt6?_+Br6Jk zz>tc)1AJ8k;_V2;8ie6ZNI%vZgGfTe;B)>OtU(M)@J%2F+XFF};X;T(TFZ{H8XuFZ z0tC_4@)vBX45T>&RfP5;0|_!NP7x7<3WD%Rg|{0y_>5cu>b4qHE{G*IG+z$NYsiy> zYm6L}cb6vzgY~EK@JqlZsj?|IjlBkIAH{C& zdrEnktXxDlhLc)}Nukc(eqamf+V-aL?tY^z+f9a`-20B?CWa8!`bgIu)MRpWglSNXS$ zLx>b|ZHX@LIbQo3O_J@Q&;rK#5hfn$G7BQ9Kl}2z^>BcOartlzeUc zwTi`R#NuWsU6z(jD4Py9V5j^Q)k#k7JGNfWD+c~M2 z6b5PZ;7gcLsd%XzohKE!9#V0t)$na2Jya?t-GwR;nG}IojX=EJOsha-T4kY3BMYmM zh1Z&Cm4!^J7?f$mU^Qa!A~UUGkZF~GGK~bRMgnS_j9a4;kZBcuGL7)7M)(OB%ss2{ zV_M~&Oe6QIk$W$jX_b3StH_gSL|!!_uh~qi$YWZiolGO`s*!g8YNl1%F|C45rV(`2 z2)dPKS_K``D&u4t8CN~L_DkHB$~dM}yvY>et$IXliYXOuOsQm(DI{C<$l6k-RI)Lp zLQSR+YSp6_k7o+lf1%1V8AhH}8+leHe9jJpS}V4uUTnmdb9J$Iiwdvha$S*MU(SqST@=cOF}lh(?gvoB)o)GLl1cRG+_56J+^ zf<55#BDX6<;TV~BEeCXbiHrLDC+LrzTJYM{S0+Q~9yE`9 zYoWEy5`lEf*LsOKg|$Um6|Vy9xOK=pre$}M>|F2fOqHE4`a4mp;TZgwu2|w~KyIZ< z-k>TT>B1%Nq}}UEkWxfSF@^NPu;?62-UxPq6u3oTfwsn+=dG2Z=brglByaIN9iwXoy7Af}a7%BQHkOG6w4EXtB_<5yr(dC>i_W(a% zc-#(o(dEaE*S_89=sH&u^ppHax%E`!C97$s@Hgb_8Rk5ZEWi|cT~m|rEqySaktfZ2 zJnt<2TF(ERxxjWvX}X=;S*9zEINi}?^3E>y{zIh3g~X>?P1ni85_6Zj5F32uFxiW= zS&eHrf-rcTa5crm!zRN|rVHW3HjG;05}6UpbqF)KSr@{DZFscDXJBRs zGeemHE?o%!wPDZleVM^h?it1mF4l#xUK`FVaf!?jX4yk=Q`AnlGczz{u^*V>%k-SU z3|Q$x7_QCptS~btFf*JPpwfl#TKk0Bf8uy~^bw5WUR?;AwTIVU&FBb5M>2|cbs-$q z9#MNKqazs|#VF3zg)mopWNnzyQH=6t;lJ=+Mn^3^iP6!FDBERZGS0|UFh-~8fE@6*|NYuzWJtIx64-9&WZEnMZM zLHrKlcQC($%QH7O6r+$dOr@Vx<`WRFb4#IDt*q4W-`L}dlVtnjp-gd=tB=zGM1Ye0 z0Xa23EcYIHr}lOU#trWhNCv1kPY=DD&t>-xeHPq=roCzUu7v3zc7PCJ*56rAtNF6Y z*WX0(ym>U=UkV#Oy?CFU!7?FaG28<3W`{O=zvM65&QqO@^cF#3>$ov>?6{IHT)Pfh zUEUo!xw-z8L1d46Ut%AwoFsRw9NO!6kz=`woW5%Cw#^1_>lVDNB}pX!V|xf^eW9@z zOKvF1vpO(2_8YwIDUK4^21FKpMU4&Fn*C4VCPr+*tvdHP&jBhw#xXRBwZ3 zogl0WGqe5(JWtWAS$q{)F3Ns^v5IrwLl5kWYw7cOVrkx;qFQ>r;u&(j8ZlMwt{;qZvt?ymA4~>R-1mrhJbsMtR@97eNXP`W*-&~8B`7hmgxc;a{5wdBv8 z{{{$VHH_yPdG8CFkU!RWkIx_ehCROn!$S13wDY>Ymt<&*wK6SKlK&l>%6JHUuUIvw zBvzj)IN)4xKx*pA7C7K_iUZCC2fR*j!0UcpB{*O;ak25tDYASbUV>Kx4p_joa_SvL$FN`o^<3>e{cT;y;KrP(MBNInZw z*ga-yL~RvQ#H`K5?m0S&DeN9IHL~_RrYO`l7rW=Ez_r*tW@^;pQ<$RE<6K2?gJGm_ zTo{U2IPh5Po;|7XOX<+FM9}BiJ%^-M^DZSTS?_RS!S#r^Ml63ya6QU*h~2}Y61zu@ zBwPMQQHpYs2HZn$q*nMetKs`-@vP20)@4BC*Hk~sj*`| z$u&A2xsyfnsiPJ@su^Lngt7j_&F(<_`cn7YYG+BJ? z$X}swvXe%<-aHQJbhCg(;(AEacul&m;+{^@fry*LSO*nKh2N9jL{mist=!3hI9fYC z$@dcYm*_V+PJG&4nD2`Q1P2AUe#xp|z_Gtooi8g#t##zChPvrfQad!doT99Ir@Lo` zlaaqzP3Os#-NI5j4p>c7WQSYB-Wkni(!Cw~tjlVWhYIjUI|E%mg`fwGcG9#C`b*7Q z@@Y4=?P2v6ibJvX`#0s5no7E(cr@SqUdT?3)ZSbD-ZCFiju`E?FX`GA(CG{mF zMMd70xtndUbsarY%qVu{G(ADw=1*nq%3^~P%86IwKI6W;Q5@#$@z9sG>UUiI|0C~Q zz@x6NML$Ufh)I}$n-x)!TZvrH9e{1jmypn;^d(Qpt{k}Wj zm#mq!pa1<|d%gDBduxxk^dare}M+sIOGBxyr&25T;=J4Nm8zr-L6O zBRW~J_s9Xn#B!(znK1w9dwcFkUZYpFS{XE9N3NuotZkPe!Gf|UCE|y{{;xR)^{9v` z>ylZFSEV3xmEV~e{2nbD`3x2)2OVdAlCdi(F7H|1E7jAB_S z$4Xh!mNT`>+WIiZR4Ttp8MM7VdCOu*TZ|(T47W-dl)XM>%VG#yPU|MY@T!zS*Xzw& z7DLt&mrjD=R4Ie1*N@t=7@|I)6AYh988p3q^p?et^q+Nt;ZiAsqSuevvKWH?rA{zB zDrL~~`qV9pA?JWjfcJ?*r3`9bf5w)@slFB(Hhd{%(DC}TEsM|aRe&^HDP>Uc`t&V} z(|pAs4NpoLG`v1z%i?rjK1jonQU(RDAG>97hHoNB!;ex1{jRrcSvle{@ky2RPk8@vFUh_+B~bM{*wo{?FwWyYDJ!?}pU{5ZH=8iC>ahk_q# z-Ougc8~jm3b6ZHi`rf6RiVytB#?$>7dNc*!oW)A4Yg5Q~HXi8IzE8=5PDW749-cR^ zi~sNq7Ynib2oLAmzC!6XljWK$bkUts2j4R#ca$G-6hVlDjq65#Mgr@`q0F6`AgrFF zfjcbt927R1U;Hm_e@GvA@hL8G{|kPud)kHe*h4W-M@d%Pny*ONysjeIjD4oe+>U10 z*n7U^ENpxHCFt%i;U#kWujC??zIx)hHg#>Zax?^L{5UrqFQUT|J0#V_i116;X@Cfq z7Gp%X^dH@1hzGLXaTz*=r=u{nNDfzfn1>gI^G`n52$H>HOi|8XB2J#2U`3$jqTq(r zQ+Hr|va4bjgfHcOsd8{qfKoSIZHHN)Zl5S>D|-lRo1PFGKsk>BMpZUR-%dKQF1!Va zVtEuugd$e}d$?2es{_K2*BCl&ftU`ER3COFimk_g$dl8<^ib`UjnHbXJdS9!gmXo- z+WFu_t7TPkCSOlOtCh%Hm<;RGOZn!OsN$(82kzULg>-zgoKK!Wt9=}F5k`)`TNK(@ zHP)n9^T(p!dX*bM)ZLkV*Fv|V(9RT%1g(}-L#u^edGF9b-+vsCS8x4664M}%%0>$?#L9hF>&inYkD3p}>B;D$%?b2mHIhnC zW_o;W=pr+5<1hm z`C96A=Ra=U{HoGvy?By7S{T@Hd8PzqvhH4{Dn?P*MHsCp!}e4*9sHxpyb+-iLQB{r zzp$SQM24{lWxYe)r6X+U07)olvvG?i6$KWd0ME3xS3xi!zf17}oJWgL61*tDEocd{ zt5uRv6S&_sun2+RMFDO>Pmt64B?(1g0H@I+6a_B|a0{BkI3o#FVE~8GB2)!03UCX$ zg4mx@3T0scXVD^*1uqJ43);f#MiT160FI(Xs0&^c;1=|SJw_4=!vIdAMG&bM1-J!` z;Q=EF1~PzyXb~!d7X`Ql1z3~`X$!?+0O!ym6bCN~aLXCKb%I897{DpC2-U%h0^E}3 zTPbLihXEWyi%=fCD8Mc0K9`_T9|mv+Ekb?pq5!wB{w-(}hygr4i%=lED8McFfdp*< zg$m(C0dBEG^aWSWGn~ML=k6KV#I?qg^a;AJ_zqmIB#t2Y*qrx-C+WSYyn*|gnQ2Vo zGaVT4Y*7;}7(Wmzy|Np?qA$YDL=@-;sEX{QC?( zr8HtprM_n`6F$Ya2wi%Ew<(QQ_=}+rFG5ua?&e=)o}EG;o*&hRITv?~p%b@L8ZAS# z2kY%2h}}atdfRzQBW_?h(8YqwNA8?2J^4?10t?05W0jgm+?d2kdqVb(R4xS!L13EJ zzu=qOzst?pD69k!18jA()_A*|#-rr!r!>K(O+=?sxtwBwzf_2tuo~>W0oEGpA@_xl zySPfls3Qe)Z-BL)dZ>LN)ZPHK%T{etu=WO6Yvc}2ZkQwmVwbJjq+sj~u+~@)tuKVu z8=&>KbPBfK0Beo)korPMy#Z41(J7dE1FSXHL+J~l^adzhwrW!wmfiqkTMwZxgwPux z^ldr?LvH}pxSm(O5IS#2^=%|SHr@d1jP;QCLP)&f3?HlX^_X}AtTWa_;R~VghBV(2 zuvmBltTWa_;0qz}hIHQ?uo!p)tTWa_-wUDdh78}gz+&GGu+CTyc`t;#8^$(ef<-~D zhq@O+-3=B`4o405xz@%Exu?!*lh3Vw&*5>qEg}o<^QS=Gp7f`E2Or*DHsJ<9fChndNrrLbO*~3V|_oOSH`$${dFkL z<>~3THC|~IhKg#<;ui|oxQRuZLg;E4*7o0;MXHo!x@KocTzJkv5itct{-ZFB3{S@# zmOa06`z`)g(CzzDZWoPZqs3M6yxV_umM7^L0A2R6usdpwvBtFU3@RPrjtbjXZZ5u1 z`s`;)=ohBCHqkM>QpBu+;ec~D2bB1~5H0mkH8VcvC`(dRjJwij*@a}RZps-`qn;s$ zE9qIOf@Auyx8I8>!FxywE5DL8{9CBQ+P)@LR5glmX6;)juSNd7sIDIPHj>>ZvR?dA z0sC>cf4^IHjj)(1`3)7;CE7zPHPNsAeJ)-H5`s&>AKoq3k#Z1_JO6e6vpEsalXEa1FU9eQZvz)(3PJl#a-kA_NYSL&zAXcz)Yx0pH&Lkex&q?~-<16T z{ybSkBJOdCdU?cxdi?LYavpc(e54$(E{<|k+Z&;<2^$3N$r2*Yk6iqQ+h zzA2n&c<6i+;n^)jHhSUNvN>OsG<*@rZ=*^uJa)c`@bi{*64HECD#7sC`6j~BTQW!>Zcil` zUOV4JxO&T25;A<3sRYAs=bH#)Z?TYo-l7ul+~F7jX$8sZRV%&Xg`rG(a*)V4?fg%= zF2#y*rSPJXf_WbnG3Aqiy22%SL{x|#-dFpwGL!E74`FZ>B(eD{v#4Vu20reJ z4fuPLu%|)!H)aJp$<*oQuulJ1{wHBc{=f81)#ZP%nxtU8q_-Vq3VqB2$}DpSB(iFk z^^P3o3Om!3{+~;y;J)H_ZzT2Q<|ArS`g@p@G8ys9F){UQ^ym3%#bgZ6z&l!nDXYmj zTjmWHVycSraE@YOeP+Gm1!-E);`(RL!sfT-(IgWirrOUG&aaC}eDcfq{r^lJ(P+!BXx>%oW6%WO;FvwzW$uSP*4unpk5U=1Jqjw9(J>U^0e%<`8fC) z5+f?F#E$Z_h1SdCFE%`#_RQc_sutd}D5A?fgw$M$9K@EoQJGBzth2y$+<{vMnqR}u zsdc@(P{dsMuUOkcF}j`$r*F6Z~onp%`ywo z^*EMm0yV3k;19yOp4=q#63DKHC(7H^5s^>kdB=z8pQ z3ADuMdJ@_}8Q28-Ti_7XrgXh@(f8!av6iU5M_ifcdvfVmOH|(@u1vJQmWaLw-4t<7g&gyQSM+sM4z2S!^Ilc@ zp4y{|L-Z`s_gJ;VUcugBjoK|vZu6B|-x~<)d#i=cWAr&!{_9$wdr9d~t&9XiF;iA* z9+r2?vdqIRyh7Gs9&VAfn3RqUxI`-+dPuTz!82Fo<@Ed4n}a`O`f2_$vVP`~oIi&W z0J}Kmj@h4*5wkzV(_zlVcF$u5cB6kiBl_2XD~H34(Z70v2uV~xbO|*Niu_MoH+@W- z^0+Kn`QPyPGbZ-6d`k?g4B}YLIWkRx`7*~vYkRL#_#S@R6ouInd>4Jt+5S#bZr*c- z!*YKxJCZy2qD&lBFnF{2NzQ+HJ)z*w&`$e)O=B_Z+s;i-_%3xK@e;wx{J9(J9i(2zi@hv3J~MqHqz*>wyx2)i#JqFXt2E>2c@0ln<(x zJXz!syv@4xRrvR9$J6i#TYs=0Z7_UJ?N2h;PWy^|C&}Ex!?CEUP+(ljDyRRp(Ub=x zOT`d${>q=aIym{5m9R|NNj`SxN|82l&R<}@oNapfY7oRx?E2treod+7 z7rUFxi`jaO?ETbPePfbTLfWK&q_I2whd_3#pZ!N#GTGJXiidN=Pv@vUU-EjALaQA9 zwd`;I%+Zl6IUV^|a#-8frJ){&oDBK+qQK;9IYO~0XV5_m!LGx^JilrE!}oZASJv%R zenED`5Si%8d0wAgddNcQz;{3C9!&sZNcJ{ZH(#91vjjSZpIq7_N0o9+DayJF?ST{4 z{4YK#2bmHb?2?1OIAzUcowu9deq2?TP_IM@f9rg{u#$yhoz$JgtlDpF7e6mJxVSyJ z+n&Vy{i8lj;S!wy6St>y+mj_hpQUi7PJoBo&E57CNzf-L9Ho7#f`!{hb=%F7pwCfw zLnpw&?W4Qxqa;C}qR_1qVBq#K-FD7X4g67`TlyQF0ROh9cH75DfZ~Vej6l=+n(NSPZMPLywV}~wmqZUo-RmrTxkJ0VcYhx z-S!MYs?$m@1<7dIE#3C9f>eiF2-%Oj?Nn z7VV#B_>r9QUc_uVSDCs@4mSZMWUG{ELKfqYHGT^5^{n6-G2!#RV9 zI=@tGty(^KI1<>C z^r4>Na#(Mc^#}dDyYMuBh$)}+$|ECZx!v!No8^1RXv}i)qh)f2fSTmbU$2Ja@(!Re zu{#A7p4j&4jgeXX2c7rAKTF<^&$g>s{Rm`iI()IA_f^l5Xe=F%sHywQ$U>hueTbggE{hbL z;>;ysNgNj-$Kb&Y?cGjOlpoIdR)ing6~n`RhsN0aBOXK|Jf%C++;tb~}T?Cfi zF@b{kI;`#AR_yC2t^g+|(m4$_SgNu3>YW@&=Tz)Y^TAm<1y{Y3cqW^@VtTD5n_151$;t53z1hDl_$g&iG)7yTV+uOcWj`Bg%U?2|tu0bA%s` z;?zXphv9ku6dW$$yl0O8DVYkRQ~!4|^_lldnPIkPtJy9J&HGo=aNxU2m-z|b-Ts5d zteutrk-FhytJW;ns&(b(d4j&=4QSod$z zLY64`VU`e9cg~;|G&FsF6syEq;klVX8KLmRO!c>1ocA|ksz;`|kK$^YPtW8_+fj6# zlBDi2NZ%fgZ#O16xa96a-fo~x&+%^=bDV^f?!shA&{JFvm82GQof30*VTvT^8U8sV zMgqD{$*Ar^vn1#V{;Ezu*C`p@T{ub-^!(nf6JUBJW4a4ROM;%>|Ed$v6G~FM3&%); zp52`~0bQr$jPAlzNl?1ZcWD@1rzEYr@C-q!dA$lGx=u-YcVU_!)wEs=5?!Yxqq{I& zkZM+QitJHzoszNLg&BfWllo$is5K>)?!vKxRJzVtAXutsQ@T!}=sLU_f~?TsQ;8qc z^BJ3z8IBTD6zCK^huf3YgjTcOm9$T*IVwlIn)BvTD47Ybr}NwVlIeVDse+>}1Jd5e z`Mi$^PBotk38i?!&~KQ}h?Us+e5juVJi3a8z0a7>MM?O3dYek+w4bA^xDMwl&VzwG z99syWM}ywq_w_8Cv;lM0rRIqQ!nopML5%qiIio&@24B|v# z+q1SF2yem%`GLfBuFKM?T=4qvb)lKdIm#ijK7_VGEZrw<1Kj8<>p}kgyWVF{ z>zs*l!NIfYegn1P7)wmz*PoR`U3mlcKZ)iVy&q1!3s0c-m@BZ6>ke*YV^R%EUU)h< zyB+;JcpKAyRi_-YC}+2`mW@BlZo;GQ=Nv6AJ@80CINsO+YulA#Q*?NTh*ss0RXJ?+ zd6DNF4|SLF53@WJK^6tfcR7)}e%xlyVV~T#TO_lDVEa*!@jc{Ew{F_VS9M-2UPVG_ zcjJU(XZCaW!dCguw6=YPk>>9BHuuvOkoo~fzI%v=+2j?nBO=2c_%`Qc;zxdwd_^5g zSbHqUD9Y>g$9b=F z!WSTLjO%eBhRykBawO!VA~xOl1+BjwA}k{ZKFKYoZ@`H-u}K(bpq8$Qn&LkO@v}n_ zgM#%rF&sIPIE$H*r7o6IyDICuu$8PsyOh3%X7N`f!PAI}UJ*u|D%kDX^)BbTLf9{y za1iN{6FJ|NlVmvGm6M@PSkKzW?d?uZa0$%#H@|W10$u3lwr3X7%2-#$%?=C zz(|=)%CMUcj1;7Jv5nN&yANLEJ$xx=cjK^28t{L$>wQ8axc11M{+^(+0wW~XAJ^nAa zevuu2$Bq4ZcJ}MJ=^-~M+O6|mbI9t>I?6g_V0T!UyHN> z&zdHulL=m~x&2qI2;+crr;#ku}(%u-Zlzc#+5&F1JW9LC>_+)X?^dX_54^k&v z4@$#Fi<72L2@U8p_8ydm&lV?59TVC_88#oVh$n5OOIzxk&>O%r#Y@Adi-T7Og*w5r z{h%~_yf}DuQs@-$ME#V8&ld-;jtV_Ta9qClK=i0kip)SNME{X!eO*V{7^0W<#FIimAvn#rNF=#NPe|M{C+m%dkYhz{QNj zv9`I!nM~E*A?1z_xR7fD;+C`fGZv$SS7$1(xx#S(!eZQJXRY$5b>t$^lmt7E(r#im za2<#+h?QaoQmXx3<}IKBO3;E$;&tS3BzP zHj!e_*?AC0(sN-c=6`9|$5>t)=Hk2>vfh3n&!q+1_Yh1MD8aTw3%2i>jGKLsTblPT zIy)@bQ0-x;Ck(-M+i@+|?qRZqlZlgQNHwgQuv8Oz6FNVM zT+4rcm{@z>e_WAy+uI1W{r=ZD%U@)g|FsyA_Jlp>!~ElgfpNbIOSHRBDbemer9`{? zq!R7!lS;I^Pb$&wKB+{z`;-#x?%@*c^WhS$IxNwyQ4!5DANH{72$3AeL+k3e)YEYm zVHCc1pp)QhlE*&~JRe<^MVw#`a<)^ZTV~@~GF``7A6_ZCrM3NsXf&*v$4u5w)sjz- z$NJkn+(UM8alnz3>P|v~QjX1i)M$sStanHhnw^^koLiR3WR?5uh|SgW)Z?EwQvZAu z8d8oLHCf&MBdDGUrfN`*nG?EE`e)pHHI93jFMSBl*h6Z@wq?o~h#IPfb2yA7BKEG1xqb`EG;T3N3B|4Y5IZM2a#{P@^eetaW-#usupUYrQxP|miyr!t z*s&dT!)LI|n8B{VN5TH zG-e7Lx@j*OuhvcV6b|dA;VJyjF;h6(n8Mk{6wa0@oXr%@Hl}cPbP6LBw7=m0)I2sn z5T3{XKWL_rdCZ1a#4-L9J!y=|yxFWKGY8Yl)x6wi^KtMwm9YSdl>4}dq~lmF4wvRg zzI>;tiSYH^MAAQQ=6qV>w;Rt#9wl??G)Wec2+e;y*^ujUFi7LsY?n`V%ybg_zO9S! zpe~|=xZC_Q&WH}n+sMj}Y$lYYKW-%z-)Znxc0a_}v-!R2#wki|gr6)A&0GmTxe_}G zAt`5j<~*wm)lM`BJNE$ZIz(*UXl~1dS7<*{2hlacFLvWmpU1vsWv`-ODrRIDsSR+5 z>k#H2Ak2AgCGrp7tjfpRrzX~!x;?TCo-Ztc^=NC`ujoufj<*cK=ZbQUd2&Kpn$KCR zMLEAjj$8jQi*@j`Ix=AjtPyRJ%f-4!<0X`X{&ss4!1wwGv|v{ zs?5(kZGJxQAJTIAJuyDHG|B%Z*8Kw#Y`gJU!}Q#3&-o~S2s!pX*@~eW0Ig0F9zuMMO>3)lccC(Yvvb`{wJ*wK7a;3+tRR$UcvnQt3f|;}9 zYTX^QDYFAU#|5|q@C6s~sx;pt2K_(YlOI~Xun4P{oF9Hoki@4fSIgeaKH)+VnG(EG zB^miSk|x3rxgGf|NB-Gt%0GjdsW_oUY32$!-$2^rQ2vL{a?Cs%?zbE6_Z&w}!u|dT zWpz67`-sloAF=Ouq2f3LKbMFVf?Mo=M6oxyzj_@-;-H=A6bDCpXS;SC=GL%-_P~v3 zVq)IE>d1c^WkQNdpvr5aCK0HDC8XDAIbeujX}x!fU={FsmDU-!R~z^0>;R6lBSo*$ zlA=v}*=9mrnD)!`DlIA6u$OHnq+r-D)2p5((l67iw4`W*UU&;B81&2ZDlI8u&igik#gt#BS7^a1Lw*fd4Ebex zg%+$b&~*drSko!k*diZb0Z z$){ByvER>|e1#qw^=$rd``r$O%0UETu|JLh@0b{4!8^HM>sh=1pkkTILv3$+ zr{C#+i*6Gq$-aTG1%JSvf6&_gJ2?ERPQy-DC;fEKgWqVk)2;8j19Faia&R+LEB1G+ zyp{-l>u))hQRKGB?5AH3$FZQ-Gp&O~crP7+Yb7+xe%o>F$XbDz3jA1Ib@QKMPAfMS z!;%T9zosdiU9EduU%krdQ;xvRR(spvIEQuKhtB*j*iTGp@np#=D2^;o;OgY=1xX=s zC0pAi_6jc+$dv8{$)T_Z>uiN)8`ah3?gc5JHH8Zu0U4zwDwm0L7~|?b#-d@f-zi=_iIhoKT~+TgIAx?y&zTanyBwk zc(zSloz}hJ48bdsZscGLaOvF((gddndL@o2a2eeT(gml;c@a)2aAUg{WC%_X^OZQH zz*)K%j1`s5ao4^u;yQA+Wk~fS1f1#g{Iz@RYH_8I|Bcr z8FQCPi1K9;Gy(sMN{F&$5;O(hsS=`GnFK|`>($vV22%#9Xt+{2R}G#FQW0^9@~j#x z8Kk1(S<06b!SA8C%WUtJ*?uf|Jry|ouLY+fYJ?C3dt6;cYxkcBzNysA0(C!- zvDuKQ?b`;R;f)fz&4osMb+a|+FL__;K<+ocJVB4TTorqC6ehuXOb^ExVzHqPSD=tn z&s3bY_^9rb{ebq4R#SmQaSz#(?#bd?R7wgNja@li6afw(+b}UZi6icIb7I3zU0B64ZSmxMF+85>WgX9COBBx}3dqQKrbfocH9UaZ?H`cs)hd7ywk`Xt z3Fvl9WU+)r>MOE$i%oOKMbxUcUB4xZxa_&+#YsSuTLPNqGRwdbyj>U{&@@RW5WHO& zAJ8PX-BE&oro#Aurq38!5(sE2j1OpfMJEu@R2U!7v`Z%t&{P;7(DZ;#z^z^wAJFsz zoj^cSVO&7dEi_C(Q(;^{Qx!-8nhN6rn!F$hXex{gXqpX@fTqH@fTnMOB%rAC*tyn z#$~)I@l3SVBk}%XEpvXGIGCTcZZer^DjL(I?ZmjarUjodI|7N~nv5xL%y;A&J1y+~ zPMOV*!Vx4Sxl^XI^#@Nv$es>~>NqC8QldH{8y9{?P92{lI~R=bqzyR9i5-jIxgZN# zU%e5zBfjl@p?i5LF?7F6(Y=%698P3y|5VJ-wh*tzt~V`oTif+fGNG7F3r2*}6v&&* zF`E{Q03|s;gM^q(3r2j>aUPO{m`w{tc+y)sA!gHp5uNmePJr&in-+}Vq#Zf|x({z! zFk+K_q!VH`Ef}Fm8+Ag=#swXjR85a!HZJJEq*9PE8y6yRNuijH3py<65^~0DT+mTT z=g=*XDk@1fE*SpJ9NwmoaS}H$b5?u;`ga9XfRaQ|3jGULX8%H8V)~yPp?|(9`q%KB z3SdI|=aOiBKRkCtNA8F375e8UyEyun7<__}dR!$1`uQy@fA4b zQlNH)n!O^em=4bBYa&|>JUZKjr9jMMW3Pc-Z#I}nJVf=GY9%!3BmAZp$xeggl8sBB z+wVdOF~1!WS-*EtV7ymt9y;Pgdg_qcp!E-zaed~xKO%jIRMvi&fB|gP);J zkZ#0r=)kL?;QI>eh{Si8CkCGdMLZ-bmQ7Z>&e0K7662#Hsu*V^k;@+&PIWQ!K0cg^ z@`=`+*$H6(bAos(HS(wj_^WTmUrpRFCWsEI`kV1ou6&L$!8tZy-E3v)NiSqcJk^&d z5aD<#`h!L-$4Z5fMS+Y?XUCa#f1Zk``ZO9(^$CGa9a*yJW7B(lO%PATnTX1fy_#fq z$8|WeT{zQT@#H-zmvP6$Q^`s+XRs_FpN^+;5l{83XST#sy#=?HmFOqzy9QW^elolg zJv^SuSayzyr!tnE&x9d50^b)yi5*-7&Fm+NHpkAHdAEhMGyBIf0|FcA8!yx0|BI4n zHnnU8k;^Q$A+>DAvXxC+2C?x}FNt`9+GFCW-Zw|ro%0QUw!^<)nYC^2D~I-R6jc_U ze=5t-IJDnZu~ay;4?6Pq*PX{A!&R9}4w|w#mhEqg;F_)Fav~mvhia ziw}i*L|f)^E;(tK<}smAk7(!8d-Cqu1~ETSmcpS>k7)b+Nu3rS3iXIK(X~%?Fg_IO z5giJ3w=NeS3iXIG)^DM$_)w@vl)Ziv`1nw$N0iCF5PW)JkQ% z+a%khKa(wDwqLkQet|xxN1=yCwJI3nhr*D@(vG-OW8F~p{DG6jL%kdm5B01wX&@30 z^{h5?4SiDLp{&7k#S4!7G;U80$Ge9wPaYNzCF`>vG|uyMobBmI3*Q4A9HNeJC={Z` zddFRuzQO+?=5{AB?7=lM#c^hp;Ujm)u2-;rE9(_aoP(iPR>-ebEoA-nEY@$&Zer)F zEZ^=)4zJ6Sp4E7!EMRb+hF-(ilhXF|z=XHn^QK5a)9Z0lLD-Bpwm^yGY`wUim&*acfJ*X*Krq;+tB z&_^g8n~uOn>}ti9V`&kmoMp@94Mq7cC_z_Ds;lG1;et+XRgu79PoNk<_nftD3i&+T zTTN&dE4D+fyw~0Nu%M4&39@4Q<*uQWq)#0=Z*ij#rz~kncZGHH6zbs|^0sc`hOaPI zY;QZRS2x9Oj!3y@kaB;CNI7H4Ry@-#IVGCW!nOO9nrnEyj{MCQLg2U%TX z-p3vxK4DS!Yx*AO(30+&R8CfnO%%suphF9~Yclq+OD9rtT~nY#M_65xxvwx*&aDV^ zXfb!qxP67OVs3t*BMXm{D{xKLzQR~3cS)c_hgV%QeqUj%ki$y8#un&M(N%>}8TZ+6 z8P^b&aW^X&*Gjihyk)&sj@Ejv@d9^8o{P&s@?V$r+Sh}hkPVVyo%Ai4wzB?ufj$3x zy--S_==$pgtiNhJ>#w`iN@-Rj=Llbr_oaR2`K*<8vses01%IttcE~y@yD2^m)}cE@ z)=6(rp2U4xPcC6P^WGiR-uU&=56%uQhu?(ftHfL$3(AN)0*jH@vfgt{ulKYoiqs1} zDt=NeZOTGeCggcg1a%Sq&`1C?+k(Rm^tYY)C#-jPsX#?9{~KQr=IpyEW_eRqeW*hp zt^}HmH^n&6W!>k;T3k<7qE)ULDaL^=D?dNhvRW2|D8aUyV%9cg?dQi@P#@z}kif2+ zVwN^#_2H@c41R)5-Db36Q#@^xL1p3 zrIM*jM2cD1RI5Puh8H&F?vP>@Hq|=Nz2SvTxiX}fg-x{*bZ>ZJQ*H|>W?@sU1>LJe zG7Fn>QAjZhn`$-a-tfYv+!0dD!lqgex>x(r!LS~5ua?Fv2s!*{#)MZoa^BEP!4X)E zezZObvHW$tuxT)jx3u)ll$RJ;%~YpIOqqURjPRW_Lw+HAFPyE=L!(j*#5uF%OJu(a zN^^8w=#=vKSo8C2GgoZISlu+@lR5ioKW3hN*PE;hJ!wyR#hL$h(|O`4eohHwPESP? zpBLPQz+}Di18wi>eP;%-5|<1e_XI~n^a9@_d_YG^e54~K=2BLPHtX%*65%_Qe|lXj z>hOMoLQenwU=Cu~foJ=dEE;ucOE!2897g45-Ap^7nwMNG;c)T_4_fA`Z$+Rb$E=N^|eZHncC&DLIN9=z&rPB0g zDHKd18T;>!RH-36zxDYiFNq7?6PWbgcWkC*uE3Pq2AgTA9R-{n4ms~i8?If0DSg+x zj@xY0hdx{0tKssP`)q@7_&>IX#vMe@U^riE`T);!YRsO%nCJOykMKn5BL`nO?u5C| z$JS6)URhnc+P12?rpi{;QognxSl>{$x}kinE!*YxmgLwZ-zAq^Vk4=%QKhb{uB@_^ z>q52VYpbSCooaH{l-D;_RoZ;jYpZ72OtwZ0g2<=%ii(=@#=Pk>>&qK_)fF{W&PbA} z_pA!L{Hl8TY5Ps(jnx$^8+{G*Y1XWjMJp@nYWdYv;j`5?)zsK(>wLC#(4rhFaGTkC6BuhJW;zSC4KjoKRO znr&BsGZO0>Dytdoz|jn%hQW#*GGF2B9a8<>Hp*s)YXMDEC2%dAZZ3UpZ}hZr+uV zq)54G)BdhuIeBJ-*r!dCHdgY9{crqGSe>kUBKahz`p6ff7L!TUvq6$JY~bI@4eEOs zthBAL+0@{a$;eLA4XW?_ux%Jtk6<>eT**IaC<<1t%&~1C|5SND)L6!FE1YC2Q~AOj z($6IoNH^o_k=Caf)v7|0gKQV;x1OLL-4znZDc_?&_d}>gYFr`1LmzF?46)-(BRo~i zf8z&L$^%R#RSlA=M!sjS%u%_?5UJ;?|DKOgA>(9k^3|=bs;z2(_$qA`b#Tg?*4qry z&$Ct6*=jW9OBcvrR99KOYCY4p%C@$=y4F@xS66TI)!7=Gs(n?q^>s}Rw%V$yO3h9$ zs;;f5X`;$G6^*`1Dw>-XMOD|qDyz!Z&P@xyHd7>Vf-w53hN){NL<>x)rE`KYnbN9j zeX99v`BL7nx?-}eVoiAiT%RB7a%|t#RWh!$J8M=&U6ao?XO3;cX$g=Cl2w(1LDtNs zD(b0Tl`ZYe&6CRc&8M**7VKL^AL^TY3y?^YCroObFj;zVeclZ@vnAX2Y*jS~A&LmE zky68Z#3Vhns2bTFsb|`>Fem$apfS=$d7G_BUZJO?#A|D4s;w1);#<>D*R*<#t!f?O zrqNbjTZw$-F-c1cw`&uj)`V!PTcrqLRdqw7&sJGgQC`yk5y2>HE7nL;v;*I-smeB9 zXKhuBFFWU|s}PY@IlLp%`NY2>)v)a%-W6{_i@f2l13J7&eQeI+1-6m}wnAsIbBVpw z>98$udz?0%cu|_^qQ85#=mEOORtkMDonKPCv~y%Yq_k4kCub82J zuB~cpq-#@Zs%lsJ)?Ae<$kij;^|QU@C zloT&;7cN`kbhwxBa3>kfXgep#FuVns{U*~zw)tzSDsHw3B~{d|t#4qAP@N1GTV2&? zP!f|uO*-4fD{5EdUUu2_mrY-L{Uw*&APOQX;;OnPrX^3PG?H10TVHIR3of|L5Y2;sW#R1+_k!_JU{K8tbeo- z>0V4br}g}d#4X|HH^wbd|5o2pU4QBho~nQDdDlfcc#&=1GPlR!E-th=mpkV#E49yq z?Rb}z6fUtB@giWRA`d(w8*Oj|d1$Y;QnG!>hbrGy6JqjAnB0imtf+$CVz5&yDim?X ztL=?VHz78M>GH8zL`bK}KdnwGCM&Yh77}-5}8#Eh(R(Ne7p|RAu9GLs}e;PYleN5Em!B4`o(Iw^iqCbM8B%n*4H)oY^!VP zZi@VBJjqCY-5faI+2DjAZgvDR&UQ$wAYK7JhG66wFV2~zI&RPmBt(CulZgsI-70^=#9LI7 z$yVxeFV!*#IL{4v6g%AZ;#sz(*Vw&Yp_h5rmO7V)<%LMk224}_YU>!>3hcK=UX&qK zv2AB5Q|`1xJe8JLu0!-Zf`XU!4ylC)|HAKT()!E2~;~w1)Eayc01go!70BdimYM>EOk91AZrfO&lYEwP%C>bez znmT=zt!N%8M)kI;h6aR%CWF{oqX|5QVUOolR#%8Aj-47~tTTQ_`sI51u5848Pz9aD zXDTT92ePV9*uGbW0Ui#~ye0GeiouZlE$7c={LM6Qf|u|2H|W0_;5*;Zf29Ua(&W3% zc{S77w$xo%%%!(WoV+T2Tqkf+O;egFO$hQ5E$l>2!b>Y{iashXy)-WmW20W!2=r^a zxk{1Ocf zYNyk5hGuJ%rcA$FC!8WjhN{Fot)8XsXJ!}Qt&_C)k;O_{rca#XR>Ud1Rh3Yt$M9k%)eZTFgXk(XiLj}VKJ%1@KB+OL=xk{!k{`pYYRX)l zO=tQRqqcHVV@`ZNVfnS<#E}uepF`c6ma|pHNPW8SRP-Hj_^1++A(FnfYHdaR`fQ_- z>vM0IY}972tP~|FJ7=;gbcvL&Ta`^mq`Y=a&6=er!(^NOEl+EB&V=#%#KtjRpyDRt zUoxhTd@;OgP>(OB0$zv>Evsr(b*(T@UNY1s%-gioRkEbis zC;Oa9jdQ6*lVP}X-!pPY5~kwmEpHIg{jO=U=?2sFGAG{u-e73_My>_tuZF*E{5=Iu z@bdRLe<`=Z`}iy4Zwr4r`0FE|;N>rqzm>O9mcPgNdxyV_+o=;Mc=@a0Z_;v`G-*QK z&t>?u>#Hxl`1Z>!3fFN&b5+9>YO+CCXs~YOoD&fp`EoxOg3FofbrUTR zZa{1jgRkY?8U-`eb-d^s-{YZ zmN@6nn&mZo>iU;c{0#c*{PLQ*2Hf#Htwt=Z;L+jGKbd|1^T<2(J%Z>66x~8k{Dt_(*Vp_*BDMR-vu3GEmjXJPIe6>Xi;*s!*>d@-JLp z-j(46hn3+HP7_Q?4TFrrtXb8y=o_Y*^7TBhxb0T2H`SN>)|g}+!?dQwv}V0&%`K6N zjW3btOBJ(W-kgkq|{#k8)) zv~Im=-7UO(vDr*{Q)fw#Nm(jM@^eA)v(HH%*T z^+aedvOgDCFvnyn1J1aL_JK9PF5njF-;2~E{R3vev-*Lep=G{wA~Xl+1=aw2fjb2r zBwsrC*XR$h>x~m3pZsP)bUQHj%@d&qWI*3K5jqI$2lmVFw@-x3oFsS%SPHbgdm?l{ zuoHL?*!$jz&}0ksywCUmJNr(A9s*_tPlS#D%RZnTdBGntE`;y*0!xAYzz4?BkE4te zF!LDoFs}7OCqk`2uW2yUO8aHNZNPfq9O~%>_5iyetSkt~W=2;BZU_40_o%_pcA$6k zVCV>N2e6*@4vj%J0Xx%?O=nS02K50u$I=eaW*rQj03JG%_Bg|-{%qtL{mMOeFl0WL z{-1{o1ZDy~KpU_OxC3|}a66~O9+C9%^y@szeS>^J+l0Z;R$#%T!BCgLse_>c=%#@C z$@=9vfuDo#olbf1+b_d@IG=ifGX!#*sSnr%+yd+c-UmE%-=_u2Oe597&-v-7NZZ)?=s+CU_I~vuoYNIePtzsp@)F2z%1(90XzUKSTY#e zK)szyX&2a4Iv5&9ef`TQ$9%F~O}~K!z-_>K-~+%`;A6l}U@vex@Eza|;89=~FvG@k z18qRlHP8nz6Sx9s1J(m`fnM?#08_t7J-``2({l0y`+-~J_qB{SFcY`~SP$F_Yy}>W z^y?@;0X#4l*ahqX+ODTxz|0lcix)9oz<%J48=$+1l)sVsf!>vap%;L*GU)7E^sAh4 z1|GVJ_X=#~#EUr>gRde#uyYml0}riXJhLfZjh+SU0=59Rf1B|F9wPp#7g(^C_s#Qq zfe!)8fIYxYU>~p-=#~D~G5++g44c+AiS!0^HegrdU}z_>-v>R@A6pae0q9-Fe8}N< zGx>mJz-_?J7U&$_cMQhUB86xa~X%<(obOhzw_L* z)A|r}OnK9PP%p6aVfsNm-bZLZkNm*Nz(YU}upd|kG(F1v17-rZ0KLHbfIEO)^81g_ z9k2|TF`asV4q*R(k{{UHMSDQoUfM$r*dAw`fZKsPf&Ja^9r^tPd;$4zXg~7{nA=M_ z(DWSrx}17|Wx&n@&=L6UKr_F00JDHy!0o_-m(kyWy}-;X$oC5U0d~I1{0Fuk;ynP% z-sHVqNx8QuKa+OerhVY{cXnCi@DT72_O(r1nvZG2R;Sd0Xzik0)7rW z1k6~#a|3Na(>tNiOkh2*Retjsr-3QymL;a7mdvEDWsFJfOd2EN)-;~K+^0^2n6i;i z;`}DlL~=;}L!9xGYvzk3bAcsmp*6iZwbk?w7tFrovWaju-JU#J-(x32se&**s0XGM z{PogaatyAX?@xh4%}}2#{OkdOE#XBKQ#vt?Q6QN@~zj;3sg8F`tJkOGKXUaT_EnuE!$=*83Zpqy| z+HRTIHm1R)}5$@JK>Cqm!j_lW+jj`ok~Z@Q1X zndri6WB{q>PH8)k;L-ZFI_lWJ@;V5ot@cbAYlA^j^QT!zgW*acE0% zSZv9qX=>c;mQ+W&sfJ`T^*=z~Lz0(v0?EAUtun@&rJc4>3oW_Hjx^N@wdg0Bm!4b< zs?cJKpcbS{rUfw=d%7bYp~iIsed~GjMCg|ciupm_EH$2DTs@YqucwSjOE|7>8CRj9 z9-d($_5@m%Ri$Kg#TsjrKUw_}&c6&vO@n16H(oe|n}#L;H*Ckcnpo{q>f zr9$IA?3vXg`uCkkKkVt(MEdGv;H4ifp6fx%seYvW*Za{)KkhqlBGf#h9}SUyxKux! zYRncH{ph71?@&(l<1S{;e{nprAeI+i{`>o}oc@o0&U^kW-zV*VM*MzkMM-W8<}w`F@$$}33; zJF-CLn7r#5GJ)vJVX5;UPf}+rKP*drjv8rY7&m0@Os1+0qv7w&!6kej&fC|8pJ!2& zw?9b!Uh?}SzdL?@CSPsI0>xNpK6`+?6F)x@+K?!3MU>CFNH>o$nOev@m3J01PKoD{ zH@Q3ED8Y&3nY`4s;)~OJCYg7wdgQ)bki)BK|E0{-FOGW8%YS zwj9sq|4U;cJaZiVDuCzr0L^t6j)`bJN-GO3{mChF%?$rYeGkn_>#q{b_!#~@r_lRK z>Wrm#Tk>ZSdPhT)KHNk8gYV$SgMXXn#`OWc&(JxeG~=*zCZ)WboUjifqE($osIw2> z;q%gmGyZ0sg_f?Qlr@RzP3f`1e`aPduh97u>070wxh`P+ihS}B-D(ZEiQ-=r1mk)- zy48J@>7tBG9r(Ln`(Mnw~3N#-yEo z_nQYpUlZQiiK8PrF7&<4oN_%c)-Z8o;O9_gCuI)eZ+%Z>aDy%r5W8S&3S|s^z0gvY zGM=*1!H9NlS8X1p{MNL=&^M$_amJ`Nonj*?JvU`Ve4EnG$vjibSQZ=LqvomMGE}@- z+N7VyN5}QkMVaLmlc_XoFw`93d-U;6$v=XI;d?2cCnmQ=>0au3koJ$BGZ;E1^t+cH z(PzV6h}IW7FR{a#5?6>+(e}bo=^r*oBKjSNaeB|?@pP9BZrd=N_{=-OiCQEd87nWi zgXjN!bly&x7Um1DMt$Tx-viDE?zl02Bjlc@%SVP$A)1w*CkH4$ecB* zN)M9u4)V`yi|<1}xEgR_o-&bq<}=|>;KDXXTXM38s^+Jc@ZX+(wN%(nzRBe4BHuq6 z@5GpQQ9D_T#G4tV`7zVZm7Y>a$HXk2AGVzx>GdOW-8c-hFuiIRW`6kHK14qbu=epa z`XnC@e?8#Fv99roAh3T=F+W7l`b|Qig{uAZGyB!Ml3Pyhr#|JAG1{0x8?Cha1{D=S+K$g-&C4Z948gMQu^qi|FX99ed*)- zlVist%9ol$0%rD^zn+`0$~#k(Vr;M$^qj~pR&8~>nXX~= zNuOUZ>I=6kW6=k0@9z_jr};d_n>*NI>y>rpZ813EgYw*+;AD)=*TJ=vulfeXvn0Kg z^zEcim-M;e^eUB}4X%bdb9v4sd^Z(Ge6r~E4H1v*o^Jgv?jdg_d2f`wd_*UBi27wb z5A)sp7Bvo|IcJ3C*2BYMEn$1QjLQ+~EQ4-Pebh&ALMSW1p<=0z;KqSl4(_@bTsFA- z!C^M458TN#2i$gW!+hCDKYZ=TY(sTbwvfE%8uH7U`f8~mPB%_o5*`2H z&&b!7>_ZTX3nbO#11Fc!wXjA$Pk35X)+OR;VpDHT$cLQi*CvvIvXp=fbXmM@V>XZ8 zIx1kkGvx=&Z<;hsK414=y+8Ht8|jx*`8B*`m_eW4CZBoP#m4iYSGT3$B2WHDJsO%H zZ6!|&b(x`+eBm9eYmAWBQNAqC;K8G^2V=gQWre5k^*@a&@eJ;+{g%|F@m;M<__Pbt zlYg2pK@>*e#}eOAN&kEK9wR4CBFB;g2`e+?gv3VlQCH9D)%E>^bpMWhn-^kU@YawH>;t5_BWZ3%DML7(oUPnYstK2rBn z)ZIhfKbN|XBhgM-_wJE(<0+Bn&A5<$p8oTm^gT$Q%IN1ivj;^-CD8MZ;89M|y3%?XTs>=k#eibuCllG$FP=c(zfW z7jAQ0i;sv3%-DNqe)8AR59SVrN`z<87lUUd;=3+c3;jl7{fU{aee@fozJkF}Ex%*r zfw3m0JteZhmrL>kd4r+Zj77}2M#rHf!8pJy<()`OV(R?C(Dg>y5xm8F=7_99)2$(SGI@KL7cy4nH*B$eDOR$6K}6OsNMHHC{ax8C(w;o`Jtana zxBs7QZw~Ec(8L<=VCV{YzDc^h5%X*r^n-O2XByID>90r1FE;us0~@8!|Mv08roD&0 ziM&|CJmh;!TgYnkE}RT{7HI#1VkoLQ9G^q|8prJVu#6 zN||%w$|(P3@;}Fy@sjTdWn4=KLyJ-H%^x%Iqt6r7Z({w2JIpC(CHCv9en_1Kj8EzE z!H^RNoB8FF)ETS8QRkDVs56r~w<0FIjCmv9e#=(#nhUTy9=N-XsV*9>* zbjll}Ef0(?wCot&1hiYgOi0X$c^Vnh4BDMZjAJuvbLKMIP<&(l*wL;Zq}*u^jM_T7 zxNS^|XLK5|L^1#^l$i;$nMhy%Z>%3ZMB6jB4E{g0ezcr1@k~O0sAG?#F=t}^0nCie zqo9Yj(H^GD50Ll67Aqa;$+wKeDxaUw+YX-DS5KTRve!I2j@}Zj3l++`&<_&}9<`n? zb(-mKYlBheF%*sHy!hX$vywW!ICr-a&ssn~W9mz!BOqZ@(xr3h@{i5od3r6BSAQ}(IUIgY;fZyXFgoaDAoH*-c@0WSp|X9Y%ns7G zl5UoCK7!i|Zp$#-0dVc$*c#@Pc#eM--hpO2Iz_8 z=_AiJ$pejykRiOl=n7X3+EXv%9cqwZt zAnOB^E2W&SbxuewGe%D}V9pCkP$N3$8@63n-(BpA*9U_k>o}WeS zHMIsM;{WK#AvfwMqmCnY4~Bjj|K8v)u{Ixdq*Nw&Zwu0;ANNzo@*fU{<|1ojo)y1J zY#ocJBP~H4^Oc_6M;)aO{)aQ|1|--&~KwhH;Ly zI~GGEchI6xz1F$3pH1!}xaSwq^>3m7HQ=@l!%2*OCpgp+^~vRbC%C8XJAIvB=FwC1 zbIm^whW4kbmS0u(ZIVL7m^5&Aa zhP>ZTl(#M#gC*m-g1iMkjUQKeMj!Z{)X@{Eg8?+wpA*?N4)Q%fnNs#4d}x#zp^rxS zvaE0Y$ue`%h*{;O>`}(|1ogZF12wPFV|9wU7FxEOQ|?O45xwTv zPhAIp5>Jyfq2yx*3lN?E5nWf6d20iAUkpy@cLunlysy)xUk_#KX?Gjr`4h1h960iM zFQ<6VSK~J*J(;?aO?^A*!$kUZI&=0N^0tuoZ_QcJS2B6PBljjApUI?c-xWVT1>hcx z!O8f@9-(_^@9!C(PWm|G;lWT+y3j3)Q-6DW3dSUS&#rVCp9Az^2K_pn@iFJ2Kauxz z#wVA&Cw@F~eB`+$oTit0{+{RFLcyBd23>r3TF-q-y6B}3kM*41bDtn@<`bv)+}S9k zGZH*^CeJN}y(;M#^^7fMVbm;6J@=hG~ z%rZ1GRu7Su^{nySN@q{*mVuPCUed-VC?`DV2x&Vg*EohBr=DM4%b}!{If)sm(jle3 zIVeeo4h)7~rR|vdqP9}3+`?8mnwX)f`h;e-QeXX>@i9xXue%1EG$9|!_Yk->;4V=Z zjq3r|9#eJ$X$Qfzf}0QTjp<)hN00Vzk=V=g$DV|tI1(!9ME0a7WK=S=h-uCeU6Eh%Mu z;s+JSfQ;|BE11u1Lm_^ukF=2u?sIT&$>fdFPNFuJsWzTT{IbKbGcDA&?I-LTM6Hgg zFVVXxwshT=l)N|L*eKgw`rJc(FFZ69*;gjGgW!6>W$;}-y3|{tYdccSMpoad>$`roVha$d46>BSPddWZe;h_+ur#>$J zSAts(ZdM6D5{+G~?%I_^WN8BRg@KdzutWMYDipf+!nnH7^Ap5X62r19vF?foRR66ZJ@sT98Sak z+x0Cz1wWD{BGtdAs4p`&6lxQLD$zJc=R10RQp&4|NmS94^lyAV@AL9dDDQ9c%OdHY zgw7^-a}nC8p}vASp@_XFZOFdfIpBVB#!31dOB?-3DIX?oLyf7>UoZ7-b#fjD-{m8; z{SLS-;8-SAdrXA3CGQFFo#1i*s*m90PWcDHO)zjmzp~f32izlR{D_WgqPbdPX-!UM zr&hvYkh`z$N|7!0`;Nz%{yx(Zl@*zte12QZLK_nao7DXdV zvK<1E4;chLw2~me_bu)5Xk^VIX|yvVW3wS~IF|s41B5F9oInVK%Up(p#1Ua}3<<1~ z1rm|~+He>`0^YE&knG0$uUAzw-90_N@JIIh{kDI$UiZK2)vJC-RlRzzdphiXmhXYr z_^I2rwSg}k_W6NLIc?iEga_?G*h|1>08@QN*t@_E1_qO853(0iuxQo^?0cAxg+3<& zH8KzDp!LnVa5c(rij)R*U@!hy75X^nabzzpLHTPh+_vp=(|zR^b!@S27Et+n(fBGY z2XBkig^zml5_)!e=lhoH{PjWaf8PWQL&zRP_hDdTz%)KVSR=5X1h56bHUpz!Ob7Kj zdT;!nfbB~F^lX>(xnarg?VsmKezoy73;ui!_$YX!2ng$UcHVb9y?eX3wk;dh>Fo2q z1U|2VkNT&?4qw%YPsf8D<2*6ZxX#;?%%c^~)=B2`mCoyv%=aDVl}YBkD(7D(neR+= zeml{;JQ2jmG=1SR43NnFU*Fff9JzJx^Y%4crlTv-t?GHtMQ*4t_g66GjxPT-a$|-0 zju6j32AP&SUvkV@&ZUldDRL}M!Rcbhj8_o+ZiRD^WB##{&ev5s7dqxadp=g_yijS* zagg0?`)Ye+_QjFQF-?A~!uhYt$Pc4{uc>sNsEll`#Ob@0&aIBQ$#K5pMDL?4&p6Jn z9P_lg;0H66mhPtFn3ZF zK=!$j)|sD2H1$%)*-&R5oP6LF`{0W*UH`t1xns(G73bEObEZ0%)kS_d&B6J%_Id)X z`Hec~_Bvw92l0F>;%tlH?O5={<%hbi0@(D1E->NhhQ1x8qTol1M(CMwt^Nu<0z36DAd6nwny~-3$ ziT>~>EB~X?e1Yh%1U=3zm*3Z1UTbcy1$s~I6H%N4jonTn-V$|w9yL!yN#Rf(91_`o zG2m+>&JQDz??-UDCF1-pV$LUG?{n510bsH7S#t>yf#1h3s&LM$G70zbI z{I=oz*}j{GEUFL3bs z&(fMdM$KK3=C`Bf^@wwO)ZA9FKagKnI6$^aEyq5-*g%LEE7m#YPGSTW`oDU{%@OSI ze?=a$`nf*Vm8RtCz8(Hlg$|p%=d*A&QB(pZ57VLlg$lL=dsD=tCjBPMAZAb z3fy>TqJxWjCV|V3CZ&jSTcpKx?w?{-IM+=v+aeBL8-ynM<`nZr)VX7d`C_H>{VC>0 zm3PyPHPy)XC5&o%w{Y86KX4raVZR=6ohSE!w2$p$eo^6Ezqk2*w13TXb6chJXr0;Y zIOk8t*G!xzr<>nYIh&@NpG^2-1VlfbOgDZ#*|~JOdAyp=U!CH7X}Wo9igVR;^Jop7 z|Gwsi2sYqeHr4swbaP$I!TBvQ=i%w*IeY$U%=wpn%=6PI^J~+bo9fK#dpRiin!QPi zJN7}<{9qqCg_Qr$>%3WO2AnOm<|`G>3$p<^H7y@cdhx^1Ui3if^%1`d21q_|9PTwN3FSOGM(Qw*}1LO{KlUDezNn=HRiQy z;`#5@&hMs}$7{HEOg(8ie1HmPW2O0eC0qeW6at+x==@-sxgz4+F%9<4xp*37xh-a% ziJpFQ%&e{Y)N3*GbS{~#z^gIil`y=@9s|8|*0r-4mePp!4JSF<( zhDh64#%zi>m)02AJ!AeHalTw*9-!Mlgx64G{zRu2pqv`>1A4;8qs~<|=3IJ04BfBP zVCdrXXO+(7HRfV^tScSoq8jthboxujxv<7uPLFkcm2-ZL`8l0p+?-ouzDiGc^91Mf zHRc66{p|$jr77k{GOKq^bS?(%#BWzxxv#De8Q-oe$oQ{y1sUI}E6DiMx`K=^))i!Y zuC5^Cf7BIZ{I|M-j4#v`Wc;tXf{eeaE6Dg-T|vfebp;upt}|Om+&@fo{-w^`Mk;T^ zBcDB@+he*wBs&?=e#x^?r!W8FEb>@*N zIDK-8gAne8G|n!oabB-8Kc>@XYMhtr%$LaiUt8*BD8zo&P=~_ugCEY4%{Y^~YDd`$X*GoDsY3!R!*Cy$(r0XOd zlhoYIbXz6mE5w5iJJ_Cfik!lk2rl zan9J&%7IfYXZZVk-L{d_u`xeg3_g(eXbfDBN;zW(^0aZQq?%_;?|+2vk4viemj(FM z&*1u6b|}-Ym2}--U(C|^wj{2LKZphNlD z3;gMq=h?cE`3(PnQ{^9fkgvz&{(4Dc0sd>t@ZT)_>wm(0)=8@T$3_`9f{*{0uY>%@ z%J83Y1h>b!r#N5z(~?R(7}_*Nht`Xx0r?I6k~@xI{r{uzUoU*eB<*}g_}W~Er%V1| z{ce{0W6v>t=ktE~8h^fh`LvW^`ZbDy<51kj#68!TQrlw+C+6MD_@qXzU%HQ<_pju- z|4^>S56SgfN%xoZUAg~Zxz-pdK7E-X=xR))=x{hO4`MBl4vodmmV!krvuQrx*I4*| zd}-<=)r6(QzWJkAJ}JgD3S)}#(lLP(W8=Iy-+T!JijPZBQRRNMmhV&epAIb_Gd+7K z9X?5JpAYqHp+C#@_-B}In_R1$_$;}l|LkhMkKb3e*Pr9dJ^pvbk$!!o1sr-gpS4Q5 zP|}kn?UQt+q!&nfrKC4Yx zDI(hZVslJpr#Uy<}3Nvpmh?KrDe29UZjf}7q|ZqD zilpyIT6LwAFX^F@wo1BC(vv0alXRt|7f5=gq&G{tLDEfkAsCl-7r+e)WO7elfAp-+zyrKmQZ;GfrBLAFCRvpVffhEOh5p|SaJhIgWf>FKT z$0r)qCw_bqzM<_!_&jPR7xbI=Zq!s4^t>ORVq!8*{dkRO3+W$GQ)@ay@u^1bhM!N& zY!!Rr$ETTL`XFZDh?>33__Ja7-e%&yl>usldfvyVee&Ln!dj?Z^5fHu3HZBoKMLy* zrZ1z={%T+Rd|({|{ge6ZZ|XyFwVp*TWS=X|zilfbd`5P+0`+We~G?6 z9v5og{~9M@e6XZw`K-H}8Eh6lx0k^W03Rw>=Rv`8n*!zDSEk$+;j``)f4ScjT<2Fo z{xbvokHL5gdoFS_NzS$?PH^aRHGrOQowo(~HwXBCx(xs0g^$krf_z#6eCYeKVR9}L zK3khvPMz+}0X@m7^T{Cp)&Tz;{FyNRUBYK{p}!s;E`!H0e5l;9A*Q$QfT8}5gJWjp z$ur&tx#{RdxrFO{Hz?<+!_?3cdJRw-_ z(SdSrg~J+F?nBD|0e`tig5H)Jz^@ft;}^klKN%?Zu^p6aM#IYu;@?$yWS|7gJtk1@ zt2-#S@rm$qgZQ&juEuAAOO4U? z3gR*Fp?1`GQn1{%K)G#Y%8d&jjYkFf%nk6N-vSP+2mEBGm1o(_BDf@{3BE3X4+|JA^+{-LpYTs#|OZ8BQ>q)tfTKZBy;U(Z<^8Z%&tbc*~kKKz5UbUEzTK-!Y zw|k0#m#c>(Kp%lWQyJp7gq2Ib%VbQcUqm1CikQDLL4WuZ!DHfYV3^y3e%C1y;?JBd z^!o+;lZ$}Uj;Nr&bgke)|LP9Qr_?Wc1o&Pog75Ehz(0z18GVM~F1dRq0uW*JYb_4? zIb6>vp}$q|HRSN%&~V@jnFd2BO#alg{tk1lPEi;{O*o$#0%# z#`b-3oJIf-+P39tNmDqG4=y%$ajv=k9~xn zSIn|mC-kvCM(mzy(BC8Yx>}}JkMmi<+awP9aS{s0dlu(&@89F6vizM#F(1`GUjX9EMD;$lo(@bSYLfI79u62aR}VBCHW1$R~o zKDLzW+3rsTewE;{txOMdZ;xA*|C4-ezsrf!M+6_fhw;}rF;5Gw@#G@}r|)wfgk5_Y z_tidDg@>hfU-LUAq;KZZF~j0~?)|%>41T5X8C}BiKOmVN0Um=M2#(*!%kZg!U?flH zI_9%P_{0TY|26~q;=(C{uWe*{`VJBuS&Q?z_wS=+@Rxy8Khe0R_Vei8EYJEOu9!Aq zc96xrocVmE(2v>=6&qvsSL9q$0Q?Jnyk&^Y#>AFjb8mmH12r=i7k{;RXsPg%T#+Zu?&A~AhPYdHp}wUcNge*8MxI~2Q%KliJ4o+c;kAeyNDBPQ4E)V)Z*yR zUtk7pLjRKB8uv!E*yE3uzg&2d>8Pl%`Z>blwIL0_JvaHwH7{PPwY67xCgf7*kjz%3y~+8 zv9Gj?^v`CwcPwz~Ke}FlX0pf0z)4PBU(t5Y3BI=7-;PgMKGRL3t}h9nEx<|6SS8b| z{8M1ai2pL-bEME8E%^AkOmE*G!M#U;6Q6qeVGbNx&%YFW%~Ga+$liq=#E`T7?O4W} z1fLE(tlj69!LJfNZMQH3`b{G`9uZvEhqQiPuzc`b6S>@jnB3H2VIr*Dj{>KDqU)X7 zPd;hsQUCWagV%-662X^EV*Y9`(v}Z$%eoHKuRT61^y@_5KFQh49fIpRsmk^P!N+CY zNA2wE!e7@*@tF3Q2!l@YkITBz@q!-$oZ8EXy;v&vCoC=(p5!FUCuVfrSo{Bg@Yi)J zG`Br275-zV^0@n`;NMbwlpmDdi>0F)4gmFsw&(a-s?}@)PV(z|tJeRx&}+O|$EkAw zKUYi)zS{i;!Ruw5s(oK1_^|jn%IEKZYa6jd{P!lIAFXBi>6_7XJSg}&3S{9pN!sxl z!DCl4ut@MqEDULz+6?k%Kj2gky1sd~;LVmE_45D&X9~Ww44=OPPW7hijoL1sD?|T1 z;8d=z-{*z@81S%qsKDox!sMrKs!_RZ5--*E`V?^DKR(8cPZIu%77?G)IPj&GKkUef zTw$$JZ}dB!R?kR$SljVu78j$*JqAsyEgM z{hBSvj6<5;Twc%5yGGWfb$s0gocL@NKm3=J3CGC?5q-?)J_<||?6Cqk(KkND*Ij~7 zz`(Kc{DOg7_%Y0HfZKYwoh7mF8-nCrq1SyM>Q~1;M)ak}$1IL|uI38XezidGpdafh zzKP4laJI(~aFWyfny+UvJM*^CcYcxqnXZ_94rY4YhcF_1T7lc=5_@ESCjj?)1UKJd zLX~q!=^L28bT4zg@UQb@zRx+#`XL{Odo;e3pp(-w^syu@_$!`cc8_ zUuEF8g715%@G;CFDtHrcdM@4n@~Geo1UDT_ulg!$aUt>~mni*{Oi$lkpyT(zN&eBm zyszf4@OD4l;^=QOj*nTrNDxq{GAOGY*`}UGps_{)FVA-?ydb8v8B-;vSh>1@DxO_IE=6h~UdM zGC;rCL&x8OA@OOvnXixJ#JmamF#SB^2-ZuwpGEb58}KkaaDEy5YKy}z9LM#1w3NFM zxUJ_48MnWAgnOTdV1&o+XZ)`?G0y=fyRa(YfBqYAdaiY1Fx#a+f8?(jAHJ6hlwoXI zffFCyC#BCt->RW^FBLVJ=6gx<_&0aZWz33yn2o^TY)qx++NCcN&mxQDTv zz6qSkZs)x3pGC;p+ zN5{S&=W^Fboa8iyO^e{2_c5SxmD7O}AKizhe#nT>$1dS=?RU$Nb)(?pvVX2p_&*1n z>R~kC54>&hn9==yI0_?IjnyZ|Em!c-rA+tN#BPqIn)GzRq5l6fS5>ALw#pr`sAy@Q$9-#*1@MV#dy z5A>4*fQOCKvw#zywJ$Iq9e4Dtk}&!ai=#itzCrqy79I5a(lqWmS8zMhH!|t?v*1Dh zcCVRCKPLV5lT2>r04I5L-y_t5J(dW)?x$4Q(!k08(S4LLp+8&bM?cQ;j0t{+@YnsU zQw4ui=#AJfc`Wmk&1J;)fIE=9u7(XEJ~Kt|J}wEmHph{wE5)bsk&TbLGKY#fKO_gxQ$0fm8jr$voQr zb^z{u%hC&xCwZg{{wi>47v2A>^-MoyNcCVo$>rK_8i3!vt&ERe#LsoSlyRisu{Df8 zDvm-Y@M&0=(R~gvzHL?r{dyTkUBc%)OYad}PQL@3o;TPZeky#%k6^|ahW2<#@X>u3 z-z??6YjGj+Bui%Ta}CS9RqG)IoXQRA!_NRG{bR(g)eEm{gwNPOpKF1WoVp)%Kf!MkK6n?-BJ}+@ zIwsB`{-wuhW$^PYUTf+z+~C!cb)Dc_MQ|P0^gRcXzfI;H2MPTj1lN7S>fe4E{tv~m zgK^qk@r#yyk>$7Fzyz<`1Ya+4QEf;1wgQ#A?oBT66={I4K;Rhq=kc;`DB_qGK~L=- zoVUi|2oay*EljEHxIpl>FS9)MJDMP&Zy*qTr_3W%U)>9w`0M^<#eZq(Rf=NzhVU7E zfHAe#`$HjHdG6(MZ{WnxHw?nsakIQ1WWzd-xXcZI%Q?7|g7 z|7*b;A7enmh~__m+wuDw#?KQuuQ*2J7yW6!Z3L3LfD?UiJ?jafU;k(3L%*R%N6WF{ z&%4y(7%wvJ{tuIze*jMWb-%yX|JQ{+wlDW*`&}C3c?dYw!?^e}^}^?0gnnI|1(9tc z=6Awh_jhYQneZuo-nG&nU{>rA7krJ(uQk4UEO6?d!F8MyEWKp*Bxjewp9OB8_bHZB z{i{C!pXSN0r$@B0oQs1-k&%?cpYYO ztpAFisr`Qea69f~9HoT52RJ?NsKf#6??vL?7Nr-xS0VHh<`bXNV;*qgqwh(4NJ#n= zzcpf!F9?3N;EjhcE^62OTyT94Mf>?Xz)Aj~-JG<5@%7@*e@yrv44nG^szCprCG?$A z52|nH3BF8l^@~1jabfC7J}2}+dwsd`5&a<3L~~;qJ`W208tErmZ%>q=e@*D|qp4OJ z`&)=~)*jw22LY#kqVH+IGTGx;OAmc@H}g4_6O$2qSnQ+y77ubG2g;2VLO=c@6YBip z;NzG+sLvMwCpm-b_-3j|KR?IyM#Vye}8CkVd_af z3J29b?-mBnmwRUkuJ6sLzcFrc4+A+pyo1}lQRa!N2ik#CJ**XjJV)B)D}o2-N8bh> zHr^jDga6v%;D0|0vO?r}Tkv7=dljF00?QMeZyp7_Uh;aA4xtaOJEVYz$$7T&U(Z~| zg<14OF1JnQxoTey5xj8&_uC25&))zZ#(&--Zm)6C8>%O}1YawGCHmb%Iz|Lv-^?BP zREEttf;V2rxcvqd?p*_%^w_BQ?PzX$+$Ho|196Ne1z+iH z_uaI;dX&#BZYcZPNXU~BJQ!Cw*Ww-l<@6guzfAneTERzwQ@LBk5y%OC=u)Y-xm>Q= zuXBJ?y)_=mc$d&$qx3Sd(E495^!nc4?}h#u;PrCuOPL9z*(7KV0~KS?Jg8$M~Cq-vfM_oO_ekg->vOaGUUH6uW$c zWSWKsqWWnQe@VyJ;lRWAj{v9k4f-2vE$)?s&+ioaQJLRqyKF2&Zw6Dj%us4oYGrCD z@1|BI28Rby4auZ&k6W~K-rPm5n;Ti~cDRFy^pJ5+>&`El?YikqdMKU8<&y6FEZ0r0 zS{0ASo0cbX>7<*>XVXI~I+ES_cs$vk$h!G#BAw55B-^_a_|qP5au>VF%n;~ClKGBK zKr4IP?pbbkzNxV%Aai0xLpqmDG{hTc?V0jUlmch(sK9tjunv|d zhR$e64iA5@g3N3T$}y5p59IcoAUoRv@pw>>Y%0;4%CaQ>?lP3=MK98-n(cNiM?XlV zI?~OoC zvB-$Y`5^0{X%D#{J85iZLb3Z>KbM5i$exCY(+RG0?!m;sKxa19mtGa5=}Y9uC(bW`#zG+r zyXG!#ciWdNa9vy-x8x+Z{dfV7U(iK@=Q3`8VyJf@Wfpw80W2F_cg3nz?rXNyOJLV%t&*J$7hCaD_anl3j@)!bzF0pjs!tVASw`cCWMeQWYFkJ3@ zpPTGIqpj_@MIH0zyG?kbUq@+w4+91gL#Bxop`)F4f)%f2-(KkyqH!4GODC zGc$)r^6g0x`IJ*!5!u?l7OUl(sS4UVPfVsMhv!DTF)=)x8tPpFj_v7mS9iX3rPT}_ zeQ+H6+Np$|lb5t62NJn>(`@afTyVZM*`Lh}WoEi3H^rNBtIav&9r|HF*cAl(pxoe>a_iW;Di%R35!4m&&U5><(vg?Om94QN2nn z&4IVUI$}X%`^w;0u;T@8aXvjXlJew21$s2of;e(&Q;Gi)pM&DNGMW6mY+?vy}39Sh~ammQw@>I6)v{u4dS@e-~R$G$m!QPqA6(BX^YkRGmZtd{1 z#G|q!m6eN~T2p^L-kL;}*!F2sWn8Cy>4DVpk-pG+ZGo+W;`1vJk{+{F#6GA4p)V2# zL_=n!b8ZHDEQH+3<89hFRc5!H5iEjX^@x`0MO#r3C;^o~{L_7iucQ)#p(4`2DrtUE z0`ZwXH#1NkY|w+NN|h$WN&Cf zSb`pXHhQ`pp40_=By_*t3 znc6I^N*Xdg;f>p|6d}Ie^pHD}OTkGwt*6JU+-7t4L+3;NmG6Qa3iRtBtrw^_^mE&L zT~YYx*XS>K80|CB!o4mWwoEc8m^`zn9_n!&uQc!Lec*rrDF)4W+VcYD{8Znv5A0&8XI{;llkvnI5B;a9^iJu4-x z49Bslp~ax(22w+QEYN4kA3*SUFgZ9}N>{Mh1L;A;a(kDKrEXZebCDq14mis5k_ z`$g=PiDoVero*I3W3S5*edsvBj*mjmhfOQ^M;%^0u#<}c?Oi*E)xds&X(CR^68)WGBE^cCJN?&L5&Q0V&e8h2^iG72nf1qlW{sO#^m<;pWQEyNha}AQ!RmOe1HhPgMwNwHMq1nCULq&v^)?q_W-6 z&K|Ajn}3#j*4-J3RK}hh&O03~h?4=7`4#n zMkoWFN_l)*8+2%jlcu0~WSEAu9Z=P1BjzaSzSRri&9iBeapEnDr<_y>&C22}1rG`C zdAUhMiHh-->T~;az6p^#hU`pCG6&&>im)WOOyrbNX zdzvgQ$c!vU4X|_HooVSC7|HdQc#fXl?@<7#l44t@hmzUUAZotM%)3mz@UWEF1I96y z70Gu?EKjeDljlfLpq!h>L=^oD+9=>bK?FE_>|PFJR$%&6PStBK6Psc+L(ydJ&Zwhh zPFjulQ( zZ({w6#=6X}>=@bOa_{1*>GlQ2YUZBS{kte1O~sO#;nir*g>Dm~Ybi`FU2Om0*_ky8 z?V+(`$liHk_X*Z86uL#xWOVho)~FWdBfY6yK44G_2HN&Vn$ZleF6zR#jiO8U=E((g z2m+3?61^)aNLW_y7h(&2*!aK$^eX7uuLF4?1h_D1w_n2nuR=2zlgNvC@D^M)h@XI3#JV@vmrmR}!?a9cpGfEo3Xh9T zB|9;T0vX(JsA1aVLB)#x(K%+xyiH`8$Je_<3Pbx%$_YdFc08rSjIMj8R~TDo z1)qcJTAcS{#Fh2u9BkIYJQltqT6%ZP5$sC$Tvvm1ElJYhh*QqSy4{)SUIZ$OVQ1UA zqOg5>)W-XZQQz(~E$^w}0&5$0fTdcME}3a)wHN2od)mX5k?ftwwAzc++;NKmf$ar( zn{CjRDvOr4IuLlIaKj*+SHFis7TOcfDi~ zNE04e6k zlN1RQ-9fDFBm|^8TqW@LWbfRyI68@8cYYw(fpHLAU`t`nt5{$xu6-khkIe+Sv9+Tco{O%( z7CUGT9W+>U+iMOE9Pa0DHIn_%Vr8DVQ(0(g6n^k?L&yG(BTJ*~?joh{Ay>ut>!pc=5DU0G5 z@;2#ChoNN_&K@%Fim)nJ!YdRJqE&91I+SQ!8W+XYa*U9I86&~u5p9oqs;wz<-Qm>^+h@%9M&D-KF}^F6qX*4j*S&7 z?-b4Jm^4G%4ziU{z2xtz(ilZ?gGIu)#amrB1D_hvI&}@gwo`;yyTVEmW~eh=m6!K9 zsm?2mjlWPR<9(ShL^{-jVIin6S%62pm}d*9Fl^uQtDpvYji6*$lpET+GnfmbLQNd$ zFxr2FFzrCNeG~u4=R*RsgELG6vi@TyP1lXQ{-=LDN}x-<>QY-QXLl$C*?8u{#L~;Dkitip%q2;E&6y)5o_X6(_o6O0&8lr1@mP$DePj&hB>=;fm+5BJhdt_ zu(w3r9+{lj`ja(G-9s{Hn?EXZqo%WWHUjQ%63e%j-jOf%pbXzCIi(o0pqViTfXkc&59w9&k zws#b^SJPS?3v5By(D0b@*%=w-YJxqkUvW_ev(Pe&GCX&rP-SlQP!i2B=%2D^tQ;;5 zf*a_Luow%VLV8owdOsIc_F-#8 z&3LKjY9F08{N#3fobPbUq!=lTwqk!NEaD-w7j(6kbf;T#sni)O+6R!Q$;OGgaowBF z`bm9mm2b;Tp@ny3B4p-RpqIWLCm)XWmFmo5XY_B~-LodxrM*YwvC+15e=p@|F$=Zx z&Tg8WPtV{g@bzp(q?Opvt(!U+cE<={RPY*|*Ti$7KEBUD^^HDzZzrg>AmPi0d1Z+Zk@OWMHG-ED&@E zR7+yOZrU#G+(qXEe##lxWIx0^!gMLd4u0w4WMRoNNRWr(Tg6~QLDzc}WS0H3MhcY4 zOa;2p>!Q)7W&~G(27+Pe4SUW5-{}nxP21b?hsmc;9r$Khg)U!WFx04VP1?P=v-6oV zQbROj-MzH{j|o9wj0Qm~JTtt$AtC&1%6c5$P)@LT~0@ZSe_ciN20(d}frq4wXenrad8_c8co#h)B4NZ6v$nFZ?)veH2M#l;ywvcBL zP(+votV3K8@Rs3Q4A+V`WJAC^v6bB?Z=q>rn37?kVXC`mg5ym)r0Nj=%)5Cw-79Zt z?8zaxs{z~{3`Fe}^2l}vA$eEy+}`C(@zH4WEqOQAHKTq~*vMS;1M#%Fxw^Rnv*WN3 zoj9=kE`r@-wkWfL_t5Qz`GR9j8=dV7^zDO#)LVQF%i9e-VV6>)LSw3^g9F<*aMK+~ zFHgG3+=!j-Z70SA z4Iy9k(bH-lFBA2)?1iQf2P|1p)(y8|`_gx3SGv`V8f)0@hBqCmtV?|x<;1_yd5UlD z$P*o_5OV`q9PSvx9&a|lwhMSy(|XIVrrA8Odfkdw3!dxqup<@TK4wEH}L zeiv1DaM?;>wL_~X-VGF5VED3VaSc>WnT;9*9mtTT)@598Zw-kb`4@A%s>;qa$N|SP zFaBoLm4wD&mGGBvwcgJX9bQz`_@=Ed>osFU;DLgEB-f`Wm>w2*fD5|Z*8`|pY))~P zbZ4hFu}`1)Mybp`B;bMQ>n=MHvph}&Hb89Gk+3q#EUSs~;qB41eP3wzJWEudUAETe z^be~&I}s&Yw1Zb6@ycE*k;S_RGDpXL4jP9+HSf^_zJ{?LXVKtk9FKep>>L-xhn z_8q-cl(eyv!7fi&N42*$eRqZy{DX2)m?57U7=RrsxmE19fmiUjN$t)F|1SN4G4nfY z+@Cvo79*UgZ}#Kmb$YMAhc>2q&7fB^vFIlaok=b$)`vz0sb1&L$IIT<|Mhx*yS|s= zeJx*Ls|9@>$SZlN5|`LL`Vc-cK+llw>)26C?v~3_2-nf4urSx6D0n+!S&eQB7NCZ6 zScgJ*E9>IL*Tg{1U6~l@nA_yiCp_>afbI_ZhZmPH1!={cqc=0?ChU5CVaEY|N{iL- zuBr-Bp=|5hyTT?KMeh$4RNRiD_Q$?!!O@To+9n61Yb|_YWy;Q>=t9?*eMYdjET>MB z9ci}b`sa+Y;90bN9N!>QRa}_0HdJkrSN#-X3cl%JxNg#s7$O9(HcFUEzcS%@a}zom z@(iShQem&6p~=ydo>fG=;!6?a4p~LSN2|(rD{NhayW3;GbQS(Gk=1SfcaK9o*|6uz z)0D=BVI*2z5|8!FFiS)5a|*jl+0V8`h{5CPNNHU}lH|6ZEl?;uNJc(=6<@roj1b$IWenS~01E+bt3_5)0A$A?HPX1O0!slUVz^optEGQECz% zYhIsG=7fC1_jwEKHt#KLKI!Sfa7Kmi@)kaEHf528hN`#X=V4LRzR_LyZc1@nljem! z_V}5_C6FC0nfcd6!6j@2W!VBOH%SX}!y+@^cO#@wFt+U@W^sXKPKTh*m zz9VbUz6%%kvZ;XtWstLByq4NPdm>B&P8(KaaDsi%_-id^LpDRJCZ-|PFCR4O?*$XR z0{0|dOm*l(Pnod$eNdu2#Zk7Dne){{`ny%3g>`VS&`F98M50A0D znhpd62$uhYK>qP(Ilrbej*)^T(Rx$#u|WQb`*I1IK3=VqoCeGP6=3S3TFd>19&8Ew z4`s@=oUQOz%hz-Z?o7ph&Ht|Ce^>G=oifmCP2a)|>OY#_$al!iVO;)kl74iPE|I8an#UnlaUmlrLX;%QDkVxi@c((zxl(sP>55fc z4L)}W()u|{;B~{9?n?~kfZ+4l0#85d9MU;bTnlyjRVB)jq@N|p%<6O>@!IkrzuxlT zAO_dZ3SGoeb`n49_Yr$^Y1za4zGV;d`}DI}@UNfs{!!oPH(gv0KBwXu9r~GY>B!jS z%%gI>jkgzkE)x9dXZ^m*ai8b{qw{8(vgc zQdu>;Dsjy4G4UfRN=J-h{U-W^J89|+))Mtbh=N`3hdRONdgjv`${%-MdB^v;`3!p$~ZH{;g}zri)LB7X`?l{I?O!u>R|&{MR#i)*E>Qocgu-dJ|G-Qtsd4lEHbKQ zRQ1pm5lU3Gv?RN!j}#vj-ebTh$vUB*bcQl8Y-4vRs-{n5cmxPXgjpM-damgf_LL-@ z8j-LhqS_o0k$p;7W0=$zeQODeYe+Q}^j~T&2piJdY>Msua=(>NMp&yOBGwHIzuW|g zL_`dbqzj~hYa&gThnuB-eIu%?!;7UsF|N2|vvuOh7l(}*Rbw7Md9ak;ySLdY-DQ#n zmiGz&G$E~tWHA}PDfrQ0$8Rcr8C1b>Ieydey8^$f@uTBf{H|jqNy^4K2ftkW^6+!u zryu!x0p~gR6^MGF0Zzra_!Z+u9y=MV7v2)`EmHsiMiKRQ0f?^FCf!*3gY#$!7wpX2uheqZ6Y6F)jy+5eLCHO}AS zw+p}T1x!C_dI4vzDDTF(4Zpqk{fJ*Xe){nf3j0On0M3U*`7q8M`2C9C5dk|Y&U8A4 zU#DIVLyW*L9KQ(sBJrbxe4maeoO_Bg)qA1b+fXMM9en^h89y1nzJ}|kigG`k`{Q?- zs7K>`rYN6{^EvpPhu;AF2I3ck-}(5(;&&l_#$%YFK3tSXigO&!7Q^*XD38W30lzW$ zCE<4wei!3+DSmWVaZbi>f~XTL1?4pSCJLB>vkkw=qCN%ZsiK^L^FGhceJ9CRWsj~H zG^l;-ohw~e#ut54I->TB8{U)pE+M zEg6@zHs2H#x&6t_U**LVZI-9L9kqSX*v|8hK41UkyK4#`{cfH6^tfj>Oigt@`|B0c zVz;O_FYOiKsjQcp&p7gVVdM=5K0d2Ds^84mIg2u9n7){N;k1eOKC-CCjU#Uf>#mM| zwO4)IJ>#!fKl+wAwV#C-JT^6A%yoSnX)`iEzOT3C+mGwlzy0l93vYY+j{D{|4}K`` zd)MSm-Z%cfU70?twPD$!ui|nyPWtl6%{!kfPnmv0aYys2kz?MzXGhALr%W2$aKW9+ zn&#YfdhYcne?M=*cU9T4{fi3R|JLj`DjqACQTtZk3wt^a)LNhU!^NfCV`q+x?KP>(Dg?ESFT@c=*Iw@_hr1rk({$4*`{c`q|p8Fmsx#ic) zQL}gKy|A>yzI4p0*Gd=7zrW>*rka%O=u0M~eY)rB!*^_bczQ$kC)chSeD&Iszkd0M zcfx_v($CvR+_`Llee1t&`sq-E_p!vW@15m(%{@81v-RYET@&`sjgP&)cl78bKP70- zzI6Me{r=u>MDN+xKD}V)gfULjx=r8Cx#O|oQ&-I1`uNK$T6;YZn^SkR`2xAuk0m+p ztr_`+!*Sa1r8^wGBl^G8&=R)y66K|{7Bn^X+4Qdk8B;zSFz}6kj4B#*yVY{u;WLLk z^yIX0S+;Yk-n{B^S!%dp^yoX6eO8xsWi0RuK7ISD_lCSOtZ4UB*QafokvVRg>*@+~ zUekL!zAL(J&2=9?9Qpj7({lQIQf_nU$brz01t*PzfeJ8&#<=e)&JyNzdINn>M z4%xM?Prq*-y>V>PqtDE^Y3f+V;GJ)Jemc3^O?`iQ|A`S}{`L7~D|USN?W6l2?>j%| z)Jy75AADy{*y^%~*9I@{ajl#@rsnbIzaDmE6wbELg^)1+Qc&jJ25=k>imcioNWM*pyB@#Tvy%sv#mxW~6M zCcW0Yc}C`w|LDGU!L3F1xRlDqpKrM6{r(9{BK1{ywnt#1|c+oX;RnNIQ zQ);WHZhv>pP~5+ANVm_&mwxn1^~CXIeQwNuYFp>mi4l!Q{yF^W$(N50`~IZ<>%VC) zJ=yl$WglF#rARjQd?qvQuJNVwSHCdvj87I1SY6cja?=;j6jhux1HPKNFC%{XgNu4h zI;YS5hpxP7Zgb7(SFd0E(89sVGcqZzggRdCDM_b2BN2N;&>7S% zG=85Rq2bqb!OuUthsGb-1)T?@LgU}n1)Y;m3XR_n{R-9JKD{tjgy`>=UGU%01$9Knk?N0APKC8R1lYe!==YcNd@Ld=5OS|BIP#5r1yXe>XUGUkfi*_&V0{?<8 z!2oUC95P>YvTZ&{(HkXJX=hbCUA7=*g&FhlB_A5ACrJbfX{*8 zvsz4SR2_dX=f^7ei5Bo*MsWO$T^w+>fL{)_slWB2Uoa1L&>V>9XNbvFlHmV7nd6(p z#7&=jRi4J-4X1GV(7c6?&(7iSRu`{tgx$~)bv}o;zrgE)ykr*irB^uoEZ%MDR)KG& zMFAZ8JjfyR)gbt{va48Y7|!We3pu}oIvodu-rMK%dK*7UVS<0_CmiszU?>$1z~uZS zhu4UHJ${COKhEJaU!$X^u#>oTy#A|ze`n@;SuXUV>+!D9oKG`Nym9Q~C&>xBBE48A zaRTdw91_eNt|MM8@IMlAYiZ?-?}9(jarH=!Z=!_>9JTx;^%C+ai{pghp6qx9_)PEJ zc)J$}_-G-Y#)TXp#3zjw^xJ7di9_L+r3*1AGdeW+#xa7Qq^Y1oa1$-G;BfMjG(^y` z3VlH=>_`=IFsb$>^qK6>rHed z4B+%z9uj;`;_$CTe9IR2dVjBg-;w;;;ucVKJFFNb;+|M%*W=!HVJF%5aJnCh{{91k zVsUi>w||%=J3fo!^viCdTjKED=lvsj@0Ui53Vkbkw{|9a7Gxv&ST@JGSEwC7xIhcks8!kpNVE#gee*SuaP z=-Xf?CiFKtsK1lW6#d=A@s9}nmjI{!F8>>c>-}9mjKi%#ai*WpqrT|c!f%sSh<;^M zbHF`$?fW5LBAa8Bl*V_akxIdY(^X=c(s71 zjNmua2>k3zIQ~{~!y)01(qfKBYn*gA;NT>OmPdGfMK^x_OvJtRA9)>Yv!grwi`otL zqel@BiH>qyRzi591Ew6g#4JVVIAw37o?3I!}Qb3Uy?{x$)BY=EHiG{=8Mz)ul! zw*JiFdb>HWLz074*wr+CSxOcD+vwr|xH&s6h2N2UT11|lDBxc~o|F$a2Ia#yV%%hQ zYv=va$KRVz<#ggi8~_{axB~4`JT!^;jEKOFjl%EP!v#R}@zD)M6F-e29zu-lQ2TPY z`DHGET|zNS1)Z|fIX{;R#h)wuqJFg1l|LkWuK$mBu(2Mm9Zh(u$K++`Q zTjK{DUw<-8DnP4PT< z{5nPStNj*EVZ9(^7W%S^glHr0wp7j9MZO{0)%)8f(Bl63qDP&IR1IUuN!pu z7aSfTH3=1hvS>S;q-fq;P_7oKI26E=`QG8jx)*MEb@>F z0WU#A)NZi-%ffC=A8|x+6npDyBXgTRN_*|8oI7HYTQL0+FG z;9uiR@VE^eAi|0CD)34ERYLv{J3EGpcJ&Q6(<3;%sV}#mh9LVXM8~OL)g!pT=AXpz zUl;xry#9H#2aU65N@g)X5@~_70CrA%mhIyA$MTaDFXU4u>|fWrRmAPMp2i+%;KA4-CsY+;AG-F6DSFBkmZD)e=mkY^)p z`oN*DJ53P&ViI(OyGRG%za$3}ZSKIKuSYpV+^Al}z`k{oYhaKh|5h;{(fvKs%;7By zIKIA~_K9e>I%s|PF5#yQVsnfLThiY!UK9O#iSwi9Z|k5Sf}6#H!9$3HbW9v3>~J@) z3$u{Ypcm>_BW>ovp~LSIdMp#`Z@T?ICi>MP=4HBkK7w9|PKNMDJs!RcvIGzIyHiGT zK7;+J7ILO|XbPU!3p)v3|J;jy5&leJ|7O+;NqToMr{8{RpnP@%PW;qA#1R(?{7W&; zlH9UIpb};(Z2^6P$L-;Wx?fA!Uzt)`?!b;pDa$rJJuA;q?wC_p;dGQwPfsZ-EpbfG znO)?Nva;qBmzHEzICILKSy>!4G~(4$Go54RIdYw)SQL}R@3UfiB zys%`BEjQC?vE&xylxI21a|)dmw%oML9Q>C?r_6+`v^2{oM{!wEPOc+sc24eG+hhhz zo0nR4*>tpTY$cc9X&IYE?C0lH7CEzW%E}xid1=LjIVIDXkn3Df<^cV~ywa@sg?WyW zv|PGm89n_9M|nkIX-P_fBX@3!C9N&$}P&NsK_FvqP6_e zG+<>qMzJJZqf7Lml$7R?ZB;ljw+w;q)S=lIVE!(S^33I z;M~aB^SPlfN);wJ9YsZRn5jTK5F}T|>>Ogd!pS1z3Gg{Kx3st{r`$mdGWICC_(`*X zCZev7DHa!MC8NJ$%*_~ZYY3=kza69G9Uaf z`!07dt#ZN$6cpu=kC4)k7Z~(&+_kZV6UCzm>f{BFNdhIDsu82S-GVpPP|nH zsfCLc=zjggM>tO^I3LW0Tcm>TjmlaGR6YavzPW(~;A2LVhBll$T#xp6f`fa;AbarrmjbA~&_Nc(#K^KQ1lA zpOU#_%b}q{-ymT1sgN0##*hC^Y7pBwi9Kyf35~S5{y~?GuB+$jSQrMt+=O`Y-9i;-MfwCS$nG zV$7KxC{xCKT8XoK!DZ!e0+ByW&(uYUOrK3{f!;8FgiaBad|hMg}4A zWH`W2gf&pNZB9qApiD`tSXL-R;3>ok0ZsV9UeKHqSJLMF-i))5&Cd;s3I6z1h;Yi| zZQ=3Jc9cK*;38rz0RKMrSlGD8&Ac1|s60=1m$Ye9Gqd7p*nlg9FmVR+g_5GeVk|G@ zT~_JDG|i~G={6zq;Be&k@8cs?oFU){6^|*bp!py!5HC4SjI0G&e!nN}`&A%fe@GQz zO!$2T9!HHdc=&vr*357etn-vo`}rb5dgWGn!s#Zxx#ACr9g6)RUhC(~mh4HL}GLPrukbf<>UsD+7* z2drt#^q9#3N@hsX_1Vs-Aa^xJPd(q%ZJ5Tq#EOE_`8Ha4@kc-wY6Ty@IMB6GiVlt{ zqQOr$e~_MrXf~lTKi^TF$+9pqyT49b$GdbF36zBr3bBkt!z0V1e0;F6nXevA%IZ49 z^2^saviR*faKy31LD%~5>z6B!%A+h~2$U>@asZ=lEO8hL3-cFD#MH*1p1`(vUg2*< zcvwK}=M6KiY$a^i7VgGcW9p_6F}1W3OT@-YLbYO2r3*no{k_*soB|?u=PPo`3u(Ps zA2BhD+`?A z($siJ(|dhfeCQ&P{r8DGZX&l8qbySaljmQ__n!=C|DIulJW|Aekw3~3a!bn=VD2?B z3#)k397sX3O3Sl&;=p`6E#xc-ykog-GV|{co<9xClVpX45MJTbW0n}sj2ZvfoVsbjrhs6So>OM%k3LSvQNQ`XW4Ox9 zH4)A}v8Xi1X$%;8r0Hs^nS;?2b3rZ*Jq^qVnKS4~S;*7`ouP#7_tO)gVMRlKA`y^b zh*n4QQPf6rxhy9e-szD~SIyG3KhUft3(LEPW&`6oNmUHwhM5(gnp9NcsR=z>gT_uI zr9r68OwRI?<)gV+uWG`TKrvOWUS%xJZJXP>7abZ~p^IqSxSjxKD5)gZk z$fYROJ3@3`H@xKBTr7fwUie{BrKt$AqT?nYClHlRG$ygWh-}`H0Dfka=wp!s&u*sV zX5k4_{qP(-CC@_aDBTAFT*B5G4&N^3ea^c`n=Bqsmb5CrD)I3F3k2W)wahqo+J z*&kasFJe!qm?#2+Lc*N#(#kT%ke-1W9ffr7izWsK^4o;yUOalhhB`he5g|+$G}fJA zY>q0#6Ra?^+B90&2=1MpU@}HU&MBV2hu}RP)?577d)BH7tlB}S6X7l zB&8^{mx%xs5QueC31#et5bm248;7qz>j;{s>USKc{VrF(#X7p!)^N=AuN zN@*pc1t0&!QY8vncJM7X{qE`nvr|fTCM@9EBK~~LiC!g9UdBQM zMJ+u&71;qBjQ!9eL{n^T2$?1V{`)CnQNY4kpi|LAnw-j?orQ?DJd4xqUo0N7AuTO% zIuo$s=e13ZvW#bx+93qP0)`VVOv9gh(xH1|f3YKRguh zwF3Tx6Y9b?3qRW|OJ?p!>mpsP;`7KHV5a{WM*%Lt1i_L|_H2OG?D<0#9_pFAc*@4s zReXs9t@4%NzCDC$v2B;A2JO7bnO88DLOf#>vM5OdH_2-RSeGcd`z<6r32yT!m{lWcv6gs(5h=q4OA z?_e`dmd7y13*OKY`XQfgFqG>0bJDh-p2Da~z$G3nT6)ZB5&lpzVrAa9%S))h9 zNt5ih2`MvYq8vYBRAAL&3Amah0WW!iEz2@ubijpC0eJjU)~FHjzLLdX95o`r2S$_h zUQ#%|)$acnfinHN;Y&-vK22u>b$x|BEE>SLyTCp7bueB$@Hc7_tCw+`(>`{nFne=q}N> zap-y({W|VPt(Vjr*9n%x>OG~iL|t7Ri|bL+1)~1(OLOrmVx*KP>Nha_2q{I>ow0Y} zP48~fG}P$`gT+20_@R2g!a}@i+e5le;NNrSeK6;fqykZ|JhKpQ$aa@1bb4n{JzQEW z=;?o_LcC5cndTE!d;?zm9Sa?97Vj6f2EiMh9A689w+ncC5ZqkJ@jHUx83Hbe_aXIm zs|7qN2;LyzrXYB$fJXoxFb`V^DKfWLc zu7BUIEC{Z@-&q|5w~G3*Ah`a$g!&-3{ym-tg5VkAJ@OSnaQ%B5tAgPA_jNV~!Iz7A zOAtI`7nk$4Ah`Y>wiX0$5cT#Txc)txjv%=Hy|*awo~>>tR`DI6=peZMT@Z5+T>s9& z&>*-;ye}IU1lPa+lo$lJ3VABQaPdLCj3BtqPj(R8D(VG6aQ(gHvLLwr{eY?L9rO-LK`3@i&2eaufVF1i|(9`=i8r^*X*@*X^3#QpT&~EY^|c>MPt19^Z-hd^nd}5uR8dS6$bceKBy$EGQjc5xbJ8* zz~iWKacnfe$LK(uTMTfk0lv)uPc^_>4e&GrTrI^!1~>*h|M94we+;9(Bgz2B0Pj0Y26%5DRFa|%a16k{!)$=--*TXfLk)1s z3-lw-0LLdWd`F@Ij!z5t4yyrHV&2KZxHRL6TD2=nU^{QC#by z)=HfTlSd4aItSbFzkHq*C8`(Do!-_?9D^rNokFy?h1D;jI)!F$Bdd?1I)!9!1FK&^ zbs8eQ%UOLO)hRT4>skFws#8ezR^MdQGhUIn`;X_DZb2h3XVyz3s;U82mofDYSZ9 zS$z%FDWrN^Sp6-kQz-Q|vid7jrx5CGVD;yyPNCDgoYkM8I)zMcJ*z)NbxH}m)vSIO z)hTp(%UJzZs#D1HX0!S&RHsns&0zH#sZObq*UIYURHu;XjbruesZOENYi9M?RHqQ> zHL?2DRHxABl~{cm)hQ%;+mBNJCsW-_^;TA&Ky?a%-WFEBi0YKOcpF)L6xAsddK*~% z0;*F8^e$)hfmEl^=dEY;GpSA?&s)vvr%;_jowtnDds3Z3oHv`*!>LZ8&6~mMzYas4 zLYmjg>ielqq0Ae{>bt23(7DW2EF>Yr1cLYY@$^(|DV5awnYF59C z>J*y1WvqTH)hQ%-vswKXs#7TPX87v)^{BH$@r>^U2O;;?$o>`g_$J(-coGgmZi=V> zTGX`H(Nkcy0`zXg$=!jzF3P(E!20CrGi>U?OyEDXI$TnZ0P9)Y@fImeS+XY^j+&>q zBL7=az91g2Z~SPMn&DJP01$6k5p_ars6K}W&>}E`Z+MQhhh3{ zC+ExO)!=@NXBWcN2|05X{%~I-Fe>+GZ@|3?*6AQ-758n7?L1|4Z`O~>vC5Kl)U#`5 zC11N1nwGYu$PG9s@vo|43)2rBfROkoFa0a-U6Ir)7#Z9!48>^#^S< zoC)x@w)_z~Zxl~KwutmW`l%G`pTxrW zZ=v41$LDbT>pA{iI{q{re~FGy_78ju$G?c<=j!+ab^K{MKG{F;!#I9Vjvue%@Bfwh zYuRg4H(#fy-zcu{+B2rxJ(2IfMat`w$xh>kp--LtAB`O(9hA>Yg&BCpZ$@Q?;)&dZ zvy#*Si*lZUp|G5)7z+E$>TLDvY}Q)Rn!k?w?<7P|!mW%<>@l*)reoa{wOwh_E>*%d zD4UNtqd_o95bR9^bsGq#S3UkJ^h>H7skp|!F%+d4#7}Q@`%K)fodXeQ3c9c%lEfB9 zw^x&$A6N^L=ntXK^5z4B*LD9@k3vNzgR8>hVEVO(DtjokTjW|dXejE(_SkO~*AZD! z&yJa&s<>xBu}8ubwWV@Sviy2P%(8F>b4SD|YFg9=e9TiJ*M;XqaL>tvDVdnt2)-;^ z6!m-Z%M_?nardJe(a;PN+|^E3nzh(p=*kSK?HTzzNPLI$v9@m@)?42Um$bbd=C9#k&66lHQLe?W6~)7-0jWj5 z(!6w=UQ{Pl0bx0+in_FcpH|_tww}cY_ax+HiQX6|J~axTfeLZR#O(Re=(t&<$w=)E!{Ni7;Z%Bv{i) zih5X4VT{@)MB3WMWOcoK`(wC8@f5|FEIWifs-LH-$L#81Z6&Y}7Cv|*TuN3O---by z8*=z)lR&~!ce{Hkt~C*!C7s8P9Xq^vz{bJVIGkR!smW`4wz?WBNo`U*lf%^wik!OH zDs50!!Sm=?thhe!X1fslD6zYhq&4%CFlf;@Fz#mzfNR5&lfIN|OM$4kuZ>BB1D(wr z$gZ|lj)CkH@}cBe$=4-kVE`IG3|wkA;7*(S;us}qA*iZrosrtPjLn_e*28d<98~JN zvX8tQ$UdSf&+{uRCk6@|NeaUNt_g*~X#VlK-)Q8OZ~5{*=I*|n1F-`B`0ih+zpD`0e_wy6a{Vm= zlL5}Qio%n&p7{MA(ceFRIsyH?gFkDag@LCa{r!Wnxl_xB>a?Fw=~90Ok(;_YB8>X` z$*k+|0Q9GaP{01hpiw$`m{T-06Mzrno7Cv4bLWg0H^#6@`D#g1#S0qR6Gfv;QMZAEpTU9B)EcRDON}uxRus1h>B6bt#*@~GoMQgNELEdH^E#wsI_v8Utbe~( zu&#`|I7Y5n03B(!?1R$4ORW>NRCPD9JtFZ>mhJK0FENmKGLXcjq-JzL8wWDfi`t6_ z;x3B8XmxE2;LLtcSl zoMrj5udCl;I-z%U`%8W;9of^_>CFT$JiqqgSFp(m@7J>i{C^TY4PIK4Prt4WNLbd| zlMX}0*9d5ob|)5zh}9lYdfV2vPujM$wE(T{YomQq{(Jf$32D8e9!0i|{1&N?`#s7z zmD)}a?8ykeMyaXdS^WS`+UZyx!i__5qvF1~ir?Z{T#vu4_o zzHr9y{sqYQCDIY(i|ZucSu-hHXX3q=X|FO-@!ULAi^l2|+KD25WD>A<9xiiwY;Iui zw@gJnqMc8wRd-(FoeI3b`IYXE$ZOOCSa3*$g)1tOAoVjvogOpP;DiVrt3Xo0MSDzCdTpm%GqD>c_wJ`+C|}pH$VQ{uOd_tQyB9|T)j1{IJ%6ZO{U$x> zdz(CQE9P8Ilg+)@Y*&BOs?c(6V`X%D?Dw`MwC1*Wu?YpxtX}wDs@h)LShdQo9t9~A zNL9Y3B%uYlW>YvdS~)a5>7ZTR52~NAncM}$llrwi_9tZtd=11-M}dgRx7~+Z)Qz=` z^0M1dqRyGf7;H)Fol$m7(mrA`sEMfuI&^Cg8jPhTW;uZ&G`h@%_Tp~8(99&X+h`Er zLMuSW_sTW#Si7~mUyUJ4R3J%48!jBx)*Jqt?k*-Yl8*!O*^kbMo{)TQ2F)L}nP`N| z=b&u~+>FcTH_&79Y31^111ZR7FUbegos;eEn;;t``@i}muDB~eai7+mQ#>zSZBLKw zuq{DY>s&0~aUO(%3M1SrRc(Zz)LwwSNBXtFMn1xQc28NH;CnaR$on+d5orHofohLR}F zxL(EaT-9{Op)|Y5b?HEHIV+&(YBX(d5pk*6MRKM?R~Q1o`KKZPz<4or<*d;44P391 zomqBjj1}=T1N>&=hk=jmU!7vL<2HDARg^|wOoyS_)MlI7LV}31gC#NiQtlT6g>hWK3b`S z2KQ+P!55gWZH0XWc#nMhy8yAZT{i#mM1I|uq)37ShgLgd+_RE22dOsVLt{6y~gsKoP%VsKW ztoeAVsjr zW+GI^j@|t-d6CT%F^pP_ORqg7*W}P$?t&=AjnlQ{|46CqYP*eAqt~~cEbO>AT0uNZ zx4VmZJo_2Z=TnOJr(jHk%$>*+>vri8?PnV;v-5~{6irqyT%D?Fh-j}XYMX+H24a;f zDWbtle|Ao?yXPXPVI^U=9@IbUpTe2lQ((s0G>>HHE*wH}BVJ`hQNH>n4GJVB^{eD&SUm28_;)Lw6=d@iPU(;9 zqK62Ga?M$=2RM*|B@tXX2i5>E6DoxgN?p|yE6J}4`KLX$RcY#ov?q1QOD~`WawHxD zm>el-x4{fVW|sg?ZLW1J^Z1TBTgH=}a{y;CYnts-EjS%ji&&fKhED5pgv~X@g+uUWL}Ig&je^ga$PQ#&?*(2Ha6uN=^!6``we_I{4ub3UMH?<`uJqA}7-LwLSi%44+LHzm&d z8cU#I-->5C#IU5f1$L=L;BkYu8(U+2o76%vTS@u_&HVZ;(R#j`fbQHXd(tlF1^)R? zkeojRGRYZOmERG1dhK_V8vLNGWMnF4!mkx=3_VnF-y}Nn09{gd+L6h5Q1pI>)YtD(#}(x zy$uA#z{^zY*SS#f$!MMhCKl+dQN$(J5etKhdyxzbkx#@tNa+)>LRsK#q+Fs8{c0}( zzs)PEGqrYPGHttP$@=eKbJabHyR>J~sP-MZf34OV_w%&)Us?zfr8VD`x-E3+U- z#l3O`I8{8%aJB2nwmdhPH47f%!&cZdB2pVon2=~2Bx;yH(ELE8seH}&ASCSC12ZKx z)8Js3Az(nE<>E91)k74$&6LC**0h~4dQZOy_B>*rwuy~!Ebm{z8C$lT_(S4B`K4U5 zj12_1-Hu=mD`)csj0J7I^6T|{)^2mpqWEu5I-tlCKW6ct<+D8gqeW!2r`uyOr-9QV z{>vz!6~upa8^Zq^>FPc`p?%ek6fR;Ru>kl3L`N7LpK4+7XaYzzB#Gl$0E;crwBI_suC*kb<89PK6CXL~9%P zK!|i50;T01vMsHNroogbuaj%i80qa86=@CRBolbVc*{bOYrQEMU9;Mf_VP)X4dS7^ zT0#EWn>`g!x5>5ihxXt^GXv6BD;$KlM|()Xgl?TZc{UJ6bO?yioERchES{8ADen4e z>IKI3FDZ0mEy|3Qpc@_ymoRec%TcF%L6uYCJ>fY@#hdcH)sW6-d7 zDxj#-sB;v|3#!l#n4V)tY)GnsGe7%Adu#Rn|zJk{6 zUm<$88rNHni!VnJUzY4y2Km`Nc|q%dRhCAcv+(c|=RA!)l%kBUW(T#45|$XcE1qj( zGRV)aqfvvFuRQ&4d<5%o>P|8(SO>I&LNqHtcSwKBfk^2Lz-ApBrJchFI02`Hs2>!S z+KL{D+tJ4i`LEj`$+PNh?n`Z+E79s_Xmv4K zMaBn(?W6S~ijyqr&tbx#l}^_>%sGAl>U0K5jj8fY+A2@MgpK5Euz2leaVPH@MiJJ# z(*-n&=xJE}Vcn18lz%10VW6)t9j|ZO>Q8>y`r)MLwSGuFo}>Gol~6v0g|`|9 zs5bRqwx&)b*vI6h$t;3E3DTlrK7NqYlm4-k7NwcDlZsJdYkaQt@ci9jl~^(+T56j; zNwcXNoacq;Ki!D_W3a3Io_V0Xn**`L0ZQwJDyn8sq5iysW>l9FNBR@fla!#}L6m}I(g9~ey845@o(2OtgC@sz6<4wHIa+aNvT4dGJ2?~F;J&K-6l-G;;4BHl zCFS^B{sHTmJGY5jlD=Z=nF!ZnJ##&-fPcx}Ee{L+s>9?R!Q+=wyJ=A(*$tN)I<0v> zBP(BTwz>9&RsNv3)1olB0lE`L6Y>Bs>F1esgbK95N z0qVQjY*)Y4wrvI7q$AGL1BA1NVXrl}eWx`u+_lhzc&1((N`!xt{#793| zVDSq1F!oINb78je2gCklEQF~WZLwb=ieT2=jV;o>Love>FWH)#J4gpf?Q&fsU~n%* z?H8kc@hLSp3-U>iN>^KH2aio%ZwqTi&XpeaqZ8{V;Wo89$q{J)E%C8%!WR4@Vzj-C zU#htyaN|dpc~T>zu+D8y`r6soPUg2CX_Ynvt>CGCIyOt`9+(1Bzx4AW}hu8M)?sHW8wnx3*DHlcSJd(_~~^HrDp0(7dME%5o^S*pg0kZYD2KLy1Uu*EQ|^)3$v+3^!ya7V2D^S8oBlsHc}x} z(UkCESYNvOJtlqNX$K#`L5~=;VW*s2^BoYBaWlc-ZYl`|DdgEbH-SBRa+d-2>?(pF z)}(0$j7@QjxkScXniW$Lt2+%hr-%$Og|Vh~v#Hl%kg9-(BQU|rFQA1(oB9>8R$D-( z59h(wq7eQ=V=ep(ImPE%HR1`{h;D22M>IZd+PaypV9Hbl#;i0q;!Fw#??-U$ZSf4RE5553Q{cN41;iV5jdv)CKwZXNvH>To!``l zva4z)1fNO92Rg_gJ#-7LHt*Ed93fdXwMFsxuWnY{mjh`_M#M2b8iHM+X&@vBmrC|MN^u=rzj`ixw!IaPj?4Lw{V2pe1kP_*4XIrDT z6@urK-SMEhR*NKRU~)Lr<2PRLgWZnUZGt`apFofwk}N%!Me(O**sn{Y(_ol3Jq3N@ z1CVf~3=IPd;MkW_V+U|5gpl;Ub1Qr1;4a6a>(Bg&FgCV`b~lG6H*XFi)ZKX<)LlSdj9WDG4cJD*kXM-M8p@2=bF=#4%6a~Jn;w0 zC{ID>v1CN^w`q)}%G2y>hds8PuM#ir%~yyQHeku@1=<>CIYgo3C2P$go4UPn77Z7* zcY}xY*kk&$^LiXlj@SENgJwRenG@lTSt9rw$%b8ywq zuzdRz)V<{-`+DLPv6?pV`ZkFAHIk3{q~e(r#dTs+u~=clMhVgkvY?v7h;4TFY%pE| z8$V!oPsF<2C|lAVJTSs?;s==A$hEIPS{N&oSWRDv-%mPZEAb1X5W>}EAY)6KMREZv za6%dhA%GTi0T0MPx{1-GM^v;Yfp))FAv?sHD^kK+-=~g}peoO@$L>=2^Dp_1SBQ$R z&7SlKOjaKwkZVD-v;+!7SH&MHkV13)<_d`(@}pmIc9;n~`VT zKid|&M{H=2?^sFnmhept*n5CY4d_2ncHQLf|8~d#bNkQR&e7v9Q`x0tA9ijZWUC~h z0P$EsX7Nx7j^@sS%E4^VYV<{MM__U;cOENjT%+|KfPE1Pq>d zJQ>vd|M+-PjV^TMQ2uyw(T4w}c(Qptm*}62Cl9gPP9UCqjT^h_zCWIfW90uoA5Y@f zbrDa*`-}hm_n%;iwr0>|fry7Mc4pAn5V_K+yYV!F3w>G48Ydp@)%D z{+z6SqMZaP^dc694(uG+r=3og(^j6aAuf~gp#{O+f00eO6A9IW9aErx9KCmTI2Is#?MEz;zv(r)vZWz zQ`I#zRk<8DA#JNn^%R6*bX3=CS!g9acQ0CDV==Z2|DeqktvJ(dl#3qzG)z+-uqAys z|5{8CkZhi6qZMoH{)w?AeL6qO9=qEfMsJ7Wof}1-)IyW{4w|wV*kkiGdg{`g!czAQ zm`^Jzc9QvffX88_ci@4HXZ#?j0lQtWt#mV_2zU{P_X1o|H&foYTYDXscpia1dJ@jZ zwYTEf;7xC7opbt616hXfFZ54gFHC9Jh!WjS7_@pY1Y0(%Z%&l3Zh#a;ez!7(@`=YA ziS1@>Qxj{qr;jME)pkMY3#@){N-GVNt`w9Ob4nd9ojp(**99edyvr#)XrRHc(po9`9WnQS>ByVx;s;7nF|Se$JD_Kxu)X#N_2kc1b8=ze6xO%8=?mFwa- z?ry?O7Igb}f!hJQ1KsXq<2tVQoe+IX#xg#~9Z0wn1l`qL;L?;1bT2XD-WdwFn_QQ{ zaTnhTx)Fk|BNXmrxsLX!g6;^SJ4N6og~A;s*R|4hPr@|99WHSDgu=a0u3N!zuOQrE z0{3eSL&xd3$2=!!Zc~BBybuxZ%}{u@c~;=nEe0O9nVs65gvZAOdIxjG%`_ep%sr0Q z5ZNY#N5CJAQZwEK+%vw0a5fQ+XM7cvSMzcam0#xNY$`v^%hRd+ATKLa_VDt>R9?c% zaa6A4Gq99^$xLmI4=V#V~$Xgu+dc z>t=IYFVRIx#Bdje!cCRyF5tM4)HhlICplzbYKo7_1;w-uD7LI!<;hrt%en7Zxyf5S1#Iu`PLMnw7Td}aAfRn z-v}d;7$(0L5B>O7ndbqtt9!`_l77QOi-!pbgHR?cPWy@~p7A%+-D{|2&-fdt{5mf? zsQer+Uq$6dc{!cRckyyEmFsvpfyy`Xax9fgc=;SE&!)1vp0A7f)+B|sBk`pn;j%hP z-h2lC7L>$ZA*UhXl{audXs|;c5|ZS)!QAp(6bk4|PNd1YP`G2{y2m;0{e(-OXd&FI zL*XL46>{7s30DtqBSPVV2MfpTTx8%OJQQwUx$YNkdHJ=#Jw@=a_4N>aJ6Eo2;<%R) z5A;bN;`g~wxF^eXD#sl_bg_e(;Vue=8!y*g&T&sCy7VaeS7I=N}X9nGZwUPB3gAz+-Xd5vu5TGB?&T!g-BwJmd4I z{46ier1B%YY^U;_ylka%EicDYc>ymErE)PZpH1Z)UN%vA1}{fY*~ZHq^H3ho%X_G7 zL7BeiH>a7W2?c8)uS=yD!*YJEfD_LA%RaooQVUF;QRba$-`!EX<_?h9<$1`jtA zu5bJgh1*lEdy3;;OSsth&FFeU;ey{Hj$60Tz;8|{+%x1ldI1hRn20WYmy2YU5DFJ` zf8+8UVWivRc---{%T=yh!?DW<`$a){$15QuakgA{E607B2B>oc?n|L?kzGyWxEqPC zo?W>@;bP!BljD9sxcb0%+Aj?uWPl(X!*QP@+3G>~ z!%(>Jp*?U&@Vc9L(0%CfP`HESx>q^wtwc9Q@LL%Q7x8)_$9;_GLUgQewotf8S5i6d z0>ahPm2*Pjj+X0sb6n;Z@q+G8FNKi9Sh?;KK6qY4{3Z(A^`USfhre;$Zz#s=a(FNl zF6<_c;|?Ucg9P2;KwPF@F`xUG>`T{gS|A?RFJgn3&)r4s>#^aCP`J>qn9sd`6L59? z?)^sy86?VeVm`N(aFYbDO`&ih12Lcbiul!KaBnDF*n*hPy-Rd;TPO^L3*Tv_c0CER zF(&zZa(pP?L?QpJxDRKZz$YRZ0tVSNYndb2pLRaWA}AL&#w2M@cd)S5f)s3#{)iQ28fbUQXp*ynGLpxAXEcDu2k!3#r`1 z%Vku4jhFMN{46ier1B%YY^U;_ylka%EicDYc>ymErE)PZpH1Z)UN%vA1}{fY*~ZHq z#VC*GsCH@#+QNZJIMR8BYRClyxOTbJx5i{W_%tDZ~Vy7{stN6HI zv$mB)gr#q+16203xv=8L-h0FNcX9%@y#N42dcVYsN4FdBcILb&yqt^q)`ip~H{*wGAlRop zOU!VHpTl?qhuw)o=gmRfJxgxku9RpGKi_;r41^uSP7*AfZ>ELw_rAx5Dr`fyjhly+ z_WjP;*pI@twa7KJMM0tOl&Gv9*u}5OwdVuKUbryJeJA2|pLtR28>_6p=wqUPZ~tUW zHx>PP0lsnNU;m^<2YN>)m$8S)z15QbLxJbadVAolXC z#SU=rLp$n@JqIokN?r#ZU!Pao4ZH7Y{|(!pd6&mk=aiA*p0T>59k$D zh4!xPV+!q!ta*JaF@j~bhrCnZO*fRTt^Aa0-g~Q#` zhMfS42Rqx6n&g_7LDhyWAh1Df+QUm`%ox>hrFjA}T^PXx6RzXghs}MOlC)p0sUgvL zCWG){MkMxMHnjtvrnx8%TLWxOT4dW;zdTjE4TPoX$)Kuq;Eb}h9lNbM7->Nm&HGTwXs1>&}n%@Ee00d&1!RBfw>$QTErNd zYGwuz`#yb}!{ZzkM=uFC?Tc))u=VgjJ_30lwtRfF{}Dd0%Oxz`y(o&9v4yQqcMnO& zKDq)H>{^FiMZZ;km+roVw%fzJ@V+KpP|rVN(DA0q8_|NzJVo7rWay9S4 zF+9%sc89sIoJqUe+>E;^z{hmlod;my|faozw|IQ{h(q|{X zOU&6~e^g>O+mb$#>rR4^*pq%v#}3D4JS#ysl2i8D!uHzb2^u|bz5nl!VA%R(*D)B| zI@u)yKl#vx2)VWvr8I2vI~mpR4QXJi_DO)SJtqTOlV{@FfpV>l0JM{r9#v5U$w&{| zWmj`E?CRWXY+an`{iok9X#(Q(eXU6TP@D2pXQ$i6B*&%2q#|#WH>n)zB4Nt!b6Ikk z$s1J$b-PHcRAb_Gk!-0(XT{BgsK^@?E>7<&;G&-TSaCh?+iVHWi9MPc_H)zTZmRcy^1Sy; zV}EZ%MBB`61y}6O@PIpiNe%m{$=eP0wbju6O!gJV8Ke3}mLq#2?o!)o_dlvKHnSgK%^#S88z6bEx85mmy4a8cXOH`_`2e$09X42ZS7bc5!k2w z9jJ<%-|0_!dgFygYJy_QTJ04kJ8S^or_CpHh(U&Mg8DBTENUhv=H{T475$KGy*inV?qKqwJFkza2SbiJ#A z74W@5#l4gmP%d1`*m>*25BR}e(2`$T!@mOTx7XnPJ_s3OEjw7Qn$+$b=e{i3edXDy zp5!psny~cTjT6T8yM5t>uBL8EY`c=X2~@+8m&}h*KQfeg%l*?ziKA`L@5KKX&&^R#fPV4a@!x7VPe&8K~Pm&rn+wPADv} zJx1rlZSj1|?V1S$aF5S=VXM>KRFi8iqI=QuDQFpIY*UIxNp(?6xP@po?Fv_N_uAFx z<4|dK5hrvY15jKV-Z5M+-!`3u(Ci|PAOh^hS`C2I)>E+KxjxL$$Arg# zom{SL+#04nPsEkjHF)j1TkV!bQ}BkaWv|^cI39n2!tNRNDa{z#&h*<00(caCSzw@# z-o--|H{P4IVv5x2Y^Cd+Ex@S!ip0vex<=L5=5okZ7gsaWCUwfPg|f1Hea}Z3lq63=~L%;L86y}$w||%;qKHse>=cEi{^iJ*aCk}{!9V1qCYA}J{mb|!$7Dl z%JX^pMam`9*br$u>9l7rPfzk$- z0#!?Rg#m^_B^(=EHYx#B)|1-{)gw~Ce`Jb2B?)o4Y6$B3z!1=<&27cXQG z=Qq#|p655BN$^DBi;-()5mgkcbtp!;JdthdNF(^lxwr>uOS4OY2?z>NdXZ$Kx`v{vHN#r9+1v2dd{+ToCezasd-}jO z`F`YtP3Sm2p}_B>4r`A+NFuo@gC{F5KSceFoJ~aUXl+*?P({r8@IBz5 zuW3w}ZxfeTFXH##fct4S@GSNnQ2&_Q@n$~JE@tX!M+(OjjZ4t=sXkq^uW+<|ZQP&Pwf)0% zBWJB8Y5&#suR3G!;hjl7A2=PIf(9C!|A%~_8HE3k4?M~g9+?IFf8zt&z^?FtV!Gi^ z_`vv2{+ti=sS5CcbE9Dop2#1X{=5&YJq#bX?o%WwucyZJUd9{&eqel0g!{oo2zfz% zaQ}UzAKee0y`TCVIf0l6_Jc3+kd^#k{X4*cJ&tDr4fKOT+)uXpI3ALbA1s(3$PukFX zLyCJfIWu?0XGk8N)fAbu9sL3Itk&SE+Dr2oqTizzaYPD{+O#dymDPTi&S6rG+>dxd z^7aMWS`oRu6ll~L1w6>4RcQ_PkX&|ZQQTdgrR$#64J@EhumegT5}iA8E5F1E;VXXh z@-0zvPy0W_y$O6&<+=EuNhS~=aDswHMNRFfMASO9J9N zBc_i1+rU6cr9g3&J*O!7Fik1DH+PZz`tO3*G#>2kc&5-F#hvyqisx)<5s;S}96btj7 zLW&iwuTw+o`|{70%>BVivyXjNlCkV8QCXv6K_UkexsozVJQ?U#^Xj(uc2PeDOB6z9RSq{Az>I1ftt!o_YmZW-F*{GMGZ zP+$fyv#9mIobNq=>>Ii!YR{dVasIPxpW5Uk@jPOmP0pHzaTp6;<|DC($C+Sc2nE0q zyFsW_B=NgOenj902Ev4`OsI5BXc4PHv{q*hU%y(-@SG+8CKjBXjVwTiGe+#%&wVl=!@s<^_`tTt`UH6O(=%#1o0(uqhy^)NEz z*?H2@h7$$*fRp}Ge~D9p9F{#KxOaPnX+a6EkgI8eRuisQf)% z{u=U=6X>SXC=DTN)8_ZpBk^Gwb(X%S&oAwhZJfW}%3LXBOtDAQ7Ss}e_?TO)oL|#~ zFzUwv6lj>*#UKQ7r;Jd-4eZ3|JlTjpBY>1w@09Ix;)_wjHEIZDd)DpGY)RgL1|}Xo zrQ16{B}+)pFx^P}5WQjuXdR-V${&xSv&x@SxLr@Ge~0Q)T=f2VFDb2~_Cgu?^@sIr z7i5r+snRcXs^8^`p&ODH9#niWn)sz4A$pKV7??fP2`)Up&I41`V4b^fSHJeT4XOh( zdF4W*Ec=96^G4MAWwvo5>f46MvC0gtH|#BZX$cna)AJzUn`4VGK zcYiUYTl(@(*{1Wv5_v&FvnvPc+KFVwN*Q}@ zs*JN$mO-v@SV&v0pR~Py-9#$WA$`mQmYI=UkF_dNy4H1S7;&MG*s+jj9Am*2!Hbrb zt@JpujDO^>s|pU{gk@w9H~bsTRlfbT--?KgmAJs=RV2gP*-7Es#hwV~#~(@Qs|eAv zKN|eVi2p>U8xJ}%kM^Ly84+K)@>%bRh|hYkcfS4a_n+^oz4&kY&qK<>2K1Uu+w;|p zw0hnpFm{9_#v=X~31UZ2Yv)GnD2x~8S0uJ8>z&K&+A{_cS5-OI2Z}%If9F?U)y}_< zsOkd{UB7w@^1YJn`+M}goqzpj7E6QR6Ak{g?qd~~%7e_9d*i8bNDuhV~kcbP_G?WVQ`(h2pRhb`Eq=TL>bED!i~;rjrP2Pcax3zd{08 zxDnL)9~(jKArp78B#7IW1MzMP&x7@?lQ#*7)fm2rI24CW_tL!F14o1^BRtuh&tU|MB@6rDpqY&ey_* zW9I8uB>i8^7c8~(8R16+kW##e%R5KH-Imw(gc>GKr5lQGdHhQllhY!QC5-53Tyy_4 z1E;=spBBr9w%#{myw9wct3B~PXV^!r83lO7(%-|evfiy3MOp6zyUKdEW)x<; zWg_d%;3M;Z-rC{P_z}E^h%O#|=d9Rf#9z62>lZSMiK_?~-5|xy(sjxy8Qe5uvz8yk zKh)kIX(ldxp6}47t|# zJSGYavu2g?T%i%%UAHk5Tvzv|Zb4PbNVR_Om3OF7#S_Rl;bpCn6OAGqPNNeTY*yCy zCX9NHU6E%#8k#pNKc|btd`}gq?(2``w94MHHH#JkyxYOzDL~*y5U>v^v$4-wY+JEcQfenh+Umah)W~9ydtNC zMTM(xBFexP0xguTa{fpQDxg;8*`X@c%uXjCz*Rc|%tY5%a~^lTGD!m&zj|k?_9b`) zQq9DP_6WZ&Vm>-==miA{f9{Ncv9!+x+|+l`nA{w*rq92bzBO$hDLk>OyTZuK<;4G# ziOsRA^W67bUMq5B0H^!btv}$(gZ795RMfn#w57ghzeL$;oX)o+etvBZI3J?liGP4C zOLZaBM@+LG#8spCE$j##6ySnpQ6cb0*Y-B8wMb{Egw9Gmy{3;qgqx(eXc5vsQO?HA zS99O`N5%`t+Jk?6CBp)88Lzw+_Ina>3LGMdkIG9c#+ws^#@Ihok8klh!iWl zKDmH$dcLk#vzo?8)=Q*bRV@e=JJ5Cdx%^uoyWbF3t&s)Ixs^mwXs+;Gt$uPxsh_;D zx~5k!!GVg+PM&J;_||o@YU%np-8HgA)h_yo1*sH2i_NaP&b&A!RG6ZN(8UUQZ)tyL z^2mu)gda&?hRiRH3HfZ{Jo)91$3^;y`{uwsmZ{{5w8!_g*(52ggS$0m){7ZH&FFZw zSniDO#EG4n(T~)Nn$dh`uoMFnK4)UH=(CdNEVX|(WW6on&W=Q^KWjlwOnWz@tfsD~ z2kwBG0i`B}KWi_WtGhClE9|iYAOIUAi22Rax|%)!5{RnVXwNK|6t;#I*<+wmZIlQv z8pI38xS`o!Deb6uuFph1*4iB*kkp=P>uoG|)*8scu|~ry z_ltm#-f&teloc{oDe_8AJ8lxr|xc$L0xt)7j=95 zQpqui!tTV0e8dJ%a-D1j-!v_Mpzcj2i0pK}hF-L;cWUpJg`W)@T%if+@sfb5`#O`5A+P@Z z^C9=cf5UuCPtS+3bWnFKuQASwc}IOld^S_YQ?AhRw|o6TCgHpGxB><* zM_>?J@RZdK&u#6Q;ci9y9AkgWfZqG4nE?wDi_7 zE#>)Id$@9^YUh=#cD6B-BIt5IK;72XA8WeIAoA*dWZ#)bC`|KB+(7)^Hv@ilOyx0u zYnMr!H|P^!l`^{jBVDauy1y+sluw+I%l)M zS;*8pU9Zm^)~Vh4DBICrl;-qmf0<$gV9Z9&pVTKSgcK>Oq6nEg6FDuz0~E@!hLWPwn*|zpUSsNy!;P8?P{GPw(w=F`g(cQl@#yi7^8$9fur)cLLvzopld0w|(Us0bY-;G|^B+G0|B^VP zMKdSncaAfi938suw^AnYC+WL6S{ zJ1A22Zq=`u_0Cj$lC6JsPN6^2G}gm;JJqA}ysQq`Iz=yWYis8GrtFDwF;J`ptGS#e zoRQ6MzSfs3T ztL)j;F9~xBy}~viRzQx5k%5RG4R~>twS0<7U5Ka(@@@zx0$PIIU@RSqjJnZy&JS<9 zYFyLyf~KuS-PoMAfr!oL8u6p5GkBKQwf0TXXIVNOx}9~dSL za;w*Y*}ap?RIf7N;_ghi;F3q+qP}D{oKzih8;eWUo-M!;UIb{#C=2hkc){KO$*KVHt|ggPIxV9!~}UP0vHd*2BeN>n2J^giHKl zDx6yg3vtr*6@iJ1#20``1@|Qy^B$Ai5rfNT448JD={v;f8M55t8l`)jkM0CYWA4_P zoOJ*}@}Paz&i%?42zg^+PFOQMc@4XW18l>NR9QaKUv ztSuH7pt@pDvW>+``AJkeU^yLacD}C~8=^ckt*>O@i_jjJ@zib88ztBCI0+Dq(N8Sq%036GKBF7;*Ym?2k}%o@c(MO}WCnTSBA zRs+9RsPYlucXi#KNU#xjtWMD>!QCu6)%y_p&np6F(if@|VRRs^?#>2$i&Y0gD#{K*-J z2TKC;NaHxDB1z2^19MnkYg{2GLW?3pmZ+mI!e@$13tCeRsi`ihMJI>ZdMAH{;6^OB zA}+EMirY`g$V&C~$gKw_!UCj^_0G1R3QSRV>ni6z?{H^Q^byYB3fqd>KPbLxOqG3m z2|!a0P3?~`pT(^DLssR$LL|{E(lSB~fdicb`M;d^3PzTL0U&my*tk#8CfsNxp;v{3 z%9sjT^F@B^6|zVAL-sYfks7vIZO7VGvmw#XM`|8cwBF{USl)bCB+JzGZ2&C`+qAVf z-0eWOH9%9P%ozU3$>LD*lhbN}r?6#hIx3jsEOs*h!s zkQA`Y0Jm^B%Wj2M#YR;4M%c546wrqP{Gj(<0|?4Y^-o(B&I1D7cwMdwH!j1?5kY}b z8jm#^OB?B0pCn3Nn^Q^4F5jL}kzpWSj4>+v-Ol$tihozOKtP1V``gudBuV=%!z-i# zNWk^UNsedVf?uzHq<#4xNO{>Jp+9lHLvi)p?YCvpQbivDr3=L!cUUN2yZfNHTm`lp zh^h+tSN;q?CQog)9Ad&cmOC535#THU7nz%GtiVxa} z5X5Z%I_0hTT*eiYTLw&H_)&HunARcVo?noP-x2jn&f^#G#+IB1`S)^r==m}~o1LS# zsIJw0k8{O!KU89vI(s)L5cTa<$K~XHk@ikcHEtyhQ;Y8d=Xq*T_sg)RnU*3cml~&> zRAC?9e&?r5hwNH915jzbH+6UCJK8UPE~$#@R>?tVt2x4zeV7*gMQYFtL*0ACIr^4M zIKF!tEvIRhUXKm6Gc^*rhvG%9Ax;9*85MUu(-|%0G{rjOp2f^X)LIF<{+3z#l^NVI zEyAlDwJYV`o-dqT0?fV%1vIS>ufmeyG2%U7Z$w*~4JMcV(1WMccuP?$Hb?A!B2*d; zU(pmW5V0n3b?GX3$)2jTypre|DQ%RSsP<#g+h{Bt2M$JqE2?CF{Gq5Zd~eylD&MXO zS=P_3(g`Er2*-)#kYl6EBD7P(`w zyfLHBLpS3sI7CwFyB4{Bk!S^_JDr7mntWW9N6V5#>YFO{(dFb1AOPw4u~2*@jD<AoMI9^Jb9iJTO4U=<`)3NBZc^BT6ncL(YA6yW3?S+BX1`91d{L39ANa*A%M|4 zlT-cDp!3i3Z;n@OcYgm^H>LB5JH0ap`VU!$_73z8e8RtE4DB4~jU;`8k5kc8&wnle z@&Bzq`0u-~?Ogi&P5$66-+W)&CEikJIM54@b)ZiNrrJ%`gCu?9WNH57&6gl_hx2v% zKg)mq_s!SgN&l<)>ZztX+kxJ}e2t)$cJoz3(*MDHL9f}$J+g?aXt{2~pEvK{IES{saf-wL`~4iE z^h=C)?mc4X(-q-Fm(~*$ALV|dkPaTgyq}0UA#r(0D7b3Yr|5FUm2BihP)t_FS4XVP zb*D*i{!QeX#^~h{W3*i0f(KODf4FBz4lmw_ytuh`yHXCfIFr<1H;0v}0PSdn#AcZ% zC>0V1U;$bkOdC(wTdH?hWafqw=Y)qKN?Utpqn2?lF}Mpxz}W;uiW8|WJVYYZET1#k zjMb+voZ-TqN_f9_TyDkUIX9ral}L}cb9PPb$MSi3P3rU6rCImY5Q0CvvGrB48>;(f zddU4ViCj!sv(A!Q#ZucEuV5!Y^#>NQ8H==pKfvjkf@VK%Wih3t#cWnr z8=6@QHNUb_(r0HHb0&8~^pYoaA+@zd?Mrl2z;%1@(ZS+i-{Ra(A>j04QGcNu zEAXkyZPLG%zM!>;VWUu~dKS^29+fFq=8X&m12^zeUD-1BFXuS@RE@Pylm06=ol{gf zj$fz$nDoVNx?j>iyHR>z#4(hMOZjd$FJJQ3xp_C}yzlG0vd^98R7QpI(8{Jy@{*U5 z?S$#F;3e>bk;CpArZ5U7f#Xqg?5PLYL*hJv%_MfDV8;36@485KPWXRg`qs5=RqKJZ z#qK$P&qB}3i4IW!wm6^5Oz7<-KnV0iws}ylyDEpp&n>sIlX9;N%C7Hcos|2TDwnRW zu9I@J+m);8q}&8mPG(V$dDJAb9BUD2g}dW}Ih1O*Ttg@2mRuYi<)Fe%R0SfyG|OUd&g6_Endfj+gs`2y)l@Row9pMWlb(}{YqL9-#C z^>oQ2Y+dc05-(1PVi0kOCSX*)O*FF^KVZAeWQNvS;?bv03Vv6&%kDH~Guz^PECaO% z|LL@>2A`Hx8mxO>({VLHp$QUI;(`kR5c`tX_yD$pA!n+TRbiAh=nZ51GIfVYPwS{2 z{Kd<%;7{T2R_t6J{M9px4&ZMmpJl?!dD3VH@VBmAx%^Jb-J{B->A?r8(;5yk>B09@ zxiq{y+ex{QDwoDfyOVOKx2x~_8Rar3@yPXh5~V#4e}&<&gX>0kO>1qC*bxQi6Qd-x zKdJ%}Rst&vCx(Z;O;TO1lWMj&qolf^gTPVuwu1H4`Pn;Q4@wSFwVFWdj|Vc<)|W2d zOeDlwAXUqaIePb%^USsE>~8pYPB+t@S>ZrpR3mc2&~0S3fQ_~jxc(Z}KWa~s{@+j{ zJGMLC)x>u6+B?e{%i3B;dipZEjc`c0=P;+0(3Adhpz^o-X)N>nC8L~72MCVAC~MDE zd5KCGUrXIfrY&AQwCkNtV6E=#&{WyFx7mKLkD-o**YK0J&x(k- zmm{_ZFrIWa9s(j_MxiT->EoF4i5ceGc);O9kxyh%W?@$Fp^DILr&vbBI&9^a1ZoHe zCK3{@#I)}X%u~}A4ov1(;$u#MeBfe{GE-cWg_IVdC&*DVjHX8XJBS#j{aD}$K8e~d z2e$GXc^Pn%zqzU`1&fjoke&fAndf$&Aj?cV6nIj8ft%W|pw1G1kb@c#i(k&NHjhGYFaV&%5la17+Z|^_Ys;BS0TAF zkH}yJ&a4Au+kLM;5Ar6qbLI*0Wv^+)RYT7E>`chSd&&$Q_|bP+Qb=|TtxWwR#OgFa&0wZoAb;8aWx4NHZ-{0 zSO|xKLn({X#H*>;ekd@Jb&V#fN}>t~?Vit`o85_bgan8^d@UcyC`6VF$QkNJdKy*6 zaRv+%w4=V-gG^`}aGvx9O=$p8YnRc`UHUNpHK7QaYAfFaZ2p!L5M6#xZ)D@AhZHG&;u@(?!qbWOFohY* zY3?16Ca9W&sJY$q(!b@Vd)@QWyOAyf4BaiYa^DYdl9HF`%a*?MB_MsFsYa$)aF%`% zU)PA=2t{yO$V^g;oOiS@c}B{AIfnA~CBKwsM?XIz&+qH!ggmd)&vWJZHJ+WdYQQU! zIA7?=isUHw_k8!a2fvD{X2>^+zPhIOqmbBdrmwb3TO)~U{yy6JGCK^!dl26(}P~Y2s>=$$Y}cGU=-N1iHFP zK83FKQ#&AzrK=tVJy+(~1)wyoJwc^*NLRnUQU<);d5~YBt5ECLjQE-KJOsEwS)r=X zFX!8PDd!PR68odY?K?Y@a6z>oQBTlO=LD(LrF2yguN0|!J?o38l_GT?Um?{)^eAo8 z9>h%u+vl_jIbX?V8RQ%%NnA~)(~~VILYAb}6yYnUE{y*|_|&we2;WoC8ka1+RV`&4 zA$+P#>;NRgDTkln1T%MW?k^WnHhuI26@R|asulQ(gm-=_>>B)|2zfLT;Ydk?P;zMeGSsL zkR(qIf<1eLH%0%YN2Gg%*Gpfl(mUb{-<4i;#23aCK`S4Xj=Qv28JXY_%FcAD8ajMI zOHpZjKTEaLA-Cw^W_g|VxWZo5$kPy~n=fIfK3(t|HmK z;5lr^{*CjQuv+p5G?>DMViX3VtGi1Ui$~;V0Ev zR=+BnpKRizw5)ErvU;_1>kestr!%OPU--!sj<=VHzg(RUY1V=$a4hPG?TV$mOfd-( z%ZXoCKtByzpJXc?k?eu;B4KS5qmh?&3L8Y=4+k zF9)7ize`j)J6;v_iU)S7)O!Ot(n3o-aDaFDYZh7HwIYExDWdHVFGhvdF9{S;I3%*T zY((7eOxr2RzY0_{F;QBU7KMLEF<8eBK)A9-C3?esl=SUvyON%J_ok>@LN@P=ba-kj$= z<;Vi6I4JARlGb(fAXUAR_Fkmdk}3m}NIlWueuT1Lxv8qhXgB4gEmmn^q;QJMe56Ij zIyVcF@v>g!lr(uASz_(unHK2%rbDk0S@$iS?!Obo?U(5K6!U4TkD40C4V>t@;$!#jXj>|Fkt zWcS^Ho?|9lS_lwol}kqN+`L@|u&2{S=xha2N8jgqdX-xC0qiMKn$K?6v*^2 zGbfTGs#p8rEYUc| zq6?0hu_k1Cwoi;wJf~wc)xi!BfTZ%|1jULf6m^iL^)NsdheNA$92bV_JtMjQlx%nq zJiSFm3$Cc`=l?jmXjh3K%-x?*p+=a;zfFf2o1kPGVJun{Di|Gds~8`?t3)DA&b(Pw zk;8y+8HJ)~f?O$Dr{W!vGm!D6C=T%=9jVu)UV2q~jy*Md#Lldd*pJHl-&n*ges&1F&;m9^t~8?%5aeMTyhQ(AkVz zf&vT_Zo#`YQDLVVgP4u<2%Hc93IbpTXj`HKtl2$3K1o_p5_&u!6YG-X{bh}sC|^#4 zvW6Az8eVs;R&rNJ`u`qo2t%aEY?z+8P;>LQI+~s_w3op@#?$Zgk^#tNja62Y^Rvo- zYOkLDDAlWtB^~u@nQE`^G7wA6wX!xHOwIT0>F*!x@cY^FJ+rIe8#XZzHgU6?riq6j zfZ{V(k}P~+N0?7MKG1MjD23g3XjTUfr#kTYw$uQQ%j`hRb5$Oe+8}Nf0!UNR4C!Mx z9czq;JSlGUXO+GrAo32jjX}!0$*wP>VISlO8CImHOxp%byQ&I^a^X`^DO9Uos&dsqQ}{11qblfGJuh^|S3(8$H5q|2p8Mr7BBFvK}w> zzUt*>d875x_o+@O+mjltm;NE?((@B!+YglfKGpzJiTE**e{qL9hle41c9m+`WI(9d z6|HMi6i+7E6V)GbTL4Af)lLoNE;Udk#j7Pp!a}lw34p8GB*G_(gl1MaTz{purFGci z8R=>Tx?Iu3h(Cn@?BtV~{Dl^cRaC&_C%m*i%m9+pX!qC}jRtH8ZAtluL8-_*$>SuY zr%J(yqiajf=QnMy!J7Yx$k;ld$9~QqA4bHMP;8xw*vrJvEJAiWqfO;1PrzO_SxN|9 zYml-|*DZRP*78dfsYcSG_Op$2B$`kq;C&DF5fuGd35kks@a;sY1;|!}j(7E)P!hAH zVHJ4*TuyVtI(c%!A*tGBlMPZ!r}7Md(wRu(QM;=@q&DG^+nt&Hn2N+QsZr|JxIT&2 zsuFh)*hp;u4U1$zY;=y#QF=hbR_VC?Y=xTnhQ;cwp+ah~o_$o_2tTM3b5vr(Jb4ow zwi>4J=<&_OGWk}lJNaAHT&ao^%k;-RPsAvhrm$l-G`Ht}bM8+5KnAGh?ouox$IRV1$8_>)436n>=uXyN$_m;~%Dg0&$@J)r zq0TG_CP1U+jj&{rj|7-CN+#kWzE-PcDNsm_51aZo4RMRRKJCE6^B^cjIOP4*@FsHO z;W5LzoTiWI;CHh|NCzMO?myH)wFd2ahoG-CBINxos)s*$FV(|W2-ST|5C5CCkLlsz z-kEDa5BFa35B2cxnZg5`Qyo0DqYf4v+d=Wo+C68`$+l+&3DV%A<%-IGthaw_KF3|F zW^`n_!?zZ9Fr(L~*85%q7;327B3p7mW}zBRxAfQNcl7m1@^xaF0_h>k1pg5-{3=n? zj>IyB_bDFl3>9?P>CEHT3@Yj)I%mVGuVu;lt~)NX8^{{E8~41Mn)P3wm>xt*(s)2> zOK75-Sk_24(o)5Aou|lpLeu|LZ?02$b*nO@jjeTtX@7sy^`Y@{vOIL-gcVL)mC|IC zCJFqmO=SH@kFt#<@$f`x(QDXa@JEJ7;=@@DdwJW)6AFFO_b3DN|2H*d$2ReTDkn|M z(@m(EPOLwJG_GVf&VZslX#IKXVQg~*y_Afy)@x&ej!wV$cLQk-4spS!a>}r{i}jsL7pSV zh`-1gqSFYFQWDWRKigiNYlE@{js-`JDX2TSs`RU}w#a;zqHXTnhk2m+d9y0R*3PD# zr?F57+h2PJ=FD9srf~=aW^Pw z5hr!JhM1GL21;%+GY$`%BEVF7yA4Yu($aqCM=}d`AI=Vbh@r5`uH^{uMQ@|e+314G zn1*i~|9^o~fiqSD{>JCZ(um@xY74d)4HG0qRsEi~T?z$RwSavhs|DxXzX%sc{N_-O z5x<2mqX{(eXyPU@9t{e#7Bc@;iMf(rds!rLV}H2@hGXo;h>bG;oQ|Daf_co@`W?0V z@x&-+QRaWG=G)*w&G)O;riRA)7pknI)KnzLf0jmrg95c>k;D!CIdhH`$z9L7S?ta- zOW!r;A5>MG&x5L>i?ynu@vhTlpg<+AA(5UqJX-9W&El%=0%C+TDhefT2uFgS$<2k^ zopWTgfP$HFy;_@$2Jx=3y5qd1={Ht>mFL`DD}n(F$} zTO}1}3;>O4Kj!}$zRtPmSonH-V@L3{wdfy%uT_jN4Z+S`RQ^wauX)tV?%Mx*_>%ij z+QC;v3cl9JX#dCXwPcVQOXu)4O~9m6__~T*559VL%Yv^TUDz>vO;!CAB9RGSg^~(< zy#`cx@TCdYTjKvX^6K*-N(4WM#B6Az(*l`xHT2fc4wM?WL=7BaplQPtxY{xPu@D|h z_KQsch`IG8F{L1Czx1S_n;fDd{Fen%qTclI4@W1q^!wjVGaVN5F{ z9Qzh_VZBr)FPI>Jxb5mwKcKsjx<)9E8QUSzgMu9p{K zfQO-72W6mu#BMcUIeMtJxM|VK+t;7wgD0o>;6|QAw?}e*sesLl_|Om!U+3|vF_o}7 z^n771_7c}`r92g|w+x;b4@{H@`@FrV%)D~PEC(h{&GH&g>Qs1dbJ6I;EQaZsA4?F)` z*8`hzWtf+ir5AFeh4(B*Qt!FH_pEg5ol;Z`H7eWfjB1DUaxb0dYWErU-#B@cj*E>( zev9STCgwNKCeO|f2g+b(j^lh3+lgfxv-60ol=S#TE=&lcpCZ-gd_GF00t(d&! zl=5}TpQFn~6Tj6?KFjaPBh!&b_SHtY)L7(^s^CuW?H$3l-uUWEWCx%#`d<{0Ev_ov z8JQ1)fnh~F(6xE9UI|+VkVu}3T3=NqrX!K;t6O3QX}k6!ZvV^{F^z_YF|<@!PF3ly z$ovDUqVsuB6?F|;jmRZPp#smyB`g&l&zty-wG=o{!8=T>ezwHyQ*q55=X`7p-a2p{ z1wlQmhQ(Coe0Za*?X+@|>Yd(K$<$~=XG9wT!OrU$6F_pO(GRz@>5C8txlL<*PNtqEk__d+bT zQO-LYAc5M2|3K*&|H{H&vSUXBFaDI&QAwO zo8p7wds6F)Bc-b&t}<{j4-9eMEU-?rfpbu&SUx3a&t!OP)?|;Ka{{~dMCEs9M2(#} zF9~spAiw?i4eLec63_yC*N&f&GW*_gWUa!1bMz_*sIUs+0Qk>Utgt<^Tx_MQ@fx>= zQhH=I&6Aaroe8z_0d!E&MSJkWY=L4@J)PifG=OZds$~`=<@W+onx7l-@z4_II&zX% z^5m{#9WyvI;MCAbIgEcNidPn;GVZ&Qq~uKgK|T=RNVdSJWo-(QBS~e0U#g`P9siQ* zqH?t__nnN9(j8*^o0L);QQ80J_^Rb)i*uI%t<)(is^FI?dMEY^P47;lDVN?w zOLreLFD|{~!b#7F@dptZibQ0%jVXcci`4%%w9RO^OlHd3T~(U&rsTqQ#OvEa`iiC7 zj9K<;qZT1DNXN^aX?qwWaLss16!@fPXrc%{@Q3}*4QDCJM34e^$4k%GWUeGg7}wLT ztaeUS^CG*{gHDC<@JfXXYOmn&3{@&;lRSH(y^TuWcD|;{R&I)N`KNq9z{lDd;wJgr z`G8zA@t6W@*mJ+sVb=MAX!BnabjV=P5-+F@z~lbGGc|eIhp8qDP>lOFl9c?Ee*})D zY(0%6KT-)fWuLd+FX?J4KRqpQ?$$NMpMZ!Zm%5a!DEWJyocs7PJtz}nX3X1w^=;`n z)agCOoknMMAA=|=QTvVpa9W+o;%pWdzr_E*SfYtZ1<}MsRo2dSeDgAbMgT`2adIkU z2NS*tk~y288`@6s*Us!<87y;Y6=p|M%xdspZ3Yvyv92mo`hH~oVMvgYS`X8kd9zBw z)>c^VNpj8$FMGyRd;CXbWGZZ0e-utDb30V`?WJ_(bAH+ShxCM`;vd|A5?mWp)?ZA! ziC(6CH6s4{+KbTN&BQ3s3ynW93TQP8nnz&mmB0zy_|`H)8Gw-pp@u4G!aRDOgT6RI zZZ0coU8DJyg;L#|{M}uds{wz?psy+*5pe>bsnm?ov*A4>{uXsXUjtmvOE>zrdU5=S z65#r6>Gl<@d^9l)UHlegz5P|zmsQ4y?Lr-olO>bgYCD|^zO7d21g0^{W#5;mi7wO% z_^jVE$-kAz11M80lNp>NV^kZ>|%@(!R zWG#=DMjXO?~R5ZkelwXao^>-Cmhq^=)|4PSi@6Xw`XktW3G;sk+hTOtnjQBILeT;@b zGB5Zl@+cb{H{9%S&K#cYlxr+ z#weprR2uTBhN1wUHWf8Yp}MS*3HkBt!Sek+iA1ype+(d$)wlnW8OZLN*qxXJPKkUd znGC--?R7T%DGZ;k(W_fj^=kP2BBh_X6vMdxPg37}O*MKbs=@fB=Ge^i_}}Fqa}#sk zN(coPK4r-+75Ip1_z+l?8OoZT3aXjgKLxVh&oLHl5OyJP7hL&Qd_UiDZaQ6Nx%Nj~1$n+V z7R5I@IXK$VE?|Gl$ca)t2TUiszf;`bdilldrRN8mD4xB!lVvAzzVjxnVmPbTZ;k3r zMc^;EKKV!9CM|A%pFv_|zjpVJ^v`;4e?JIzvxW_X5UHNi)Am0s+`xP^obdY+BM0S; z9N6?xZXVYa5P+{w@35~iT)Nz>IbdB~V2vm;eK>@Bt)Rbq!B;59r)G;kAY<`@vt`Js zVY%YdSxoJyQlK-$762^zos5pWlp#gNXR!6xLRM>Ma&3m zZ>aREsC`oxU+eMdH9?;6$!X*78cUDIH*)4zKCFF84RY4^!^UKXPtEzs{v!YoQ6~n! z+M3Fi51pqeB3EZEryJN!20u=|`d9-?S!42EN@U(YqYeSRZLJAgP05lQeA*~kb5Q6Q zr-qJ%=qNnjS$P_|c`_^!!iX8u44rlM;6qc*c#cS5fOr_nfBFW4)?rl`=hqVB1iH&r z=y*~8otikgI~nFNg~P<`**6x>fKbQWoS4tqF>k=UW{QYgxQHJGOd{<;l!xouyy&M#MJ>K?xzW| z8aMlLto3ze+_f1p-ZWMjYeUBBknx7Gre(P3S_tB_LH$&2t(QuuKw7}g$L*T)KLP}d zP}6}v*6@L0->Oh-YhI}7(_Cvzfac3XKIrW5aUtIU0s2VI+ota?k(zZ)$$nyMSHV_| zg+lL%7dpzB&r&34W=BKgob#|XS3fTuaPd4g)AS{x3l7)i8moP4FpG>`a2T1v7reax zTtd)fL@U?w%P_m}KlwT*)N}+saVQk~B#%Iv<$!6pba%Kk=^TGl6wAd7Q;J#Zm4XNV zvY*Y7+lg!T!LerCWyESJrwou|rX(lx?DnV9UX#hRjl3G1sh zZIHwdj$g|%%|9rRR5t)P65uh`%Jr>pX26iKib|;w5aK(jGi>c{`Xo2h^l@&}!9JnV z&tlv1s%j2fmzQ%wnrr8VS3tjHX+VxC=72Gi=Wi2Ovn~$+YLVbO#=;=&nl)dUdEU6H z)i?xG4#}{5ye4iLly}R(yj#kN4n;-dsHocaMzrR0LWmj*pP~B1mO#8S0f7tn`Y&! z`;$bzk60?+p}@P4PYv?wnjev~QXqeY*axye-X*mAor_q!G{ol?U`|vw&Wz&4BuuL*c+->tG1lX^j~upe+a>;0+Q~mcFKt z;4=>iT#z4L0ki`6#=>4S8>u0Bmq>HIFPs}>95rLk#Zz(~2b$KIL;L~b{@*LCaXH3* z=OAnO&3JGP)hawN8Ulh;_TWpt$i#&o^p)vL9c({<4IFwist?&(9L2$E%u8KpgXom`?osUoM+e#nF4-hA)M1`3G7*7`6;wgTr#sR>|4 zGuM1pQQN4CCBlD<*nd%9#J4AELFRv|>eljG3ax@1|YzE(WxO$8GJ<|@J)JpT?RLADgVb)0D zl?=4NxrR&`Q$cczbTC7pRr+zXW{rqla3>LC_EnWOM{An!u8MmbOy+X${AcN7hI|(f z2<<3qG)gh8MeNY7hSgH)aY~7`i2&0TTP1IzycJ8y=dpF5x*IGcf*F~ zAw6st`i-<{k2@H#uQ(8~Cx2OG-?dw|3qTfeLG&lKQ*fvALy~hqx$9DN3c9cWEAMg|jzHKbHUp$GW2Z&yb$ysIsfp)0tSvrZ) zV7QXG%YaLWorV{Q+8^64bQrHjfjXnD^^RDxk3haxw?%y$BAoE+5}J3Ytu{%&yQ{H9 zgWKRoe8(s*h|-CL|G^7ttg+CN)FDiWu~6;bmWosDnF&PfCYXFPB0%T>)lB_N4-&h@ zY8kbvUJqCXw-74^LFmUWsfGkBnZopk6UWKo2a}aRncrA&x~?qFI2rvAZb>i}9tDr8ICxhO<-Nag z?Tiw0L43uJ41#JvGB(vS78s1Kf;5tlv@U` z^F?BZ2&zb3p+#jze48TC*X0^Zr%H}m;0ll=H?-(ZRjk~IFVkg+us$`HGDsJEO_@B( zs1GRf6J5qnnLNt)y)u5vs1GP3e2yOEQ^rr3e6LJCWz+|hxk8ueLYaKZbn(h`p^W-~ zGUw?sT`ALrGF`ngT`8kJpiDPi1~i}Al`_Dy?sEZU)CZLLM3%_Dt{Y{5yhGi*GTkVn zKA=pKF4LVd-6*5*OUB-vGU@}${7jeWL7DE9>EYGWgEH!a^4i(7Q%HUf^4Vyq`%*~0 zDqLPWf&8B27m|0GT?!7x}7ic^%QFt~1E*<>eXVsh4tv zPqpHg00n^9XzANkzBL3jRZ1us+ zhd4%Qz97n;rP!ytP-Y^&-9lpGve!U>Ipe-4YGBjGa>1g@z|A+qi$=9g-J!lu&Z2k~ zF~8%o+sM;XtX;|Vsv4of)(Yi}FiZD}LqU; z3lPgy(c~5(M&fuD9#xSX%d28-$#wL=xrEwTy)+BhPheLsoTP2Y;-@i2HW zICcQha6h9~22Fu!Gv*)^H5m(KKNz>)=Rcj}UQzyWBYZb>z82#~!K$!j|FP!-{zzt?_|mjC3t zE2RCYpCw0A%%#t??qe25B6lti%_B7F7s%1=Id$ zaCy`orVtu^B5L1=<+u^_ZmcX=&S4p$QL(Q<=<)JoEq5iaDtj1`SBr5Elv7Jy$J1qF z=|K24l=@cz+fzuMXuVT?u@cLq%qs1&xnw&gxKx^6Q$v0ZK0;9?C zlLJ=EeHi3ukqU$+C!ZXU`ZJmKrBk#Z1wND0g&c5tgU-?76X;A%S8_n<=XH)2n!sjq z3djMYf39=1s01>T(~TSuTBKdt(E<{2w;|wQA&35d$NHsGlk{jSIWTm$=} zeCWK9*Vd-|q;o)UW8qn-&SuRU4D9Bn%yu2!Zf$;1)ORqHcp!&wIckJdge4*>B86_3h^l?%Qzld>u|)DrLh#)T2?vX+vlWV?nT1UT&Xzo#|`hTwK_m z>1%53BDRX>W;2v`r#~OX*N%su764jqGWePxb;S$~`_%5{F1t*^pE4K5g3t&FArvDF?71hJ#<1lOa${k50QJgF z?&VVk5@|r`rlJTYRxOi`! z0a*_Dn?re$@s+Th_yO9dDyVWOzd7WWjD4Vp5#ORSAj+XG&7pkB*e|3b-mEjA$)T>z zp)Qhf0NgX;ztb6zfRjcCW&8v zMdA-hgcgT-G>5uN;^8kzyoy9faj394)I$=F>?N^+L@05nXLG1f5|6SgtQOJbD6<*r z)g0<6iEZq5tvi7P5?{*Ur8(5glNZ>)gAGAUe5Jeg8gtmJCK7;_v+YNGhz^8FF-}nX z^$ohdum%AQId?gPW$8Pco)$!SprlL#Q9JoCQ5XoLgr$ zZ7VQK-!y$90l)`J351!V_w#p(ye531nS=c!^PR$$1FIa!g zm(>0~jpC#1bI&sFmt%<@n!f|e`*ytA0hWiX7qhVZ6H2DBT%q*lcQCDssZ%!Pj91pv z!3#)JyBHul%*J{04yvc{JaqG156RE`4SAF~^^a0!=ka0LzWIVs#nv;C*KWR8(3%^# z_;x_0b+9r~E`}2#~b?lL{;vA%SWJ;v_;C22tS5=Xr+WJs=b>Vmvcf zsNt!9QU!JnQbUiV`qMgCuU{lFBxLmu+xJKq4nAr#n|2Ng2UpH8s%-xWp+r#-ZS9U? zA;>hkDQfpCkUjiNjQ_>dtW*VCL-w^kN>6`AopG%am%N@C^97HJ3Ei_F+{KItpV+@m z=ox!bkM~7=KrU+XlW2-U8AW+E7OWvcrBKIEbJsL^{MlJ4@)%O|Pm#uLs2S+(qNv-Z zq3VqtJW&*%h%s!9oU&dR<3o0w>2tVHOH}ZYxuNEfE>*lr(YOP-q~?*TsGlZ_Lv&6a zIeu~!`O|dqTRO*2PChw`{%OM4Rp;cB(}f&G05xU&Tt*)|(1o0?tSOYEM!XJyb+;IH^5J?M130h>A*bIa()=be`4hsIauG#WUs)r7-S?-w^4s$x{hPl-ep4YJg5z-}oki?~UZQ0wdfA7t zshRZP&k#Z1j)<&fHa!6ML(k`u?9qfu>mH#A5Cp-0CE`E?K+W}vK&;pxBoN~hxS_K>h8=f{^p#*0M>9qlq4A zxY*DzSr`(!uQ9HR~Uy3G}_nP6|TI>h+pbr zJ88L!1lTc+>}R>iPDY+kfv6qRxZcynbu#=y1jx{+{-wY|>;N**=zO68WN1u(PiG(l zjqV~OfDDc3%XJ2%Z**6o0Ay%9|8Jdv3^ckx2ml!x%@^woWT4UA1pmoUGSEyKMg|() zT~MDyh2WD&L`NPh2BF+L=#GcsoblUKehdW{sWj#jWtgsSjzM7!JS`8^9IQo~Cid zoPSi~%Jrv9>PwK;cGbT=7cbimMe@{JwlBT(LpJH(W6sfGyG%OrCqyZ*wt4 z(qW8bGB1D9$fEpNu>)|%Z~)dw0m;+>6lz$%8pkK=L%ooTT&Mj^P08kphyZvF3=H zJK>Mv01T1>lBW@8o6dtnvMQ1%Jn~N(cUI~=cw{&Llca#;Y4maN3N9HAz$Pgmd74k^ za23KQ!vPp21td=)Qk@`@q{Ax7lyrql69kte9cD?Uq$_l)6m*hw*d>{gp2;u60T?Ek zlCF@duat#l{z>C;8Oh3#jB`@@1T`w|5(sUSftA^YXe0ZsT4k`LhwgF{4u3k zeE-i1i~8QCe|tWwfAg2|tKjiiyy~1!;#@gKuSoGpvvjTLJBkw*GySPR)%-6s9(ekM z0@WFg=8prDE8&O2AC>+fhd}L7zT^kHkX=rn$6DrCo0_)z7vb{cVENJHWE4@2KPo-6 z$R9{vA!#XouenQb*Yt~`+&f)9?O%+g|0)X$iADQ z9f%$3#bgf+7z@~5)n;F}JJw>zthQic;BWrdUkfBGDC~{D&%Q?}1e^O2I9ei2PH6~r zbbi|wsFbnbG3L#*=g>2eU96RWJ{n!q=XlR%vGw2tUO_Xbc85_fL(0R&+w%GQ=#&IpOoB6P5 z4|>`iWv^J472jt zE$yodILDKjDLZrQL?MO>G7DQq;GgrpoL*-qioggmidse#Wn_%E6Ma5Y8GTwtuv04a z#c(@O?5K?5mJ!7n8RyuEejlrhek~*VWn}cG_7Xc$vbC+PWduha*slF1AhjQx>e;e) z?vS;=X*-cd{?%8yzx3du?#Xf5?~}qqjiGWNBe}Cvra5V`TV5D!D?8v=>xgDzq4@_D z6T9y}kl4cZPlSmrQz*r~q5D4wy~-|Q1m5@9nQTOjXFiBDwVoZdKB%-O7@^qLeJYJ% zTSCEBW8pMDuax6uAB(aYJA$u~tt~=VeQhCYixK}JY=?Bbjcjz0^xU?v{eos?qjVnb zMs~VLUY_J>R(65T!{0d8V`b!NR(68U!{IpAV`b!NR(6Pf(;gnju^uZUPqVTQbsjE9 zY_if`*S1Rgg|5m*Ch{TQ;d318u`==me2n;i={%f{V?9ba`;pGW>p0e9W#n}i zW7$;d!|gcMV`ZfG5PR8mq=VLDJyu4#Kw|AM(s4YF^;j9{J;iEv4(WIv$9k-c^j;Xw z>W-7NBHoM?E0dTsVB=_e{JFkx=}wKTc$!T6Zl5BNqRgDPbftLqL0_y3Wo-(F!|D|# z=b|yi&U~C=8lQPP^%wHSL*FM=^3nW>>i3R=g4kgETYpCQ!WF`n2jl3 zujO?^D0pzj#*p=%!f(aTLb1Q@3R_z$WhccuVQX{KM+KqM^_AGWgYVUq@X?(0g72Qa z%f1FV(MWDru8<1O1|&6~)AF7R&2ydBw>7`gOk+iXBAolW1Imd!GjUEdxU%+RXlHV@ z?5z;y6x-=j{4ls~I_Ci~a8G0N&W(ykZGkyqO~i4bnA5#t5w}*cHx}P_7c5i0)uONA zSd;y2%L}U1{q+9sx7j z3ZKAuZNz?rMtgJhQ8AmrK8{A{Q|az#>3(g08+zr6=?fSx)J;nPod8a#a%B(Q~BxZB1=?zC+>C9Vy0REd8#rU?A0m?aPGkR4n?g%XU~N zO`Heyg8sfJ*es4DNeC%cgBOrA5BFNNulRYX=M*SU!-VLN2? zAuE&bM931xLsl_anVjc*vV`@J)sL)9-UFmmmyj*Yhb+x~*1C&ucE~zl9R*x(f6 z3=H1NaA^}9=q5POVgYmkcm)_|VSJ4wIB#&V1k3ptz(}^L9RphM(|EOO`f(!s6;JDd zJW}6QQC{Cx`vFiKQWzo>%opLvix@H1!T|*k&Nl5?LE3+Z2!_Tz-5_-#g@MZeno!d= zf90Y=A}y@fa%@NPAriWl4^8U>g@Xt%;NU25@C$GdaZspVdFu=<56TV&kqMRH6afeB zc~}Ul77o=_l*^4+1(H$<4^8C4-5LW6uY^o!B-CkwhhgKn+(}k<1VUE?H27L>O7L|k z2d-84xK3^aK?bZ+a^U7@+2&~QJ)_}T7ayyX9Jt1aJwrKUMOO~o#0gvEKte@zCbt)kW1tPa&5%F$vI+hV9lGCw}ID(vxrNnc|=~zs}0(3Q~`ah5ps}uqXk_z(! zTIQo5R0;DtIT~Cc%x_cjEh%FiOg{6u{H{v=8amo19Rm+|!JFSbg zH-NQsQdo;7$2L{>noeyGR{S#yf88EzWNa=5Yt7Dx)re<9sdWl{Jq<2o6>7Dv3Hg(m1^uoDK!Q9%=iZFyb1g7i*<&R7&YPqz9*Qda>5}My0eqH&^5I zVvWpZzy0+I|+W3H%W@HqhUGQ6IbMV?a9H8X~(f8I5%9* zZrO(#*{#>eX1&rw$p?2LUZgMBXV)V1@BeONFtN4SphHCLck8LXU+RrpHIU zrvy*->RqAgHK$3vr%ZCwsdt52Z;`R|WOihR%1@Eu=%M@ynNG>$;w0OXoC240^$3D` zto&3mHNC-_oqYO(^n3W`amw>8Rvkt!J5-YAW#nh{vm6OX`pF3ZFi?-Zr`ty({-~Q) zGOeTj4HPw0?AZ2bt-gEO`v5`a$3=O^cNTgMj?qS=?RNdP$Rd@0-Rrj_`)t$Ud)x9lKbtlhL-Pq<@eqFrbTwS+l3e?G5?Bev3>Dc8%d53T z>FDJs`9pn8JN-(f|Le1y;^P#YC_%Ia!jf3rR&4K)dE}buW*-W{K;0+HPp`CVWQ2W%=Z7^HG53FH;J12#+XDj8Y2TT18yuTxI__*I>i_ky^(>@;r*WTR8?2^ z3~KJ1|L61m?|b=tw7Z|Dx~8i7Im>g-?|04`XW#P;FIyS!tBAupLo?R+zh>EGEc+IS_o+}Zr1rS9Y2im0WA{_lW|$&bLTX44q$9x%Y*?krfd7+hR%VE z4QiP%P{wp!f3l&I4gaLUEkr^Y(>49^hR(r^4QZJ$SjKccpV-hzMskwXGGT~}=~|Y7 z8a~KUZkb>~OtZ;IvPHL(+swv2>s`i(P%#YvOSbPkSaR69l7TW_be!l;vy?~tEsZ3q*f0}_0;v@bL}gRYT)8+sHU9sW>Uhj*6i@Q30$yt7<~ zKNRZl&T<|8P^iN@%XRoep$_jX*WnL^I=r)7hd)%N!yhW?Z~)R{MTd_y8)04Us-82y zN%YDjw;=}_i4_fPGbCY%v9?R4mTkIOmfwDCLG-!`##ozxY~4X!`zLUCBof1F^;1{h zKi?$+kY?tx{e;gX;QE-z0q#y^9F`EQhGHcS8(aPohb0Kh732~S(x1cc=K6`oCbwn? z;S=L;%%kT5J#FAOIB5hjZ1NuppS{+HE}gKKr~FyS1|T#AqoK(CE1s40uRc`l&t?VDFhBw9`LIE`*nttA)n*8dX! z!ylAmJDx`{HDt{H_V|AYPT^AoMy8vYCKcshO9)vG>yrQN@pmvC`_}I`3J66|Pjjn( zCP#};%meN1f0n3z*4^OWBFP?gV%Jppr!y$u*p3q>fe1aBe>C5--Sz&55c`b#g8v#` zjO`xupTj|yRU#^7zyC1b;p$8NcnnXTbLs#70FNHL!JGZ9c*W{lZ?%*=pNGDvNiF;ENH+47wTsx31H zXz@KW6JfPw#=tBVnVAT%Ei($TxRf(Rh;12Fh{dNEjUd}H8se1>Mwo3GRd~gRIF_et zK-)5^;0n+ZHmZ`guZX3L*TWajPTm9 z?Os&8_SNInnKkzQQ1}Xi*9JCBSp)c_8`{p_+;#9guWFPKc^4^2`8s}#NCJP49H<2L zL2M!kTw9pA3Lymj+&?CWhZ4ebkwHW+=bfuESo29Q(-(_EiIv84W5U=)m`a7wR^e0L zhl(Ve4;4d%FObfH`?__53l5vaucH79p+Qsth+m5Vh+lG2{JAARiI zH<&qmoP3yKW=;ipfuN;iyaFwCv7n`7yaFvXQP5H{UV)bS2;&HDK1?xleii7WWULY` zC7M%lh=Y)8flHlQn}=kB+(u%((Hd^Vn%$c)FnSPc`SRF8*vxdJg=PpVT8}yceDOcz2lLWf_D^owYeJ{n- z4|p(9KgXg>jry4kR`Vv+J{1IpfBl#!ALVyNU}ia2sC@EXT9r=@LYEL23Xr;Tsg2gM zi_hZR0@ajY7(#;bnH(c92=A6rRL|rJ0)y~wnL+VPt{^Z7@0J+-GJ`HGJyi^h++aswcjJ(Jw+TEaxk% z`$Sy7ygR>ZD5^yFZ{m$x_z96-=|ry_ZS;z`6iESChuXz`^If$|(_7f%n7>Z1qH-{G z%wMAT&b;FS2gLTOPCmN}>$YGJRfmDQSSwy7&<1%`R1Y=X+6J%hI!NfeRdpXrrB_V9 zg(l<)Ea_BiV9Pk~*(AH4^%6`vrFsaYP|>Hv53%dL(r^sdd(}kDbAJh1B_Vb{`NG zk^eM%-(GAfVRcSZf$c*4(jMi!ROI?V68pV)~@j4BEsSEK>qZraLVrPGIHpD-T zVgOx&To{kT@Rzy}|1^pr9iw&{{!$l@H;rOQ$GDx6nc;#F|1^pr9V2&243QbcKaFBY zN9@j!ztn~Jr%?=PWj3jw0e`6r@lT@^(j|^3{G~3$KaEmImq?!Qm%0%DG)e)C3-=J> zvAYoeG)f^|qIu$9pm;;^Pgn3ftEis1SLL4+FZ+l{0p#5EB?X`q&mJ6%mwqA&VCY!G z@7%#BmH%4<`IpxU`PbS)H6$;4;CI6Rt;At(AvmY|g;${~y_rvJqidSgI1^J7#RuPu zuQXG)2I*e2-a`&wDwD$uPJY|swOt4EGkHWa*GlOnBWG+J0yz_rm4A5oEBdAR!PzU+ z#Kcv13o$`06HOcp*+_(<`2aYr5}h>I&#OOzX#PpgPK^!SJp3NbQ?Yqi6K5axuzC1A zCy#9&K5+!s+HLdj>oFqA|Ao!NK6V{yzn2)>+HLa?*!3Pa4<;TUHoW`hLGYrDP zf=^|x$IZh5eiP<;+&sK!=J*Y}Zyr{gxgIwUf=}g~J#HSZH*-C09vOx&D-S?fV&dJw!a?&x+yp30kt#Tl%Z7s7}qD4DJ`tqL6^U4YT@#u_qeZY&}AYaL(9+iE?AodkU z!>4HcGJw>qlpB9$l6Pz`K@PI77_@>-Mb`TYd8D1}EMByWhiBc5bCmx`WmT@GClchh zdW&8;R|Aa^2lC50`0esIV;Hl5LcK$IUX{G(h~0H5Ussj$;zv|0NhVG<9LSAf9f%Hc zi4`2kla0upNcR2WA87q$r9js5z9OvHe2Xr~kpIXhQ6mGt ztFL{J?N*RqQNG6VEY?~H zk%RwaxE<=h6H5GC*b+XhOPpKWW};CB2Vden{=)2|%=y5)3ZF~ZA`d)h&M0w7aqfe^ zYtQa4FmlmUNQ#I{byyl<{l98K2q}NS(>UWQJ~p=<$=lPe|cMORyA_dHfP`@EkW6D1u%|jQ3_V>f`S4`khS^Y1OVFX;_Qg&hjmZuL(p)BhP_C+<6pbu3k-dt?%bi}K@f~W{t;>6Z za2VIH*ymHD-AT4*y-O3^X(5Fteedzq;n4y@ImA7VKAKa=ulPY;xe0BtF86Axk~qav zYukBFVLm^&-;8?_$7Z-;g4$<&z})W&BI7ic2<|uMJ{;U{A^GRvesd{bZubw;v5k63 z+$oo=w<|q%YW!nf5nnfi$Fpt)XloTxt#by1Xxq8l1RSq5h`NE}4-l7&!0}EBcHfdw zK-CO7{{9mYgAzL4$bV0G+Z+VRocC3Vo$$a*JQeW(C}ur}i$0c}IhBLk=k|z?f7DuX zC(yqVx)#P{vH~2xKLE#1M+=7Fco}0qHa!Bzci6?Tsj=45=W*`ERqP2I53@jlv}>uU zlrK&J9Pd=+-OZ3y3T(EPUK9aook31&r`7Q999N(_gpec)bsO`kDTCf0IKI|@2NZ}xi&8NXWc{nhd& zfYDMoC?v5MyR)C_%au6VT=Ncaw3`GNKLO(8;Sr7&5EpnByJ5RfS+edUS@*H?ym7bi zPH?m~>3m5`H)oSi0R#AN4y1kakU-igB;WBAl)<8_Wj-3LP)y{DM-)=4=l+ESqu}_G z|D6{+yHn&BoMS-ohTr^Y63AbYsB;;8`BpabN?%Sdzee2B#HK^z-2?ve{VWnKOyYQg zb^ivn+%5t_;(eZ41%NksqqXJJ4l>!ksFJ_jYZ_PZHyR{DvZk~#IHUbm(_vhNfw>EN z`BfbA&EmCVr*8?_%h4d=_*=3?RwtRuM+%AUCHnG-5<)E2iFl6SEs1z`Bo%P*kcTK-wWh5yJtVy+?jZ49^}An8B6B z3Cy6|-FJ|}pD4_I(Iz{9v#-u1Ux1>L^#vqJu*yq#E7%;no9t7$z_43B#&a{W zKgG!YW~slvlmaZuAT0=sREP@0I1W}@Ap6hcm9aJuhrcJ;FEQ4PhjR`@0%Mg$A@q-1 z<(NVU$Ssdib||#U2ggQ0#``&@DU(7_r6iLrH9NNnOkjUA3xT_&m@S5V*;Uu%@9Kr;I3WNnS1R9#iaiEv_`zPYBqbCrJvgOSb-)(sez=U5maW8uo^Nm2f76FQR)(L1OmR3&B|08tZ}$)+H)t zh172d%0CztrR5(eR~{68c>aN*9491_0%ZN5`U4Q;=d-C!Ygv|WYxRfrk?0MoKRDjB z-YwY#?$KG8c1FO`P3zN=m7)(f8AQ&BW&$YPw5pb@RD8I}z;Onc36ONt`nF`NWWr!^ z_HqTB3LxFIel6L)GGWqU&zK2tbkq8`Wc$g4LE$`PCVIj2HY$+#UF$h?9IBqfGZ7)gPHxO5Hb(UvHp&)6p!2ft)p`#7{VmYp zHO{cOERGc{&r&^yLJIE2vvZE1fY^Mxni!kkc-9A4nr<_FCv(Y7W*6L#v^9a1ph^Sp za)}P)4WB}Lk>mX5-O1Fw>)e0t{v0odG;fv^ z4I+SJHT({0X^b2$g{zYXX+D?Y@a69aL)^YdnfW{r6lb`#HU6}0U>}!dCShBa zBK3f_hy2hi``YSgU%Mx;pD&qx?HV}d=Xqz{iX$&j>zGIVyq(&ENB#ZKeg+=(g;lLo z2jpK^c%saszOcHLx_+_QGLQPgL9KvVqFEt`1|Ic=HLVkCVlyR=`of{D6XO*cN*?uv zBU&fM3pA8G>I;u;op@~QYyZtW>I|%i<+|ZI+9?jm zr=Fer7gmJ-2FECa5Lk7{AbgR+b(x4l2zd|=%A-Oa6dMpIf1lDn?1Qrc-f5r_pf&!{ zj5eNH*3P$;MOZyT6sxcZr-6jP0^s6UjpwOK7Y5-pP!MVbZZ%e5teGLTIt>(rnt@x5 z88F3tggrP76olG=Ta6tMVikXbwCXfa5NZf+HHKh^nIWk<4HSf0g6|v7$vQJbN_842 z2uuOS&X|HN*{m~NecfPS*eV@}+XLYTu8w#m6u^$^`v^Z!gH0i;il$+EGA@OE zHmNz-EQFFxnZ&bMfk>=nt77cHyYd5Xr}9S$A&D2GZk2Ucy}%Rwi=c|+Q?%|S)H;8d zFyZTEPj@*bMi$_IOl8l3ZE%Vd<0&Nf8|%;oN(dJTZL_=}ZwS$t>!9bh*^0Ij$G$SG zGe<`s6Q{`+Yik1|5rk<akf2GG=OnDz#XVh(TwDiF4z;1-aeOAYc`^Yxz1kMsw_la%8 zG$vp*71`0GsnNpd7AS_c^ zSB|KR)EFo$8?yTU?U2l;%Zvw$;+86;rL3KK+ZDPMUKhmoYyk@;^2r|0gYD=TTS)xzDH#}Sg5(F-$hb;8^U-Oi3dDKxS`G$AF4#JsC&7vU_TinEM zRS)Om02eEyYB%kjQHP6yi9dMrt%fBFt3k3f%c53I@p~6W=P%#_X|LTyNKr z{@U#ryxCL2Vjtp$jgTWG>+iq3O}@6ye``JGglc*mVlAInJ}z`vN;0;{9~t4Fuz}B> zgGMYxq$q!SL>Q4W_hBMGhZFfR6GVQ@jnvFJjEK|`+4{rh_NV?z{mc9nHc-4hjkmhK zHU4wJe+&>oRzf{eA0deJ2&yUT-K6|04fP0odf)ST_i4!GIQ>tC-u_O!eLB{9=i}@j z5NH3%%$Y;!d05X0gls;Qz%X2Mthbg(uo^#tvp{(S2DCha9o9!UO2-NGEYkW2j2jPM z5Gxc&U|b6%FmC+&*L0jP&mygmz_{`5H|RJ~o<&+Bf$_2$35*9d5^gW6k-&IRBjI-A z*NZl8=p@9mD5#NeyL$CfBZ0A?M#Ak;jReMm8VR>YH4+#LY9!pQ{=C#kU@WMSaC=lE zfw7=Q!tG&nXAw0LZVziD`XHzS_PyCfMm7YXq5EKHX~s)y$y*uG9#cM^z(w!X{Vy zR|Qf%NBO95PA6^Gm38B+bmyIZ9~DMwNd+PZ6xeV@cVC6lb} zzqdI1UUc6?P`o+RT^edzf>;K+mdLRAVDYz zx=a0=>51h-{C|NYEoNf(qp~h5N`u^m$7P#(HjewWv+o6pIz8F&iqv!(6NF_%Q3D{! zNZxA0{t%KR{|h#n4e$6b}(Szg-vHQP#)eMXr7|aYiLf%xYXW_s1Tn0z$F_#vzTqJcs z+--u2e2upDo7@BLwj>omwrZ=_#s(ZZ(c|w?|D*9)v!b6~WgMY*9y1!(6uk*5jwd)* z)>|wpS2S(GU0YJN;(U#8Xq(ne-JZ#Wwd`@Wc%pA#<`sP_zjIJ*JXq5em2QGcO}eHl z3f%53XRcf{6oMTwg`Vr#mh z!p$AQnyx5tb4ReIE9%?a5v=Ko@-}w_Yr2!zV^mx`RAQuk%Qf5j$oFtopp?%Wx>GKxyI`bYnX8LfaW$eN8-)9(Px_^9Jc6+kMoZ0=id#FEze}OJ?5frWTGIbFZe9w)j7m zLN4wW|5{$@EaAUKGLSRwmou7C+kM<`V&e!33%Aip-Nu~U1o=4bl!yZ>fd!U+ny8CP4@+5S>yNU<+n1$T!& zu5ER1wOK2=@LMGdvB+9>K!Qy(AIrEq%A2=l5-({19^1=Q;i-%pXoJu37J()LM40y$ zLEpa`P4=xv_&z5yOmkI{wex^xwygex6{(J2Vu0>wcyi(u&JGB#dLs-pP z@hy&>-A6X5nc3%?&1vzhTKIs?ub9S$17``;y&ajWkv#{pbH;sNQn0i`eE{kSW(ZlG ztJ_%SPWun$cpd#0^E&c%ULTUj)}A!`%h`v^AIl|>clS%ZiesqZrqK9Qk_I%#$yKd$ ziLg9OSJvrtWzA4lD*5N;-C*ALgZnL@_`jN%{|74DQzceH_jJa5+G%))WaJ;D$gp=! zSzFc_W8~-Y%9%KSXIs{Rr*K|j@E%36A*iXPia!u|1*O1PRPo309yDIiiDn`y_``(p zfdr+%H`u*~ZCM{Q9*~#>CZcjbe8c!Zf>K~2s`kS~38lb9RP2WdQz+yY<{MG1A0|wd z5YJ3RrGA*umSo@LG*Oiw29>irlfkIS4})6cXA*-^jUNWJ#7~OBsKgJ0O4zMsFsksw zpwAg1Vw(J7w92@GsH*M+{m#ru@zB2 z*3T;SU-Tgi62zA z3fcEZ5~(tADyK*-l*HqKKnwSx#=2oQzg8sGHzVT8q3uzq-9H90{fxC@9Y=;TeXh!M z-Dbp@=GS6U2dBO$61|f@F^Z>g#?CJo>VtbhD9MJLvx9NwM<2uCypBA9*FUKwk3p|b z@&@$*U~o#NI3hE=*eT*_3kE5-|bA*En7v~LaEO_h$<>G8{k}ovxLXZ!bR;*t{ zj!~wj$_gUv>O7x}h%OUW%K@PxY2VeLtzvbo zsT?H<4$)Vx%>j8@V=ZZ7TPBoesb*j`eUIdWlrA9oE7i_|j?~wGNK{{W#S&-VcEXEc zxuiq1T)mtxD*ceB#b1$@t67th&r8VyNy#%x%hjw&$-}-kDo;}K%+OdaYf|#e7@ZgJ znQ6J2H7R*!jM5Wh$aiQemo+JQW{lR`VP3n3N55CI0_FW>c75eXxeCEHazv`@7(P@o5VV?1O^jG~G ziCq)V3*4Xw@KYS5xrA)S|1h0ZE5%z~l28G-FS7S*R&l@dbA&LhyFRJT$p`q5bKgep z$4E0rp|a5r*2uiYTwLbSf}-K-85Rwfmahg3V?$(%6O3_1+sEEmIAnj-nEZbk@ihEm z>AM{DS6v}s26UiLD-HUq!ZfDwvhs^ZLA;0*L0FOGaL)1%@2`3_F?bbj>CM5?$C(MZ z#q4JOr@ty`kGcPl{;Ig8rVpePt7jD=&;hlW4UF`GM9z`=u)ivwIHKI0`NC&(IR^aV znS2s){*`&{`#WA`e^uts9D-k*lYYtF`NfCmuX>Sekb3T~`lrP~tGKG#_WtV6QyQrF zqgvVP{Im1XV@Hoc1z1ZT9VLq3Vc8pfHqJQCu;W?W)-&Jume3EPs*m)P9K~La`xAOn za&4@Zp!ctP_#51el>U=yf0PML(26mzjEZYyJ3y-{EaP-U$noawZAp}>fM$-5wggcn zFU}RSi}5mo+KT*umJyu77gcm-1a?u{VYS%OiJa1(=LTkx!9FeYNOZh=j8!~2u!>An zwb)Xv=N@Ae4>uF=^6kDYwiN5R$JoRYFW>IhVoR-_dyGlkCU;Kh55CdA#g$ki7fKRKe-{YjTJ|Lxy-@A|MbEr|U>?M2HbA6Az_8TATi}@3K=(YuYQ+MLT zYW>eeDr#d+Aqn<>X~TCy&HNM$P%KFq4wjN{2MHb8z1AAxl_> zX`r=c4y_`XWNz+XRIb=SM}1T0a}`QFjQXZV*MEq9JJkliQZn268%WZOA60r~O^>?n z)XUCotiPD6ujC&F(3Q&msS9NL5cE%Vl49tUiR8}xPTDXKV}sN>g@M?|)&{D%#4{xZ z;@!B##j&;^Sp*{8W8Irlx z>WPL_A_5Or$jTwRWGy`Wy|8ZI=h5+0N&E9lhb>e`1uaxZNl@p@cG< zO+25VTX($l|6%{s|7ZJS2?ZGWG4e{FLgZEIV*J}xC3*FUCYH;q7UYn_t~Q5_5V2m( zVFbH-?5C$p_q?%NBv)` zv5HU?DZTRi#^o3s1_4vYI;no&Sg8xlTs&(Ba@ZKEdNUVK+c9Ts)v;zSp5tK7m@6up z%HIQ29qXj}ePgly!jfh#p1I40z-rmwF&9tWF=x^o|6%6hxjW`eo`V{y^1XQSjyX+q zz`{8I#5&eV)qt!oVH}WktdpvNSv!mavyOFAH9+gJjK`B5oL`e2WHJDo@~M>U2>h9V zg)=If+^RVbfcclPY$&=KczX!1;H^j5?q4;bF>11xA4)v+uO@T%$tmS59QiD}o{^uD zH)QgT2?mBukIq_2yDT65j__~T|5O03voXN6_EV+X&(1^lQ{6yt-t6bz zyPqmh5yLE4No*%qJcZt;Q9srD3C@Q+T{)ivGP4G}v37mDLUEx|*kZM5AtzP9a>)Z3 zmkN4&5Q{Zb@jPjgm+435k&+D>Bl#kYp7^!sAvX(iLInf5t{zUR-TW^3B6XsrFL*1i z_jvHyTZGR;gwgx~HDt!E@GiufU5GW?O#}^$xcC`k{cBlka-9)g`%0Q-?{T*@?;>tF z_v7sF{$?%Nh7SwiDnVOq{xo6jRIAl=Gr^$EhVgTNE@F z6}u3&4*_%g%sOl77x=d0U6E)J)J}lfUPLo+V3!+bxx=l7e*qm{D1M2bNAh2aQZ?@t4e8wCH-^ZcO#rFJ}m&EE^thb^2WD<{nh{<^4tMZ9eHpN4m+hB-g z`V+odYc1)+z43JA_N=B4sD(RkFMuE`vpmsCj~o6)M4<0Ls*TXx&B5!(%@LpO(OEcl)+I)~|Jlp#y>AZr1g#RW3HTkCX9nytD3dA14vC zCFl=M|3~_RH`B58XCW2nZqqBSLrLe@eTg zN~hNSrc*0-O{Z4aA<35X^3(nE6>BNtvDQfJslb!+#V_&SfI{lAxi7O~3?P&I5m`5xSdJ<8wGTv6?i~5ZzM0){2reL~E=izvPStSKXJtYjD+tUc$9FWIc>( z`;Us+j>1TR@b>76{#b?gI{sgh-}8{)b?&BSANkD>=_g$vxss7`B~nQuall@#YE{3Kw@J4qq>8y__v_^1>yiU#9s`I3tYTmD6&VS$VKBySJNmN#zd9(J=mxT&c? zv?DilgE>yw^7N{9QkNpyN8%dvIhG1-bSK(ljZXpv(8da}MFw zojilL35OfFbWukJsgg z?D4wX$aoJ0G?u?>kJsh#evnV_Tl{BO#^ylK4>BsCQLjF%u75FtkzF>VjWWBuUJp&f zH;?)yj+K6py|bx4rXM8VuIL9@ul*o<&yquEp0ZjQ@qs^V(AU}zGF#aX@?o$Cr41#Z zXT_Qk*)@E43C;SK03I;@!N&Q}Hy#znmTY-*V7F`uB@3Gui)vb~-;JXYZ@KOy_6OI2 z?@{9OPQ?E2FSGwWntlkq*r4`H%j~}Djb6h^hMT_Y9eJ0g>ub4`$jE;aBfplwFLqvy z{M8uw`q^8%8Tpgd$fvBO-{srdb^Q|L23poaW8k0C&Fb|Ca;`X=&8nDxx~@}AW39FH ztAQ4X4E$`4D-^NzV&L62ilG$fOx@UtQy$j?ndFYZ#2ahg&uaRx%6w?e`&HJ=nTmRe zta(eBH4mDvoBiqnE)O?1wB}~N$_Dm*>{s7s|8?M##-2wF*r{cNJ+ElM&fcg6dtO;A zr)19q(%JuCsl9P~-ec$WFP6)DVAbcGmoH|GMPE1fH7SG8(fAq54N}Dp!_PWAQyh><6?z#u0)IveQH-5)B*={c&=GqJ+ZhxcP-(zKp^_O~Hu5ag-i`376-gB$Kgo1_#f> zYWxg-j9gRw94mSj5Fvum5%Ppq4hSAXGaYi*=hgZ47vVkXbs2cC;Lc5Ycg1G16(45i4u%8JNgponwe6Dmvfa!*UXeMyv&qH*UXeMyv)Q&*SE$=*Ag9wNY}R-1f(Hd zOKcz_UEgXV1L|)#9Eg*yZ&fHdq-%)@M5OCmH6j4%S|S1w>H1bhK0>;dctAwDzEy#b zkgg>f5RtBLRoo+_Yl#I!r0ZKX5)hECZ#97cGQ1i0HMJXT>xbcAn<&7Tu#umX3zF^p zX*1ITbY%BqyRX+BRKG}R*mm>l2Ix3O4jY~4FcaUC7{Da?#G7H$bhxYUU|z$xc8RB< zbvOKa*csZ-Pl?yyc()M-FnDl1|9jwgr-bXagx*klPOt+sMyxOE_g^&j zTp1Pz{EvXj%Xm`_@92Q3F!MDG88IbY>FVTbJWOLI7@t3z(lRd;s2&>jxtwW%kr6oi zD_Qow$~)37mqW2!(&ds^YS^50l-2lgUDPG|QOG_z-i$}|qmX?hT^2Y?L_Z4IM~c>I z=#1z`A^T`6!pZRw{U~G~J!HnoV1@LfJIxyZg_&R@67rAkG)vqw6EOnPow~w_Zp9f$ zcj^MC#!M&Zt&oCrr><{m%yfd@3OPu3>hh+>Oq_&tr><^l%ya_O3Ry^Z>f)9GSV(uu z;+9UW5E|6RPx3A}E|E<>VR+XA3;7U1-PV9qD&>y4LOV?>$D;K*gY+hpmQATH}w7$_)dsfYAJyg6&dqCHQ(DoFJ& z^M>DoMLSiqjigx6(WW|*EZV7>ZsbQXD*D7|)lSuPBNIkL3+|BfuxzJlx{(Q^paplx z1nYLHrW=_s`q@-Rl7%}}(~Z#2jCwAu+^L#wWTJBAPStcH6O}7>s-_#6h_BqKnr>t; zzH+B(x{<;7%AKm|Mh4?6cj}N9TUrbo`dqMbr)s*9!EohHjrenRuyXO{!$nJN5?Qq4 z6VyOD+N@kzu)tGy1PgYI7+0XGF>QR>uRjr6u%mw?pF}O+tHWJ=uMGxJJNrfk{Pn> zhx1Cp-2a#|NMkkChC$aO1Y|Ag;+%eeCGTCw`a=4<^;h*FxytafJIt%}R~2;ked3>$ zpzNEO#+mWYWLFYHlm99>dJad6J1E|!|9uF0;sT0;>EFf&c-H90xz!v8Aq zx)KijJiecCpZ4p-@_-?KSzOPMhp^3?1`VT zZaAMK1!O9}a!m|R0l4DbAQjct5})%6!kUCVq24*fjVmD)#|{54LMjrH=#}PZ(^$QN zM&fUjAQkvBGDxd~3P^=eZkV9eK?S5@h?(dPsrVa@h;Pv9paN3yXEV_qQnAKNbca;j zX(qZuDsD0pv^pqCltU`cX0RKiVhn>IPRk(`M>0?j zsYtUQDZ>}$1$Wc~o`UfZPXQ{)L_Y|2;DQ8r3K_*qef$hjc$bZS+Psb&`7!-GY&5T- z-?^6qIwW8xY6EE$JjEL5kXUEyssH3Z;52_1o}z>FLAYN#RR2_xA&Kc#u3t8`r!b<^h-bERtBiYokv*kczeP}G~v414TC1&aDUGs7OcP=TWUiJ4)KT_{6QTaAro zhJALS97!GYeJqqCse`_cg>ocy&>yN$j-(FyJ{HQ6)bxEUlp(3j`o&izyN)_D_%YrT zr1PVyvQq0uRd-4!(dLgRH$6o4o;5tsb=!${kk$|I)T4LsQDpk$I-~MVmsiQRzqh{o zJNrK#MGc#hzI*rnk3VPWi@xhA?{))(sP~_D!_ptb2QqoL(OCI--mO%x_7Hfmn*R^- zZ(PyW<%)XDzg;Qv^?#aw6F^r`t@=&Db{(o(waLF-D&aa{VpO6wk@x5FDPUr$Ao3pN z-zIWg947X6oNbf+D`sY{>|7m{G(F-Z3x0l{d%W( za)gTs^KaeoW*@zvgg48T@MeOWq0z*XVI{*W$%|bf`QQ*bgO3q(3$*@ z>O!Jf3gfc`_rZcCxCwOTbF$em(3yOqh5co|Xb}q`&fbb*bvp8?7Lzxl=7wyKH9n_m zR1h@y$QPG`XQW2@SpPbVMPS#%@?YMC$+_Vr6 zl-Qa{Zs_r*e!#X=ivO=XJgkB^d2hpNYx&`osG0BK%6d0QjE2^sxu?7VKzaUnGjo4M3>(YyY)W$Qk)ay)v5g{VYG(Vqzb*Z zrI_qheb2O|*b)}e1ugVKYJ=%Yp`jyBfirT6lm-?c!NJ9fN`b1&rGr_K*bvjzOjpOJ ze_*C1#KZI;rcD`LgK4>zZ%SUBsT!tgO5dFS&rC^TovEQr4UJ9Zm>MCG0B_0&rbfi3 zKFpM))|on%sbgbP^c$KoifPHMGc`)4TmjGs&_QeI_6(qzN)$o&LqXm4EdHrBWV?Dw z#GvqR)`;PGCSn-Wwm4Zb*4~{a*d3&GUJ%ieh@nW&s8XQY_P%PF#LnwyvOBSsy@Q}@ z%XgNTh74=akkDj#(2xlY8ZuEHG-N`9hD?+P4VloOArs|6Lnbt6 zNMWJ!pdk|)G-RSYXvl;H4Vfqp8Zx0lLncZ=Lk2Zy$Y3dG$e;!d87u`28PuR5gQcJ$ zgBmnsuoUiQP=kgHnxG*AfI3ZqA%ccdbzzi>n~}9rfcxhkV$+g*R)dE&)J}@Dnfet! zVnS*kBcMBB)vHKK1enlw5J}X~_sB+$i$dSSn)Fjw-*faej2lWJUX2?fycMse?R z4X~5axJ-9#Ua%R$er4R7xZ$&f#A>34#J*4ug8RxQo3n}ScB;p`)0*)Ql>YI zADWUwuN8=mW|t4}|EBS_*1%|?3hx#*R6Note#A*VEtNiZ`uhSfr_->L(hyYoTqIwj zvq!@`-dHQI4C;J-nNRIoBnCJdd6vN9U}EknH|2R>0REX&@36{Ul=l@LF==Hp@t%3# zZ=rZ^M1!L+H#lcPNdQ|~JTi5Z)hI<_WTak5689cCOU7D)F-iqmE0414kF>tC+FH3; ziV-I__$P3OdY#?!vgeA${4eEYKh8HbFFQj{(L-Jqe6Ni6ke4O;A~QYYWdnS64|&<% z<~u#)W!psk_L!G_!p!uLm;Jq&=^-zx%DjiXtkrm(`A+xT>{s~f-E*@SFxovgdk&-B zbF&n!?jbiznI$P0R?5vvzl-;kon3pv`^wJ#n!_R~9{C&jBnhm0b-1hVWxNJ{kJw)k zW0mKBTz+;mKdP?F_sGwV0cxekRrDW0Q4!>d^&c5e96v~KorG*k=HSOV^aLmee=i1{ z%z^()inWv_4KP?y(%>VK6F|m4jbVlA7AYmo4^NjVAprz`5g&}CCX{?zrGc7EMkM3mgeiS;i}OQdLS?Gz0q zXeywr9*nRd>sCp;zuKV;O!26?Rf`WG0gDzK=geFU>VEbrL9jOOKOVaBsKiDo0<+G` z^sWKj<$ays)tUK-<5iK;y_|dig^zfabbP}1qk(%q(YBO8+dk_j&E}+ab?{ zGg2gG(YVI-R%2dHRQyq`TuqFzdBX^X7e6fbP{!Eo)wq7%Molmvd(@4&lmmE~!pkhO z3)6Ycxqr4+oPj@VLV>gA1QjQ8Tr{;yMF0l3kV}V@EiLKB$p6N&^v}40!5|uOsi|)xM8E)XPK!PttX33adJaZ4@`BPxCW`1GV4g@m8ZR847nb zojcskv~`}(zJe8;OFpNaQ(r>Er?TFR#QZ-x(!^6rxB~3+Wf?D2BX}Kus+YUT1R!l` z*J(ID``RXxQ1j`i8|&Xw5n2u&kwli|*$A=So0kZlm{xM-3FssF-EroT5L(twt5IzE zGfaep_0RL3*zy#)A}1(PaXn)^pOH7~asD{_5BwohV<-0@?@XzRj|F;$__FPeDb=fZ zT;j`_)Y`Io6|Leoy3a=OWumCmtC0Az(A9SX_}`KBK5gn%$i8l@6vgL<+$+hX5%FZw z(}zeVaePfa0nBpsoMYhb<^^qj=|QKjU?xH$Z&=4?uk5X;<72n(er*)ZHT)h-&yu7@``IJ~A42tuefJ!1F{l65{!iz`P-W zZqB(I#rv%hz(@@NdR%D9Zpsl++?7<(Wv9*lfbibi4DWsPSNSB%{deYd*aN(p{cArhLfv`7@GfmJIhbd(FyzOVwwO$SOIaB5 z<4apiCcvdE4Egb;EhZD-QWl2%cq2=KOJM?8S{U-~fusSfm3qx*vSP!cMMAgEO8z0ug>YyIh!jKyu*2C&RY!>Ri zlRp&J!&=B-K!YD5Mao$ZA|YBoLd9o%C`T(qjwp&2$PpDuaKa8LM;{y^hGb_TMG1`>PXwN5K zc1MH)cQS!Of@JMCDgS7gLo0+a^M{leNQ1Z{X`nqu(jlfzU6MX`kJ#QHq?&{jW(qh_ zj(2rxpd$)F$uKR5iphv{3RqUVV_P{fd>}RRiS;+;i$_7R4C0|viHELV@VZoKBsH~g zAhqkQB@LWHDEcD=zcHrNF090KD7b&7pf7<^y7vZcVH|NH)7t*Q=n3H;9VJcc<<@fE z0v3r>jHLStp&mM~z&=P53|)$Wi-cHq9OULjw=Uq$2u0MID*Q{j|8zcX z_79uG0H`$bZ0y3@G>uf^Rs2UuEy$!9Fz5JgdxlwEb(WzeER054p|(2+ybRVmGoEu^PU_9nZe9OCb;5 zRS5P*&2ns$J(7F%+$pn9SN6~@;?v{iTlbzrj-y}kbhbmOk6TOsQ}U1Af6F#V5>;LG=3OUFLKW>+}gYw z^Lh0-WM=kL;+5|;bclvUe(P0!r&P-C0mG90ELW59t`nPXYKEYC$UC*-;u#9?LDN`Q z(iy;uxeOk6NE$K}V05iW@faT67+M)`3$;ehkXH8Q4LJ`0#fH zO|Zv)P8-~JY!_1PxL>>P#5jWM>?HkgS|@r#?+-=zdczT%&~uaR>m_LIcoV8yCzxbL zz$*HVEIIFb2|Y7AsC9zLWtisI@PMy39Ki|Qn`~ciID!+pH`%^^1epxZ*1gI0^@bxj zp?j0<3FI-ZFXIS4B=H91IO@yN5fBBxY2>)tpM@}L5SNxsDrr{Jze_{~yVmeSG1Mz3 z9;_b^BWML5+Mi}UJKlJ*WEYYpd&X)YdQHOcGO}b}p{L|-r*3yH_1C$_hB-e_*vVD? zk3?6L@C68$k$b-XDvvH#JQ)M#q~4Lx^6vIEf!xzIlZv7AO9#cBNwzNDy%Uj5QqYDR zqJNu2nN5B*)+aYT2ma78*;3aR(MbIuHPE|VIY@ablWBiAhARc`ohI5seb$VBb0se%9xmOXslFLI^%sE_IxP{|H zvZRYIQ6I)v*4y=;kd`!QYbAc6KF)&ip9+LOx<8)|yh^vjAFsz;$J6EKA^ag1MO}k6 z{x_+AX7qLt^BYt5r4P(= zl4@9Xfc?Gp{I%p9bQdUi7lVwNm>>*?nYJ2duxuEo!sNwZqbBwSRv)w$ILFLTVe(?I zQ4{;fjM+uhni(ogUJN#hmYvL)ZG^$Sze9z|i@`=s>?<>7AECy8#sbWMjhZO!e`9S0 zxB@CnUJN#BqBMOBx(fV}`(%bu^`!t9jK3YDK&o zgtkdv0SwKW^p)nWD*6g!WMyi?DxGzGyJ0&bzais3o=bG{2H8)(| z!npSu(pTq_a8|b5wSK|-WWrv4rk@cl>^|aO!$S8a>9#m*$Z4l~2D zo*XXgvR8O{f6i%HSF6pS3 zsT59~94_gom#Gv^og6OdsF$e}PNh?N^2@Mt?O48?J)-OzA>Bf^k6xrtvT8O(vGb%rDct%TPLWJ&)|Hj;-fm@93wlzW4B| z{;c>J@?{{1Nb@`j&doGqt+xa4u%4gOTR8pNaL zXOb7nxo`S6VqKzfVU+qGWX5rK`B@DEzUg1c5%T$XKC_WdOXj81pTQ{GH#x<0oW-_H zAL)``IjxuAAI7nOTyn1OCkO(E*Y_u$Rj-FerF-@AH+{J4;EkGhse8-+cRq;TaT;E) zw(eclj{_Wc|E#5}=AJzZO2NFr#bv!1JDYE(=M(?maKC({M*mm&BB8z3>*TZi!{Kxn z%lF$y;NO_9ahicxu|zL-u^i^KF0SE4{_(att?zoZE*=rQa~dA5rr)&Ujh7yrd!$@c z+X>trXlt3`ymhPiKYpxz!L;)o_f2Q!8}yNKyi-3K+)&$-rv<$OWED4CE56MiDc-1m z9nZ@9aj#wn4~Bmct&N?M1HUg9BW{0k>;1j?hF)~uTP8=(a&MB`3U0xh*Ae4tre3@< zX|5MI8pxG~HGT5Q)i^f9dfLW0sW;uBi|4e9L`!9lEO$>Eo-n&k&%D<8yy5uiWcz^DR;X|J{pjCf0b8q*`GY|bi zr*&EQ6RZK18~KxA{|25aDY{;46dE3?;(I)lp|x|5<_93_#mBO&7r#TMc&}W#Q(PuD zl5-Dci?_G43Ue5Dw;yxWoW_@!9x z&27CkrrL-27|xPi{CM4Z_l-<)vz>awnz#vjVY|Q%{-|>cs>-IQZg^ppwKNIM#x5?X zZpHh1hlrLf#Up#gj^wavvCktO>{Y|UC4BJ>@-xY`?kaZ|ifh;nRjS)wV0SoZS@W*m zvX{CHhS`A~C3&|lt4g3Yn1HHr8GTR=PzHY%p}+%lth|hR3)`BlWEH%QRW+$MuG}cK zC*8J&m)^D$YmzOgwz<=DGuO!J>sA$$?oPeGoz}#Sv`ugix5@I&J;Rx~nFGFCHf=Yo z=}i{}_wc#Hb2FdR>AL8~CaiW7i-}XQtV_Q?oAd!Jt%*`#i|0*b*}7$w{lONE59VC` z+3W}8OSzd3KPXzFFmn}Y((KapbmQ>zeX6K48_T3-8_DEyBK6=E<6|w|%JbFG9l!7V zfli8oqt=oi@MrS^nd!iNEfjB%Wmi~AYPFdODPPZ{w{G}nV&hRQ`vsgQS5(Dtt~cmd zyLgkVEve%#e{HN?R4rn=H^>V6gUD&Fw4AfyRoS~om?gk06BwRuTR0 zDD;tb?vD4n%Je{?swFE`a(`Eu9w_vcX6{T>rUwfBq?bDrmFa;(e`)2;L}hxQP%WL@ znW#(;6b_R{?o3ps2MPnEk2@3b^gv;tv~g!Jo*pO+k}mEH#?u3Z!P3N?!FYP0FhqK| zGZ;?~6f9}s&S01x5SGL5v`Vgaa5wY@(gUqHK3|hYqa6|}<{&MPD~U5HFU>k;F>}a2 z2kEuoAf+={!)26YKo?TQ>#%-^39o}Enb*G4^)WE;Y0}9aZ0fNuUl1c?-CUrh><@?ceI$MXYzEOXgK;0Nkl!84d;X4?PGd z@p=_dr{UmHQR?my$%BY+UJ?i=e}Fy8gg`paGot{^Cb2`Ih#xDjv_nCdK{HHZhcY21 zpRz+?27uWlb|@2K0xCNcW&oH?VuvyzCZRjb45Xw<>`*4eM0A~*0bn+X9m<55jQ-lp z05F@x4rM}2NF~6=-+`1gi5<#>l9Xy|2S(YUOel%zr5p>mY!W+^2_-pI>LsJ>Pzca* z-zunD3Z7ARC=*JO`XSCh;g3n|P{@9VqDtY9Nuj7RAsze{lBEGqZ&G>CjU**5dualx ze~MD#@)233wT*I-biFgC8yagkA4O27@i3{9+%M?uFrAMguRk%beScwIUtcF-kE@igO$cx&x7*!eCh=_;SHWir@_8Z%FvUweR zrFrdpmApp#10?1jZr{FRzkmBCa1Cn)7Q|VwT&k=!D@t00W0p8_X zYAV02zHDGBwR=S9%l2q0KgyRXMBl+wro~iliHp92sZ951DjiH^x<^y#U@Bq6U^+^{ zJYy;yOl7)9Q|VwT(>2UD5u(NsE^%5;yW(!o@wyO~M{Ql>|#$(q*R7DVfUj`!khvO(~g5ZG+UasXQ4B9;UKaU@A}HqnOG$=C$v? znAi7XDruTR;uR~2sl)*8&S5I8BVI4K&2Vt?iRK&;Jeg=KB*nMIV$3}b46f{vOc+|s zuoMl7P+yKqDahu)kmA;YCG$ThvK#56$atR1u!si+ROBZxp2lvfz-S~zHh?6Dj1Owv zaEa!gWjlDvMPzg|!KYxdSU<7ShOp#sZjrEf)8Pb13gvj`tugT6ZMKm@?^FKvknw{ZR zx-zF&FN=Hbm=f*?#Xu3k_kHCHXn2$cJbCwE+o+?15UI3R?E}NXF6u7KE~?{+Ny`=Q zmAxPZDhdM2{#xzj5=fEsK;IL&MYVWW*Ip{EMX_#E9C2{Bvb!G3=9a#!PU4NgaE zPE?3it~d=qi3+46brTeQE&hD{pTy7Qp`GFG;mp=u8xhlc)dWh=hKbXzV?wxK4j)GU zPL68cInH*E{Vwp7tVG~O{#pkKxZ<7jtr_G;FE>pI{}}x(GGtTQ&kpy)P9M^9dC8+X z#Syk!pYfW+J?D&ncADEkezz_dSp0;YI){!$hK*>v5pvHY3 zu0+ABx-|n-50bpKY$sbiVqjz4Hx_))N$f1RJKKLCu}Fz{W$T{z7q=6F=JP>~O>%HA z{~HWBUV}I*k@pceF~)Pb2IL+!IN40_qd3V&xy!5NH!(pfoYA0Nmj_gSCL0Nl0kJ;N2D#oaZG^{Subj)%w&0qC2B~s^%3KbTY-NpU7ey3k);g2X}~vU+)lf43>d)7e7HN z<6W;iBz^oFfaOS*pXYx&@k8xkV4i=*o1WkokPex|0m5J4Z5Rxhf$a{}(WF0%B@E ze<6lOZtM~bn`rpdze9dDxmg)=bgW`yCQrUcqf&}8BFAb}9HNZ#8^oZP{*-}N_IdTn z4jo~Pdu4f+AVCb%hpR61%>F0Bh}oV?LtX(O|KlQzCTan+_z|{P28nDC$z?%{8VxW; zK?^=|XcV*{@^IP6pSB}Z-qm44%AfI(;laLn?Yq~!zPAzidx948hKom59v9ojR*_-ra@N>+^?8qGIeE3vgbh_F(-4 z0Fh6#Eh@M>0_Zcz<3e($CXS`90O8r4CsF9@aA4J|ofO<)Ysp`r!$YA23i;XN(IHfT z$SxmFfJim3LbTSh3!eg^r+GoU=m&##EV!>2bahDwdfx>4I36qQKysTyP=^#pQ>rv$A7F@zZ>*_EI%4Z0h-mWSLyguq=|B zc@217qg!~7saeL=eNGMiTAgeU7D;5>+s|`}aLB=V=^YsacVQGgjH-Q8R8hTbZumKk>Ohy_3*pL4ff`2+bY z7_nXLKTsp!-$wuS!GAYR@wRB5~LKyvPDPZl)YA!UVaS$zzZZkde#W1IDq|= z#7tRf4lAuyDvhwx9B&3o>XK+l;jR&TY@Z;L*ecdOc6mAZDr1s?RCvo(Y>rAjVlDgq z2UyRzMycbhrML4QSI@g9fo1BIT*G-TvF^>(UZN62pA{nE4%nMXRkPgwR-;tjr~8T3 zbS-SjTycI?t|&D`_BeIxLe#92A}m-B6p`=c5>Ei~(0(EVw4Vse^$V|Y#~l>^DD+xz zd14*L*m0khM~S-KV>R>_8fK(`L`BTVdDFXid=t82Ox@&jvXEp+=M~F5#E}tyT+Tb| zhGPE=(90#e!ARJmQg+ExnBni|b3?PWyug+1Z3R=uzr_JU^>)$+0YX=$mrNbS#HFW_ z0q6!*{g<$r!w_@F7vLf@0LszB9DnIr11ncm;W$KO4sHe3Ao}uc9==2V^i?!qp{jJ;8{AzXb zO1l6#j|`;Q1NS5~^yXRhpFK=EKT z@`<;cREuLx+>`gF?=P_0o6beBa>dUFEA^SOmHMdFxQq2>R%$NwmbJ9NX$z_Uw3_S> zN@{yZK^5lud|k7w@AdSADx{jN#x@gGJsBzOoXTgh&S%# z9pWGKtQsy+)lkybBHT0bm^d(w4ji>Bjd0s;FRO87DBWj^#xDXyFVfSC9bny_l63F0 z8b@(uYJ#@7tDAT7t6Xq6(ydmrlT)a4PwQnZ`!*{pu~8-b@sfm((~~33;GU+4Y>Sz2 z04@gtohuF(R$;Ou`2CUTao;Tt!Pt#;ADLfY+TOYSyt~z2?Xi}9i<6p7-O|OpO|HxH zctxcliZlHFEGqfl6xpz?lTt&|xPiTtvoTsA!0F$71ow5H#3O?qYp&=WX%r=Fo5g_= z=zo$ZfgBG86XJHM4ww<>fEkevm?3{S&;c|44jnKN9Z((U0J>9^bO5M1qXf`9S+-{0 zpu2g89$@v^sgCj9xF4ViXnd%e;1;6^?5bAU>hf=KaEq!5ZZVp`u5P6tZfsID!7WA; z*n?VWY8y??pXc3TG=W{yY8y?Ur$iInVl;t0wAD76z)YO$-C{I>J)+e%n!rq)?A>BC zfqiVNZ8U+IKoi)byjxTg*hUj<3K9Angseh!OFGOw!A+|scp~`*MapkeO#oe0w1-`2p*S5D zz*VpSHam3(a)JVQ171jYG8p>Fb^b3nhkO&+G~YZ1*_Uq?ifO*NC12N4z&&gH4&SU> zFW-Fvm6TW~-~AS80My_NaAa(q>t+2(9khM(Q9~0^Lunk8vv5!f?9@*|{*9Z8CrnjP zxv@aol0=HT!N1*xG^iVVCN?s3gC)9>LsOMIDAHv6U9?cW>K;eDrW}>r9iYAi9ymdv zgw-f}^g`+>tLe>wqI)jqSDM_DXYnJZRbQ{`=2`UTQVk;qe+o1p8roitU%W-02Y&JK zCsw)^W2tQ=BA)J2_rW+6&i#B8KB@kZ?BL+pU=7gh%Q#tESoGFH&t&rcI6 zp`csfzj2KaNYxXWVHkfG;LyVOQ?(SRA%-F~gt9`JG~88PEYugPej^Fm+5jH7_g8|5{{U6IwH0@^CxySO5I zX>s`~b^WdoS7gufg#TkzK#~s>FT_c9v5^YA5Xbxc{ya3$rZ0__Refo&s@d4Z{AF5F z?L&*0Rm~nF)IBJU>lx1#ui?LH`g2*0pX9Ssw_gNbd=YU$*7G; z?7}YRr=L=CrDac6&q^YjbJ^MT&tn;V-kq`QInK!H=KX1J@IDIvF);dr9LDR&B(Gwg z2?^SNl&GfjApbLEHqLVTfKb-Pp$-L!-P8FSFG%1J9M6;mM`gSl#YSi7E;_JSXQ%3{ z#utYnCHTvftZ|>uxI2hl%a+VJ1#gZT8}$9r04#_uyVzScB*0AxC(p2!{Tc&}Z|^o= zdA^1(cU z(I2UJ1S3DJ&!=r1=n!|;{c`Um*0KgnB!EGZ?Cre!GMkT~62r_V*RbW3a#}T6Hk@z3 zoV>M|u$H~`oWR15caMfw@hsdRc|>CutTKDE)T0YlqGEa#6LzYqcHW&q90QDh6vwd9 z;G4xSb$6%>ne!HzFvb?{3!+~eyGt6tLW2r2!=s)GmG|o7O3FLYr5kwaSLPZdh9SM* zx+-EAL7e3N@MktVPAA%NI`Z_=1utuY7}E)2&|GcZEVrN4@Yj*DXg|kVUxucyP> z+h{ec!x-g@vj!20!Ro&1)a{ZEvW*A$`3=2$3+7)fwu!`qZtzi|8~n@7p(z?}HC;^P z3ZK(nJ{+GjRQBreSWWw+dhKt-wL|Ax1D zL9IjIa}DuZ!})-iJL+f>^DooznY;WQVg`ae znRz zAe#^!?5~8ql55xn{(NUb_nB7HZ6pHOfm+Loyz#%o|CEP19pPLjd6eooLyD)T#u{2B z;UuM1LI$<&J$+U%Ov4bvsvI+CkhOAby8iTeG!$6{LvEda6n9q2&l^cuh@`Bu8mf;G zN%;bj@;M}ByHodUF7;>j$85SwMhcFrk??LV+qD})IT>O#y^RzYmq-FMrh#%8pjm?G znXMU!D4s>=57~=5jGX+CAH)#6+2(1JRbD9sD>(KkA}3SiO&}*zD&>UOOt~kNYksLJ zB}q3UC;f~ggq+BZOdKKL{?-x5$(k%hbiAQI;GH-^|C_vbkB_3h7r$8&AVA0j1VoP) zT4T#rZApujRjV1?O?F`;K}9KArNvTgdo+fH1ZyLZkYu_YMcY%`o>qJ8>8YnZt;g1) z=xIv=gjTsr3fuIR8lig5n67Dq-LNZwA|20%|JzHxgn97 zfr`*_Lm@RMDMB?9-Q~H8P%9IjsHinw_fPWBp`&VkCf%A)xE-I&2+t<5IN_GTM`w!l zvgFf=^c-xSd&u#BIbPbUQXnsXpykrxUHC5OONEY@EnsRSGBv=|R>jnLf~k=O{xX=_ zs`bB$sZ-0QMgmOj@DAX$b!#=s=BGa0`&D?kd!NaC!n=;x-^xQ6hl`Z4w8oFU*s$M< z()g4zL#feijYVFynn!V-)HE=^Vo*a5Is7rr;kOz;rVE%aG0oq1A2#{HQe@lElgF}V z@4FA1bnnV&F#k;dg#~_(>#6mAuYJ2 zk|I{@KBQyO$kOM7Geb;d(>y!;7nNG`Z1<)Tmc%D&Jf%2M(d$s}_E4t7GLf=TjH~F( z7yIO*>pBEeAUE8n?4K|DvT^o}vSIZOInQ4hH&++#Ao-qZ9ou^Td2)1Vd1$H!qj|WzT%@WZiVxuP7zVy-tZx9 zz96yjk>Y^FxGDDr`WbWxk&R#A10XVPE7HAaq_w(u>iFzE?d4AVJWG{zBFEa6`~n%4 zOixHecBbf{vA1hk*5RmkoIs_4>dq0nz?<^&0703D0V57gX>xE(gkZ1tBCA= zZ}@Gf8-#B>XsUmNZzP=Oc>)u|!TnFjr7eDJZ^HpN$Mm2OdQ0@OWXVFSd7|(RTyf>X z6OLziN6gu8HGW3dGVCMj-e>s7>AIfbAFLY&g7L&PG7N-u!$IEA^$Z7L-LQ~tx}ISn zQP(j%Ol7-4Z zluLa2FZfw@ZrX51Lv z>m9OXtD3#Xr73{06X7eUM;U%H-S86}9m-N_3Dyw85BN#L8;7-zs?vjl7YXNT(`iOE6l|Z#C^tR`dkFu#gub6kE_0VJe+6X6_k2iSL*aA6hO= zUH@036ecKX_Lag#oFd+Y<{R1YzREv_ZnOTywj~#egsx2Ea4g-EfN@xjC0J>A78BP0 zY|3~R|H?FAsEv~A56NbOee|O@mQg;}o`T{chlPFgqqqBYu<$Y-gs;=>twg}s?p<2f z6O8q(hj?uF0iisd7)c;*FRp?Ny}5HO>8n9M4QtxIXyhfUd6G|V*BEl+0Zm1Z)yTL^ zh=&+vIVs9$lri@^hT5cAhIWfCH^n>v47t&)LCB3WOf3%pLvQ5!0icwp+?4VFFa(G9 z005Od<))GcN;DL=Rsj_9l$$~x0EXm#sQ|3na#P0xz|fr7McOC2+?4SEP@-F^<9o|Z z6%UI_b+>AV=yFrU!=jSiOl=TdZfbZ~RJyxV`$LzT5*`+n@Xpuv(B-Crhef44DtOAF zy!(Xmw1S5g6XY(aAjkgOsnmzWTt`1Xg47u~UI3*P&_5N@B0yE?UN;^&4yB14|1Nf- z6yl2SQRKMnEAf3#Hjv{t`U~S8@HZ&84Fq``MfyJB(Ov+;i_w|S7v$S(nQppQ3D0gg za9A9ZQ3qOlfy_5HII6zY*T;8+_k|9{B70NkK#gFM9W)g%J^8Sa{wi|qbv z14Z^8D%Uc|?$0(*WbesEc7L{kB709Rviq|Q6xn-nk^PYzWbesE_D6D%y(bshAIU-X z9%|My$o`0r>^<~D&mj9FKC<^vv6eyhM|@=OAySe-_D6hV@1Yrb2H79+k-dj5q|s6lfeODbVSn@b{jgg7d2<;mY0_$yf(noBaLGIB(MP(2cavI#oKldgac8l?Dt{1nDdN+rv^V@20xM0@pE{=9*yw&{9 z5N_wcH6nhLd^z^gXV{T5td)DOlXZ@V3Bsa>4u-UrB6vbtc_F;w`!Ecs$(x;U90 zP9|FFiptXMjQo|hgsnF2*=VRWe8ejxye8^JoK9#OVYHeb63ybjM9*mOSocC+Ay<{8 z1nCgi^=Oi0E3(*l#0E;7v(CQ;qd*kCz@v(3+z03Rbh;tVC$DK4v!G z+(aV06jxFIRe|`guIiUy^j*G~pIV^3yD5X=i<9%vFSX!jLJ!)dP$GAdTEJgTE#RRt z!uB7;^vHZWr6;Q$F7y0)$uG(~wI_>^UK=hf6VgNeWt3C|o#4J(XJXYEwW5AV)owQuAt4 zKL;R3J(WuHYEwQ3AV)ow>6g`}dX6zgITE`YiCt}q=K$nL>~17>wW*y0kR!3B%Dmc? z&H?Zxb~h5c+EmW5=u2#=F|Rg-b1eE2yBmpJZR+M&^d)vT61&=z&9Uf9Y$-6WHdS*h z1`@lPX+*xnrfQBUs77GJ&<6_av44WswMCKF#C43k9?g=UyGO9@xOTU;LfxT7* z_WOU#71-Un*E{6D<*y2Ca`!&MG!zY$-lF1cszDnaAh6>h%G2xHG^TP}SBQv-9Xcq& z`YePn7!=5AQ#R)tga=iSw?|1p#_00~(Hp@imJ|P^T4q*ASJLYX#&UBA^RZgx^Na(+ z=WUGfI}78H4NK08Grv;9$*EiVg_5J;4)4=k+4scG!_GU&ccp%n{{!Duhxa#Jkw!;u zFX(Ey5_% zKn_bj4#w0Qj{$%jmV6wRTyH!E0CGGA^~PhsVvfh4-gpdH%<&l18;=2tIUa+0<1t_{ z$74`$JO(TVEV&+*ygXw>;XIeBd2;sQu;X#cmBD{2Ldu=XREH52jb4^*(y4$_J#8@Q z&w`U)cd*xs<`DnPm`mr+l|8YdzO2i=L&E;TxOx6Yj>o`n&;$G3fa^ckV-SsW)Zj7T zSdHKrj{yzLlZ?;_SaR&Py~2}Yp%-J3HsQ%z(EC4%C*zaa7;Ui#HH5tXcp3j1QG{Ok z=dgF>Q!sW@;ZN`j+6cF6ixW7!_uW66L*JG|U-do#p(PsLRQ;Kx53A{HE+sj@Q>}(E zY#PIfIu>hX9=lyTo#(tU|g<;s7|#DFe1p$QnqBkPvL;Bk0@p$ew&o4}uV`r!ip;I}Cj{bFJ? z)cFOt(XzO6R!P#?Y&HE-EH-I{w{l=By!)|j(^ro3 z%#`NVLph!Bd^-y#T>eng2k%XF$eBKPoqiuYT8e8QJj`$U;O(x(_eM12gYZrYYN!n! zle!^3zk`gZ2T_yLr;{TU4Y$WguBkZ6R8Hp-On&Ku_dZ8FIS{^faKnkg&LydF@gJ($ zdxg_Y3W2_xHfLx&onNxN2a7tl7asjU3iQp&LoYcqr_wg=PrIdQq)3oGjLwy>ilgA}AYYRvo`pGPYyRpUb#w?KLW$O(%3s58jug zv=$`OV@q<%bF9bk2IC*{rcf3zwswMF030LuO0AX^ixgRn?~xP@E+#0xKJ09+bPiJj zcprtomEq2)dy5qRB_pq5lT!HW^jgioBk>n~W-`TEZZdQz;T-I`SNn7N?yCF}DF-Rj zmJ-K0Pv83?+%5l{3wRVfMf8Z%7HGEfu##)T`h_{|E)AWV&rLGcq&4++h^?N*g!2-gH>a zWn_ZJB|YOx*&sgy@2({C;ezZ98ZW9V+~{?*XfaycCGy!w)8KHU-vKdd+}Q?#9_M?> zGp%Xz3`D%)M#BSQ6gf}svq9bAM#TeS8ZAl`7Kr%6jgAMzbXtV%3Iw_9hlPNcR*RCt z1VlXIM#}>ty%w#;doGIPy{ z|K!d!>!>|NzeVY_$bi}o(^O+iGPFzEE#@HuA@W9EBd<89gEl61re}bp`;o)p{ozDk zpGwVG=??En%-CnNiGZ?c@0XHcbM7*^j^O)eROD^HVz-Xl_|S|%5&GQ*boknhC3B_Y3sw<)ZRU8=)YiT&=U zUc{X`Jl=lM#iT4Vh*NS*#%{*rO&bYS$*a1il1~!whoCWrdv{652}L7(Me3|?#zh)U zkBLRbTPv?&TgY}$n05>omM||xho>;lNGd|D#-*51$;ei#=_w8*jEtlFF0}+pyG41F zAu0(pn#MgGXG&{~Pkd}i?UzFxb_>|#yer{qCPN*z8nz+j66tc-(e)HAOJeT^;gF_q zS&G77Of0@2a!ji+N;!3`bJSWf37tLQNnQy%;E`J=L*?z3u_ZyyZJ#MVxS5}ESBZ^g zt1nhY%UF-?;HqKN9XrS<{Ed8L9#cek89gV!c0Lj5Nt%1BrVIuQONihyztRg)>sNci z@O^v(pFgVX(~hjgT`P5;CKGq3%&kUt2Tjw1nlF=@)W(>ldrfXqhsjMMo2g?ODwgk= zZ8kZER|nHsw5Y*q`UMZ-HjBN;)WTpkiw|=YCN>|iU^0s-hPcyhHaUh@2Xk4>`WM}1 zlVf;wFqOru+ivrOPQ6Yrlf|ru-DZRY{o<>RqxmeU$mF}pdCDxeWbd!yB6u+{e;Eg!MILnM6I$aZmJ0wxKt?SwUO{xx+ zd2c64)r~@sre|?hs`j4|x*J~-UJ)V>!$@AD_7?k91uJ!@-B$CXMLfQ^MjE+PTt{#l z!K%%RO}j@;s2CtvWq<>RpF*&j_NbatVLT_u72_cJ0OaGGQwY`r1|o6h0fLnj0XgRs zf)(i@kW&a&(;ij4B>e?ziuS0-PZp{RSv^^((jHZ2Zx0Zvv`3ZM+XI9u?NMd+_5h(O z$rb&CYLX7WB2uw6RFsM%A?XyBBwZbINT%~il2pJdaRYIB#V`5dp`(&0dB^!SJ0ejX z^LO0+{9V;wo=RpU2^D6(;k3hSyvzU8BX0V?kf*=L*2?g=kCLa}ui-epkj%)(OQ4t> zm04J;_=>7vz*mc;SDV2bPYOKj-n&h%z~7x{i85l0lAfdD)U1+dV#Le|Y9pE`NqCsQ{q@kB6)UjyfZL7Hnrlqr4masvhGYWIG1R9Q(gh*0 zT7qT_jEt4XjnW)5Flakk0ts_~z>L})HZauYXbIXe2MEm2_b3B{zN00OF$W0DsLn^A zR(=l(kCvbzbAZ5%^8A8=Vgg-RkLSA@!=C1}aO z0f{pdUS>d$db9*p88{$yiT*QZKqTnqK8&H~7*XNgh z4))+ksRrmRYqRPS*+@?q^xaSK(8a9y;wfE-3bFm8T<)9v)MzFH7&4IQBs zc;i>F+Dz({ zlX#_!4k7KsA2(P<8JgiWTf53K4hwv&V-sSqI#kV)GBG6&)z@8a>J`@#C6N8}xiM*! zGJ$QQ3U5kYHWpQwl#%KDU+b&F5*Jogcr^zaRk+ru!kOL)l8o8-KF1N&O@!Vzs_>MO z+OLNW8&&u(SylKp;RiUkjcY*^VmM?uTJga^BhD>TJ`8YtGTdntN8opz>}<1E z6suw^-V(2f&4zXq;wdH69&emx@)LTEPJ9RjJ~uzXRM`ai2^pREKe?l%Yokv|`y8i7 zahS4WPwQ-g6b0#v0RKF>`+@3hASC**D8A3KnbQX4Rcen>n@t~-!IGz-`mj{o_(OyO zefYSh>Z1=AIs^4#X@u~D{>8_$f+h&6cl!EplhKD~1w9aanCin#MjxIPv_LTWYNq&j zR?q>#tY?akX9W!q%zCEycvjH=z^rGAk7ot#56n9H@T{Qt*zbPO8WbOAx*r_X?gvSN z+TrIYJ|66C7QHn`6Yf5RCVUsv6HnLD0tE|Aknl`d$hJQ)_^4{|*8(;8H4dTcL7d`a zVv?lfiw-M6S{Z)Xm;#E%9eUsU{HX*w%&NaYf13VdMn={eMfrOmk}ApR3KZqt$27(W8eb95zxOLjmoj#}SOxH6*e7$>DIe?>t6-zIU%X{RZqaP894IS4 zgnOtmJvyGgl#4F@b=Lv0du6B_uC_pH*eV?72O1*Ps$qMLDQDQpC&E!eODcTZRhjf^ z#t>%;p~T@=g-d`dh)Gb3JXeb#qdCN!JyzqFbU9aZz_Va9hiMARRU7~r#o?0*%GDbH z8NH!ULAh!Jpsd=U$<`UI0g%xec7Z!;7-W5S)(g4V44L?&*uF?R=XbmeB zl&drVQmx^3H4rjN1Iwy4+@KahMrmMKwT3b^5i&{x%c?bm)kerD4J@nHFh;co_HxyR z)+Ew3irnKn@kwC2d@?O<)QGCYQL9vE2qW()rK*adR}g<4s~+i#hT~c!p-;618Td9w z6^J}mZ4y-_Z(CFd*_V9mtv~iviNU&%Q&(k6L?Fn=Hqljdh!dhiY>DBA(kyS$AYLiZ zfoA09%ptVO9ZP<;(_zzTB(zpG&?#c!)@W$6=oPRC=@)EdS}?7AkiD+w7py||cr!U$vL3d0 zKO{ROM?ZNGz7Q}fDQt=*)3>0=*Hc;bidI&Q9mt;ktm!2|NpG7(B%xVKp-xCC)GHE^ zgm=~X5y^gxh2J+T9L91zKSaqoQK)Z2{O>H8PA?ncF0%_Nofk>iWZF34 z(mtu&=#ijpFYz{Sj@}%pu@w8uIpmpGWSh_!E7i$4a&z?0C!~wEC5a`cMJ$5=#ug59_9|swA;we01vRlE2Z8S=H`&CdWmO@fMjEqgV2NO+QxR)+gY? zBCV>t)u@T)yGb@FKW{Z3Wyu=^M+0Sg1b;fbU$O*KG#9*!Yp`Q3IEbqoKahQ0!Z|$q zS~IQe8HwyIKQ8||`{>GGl^=|o0cK8Ddf0OfDH2@sqhm!NRBtkvRQu`r5G?*bbQipjfamDi|u@L7P zE&L_9A&kO{R{ZKpvCW6XI7*CtS+0_WC=0SPPj)K&oocJG1XXP1j;G-MsKfukr4VyH zmF`l4Gu7`V+}r3#eA^L>K4IIq6sia`vD;ngY?YM>Bopg6qyl6hDlk39wznS4hu2t* zE97F4V@bDUbkZG5XM*3!4Mz$~tQC*4^^SE%8UBX@33u9HYjlXr+|LrbZXgH~J}OZH zqgBNldWTs}PwJUSpsNwN^y)g+5l{a_AN``KhuTn@x#NNG7;R^NKq*6PfncylI}{0FNOL zVFph@U3tzpB;RQ@Z(==Wt%e_Nx0m(wrS{X*BN5tSt#}MTzx!zxMS$ny+%YlCAO2nw zinUx z=?%YsD-HM}J8bKFZLxyqt;S!WGsGKkqk?7+u}xeiacnPjIt(`bij};Kt69yz08lBK z#V!0e-LmiiQ7y?YPO?^i)^4F!%qyq@0Py7;$3_Fdo$1CzYjq9w=AF_y${dr&F-&SS z$LNL}GniurTa6NT=Q{X`D5dm|(G58!k7G#tUu2FM!ZAaFV{}7~!ScM5h{sHG%utSD zj=lLU-H>C3aLf>^@d9%UgW--33y#qZIc6xw5PFpXr`!*k+;Qp_%yo1_jv2-=G~0Yl zaL%n6&N0J-V{}7~Dd3m_tMSj~m=PQ^A~;4j34qd?fIZsT+Zh0zN8$>xRG!ffuGO16~B&3gAVuA@EVaM=ky*;2D^1 z2&@QL5%DbYl|a^Hcvod;ORRLWjQ!;7$))cnTHnkU|7HGX(Rg70et?7!Jnou?XtWyl^A-%9qBTs%{}%ZFg#SRa zLQT`5%_Gs4tNRuo^!~`{=J@{b=LBAJ(EF)gp0=g*Qxm0ZVggFzCR*RlgIm3ahZIZ3 z^hxLTo#+%1t7KXoUHrD(da=a%?^~=_(z#&8KM8MhwsoGi=0iMAuZH({^8iVr z%0!V6lf3Uh`YK<%3ILto;J5+vLM!K+gs0Gv+1FOOUwk({e{*vF4rHFl30hz!LQ-r$ z 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%0DaR$g00UQ0nUCpF>`$e}PYP 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 Date: Tue, 5 Feb 2019 11:35:05 +0000 Subject: [PATCH 21/56] RunRoot multifile --- RunRoot/HallBEvent.C | 162 ++++++++++++++++++++++--------------------- RunRoot/NOTES | 67 ++++++++++++++++++ 2 files changed, 150 insertions(+), 79 deletions(-) create mode 100644 RunRoot/NOTES diff --git a/RunRoot/HallBEvent.C b/RunRoot/HallBEvent.C index d5f464e..9f9de80 100644 --- a/RunRoot/HallBEvent.C +++ b/RunRoot/HallBEvent.C @@ -43,13 +43,6 @@ void HallBEvent(){ cout<<"Analysing hipo file "<GetEntries();i++){ + hipo::reader reader; + reader.open(files->At(i)->GetTitle()); + //create the hallb event + hallB_event event(reader); + + while(event.next()==true){ //(5.6s) vector + all loop (7.6s) + // 7M =75.05 seconds Cpu Time = 48.65s + //(7.2s) map + all loop (9.4s) + //(6.9s) uomap+ all loop (8.7s) + //7M = 85.74 seconds Cpu Time = 59.70s + //i.e. using maps is 2.5x slower! + + + event.head()->getStartTime(); - event.head()->getStartTime(); - - //Loop over all particles to see how to access detector info. - for(auto& p : event.getDetParticles()){ - // get predefined selected information - p->getTime(); - p->getDetEnergy(); - p->getDeltaEnergy(); - // get any detector information (if exists for this particle) - // there should be a get function for any entry in the bank - switch(p->region()) {// (+1s per 1M) - case FD : - p->cal(PCAL)->getEnergy(); - p->cal(ECIN)->getEnergy(); - p->cal(ECOUT)->getEnergy(); - p->sci(FTOF1A)->getEnergy(); - p->sci(FTOF1B)->getEnergy(); - p->sci(FTOF2)->getEnergy(); - p->trk(DC)->getSector(); - p->che(HTCC)->getNphe(); - p->che(LTCC)->getNphe(); - break; - case FT : - p->ft(FTCAL)->getEnergy(); - p->ft(FTHODO)->getEnergy(); - break; - case CD: - p->sci(CTOF)->getEnergy(); - p->sci(CND)->getEnergy(); - break; + //Loop over all particles to see how to access detector info. + for(auto& p : event.getDetParticles()){ + // get predefined selected information + p->getTime(); + p->getDetEnergy(); + p->getDeltaEnergy(); + // get any detector information (if exists for this particle) + // there should be a get function for any entry in the bank + switch(p->region()) {// (+1s per 1M) + case FD : + p->cal(PCAL)->getEnergy(); + p->cal(ECIN)->getEnergy(); + p->cal(ECOUT)->getEnergy(); + p->sci(FTOF1A)->getEnergy(); + p->sci(FTOF1B)->getEnergy(); + p->sci(FTOF2)->getEnergy(); + p->trk(DC)->getSector(); + p->che(HTCC)->getNphe(); + p->che(LTCC)->getNphe(); + break; + case FT : + p->ft(FTCAL)->getEnergy(); + p->ft(FTHODO)->getEnergy(); + break; + case CD: + p->sci(CTOF)->getEnergy(); + p->sci(CND)->getEnergy(); + break; + } + // covariance matrix (comment in to see!) + // p->covmat()->print(); + p->cmat(); } - // covariance matrix (comment in to see!) - // p->covmat()->print(); - p->cmat(); - } - // get particles by type (+1s overhead per 1M (include fill hist)) - auto electrons=event.getByID(11); - auto gammas=event.getByID(22); - auto protons=event.getByID(2212); - auto pips=event.getByID(211); - auto pims=event.getByID(-211); - - if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && - pips.size()==1 &&pims.size() == 1){ + // get particles by type (+1s overhead per 1M (include fill hist)) + auto electrons=event.getByID(11); + auto gammas=event.getByID(22); + auto protons=event.getByID(2212); + auto pips=event.getByID(211); + auto pims=event.getByID(-211); + + if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && + pips.size()==1 &&pims.size() == 1){ - // set the particle momentum - // if we wanted to integrate more ROOT we could - // return direct TLorentzVector - // i.e. auto el = electrons[0]->p4(); etc. - el->SetXYZM(electrons[0]->par()->getPx(),electrons[0]->par()->getPy(), - electrons[0]->par()->getPz(),el->M()); - pr->SetXYZM(protons[0]->par()->getPx(),protons[0]->par()->getPy(), - protons[0]->par()->getPz(),pr->M()); - g1->SetXYZM(gammas[0]->par()->getPx(),gammas[0]->par()->getPy(), - gammas[0]->par()->getPz(),0); - g2->SetXYZM(gammas[1]->par()->getPx(),gammas[1]->par()->getPy(), - gammas[1]->par()->getPz(),0); - pip->SetXYZM(pips[0]->par()->getPx(),pips[0]->par()->getPy(), - pips[0]->par()->getPz(),pip->M()); - pim->SetXYZM(pims[0]->par()->getPx(),pims[0]->par()->getPy(), - pims[0]->par()->getPz(),pim->M()); - - TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; - hmiss->Fill(miss.M2()); + // set the particle momentum + // if we wanted to integrate more ROOT we could + // return direct TLorentzVector + // i.e. auto el = electrons[0]->p4(); etc. + el->SetXYZM(electrons[0]->par()->getPx(),electrons[0]->par()->getPy(), + electrons[0]->par()->getPz(),el->M()); + pr->SetXYZM(protons[0]->par()->getPx(),protons[0]->par()->getPy(), + protons[0]->par()->getPz(),pr->M()); + g1->SetXYZM(gammas[0]->par()->getPx(),gammas[0]->par()->getPy(), + gammas[0]->par()->getPz(),0); + g2->SetXYZM(gammas[1]->par()->getPx(),gammas[1]->par()->getPy(), + gammas[1]->par()->getPz(),0); + pip->SetXYZM(pips[0]->par()->getPx(),pips[0]->par()->getPy(), + pips[0]->par()->getPz(),pip->M()); + pim->SetXYZM(pims[0]->par()->getPx(),pims[0]->par()->getPy(), + pims[0]->par()->getPz(),pim->M()); + + TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; + hmiss->Fill(miss.M2()); - } + } - counter++; - //if(counter==1E6) break; + counter++; + //if(counter==1E6) break; + } } gBenchmark->Stop("timer"); gBenchmark->Print("timer"); diff --git a/RunRoot/NOTES b/RunRoot/NOTES new file mode 100644 index 0000000..6c5e4b7 --- /dev/null +++ b/RunRoot/NOTES @@ -0,0 +1,67 @@ +Switching to new files? +Repeated events at end of file +record # 478 POSITION = 1756000744 , LENGTH = 3637176 , ENTRIES = 102 , UID = 0 0 +record # 479 POSITION = 1759637920 , LENGTH = 3687752 , ENTRIES = 100 , UID = 0 0 +record # 480 POSITION = 1763325672 , LENGTH = 2479600 , ENTRIES = 205 , UID = 0 0 +Looks like last record has extra 100 events + +Just read event +timer : Real Time = 1.55 seconds Cpu Time = 1.56 seconds + +Just REC::Particle +timer : Real Time = 1.60 seconds Cpu Time = 1.59 seconds + +Just + REC::MC +timer : Real Time = 1.60 seconds Cpu Time = 1.59 seconds + ++REC::CovMAt + +timer : Real Time = 1.68 seconds Cpu Time = 1.67 seconds + ++REC::EVNT +timer : Real Time = 1.68 seconds Cpu Time = 1.68 seconds + ++REC::CAL +timer : Real Time = 2.22 seconds Cpu Time = 2.22 seconds + ++REC::SCINT +timer : Real Time = 2.49 seconds Cpu Time = 2.49 seconds + ++REC::TRACK +timer : Real Time = 2.59 seconds Cpu Time = 2.58 seconds + ++REC::CHER +timer : Real Time = 2.63 seconds Cpu Time = 2.63 seconds + ++REC::FT +timer : Real Time = 2.62 seconds Cpu Time = 2.62 seconds + + +NO HALLBEVENT sort() + +timer : Real Time = 2.33 seconds Cpu Time = 2.33 seconds + +HALLBEVENT analysis +timer : Real Time = 2.67 seconds Cpu Time = 2.68 seconds + +For 10 files: +timer : Real Time = 57.23 seconds Cpu Time = 32.23 seconds +WHY IS TIMING SIGNIFICANTLY WORSE? + +Naive MT +1worker +timer : Real Time = 270.88 seconds Cpu Time = 270.88 seconds +4worker +timer : Real Time = 110.93 seconds Cpu Time = 441.44 seconds +10worker +timer : Real Time = 111.10 seconds Cpu Time = 1060.30 seconds + +but 170Gb of data (100*1.7G) +Apply pause in loop + +1worker +timer : Real Time = 543.25 seconds Cpu Time = 301.31 seconds +4worker +timer : Real Time = 154.53 seconds Cpu Time = 373.57 seconds +10worker +timer : Real Time = 112.61 seconds Cpu Time = 871.04 seconds From bc273e504291b3b901b20f87d9bd6d66604f6041 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 18 Feb 2019 10:11:37 +0000 Subject: [PATCH 22/56] add vtp trigger --- Banks/hallB_event.cpp | 3 ++ Banks/hallB_event.h | 3 ++ Banks/header.h | 7 ---- Banks/scaler.cpp | 20 ++++++++++ Banks/scaler.h | 58 +++++++++++++++++++++++++++++ Banks/vtp.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++ Banks/vtp.h | 56 ++++++++++++++++++++++++++++ RunRoot/HallBEvent.C | 4 +- 8 files changed, 228 insertions(+), 8 deletions(-) create mode 100644 Banks/scaler.cpp create mode 100644 Banks/scaler.h create mode 100644 Banks/vtp.cpp create mode 100644 Banks/vtp.h diff --git a/Banks/hallB_event.cpp b/Banks/hallB_event.cpp index c4cdb54..0718a5d 100644 --- a/Banks/hallB_event.cpp +++ b/Banks/hallB_event.cpp @@ -5,6 +5,7 @@ */ #include "hallB_event.h" +//#include "vtp.h" namespace clas12 { @@ -20,12 +21,14 @@ namespace clas12 { _btrck = std::make_shared(); _bcher = std::make_shared(); _bft = std::make_shared(); + _bvtp = std::make_shared(); //initialise banks _bparts->init("REC::Particle",r); _bmcparts->init("MC::Lund",r); _bcovmat->init("REC::CovMat",r); _bhead->init("REC::Event",r); + _bvtp->init("RAW::vtp",r); _bcal->init("REC::Calorimeter",r); _bscint->init("REC::Scintillator",r); _bcher->init("REC::Cherenkov",r); diff --git a/Banks/hallB_event.h b/Banks/hallB_event.h index 5e049dd..4fef5fd 100644 --- a/Banks/hallB_event.h +++ b/Banks/hallB_event.h @@ -22,6 +22,7 @@ #include "tracker.h" #include "cherenkov.h" #include "header.h" +#include "vtp.h" #include "covmatrix.h" #include "forwardtagger.h" #include "region_particle.h" @@ -69,6 +70,7 @@ namespace clas12 { virtual const head_ptr head() const{return _bhead;}; + virtual const vtp_ptr vtp() const{return _bvtp;}; virtual const mcpar_ptr mcparts() const{return _bmcparts;}; @@ -84,6 +86,7 @@ namespace clas12 { //DST banks head_ptr _bhead; + vtp_ptr _bvtp; par_ptr _bparts; mcpar_ptr _bmcparts; covmat_ptr _bcovmat; diff --git a/Banks/header.h b/Banks/header.h index 9d6856a..7cca2cc 100644 --- a/Banks/header.h +++ b/Banks/header.h @@ -14,13 +14,6 @@ #ifndef EVENT_HEADER_H #define EVENT_HEADER_H -#include -#include -#include -#include -#include -#include -#include #include "bank.h" #include "vectors.h" diff --git a/Banks/scaler.cpp b/Banks/scaler.cpp new file mode 100644 index 0000000..9dd3a72 --- /dev/null +++ b/Banks/scaler.cpp @@ -0,0 +1,20 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "scaler.h" + +namespace clas12 { + + + void scaler::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + + ch_order = getEntryOrder("channel"); + sl_order = getEntryOrder("slot"); + val_order = getEntryOrder("value"); + hel_order = getEntryOrder("helicity"); + } +} diff --git a/Banks/scaler.h b/Banks/scaler.h new file mode 100644 index 0000000..5099b7c --- /dev/null +++ b/Banks/scaler.h @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: scaler.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef SCALER_H +#define SCALER_H + +#include "bank.h" +#include "vectors.h" + +namespace clas12 { + + class scaler : public hipo::bank { + + + public: + + + + void init(const char *bankName, hipo::reader &r); + int getChannel(){ return getInt(ch_order,0); } + int getSlot(){ return getInt(sl_order,0); } + int getValue(){ return getInt(val_order,0); } + int getHelicity(){ return getInt(hel_order,0); } + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify(){ + //printf("particle class is read again\n"); + } + + private : + + int ch_order; + int sl_order; + int val_order; + int hel_order; + + + }; + + using scaler_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Banks/vtp.cpp b/Banks/vtp.cpp new file mode 100644 index 0000000..bf1a9bd --- /dev/null +++ b/Banks/vtp.cpp @@ -0,0 +1,85 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "vtp.h" + +namespace clas12 { + + + void vtp::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + + cr_order = getEntryOrder("crate"); + wo_order = getEntryOrder("word"); + } + + long vtp::makeVTPTriggers() { + + _VTPBitSet.reset(); + int nVTPTriggers = 0; + + int nrows1 = 0; + + int crate= 0; + int nwords= 0; + int word1VTP, word2VTP, word3VTP= 0; + const int trig2VTP=100; + + int Nentries=getSize(); + int loop1=0; + while (loop1> 27) & 0x1F) == 0x1D) { + word2VTP = getWord(loop1++); + decodeVTPTrigger(word1VTP, word2VTP); + } + } + } + else { + loop1++; + } + } + return _VTPBitSet.to_ulong(); + } + + void vtp::decodeVTPTrigger(int word1vtp, int word2vtp) { + int time, trgL, trgH; + time = (word1vtp >> 16) & 0x7FF; // 11 bits time + trgL = (word1vtp & 0xFFFF); // 16 bits + trgH = (word2vtp & 0xFFFF); // 16 bits + long pattern=(trgL&0xFFFF)|((trgH<<16)&0xFFFF0000); + addVTPTriggerToEvent(pattern); + } + + void vtp::addVTPTriggerToEvent(long pattern){ + //Add this pattern to this event + //Eaxh pattern only contains 1 sector + //here we make a new bit pattern containing all + //set the bits that are =1 + const int bitsize= _VTPBitSet.size(); + //cout<<"pattern "< + +namespace clas12 { + + class vtp : public hipo::bank { + + + public: + + // vtp()=default; + + void init(const char *bankName, hipo::reader &r); + int getCrate(int index){ return getInt(cr_order,index); } + int getWord(int index){ return getInt(wo_order,index); } + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify(){ + //printf("particle class is read again\n"); + } + long makeVTPTriggers(); + void decodeVTPTrigger(int word1vtp, int word2vtp); + void addVTPTriggerToEvent(long pattern); + private : + + int cr_order; + int wo_order; + + std::bitset<32> _VTPBitSet; + }; + + using vtp_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/RunRoot/HallBEvent.C b/RunRoot/HallBEvent.C index 9f9de80..f0139ac 100644 --- a/RunRoot/HallBEvent.C +++ b/RunRoot/HallBEvent.C @@ -83,7 +83,9 @@ void HallBEvent(){ event.head()->getStartTime(); - + // long vtp = event.vtp()->makeVTPTriggers(); + //cout<<((vtp & (1<<29))!= 0 )<<" "<<((vtp & (1<<13))!= 0) <<" "<<((vtp & (1<<14))!= 0) <<" "<<((vtp & (1<<15)) !=0)<<" "<<((vtp & (1<<16)) !=0 )<<" "<<((vtp & (1<<17)) !=0) <<" "< Date: Thu, 28 Feb 2019 16:15:07 +0000 Subject: [PATCH 23/56] fix import --- RunRoot/HipoSlowDown | 41 -------------------------------- RunRoot/importToROOT.C | 13 +++++++++-- RunRoot/importToROOT2.C | 52 ----------------------------------------- 3 files changed, 11 insertions(+), 95 deletions(-) delete mode 100644 RunRoot/HipoSlowDown delete mode 100644 RunRoot/importToROOT2.C diff --git a/RunRoot/HipoSlowDown b/RunRoot/HipoSlowDown deleted file mode 100644 index 7773766..0000000 --- a/RunRoot/HipoSlowDown +++ /dev/null @@ -1,41 +0,0 @@ -timer : Real Time = 70.81 seconds Cpu Time = 43.21 seconds -Elapsed time: 70.8206 events = 7189806 s - -timer : Real Time = 52.29 seconds Cpu Time = 36.21 seconds -Elapsed time: 52.2973 events = 6000000 s -r -timer : Real Time = 36.61 seconds Cpu Time = 23.22 seconds -Elapsed time: 36.6193 events = 4000000 s - -timer : Real Time = 15.09 seconds Cpu Time = 10.56 seconds -Elapsed time: 15.1027 events = 2000000 s - -timer : Real Time = 9.37 seconds Cpu Time = 5.61 seconds -Elapsed time: 9.39536 events = 1000000 s - -timer : Real Time = 5.25 seconds Cpu Time = 5.13 seconds -Elapsed time: 5.25823 events = 1000000 s - -timer : Real Time = 14.48 seconds Cpu Time = 10.80 seconds -Elapsed time: 14.487 events = 2000000 s - -timer : Real Time = 9.87 seconds Cpu Time = 9.86 seconds -Elapsed time: 9.88102 events = 2000000 s - -timer : Real Time = 22.94 seconds Cpu Time = 20.04 seconds -Elapsed time: 22.9499 events = 4000000 s - -timer : Real Time = 20.08 seconds Cpu Time = 20.05 seconds -Elapsed time: 20.0933 events = 4000000 s - -timer : Real Time = 38.45 seconds Cpu Time = 30.98 seconds -Elapsed time: 38.4582 events = 6000000 s - -timer : Real Time = 51.99 seconds Cpu Time = 33.14 seconds -Elapsed time: 51.9999 events = 6000000 s - -timer : Real Time = 30.71 seconds Cpu Time = 24.08 seconds -Elapsed time: 30.7524 events = 4000000 s - -timer : Real Time = 27.91 seconds Cpu Time = 22.07 seconds -Elapsed time: 27.9143 events = 4000000 s diff --git a/RunRoot/importToROOT.C b/RunRoot/importToROOT.C index 19f7b5f..b2cbd9f 100644 --- a/RunRoot/importToROOT.C +++ b/RunRoot/importToROOT.C @@ -1,4 +1,6 @@ { + + gSystem->SetAclicMode(TSystem::kOpt); if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ cout<<"You must define the base directory CLAS12TOOL"<LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/mcparticle.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/scaler.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/vtp.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); - // gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12event.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/mesonex_event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/covmatrix.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_particle.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/hallB_event.cpp+"); } diff --git a/RunRoot/importToROOT2.C b/RunRoot/importToROOT2.C deleted file mode 100644 index e69f803..0000000 --- a/RunRoot/importToROOT2.C +++ /dev/null @@ -1,52 +0,0 @@ -{ - - gSystem->SetAclicMode(TSystem::kOpt); - if(TString(gSystem->Getenv("CLAS12TOOL"))==TString()){ - cout<<"You must define the base directory CLAS12TOOL"<Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/Lz4/lib/liblz4.so")==0){ - //Found liblz4 in LD_LIBRARY_PATH - gROOT->ProcessLine("#define __LZ4__"); - gSystem->AddIncludePath("-D__LZ4__"); - gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Lz4/lib"); - } - else{ - printf("\n >>>>> LZ4 compression is not supported."); - printf("\n >>>>> check if libz4 is installed on your system."); - printf("\n >>>>> and included in LD_LIBRARY_PATH"); - } - - //Hipo - gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Hipo"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/utils.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/dictionary.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/node.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/event.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/record.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/reader.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+"); - - //Clas12Banks - gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/mcparticle.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/covmatrix.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/region_particle.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/hallB_event.cpp+"); - - -} From f7364b5ffc839abd7631aafef26b2ca7c33712a9 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 1 Mar 2019 08:52:36 +0000 Subject: [PATCH 24/56] fix README add TChain.h --- RunRoot/HallBEvent.C | 17 ++++------------- RunRoot/README | 17 ++--------------- 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/RunRoot/HallBEvent.C b/RunRoot/HallBEvent.C index f0139ac..e8bbb2b 100644 --- a/RunRoot/HallBEvent.C +++ b/RunRoot/HallBEvent.C @@ -9,6 +9,7 @@ #include #include #include +#include #include "reader.h" #include "hallB_event.h" @@ -69,24 +70,14 @@ void HallBEvent(){ for(Int_t i=0;iGetEntries();i++){ hipo::reader reader; - reader.open(files->At(i)->GetTitle()); + reader.open(files->At(i)->GetTitle()); //create the hallb event hallB_event event(reader); - while(event.next()==true){ //(5.6s) vector + all loop (7.6s) - // 7M =75.05 seconds Cpu Time = 48.65s - //(7.2s) map + all loop (9.4s) - //(6.9s) uomap+ all loop (8.7s) - //7M = 85.74 seconds Cpu Time = 59.70s - //i.e. using maps is 2.5x slower! - - + while(event.next()==true){ event.head()->getStartTime(); - // long vtp = event.vtp()->makeVTPTriggers(); - //cout<<((vtp & (1<<29))!= 0 )<<" "<<((vtp & (1<<13))!= 0) <<" "<<((vtp & (1<<14))!= 0) <<" "<<((vtp & (1<<15)) !=0)<<" "<<((vtp & (1<<16)) !=0 )<<" "<<((vtp & (1<<17)) !=0) <<" "<getTime(); diff --git a/RunRoot/README b/RunRoot/README index 386b12d..229c7ba 100644 --- a/RunRoot/README +++ b/RunRoot/README @@ -1,25 +1,12 @@ setenv CLAS12TOOL XXX/Clas12Tool #Make lz4 .so -cd $CLAS12TOOL/Lz4/lib/ +cd $CLAS12TOOL/Lz4/ make cd $CLAS12TOOL/RunRoot ############################New -alias clas12root root -l $CLAS12TOOL/RunRoot/importToROOT2.C - -e.g. run with - -clas12root HallBEvent.C+ --in=a/hipo/file.hipo - - - - -############################OLD - alias clas12root root -l $CLAS12TOOL/RunRoot/importToROOT.C e.g. run with -clas12root MesonexEvent.C+ --in=a/hipo/file.hipo - -clas12root MesonexEventHist.C+ --in=a/hipo/file.hipo \ No newline at end of file +clas12root HallBEvent.C+ --in=a/hipo/file.hipo From 55c0dc6d897a036a854f75edbfa898bede5d1e31 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 1 Mar 2019 08:53:25 +0000 Subject: [PATCH 25/56] fix README add TChain.h --- RunRoot/MesonexEvent.C | 74 ------------------------------------- RunRoot/MesonexEventHist.C | 75 -------------------------------------- RunRoot/MesonexEventTree.C | 69 ----------------------------------- 3 files changed, 218 deletions(-) delete mode 100644 RunRoot/MesonexEvent.C delete mode 100644 RunRoot/MesonexEventHist.C delete mode 100644 RunRoot/MesonexEventTree.C diff --git a/RunRoot/MesonexEvent.C b/RunRoot/MesonexEvent.C deleted file mode 100644 index 069bd5c..0000000 --- a/RunRoot/MesonexEvent.C +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - // Record start time - auto start = std::chrono::high_resolution_clock::now(); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<getSize(); - - double starttime = event.header().getStartTime(); - int pcount=0; - while(event.next_particle()){ - //std::cout<<" particle "<getPid(); - float time=event.getTime()-starttime; - float ECal=event.getCalTotEnergy(); - float PCalE=cal->getEnergy(); //precal by default - event.getPCAL(); - float PCalTime=cal->getTime(); - event.getHTCC(); - int nHTCC=cher->getNphe(); - event.getLTCC(); - int nLTCC=cher->getNphe(); - float trchi2=event.getTrackChi2(); - // if(event.isFT()) std::cout<< " FT HIT "< elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count()<< " events = "< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEventHist(){ - // Record start time - auto start = std::chrono::high_resolution_clock::now(); - - TString inputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<getPid(); - p4.SetXYZM(pars->getPx(),pars->getPy(),pars->getPz(),0); - hPth->Fill(p4.P(),p4.Theta()*TMath::RadToDeg()); - - float time=event.getTime(); - event.getPCAL(); - float PCalTime=event.calorimeter_ptr()->getTime(); - float tdiff=time-PCalTime; - if(tdiff!=0)htdiff->Fill(tdiff); - } - - counter++; - if(counter==1E7) break; - } - hPth->Write(); - htdiff->Write(); - delete outFile; - - auto finish = std::chrono::high_resolution_clock::now(); - std::chrono::duration elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count() << " s\n"; - -} diff --git a/RunRoot/MesonexEventTree.C b/RunRoot/MesonexEventTree.C deleted file mode 100644 index 1ee1ddb..0000000 --- a/RunRoot/MesonexEventTree.C +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "mesonex_event.h" - - - -void MesonexEvent(){ - - gBenchmark->Start("clas12root"); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<Stop("clas12root"); - gBenchmark->Print("clas12root"); - -} From 5ccdc8843900fe9f741ac1f5d9669ec142f02193 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 1 Mar 2019 08:54:10 +0000 Subject: [PATCH 26/56] fix README add TChain.h --- RunRoot/NOTES | 67 --------------------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 RunRoot/NOTES diff --git a/RunRoot/NOTES b/RunRoot/NOTES deleted file mode 100644 index 6c5e4b7..0000000 --- a/RunRoot/NOTES +++ /dev/null @@ -1,67 +0,0 @@ -Switching to new files? -Repeated events at end of file -record # 478 POSITION = 1756000744 , LENGTH = 3637176 , ENTRIES = 102 , UID = 0 0 -record # 479 POSITION = 1759637920 , LENGTH = 3687752 , ENTRIES = 100 , UID = 0 0 -record # 480 POSITION = 1763325672 , LENGTH = 2479600 , ENTRIES = 205 , UID = 0 0 -Looks like last record has extra 100 events - -Just read event -timer : Real Time = 1.55 seconds Cpu Time = 1.56 seconds - -Just REC::Particle -timer : Real Time = 1.60 seconds Cpu Time = 1.59 seconds - -Just + REC::MC -timer : Real Time = 1.60 seconds Cpu Time = 1.59 seconds - -+REC::CovMAt - -timer : Real Time = 1.68 seconds Cpu Time = 1.67 seconds - -+REC::EVNT -timer : Real Time = 1.68 seconds Cpu Time = 1.68 seconds - -+REC::CAL -timer : Real Time = 2.22 seconds Cpu Time = 2.22 seconds - -+REC::SCINT -timer : Real Time = 2.49 seconds Cpu Time = 2.49 seconds - -+REC::TRACK -timer : Real Time = 2.59 seconds Cpu Time = 2.58 seconds - -+REC::CHER -timer : Real Time = 2.63 seconds Cpu Time = 2.63 seconds - -+REC::FT -timer : Real Time = 2.62 seconds Cpu Time = 2.62 seconds - - -NO HALLBEVENT sort() - -timer : Real Time = 2.33 seconds Cpu Time = 2.33 seconds - -HALLBEVENT analysis -timer : Real Time = 2.67 seconds Cpu Time = 2.68 seconds - -For 10 files: -timer : Real Time = 57.23 seconds Cpu Time = 32.23 seconds -WHY IS TIMING SIGNIFICANTLY WORSE? - -Naive MT -1worker -timer : Real Time = 270.88 seconds Cpu Time = 270.88 seconds -4worker -timer : Real Time = 110.93 seconds Cpu Time = 441.44 seconds -10worker -timer : Real Time = 111.10 seconds Cpu Time = 1060.30 seconds - -but 170Gb of data (100*1.7G) -Apply pause in loop - -1worker -timer : Real Time = 543.25 seconds Cpu Time = 301.31 seconds -4worker -timer : Real Time = 154.53 seconds Cpu Time = 373.57 seconds -10worker -timer : Real Time = 112.61 seconds Cpu Time = 871.04 seconds From ccc6ec19a09a665a064ce8782d88149e4d696a4b Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 1 Mar 2019 13:26:44 +0000 Subject: [PATCH 27/56] Add pynotebook --- RunRoot/Ex_PyNotebook.ipynb | 90 +++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 RunRoot/Ex_PyNotebook.ipynb diff --git a/RunRoot/Ex_PyNotebook.ipynb b/RunRoot/Ex_PyNotebook.ipynb new file mode 100644 index 0000000..e85a18a --- /dev/null +++ b/RunRoot/Ex_PyNotebook.ipynb @@ -0,0 +1,90 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ROOT" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ROOT.gROOT.ProcessLine(\".x $CLAS12TOOL/RunRoot/importToROOT.C+\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ut = ROOT.hipo.utils;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ut.printLogo();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "reader=ROOT.hipo.reader()\n", + "reader.open(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " event=ROOT.clas12.hallB_event(reader)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "while event.next() :\n", + " print(event.head().getStartTime())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15rc1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 46cca43e042b4b12693922e58ed087dcde9e1e3a Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 1 Mar 2019 15:13:37 +0000 Subject: [PATCH 28/56] Add pynotebook --- RunRoot/Ex_PyNotebook.ipynb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/RunRoot/Ex_PyNotebook.ipynb b/RunRoot/Ex_PyNotebook.ipynb index e85a18a..8519715 100644 --- a/RunRoot/Ex_PyNotebook.ipynb +++ b/RunRoot/Ex_PyNotebook.ipynb @@ -61,9 +61,19 @@ "metadata": {}, "outputs": [], "source": [ + "particles = event.getDetParticles();\n", "while event.next() :\n", - " print(event.head().getStartTime())" + " print(event.head().getStartTime())\n", + " print(particles[0].getPid())\n", + " " ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 0b730cdccb78e45bcc47f8e13a2507de18618849 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 7 Mar 2019 11:16:10 +0000 Subject: [PATCH 29/56] update readem --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 7256fa0..1d69c59 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,17 @@ for CLAS12 data structures and convertor to ROOT. git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git git checkout mesonex + +## To setup Run ROOT + +you wil need the following enviromnet variable set + +setenv CLAS12TOOL /path to Clas12Tool/ + +cd Lz4 + +make + +cd $CLAS12TOOL/RunRoot + + From 72b4f4ba95d22610ec7ecc53b74d91a450dc8167 Mon Sep 17 00:00:00 2001 From: dglazier Date: Sun, 10 Mar 2019 03:10:06 +0000 Subject: [PATCH 30/56] added clas12reader and removed HallBEvent from RunRoot --- Banks/clas12defs.h | 41 ++- Banks/clas12reader.cpp | 133 ++++++++ Banks/clas12reader.h | 133 ++++++++ Banks/region_cdet.cpp | 17 +- Banks/region_cdet.h | 6 +- Banks/region_fdet.cpp | 20 +- Banks/region_fdet.h | 8 +- Banks/region_ft.cpp | 4 +- Banks/region_ft.h | 2 +- Banks/region_particle.cpp | 53 +++- Banks/region_particle.h | 28 +- Banks/traj.cpp | 32 ++ Banks/traj.h | 106 +++++++ RunRoot/{HallBEvent.C => Ex1_CLAS12Reader.C} | 109 ++++--- RunRoot/Ex2_HipoDraw.C | 46 +++ RunRoot/Ex4_TreeMaker.C | 16 + RunRoot/HallBCheckTimeAlignment.C | 104 ------- RunRoot/RegionFDET.C | 85 ----- RunRoot/RegionFT.C | 66 ---- RunRoot/hiporoot/BankHist.C | 77 +++++ RunRoot/hiporoot/BankHist.h | 41 +++ RunRoot/hiporoot/HipoChain.C | 53 ++++ RunRoot/hiporoot/HipoChain.h | 45 +++ RunRoot/hiporoot/HipoFileSelector.C | 128 ++++++++ RunRoot/hiporoot/HipoFileSelector.h | 65 ++++ RunRoot/hiporoot/HipoHist.C | 122 ++++++++ RunRoot/hiporoot/HipoHist.h | 39 +++ RunRoot/hiporoot/HipoHistAction.C | 7 + RunRoot/hiporoot/HipoROOTOut.C | 294 ++++++++++++++++++ RunRoot/hiporoot/HipoROOTOut.h | 64 ++++ RunRoot/hiporoot/HipoRootAction.C | 5 + RunRoot/hiporoot/HipoRootAction.h | 30 ++ RunRoot/hiporoot/HipoSelector.C | 142 +++++++++ RunRoot/hiporoot/HipoSelector.h | 65 ++++ RunRoot/hiporoot/HipoTreeMaker.C | 56 ++++ RunRoot/hiporoot/HipoTreeMaker.h | 41 +++ RunRoot/hiporoot/LoadHipoROOT.C | 28 ++ RunRoot/hiporoot/ParticleHist.C | 55 ++++ RunRoot/hiporoot/ParticleHist.h | 33 ++ RunRoot/hiporoot/ParticleHistAction.C | 8 + RunRoot/hiporoot/ParticleTree.C | 96 ++++++ RunRoot/hiporoot/ParticleTree.h | 34 ++ RunRoot/hiporoot/hipotree.C | 43 +++ RunRoot/hiporoot/hipotree.h | 130 ++++++++ RunRoot/hiporoot/templateBankHistAction.C | 45 +++ RunRoot/hiporoot/templateParticleHistAction.C | 33 ++ RunRoot/hiporoot/templateParticleTreeAction.C | 57 ++++ RunRoot/importToROOT.C | 3 +- RunRoot/jupy/CLAS12Reader3Pi.C | 110 +++++++ RunRoot/jupy/CLAS12Reader3Pi.ipynb | 181 +++++++++++ .../Ex_Python3.ipynb} | 42 +-- RunRoot/jupy/HipoDraw.ipynb | 166 ++++++++++ 52 files changed, 2982 insertions(+), 365 deletions(-) create mode 100644 Banks/clas12reader.cpp create mode 100644 Banks/clas12reader.h create mode 100644 Banks/traj.cpp create mode 100644 Banks/traj.h rename RunRoot/{HallBEvent.C => Ex1_CLAS12Reader.C} (60%) create mode 100644 RunRoot/Ex2_HipoDraw.C create mode 100644 RunRoot/Ex4_TreeMaker.C delete mode 100644 RunRoot/HallBCheckTimeAlignment.C delete mode 100644 RunRoot/RegionFDET.C delete mode 100644 RunRoot/RegionFT.C create mode 100644 RunRoot/hiporoot/BankHist.C create mode 100644 RunRoot/hiporoot/BankHist.h create mode 100644 RunRoot/hiporoot/HipoChain.C create mode 100644 RunRoot/hiporoot/HipoChain.h create mode 100644 RunRoot/hiporoot/HipoFileSelector.C create mode 100644 RunRoot/hiporoot/HipoFileSelector.h create mode 100644 RunRoot/hiporoot/HipoHist.C create mode 100644 RunRoot/hiporoot/HipoHist.h create mode 100644 RunRoot/hiporoot/HipoHistAction.C create mode 100644 RunRoot/hiporoot/HipoROOTOut.C create mode 100644 RunRoot/hiporoot/HipoROOTOut.h create mode 100644 RunRoot/hiporoot/HipoRootAction.C create mode 100644 RunRoot/hiporoot/HipoRootAction.h create mode 100644 RunRoot/hiporoot/HipoSelector.C create mode 100644 RunRoot/hiporoot/HipoSelector.h create mode 100644 RunRoot/hiporoot/HipoTreeMaker.C create mode 100644 RunRoot/hiporoot/HipoTreeMaker.h create mode 100644 RunRoot/hiporoot/LoadHipoROOT.C create mode 100644 RunRoot/hiporoot/ParticleHist.C create mode 100644 RunRoot/hiporoot/ParticleHist.h create mode 100644 RunRoot/hiporoot/ParticleHistAction.C create mode 100644 RunRoot/hiporoot/ParticleTree.C create mode 100644 RunRoot/hiporoot/ParticleTree.h create mode 100644 RunRoot/hiporoot/hipotree.C create mode 100644 RunRoot/hiporoot/hipotree.h create mode 100644 RunRoot/hiporoot/templateBankHistAction.C create mode 100644 RunRoot/hiporoot/templateParticleHistAction.C create mode 100644 RunRoot/hiporoot/templateParticleTreeAction.C create mode 100644 RunRoot/jupy/CLAS12Reader3Pi.C create mode 100644 RunRoot/jupy/CLAS12Reader3Pi.ipynb rename RunRoot/{Ex_PyNotebook.ipynb => jupy/Ex_Python3.ipynb} (63%) create mode 100644 RunRoot/jupy/HipoDraw.ipynb diff --git a/Banks/clas12defs.h b/Banks/clas12defs.h index 923388c..24bc24a 100644 --- a/Banks/clas12defs.h +++ b/Banks/clas12defs.h @@ -23,9 +23,9 @@ namespace clas12{ //layers - static const short FTOF1A = 0; - static const short FTOF1B = 1; - static const short FTOF2 = 2; + static const short FTOF1A = 1; + static const short FTOF1B = 2; + static const short FTOF2 = 3; //CDET scint layers same as detectors //static const short CND = 3; //static const short CTOF = 4; @@ -37,7 +37,40 @@ namespace clas12{ static const short ECIN = 4; static const short ECOUT = 7; - // using indices =vector; + //TRAJECTORY + static const short TRAJ_HTCC = 0; + static const short TRAJ_FMT1 = 1; + static const short TRAJ_FMT2 = 2; + static const short TRAJ_FMT3 = 3; + static const short TRAJ_FMT4 = 4; + static const short TRAJ_FMT5 = 5; + static const short TRAJ_FMT6 = 6; + static const short TRAJ_DC1 = 12; + static const short TRAJ_DC2 = 18; + static const short TRAJ_DC3 = 24; + static const short TRAJ_DC4 = 30; + static const short TRAJ_DC5 = 36; + static const short TRAJ_DC6 = 42; + static const short TRAJ_LTCC = 43; + static const short TRAJ_FTOF1A =46; + static const short TRAJ_FTOF1B =45; + static const short TRAJ_FTOF2 =44; + static const short TRAJ_PCAL =47; + static const short TRAJ_ECAL =48; + + static const short TRAJ_CD1 = 1; + static const short TRAJ_CD2 = 2; + static const short TRAJ_CD3 = 3; + static const short TRAJ_CD4 = 4; + static const short TRAJ_CD5 = 5; + static const short TRAJ_CD6 = 6; + static const short TRAJ_CD7 = 7; + static const short TRAJ_CD8 = 8; + static const short TRAJ_CD9 = 9; + static const short TRAJ_CD10 = 10; + static const short TRAJ_CD11 = 11; + static const short TRAJ_CD12 = 12; + // using indices =vector; } diff --git a/Banks/clas12reader.cpp b/Banks/clas12reader.cpp new file mode 100644 index 0000000..7583e68 --- /dev/null +++ b/Banks/clas12reader.cpp @@ -0,0 +1,133 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12reader.h" + +namespace clas12 { + + clas12reader::clas12reader(string filename){ + cout<<" clas12reader::clas12reader reading "<(); + _bmcparts = std::make_shared(); + _bcovmat= std::make_shared(); + _bhead = std::make_shared

(); + _bcal = std::make_shared(); + _bscint = std::make_shared(); + _btrck = std::make_shared(); + _btraj = std::make_shared(); + _bcher = std::make_shared(); + _bft = std::make_shared(); + _bvtp = std::make_shared(); + + //initialise banks + _bparts->init("REC::Particle",_reader); + _bmcparts->init("MC::Lund",_reader); + _bcovmat->init("REC::CovMat",_reader); + _bhead->init("REC::Event",_reader); + _bvtp->init("RAW::vtp",_reader); + _bcal->init("REC::Calorimeter",_reader); + _bscint->init("REC::Scintillator",_reader); + _bcher->init("REC::Cherenkov",_reader); + _bft->init("REC::ForwardTagger",_reader); + _btrck->init("REC::Track",_reader); + _btrck->init("REC::Traj",_reader); + + //add some detector regions to their vectors + addARegionFDet(); + addARegionCDet(); + addARegionFT(); + + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool clas12reader::next(){ + if(!_reader.next()) + return false; + + sort(); + + return true; + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + // bool clas12reader::nextInRecord(){ + // if(!_reader.nextInRecord()) + // return false; + + // sort(); + + // return true; + // } + //////////////////////////////////////////////////////// + /// Loop over particles and find their region + /// Add appropriate region_partcle to event particle vector + void clas12reader::sort(){ + + + _nparts=_bparts->getSize(); + _n_rfdets=0; + _n_rcdets=0; + _n_rfts=0; + + _detParticles.clear(); + _detParticles.reserve(_nparts); + + if(_nparts==0) return; + + //Loop over particles and find their region + for(ushort i=0;i<_nparts;i++){ + _bparts->setEntry(i); + + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rfdets[_n_rfdets]); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + continue; + } + + //Check if CDet particle + if(_rcdets[_n_rcdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rcdets[_n_rcdets]); + _n_rcdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rcdets==_rcdets.size()) + addARegionCDet(); + continue; + } + //Check if FT particle + if(_rfts[_n_rfts]->sort()){ + //add a FDet particle to the event list + _detParticles.emplace_back(_rfts[_n_rfts]); + _n_rfts++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfts==_rfts.size()) + addARegionFT(); + continue; + } + } + } + //////////////////////////////////////////////////////// + ///Filter and return detParticles by given PID + std::vector clas12reader::getByID(int id){ + return container_filter(_detParticles, [id](region_part_ptr dr) + {return dr->getPid()==id;}); + } + +} diff --git a/Banks/clas12reader.h b/Banks/clas12reader.h new file mode 100644 index 0000000..e86dcb8 --- /dev/null +++ b/Banks/clas12reader.h @@ -0,0 +1,133 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: clas12reader.h + * Author: dglazier + * + */ + +#ifndef CLAS12READER_H +#define CLAS12READER_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "mcparticle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "cherenkov.h" +#include "header.h" +#include "vtp.h" +#include "scaler.h" +#include "covmatrix.h" +#include "forwardtagger.h" +#include "region_particle.h" +#include "region_fdet.h" +#include "region_cdet.h" +#include "region_ft.h" + +#include + + +namespace clas12 { + + class clas12reader { + + + public: + + + clas12reader()=default; + clas12reader(string filename); + ~clas12reader()=default; + + hipo::reader& getReader(){return _reader;} + + bool next(); + bool nextInRecord(); + void sort(); + void readEvent(); + + void addARegionFDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rfdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + void addARegionCDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rcdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + void addARegionFT(){ + //Forward tagger needs particles and forward tagger + _rfts.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + + + const head_ptr head() const{return _bhead;}; + const vtp_ptr vtp() const{return _bvtp;}; + const scaler_ptr scaler() const{return _bscal;}; + const mcpar_ptr mcparts() const{return _bmcparts;}; + + + std::vector& getDetParticles(){return _detParticles;} + std::vector* getDetParticlesPtr(){return &_detParticles;} + std::vector getByID(int id); + + int getNParticles() const {return _detParticles.size();} + + private: + + //reader + hipo::reader _reader; + hipo::event _event; + + //DST banks + head_ptr _bhead; + par_ptr _bparts; + mcpar_ptr _bmcparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + traj_ptr _btraj; + cher_ptr _bcher; + ft_ptr _bft; + vtp_ptr _bvtp; + scaler_ptr _bscal; + + //Detector region vectors, + //each particle in an event will have + //one associated + std::vector _rfdets; + std::vector _rcdets; + std::vector _rfts; + std::vector _detParticles; + + + ushort _nparts=0; + ushort _n_rfdets=0; + ushort _n_rcdets=0; + ushort _n_rfts=0; + + }; + //helper functions + + //filter vectors via a lambda function + //see for example clas12reader::getByID() + template + Cont container_filter(const Cont &container, Pred predicate){ + Cont result; + std::copy_if(container.begin(),container.end(),std::back_inserter(result), predicate); + return std::move(result); + } + +} + +#endif /* CLAS12READER_H */ diff --git a/Banks/region_cdet.cpp b/Banks/region_cdet.cpp index 350507f..94baf7e 100644 --- a/Banks/region_cdet.cpp +++ b/Banks/region_cdet.cpp @@ -10,16 +10,16 @@ namespace clas12 { /////////////////////////////////////////////////////// /// constructor used for stand-alone - region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): - region_particle(pars,cm,scp,trp) + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): + region_particle(pars,cm,scp,trp,trj) { _region=clas12::CD; } /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FT - region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): - region_particle(pars,cm,calp,scp,trp,chp,ftp) + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) { _region=clas12::CD; } @@ -67,6 +67,15 @@ namespace clas12 { _scint->setIndex(-1);return _scint; } + /////////////////////////////////////////////////////// + /// Get pointer to traj banks for this particle + /// This should be used directly to acess data + /// e.g. p->traj(TRAJ_CD1)->getCx(); + /// p->traj(TRAJ_CD4)->getX(); + const traj_ptr region_cdet::traj(ushort det) const { + _traj->getIndex(_pentry,det); + return _traj; + } } diff --git a/Banks/region_cdet.h b/Banks/region_cdet.h index e438660..368dcea 100644 --- a/Banks/region_cdet.h +++ b/Banks/region_cdet.h @@ -19,6 +19,7 @@ #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" +#include "traj.h" #include "cherenkov.h" @@ -31,15 +32,16 @@ namespace clas12 { public: region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, - trck_ptr trp); + trck_ptr trp,traj_ptr trj); region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, - trck_ptr trp, cher_ptr chp, ft_ptr ftp); + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); ~region_cdet()=default; bool sort() final; const scint_ptr sci(ushort lay) const final; + const traj_ptr traj(ushort det) const final; const trck_ptr trk(ushort lay) const final{_trck->setIndex(_ptrck);return _trck;}; diff --git a/Banks/region_fdet.cpp b/Banks/region_fdet.cpp index aab4316..6354bdf 100644 --- a/Banks/region_fdet.cpp +++ b/Banks/region_fdet.cpp @@ -9,16 +9,16 @@ namespace clas12 { /////////////////////////////////////////////////////// /// constructor used for stand-alone - region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): - region_particle(pars,cm,calp,scp,trp,chp) + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): + region_particle(pars,cm,calp,scp,trp,trj,chp) { _region=clas12::FD; } /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FT - region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): - region_particle(pars,cm,calp,scp,trp,chp,ftp) + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj,cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) { _region=clas12::FD; } @@ -51,7 +51,7 @@ namespace clas12 { //should be 1 track per particle _ptrck=_trck->getIndex(_pentry,clas12::DC); - + _phtcc=_cher->getIndex( _pentry,clas12::HTCC); _pltcc=_cher->getIndex( _pentry,clas12::LTCC); @@ -108,6 +108,16 @@ namespace clas12 { _cher->setIndex(-1);return _cher; } + /////////////////////////////////////////////////////// + /// Get pointer to traj banks for this particle + /// This should be used directly to acess data + /// e.g. p->traj(TRAJ_HTCC)->getCx(); + /// p->traj(TRAJ_DC3)->getX(); + const traj_ptr region_fdet::traj(ushort det) const { + _traj->getIndex(_pentry,det); + return _traj; + } + } diff --git a/Banks/region_fdet.h b/Banks/region_fdet.h index 2d75aed..a190b7b 100644 --- a/Banks/region_fdet.h +++ b/Banks/region_fdet.h @@ -19,6 +19,7 @@ #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" +#include "traj.h" #include "cherenkov.h" @@ -32,9 +33,9 @@ namespace clas12 { // region_fdet()=default; region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, - trck_ptr trp, cher_ptr chp); + trck_ptr trp, traj_ptr trj, cher_ptr chp); region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, - trck_ptr trp, cher_ptr chp, ft_ptr ftp); + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); ~region_fdet()=default; @@ -42,6 +43,7 @@ namespace clas12 { const cal_ptr cal(ushort lay) const final; const scint_ptr sci(ushort lay) const final; + const traj_ptr traj(ushort det) const final; const trck_ptr trk(ushort lay) const final { _trck->setIndex(_ptrck);return _trck; @@ -112,6 +114,8 @@ namespace clas12 { short _ptof3=-1; //track index short _ptrck=-1; + //traj index + // short _ptraj=-1; //cherenkov indices short _phtcc=-1; short _pltcc=-1; diff --git a/Banks/region_ft.cpp b/Banks/region_ft.cpp index 44e41f1..23fd574 100644 --- a/Banks/region_ft.cpp +++ b/Banks/region_ft.cpp @@ -19,8 +19,8 @@ namespace clas12 { /////////////////////////////////////////////////////// ///Constructor used for event, ///give all detector banks to prevent crashes when looking for FD - region_ft::region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): - region_particle(pars,cm,calp,scp,trp,chp,ftp) + region_ft::region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) { _region=clas12::FT; } diff --git a/Banks/region_ft.h b/Banks/region_ft.h index 3b040e9..939c506 100644 --- a/Banks/region_ft.h +++ b/Banks/region_ft.h @@ -29,7 +29,7 @@ namespace clas12 { region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp); region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, - trck_ptr trp, cher_ptr chp, ft_ptr ftp); + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); ~region_ft()=default; diff --git a/Banks/region_particle.cpp b/Banks/region_particle.cpp index 3d6098d..6528c98 100644 --- a/Banks/region_particle.cpp +++ b/Banks/region_particle.cpp @@ -5,6 +5,7 @@ */ #include "region_particle.h" +#include namespace clas12 { @@ -20,35 +21,77 @@ namespace clas12 { { } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp): + region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): _parts(pars), _covmat(cm), _scint(scp), - _trck(trp) + _trck(trp), + _traj(trj) { } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp): + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): _parts(pars), _covmat(cm), _cal(calp), _scint(scp), _trck(trp), + _traj(trj), _cher(chp) { } - region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp): + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): _parts(pars), _covmat(cm), _cal(calp), _scint(scp), _trck(trp), + _traj(trj), _cher(chp), - _ft(ftp) + _ft(ftp), + _head(head) { } + float region_particle::getTheta() const{ + _parts->setEntry(_pentry); + float x=_parts->getPx(); + float y=_parts->getPy(); + float z=_parts->getPz(); + return x == 0.0 && y == 0.0 && z == 0.0 ? 0.0 + : atan2(sqrt(x*x+y*y),z); + } + float region_particle::getPhi() const{ + _parts->setEntry(_pentry); + float x=_parts->getPx(); + float y=_parts->getPy(); + return atan2(y,x); + } + float region_particle::getCalcMass() { + float p=getP(); + float t=getTime()-_head->getStartTime(); + float d=getPath()/100; + if(t==0) + return 0; + if(p==0) + return 0; + float mass= d/t/p/2.9979246e+08*1E9; + return mass; + } + float region_particle::getBeta() { + float t=getTime()-_head->getStartTime(); + float d=getPath()/100; + if(t==0) + return 0; + float beta= d/t/2.9979246e+08*1E9; + return beta; + } + float region_particle::getGamma() { + float beta=getBeta(); + float gamma= sqrt(1/(1-beta*beta)); + return gamma; + } } diff --git a/Banks/region_particle.h b/Banks/region_particle.h index d04ae53..e1d3ef4 100644 --- a/Banks/region_particle.h +++ b/Banks/region_particle.h @@ -20,6 +20,8 @@ #include "calorimeter.h" #include "scintillator.h" #include "tracker.h" +#include "traj.h" +#include "header.h" #include "cherenkov.h" #include "forwardtagger.h" @@ -31,19 +33,20 @@ namespace clas12 { public: - + region_particle(){}; + region_particle(par_ptr pars,covmat_ptr cm); - //For region_ft + //For region_ft region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); //For region_cdet region_particle(par_ptr pars,covmat_ptr cm, - scint_ptr scp, trck_ptr trp); - //For region_fdet + scint_ptr scp, trck_ptr trp, traj_ptr trj); + //For region_fdet region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, - scint_ptr scp, trck_ptr trp, cher_ptr chp); + scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp); //For all regions region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, - scint_ptr scp, trck_ptr trp, cher_ptr chp, ft_ptr ftp); + scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); virtual ~region_particle()=default; @@ -65,19 +68,26 @@ namespace clas12 { virtual double getDeltaEnergy()=0; virtual short getSector() =0; + const head_ptr head() const{return _head;}; const par_ptr par() const{_parts->setEntry(_pentry);return _parts;}; const covmat_ptr covmat() const{_covmat->setIndex(_pcmat);return _covmat;}; virtual const cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;}; virtual const scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;}; virtual const trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;}; + virtual const traj_ptr traj(ushort det) const{_traj->setIndex(-1);return _traj;}; virtual const cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; virtual const ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();}; - short region() const {return _region;} - + short getRegion() const {return _region;} + float getTheta() const; + float getPhi() const; + float getP(){_parts->setEntry(_pentry);return _parts->getP();} + float getCalcMass(); + float getBeta(); + float getGamma(); protected: @@ -87,7 +97,9 @@ namespace clas12 { cal_ptr _cal; scint_ptr _scint; trck_ptr _trck; + traj_ptr _traj; cher_ptr _cher; + head_ptr _head; //particle index diff --git a/Banks/traj.cpp b/Banks/traj.cpp new file mode 100644 index 0000000..76a801a --- /dev/null +++ b/Banks/traj.cpp @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "traj.h" + + +namespace clas12 { + + + void traj::init(const char *bankName, hipo::reader &r,std::string items){ + + particle_detector::init(bankName,r,items); + + _cx_order = getEntryOrder("cx"); + _cy_order = getEntryOrder("cy"); + _cz_order = getEntryOrder("cz"); + _detector_id_order = getEntryOrder("detID"); + _index_order = getEntryOrder("index"); + _pathlength_order = getEntryOrder("pathlength"); + _pindex_order = getEntryOrder("pindex"); + _q_order = getEntryOrder("q"); + _x_order = getEntryOrder("x"); + _y_order = getEntryOrder("y"); + _z_order = getEntryOrder("z"); + + } + + +} diff --git a/Banks/traj.h b/Banks/traj.h new file mode 100644 index 0000000..66aaeb6 --- /dev/null +++ b/Banks/traj.h @@ -0,0 +1,106 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: traj.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_TRAJ_H +#define CLAS12_TRAJ_H + +#include "particle_detector.h" + + +namespace clas12 { + + class traj : public particle_detector { + + + public: + + + traj()=default; + + traj(const char *bankName, hipo::reader &r) + : particle_detector(bankName,r){}; + + virtual ~traj()=default; + + void init(const char *bankName, hipo::reader &r,std::string items="") override; + + //getter funtions for items in traj bank + double getCx(){ + if(_index>-1)return getFloat(_cx_order,_index); + return 0; + } + double getCy(){ + if(_index>-1)return getFloat(_cy_order,_index); + return 0; + } + double getCz(){ + if(_index>-1)return getFloat(_cz_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_cx_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_cy_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_cz_order,_index); + return 0; + } + short getDetID(){ + if(_index>-1)return getInt(_detector_id_order,_index); + return 0; + } + short getTrajIndex(){ + if(_index>-1)return getInt(_index_order,_index); + return 0; + } + short getPindex(){ + if(_index>-1)return getInt(_pindex_order,_index); + return 0; + } + double getPathLength(){ + if(_index>-1)return getFloat(_pathlength_order,_index); + return 0; + } + int8_t getQ(){ + if(_index>-1)return getInt(_pindex_order,_index); + return 0; + } + + private: + + int _cx_order=-1; + int _cy_order=-1; + int _cz_order=-1; + //int _detID_order=-1; + int _index_order=-1; + int _pathlength_order=-1; + int _pindex_order=-1; + int _q_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + + + + }; //class traj + + using traj_ptr=std::shared_ptr; + using traj_uptr=std::unique_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/RunRoot/HallBEvent.C b/RunRoot/Ex1_CLAS12Reader.C similarity index 60% rename from RunRoot/HallBEvent.C rename to RunRoot/Ex1_CLAS12Reader.C index e8bbb2b..96bab5a 100644 --- a/RunRoot/HallBEvent.C +++ b/RunRoot/Ex1_CLAS12Reader.C @@ -8,18 +8,25 @@ #include #include #include -#include #include -#include "reader.h" -#include "hallB_event.h" +#include +#include +#include "clas12reader.h" using namespace clas12; //just make the code a bit neater when using unique_ptr -using P4_=TLorentzVector; -using p4_uptr = std::unique_ptr; +using P4_t=TLorentzVector; +//using p4_ptr = std::unique_ptr; +using p4_ptr = std::shared_ptr; -void HallBEvent(){ +void SetLorentzVector(p4_ptr p4,clas12::region_part_ptr rp){ + p4->SetXYZM(rp->par()->getPx(),rp->par()->getPy(), + rp->par()->getPz(),p4->M()); + +} + +void Ex1_CLAS12Reader(){ // Record start time auto start = std::chrono::high_resolution_clock::now(); @@ -44,48 +51,51 @@ void HallBEvent(){ cout<<"Analysing hipo file "<GetParticle(2212)->Mass()); - //remember these are really just TLorentzVector* - auto el=p4_uptr(new P4_(0,0,0,db->GetParticle(11)->Mass())); - auto pr=p4_uptr(new P4_(0,0,0,db->GetParticle(2212)->Mass())); - auto g1=p4_uptr(new P4_(0,0,0,0)); - auto g2=p4_uptr(new P4_(0,0,0,0)); - auto pip=p4_uptr(new P4_(0,0,0,db->GetParticle(211)->Mass())); - auto pim=p4_uptr(new P4_(0,0,0,db->GetParticle(-211)->Mass())); + auto beam=P4_t(0,0,10.6,10.6); + auto target=P4_t(0,0,0,db->GetParticle(2212)->Mass()); + //remember these are really just TLorentzVector* + //but std::unique_ptr makes sure they are delted at end of scope + auto el=p4_ptr(new P4_t(0,0,0,db->GetParticle(11)->Mass())); + auto pr=p4_ptr(new P4_t(0,0,0,db->GetParticle(2212)->Mass())); + auto g1=p4_ptr(new P4_t(0,0,0,0)); + auto g2=p4_ptr(new P4_t(0,0,0,0)); + auto pip=p4_ptr(new P4_t(0,0,0,db->GetParticle(211)->Mass())); + auto pim=p4_ptr(new P4_t(0,0,0,db->GetParticle(-211)->Mass())); //a histogram (pre C++11 !) auto* hmiss=new TH1F("missM","missM",200,-2,3); + auto* hm2g=new TH1F("m2g","m2g",200,0,1); + auto* hm2gCut=new TH1F("m2gCut","m2g",200,0,1); gBenchmark->Start("timer"); int counter=0; + - // while(reader.next()==true){// (map 4.5s for 1M events) - TChain chain("hipo"); - chain.Add(inputFile.Data()); - auto files=chain.GetListOfFiles(); - //get the hipo data - for(Int_t i=0;iGetEntries();i++){ - hipo::reader reader; - reader.open(files->At(i)->GetTitle()); - //create the hallb event - hallB_event event(reader); + clas12reader event(files->At(i)->GetTitle()); + - while(event.next()==true){ + while(event.next()==true){ event.head()->getStartTime(); //Loop over all particles to see how to access detector info. - for(auto& p : event.getDetParticles()){ - // get predefined selected information + for(auto& p : event.getDetParticles()){ + // get predefined selected information p->getTime(); p->getDetEnergy(); p->getDeltaEnergy(); + // get any detector information (if exists for this particle) // there should be a get function for any entry in the bank - switch(p->region()) {// (+1s per 1M) + switch(p->getRegion()) { case FD : p->cal(PCAL)->getEnergy(); p->cal(ECIN)->getEnergy(); @@ -96,6 +106,7 @@ void HallBEvent(){ p->trk(DC)->getSector(); p->che(HTCC)->getNphe(); p->che(LTCC)->getNphe(); + p->traj(TRAJ_HTCC)->getX(); break; case FT : p->ft(FTCAL)->getEnergy(); @@ -110,7 +121,8 @@ void HallBEvent(){ // p->covmat()->print(); p->cmat(); } - // get particles by type (+1s overhead per 1M (include fill hist)) + + // get particles by type auto electrons=event.getByID(11); auto gammas=event.getByID(22); auto protons=event.getByID(2212); @@ -121,36 +133,35 @@ void HallBEvent(){ pips.size()==1 &&pims.size() == 1){ // set the particle momentum - // if we wanted to integrate more ROOT we could - // return direct TLorentzVector // i.e. auto el = electrons[0]->p4(); etc. - el->SetXYZM(electrons[0]->par()->getPx(),electrons[0]->par()->getPy(), - electrons[0]->par()->getPz(),el->M()); - pr->SetXYZM(protons[0]->par()->getPx(),protons[0]->par()->getPy(), - protons[0]->par()->getPz(),pr->M()); - g1->SetXYZM(gammas[0]->par()->getPx(),gammas[0]->par()->getPy(), - gammas[0]->par()->getPz(),0); - g2->SetXYZM(gammas[1]->par()->getPx(),gammas[1]->par()->getPy(), - gammas[1]->par()->getPz(),0); - pip->SetXYZM(pips[0]->par()->getPx(),pips[0]->par()->getPy(), - pips[0]->par()->getPz(),pip->M()); - pim->SetXYZM(pims[0]->par()->getPx(),pims[0]->par()->getPy(), - pims[0]->par()->getPz(),pim->M()); - + SetLorentzVector(el,electrons[0]); + SetLorentzVector(pr,protons[0]); + SetLorentzVector(g1,gammas[0]); + SetLorentzVector(g2,gammas[1]); + SetLorentzVector(pip,pips[0]); + SetLorentzVector(pim,pims[0]); + TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; hmiss->Fill(miss.M2()); - + TLorentzVector pi0 = *g1+*g2; + hm2g->Fill(pi0.M()); + if(TMath::Abs(miss.M2())<0.5)hm2gCut->Fill(pi0.M()); } counter++; - //if(counter==1E6) break; - } } gBenchmark->Stop("timer"); gBenchmark->Print("timer"); + TCanvas* can=new TCanvas(); + can->Divide(2,1); + can->cd(1); hmiss->DrawCopy(); - + can->cd(2); + hm2g->DrawCopy(); + hm2gCut->SetLineColor(2); + hm2gCut->DrawCopy("same"); + auto finish = std::chrono::high_resolution_clock::now(); std::chrono::duration elapsed = finish - start; std::cout << "Elapsed time: " << elapsed.count()<< " events = "<Add("file1.hipo") + //hists.GetChain()->Add("file2.hipo") + //hists.GetChain()->Add("/dir/*.hipo") + + + hists.Hist1D("P.Theta*TMath::RadToDeg()",180,0,180,"PBANK.Px"); + hists.Hist1D("P.Phi*TMath::RadToDeg()",180,-180,180,"PBANK.Px"); + hists.Hist1D("P.P",100,0.1,12,"PBANK.Px"); + hists.Hist1D("P.Time-EVNT.StartTime",1000,-200,200,"P.Time&&PBANK.Px"); //Note zero suppression + + hists.Hist1D("atan2(sqrt(PBANK.Px*PBANK.Px+PBANK.Py*PBANK.Py),PBANK.Pz)*57.295780",180,0,180,"P.Time&&PBANK.Px"); + hists.Hist1D("atan2(PBANK.Py,PBANK.Px)*TMath::RadToDeg()",180,-180,180,"P.Time&&PBANK.Px"); + hists.Hist1D("sqrt(PBANK.Px*PBANK.Px+PBANK.Py*PBANK.Py+PBANK.Pz*PBANK.Pz)",100,0.1,12); + hists.Hist1D("FTOF1B.Time-EVNT.StartTime",1000,-200,200,"P.Time&&PBANK.Px&&PBANK.Px"); + + hists.Hist1D("P.Theta*TMath::RadToDeg()",180,0,180,"P.Pid==11&&PBANK.Px"); + hists.Hist1D("P.Phi*TMath::RadToDeg()",180,-180,180,"P.Pid==11&&PBANK.Px"); + hists.Hist1D("P.P",100,0.1,12,"P.Pid==11"); + hists.Hist1D("P.Time-EVNT.StartTime",1000,-200,200,"P.Time&&P.Pid==11&&PBANK.Px"); + + hists.Hist1D("P.Theta*TMath::RadToDeg()",180,0,180,"P.Pid==2212&&PBANK.Px"); + hists.Hist1D("P.Phi*TMath::RadToDeg()",180,-180,180,"P.Pid==2212&&PBANK.Px"); + hists.Hist1D("P.P",100,0.1,12,"P.Pid==2212&&PBANK.Px"); + hists.Hist1D("P.Time-EVNT.StartTime",1000,-200,200,"P.Time&&P.Pid==2212&&PBANK.Px")->Draw("(4x3)"); + + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==11"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==-11"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==22"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==2212"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==211"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==-211"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==321"); + hists.Hist2D("P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()",180,0,180,180,-180,180,"P.Pid==-321")->Draw("(4x2)col1"); + + + + hists.Hist1D("P.CalcMass",100,0.05,2,"P.Time"); + hists.Hist1D("P.CalcMass",100,0.05,2,"P.Time&&P.Region==FT"); + hists.Hist1D("P.CalcMass",100,0.05,2,"P.Time&&P.Region==FD"); + hists.Hist1D("P.CalcMass",100,0.05,2,"P.Time&&P.Region==CD")->Draw("(2x2)"); +} diff --git a/RunRoot/Ex4_TreeMaker.C b/RunRoot/Ex4_TreeMaker.C new file mode 100644 index 0000000..019a1f4 --- /dev/null +++ b/RunRoot/Ex4_TreeMaker.C @@ -0,0 +1,16 @@ +{ + hiporoot::ParticleTree treemaker("/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo","test.root"); + + treemaker.Branch("P.Time/F"); + treemaker.Branch("PBANK.Px/F"); + treemaker.Branch("PBANK.Py/F"); + treemaker.Branch("PBANK.Pz/F"); + treemaker.Branch("PBANK.Vx/F"); + treemaker.Branch("PBANK.Vy/F"); + treemaker.Branch("PBANK.Vz/F"); + treemaker.Branch("PBANK.Pid/I"); + + // treemaker.AddParticleCut("PBANK.Pid==11"); + + treemaker.Fill(); +} diff --git a/RunRoot/HallBCheckTimeAlignment.C b/RunRoot/HallBCheckTimeAlignment.C deleted file mode 100644 index 6e6de31..0000000 --- a/RunRoot/HallBCheckTimeAlignment.C +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "hallB_event.h" - -using namespace clas12; - -//just make the code a bit neater when using unique_ptr -using P4_=TLorentzVector; -using p4_uptr = std::unique_ptr; - -void HallBCheckTimeAlignment(){ - // Record start time - auto start = std::chrono::high_resolution_clock::now(); - - - ///////////////////////////////////// - //ignore this just getting file name! - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - ///////////////////////////////////// - - - cout<<"Analysing hipo file "<Start("timer"); - int counter=0; - - const double fPDGMass=0.00051099891; - while(event.next()==true){ - - - hRFTimeFD->Fill(event.head()->getStartTime()-event.head()->getRFTime()); - //Loop over all particles to see how to access detector info. - for(auto& p : event.getDetParticles()){ - if(p->getPid()==11){//e- - double pP=p->par()->getP(); - double HypBeta= pP/sqrt(pP*pP+fPDGMass*fPDGMass); - double HypTime=p->getPath()/100/HypBeta/2.99792e+08*1E9 ; - double DeltaTime=p->getTime()-HypTime - event.head()->getStartTime() ; - - if(p->region()==1000)hDeltaTimeFT->Fill(DeltaTime); - else if(p->region()==2000)hDeltaTimeFD->Fill(DeltaTime); - else if(p->region()==3000)hDeltaTimeCD->Fill(DeltaTime); - } - - } - counter++; - if(counter==1E6) break; - - } - gBenchmark->Stop("timer"); - gBenchmark->Print("timer"); - auto c1=new TCanvas(); - c1->Divide(2,2); - c1->cd(1); - hRFTimeFD->DrawCopy(); - c1->cd(2); - hDeltaTimeFT->DrawCopy(); - c1->cd(3); - hDeltaTimeFD->DrawCopy(); - c1->cd(4); - hDeltaTimeCD->DrawCopy(); - c1->Draw(); - auto finish = std::chrono::high_resolution_clock::now(); - std::chrono::duration elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count()<< " events = "< -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "particle.h" -#include "calorimeter.h" -#include "scintillator.h" -#include "tracker.h" -#include "cherenkov.h" -#include "region_fdet.h" - -using namespace clas12; - - -void RegionFDET(){ - // Record start time - auto start = std::chrono::high_resolution_clock::now(); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<("REC::Particle",reader); - auto banksPART=make_shared();banksPART->init("REC::Particle",reader); - - //make a link to the REC::Calorimeter banks - // auto banksCAL=make_shared("REC::Calorimeter",reader); - auto banksCAL=make_shared();banksCAL->init("REC::Calorimeter",reader); - //make a link to the REC::Scintillator banks - auto banksSCINT=make_shared();banksSCINT->init("REC::Scintillator",reader); - //make a link to the REC::Tracker banks - auto banksTRCK=make_shared();banksTRCK->init("REC::Track",reader); - //make a link to the REC::Cherenkov banks - auto banksCHER=make_shared();banksCHER->init("REC::Cherenkov",reader); - - - - //connect ft and particle banks to detector_region for parsing - clas12::region_fdet FDet(banksPART,banksCAL,banksSCINT,banksTRCK,banksCHER); - - - int counter=0; - while(reader.next()==true){ - auto Np=banksPART->getSize(); - - for(int i=0;isetEntry(i); - FDet.coordinate(); - // cout<setIndex(0); - // cout< elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count()<< " events = "< -#include -#include -#include -#include -#include -#include -#include -#include "reader.h" -#include "particle.h" -#include "forwardtagger.h" -#include "region_ft.h" - -using namespace clas12; - - -void RegionFT(){ - // Record start time - auto start = std::chrono::high_resolution_clock::now(); - - TString inputFile; - TString outputFile; - - for(Int_t i=1;iArgc();i++){ - TString opt=gApplication->Argv(i); - if((opt.Contains(".hipo"))){ - inputFile=opt(5,opt.Sizeof()); - } - } - if(inputFile==TString()) { - std::cout << " *** please provide a file name..." << std::endl; - exit(0); - } - cout<<"Analysing hipo file "<(forwardtagger("REC::ForwardTagger",reader)); - - //make a link to the REC::Particles bank - auto banksPart=make_shared(particle("REC::Particle",reader)); - - - //connect ft and particle banks to detector_region for parsing - clas12::region_ft FT(banksPart,banksFT); - - - int counter=0; - while(reader.next()==true){ - - FT.configure_event(); - auto calor=FT.CAL(); - calor->setIndex(0); - cout< elapsed = finish - start; - std::cout << "Elapsed time: " << elapsed.count()<< " events = "< + +namespace hiporoot { + + BankHist::BankHist(TString filename): HipoHist(filename){ + _tempActionName="BankHistAction"; + + _mapOfParts["BANK"]="bank."; + _mapOfParts["REC::Particle"]="particle"; + _mapOfParts["REC::Calorimeter"]="calorimeter"; + _mapOfParts["REC::Scintillator"]="scintillator"; + _mapOfParts["REC::Cherenkov"]="cherenkov"; + _mapOfParts["REC::Track"]="tracker"; + _mapOfParts["REC::Traj"]="traj"; + _mapOfParts["REC::ForwardTagger"]="forwardtagger"; + _mapOfParts["MC::Lund"]="mcparticle"; + _mapOfParts["REC::CovMat"]="covmatrix"; + _mapOfParts["RAW::vtp"]="vtp"; + _mapOfParts["RAW::scaler"]="scaler"; + _mapOfParts["REC::Event"]="header"; + + + } + BankHist::~BankHist(){ + } + void BankHist::Loop(){ + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + _bankName=TString(); + } + HipoHist* BankHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ + + CheckForBank(varExp); + auto checkName1=_bankName; + + if(checkName1==TString()) + cout<<"WARNING BankHist::Hist1D" <<" no bank found in "<; */ + + /* c12_uptr clas12(){ */ + /* return std::move(c12_uptr */ + /* (new clas12::clas12reader(HipoFileName().Data()))); */ + /* } */ + + private : + + TString _bankName; + + }; +} diff --git a/RunRoot/hiporoot/HipoChain.C b/RunRoot/hiporoot/HipoChain.C new file mode 100644 index 0000000..fd87808 --- /dev/null +++ b/RunRoot/hiporoot/HipoChain.C @@ -0,0 +1,53 @@ +#include "HipoChain.h" +#include "reader.h" + +namespace hiporoot { + + HipoChain::HipoChain(): TNamed("HIPOFILES","A chain of hipo files"){ + + _ListOfFiles=_tchain.GetListOfFiles(); + } + + HipoChain::~HipoChain(){ + } + + + void HipoChain::Add(TString name){ + + _tchain.Add(name); + _Nrecords=-1; //must recalculate + } + + Long64_t HipoChain::GetNRecords(){ + if(_Nrecords!=-1) + return _Nrecords; + + _Nrecords=0; + _fileRecords.clear(); + auto nfiles=GetNFiles(); + //loop over files and get the number of records + for(auto i=0;iGetNFiles()) ifile=GetNFiles(); + for(Int_t i=0;iirec) + return i-1; + } + return n-1; + } +} diff --git a/RunRoot/hiporoot/HipoChain.h b/RunRoot/hiporoot/HipoChain.h new file mode 100644 index 0000000..a21c232 --- /dev/null +++ b/RunRoot/hiporoot/HipoChain.h @@ -0,0 +1,45 @@ +#pragma once + + +#include +#include +#include +#include + +namespace hiporoot { + + + class HipoChain : public TNamed { + + + public : + HipoChain(); + virtual ~HipoChain(); + + + void Add(TString name); + Int_t GetNFiles(){return _ListOfFiles->GetEntries();} + Long64_t GetNRecords(); + + TString GetFileName(Int_t i){ + if(i>=GetNFiles()) return TString(); + return _ListOfFiles->At(i)->GetTitle(); + } + + Int_t GetFileRecords(Int_t i){ + if(i _fileRecords; + + ClassDef(hiporoot::HipoChain,1); + }; +} diff --git a/RunRoot/hiporoot/HipoFileSelector.C b/RunRoot/hiporoot/HipoFileSelector.C new file mode 100644 index 0000000..a0af89b --- /dev/null +++ b/RunRoot/hiporoot/HipoFileSelector.C @@ -0,0 +1,128 @@ +#define HipoFileSelector_cxx +// The class definition in HipoFileSelector.h has been generated automatically +// by the ROOT utility TTree::MakeSelector(). This class is derived +// from the ROOT class TSelector. For more information on the TSelector +// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. + + +// The following methods are defined in this file: +// Begin(): called every time a loop on the tree starts, +// a convenient place to create your histograms. +// SlaveBegin(): called after Begin(), when on PROOF called only on the +// slave servers. +// Process(): called for each event, in this function you decide what +// to read and fill your histograms. +// SlaveTerminate: called at the end of the loop on the tree, when on PROOF +// called only on the slave servers. +// Terminate(): called at the end of the loop on the tree, +// a convenient place to draw/fit your histograms. +// + + +#include "HipoFileSelector.h" +#include +#include +#include +#include +#include +#include +#include + +namespace hiporoot{ + + HipoFileSelector::HipoFileSelector(TTree * ){ + + } + HipoFileSelector::HipoFileSelector(TString filename) : _chain(new HipoChain()) { + _chain->Add(filename); + } + HipoFileSelector::HipoFileSelector(HipoChain* chain) : _chain(chain) { + + } + + // void HipoFileSelector::Run(){ + + // } + + void HipoFileSelector::Begin(TTree * /*tree*/) + { + // The Begin() function is called at the start of the query. + // When running with PROOF Begin() is only called on the client. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + + + if(!fInput){ + fInput=new TList(); + // fInput->SetOwner(kTRUE); + } + + if(!_chain){ + cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ + cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves + } + + void HipoFileSelector::SlaveBegin(TTree * /*tree*/) + { + // The SlaveBegin() function is called after the Begin() function. + // When running with PROOF SlaveBegin() is called on each slave server. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + fInput->Print(); + _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); + //TString outdirstr=TString(outdir->GetTitle()); + cout<<"HipoFileSelector::SlaveBegin( "<<_chain<GetNFiles()<Add(_hist1); + } + + Bool_t HipoFileSelector::Process(Long64_t entry) + { + + _c12.reset(new clas12::clas12reader(_chain->GetFileName(entry).Data())); + + while(_c12->next()==true){ + ProcessEvent(); + } + + //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); + return kTRUE; + } + void HipoFileSelector::SlaveTerminate() + { + // The SlaveTerminate() function is called after all entries or objects + // have been processed. When running with PROOF SlaveTerminate() is called + // on each slave server. + + } + + void HipoFileSelector::Terminate() + { + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); + _hist1 = dynamic_cast(fOutput->FindObject("Time")); + if (_hist1) _hist1->Draw(); + c1->Update(); + } + + +} diff --git a/RunRoot/hiporoot/HipoFileSelector.h b/RunRoot/hiporoot/HipoFileSelector.h new file mode 100644 index 0000000..17ccdf6 --- /dev/null +++ b/RunRoot/hiporoot/HipoFileSelector.h @@ -0,0 +1,65 @@ +#ifndef HipoFileSelector_h +#define HipoFileSelector_h + +#include +#include +#include +#include + +#include +#include +#include + +// Headers needed by this particular selector +#include "HipoChain.h" +#include "clas12reader.h" + +namespace hiporoot{ + + + class HipoFileSelector : public TSelector { + public : + + + HipoFileSelector(TString filename) ; + HipoFileSelector(HipoChain *chain) ; + HipoFileSelector(TTree * /*tree*/ =0); + virtual ~HipoFileSelector() { } + virtual Int_t Version() const { return 2; } + virtual void Begin(TTree *tree); + virtual void SlaveBegin(TTree *tree); + // virtual void Init(TTree *tree); + //virtual Bool_t Notify(); + virtual Bool_t Process(Long64_t entry); + //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } + + Bool_t ProcessEvent(); + + virtual void SetOption(const char *option) { fOption = option; } + virtual void SetObject(TObject *obj) { fObject = obj; } + virtual void SetInputList(TList *input) { fInput = input; } + virtual TList *GetOutputList() const { return fOutput; } + virtual void SlaveTerminate(); + virtual void Terminate(); + + + + private: + + std::unique_ptr _c12; + HipoChain* _chain=nullptr; + + Int_t _NcurrRecords=0; + Int_t _iRecord=0; + Int_t _iFile=0; + Long64_t _NfileRecords=0; + + TH1F* _hist1=nullptr; + + ClassDef(hiporoot::HipoFileSelector,0); + + }; +} + + +#endif // #ifdef HipoFileSelector_cxx diff --git a/RunRoot/hiporoot/HipoHist.C b/RunRoot/hiporoot/HipoHist.C new file mode 100644 index 0000000..ba859fb --- /dev/null +++ b/RunRoot/hiporoot/HipoHist.C @@ -0,0 +1,122 @@ +#include "HipoHist.h" +#include +#include +#include +#include + +namespace hiporoot { + + HipoHist::HipoHist(TString filename): HipoROOTOut(filename){ + _histList->SetName("HipoHists"); + _histList->SetOwner(kFALSE); + + } + HipoHist::~HipoHist(){ + } + HipoHist* HipoHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ + + varExp=ExpandExpression(varExp,","); + if(condExp==TString(""))condExp="1"; + if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); + AddAction(varExp,condExp); + auto hist=new TH1F(varExp,varExp,nbins,min,max); + _histList->Add(hist); + _curHist.push_back(hist); + return this; + } + HipoHist* HipoHist::Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX,Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp){ + + varExp=ExpandExpression(varExp,","); + if(condExp==TString(""))condExp="1"; + if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); + AddAction(varExp,condExp); + auto hist=new TH2F(varExp,varExp,nbinsX,minX,maxX,nbinsY,minY,maxY); + _histList->Add(hist); + _curHist.push_back(hist); + return this; + } + + void HipoHist::Draw(TString opt){ + gBenchmark->Reset(); + gBenchmark->Start("compile time"); + CompileAction(); + gBenchmark->Stop("compile time"); + gBenchmark->Print("compile time"); + gBenchmark->Start("loop time"); + Loop(); + gBenchmark->Stop("loop time"); + gBenchmark->Print("loop time"); + OnCanvas(opt); + CleanAction(); + _curHist.clear(); + } + + void HipoHist::OnCanvas(TString opt){ + + Int_t left=-1; + Int_t Npads=0; + Int_t nx=0; + Int_t ny=0; + if((left=opt.First("("))!=-1){ + left++; + Int_t right=opt.First(")"); + if(right==-1) cout<<"HipoHist::OnCanvas mismatched () "<GetEntries()<2) + xandy=dims.Tokenize("X"); + if(xandy->GetEntries()>1){ + nx=TString(xandy->At(0)->GetName()).Atoi(); + ny=TString(xandy->At(1)->GetName()).Atoi(); + TCanvas* canvas=new TCanvas(); + canvas->Divide(nx,ny); + canvas->Draw(); + Npads=nx*ny; + } + //remove split option + left--; + TString splitopt=opt(left,right-left+1); + opt.ReplaceAll(splitopt,""); + } + //Simple 1 hist on 1 canvas + TCanvas* canvas1=nullptr; + if(_curHist.size()==1){ + if(!gPad) canvas1=new TCanvas(); + _curHist[0]->DrawCopy(opt); + gPad->Draw(); + return; + } + if(!Npads){ + //Simple many hists on many canvas + for(auto* hist : _curHist){ + if(!opt.Contains("same")){ + canvas1=new TCanvas(); + } + hist->DrawCopy(opt); + canvas1->Draw(); + } + } + else{ + //Use use divided canvas for many hists + Int_t ipad=1; + auto* canvas=dynamic_cast(gPad); + Int_t Ncan=0; + for(auto* hist : _curHist){ + if(ipad>Npads){ + canvas=new TCanvas(); + canvas->Divide(nx,ny); + canvas->Draw(); + ipad=1; + } + canvas->cd(ipad++); + hist->DrawCopy(opt); + } + } + } + void HipoHist::Save(const TString outname){ + auto outfile=TFile::Open(outname,"recreate"); + outfile->WriteTObject(_histList); + delete outfile; + } + +} diff --git a/RunRoot/hiporoot/HipoHist.h b/RunRoot/hiporoot/HipoHist.h new file mode 100644 index 0000000..1d036eb --- /dev/null +++ b/RunRoot/hiporoot/HipoHist.h @@ -0,0 +1,39 @@ +#pragma once + + +#include "HipoROOTOut.h" +#include +#include +#include + +namespace hiporoot { + + + class HipoHist : public HipoROOTOut { + + + public : + HipoHist(TString filename); + virtual ~HipoHist(); + + + + virtual HipoHist* Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp="1"); + virtual HipoHist* Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX, + Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp="1"); + + + void Draw(TString opt=""); + void OnCanvas(TString opt); + void Save(const TString outname); + std::vector* Hists(){return &_curHist;} + protected : + + std::vector _curHist; + + private : + + TList* _histList=new TList{}; + + }; +} diff --git a/RunRoot/hiporoot/HipoHistAction.C b/RunRoot/hiporoot/HipoHistAction.C new file mode 100644 index 0000000..9f65743 --- /dev/null +++ b/RunRoot/hiporoot/HipoHistAction.C @@ -0,0 +1,7 @@ +#include "HipoHist.h" +#include "clas12defs.h" +using namespace clas12; + +Double_t hiporoot::HipoHist::Action(){ + return _p->XXXX; +} diff --git a/RunRoot/hiporoot/HipoROOTOut.C b/RunRoot/hiporoot/HipoROOTOut.C new file mode 100644 index 0000000..49bf5fb --- /dev/null +++ b/RunRoot/hiporoot/HipoROOTOut.C @@ -0,0 +1,294 @@ +#include "HipoROOTOut.h" +#include "HipoRootAction.h" +#include +#include +#include +#include +#include +#include + +namespace hiporoot{ + + HipoROOTOut::HipoROOTOut(TString filename): _hipoFileName(filename){ + //make a temp file directory + TString HOME=TString(gSystem->Getenv("HOME")); + _tempDir=HOME+"/.hiporoot/"; + if(gSystem->Exec(Form("mkdir -p %s",_tempDir.Data()))){ + std::cout<<"HipoROOTOut::HipoROOTOut will store temp files in current directory"<Exec(Form("rm %sasdf*",_tempDir.Data())); + } + TString HipoROOTOut::NextFile(){ + if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) + _chain.Add(_hipoFileName); + if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) + return TString(); + TString fname=_chain.GetListOfFiles()->At(_iHipoFile)->GetTitle(); + _iHipoFile++; + return fname; + } + Bool_t HipoROOTOut::IsMoreFiles(){ + if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) + _chain.Add(_hipoFileName); + if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) + return kFALSE; + return kTRUE; + } + void HipoROOTOut::AddAction(TString varExp,TString condExp){ + if(_curMacro==TString("")){ + TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/RunRoot/hiporoot/"; + TMacro macro(HIPOROOT+"template"+_tempActionName+".C"); + _curMacro=_tempDir+Form("asdf%d__%s__.C",_Nruns,_tempActionName.Data()); + + TString strline=macro.GetLineWith("NNNN")->GetString(); + _actionClassName=_tempActionName+Form("%d",_Nruns); + strline.ReplaceAll("NNNNN",_actionClassName); + macro.GetLineWith("NNNNN")->SetString(strline); + + _Nruns++; + macro.SaveSource(_curMacro); + } + + TMacro macro(_curMacro); + TString strline=macro.GetLineWith("XXXX")->GetString(); + strline.ReplaceAll("////",""); + strline.ReplaceAll("XXXX",varExp); + strline.ReplaceAll("IIII",Form("%d",_Nactions++)); + strline.ReplaceAll("CCCC",condExp); + + TList *lines=macro.GetListOfLines(); + TObject* obj=macro.GetLineWith("XXXX"); + lines->AddAfter(obj,new TObjString(strline.Data())); + + + macro.SaveSource(_curMacro); + + } + void HipoROOTOut::ReplaceMacroText(TString from,TString to){ + TMacro macro(_curMacro); + TString strline=macro.GetLineWith(from)->GetString(); + strline.ReplaceAll(from,to); + macro.GetLineWith(from)->SetString(strline); + macro.SaveSource(_curMacro); + } + + void HipoROOTOut::CompileAction(){ + PreCompileAction(); + TMacro macro(_curMacro); + macro.Print(); + + auto result=gROOT->LoadMacro(Form("%s++",_curMacro.Data())); + + gROOT->ProcessLine(Form("hiporoot::%s::Create();",_actionClassName.Data(),_actionClassName.Data())); + } + + void HipoROOTOut::CleanAction(){ + _iHipoFile=0; + if(_curMacro!=TString("")){ + _curMacro=""; + _Nactions=0; + } + } + + + //////////////////////////////////////////////////////////////// + ///String parsing + TString HipoROOTOut::ExpandExpression(TString varExp0,TString seperator){ + varExp0.ReplaceAll(" ",""); + varExp0.ReplaceAll("::","@@"); + varExp0.ReplaceAll("()","{}"); + varExp0=AddParenthesis(varExp0); + + auto exps = varExp0.Tokenize(":"); + auto Nexp = exps->GetEntries(); + TString varExp1; + for(Int_t i=0;i0) varExp1+=seperator; + TString exp = exps->At(i)->GetName(); + varExp1+=ExpandParenthesis(exp,seperator); + } + delete exps; + varExp1.ReplaceAll("@@","::"); + varExp1.ReplaceAll("{}","()"); + cout<<"DONE TString HipoROOTOut::ExpandExpersion "<GetEntries(); + if(Npl){ + Int_t ns=0; + if(exp[0]=='#') varExp1+=symbols[ns++];//e.g. negative + + for(Int_t ipl=0;iplGetEntries();ipl++){ + if(ipl>0)varExp1+=symbols[ns++]; + varExp1+=ExpandPart(plusses->At(ipl)->GetName()); + } + } + + // else varExp1+=ExpandPart(exp); + delete plusses; + + return varExp1; + } + ///////////////////NEED TO FIX FOR FTOF1B.Path<700 conditions + TString HipoROOTOut::ExpandPart(TString exp){ + // cout<<" :ExpandPart "<GetEntries()!=2) return exp; + TString part= parts->At(0)->GetName(); + exp=Form("%sget%s()",_mapOfParts[part].Data(),parts->At(1)->GetName()); + delete parts; + return exp; + } + + vector HipoROOTOut::RemoveArithmetic(TString& expr){ + vector symbols; + + const vector operators1={'+','-','/','*','>','<','!'}; + const vector operators2={"==","!=",">=","<=","&&","||"}; + for(Int_t i=0;i0){ + ia--; + alpha=varExp0[ia]; + } + if(ia!=i-1){ + // if(ia==i-2)ileft=ia+1; +ileft=ia+1; // else ileft=ia; + if(ileft-1>=0) + if(varExp0[ileft-1]=='(') //check if already got ) + iright=0; + } + + if(iright!=i+1&&iright!=0){ + if(ileft==1) ileft=0; + TString expr=varExp0(ileft,iright-ileft); + varExp1.ReplaceAll(expr.Data(),Form("(%s)",expr.Data())); + i++; + } + } + } + return varExp1; + + } + + +} diff --git a/RunRoot/hiporoot/HipoROOTOut.h b/RunRoot/hiporoot/HipoROOTOut.h new file mode 100644 index 0000000..7bd3be2 --- /dev/null +++ b/RunRoot/hiporoot/HipoROOTOut.h @@ -0,0 +1,64 @@ +#pragma once + + +#include "region_particle.h" +#include +#include +#include + + +namespace hiporoot { + + class HipoROOTOut { + + + public : + HipoROOTOut(TString filename); + virtual ~HipoROOTOut(); + + void AddAction(TString varExp,TString condExp="1"); + void CompileAction(); + void CleanAction(); + void ReplaceMacroText(TString from,TString to); + // virtual TString ExpandVars(TString varExp0,TString seperator){return varExp0;}; + virtual TString ExpandExpression(TString varExp0,TString seperator); + virtual void Loop()=0; + virtual void PreCompileAction(){}; + + // virtual Double_t Action()=0; + virtual Bool_t Condition(){return kTRUE;} + + TString HipoFileName(){return _hipoFileName;} + TString NextFile(); + Bool_t IsMoreFiles(); + TChain* GetChain(){return &_chain;} + + + TString ExpandVars(TString varExp0,TString seperator); + TString ExpandPart(TString exp); + TString ExpandParenthesis(TString varExp0,TString seperator); + TString AddParenthesis(TString varExp0); + vector RemoveArithmetic(TString& expr); + + + protected : + + TString _tempActionName; + TString _actionClassName; + std::map _mapOfParts; + + TString GetCurrMacroName(){return _curMacro;} + Int_t GetNActions(){return _Nactions;} + private : + + TString _hipoFileName; + TString _curMacro; + TString _tempDir="~/.hiporoot"; + Int_t _Nactions=0; + Int_t _Nruns=0; + TChain _chain; + Int_t _iHipoFile=0; + + };//class HipoROOTOut + +} diff --git a/RunRoot/hiporoot/HipoRootAction.C b/RunRoot/hiporoot/HipoRootAction.C new file mode 100644 index 0000000..188b6d1 --- /dev/null +++ b/RunRoot/hiporoot/HipoRootAction.C @@ -0,0 +1,5 @@ +#include "HipoRootAction.h" + + +std::unique_ptr hiporoot::gHipoRootAction; + diff --git a/RunRoot/hiporoot/HipoRootAction.h b/RunRoot/hiporoot/HipoRootAction.h new file mode 100644 index 0000000..86fefb1 --- /dev/null +++ b/RunRoot/hiporoot/HipoRootAction.h @@ -0,0 +1,30 @@ +#pragma once + +#include "HipoROOTOut.h" +#include +#include + +namespace hiporoot{ + + class HipoRootAction { + + public : + virtual ~HipoRootAction()=default; + + virtual void Action(hiporoot::HipoROOTOut *hiprout) = 0; + + template static void Create(); + + private: + + }; + R__EXTERN std::unique_ptr gHipoRootAction; + + + template void HipoRootAction::Create() + { + gHipoRootAction.reset(new T()); + } + + +} diff --git a/RunRoot/hiporoot/HipoSelector.C b/RunRoot/hiporoot/HipoSelector.C new file mode 100644 index 0000000..257999d --- /dev/null +++ b/RunRoot/hiporoot/HipoSelector.C @@ -0,0 +1,142 @@ +#define HipoSelector_cxx +// The class definition in HipoSelector.h has been generated automatically +// by the ROOT utility TTree::MakeSelector(). This class is derived +// from the ROOT class TSelector. For more information on the TSelector +// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. + + +// The following methods are defined in this file: +// Begin(): called every time a loop on the tree starts, +// a convenient place to create your histograms. +// SlaveBegin(): called after Begin(), when on PROOF called only on the +// slave servers. +// Process(): called for each event, in this function you decide what +// to read and fill your histograms. +// SlaveTerminate: called at the end of the loop on the tree, when on PROOF +// called only on the slave servers. +// Terminate(): called at the end of the loop on the tree, +// a convenient place to draw/fit your histograms. +// + + +#include "HipoSelector.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace hiporoot{ + + HipoSelector::HipoSelector(TTree * ){ + + } + HipoSelector::HipoSelector(TString filename) : _chain(new HipoChain()) { + _chain->Add(filename); + } + HipoSelector::HipoSelector(HipoChain* chain) : _chain(chain) { + + } + + // void HipoSelector::Run(){ + + // } + + void HipoSelector::Begin(TTree * /*tree*/) + { + // The Begin() function is called at the start of the query. + // When running with PROOF Begin() is only called on the client. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + + + if(!fInput){ + fInput=new TList(); + // fInput->SetOwner(kTRUE); + } + + if(!_chain){ + cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ + cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves + } + + void HipoSelector::SlaveBegin(TTree * /*tree*/) + { + // The SlaveBegin() function is called after the Begin() function. + // When running with PROOF SlaveBegin() is called on each slave server. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); + + _hist1=new TH1F("Time","Time",600,-100,500); + fOutput->Add(_hist1); + } + + Bool_t HipoSelector::Process(Long64_t entry) + { + gSystem->Sleep(gRandom->Uniform()*100+0.05); + //check if need new file + _iRecord=entry-_NfileRecords; //get record to analyse,subtract records of previous files + if( _iRecord>=_NcurrRecords ){ + _iFile=_chain->GetFileFromRecord(entry); + cout<<"Start New file "<GetRecordsToHere(_iFile); //Add records from previous file to give offset + + _c12.reset(new clas12::clas12reader(_chain->GetFileName(_iFile).Data())); + _NcurrRecords= _c12->getReader().getNRecords(); //records in this file + _iRecord=entry-_NfileRecords; //get first record in this file to process + cout<<"Stop New file "<Exec(Form("vmtouch -vt %s",_chain->GetFileName(_iFile).Data())); + + } + + _c12->getReader().loadRecord(_iRecord); + while(_c12->nextInRecord()==true){ + ProcessEvent(); + } + + //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); + return kTRUE; + + } + + void HipoSelector::SlaveTerminate() + { + // The SlaveTerminate() function is called after all entries or objects + // have been processed. When running with PROOF SlaveTerminate() is called + // on each slave server. + + } + + void HipoSelector::Terminate() + { + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); + _hist1 = dynamic_cast(fOutput->FindObject("Time")); + if (_hist1) _hist1->Draw(); + c1->Update(); + } + + +} diff --git a/RunRoot/hiporoot/HipoSelector.h b/RunRoot/hiporoot/HipoSelector.h new file mode 100644 index 0000000..6928d02 --- /dev/null +++ b/RunRoot/hiporoot/HipoSelector.h @@ -0,0 +1,65 @@ +#ifndef HipoSelector_h +#define HipoSelector_h + +#include +#include +#include +#include + +#include +#include +#include + +// Headers needed by this particular selector +#include "HipoChain.h" +#include "clas12reader.h" + +namespace hiporoot{ + + + class HipoSelector : public TSelector { + public : + + + HipoSelector(TString filename) ; + HipoSelector(HipoChain *chain) ; + HipoSelector(TTree * /*tree*/ =0); + virtual ~HipoSelector() { } + virtual Int_t Version() const { return 2; } + virtual void Begin(TTree *tree); + virtual void SlaveBegin(TTree *tree); + // virtual void Init(TTree *tree); + //virtual Bool_t Notify(); + virtual Bool_t Process(Long64_t entry); + //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } + + Bool_t ProcessEvent(); + + virtual void SetOption(const char *option) { fOption = option; } + virtual void SetObject(TObject *obj) { fObject = obj; } + virtual void SetInputList(TList *input) { fInput = input; } + virtual TList *GetOutputList() const { return fOutput; } + virtual void SlaveTerminate(); + virtual void Terminate(); + + + + private: + + std::unique_ptr _c12; + HipoChain* _chain=nullptr; + + Int_t _NcurrRecords=0; + Int_t _iRecord=0; + Int_t _iFile=0; + Long64_t _NfileRecords=0; + + TH1F* _hist1=nullptr; + + ClassDef(hiporoot::HipoSelector,0); + + }; +} + + +#endif // #ifdef HipoSelector_cxx diff --git a/RunRoot/hiporoot/HipoTreeMaker.C b/RunRoot/hiporoot/HipoTreeMaker.C new file mode 100644 index 0000000..fdb535d --- /dev/null +++ b/RunRoot/hiporoot/HipoTreeMaker.C @@ -0,0 +1,56 @@ +#include "HipoTreeMaker.h" +#include + +namespace hiporoot { + + HipoTreeMaker::HipoTreeMaker(TString filename, TString treefilename): HipoROOTOut(filename){ + + _treefile=new TFile(treefilename,"recreate"); + _tree =new TTree("hipotree","tree converted from hipo data"); + _tree->SetDirectory(_treefile); + } + HipoTreeMaker::~HipoTreeMaker(){ + } + void HipoTreeMaker::AddParticleCut(TString cut){ + if(_pcut==TString("1")) + _pcut=TString(); + _pcut+=ExpandExpression(cut,""); + } + void HipoTreeMaker::AddEventCut(TString cut){ + if(_evcut==TString("0")) + _evcut=TString(); + _evcut+=ExpandExpression(cut,""); + } + + HipoTreeMaker* HipoTreeMaker::Branch(TString varExp,TString condExp){ + + TString branchType=varExp; + branchType.Remove(0,branchType.Sizeof()-3); //keep /F etc + varExp.Remove(varExp.Sizeof()-3,2); //remove /F etc + + _branchNames.push_back(varExp); + _branchTypes.push_back(branchType); + + varExp=ExpandExpression(varExp,""); + AddAction(varExp); + + return this; + } + void HipoTreeMaker::Fill(){ + gBenchmark->Reset(); + gBenchmark->Start("compile time"); + CompileAction(); + gBenchmark->Stop("compile time"); + gBenchmark->Print("compile time"); + gBenchmark->Start("loop time"); + Loop(); + gBenchmark->Stop("loop time"); + gBenchmark->Print("loop time"); + CleanAction(); + _tree->Write(); + delete _treefile; + + } + + +} diff --git a/RunRoot/hiporoot/HipoTreeMaker.h b/RunRoot/hiporoot/HipoTreeMaker.h new file mode 100644 index 0000000..ebc2d53 --- /dev/null +++ b/RunRoot/hiporoot/HipoTreeMaker.h @@ -0,0 +1,41 @@ +#pragma once + + +#include "HipoROOTOut.h" +#include +#include + +namespace hiporoot { + + + class HipoTreeMaker : public HipoROOTOut { + + + public : + HipoTreeMaker(TString filename, TString treefilename); + virtual ~HipoTreeMaker(); + + + + virtual HipoTreeMaker* Branch(TString varExp,TString condExp="1"); + + + TTree* Tree() const {return _tree;} + + void Fill(); + void AddParticleCut(TString cut); + void AddEventCut(TString cut); + + protected : + + vector _branchNames; + vector _branchTypes; + TString _evcut={"0"}; + TString _pcut={"1"}; + + private : + + TFile* _treefile=nullptr; + TTree* _tree=nullptr; + }; +} diff --git a/RunRoot/hiporoot/LoadHipoROOT.C b/RunRoot/hiporoot/LoadHipoROOT.C new file mode 100644 index 0000000..b3c6ef4 --- /dev/null +++ b/RunRoot/hiporoot/LoadHipoROOT.C @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +namespace hiporoot{} +using namespace hiporoot; + +void LoadHipoROOT(){ + + + gROOT->LoadMacro("$CLAS12TOOL/RunRoot/importToROOT.C"); + + TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/RunRoot/hiporoot/"; + gSystem->AddIncludePath(TString("-I")+HIPOROOT); + + + gROOT->LoadMacro(HIPOROOT+"HipoROOTOut.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoRootAction.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoHist.C+"); + gROOT->LoadMacro(HIPOROOT+"ParticleHist.C+"); + gROOT->LoadMacro(HIPOROOT+"BankHist.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoTreeMaker.C+"); + gROOT->LoadMacro(HIPOROOT+"ParticleTree.C+"); + + + +} diff --git a/RunRoot/hiporoot/ParticleHist.C b/RunRoot/hiporoot/ParticleHist.C new file mode 100644 index 0000000..1bbc377 --- /dev/null +++ b/RunRoot/hiporoot/ParticleHist.C @@ -0,0 +1,55 @@ +#include "ParticleHist.h" +#include "HipoRootAction.h" +#include "clas12reader.h" +#include + +namespace hiporoot { + + ParticleHist::ParticleHist(TString filename): HipoHist(filename){ + _tempActionName="ParticleHistAction"; + + //Calorimters + _mapOfParts["ECIN"]="p->cal(ECIN)->"; + _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; + _mapOfParts["PCAL"]="p->cal(PCAL)->"; + + //Scintillators + _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; + _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; + _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; + _mapOfParts["CTOF"]="p->sci(CTOF)->"; + _mapOfParts["CND1"]="p->sci(CND1)->"; + _mapOfParts["CND2"]="p->sci(CND2)->"; + _mapOfParts["CND3"]="p->sci(CND3)->"; + + //FT + _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; + _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; + + //Cherenkov + _mapOfParts["HTCC"]="p->ft(HTCC)->"; + _mapOfParts["LTCC"]="p->ft(LTCC)->"; + + //Trackers + _mapOfParts["DC"]="p->trk(DC)->"; + _mapOfParts["CVT"]="p->trk(CVT)->"; + + //Particles + _mapOfParts["PBANK"]="p->par()->"; + + //Particle Region + _mapOfParts["P"]="p->"; + + //EVENT + _mapOfParts["EVNT"]="c12.head()->"; + + } + ParticleHist::~ParticleHist(){ + } + void ParticleHist::Loop(){ + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + } + +} diff --git a/RunRoot/hiporoot/ParticleHist.h b/RunRoot/hiporoot/ParticleHist.h new file mode 100644 index 0000000..918a74f --- /dev/null +++ b/RunRoot/hiporoot/ParticleHist.h @@ -0,0 +1,33 @@ +#pragma once + + +#include "HipoHist.h" +#include "clas12reader.h" +#include + +namespace hiporoot { + + + class ParticleHist : public HipoHist { + + + public : + ParticleHist(TString filename); + virtual ~ParticleHist(); + + + void Loop() final; + + + using c12_uptr = std::unique_ptr; + + c12_uptr clas12(){ + return std::move(c12_uptr + (new clas12::clas12reader(HipoFileName().Data()))); + } + + private : + + + }; +} diff --git a/RunRoot/hiporoot/ParticleHistAction.C b/RunRoot/hiporoot/ParticleHistAction.C new file mode 100644 index 0000000..611bde1 --- /dev/null +++ b/RunRoot/hiporoot/ParticleHistAction.C @@ -0,0 +1,8 @@ +#include "ParticleHist.h" +#include "clas12defs.h" +using namespace clas12; + +Double_t hiporoot::ParticleHist::Action(){ + ////_curHist[IIII]->Fill(_p->XXXX); + return 0; +} diff --git a/RunRoot/hiporoot/ParticleTree.C b/RunRoot/hiporoot/ParticleTree.C new file mode 100644 index 0000000..ff033cd --- /dev/null +++ b/RunRoot/hiporoot/ParticleTree.C @@ -0,0 +1,96 @@ +#include "ParticleTree.h" +#include "HipoRootAction.h" +#include "clas12reader.h" +#include +#include + +namespace hiporoot { + + ParticleTree::ParticleTree(TString filename, TString treefilename): HipoTreeMaker{filename,treefilename}{ + _tempActionName="ParticleTreeAction"; + + //Calorimters + _mapOfParts["ECIN"]="p->cal(ECIN)->"; + _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; + _mapOfParts["PCAL"]="p->cal(PCAL)->"; + + //Scintillators + _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; + _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; + _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; + _mapOfParts["CTOF"]="p->sci(CTOF)->"; + _mapOfParts["CND1"]="p->sci(CND1)->"; + _mapOfParts["CND2"]="p->sci(CND2)->"; + _mapOfParts["CND3"]="p->sci(CND3)->"; + + //FT + _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; + _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; + + //Cherenkov + _mapOfParts["HTCC"]="p->ft(HTCC)->"; + _mapOfParts["LTCC"]="p->ft(LTCC)->"; + + //Trackers + _mapOfParts["DC"]="p->trk(DC)->"; + _mapOfParts["CVT"]="p->trk(CVT)->"; + + //Particles + _mapOfParts["PBANK"]="p->par()->"; + + //Particle Region + _mapOfParts["P"]="p->"; + + //EVENT + _mapOfParts["EVNT"]="c12.head()->"; + + } + ParticleTree::~ParticleTree(){ + } + void ParticleTree::Loop(){ + + + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + } + + void ParticleTree::PreCompileAction(){ + std::map typelabel; + typelabel["/D"]="Double_t"; + typelabel["/F"]="Float_t"; + typelabel["/I"]="Int_t"; + typelabel["/L"]="Long64_t"; + typelabel["/S"]="Short_t"; + + TMacro macro(GetCurrMacroName()); + + TList *lines=macro.GetListOfLines(); + TObject* obj=macro.GetLineWith("class clas12data"); + Int_t place =lines->IndexOf(obj)+2; + + for(UInt_t i=0;i<_branchNames.size();i++){ + TString type=typelabel[_branchTypes[i]]; + TString bname=_branchNames[i]; + bname.ReplaceAll(".","_"); + TString strline=TString(" ")+type + " "+bname+";"; + lines->AddAt(new TObjString(strline.Data()),place++); + + TString strvar=Form("VVVV%d",i); + TString vvvvline=macro.GetLineWith(strvar)->GetString(); + vvvvline.ReplaceAll(strvar,bname); + macro.GetLineWith(strvar)->SetString(vvvvline); + } + TString strvar{"if(PCCCC)_treedata"}; + TString ccccline=macro.GetLineWith(strvar)->GetString(); + ccccline.ReplaceAll("PCCCC",_pcut); + macro.GetLineWith(strvar)->SetString(ccccline); + + strvar="if(ECCCC)"; + ccccline=macro.GetLineWith(strvar)->GetString(); + ccccline.ReplaceAll("ECCCC",_evcut); + macro.GetLineWith(strvar)->SetString(ccccline); + + macro.SaveSource(GetCurrMacroName()); + } +} diff --git a/RunRoot/hiporoot/ParticleTree.h b/RunRoot/hiporoot/ParticleTree.h new file mode 100644 index 0000000..0274d06 --- /dev/null +++ b/RunRoot/hiporoot/ParticleTree.h @@ -0,0 +1,34 @@ +#pragma once + + +#include "HipoTreeMaker.h" +#include "clas12reader.h" +#include + +namespace hiporoot { + + + class ParticleTree : public HipoTreeMaker { + + + public : + ParticleTree(TString filename, TString treefilename); + virtual ~ParticleTree(); + + + void Loop() final; + void PreCompileAction() final; + + + using c12_uptr = std::unique_ptr; + + c12_uptr clas12(){ + return std::move(c12_uptr + (new clas12::clas12reader(HipoFileName().Data()))); + } + + private : + + + }; +} diff --git a/RunRoot/hiporoot/hipotree.C b/RunRoot/hiporoot/hipotree.C new file mode 100644 index 0000000..861fa3c --- /dev/null +++ b/RunRoot/hiporoot/hipotree.C @@ -0,0 +1,43 @@ +#define hipotree_cxx +#include "hipotree.h" +#include +#include +#include + +void hipotree::Loop() +{ +// In a ROOT session, you can do: +// root> .L hipotree.C +// root> hipotree t +// root> t.GetEntry(12); // Fill t data members with entry number 12 +// root> t.Show(); // Show values of entry 12 +// root> t.Show(16); // Read and show values of entry 16 +// root> t.Loop(); // Loop on all entries +// + +// This is the loop skeleton where: +// jentry is the global entry number in the chain +// ientry is the entry number in the current Tree +// Note that the argument to GetEntry must be: +// jentry for TChain::GetEntry +// ientry for TTree::GetEntry and TBranch::GetEntry +// +// To read only selected branches, Insert statements like: +// METHOD1: +// fChain->SetBranchStatus("*",0); // disable all branches +// fChain->SetBranchStatus("branchname",1); // activate branchname +// METHOD2: replace line +// fChain->GetEntry(jentry); //read all branches +//by b_branchname->GetEntry(ientry); //read only this branch + if (fChain == 0) return; + + Long64_t nentries = fChain->GetEntriesFast(); + + Long64_t nbytes = 0, nb = 0; + for (Long64_t jentry=0; jentryGetEntry(jentry); nbytes += nb; + // if (Cut(ientry) < 0) continue; + } +} diff --git a/RunRoot/hiporoot/hipotree.h b/RunRoot/hiporoot/hipotree.h new file mode 100644 index 0000000..ce01905 --- /dev/null +++ b/RunRoot/hiporoot/hipotree.h @@ -0,0 +1,130 @@ +////////////////////////////////////////////////////////// +// This class has been automatically generated on +// Mon Mar 4 20:05:46 2019 by ROOT version 6.14/04 +// from TTree hipotree/tree converted from hipo data +// found on file: test.root +////////////////////////////////////////////////////////// + +#ifndef hipotree_h +#define hipotree_h + +#include +#include +#include + +// Header file for the classes stored in the TTree if any. + +class hipotree { +public : + TTree *fChain; //!pointer to the analyzed TTree or TChain + Int_t fCurrent; //!current Tree number in a TChain + +// Fixed size dimensions of array or collections stored in the TTree if any. + + // Declaration of leaf types + //hiporoot::clas12data *CLAS12Data; + Float_t P_Time; + + // List of branches + TBranch *b_CLAS12Data_P_Time; //! + + hipotree(TTree *tree=0); + virtual ~hipotree(); + virtual Int_t Cut(Long64_t entry); + virtual Int_t GetEntry(Long64_t entry); + virtual Long64_t LoadTree(Long64_t entry); + virtual void Init(TTree *tree); + virtual void Loop(); + virtual Bool_t Notify(); + virtual void Show(Long64_t entry = -1); +}; + +#endif + +#ifdef hipotree_cxx +hipotree::hipotree(TTree *tree) : fChain(0) +{ +// if parameter tree is not specified (or zero), connect the file +// used to generate this class and read the Tree. + if (tree == 0) { + TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("test.root"); + if (!f || !f->IsOpen()) { + f = new TFile("test.root"); + } + f->GetObject("hipotree",tree); + + } + Init(tree); +} + +hipotree::~hipotree() +{ + if (!fChain) return; + delete fChain->GetCurrentFile(); +} + +Int_t hipotree::GetEntry(Long64_t entry) +{ +// Read contents of entry. + if (!fChain) return 0; + return fChain->GetEntry(entry); +} +Long64_t hipotree::LoadTree(Long64_t entry) +{ +// Set the environment to read one entry + if (!fChain) return -5; + Long64_t centry = fChain->LoadTree(entry); + if (centry < 0) return centry; + if (fChain->GetTreeNumber() != fCurrent) { + fCurrent = fChain->GetTreeNumber(); + Notify(); + } + return centry; +} + +void hipotree::Init(TTree *tree) +{ + // The Init() function is called when the selector needs to initialize + // a new tree or chain. Typically here the branch addresses and branch + // pointers of the tree will be set. + // It is normally not necessary to make changes to the generated + // code, but the routine can be extended by the user if needed. + // Init() will be called many times when running on PROOF + // (once per file to be processed). + + // Set branch addresses and branch pointers + if (!tree) return; + fChain = tree; + fCurrent = -1; + fChain->SetMakeClass(1); + + fChain->SetBranchAddress("P_Time", &P_Time, &b_CLAS12Data_P_Time); + Notify(); +} + +Bool_t hipotree::Notify() +{ + // The Notify() function is called when a new file is opened. This + // can be either for a new TTree in a TChain or when when a new TTree + // is started when using PROOF. It is normally not necessary to make changes + // to the generated code, but the routine can be extended by the + // user if needed. The return value is currently not used. + + return kTRUE; +} + +void hipotree::Show(Long64_t entry) +{ +// Print contents of entry. +// If entry is not specified, print current entry + if (!fChain) return; + fChain->Show(entry); +} +Int_t hipotree::Cut(Long64_t entry) +{ +// This function may be called from Loop. +// returns 1 if entry is accepted. +// returns -1 otherwise. + return 1; +} +#endif // #ifdef hipotree_cxx diff --git a/RunRoot/hiporoot/templateBankHistAction.C b/RunRoot/hiporoot/templateBankHistAction.C new file mode 100644 index 0000000..5b1e066 --- /dev/null +++ b/RunRoot/hiporoot/templateBankHistAction.C @@ -0,0 +1,45 @@ + +#include "HipoRootAction.h" +#include "BankHist.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace hiporoot{ + using namespace clas12; + + class NNNNN : public HipoRootAction{ + + void Action(hiporoot::HipoROOTOut *hiprout) final{ + auto bhist=dynamic_cast(hiprout); + + auto hists=bhist->Hists(); + + hipo::reader reader; + reader.open(bhist->NextFile().Data()); + + hipo::dictionary factory; + reader.readDictionary(factory); + + clas12::BBBB bank(factory.getSchema(bhist->GetBankName().Data())); + hipo::event event; + while(reader.next()==true){ + reader.read(event); //read event + event.getStructure(bank); //get particle data + + int nrows = bank.getRows(); + for(int i = 0; i < nrows; i++){ + bank.setEntry(i); + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + + } + } + } + + + }; +} diff --git a/RunRoot/hiporoot/templateParticleHistAction.C b/RunRoot/hiporoot/templateParticleHistAction.C new file mode 100644 index 0000000..8524515 --- /dev/null +++ b/RunRoot/hiporoot/templateParticleHistAction.C @@ -0,0 +1,33 @@ + +#include "HipoRootAction.h" +#include "ParticleHist.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace hiporoot{ + using namespace clas12; + + class NNNNN : public HipoRootAction{ + + void Action(hiporoot::HipoROOTOut *hiprout) final{ + auto phist=dynamic_cast(hiprout); + + auto hists=phist->Hists(); + clas12::clas12reader c12(phist->NextFile().Data()); + std::vector* particles=c12.getDetParticlesPtr(); + + while(c12.next()==true){ + for(auto& p : *particles){ + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + } + } + } + + + }; +} diff --git a/RunRoot/hiporoot/templateParticleTreeAction.C b/RunRoot/hiporoot/templateParticleTreeAction.C new file mode 100644 index 0000000..53e2ca0 --- /dev/null +++ b/RunRoot/hiporoot/templateParticleTreeAction.C @@ -0,0 +1,57 @@ + +#include "HipoRootAction.h" +#include "ParticleTree.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace hiporoot{ + using namespace clas12; + + class clas12data { + public: + + + ClassDef(clas12data,1); + }; + + class NNNNN : public HipoRootAction{ + + private : + std::vector *_treedata=nullptr; + + public: + + void Action(hiporoot::HipoROOTOut *hiprout) final{ + auto ptree=dynamic_cast(hiprout); + + auto tree=ptree->Tree(); + if(!tree->GetBranch("CLAS12Data")){ + _treedata=new std::vector; + tree->Branch("CLAS12Data",&_treedata); + } + clas12::clas12reader c12(ptree->NextFile().Data()); + std::vector* particles=c12.getDetParticlesPtr(); + + clas12data particleData; + while(c12.next()==true){ + if(ECCCC) continue; + + for(auto& p : *particles){ + ////particleData.VVVVIIII = XXXX; + + if(PCCCC)_treedata->push_back(particleData); + } + if(_treedata->size()) tree->Fill(); + _treedata->clear(); + } + } + + }; + + +} diff --git a/RunRoot/importToROOT.C b/RunRoot/importToROOT.C index b2cbd9f..0ecdc86 100644 --- a/RunRoot/importToROOT.C +++ b/RunRoot/importToROOT.C @@ -40,6 +40,7 @@ gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/traj.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+"); @@ -48,7 +49,7 @@ gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+"); gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+"); - gROOT->LoadMacro("$CLAS12TOOL/Banks/hallB_event.cpp+"); + gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12reader.cpp+"); } diff --git a/RunRoot/jupy/CLAS12Reader3Pi.C b/RunRoot/jupy/CLAS12Reader3Pi.C new file mode 100644 index 0000000..717b449 --- /dev/null +++ b/RunRoot/jupy/CLAS12Reader3Pi.C @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12reader.h" + +using namespace clas12; + +//just make the code a bit neater when using shared_ptr +using P4_t=TLorentzVector; +using p4_ptr = std::shared_ptr; + +void SetLorentzVector(p4_ptr p4,clas12::region_part_ptr rp){ + p4->SetXYZM(rp->par()->getPx(),rp->par()->getPy(), + rp->par()->getPz(),p4->M()); +} + +void CLAS12Reader3Pi(TString filename){ + + //some particles + auto db=TDatabasePDG::Instance(); + auto beam=P4_t(0,0,10.6,10.6); + auto target=P4_t(0,0,0,db->GetParticle(2212)->Mass()); + //remember these are really just TLorentzVector* + //but std::shared_ptr makes sure they are delted at end of scope + + p4_ptr el{new P4_t(0,0,0,db->GetParticle(11)->Mass())}; + p4_ptr pr{new P4_t(0,0,0,db->GetParticle(2212)->Mass())}; + p4_ptr g1{new P4_t(0,0,0,0)}; + p4_ptr g2{new P4_t(0,0,0,0)}; + p4_ptr pip{new P4_t(0,0,0,db->GetParticle(211)->Mass())}; + p4_ptr pim{new P4_t(0,0,0,db->GetParticle(-211)->Mass())}; + + //a histogram (pre C++11 !) + auto* hmiss=new TH1F("missM","missM",100,-2,3); + auto* hmissCalCut=new TH1F("missM","missM",100,-2,3); + auto* hm2g=new TH1F("m2g","Mass(2#gamma)",100,0,0.6); + auto* hm2gCut=new TH1F("m2gCut","Mass(2#gamma) cut on Exclusivity",100,0,0.6); + auto* hm2gCalCut=new TH1F("m2gCalCut","Mass(2#gamma) cut on FCAL",100,0,0.6); + + gBenchmark->Start("timer"); + clas12reader event(filename.Data()); + + while(event.next()==true){ + // get particles by type + auto electrons=event.getByID(11); + auto gammas=event.getByID(22); + auto protons=event.getByID(2212); + auto pips=event.getByID(211); + auto pims=event.getByID(-211); + + if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && + pips.size()==1 &&pims.size() == 1){ + + // set the particle momentum + // i.e. auto el = electrons[0]->p4(); etc. + SetLorentzVector(el,electrons[0]); + SetLorentzVector(pr,protons[0]); + SetLorentzVector(g1,gammas[0]); + SetLorentzVector(g2,gammas[1]); + SetLorentzVector(pip,pips[0]); + SetLorentzVector(pim,pims[0]); + //calculate missing particle 4-vector + TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; + hmiss->Fill(miss.M2()); //fill hist + //calculate pi0 4-vector + TLorentzVector pi0 = *g1+*g2; + hm2g->Fill(pi0.M()); //fill hist + //Apply cut on missing mass squared + if(TMath::Abs(miss.M2())<0.5)hm2gCut->Fill(pi0.M());//fill hist + + //if(gammas[0]->cal(PCAL)->getEnergy()&&gammas[0]->cal(ECIN)->getEnergy()&& + // gammas[1]->cal(PCAL)->getEnergy()&&gammas[1]->cal(ECIN)->getEnergy()) + if(gammas[0]->cal(PCAL)->getEnergy()&& + gammas[1]->cal(PCAL)->getEnergy()){ + hmissCalCut->Fill(miss.M2()); //fill hist + hm2gCalCut->Fill(pi0.M());//fill hist + } + } + + } + + gBenchmark->Stop("timer"); + gBenchmark->Print("timer"); + + //make canvas (required in notebook) + TCanvas* can=new TCanvas(); + can->Divide(2,1); + can->cd(1); + hmiss->DrawCopy(); + hmissCalCut->SetLineColor(2); + hmissCalCut->DrawCopy("same"); + can->cd(2); + hm2g->DrawCopy(); + hm2gCut->SetLineColor(3); + hm2gCut->DrawCopy("same"); + hm2gCalCut->SetLineColor(2); + hm2gCalCut->DrawCopy("same"); + + can->Draw(); +} \ No newline at end of file diff --git a/RunRoot/jupy/CLAS12Reader3Pi.ipynb b/RunRoot/jupy/CLAS12Reader3Pi.ipynb new file mode 100644 index 0000000..e077672 --- /dev/null +++ b/RunRoot/jupy/CLAS12Reader3Pi.ipynb @@ -0,0 +1,181 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# General loop over events and particles" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/hiporoot/LoadHipoROOT.C\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can just use the notebook as an editor and change our script if we like.\n", + "\n", + "Open the ROOT script CLAS12Reader3Pi.C" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%file CLAS12Reader3Pi.C\n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \n", + "#include \"clas12reader.h\"\n", + "\n", + "using namespace clas12;\n", + "\n", + "//just make the code a bit neater when using shared_ptr\n", + "using P4_t=TLorentzVector;\n", + "using p4_ptr = std::shared_ptr;\n", + "\n", + "void SetLorentzVector(p4_ptr p4,clas12::region_part_ptr rp){\n", + " p4->SetXYZM(rp->par()->getPx(),rp->par()->getPy(),\n", + " rp->par()->getPz(),p4->M());\n", + "}\n", + "\n", + "void CLAS12Reader3Pi(TString filename){\n", + "\n", + " //some particles\n", + " auto db=TDatabasePDG::Instance();\n", + " auto beam=P4_t(0,0,10.6,10.6);\n", + " auto target=P4_t(0,0,0,db->GetParticle(2212)->Mass());\n", + " //remember these are really just TLorentzVector*\n", + " //but std::shared_ptr makes sure they are delted at end of scope\n", + " \n", + " p4_ptr el{new P4_t(0,0,0,db->GetParticle(11)->Mass())};\n", + " p4_ptr pr{new P4_t(0,0,0,db->GetParticle(2212)->Mass())};\n", + " p4_ptr g1{new P4_t(0,0,0,0)};\n", + " p4_ptr g2{new P4_t(0,0,0,0)};\n", + " p4_ptr pip{new P4_t(0,0,0,db->GetParticle(211)->Mass())};\n", + " p4_ptr pim{new P4_t(0,0,0,db->GetParticle(-211)->Mass())};\n", + "\n", + " //a histogram (pre C++11 !)\n", + " auto* hmiss=new TH1F(\"missM\",\"missM\",100,-2,3);\n", + " auto* hmissCalCut=new TH1F(\"missM\",\"missM\",100,-2,3);\n", + " auto* hm2g=new TH1F(\"m2g\",\"Mass(2#gamma)\",100,0,0.6);\n", + " auto* hm2gCut=new TH1F(\"m2gCut\",\"Mass(2#gamma) cut on Exclusivity\",100,0,0.6);\n", + " auto* hm2gCalCut=new TH1F(\"m2gCalCut\",\"Mass(2#gamma) cut on FCAL\",100,0,0.6);\n", + "\n", + " gBenchmark->Start(\"timer\");\n", + " clas12reader event(filename.Data());\n", + "\n", + " while(event.next()==true){\n", + " // get particles by type\n", + " auto electrons=event.getByID(11);\n", + " auto gammas=event.getByID(22);\n", + " auto protons=event.getByID(2212);\n", + " auto pips=event.getByID(211);\n", + " auto pims=event.getByID(-211);\n", + "\n", + " if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 &&\n", + " pips.size()==1 &&pims.size() == 1){\n", + " \n", + " // set the particle momentum\n", + " // i.e. auto el = electrons[0]->p4(); etc.\n", + " SetLorentzVector(el,electrons[0]);\n", + " SetLorentzVector(pr,protons[0]);\n", + " SetLorentzVector(g1,gammas[0]);\n", + " SetLorentzVector(g2,gammas[1]);\n", + " SetLorentzVector(pip,pips[0]);\n", + " SetLorentzVector(pim,pims[0]);\n", + " //calculate missing particle 4-vector\n", + " TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim;\n", + " hmiss->Fill(miss.M2()); //fill hist\n", + " //calculate pi0 4-vector\n", + " TLorentzVector pi0 = *g1+*g2;\n", + " hm2g->Fill(pi0.M()); //fill hist\n", + " //Apply cut on missing mass squared\n", + " if(TMath::Abs(miss.M2())<0.5)hm2gCut->Fill(pi0.M());//fill hist\n", + " \n", + " //if(gammas[0]->cal(PCAL)->getEnergy()&&gammas[0]->cal(ECIN)->getEnergy()&&\n", + " // gammas[1]->cal(PCAL)->getEnergy()&&gammas[1]->cal(ECIN)->getEnergy())\n", + " if(gammas[0]->cal(PCAL)->getEnergy()&&\n", + " gammas[1]->cal(PCAL)->getEnergy()){\n", + " hmissCalCut->Fill(miss.M2()); //fill hist\n", + " hm2gCalCut->Fill(pi0.M());//fill hist\n", + " }\n", + " }\n", + " \n", + " }\n", + " \n", + " gBenchmark->Stop(\"timer\");\n", + " gBenchmark->Print(\"timer\");\n", + " \n", + " //make canvas (required in notebook)\n", + " TCanvas* can=new TCanvas();\n", + " can->Divide(2,1);\n", + " can->cd(1);\n", + " hmiss->DrawCopy();\n", + " hmissCalCut->SetLineColor(2);\n", + " hmissCalCut->DrawCopy(\"same\");\n", + " can->cd(2);\n", + " hm2g->DrawCopy();\n", + " hm2gCut->SetLineColor(3);\n", + " hm2gCut->DrawCopy(\"same\");\n", + " hm2gCalCut->SetLineColor(2);\n", + " hm2gCalCut->DrawCopy(\"same\");\n", + "\n", + " can->Draw();\n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%jsroot" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gROOT->ProcessLine(\".x CLAS12Reader3Pi.C+(\\\"/WHERE/IS/MY/HIPO/clas_004152.recon.hipo\\\")\");" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ROOT C++", + "language": "c++", + "name": "root" + }, + "language_info": { + "codemirror_mode": "text/x-c++src", + "file_extension": ".C", + "mimetype": " text/x-c++src", + "name": "c++" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RunRoot/Ex_PyNotebook.ipynb b/RunRoot/jupy/Ex_Python3.ipynb similarity index 63% rename from RunRoot/Ex_PyNotebook.ipynb rename to RunRoot/jupy/Ex_Python3.ipynb index 8519715..6e9d2b6 100644 --- a/RunRoot/Ex_PyNotebook.ipynb +++ b/RunRoot/jupy/Ex_Python3.ipynb @@ -24,7 +24,7 @@ "metadata": {}, "outputs": [], "source": [ - "ut = ROOT.hipo.utils;" + "c12 = ROOT.clas12.clas12reader(\"/home/dglazier/fastdata/hipo4test/filtered/clas_004152.recon.hipo\");" ] }, { @@ -33,7 +33,9 @@ "metadata": {}, "outputs": [], "source": [ - "ut.printLogo();" + "el=ROOT.TLorentzVector(0,0,1,1)\n", + "pr=ROOT.TLorentzVector(0,0,0,1)\n", + "ROOT.gBenchmark.Start(\"python\")" ] }, { @@ -42,8 +44,13 @@ "metadata": {}, "outputs": [], "source": [ - "reader=ROOT.hipo.reader()\n", - "reader.open(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\")" + "while c12.next() :\n", + " c12.head().getStartTime()\n", + " \n", + " electrons=c12.getByID(11)\n", + " if electrons.size()==1 :\n", + " el.SetXYZM(electrons[0].par().getPx(),electrons[0].par().getPy(),electrons[0].par().getPz(), 0.00051099891) \n", + " " ] }, { @@ -52,35 +59,16 @@ "metadata": {}, "outputs": [], "source": [ - " event=ROOT.clas12.hallB_event(reader)" + "ROOT.gBenchmark.Stop(\"python\")\n", + "ROOT.gBenchmark.Print(\"python\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "particles = event.getDetParticles();\n", - "while event.next() :\n", - " print(event.head().getStartTime())\n", - " print(particles[0].getPid())\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/RunRoot/jupy/HipoDraw.ipynb b/RunRoot/jupy/HipoDraw.ipynb new file mode 100644 index 0000000..ec62241 --- /dev/null +++ b/RunRoot/jupy/HipoDraw.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Drawing histograms with hiporoot::ParticleHist\n", + "\n", + "First load the classes into the notebook" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/hiporoot/LoadHipoROOT.C\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create the histogram maker with the full path to the hipo file you want to analyse" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "//ParticleHist hists(\"/WHERE/IS/MY/HIPO/clas_004152.recon.hipo\");\n", + "ParticleHist hists(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Turn on javascript ROOT for interacive histograms" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%jsroot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Draw some histograms. There are predefined aliases for DST bank detector layers :\n", + "\n", + " ECIN. , ECOUT. , PCAL. , FTOF1A. , FTOF1B. , FTOF2. , CTOF. , CND1. , CND2. , CND3. , FTCAL. , FTHODO. , HTCC. , LTCC. , DC. , CVT. \n", + " e.g. ECIN.Energy , HTCC.Nphe , DC.TrChi2 , CTOF.Time\n", + "\n", + "The REC::Particle bank should be directly accessed with \n", + "\n", + " PBANK.\n", + " e.g. PBANK.Pid , PBANK.Px\n", + " \n", + "The region particle should be accessed with \n", + "\n", + " P.\n", + " e.g. P.Theta , P.P , P.Phi , P.Region , P.Time , P.DetEnergy , P.DeltaEnergy , P.Path , P.Pid , P.CalcMass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Drawing hists 1\n", + "First draw a 1D histogram of the time difference between FTOF1A and FTOF1B\n", + "\n", + "Second, draw a 2D hist of the time difference versus the particle theta, with colour map.\n", + "\n", + "Plot the 2 histograms side-by-side (2x1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "hists.Hist1D(\"FTOF1B.Time-FTOF2.Time\",1000,-5,5,\"FTOF1B.Time-FTOF2.Time\");\n", + "hists.Hist2D(\"FTOF1B.Time-FTOF2.Time:P.Theta*TMath::RadToDeg()\",50,-5,5,50,0,40,\"FTOF1B.Time-FTOF2.Time\")->Draw(\"(2x1)col1\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Drawing hists 2\n", + "Now draw the $\\theta$ versus $\\phi$ distributions for different particle types" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==11\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==-11\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==22\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==2212\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==211\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==-211\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==321\");\n", + " hists.Hist2D(\"P.Theta*TMath::RadToDeg():P.Phi*TMath::RadToDeg()\",180,0,180,180,-180,180,\"P.Pid==-321\")->Draw(\"(4x2)col1\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Drawing hists 3\n", + "\n", + "The particle beta and measured mass can be returned from the region particle too. \n", + "Here we draw the beta and mass versus particle momentum for each of the 3 detector regions." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + " hists.Hist2D(\"P.P:P.Beta\",100,0,10,100,0.1,2,\"P.Beta&&P.Region==FT\");\n", + " hists.Hist2D(\"P.P:P.Beta\",100,0,10,100,0.1,2,\"P.Beta&&P.Region==FD\");\n", + " hists.Hist2D(\"P.P:P.Beta\",100,0,10,100,0.1,2,\"P.Beta&&P.Region==CD\");\n", + " hists.Hist2D(\"P.P:P.CalcMass\",100,0,10,100,-1,2,\"P.CalcMass&&P.Region==FT\");\n", + " hists.Hist2D(\"P.P:P.CalcMass\",100,0,10,100,-1,2,\"P.CalcMass&&P.Region==FD\");\n", + " hists.Hist2D(\"P.P:P.CalcMass\",100,0,10,100,-1,2,\"P.CalcMass&&P.Region==CD\")->Draw(\"(3x2)col1\");\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ROOT C++", + "language": "c++", + "name": "root" + }, + "language_info": { + "codemirror_mode": "text/x-c++src", + "file_extension": ".C", + "mimetype": " text/x-c++src", + "name": "c++" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From c53588d5e1f8d75c438a17be269cf6ebccc4e076 Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 12 Mar 2019 02:19:58 +0000 Subject: [PATCH 31/56] reconfigure hipo3 and get ready to add hipo4 --- C12AnCpp/Clas12/Makefile | 28 - C12AnCpp/Clas12/inc/hipoReader.h | 28 - C12AnCpp/Clas12/inc/protoParticle.h | 39 -- C12AnCpp/Clas12/inc/protoParticleReader.h | 51 -- C12AnCpp/Clas12/inc/recEvent.h | 25 - C12AnCpp/Clas12/inc/recEventReader.h | 39 -- C12AnCpp/Clas12/inc/recTrack.h | 36 - C12AnCpp/Clas12/inc/recTrackReader.h | 40 -- C12AnCpp/Clas12/src/hipoReader.cpp | 79 --- C12AnCpp/Clas12/src/protoParticleReader.cpp | 68 -- C12AnCpp/Clas12/src/recEventReader.cpp | 62 -- C12AnCpp/Clas12/src/recTrack.cpp | 9 - C12AnCpp/Clas12/src/recTrackReader.cpp | 61 -- C12AnCpp/Core/Makefile | 22 - C12AnCpp/Core/inc/algContainer.h | 53 -- C12AnCpp/Core/inc/algorithm.h | 67 -- C12AnCpp/Core/inc/dataReader.h | 33 - C12AnCpp/Core/inc/dataWriter.h | 23 - C12AnCpp/Core/inc/hist.h | 41 -- C12AnCpp/Core/inc/manager.h | 64 -- C12AnCpp/Core/inc/objContainer.h | 36 - C12AnCpp/Core/inc/objMap.h | 35 - C12AnCpp/Core/inc/objVector.h | 34 - C12AnCpp/Core/inc/object.h | 31 - C12AnCpp/Core/inc/outObjMgr.h | 52 -- C12AnCpp/Core/inc/protoParticle.h | 34 - C12AnCpp/Core/inc/tuple.h | 47 -- C12AnCpp/Core/src/algorithm.cpp | 32 - C12AnCpp/Core/src/hist.cpp | 5 - C12AnCpp/Core/src/manager.cpp | 71 -- C12AnCpp/Core/src/outObjMgr.cpp | 22 - C12AnCpp/Core/src/tuple.cpp | 14 - C12AnCpp/Examples/Makefile | 38 -- C12AnCpp/Examples/ex01/Makefile | 37 - C12AnCpp/Examples/ex01/ex01.cpp | 64 -- C12AnCpp/Examples/ex01/ex01_alg.cpp | 60 -- C12AnCpp/Examples/ex01/ex01_alg.h | 11 - C12AnCpp/Examples/ex02/Makefile | 37 - C12AnCpp/Examples/ex02/ex02.cpp | 75 --- C12AnCpp/Examples/ex02/ex02_alg.cpp | 94 --- C12AnCpp/Examples/ex02/ex02_alg.h | 11 - C12AnCpp/Examples/ex_lund/Makefile | 41 -- C12AnCpp/Examples/ex_lund/ex_lund.cpp | 60 -- C12AnCpp/Examples/ex_lund/ex_lund_alg.cpp | 61 -- C12AnCpp/Examples/ex_lund/ex_lund_alg.h | 11 - C12AnCpp/Examples/histogram.h | 72 -- C12AnCpp/Examples/of.txt | 2 - C12AnCpp/Examples/test.cpp | 150 ----- C12AnCpp/LICENSE | 674 ------------------- C12AnCpp/Lund/Makefile | 25 - C12AnCpp/Lund/inc/lundReader.h | 48 -- C12AnCpp/Lund/inc/protoParticle.h | 45 -- C12AnCpp/Lund/inc/protoParticleMaker.h | 36 - C12AnCpp/Lund/src/lundReader.cpp | 49 -- C12AnCpp/Lund/src/protoParticleMaker.cpp | 40 -- C12AnCpp/Makefile | 9 - C12AnCpp/README.md | 146 ---- C12AnCpp/Root/Makefile | 35 - C12AnCpp/Root/inc/particle.h | 52 -- C12AnCpp/Root/inc/particleMaker.h | 37 - C12AnCpp/Root/inc/rHist.h | 37 - C12AnCpp/Root/inc/rTuple.h | 40 -- C12AnCpp/Root/inc/rootOutObjMgr.h | 48 -- C12AnCpp/Root/src/particle.cpp | 57 -- C12AnCpp/Root/src/particleMaker.cpp | 75 --- C12AnCpp/Root/src/rHist.cpp | 13 - C12AnCpp/Root/src/rTuple.cpp | 28 - C12AnCpp/Root/src/rootOutObjMgr.cpp | 53 -- C12AnCpp/Tools/Makefile | 43 -- C12AnCpp/Tools/inc/combineParticles.h | 51 -- C12AnCpp/Tools/inc/kineTool.h | 36 - C12AnCpp/Tools/inc/utils.h | 17 - C12AnCpp/Tools/src/combineParticles.cpp | 89 --- C12AnCpp/Tools/src/kineTool.cpp | 10 - C12AnCpp/Tools/src/utils.cpp | 19 - C12AnCpp/setEnv.csh | 22 - C12AnCpp/setEnv.sh | 35 - CMakeLists.txt | 47 ++ Clas12Banks/CMakeLists.txt | 13 + Clas12Banks/Clas12LinkDef.h | 29 + {Banks => Clas12Banks}/Makefile | 0 {Banks => Clas12Banks}/calorimeter.cpp | 0 {Banks => Clas12Banks}/calorimeter.h | 0 {Banks => Clas12Banks}/cherenkov.cpp | 0 {Banks => Clas12Banks}/cherenkov.h | 0 {Banks => Clas12Banks}/clas12defs.h | 0 {Banks => Clas12Banks}/clas12event.cpp | 0 {Banks => Clas12Banks}/clas12event.h | 0 {Banks => Clas12Banks}/clas12reader.cpp | 53 +- {Banks => Clas12Banks}/clas12reader.h | 23 +- {Banks => Clas12Banks}/covmatrix.cpp | 0 {Banks => Clas12Banks}/covmatrix.h | 0 {Banks => Clas12Banks}/detector.cpp | 0 {Banks => Clas12Banks}/detector.h | 0 {Banks => Clas12Banks}/forwardtagger.cpp | 0 {Banks => Clas12Banks}/forwardtagger.h | 0 {Banks => Clas12Banks}/hallB_event.cpp | 0 {Banks => Clas12Banks}/hallB_event.h | 0 {Banks => Clas12Banks}/header.cpp | 0 {Banks => Clas12Banks}/header.h | 0 {Banks => Clas12Banks}/mcparticle.cpp | 0 {Banks => Clas12Banks}/mcparticle.h | 0 {Banks => Clas12Banks}/mesonex_event.cpp | 0 {Banks => Clas12Banks}/mesonex_event.h | 0 {Banks => Clas12Banks}/particle.cpp | 0 {Banks => Clas12Banks}/particle.h | 0 {Banks => Clas12Banks}/particle_detector.cpp | 0 {Banks => Clas12Banks}/particle_detector.h | 0 {Banks => Clas12Banks}/region_cdet.cpp | 0 {Banks => Clas12Banks}/region_cdet.h | 0 {Banks => Clas12Banks}/region_detector.h | 0 {Banks => Clas12Banks}/region_fdet.cpp | 0 {Banks => Clas12Banks}/region_fdet.h | 0 {Banks => Clas12Banks}/region_ft.cpp | 0 {Banks => Clas12Banks}/region_ft.h | 0 {Banks => Clas12Banks}/region_particle.cpp | 0 {Banks => Clas12Banks}/region_particle.h | 0 {Banks => Clas12Banks}/scaler.cpp | 0 {Banks => Clas12Banks}/scaler.h | 0 {Banks => Clas12Banks}/scintillator.cpp | 0 {Banks => Clas12Banks}/scintillator.h | 0 {Banks => Clas12Banks}/tracker.cpp | 0 {Banks => Clas12Banks}/tracker.h | 0 {Banks => Clas12Banks}/traj.cpp | 0 {Banks => Clas12Banks}/traj.h | 0 {Banks => Clas12Banks}/vectors.cpp | 0 {Banks => Clas12Banks}/vectors.h | 0 {Banks => Clas12Banks}/vtp.cpp | 0 {Banks => Clas12Banks}/vtp.h | 0 Clas12Root/BankHist.cpp | 77 +++ Clas12Root/BankHist.h | 40 ++ Clas12Root/CMakeLists.txt | 16 + Clas12Root/Clas12RootLinkDef.h | 17 + Clas12Root/HipoChain.cpp | 53 ++ Clas12Root/HipoChain.h | 45 ++ Clas12Root/HipoFileSelector.cpp | 128 ++++ Clas12Root/HipoFileSelector.h | 65 ++ Clas12Root/HipoHist.cpp | 122 ++++ Clas12Root/HipoHist.h | 39 ++ Clas12Root/HipoROOTOut.cpp | 294 ++++++++ Clas12Root/HipoROOTOut.h | 69 ++ Clas12Root/HipoRootAction.cpp | 5 + Clas12Root/HipoRootAction.h | 30 + Clas12Root/HipoSelector.cpp | 142 ++++ Clas12Root/HipoSelector.h | 68 ++ Clas12Root/HipoTreeMaker.cpp | 56 ++ Clas12Root/HipoTreeMaker.h | 41 ++ Clas12Root/LoadHipoROOT.C | 28 + Clas12Root/ParticleHist.cpp | 55 ++ Clas12Root/ParticleHist.h | 33 + Clas12Root/ParticleTree.cpp | 115 ++++ Clas12Root/ParticleTree.h | 42 ++ Clas12Root/src/CMakeLists.txt | 9 + Clas12Root/src/particleDraw.cpp | 35 + Clas12Root/src/particleTree.cpp | 43 ++ Clas12Root/templateBankHistAction.C | 45 ++ Clas12Root/templateParticleHistAction.C | 33 + Clas12Root/templateParticleTreeAction.C | 61 ++ ClasBanks/TEVNTClass.cc | 55 -- ClasBanks/TEVNTClass.h | 48 -- ClasBanks/TEVNTClassLinkDef.h | 8 - Hipo/CMakeLists.txt | 13 + Hipo/Clas12RootLinkDef.h | 17 + Hipo/HipoLinkDef.h | 17 + Hipo/reader.cpp | 13 +- Hipo/reader.h | 7 +- RunRoot/LoadClas12Root.C | 12 + RunRoot/hiporoot/HipoHistAction.C | 7 - RunRoot/importToROOT.C | 42 +- cmake_clean.csh | 1 + include/lz4.h | 607 +++++++++++++++++ include/lz4frame.h | 532 +++++++++++++++ include/lz4hc.h | 355 ++++++++++ 173 files changed, 3557 insertions(+), 4122 deletions(-) delete mode 100644 C12AnCpp/Clas12/Makefile delete mode 100644 C12AnCpp/Clas12/inc/hipoReader.h delete mode 100644 C12AnCpp/Clas12/inc/protoParticle.h delete mode 100644 C12AnCpp/Clas12/inc/protoParticleReader.h delete mode 100644 C12AnCpp/Clas12/inc/recEvent.h delete mode 100644 C12AnCpp/Clas12/inc/recEventReader.h delete mode 100644 C12AnCpp/Clas12/inc/recTrack.h delete mode 100644 C12AnCpp/Clas12/inc/recTrackReader.h delete mode 100644 C12AnCpp/Clas12/src/hipoReader.cpp delete mode 100644 C12AnCpp/Clas12/src/protoParticleReader.cpp delete mode 100644 C12AnCpp/Clas12/src/recEventReader.cpp delete mode 100644 C12AnCpp/Clas12/src/recTrack.cpp delete mode 100644 C12AnCpp/Clas12/src/recTrackReader.cpp delete mode 100644 C12AnCpp/Core/Makefile delete mode 100644 C12AnCpp/Core/inc/algContainer.h delete mode 100644 C12AnCpp/Core/inc/algorithm.h delete mode 100644 C12AnCpp/Core/inc/dataReader.h delete mode 100644 C12AnCpp/Core/inc/dataWriter.h delete mode 100644 C12AnCpp/Core/inc/hist.h delete mode 100644 C12AnCpp/Core/inc/manager.h delete mode 100644 C12AnCpp/Core/inc/objContainer.h delete mode 100644 C12AnCpp/Core/inc/objMap.h delete mode 100644 C12AnCpp/Core/inc/objVector.h delete mode 100644 C12AnCpp/Core/inc/object.h delete mode 100644 C12AnCpp/Core/inc/outObjMgr.h delete mode 100644 C12AnCpp/Core/inc/protoParticle.h delete mode 100644 C12AnCpp/Core/inc/tuple.h delete mode 100644 C12AnCpp/Core/src/algorithm.cpp delete mode 100644 C12AnCpp/Core/src/hist.cpp delete mode 100644 C12AnCpp/Core/src/manager.cpp delete mode 100644 C12AnCpp/Core/src/outObjMgr.cpp delete mode 100644 C12AnCpp/Core/src/tuple.cpp delete mode 100644 C12AnCpp/Examples/Makefile delete mode 100644 C12AnCpp/Examples/ex01/Makefile delete mode 100644 C12AnCpp/Examples/ex01/ex01.cpp delete mode 100644 C12AnCpp/Examples/ex01/ex01_alg.cpp delete mode 100644 C12AnCpp/Examples/ex01/ex01_alg.h delete mode 100644 C12AnCpp/Examples/ex02/Makefile delete mode 100644 C12AnCpp/Examples/ex02/ex02.cpp delete mode 100644 C12AnCpp/Examples/ex02/ex02_alg.cpp delete mode 100644 C12AnCpp/Examples/ex02/ex02_alg.h delete mode 100644 C12AnCpp/Examples/ex_lund/Makefile delete mode 100644 C12AnCpp/Examples/ex_lund/ex_lund.cpp delete mode 100644 C12AnCpp/Examples/ex_lund/ex_lund_alg.cpp delete mode 100644 C12AnCpp/Examples/ex_lund/ex_lund_alg.h delete mode 100644 C12AnCpp/Examples/histogram.h delete mode 100644 C12AnCpp/Examples/of.txt delete mode 100644 C12AnCpp/Examples/test.cpp delete mode 100644 C12AnCpp/LICENSE delete mode 100644 C12AnCpp/Lund/Makefile delete mode 100644 C12AnCpp/Lund/inc/lundReader.h delete mode 100644 C12AnCpp/Lund/inc/protoParticle.h delete mode 100644 C12AnCpp/Lund/inc/protoParticleMaker.h delete mode 100644 C12AnCpp/Lund/src/lundReader.cpp delete mode 100644 C12AnCpp/Lund/src/protoParticleMaker.cpp delete mode 100644 C12AnCpp/Makefile delete mode 100644 C12AnCpp/README.md delete mode 100644 C12AnCpp/Root/Makefile delete mode 100644 C12AnCpp/Root/inc/particle.h delete mode 100644 C12AnCpp/Root/inc/particleMaker.h delete mode 100644 C12AnCpp/Root/inc/rHist.h delete mode 100644 C12AnCpp/Root/inc/rTuple.h delete mode 100644 C12AnCpp/Root/inc/rootOutObjMgr.h delete mode 100644 C12AnCpp/Root/src/particle.cpp delete mode 100644 C12AnCpp/Root/src/particleMaker.cpp delete mode 100644 C12AnCpp/Root/src/rHist.cpp delete mode 100644 C12AnCpp/Root/src/rTuple.cpp delete mode 100644 C12AnCpp/Root/src/rootOutObjMgr.cpp delete mode 100644 C12AnCpp/Tools/Makefile delete mode 100644 C12AnCpp/Tools/inc/combineParticles.h delete mode 100644 C12AnCpp/Tools/inc/kineTool.h delete mode 100644 C12AnCpp/Tools/inc/utils.h delete mode 100644 C12AnCpp/Tools/src/combineParticles.cpp delete mode 100644 C12AnCpp/Tools/src/kineTool.cpp delete mode 100644 C12AnCpp/Tools/src/utils.cpp delete mode 100755 C12AnCpp/setEnv.csh delete mode 100755 C12AnCpp/setEnv.sh create mode 100644 CMakeLists.txt create mode 100644 Clas12Banks/CMakeLists.txt create mode 100644 Clas12Banks/Clas12LinkDef.h rename {Banks => Clas12Banks}/Makefile (100%) rename {Banks => Clas12Banks}/calorimeter.cpp (100%) rename {Banks => Clas12Banks}/calorimeter.h (100%) rename {Banks => Clas12Banks}/cherenkov.cpp (100%) rename {Banks => Clas12Banks}/cherenkov.h (100%) rename {Banks => Clas12Banks}/clas12defs.h (100%) rename {Banks => Clas12Banks}/clas12event.cpp (100%) rename {Banks => Clas12Banks}/clas12event.h (100%) rename {Banks => Clas12Banks}/clas12reader.cpp (71%) rename {Banks => Clas12Banks}/clas12reader.h (84%) rename {Banks => Clas12Banks}/covmatrix.cpp (100%) rename {Banks => Clas12Banks}/covmatrix.h (100%) rename {Banks => Clas12Banks}/detector.cpp (100%) rename {Banks => Clas12Banks}/detector.h (100%) rename {Banks => Clas12Banks}/forwardtagger.cpp (100%) rename {Banks => Clas12Banks}/forwardtagger.h (100%) rename {Banks => Clas12Banks}/hallB_event.cpp (100%) rename {Banks => Clas12Banks}/hallB_event.h (100%) rename {Banks => Clas12Banks}/header.cpp (100%) rename {Banks => Clas12Banks}/header.h (100%) rename {Banks => Clas12Banks}/mcparticle.cpp (100%) rename {Banks => Clas12Banks}/mcparticle.h (100%) rename {Banks => Clas12Banks}/mesonex_event.cpp (100%) rename {Banks => Clas12Banks}/mesonex_event.h (100%) rename {Banks => Clas12Banks}/particle.cpp (100%) rename {Banks => Clas12Banks}/particle.h (100%) rename {Banks => Clas12Banks}/particle_detector.cpp (100%) rename {Banks => Clas12Banks}/particle_detector.h (100%) rename {Banks => Clas12Banks}/region_cdet.cpp (100%) rename {Banks => Clas12Banks}/region_cdet.h (100%) rename {Banks => Clas12Banks}/region_detector.h (100%) rename {Banks => Clas12Banks}/region_fdet.cpp (100%) rename {Banks => Clas12Banks}/region_fdet.h (100%) rename {Banks => Clas12Banks}/region_ft.cpp (100%) rename {Banks => Clas12Banks}/region_ft.h (100%) rename {Banks => Clas12Banks}/region_particle.cpp (100%) rename {Banks => Clas12Banks}/region_particle.h (100%) rename {Banks => Clas12Banks}/scaler.cpp (100%) rename {Banks => Clas12Banks}/scaler.h (100%) rename {Banks => Clas12Banks}/scintillator.cpp (100%) rename {Banks => Clas12Banks}/scintillator.h (100%) rename {Banks => Clas12Banks}/tracker.cpp (100%) rename {Banks => Clas12Banks}/tracker.h (100%) rename {Banks => Clas12Banks}/traj.cpp (100%) rename {Banks => Clas12Banks}/traj.h (100%) rename {Banks => Clas12Banks}/vectors.cpp (100%) rename {Banks => Clas12Banks}/vectors.h (100%) rename {Banks => Clas12Banks}/vtp.cpp (100%) rename {Banks => Clas12Banks}/vtp.h (100%) create mode 100644 Clas12Root/BankHist.cpp create mode 100644 Clas12Root/BankHist.h create mode 100644 Clas12Root/CMakeLists.txt create mode 100644 Clas12Root/Clas12RootLinkDef.h create mode 100644 Clas12Root/HipoChain.cpp create mode 100644 Clas12Root/HipoChain.h create mode 100644 Clas12Root/HipoFileSelector.cpp create mode 100644 Clas12Root/HipoFileSelector.h create mode 100644 Clas12Root/HipoHist.cpp create mode 100644 Clas12Root/HipoHist.h create mode 100644 Clas12Root/HipoROOTOut.cpp create mode 100644 Clas12Root/HipoROOTOut.h create mode 100644 Clas12Root/HipoRootAction.cpp create mode 100644 Clas12Root/HipoRootAction.h create mode 100644 Clas12Root/HipoSelector.cpp create mode 100644 Clas12Root/HipoSelector.h create mode 100644 Clas12Root/HipoTreeMaker.cpp create mode 100644 Clas12Root/HipoTreeMaker.h create mode 100644 Clas12Root/LoadHipoROOT.C create mode 100644 Clas12Root/ParticleHist.cpp create mode 100644 Clas12Root/ParticleHist.h create mode 100644 Clas12Root/ParticleTree.cpp create mode 100644 Clas12Root/ParticleTree.h create mode 100644 Clas12Root/src/CMakeLists.txt create mode 100644 Clas12Root/src/particleDraw.cpp create mode 100644 Clas12Root/src/particleTree.cpp create mode 100644 Clas12Root/templateBankHistAction.C create mode 100644 Clas12Root/templateParticleHistAction.C create mode 100644 Clas12Root/templateParticleTreeAction.C delete mode 100644 ClasBanks/TEVNTClass.cc delete mode 100644 ClasBanks/TEVNTClass.h delete mode 100644 ClasBanks/TEVNTClassLinkDef.h create mode 100644 Hipo/CMakeLists.txt create mode 100644 Hipo/Clas12RootLinkDef.h create mode 100644 Hipo/HipoLinkDef.h create mode 100644 RunRoot/LoadClas12Root.C delete mode 100644 RunRoot/hiporoot/HipoHistAction.C create mode 100755 cmake_clean.csh create mode 100644 include/lz4.h create mode 100644 include/lz4frame.h create mode 100644 include/lz4hc.h diff --git a/C12AnCpp/Clas12/Makefile b/C12AnCpp/Clas12/Makefile deleted file mode 100644 index d73a3f6..0000000 --- a/C12AnCpp/Clas12/Makefile +++ /dev/null @@ -1,28 +0,0 @@ - -#INCDIR := inc -SRCDIR := src -OBJDIR := build - -LIBCORE := $(C12CORE) - -INCHIPO := $(HIPO) -LIBHIPO := $(CLAS12TOOL)/lib - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBCORE) -L$(LIBHIPO) - -BUILD := $(shell mkdir -p build) - -.PHONY: all clean -all: $(BUILD) $(OBJECTS) - $(CXX) $(DEBUG) -I$(INCDIR) $(INCLUDES) $(LIBS) -o libClas12.so -shared $(CFLAGS) $(OBJECTS) - -$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp - $(CXX) $(DEBUG) $(CFLAGS) $(INCLUDES) $(LIBS) -c $< -o $@ - -clean: - rm build/*; rm libClas12.so diff --git a/C12AnCpp/Clas12/inc/hipoReader.h b/C12AnCpp/Clas12/inc/hipoReader.h deleted file mode 100644 index 267c385..0000000 --- a/C12AnCpp/Clas12/inc/hipoReader.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "Core/dataReader.h" -#include "reader.h" - -#include -#include - -namespace clas12 { - - class hipoReader : public core::dataReader { - - public: - hipoReader( std::string ); - virtual void open(); - virtual void close(); - virtual void* next(); - - hipo::reader* getReader() { return _reader; } - private: - const char* _filename; - std::vector _filelist; - unsigned int _ifile; - hipo::reader *_reader; - }; - -} - diff --git a/C12AnCpp/Clas12/inc/protoParticle.h b/C12AnCpp/Clas12/inc/protoParticle.h deleted file mode 100644 index 85e67d4..0000000 --- a/C12AnCpp/Clas12/inc/protoParticle.h +++ /dev/null @@ -1,39 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/object.h" -#include "Core/protoParticle.h" - -namespace clas12 { - - class protoParticle : public core::protoParticle { - public: - virtual ~protoParticle() {} - /*int id;*/ - float beta; - int charge; - float chi2pid; - /*int pid;*/ - /*float px;*/ - /*float py;*/ - /*float pz;*/ - int status; - /*float vx;*/ - /*float vy;*/ - /*float vz;*/ - }; -} - diff --git a/C12AnCpp/Clas12/inc/protoParticleReader.h b/C12AnCpp/Clas12/inc/protoParticleReader.h deleted file mode 100644 index 55c3eb3..0000000 --- a/C12AnCpp/Clas12/inc/protoParticleReader.h +++ /dev/null @@ -1,51 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Hipo includes __________ -#include "node.h" - -// _______ Core includes __________ -#include "Core/algorithm.h" - -// _______ Clas12 includes __________ -#include "Clas12/protoParticle.h" - -namespace clas12 { - - class protoParticleReader : public core::algorithm { - public: - protoParticleReader() {}; - - virtual void init(); - virtual void processEvent(); - virtual void terminate() {}; - - private: - hipo::node *rp_beta ; - hipo::node *rp_charge ; - hipo::node *rp_chi2pid ; - hipo::node *rp_pid ; - hipo::node *rp_px ; - hipo::node *rp_py ; - hipo::node *rp_pz ; - hipo::node *rp_status ; - hipo::node *rp_vx ; - hipo::node *rp_vy ; - hipo::node *rp_vz ; - - }; - -} - diff --git a/C12AnCpp/Clas12/inc/recEvent.h b/C12AnCpp/Clas12/inc/recEvent.h deleted file mode 100644 index 2bf836f..0000000 --- a/C12AnCpp/Clas12/inc/recEvent.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include - -#include "Core/object.h" -namespace clas12 { - - class recEvent : public core::object { - public: - int32_t NRUN ; - int32_t NEVENT ; - float EVNTime; - int8_t TYPE ; - int16_t EvCAT ; - int16_t NPGP ; - int64_t TRG ; - float BCG ; - double LT ; - float STTime ; - float RFTime ; - int8_t Helic ; - float PTIME ; - }; -} - diff --git a/C12AnCpp/Clas12/inc/recEventReader.h b/C12AnCpp/Clas12/inc/recEventReader.h deleted file mode 100644 index eac3dba..0000000 --- a/C12AnCpp/Clas12/inc/recEventReader.h +++ /dev/null @@ -1,39 +0,0 @@ - -#include "Core/algorithm.h" -#include "bank.h" -#include "reader.h" -#include -#include - -namespace clas12 { - - class recEvBank : public hipo::bank { - public: - void init( const char *, hipo::reader &); - - int getInt( std::string b, int i ) { return bank::getInt( order[b], i); } - int getLong( std::string b, int i ) { return bank::getLong( order[b], i); } - float getFloat( std::string b, int i) { return bank::getFloat( order[b], i); }; - double getDouble( std::string b, int i) { return bank::getDouble( order[b], i); }; - - void addBranch( std::string ); - private: - std::map order; - }; - - class recEventReader : public core::algorithm { - public: - recEventReader() {}; - - virtual void init(); - virtual void processEvent(); - virtual void terminate() {}; - - private: - recEvBank _bank; - std::map _index; - }; - -} - - diff --git a/C12AnCpp/Clas12/inc/recTrack.h b/C12AnCpp/Clas12/inc/recTrack.h deleted file mode 100644 index 57e0072..0000000 --- a/C12AnCpp/Clas12/inc/recTrack.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef RECTRACK_H -#define RECTRACK_H -#include - -#include "Core/object.h" - -namespace clas12 { - - class recTrack : public core::object { - public: - int16_t NDF; - int16_t NDF_nomm; - float chi2; - float chi2_nomm; - int8_t detector; - int16_t index; - int16_t pindex; - float px_nomm; - float py_nomm; - float pz_nomm; - int8_t q; - int8_t sector; - int16_t status; - float vx_nomm; - float vy_nomm; - float vz_nomm; - - float getP(); - float getPT(); - float getPhi(); - float getTheta(); - }; -} - -#endif - diff --git a/C12AnCpp/Clas12/inc/recTrackReader.h b/C12AnCpp/Clas12/inc/recTrackReader.h deleted file mode 100644 index 2d58038..0000000 --- a/C12AnCpp/Clas12/inc/recTrackReader.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RECTRACKREADER_H -#define RECTRACKREADER_H - -#include "Core/algorithm.h" -#include "Clas12/recTrack.h" -#include "node.h" - -namespace clas12 { - class recTrackReader : public core::algorithm { - public: - recTrackReader() {}; - - virtual void init(); - virtual void processEvent(); - virtual void terminate() {}; - - private: - hipo::node *REC__Track_NDF ; - hipo::node *REC__Track_NDF_nomm ; - hipo::node *REC__Track_chi2 ; - hipo::node *REC__Track_chi2_nomm ; - hipo::node *REC__Track_detector ; - hipo::node *REC__Track_index ; - hipo::node *REC__Track_pindex ; - hipo::node *REC__Track_px_nomm ; - hipo::node *REC__Track_py_nomm ; - hipo::node *REC__Track_pz_nomm ; - hipo::node *REC__Track_q ; - hipo::node *REC__Track_sector ; - hipo::node *REC__Track_status ; - hipo::node *REC__Track_vx_nomm ; - hipo::node *REC__Track_vy_nomm ; - hipo::node *REC__Track_vz_nomm ; - - }; - -}; - -#endif - diff --git a/C12AnCpp/Clas12/src/hipoReader.cpp b/C12AnCpp/Clas12/src/hipoReader.cpp deleted file mode 100644 index 1ad08fb..0000000 --- a/C12AnCpp/Clas12/src/hipoReader.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "Clas12/hipoReader.h" - -using namespace clas12; - -#include -#include - -#include - -hipoReader::hipoReader( std::string name ) { - _ifile = 0; - _reader = NULL; - - if( name.size() == 0){ - std::cerr << " *** [ERROR] hipoReader: no file given\n"; - return; - } - // check if a single hipo file or a list of files - if( name.find(".hipo") != std::string::npos ){ - _filelist.push_back( name ); - } - else{ - // read all the lines in the text file and add them - std::ifstream inf( name ); - assert(inf); - if( ! inf ){ - std::cerr << " *** [ERROR] hipoReader: bad file name\n"; - return; - } - std::string f; - while( inf >> f ){ - if( f.find(".hipo") == std::string::npos ){ - // no hipo name, skipping - std::cerr << " warning, file " << f <<" does not end in .hipo. Skipping it\n"; - } - else{ - _filelist.push_back(f); - } - } - inf.close(); - } - _reader = new hipo::reader(); - _ifile = 0; - setStatus( true ); -} - -void hipoReader::open(){ - if( _filelist.size() < 1 ) { - return; - } - _filename = _filelist[_ifile].c_str(); - std::cout << " *** [INFO] hipoReader: Opening file: " << _filename << std::endl; - _reader->open(_filename); -} - -void hipoReader::close(){ - //_reader->close(); -} - -void* hipoReader::next() { - if( ! _reader ){ - std::cerr << " no reader \n"; - return NULL; - } - if( _reader->next() == false ){ - - // check if there are other files to read - if ( (_ifile+1) < _filelist.size() ){ - - // switch file - _ifile++; - open(); - if( _reader->next() == false) return NULL; - } - else return NULL; - } - return _reader; -} - diff --git a/C12AnCpp/Clas12/src/protoParticleReader.cpp b/C12AnCpp/Clas12/src/protoParticleReader.cpp deleted file mode 100644 index e6bff97..0000000 --- a/C12AnCpp/Clas12/src/protoParticleReader.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "Core/objVector.h" - -#include "reader.h" -#include "Clas12/hipoReader.h" -#include "Clas12/protoParticleReader.h" -using namespace clas12; - -#include -#include -#include -using namespace std; - - -void protoParticleReader::init() { - hipo::reader *_reader = ((hipoReader*)getDataReader())->getReader(); - rp_beta = _reader->getBranch("REC::Particle","beta"); - rp_charge = _reader->getBranch("REC::Particle","charge"); - rp_chi2pid= _reader->getBranch("REC::Particle","chi2pid"); - rp_pid = _reader->getBranch("REC::Particle","pid"); - rp_px = _reader->getBranch("REC::Particle","px"); - rp_py = _reader->getBranch("REC::Particle","py"); - rp_pz = _reader->getBranch("REC::Particle","pz"); - rp_status = _reader->getBranch("REC::Particle","status"); - rp_vx = _reader->getBranch("REC::Particle","vx"); - rp_vy = _reader->getBranch("REC::Particle","vy"); - rp_vz = _reader->getBranch("REC::Particle","vz"); -} - -void protoParticleReader::processEvent() { - // get reader from obj pool - //hipo::reader *reader = (hipo::reader*)getObject("Event"); - //if( !reader ) { cout << " returning;\n"; return; } - - //cout << " protoParticle READER " << endl; - - if( ! rp_beta ) return; - if( rp_beta->getLength() == 0 ) return; - //cout << "debug 01"< *particles = new std::vector(); - shared_ptr particles = make_shared(); - for( int i=0; i < rp_beta->getLength(); i++ ){ - unique_ptr p = make_unique(); - p->id = i; - p->beta = rp_beta->getValue(i); - p->charge = rp_charge->getValue(i); - p->chi2pid = rp_chi2pid->getValue(i); - p->pid = rp_pid->getValue(i); - p->px = rp_px->getValue(i); - p->py = rp_py->getValue(i); - p->pz = rp_pz->getValue(i); - p->status = rp_status->getValue(i); - p->vx = rp_vx->getValue(i); - p->vy = rp_vy->getValue(i); - p->vz = rp_vz->getValue(i); - //cout << " ooo " << p->id << " " << p->pid << " " << p->charge << endl; - particles->push_back( move(p)); - - //auto *k = particles->back().get(); - //protoParticle *k = dynamic_cast(particles->back().get()); - - //cout << " --- " << k->id << " " << k->pid << " " << k->charge << endl; - } - //cout << particles->size() << " ======= " << endl; - //for( auto p : *particles ) cout << static_cast(&p)->id << endl; - bookObject( "protoParticles", particles ); - //bookObject( "protoParticles", move(particles) ); -} - diff --git a/C12AnCpp/Clas12/src/recEventReader.cpp b/C12AnCpp/Clas12/src/recEventReader.cpp deleted file mode 100644 index e228612..0000000 --- a/C12AnCpp/Clas12/src/recEventReader.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "Clas12/hipoReader.h" -#include "Clas12/recEventReader.h" -#include "Clas12/recEvent.h" -using namespace clas12; - -#include - -void recEvBank::init( const char *bname, hipo::reader &r ){ - initBranches( bname, r ); -} - -void recEvBank::addBranch( std::string b ){ - order[b] = getEntryOrder(b.c_str()); -} - -void recEventReader::init() { - - _bank.init( "REC::Event", *static_cast(getDataReader())->getReader() ); - - std::string brnames[] = { - "NRUN", - "NEVENT", - "EVNTime", - "TYPE", - "EvCAT", - "NPGP", - "TRG", - "BCG", - "LT", - "STTime", - "RFTime", - "Helic", - "PTIME" - }; - for( int i=0;i<13;i++) _bank.addBranch( brnames[i] ); -} - - -void recEventReader::processEvent() { - - if( _bank.getSize() == 0 ) return; - - std::shared_ptr rec = std::make_shared(); - - rec->NRUN = _bank.getInt("NRUN",0) ; - rec->NEVENT = _bank.getInt("NEVENT",0) ; - rec->EVNTime= _bank.getFloat("EVNTime",0) ; - rec->TYPE = _bank.getInt("TYPE",0) ; - rec->EvCAT = _bank.getInt("EvCAT",0) ; - rec->NPGP = _bank.getInt("NPGP",0) ; - rec->TRG = _bank.getLong("TRG",0) ; - rec->BCG = _bank.getFloat("BCG",0) ; - rec->LT = _bank.getDouble("LT",0) ; - rec->STTime = _bank.getFloat("STTime",0) ; - rec->RFTime = _bank.getFloat("RFTime",0) ; - rec->Helic = _bank.getInt("Helic",0) ; - rec->PTIME = _bank.getFloat("PTIME",0) ; - - - bookObject("recEvent",rec); - -} diff --git a/C12AnCpp/Clas12/src/recTrack.cpp b/C12AnCpp/Clas12/src/recTrack.cpp deleted file mode 100644 index d1376e6..0000000 --- a/C12AnCpp/Clas12/src/recTrack.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "Clas12/recTrack.h" -#include - -using namespace clas12; - -float recTrack::getP(){ return sqrt(px_nomm*px_nomm+py_nomm*py_nomm+pz_nomm*pz_nomm); } -float recTrack::getPT(){ return sqrt(px_nomm*px_nomm+py_nomm*py_nomm); } -float recTrack::getPhi(){ return atan2( py_nomm, px_nomm ); } -float recTrack::getTheta(){ return acos( pz_nomm/getP() ); } diff --git a/C12AnCpp/Clas12/src/recTrackReader.cpp b/C12AnCpp/Clas12/src/recTrackReader.cpp deleted file mode 100644 index a62967a..0000000 --- a/C12AnCpp/Clas12/src/recTrackReader.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "Clas12/recTrackReader.h" -#include "Core/objMap.h" - -#include - -#include "reader.h" -#include "Clas12/hipoReader.h" - -using namespace clas12; - -void recTrackReader::init(){ - hipo::reader *_reader = ((hipoReader*)getDataReader())->getReader(); - REC__Track_NDF = _reader->getBranch("REC::Track","NDF"); - REC__Track_NDF_nomm = _reader->getBranch("REC::Track","NDF_nomm"); - REC__Track_chi2 = _reader->getBranch("REC::Track","chi2"); - REC__Track_chi2_nomm = _reader->getBranch("REC::Track","chi2_nomm"); - REC__Track_detector = _reader->getBranch("REC::Track","detector"); - REC__Track_index = _reader->getBranch("REC::Track","index"); - REC__Track_pindex = _reader->getBranch("REC::Track","pindex"); - REC__Track_px_nomm = _reader->getBranch("REC::Track","px_nomm"); - REC__Track_py_nomm = _reader->getBranch("REC::Track","py_nomm"); - REC__Track_pz_nomm = _reader->getBranch("REC::Track","pz_nomm"); - REC__Track_q = _reader->getBranch("REC::Track","q"); - REC__Track_sector = _reader->getBranch("REC::Track","sector"); - REC__Track_status = _reader->getBranch("REC::Track","status"); - REC__Track_vx_nomm = _reader->getBranch("REC::Track","vx_nomm"); - REC__Track_vy_nomm = _reader->getBranch("REC::Track","vy_nomm"); - REC__Track_vz_nomm = _reader->getBranch("REC::Track","vz_nomm"); -} - -void recTrackReader::processEvent() { - - if( ! REC__Track_NDF ) return; - if( REC__Track_NDF->getLength() == 0 ) return; - - std::shared_ptr> tracks = std::make_shared>(); - for( int i=0; igetLength();i++){ - std::unique_ptr tr = std::make_unique(); - tr->NDF = REC__Track_NDF->getValue(i); - tr->NDF_nomm = REC__Track_NDF_nomm->getValue(i); - tr->chi2 = REC__Track_chi2->getValue(i); - tr->chi2_nomm = REC__Track_chi2_nomm->getValue(i); - tr->detector = REC__Track_detector->getValue(i); - tr->index = REC__Track_index->getValue(i); - tr->pindex = REC__Track_pindex->getValue(i); - tr->px_nomm = REC__Track_px_nomm->getValue(i); - tr->py_nomm = REC__Track_py_nomm->getValue(i); - tr->pz_nomm = REC__Track_pz_nomm->getValue(i); - tr->q = REC__Track_q->getValue(i); - tr->sector = REC__Track_sector->getValue(i); - tr->status = REC__Track_status->getValue(i); - tr->vx_nomm = REC__Track_vx_nomm->getValue(i); - tr->vy_nomm = REC__Track_vy_nomm->getValue(i); - tr->vz_nomm = REC__Track_vz_nomm->getValue(i); - - (*tracks)[ tr->pindex ] = std::move(tr); - } - - bookObject("recTracks",tracks); -} - diff --git a/C12AnCpp/Core/Makefile b/C12AnCpp/Core/Makefile deleted file mode 100644 index 6f93e3b..0000000 --- a/C12AnCpp/Core/Makefile +++ /dev/null @@ -1,22 +0,0 @@ - -INCDIR := inc -SRCDIR := src -OBJDIR := build - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -BUILD := $(shell mkdir -p build) - - -.PHONY: all clean -all: $(BUILD) $(OBJECTS) - $(CXX) $(DEBUG) -I$(INCDIR) -o libC12Core.so -shared $(CFLAGS) $(OBJECTS) - -$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp - $(CXX) $(DEBUG) $(CFLAGS) -I$(INCDIR) -c $< -o $@ - -clean: - rm build/*; rm libC12Core.so; rm -rf build diff --git a/C12AnCpp/Core/inc/algContainer.h b/C12AnCpp/Core/inc/algContainer.h deleted file mode 100644 index 1a52016..0000000 --- a/C12AnCpp/Core/inc/algContainer.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef ALGCONTAINER_H -#define ALGCONTAINER_H - -// _______ Core includes __________ -#include "algorithm.h" - -// _______ STL includes __________ -#include - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Algorithm container. -////////////////////////////////////////////////////////////////////// - class algContainer : private std::vector{ - public: - static algContainer* instance(); - using std::vector::push_back; - using std::vector::begin; - using std::vector::end; - using std::vector::size; - - private: - algContainer() {} - static algContainer* _algCont; - }; - - algContainer* algContainer::_algCont = 0; - - algContainer* algContainer::instance() { - if( _algCont == 0 ){ - _algCont = new algContainer(); - } - return _algCont; - } - -} - -#endif - diff --git a/C12AnCpp/Core/inc/algorithm.h b/C12AnCpp/Core/inc/algorithm.h deleted file mode 100644 index 54b3f32..0000000 --- a/C12AnCpp/Core/inc/algorithm.h +++ /dev/null @@ -1,67 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef _ALGORITHM_H -#define _ALGORITHM_H - -// _______ Core includes __________ -#include "outObjMgr.h" -#include "tuple.h" -#include "hist.h" -#include "object.h" -#include "objContainer.h" -#include "dataReader.h" - -// _______ STL includes __________ -#include -#include - -namespace core { - -////////////////////////////////////////////////////////////////////// -// -// Algorithm base class -////////////////////////////////////////////////////////////////////// - class algorithm { - public: - algorithm() {}; - void setObjContainer( objContainer *o) { _obj = o; } - virtual void setDataReader( dataReader *r ) { _reader = r; } - virtual dataReader* getDataReader() { return _reader; } - - // User defined methods - // ----------------------------------------------- - virtual void init() = 0; - virtual void processEvent() = 0; - virtual void terminate() = 0; - // ----------------------------------------------- - - virtual void bookObject( std::string, std::shared_ptr); - virtual void* getObject( std::string ); - - virtual void setOutMgr( outObjMgr *m ) { _oom = m; } - - // create or get instances of analysis objects - virtual tuple* ntuple( std::string ); - virtual hist* histo( std::string, int, float, float ); - - private: - objContainer *_obj; // pointer to Temporary Data Container - dataReader *_reader; // interface to data source - outObjMgr *_oom; // analysis object output manager - }; - -} - -#endif - diff --git a/C12AnCpp/Core/inc/dataReader.h b/C12AnCpp/Core/inc/dataReader.h deleted file mode 100644 index 7d40947..0000000 --- a/C12AnCpp/Core/inc/dataReader.h +++ /dev/null @@ -1,33 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once -namespace core { -////////////////////////////////////////////////////////////////////// -// Abstract implementation of data reader -////////////////////////////////////////////////////////////////////// - class dataReader { - public: - dataReader() : _status(false) {} - virtual ~dataReader() {} - virtual void open() = 0; - virtual void close() = 0; - virtual void* next() = 0; - bool getStatus() const { return _status; } - void setStatus( bool b ) { _status = b; } - private: - bool _status; - }; - -} - diff --git a/C12AnCpp/Core/inc/dataWriter.h b/C12AnCpp/Core/inc/dataWriter.h deleted file mode 100644 index e1bb873..0000000 --- a/C12AnCpp/Core/inc/dataWriter.h +++ /dev/null @@ -1,23 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once -namespace core { - class dataWriter { - public: - virtual void open() = 0; - virtual void close() = 0; - virtual void write() = 0; - }; -} - diff --git a/C12AnCpp/Core/inc/hist.h b/C12AnCpp/Core/inc/hist.h deleted file mode 100644 index 7241fea..0000000 --- a/C12AnCpp/Core/inc/hist.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once -// _______ Core includes __________ -#include "object.h" - -// _______ STL includes __________ -#include - -namespace core { -////////////////////////////////////////////////////////////////////// -// Abstract interface for histogram -////////////////////////////////////////////////////////////////////// - class hist : public object { - public: - hist( std::string, std::string, int, float, float); - virtual ~hist() {}; - - // specific implementation - virtual void fill( float ) = 0; - private: - std::string name; - std::string title; - int nbins; - float min; - float max; - }; - -} - diff --git a/C12AnCpp/Core/inc/manager.h b/C12AnCpp/Core/inc/manager.h deleted file mode 100644 index 7c2b34f..0000000 --- a/C12AnCpp/Core/inc/manager.h +++ /dev/null @@ -1,64 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef MANAGER_H -#define MANAGER_H - -// _______ Core includes __________ -#include "dataReader.h" -#include "dataWriter.h" -#include "objContainer.h" -#include "algContainer.h" -#include "algorithm.h" - -namespace core { - -////////////////////////////////////////////////////////////////////// -// -// Manager steers the data processing flow and orchestrates the algs -////////////////////////////////////////////////////////////////////// - class manager { - public: - ~manager(); - - static manager* instance(); - - void addDataReader( dataReader *dr ) { _reader = dr; } - dataReader* getDataReader(){ return _reader; } - - void addDataWriter( dataWriter *dw ) { _writer = dw; } - dataWriter* getDataWriter(){ return _writer; } - - void setOutObjMgr( outObjMgr *oom ) { _outmgr = oom; } - - void addAlgorithm( algorithm* ); - - void run(); - private: - manager(); // private constructor for singleton implementation - static manager *_manager; - static void showMessage(); - - dataReader *_reader; - dataWriter *_writer; - - objContainer *_obj; // Temporary Data Conteiner - algContainer *_alg; // Algorithm list - - outObjMgr *_outmgr; // manager of analysis output objects - }; - -} - -#endif - diff --git a/C12AnCpp/Core/inc/objContainer.h b/C12AnCpp/Core/inc/objContainer.h deleted file mode 100644 index 9949726..0000000 --- a/C12AnCpp/Core/inc/objContainer.h +++ /dev/null @@ -1,36 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef OBJCONTAINER_H -#define OBJCONTAINER_H - -// _______ STL includes __________ -#include -#include -#include - -// _______ Core includes __________ -#include "object.h" - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Temporary Data Container -// Algorithms will be able to read and write objects in this container -////////////////////////////////////////////////////////////////////// - class objContainer: public std::unordered_map> { - }; -} - -#endif - diff --git a/C12AnCpp/Core/inc/objMap.h b/C12AnCpp/Core/inc/objMap.h deleted file mode 100644 index 68a940a..0000000 --- a/C12AnCpp/Core/inc/objMap.h +++ /dev/null @@ -1,35 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "object.h" - -// _______ STL includes __________ -#include -#include - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Map of objects, data structure that can be stored in -// the Temporary Data Container -// the use of unique pointers ensures memory managment -////////////////////////////////////////////////////////////////////// - template - class objMap : public object, public std::unordered_map< T, std::unique_ptr > { - - }; -} - diff --git a/C12AnCpp/Core/inc/objVector.h b/C12AnCpp/Core/inc/objVector.h deleted file mode 100644 index 633d8bc..0000000 --- a/C12AnCpp/Core/inc/objVector.h +++ /dev/null @@ -1,34 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "object.h" - -// _______ STL includes __________ -#include -#include - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Vector of objects, data structure that can be stored in -// the Temporary Data Container -// the use of unique pointers ensures memory managment -////////////////////////////////////////////////////////////////////// - class objVector : public object, public std::vector< std::unique_ptr > { - - }; -} - diff --git a/C12AnCpp/Core/inc/object.h b/C12AnCpp/Core/inc/object.h deleted file mode 100644 index 4613c72..0000000 --- a/C12AnCpp/Core/inc/object.h +++ /dev/null @@ -1,31 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef _OBJECT_H -#define _OBJECT_H - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Base class for objects -////////////////////////////////////////////////////////////////////// - class object { - public: - virtual ~object() {} - - }; - -} - -#endif - diff --git a/C12AnCpp/Core/inc/outObjMgr.h b/C12AnCpp/Core/inc/outObjMgr.h deleted file mode 100644 index c70e40e..0000000 --- a/C12AnCpp/Core/inc/outObjMgr.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ -#pragma once - -// _______ Core includes __________ -#include "tuple.h" -#include "hist.h" -#include "objMap.h" - -// _______ STL includes __________ -#include -using std::string; - -namespace core { -////////////////////////////////////////////////////////////////////// -// -// Manager of user analysis objects, i.e. hists and ntuples -// This is the abstract class for specific implementation -// for backend libraries -////////////////////////////////////////////////////////////////////// - class outObjMgr { - public: - virtual ~outObjMgr() {}; - virtual bool hasTuple( string ); - virtual bool hasHist( string ); - - virtual tuple* getTuple( string ); - virtual hist* getHist( string ); - - // specific implementations - virtual tuple* mkTuple( string ) = 0; - virtual hist* mkHist( string, int, float, float ) = 0; - - virtual void open() = 0; - virtual void close() = 0; - protected: - objMap _tuples; - objMap _hists; - }; - -} - diff --git a/C12AnCpp/Core/inc/protoParticle.h b/C12AnCpp/Core/inc/protoParticle.h deleted file mode 100644 index fda0aba..0000000 --- a/C12AnCpp/Core/inc/protoParticle.h +++ /dev/null @@ -1,34 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "object.h" - -namespace core { - - class protoParticle : public core::object { - public: - virtual ~protoParticle() {} - int id; - int pid; - float px; - float py; - float pz; - float vx; - float vy; - float vz; - }; -} - diff --git a/C12AnCpp/Core/inc/tuple.h b/C12AnCpp/Core/inc/tuple.h deleted file mode 100644 index 9f55656..0000000 --- a/C12AnCpp/Core/inc/tuple.h +++ /dev/null @@ -1,47 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#ifndef _C12TUPLE_H -#define _C12TUPLE_H - -// _______ Core includes __________ -#include "object.h" - -// _______ STL includes __________ -#include -#include - -namespace core { -////////////////////////////////////////////////////////////////////// -// Abstract interface for ntuple -////////////////////////////////////////////////////////////////////// - class tuple : public object { - - public: - virtual ~tuple() {}; - - virtual void column( std::string, float ); - virtual void column( std::string, float, std::string ); - - // specific inplementation - virtual void fill() = 0; - - virtual void write() = 0; - protected: - std::map _vars; - }; - -} - -#endif - diff --git a/C12AnCpp/Core/src/algorithm.cpp b/C12AnCpp/Core/src/algorithm.cpp deleted file mode 100644 index 28d7ccc..0000000 --- a/C12AnCpp/Core/src/algorithm.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "algorithm.h" -#include - -using namespace core; - -void algorithm::bookObject( std::string name, std::shared_ptr obj){ - (*_obj)[name] = obj; -} - -void* algorithm::getObject( std::string name){ - return (*_obj)[name].get(); -} - -tuple* algorithm::ntuple( std::string name ){ - if( _oom->hasTuple( name ) ){ - return _oom->getTuple( name ); - } - else{ - return _oom->mkTuple( name ); - } -} - -hist* algorithm::histo( std::string name, int bins, float mi, float ma ){ - - if( _oom->hasHist( name ) ){ - return _oom->getHist( name ); - } - else { - return _oom->mkHist(name, bins, mi, ma ); - } -} - diff --git a/C12AnCpp/Core/src/hist.cpp b/C12AnCpp/Core/src/hist.cpp deleted file mode 100644 index 3bd5912..0000000 --- a/C12AnCpp/Core/src/hist.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "hist.h" - -using namespace core; - -hist::hist( std::string nn, std::string tt, int nb, float bmin, float bmax) : name(nn), title(tt), nbins(nb), min(bmin), max(bmax) {} diff --git a/C12AnCpp/Core/src/manager.cpp b/C12AnCpp/Core/src/manager.cpp deleted file mode 100644 index 6ef6633..0000000 --- a/C12AnCpp/Core/src/manager.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "manager.h" -#include -#include -using namespace std; -using namespace core; - -manager::manager() { - _obj = new objContainer(); - _alg = algContainer::instance(); -} - -manager::~manager() { - delete _obj; - delete _alg; -} - -void manager::addAlgorithm( algorithm *a ){ - a->setObjContainer(_obj); - a->setDataReader(_reader); - a->setOutMgr( _outmgr ); - _alg->push_back(a); -} - - -void manager::run() { - cout << " ====================== RUN ===================== " << endl; - - // check data stream status - if( _reader->getStatus() == false ) return; - - // initialization of all the algorithms - for( auto alg : (*_alg) ){ alg->init() ;} - - // loop over entries - while( _reader->next() ){ - - // run algorithms over the entry - for( auto alg : (*_alg) ){ alg->processEvent(); } - - // clear the temporary object container - _obj->clear(); - } - - // at the end of the loop on events call terminate - for( auto alg : (*_alg) ) alg->terminate() ; - - cout << " ====================== DONE ==================== " << endl; -} - - -// implementation of manager as singleton -manager* manager::_manager = 0; - -manager* manager::instance(){ - if( _manager == 0 ){ - _manager = new manager(); - } - showMessage(); - return _manager; -} - -void manager::showMessage() { - std::cout << "\n" - << " ___________ ___ _____ \n" - << " / ___< /_ |/ _ | ___ / ___/__ ___ \n" - << "/ /__ / / __// __ |/ _ \\/ /__/ _ \\/ _ \\ \n" - << "\\___//_/____/_/ |_/_//_/\\___/ .__/ .__/ \n" - << " /_/ /_/ \n" - << "Yet another analysis framework for CLAS12 data, but in C++ \n\n"; -} - diff --git a/C12AnCpp/Core/src/outObjMgr.cpp b/C12AnCpp/Core/src/outObjMgr.cpp deleted file mode 100644 index bb426e3..0000000 --- a/C12AnCpp/Core/src/outObjMgr.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "outObjMgr.h" - -using namespace core; - -bool outObjMgr::hasTuple( string tpl ){ - if( _tuples.find( tpl ) != _tuples.end() ) return true; - return false; -} - -bool outObjMgr::hasHist( string h ){ - if( _hists.find( h ) != _hists.end() ) return true; - return false; -} - -hist* outObjMgr::getHist( string n ){ - return dynamic_cast(_hists[n].get()); -} - -tuple* outObjMgr::getTuple( string n ){ - return dynamic_cast(_tuples[n].get()); -} - diff --git a/C12AnCpp/Core/src/tuple.cpp b/C12AnCpp/Core/src/tuple.cpp deleted file mode 100644 index 7817ab8..0000000 --- a/C12AnCpp/Core/src/tuple.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "tuple.h" - -using namespace core; - - -void tuple::column( std::string name, float var ){ - column(name,var,""); -} - -void tuple::column( std::string name, float var, std::string prefix ){ - name.insert(0,prefix); - _vars[name] = var; -} - diff --git a/C12AnCpp/Examples/Makefile b/C12AnCpp/Examples/Makefile deleted file mode 100644 index 1b7c4e4..0000000 --- a/C12AnCpp/Examples/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - -#INCRoot := $(C12RTOOL)/inc -LIBRoot := $(C12RTOOL) - -#INCTools := $(C12TOOLS)/inc -LIBTools := $(C12TOOLS) - -INCHIPO := $(HIPO) -LIBHIPO := $(CLAS12TOOL)/lib - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) -lEG - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -CFLAGS := $(ROOT) $(CFLAGS) - -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBClas) \ - -L$(LIBRoot) \ - -L$(LIBCORE) \ - -L$(LIBTools) \ - -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo -llz4 - - -all: $(patsubst %.cpp, %.out, $(wildcard *.cpp)) - -%.out: %.cpp Makefile - g++ $(DEBUG) $< -o $@ -I. $(INCLUDES) $(LIBS) $(ROOT) $(CFLAGS) diff --git a/C12AnCpp/Examples/ex01/Makefile b/C12AnCpp/Examples/ex01/Makefile deleted file mode 100644 index 1d0e8b1..0000000 --- a/C12AnCpp/Examples/ex01/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - -#INCRoot := $(C12RTOOL)/inc -LIBRoot := $(C12RTOOL) - -#INCTools := $(C12TOOLS)/inc -LIBTools := $(C12TOOLS) - -INCHIPO := $(HIPO) -LIBHIPO := $(CLAS12TOOL)/lib - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) -lEG - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -CFLAGS := $(ROOT) $(CFLAGS) - -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBClas) \ - -L$(LIBRoot) \ - -L$(LIBCORE) \ - -L$(LIBTools) \ - -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo -llz4 - - -all: - g++ $(DEBUG) -o ex01.exe ex01.cpp ex01_alg.cpp -I. $(INCLUDES) $(LIBS) $(ROOT) $(CFLAGS) - diff --git a/C12AnCpp/Examples/ex01/ex01.cpp b/C12AnCpp/Examples/ex01/ex01.cpp deleted file mode 100644 index d6c10a8..0000000 --- a/C12AnCpp/Examples/ex01/ex01.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include - -#include "Core/manager.h" - -#include "Root/rootOutObjMgr.h" -#include "Root/particleMaker.h" - -#include "Clas12/protoParticleReader.h" -#include "Clas12/hipoReader.h" - -#include "ex01_alg.h" - -int main( int argn, const char* argv[]) { - if( argn < 2 ) return -1; - - // instatiate the manager - // ---------------------- - core::manager *M = core::manager::instance(); - - // output manager. Here we have chosen to work with ROOT objects - // the output histograms and ntuples will be saved it "test.root" - // -------------------------------------------------------------- - root::rootOutObjMgr oom("test.root"); - M->setOutObjMgr( &oom ); - - // We want to analyse DST in hipo format - // So we create an hipoReader. - // We can pass either: - // - a .hipo file - // - a .txt file that conatins a list hipo file paths - // -------------------------------------------------------------- - clas12::hipoReader reader( argv[argn-1] ); - reader.open(); - M->addDataReader( &reader ); - - // =========== ALGORITHMS ========================= - // Here we specify the set of algorithms needed for our analysis - // ------------------------------------------------------------- - - // algorithm that reads the particle bank - clas12::protoParticleReader pr; - M->addAlgorithm( &pr ); - - // algorithm that creates particles species containers - root::particleMaker pm; - M->addAlgorithm( &pm ); - - // ----------------------------- - // USER SPECIFIC ALGORITHM - // ----------------------------- - ex01_alg ta; - M->addAlgorithm( &ta ); - - - // Run the analysis - // ---------------- - M->run(); - - // the program authmatically save and close the output file - return 0; - -} - - diff --git a/C12AnCpp/Examples/ex01/ex01_alg.cpp b/C12AnCpp/Examples/ex01/ex01_alg.cpp deleted file mode 100644 index ef2992b..0000000 --- a/C12AnCpp/Examples/ex01/ex01_alg.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "ex01_alg.h" - -#include "Root/particle.h" -#include "Core/objVector.h" -#include "Core/tuple.h" - -void ex01_alg::init(){ -} - -void ex01_alg::terminate(){ -} - -void ex01_alg::processEvent(){ - - // get the electrons from the temporary data container - // ---------------------------------------------------- - core::objVector *electrons = (core::objVector*) getObject("electrons"); - if( ! electrons ){ - //cout << "no electrons!!\n"; - return; - } - - // get a ntuple (it automatically creates it for you the first time you call it) - // the string represents the name of the output object. - // you will find a tree/ntuple with this name in your output file - // ----------------------------------------------------------------------------- - core::tuple *tpl = this->ntuple("etpl"); - - // get a histogram (also histograms are automatically created for you the first time - // you call it.) - // you need to specify the number of bins, the min and the max edges - // You will find it in the output file - // ------------------------------------------------------------------------------------ - core::hist *h = this->histo("he",500,0, 12); - - // loop over electrons - for( unsigned int i=0; i < electrons->size(); i++ ){ - - // careful: objVector contains unique_ptr of the particles - // that's why we need to call the ".get()" to retrive the actual pointer - // ---------------------------------------------------------------------- - root::particle *p1 = (root::particle*) (*electrons)[i].get(); - - // book columns of your ntuple - // --------------------------- - tpl->column( "P", p1->P() ); - tpl->column( "Theta", p1->Theta() ); - tpl->column( "Phi", p1->Phi() ); - tpl->column( "PID", p1->getPid() ); - - // fill the ntuple - // --------------- - tpl->fill(); - - // fill the histogram - // ------------------ - h->fill( p1->P() ); - } -} - diff --git a/C12AnCpp/Examples/ex01/ex01_alg.h b/C12AnCpp/Examples/ex01/ex01_alg.h deleted file mode 100644 index b122933..0000000 --- a/C12AnCpp/Examples/ex01/ex01_alg.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "Core/algorithm.h" - -class ex01_alg : public core::algorithm { - - public: - virtual void init(); - virtual void terminate(); - virtual void processEvent(); -}; diff --git a/C12AnCpp/Examples/ex02/Makefile b/C12AnCpp/Examples/ex02/Makefile deleted file mode 100644 index 91fed65..0000000 --- a/C12AnCpp/Examples/ex02/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - -#INCRoot := $(C12RTOOL)/inc -LIBRoot := $(C12RTOOL) - -#INCTools := $(C12TOOLS)/inc -LIBTools := $(C12TOOLS) - -INCHIPO := $(HIPO) -LIBHIPO := $(CLAS12TOOL)/lib - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) -lEG - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -CFLAGS := $(ROOT) $(CFLAGS) - -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBClas) \ - -L$(LIBRoot) \ - -L$(LIBCORE) \ - -L$(LIBTools) \ - -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo - - -all: - g++ $(DEBUG) -o ex02.exe ex02.cpp ex02_alg.cpp -I. $(INCLUDES) $(LIBS) $(ROOT) $(CFLAGS) - diff --git a/C12AnCpp/Examples/ex02/ex02.cpp b/C12AnCpp/Examples/ex02/ex02.cpp deleted file mode 100644 index 3138fa6..0000000 --- a/C12AnCpp/Examples/ex02/ex02.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include - -#include "Core/manager.h" - -#include "Root/rootOutObjMgr.h" -#include "Root/particleMaker.h" - -#include "Clas12/protoParticleReader.h" -#include "Clas12/recEventReader.h" -#include "Clas12/hipoReader.h" - -#include "Tools/combineParticles.h" - -#include "ex02_alg.h" - -int main( int argn, const char* argv[]) { - if( argn < 2 ) return 0; - - // instatiate the manager - // ---------------------- - core::manager *M = core::manager::instance(); - - // output manager. Here we have chosen to work with ROOT objects - // the output histograms and ntuples will be saved it "test.root" - // -------------------------------------------------------------- - root::rootOutObjMgr oom("test.root"); - M->setOutObjMgr( &oom ); - - // We want to analyse DST in hipo format - // So we create an hipoReader. - // We can pass either: - // - a .hipo file - // - a .txt file that conatins a list hipo file paths - // -------------------------------------------------------------- - clas12::hipoReader reader( argv[argn-1] ); - reader.open(); - M->addDataReader( &reader ); - - // =========== ALGORITHMS ========================= - // Here we specify the set of algorithms needed for our analysis - // ------------------------------------------------------------- - - // algorithm that reads the event bank - clas12::recEventReader er; - M->addAlgorithm( &er ); - - // algorithm that reads the particle bank - clas12::protoParticleReader pr; - M->addAlgorithm( &pr ); - - // algorithm that creates particles species containers - root::particleMaker pm; - M->addAlgorithm( &pm ); - - // combine particle: makes the pi pi candidates - tools::combineParticles cp( "pipi", "pions + pions"); - M->addAlgorithm( &cp ); - - // ----------------------------- - // USER SPECIFIC ALGORITHM - // ----------------------------- - ex02_alg ta; - M->addAlgorithm( &ta ); - - - // Run the analysis - // ---------------- - M->run(); - - // the program authmatically save and close the output file - return 0; - -} - - diff --git a/C12AnCpp/Examples/ex02/ex02_alg.cpp b/C12AnCpp/Examples/ex02/ex02_alg.cpp deleted file mode 100644 index 526875d..0000000 --- a/C12AnCpp/Examples/ex02/ex02_alg.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "ex02_alg.h" - -#include "Root/particle.h" -#include "Core/objVector.h" -#include "Core/tuple.h" - -#include "Clas12/recEvent.h" - -#include "Tools/kineTool.h" - -#include -void ex02_alg::init(){ -} - -void ex02_alg::terminate(){ -} - -void ex02_alg::processEvent(){ - - // get the rec event from the temporary data container - // ---------------------------------------------------- - clas12::recEvent* ev = (clas12::recEvent*) getObject("recEvent"); - if( ! ev ){ - //cout << "no electrons!!\n"; - return; - } - core::hist *htr = this->histo("htrigger", 32,0,32); - for( int i=0;i<32;i++) if( (ev->TRG >> i) & 0x1 ) htr->fill(i); - - // get the electrons from the temporary data container - // ---------------------------------------------------- - core::objVector *electrons = (core::objVector*) getObject("electrons"); - if( ! electrons ){ - //cout << "no electrons!!\n"; - return; - } - - // get the pi pi candidates, formed by the combineParticle algorithm - // ----------------------------------------------------------------- - core::objVector *pipi = (core::objVector*) getObject("pipi"); - if( ! pipi ){ - return; - } - - if( pipi->size() == 0 ) return; - - // get a ntuple (it automatically creates it for you the first time you call it) - // the string represents the name of the output object. - // you will find a tree/ntuple with this name in your output file - // ----------------------------------------------------------------------------- - core::tuple *tpl = this->ntuple("tpl"); - - // instantiate the kineTool: you can use to fill the kinematics of particles - // ------------------------------------------------------------------------- - tools::kineTool ktool; - - // loop over electrons - for( unsigned int i=0; i < electrons->size(); i++ ){ - - // careful: objVector contains unique_ptr of the particles - // that's why we need to call the ".get()" to retrive the actual pointer - // ---------------------------------------------------------------------- - root::particle *p1 = (root::particle*) (*electrons)[i].get(); - - if( p1->getPid() < 0 ) continue; - - //if( p1->P() < 1. ) continue; - - // book columns of your ntuple - // --------------------------- - tpl->column( "P", p1->P(), "e_" ); - tpl->column( "Theta", p1->Theta() , "e_" ); - tpl->column( "Phi", p1->Phi(), "e_" ); - - for( unsigned int j=0; j < pipi->size(); j++ ){ - root::particle *pp = (root::particle*) (*pipi)[j].get(); - if( pp->getDaughter(0)->getPid() == pp->getDaughter(1)->getPid() ) continue; - - //if( pp->getDaughter(0)->P() < .5 ) continue; - - tpl->column( "M", pp->M(), "pipi_"); - ktool.execute( tpl, pp , "pipi_"); - ktool.execute( tpl, pp->getDaughter(0) , "pi1_"); - ktool.execute( tpl, pp->getDaughter(1) , "pi2_"); - - // fill the ntuple - // --------------- - tpl->fill(); - } - - - } -} - diff --git a/C12AnCpp/Examples/ex02/ex02_alg.h b/C12AnCpp/Examples/ex02/ex02_alg.h deleted file mode 100644 index d0f3b00..0000000 --- a/C12AnCpp/Examples/ex02/ex02_alg.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "Core/algorithm.h" - -class ex02_alg : public core::algorithm { - - public: - virtual void init(); - virtual void terminate(); - virtual void processEvent(); -}; diff --git a/C12AnCpp/Examples/ex_lund/Makefile b/C12AnCpp/Examples/ex_lund/Makefile deleted file mode 100644 index 235e5ba..0000000 --- a/C12AnCpp/Examples/ex_lund/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - -#INCRoot := $(C12RTOOL)/inc -LIBRoot := $(C12RTOOL) - -#INCTools := $(C12TOOLS)/inc -LIBTools := $(C12TOOLS) - -#INCLUND := $(C12LUND)/inc -LIBLUND := $(C12LUND) - -INCHIPO := $(HIPO) -LIBHIPO := $(CLAS12TOOL)/lib - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) -lEG - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -CFLAGS := $(ROOT) $(CFLAGS) - -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBClas) \ - -L$(LIBLUND) \ - -L$(LIBRoot) \ - -L$(LIBCORE) \ - -L$(LIBTools) \ - -L$(LIBHIPO) \ - -lClas12 -lRootTools -lTools -lC12Core -lhipo -lC12Lund - - -all: - g++ $(DEBUG) -o ex_lund.exe ex_lund.cpp ex_lund_alg.cpp -I. $(INCLUDES) $(LIBS) $(ROOT) $(CFLAGS) - diff --git a/C12AnCpp/Examples/ex_lund/ex_lund.cpp b/C12AnCpp/Examples/ex_lund/ex_lund.cpp deleted file mode 100644 index b080ee1..0000000 --- a/C12AnCpp/Examples/ex_lund/ex_lund.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include - -#include "Core/manager.h" -#include "Core/tuple.h" - -#include "Root/rootOutObjMgr.h" -#include "Root/particleMaker.h" - -#include "Lund/lundReader.h" -#include "Lund/protoParticleMaker.h" - -#include "ex_lund_alg.h" - -int main( int argn, const char* argv[]) { - - // instatiate the manager - // ---------------------- - core::manager *M = core::manager::instance(); - - // output manager. Here we have chosen to work with ROOT objects - // the output histograms and ntuples will be saved it "test.root" - // -------------------------------------------------------------- - root::rootOutObjMgr oom("test.root"); - M->setOutObjMgr( &oom ); - - // We want to analyse LUND files - // So we create a lundReader - // -------------------------------------------------------------- - lund::lundReader reader( argv[argn-1] ); - M->addDataReader( &reader ); - - // =========== ALGORITHMS ========================= - // Here we specify the set of algorithms needed for our analysis - // ------------------------------------------------------------- - - // algorithm that reads the particles in the lund format - lund::protoParticleMaker pr; - M->addAlgorithm( &pr ); - - // algorithm that creates particles species containers - root::particleMaker pm; - M->addAlgorithm( &pm ); - - // ----------------------------- - // USER SPECIFIC ALGORITHM - // ----------------------------- - ex_lund_alg ta; - M->addAlgorithm( &ta ); - - - // Run the analysis - // ---------------- - M->run(); - - // the program authmatically save and close the output file - return 0; - -} - - diff --git a/C12AnCpp/Examples/ex_lund/ex_lund_alg.cpp b/C12AnCpp/Examples/ex_lund/ex_lund_alg.cpp deleted file mode 100644 index 7a85828..0000000 --- a/C12AnCpp/Examples/ex_lund/ex_lund_alg.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "ex_lund_alg.h" - -#include "Root/particle.h" - -#include "Core/objVector.h" -#include "Core/tuple.h" - -void ex_lund_alg::init(){ -} - -void ex_lund_alg::terminate(){ -} - -void ex_lund_alg::processEvent(){ - - // get the electrons from the temporary data container - // ---------------------------------------------------- - core::objVector *electrons = (core::objVector*) getObject("electrons"); - if( ! electrons ){ - //cout << "no electrons!!\n"; - return; - } - - // get a ntuple (it automatically creates it for you the first time you call it) - // the string represents the name of the output object. - // you will find a tree/ntuple with this name in your output file - // ----------------------------------------------------------------------------- - core::tuple *tpl = this->ntuple("etpl"); - - // get a histogram (also histograms are automatically created for you the first time - // you call it.) - // you need to specify the number of bins, the min and the max edges - // You will find it in the output file - // ------------------------------------------------------------------------------------ - core::hist *h = this->histo("he",500,0, 12); - - // loop over electrons - for( unsigned int i=0; i < electrons->size(); i++ ){ - - // careful: objVector contains unique_ptr of the particles - // that's why we need to call the ".get()" to retrive the actual pointer - // ---------------------------------------------------------------------- - root::particle *p1 = (root::particle*) (*electrons)[i].get(); - - // book columns of your ntuple - // --------------------------- - tpl->column( "P", p1->P() ); - tpl->column( "Theta", p1->Theta() ); - tpl->column( "Phi", p1->Phi() ); - tpl->column( "PID", p1->getPid() ); - - // fill the ntuple - // --------------- - tpl->fill(); - - // fill the histogram - // ------------------ - h->fill( p1->P() ); - } -} - diff --git a/C12AnCpp/Examples/ex_lund/ex_lund_alg.h b/C12AnCpp/Examples/ex_lund/ex_lund_alg.h deleted file mode 100644 index fac1308..0000000 --- a/C12AnCpp/Examples/ex_lund/ex_lund_alg.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "Core/algorithm.h" - -class ex_lund_alg : public core::algorithm { - - public: - virtual void init(); - virtual void terminate(); - virtual void processEvent(); -}; diff --git a/C12AnCpp/Examples/histogram.h b/C12AnCpp/Examples/histogram.h deleted file mode 100644 index 68e93ba..0000000 --- a/C12AnCpp/Examples/histogram.h +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace std; - -class hist { - public: - hist( int, float, float); - void fill( float ); - void show(); - void write( ofstream &); - - private: - vector bins; - float min; - float max; -}; - -hist::hist( int nbins, float x, float y){ - bins.reserve( nbins ); - for( int i=0;i max ) return; - - int i = floor( (x-min)/(max-min)*bins.size() ); - bins[i]++; -} - -void hist::show(){ - float w = (max-min)/bins.size(); - cout << min << endl; - for( int i=0; i -#include -#include -using namespace std; - -#include "Core/algorithm.h" -#include "Core/objMap.h" -#include "Core/objVector.h" -#include "Core/tuple.h" -using namespace core; - -#include "Root/particle.h" -#include "Core/manager.h" -#include "Root/rootOutObjMgr.h" -#include "Root/particleMaker.h" -using namespace root; - - - -#include "Clas12/hipoReader.h" -#include "Clas12/protoParticleReader.h" -#include "Clas12/recTrack.h" -#include "Clas12/recTrackReader.h" -using namespace clas12; - - -#include "Tools/kineTool.h" -#include "Tools/combineParticles.h" -#include "Tools/utils.h" - -class test : public core::algorithm { - - public: - virtual void init(); - virtual void terminate(); - virtual void processEvent(); -}; - -void test::init(){ -} - -void test::terminate(){ -} - -void test::processEvent(){ - - core::objMap *tracks = (core::objMap *)getObject("recTracks"); - if( ! tracks ) return; - - core::objVector *e = (core::objVector*) getObject("electrons"); - if( ! e ) return; - if( e->size() == 0 ) return; - - double Q2,xB,W2; - std::tie(Q2,xB,W2) = tools::utils::getDISvariables( (root::particle*) (*e)[0].get(), 10.56, 2212 ); - - core::tuple *tdis = this->ntuple("dis"); - tdis->column("Q2", Q2); - tdis->column("xB", xB); - tdis->column("W2", W2); - tdis->fill(); - - core::objVector *photons = (core::objVector*) getObject("photons"); - if( ! photons ){ - return; - } - - - tools::kineTool Ktool; - - core::tuple *tpl = this->ntuple("pi0"); - - core::hist *h = this->histo("hpi0",500,0, 1); - - for( int i=0; i < photons->size(); i++ ){ - particle *p1 = (root::particle*) (*photons)[i].get(); - //if ( p1->P() < 2.5 ) continue; - for( int j=i+1; j < photons->size(); j++){ - particle *p2 = (root::particle*) (*photons)[j].get(); - //if ( p2->P() < 1.5 ) continue; - root::particle l = *p1 + *p2; - //cout << l.M() << endl; - h->fill(l.M()); - tpl->column( "M", l.M() ); - tpl->column( "P", l.P() ); - tpl->column( "Theta", l.Theta() ); - tpl->column( "Phi", l.Phi() ); - - Ktool.execute( tpl, p1, "pi0_" ); - - tpl->fill(); - } - } - - - core::objVector *pi0s = (core::objVector*) getObject("pi0s"); - if( ! pi0s ){ - cout << "no pi0s!!\n"; - return; - } - core::tuple *tplpi0 = this->ntuple("tuplePi0"); - for( int i=0; isize(); i++ ){ - particle *pi = (root::particle*) (*pi0s)[i].get(); - tplpi0->column( "M", pi->M(), "pi0_" ); - tplpi0->column( "Theta", pi->Theta(), "pi0_" ); - tplpi0->column( "Phi", pi->Phi(), "pi0_" ); - - Ktool.execute( tplpi0, pi, "pi0_"); - Ktool.execute( tplpi0, pi->getDaughter(0), "gamma1_"); - Ktool.execute( tplpi0, pi->getDaughter(1), "gamma2_"); - - tplpi0->fill(); - } -} - -#include "TFile.h" - -int main( int argn, const char* argv[]) { - - - core::manager *M = core::manager::instance(); - rootOutObjMgr p("prova.root"); - M->setOutObjMgr( &p ); - clas12::hipoReader reader( argv[argn-1] ); - reader.open(); - M->addDataReader( &reader ); - - clas12::protoParticleReader pr; - clas12::recTrackReader tr; - root::particleMaker pm; - tools::combineParticles pi0m( "pi0s"," photons + photons "); - - test ta; - - M->addAlgorithm( &pr ); - M->addAlgorithm( &tr ); - M->addAlgorithm( &pm ); - M->addAlgorithm( &pi0m ); - M->addAlgorithm( &ta ); - -cout << "aaaa \n"; - M->run(); -cout << "bbbb \n"; - - p.close(); - return 0; - -} - - diff --git a/C12AnCpp/LICENSE b/C12AnCpp/LICENSE deleted file mode 100644 index 94a9ed0..0000000 --- a/C12AnCpp/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/C12AnCpp/Lund/Makefile b/C12AnCpp/Lund/Makefile deleted file mode 100644 index 4bbe0e9..0000000 --- a/C12AnCpp/Lund/Makefile +++ /dev/null @@ -1,25 +0,0 @@ - -INCDIR := inc -SRCDIR := src -OBJDIR := build - -LIBCORE := $(C12CORE) - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 -INCLUDES := -I$(CLAS12CPPBASE)/includes -LIBS := -L$(LIBCORE) - -BUILD := $(shell mkdir -p build) - -.PHONY: all clean -all: $(BUILD) $(OBJECTS) - $(CXX) $(DEBUG) -I$(INCDIR) $(INCLUDES) $(LIBS) -o libC12Lund.so -shared $(CFLAGS) $(OBJECTS) - -$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp - $(CXX) $(DEBUG) $(CFLAGS) -I$(INCDIR) $(INCLUDES) $(LIBS) -c $< -o $@ - -clean: - rm build/*; rm libC12Lund.so diff --git a/C12AnCpp/Lund/inc/lundReader.h b/C12AnCpp/Lund/inc/lundReader.h deleted file mode 100644 index 334fcf6..0000000 --- a/C12AnCpp/Lund/inc/lundReader.h +++ /dev/null @@ -1,48 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/dataReader.h" - -// _______ STL includes __________ -#include -#include -#include -#include -#include - -namespace lund { - - struct lundEv { - std::array header; - std::vector< std::array > parts; - }; - - class lundReader : public core::dataReader { - public: - lundReader( std::string ); - void open() {}; - void close(); - void* next(); - - lundEv* getLundEv() { return _ev.get(); } - - private: - std::unique_ptr _ev; - std::ifstream _file; - }; - -} - diff --git a/C12AnCpp/Lund/inc/protoParticle.h b/C12AnCpp/Lund/inc/protoParticle.h deleted file mode 100644 index b190e69..0000000 --- a/C12AnCpp/Lund/inc/protoParticle.h +++ /dev/null @@ -1,45 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/object.h" -#include "Core/protoParticle.h" - -namespace lund { - - class protoParticle : public core::protoParticle { - public: - virtual ~protoParticle() {} - - // following the definitions at: - // https://gemc.jlab.org/gemc/html/documentation/generator/lund.html - /*int id;*/ - float lifetime; - int type; - /*int pid;*/ - int motherID; - int daughterID; - /*float px;*/ - /*float py;*/ - /*float pz;*/ - float E; - float M; - /*float vx;*/ - /*float vy;*/ - /*float vz;*/ - }; -} - - diff --git a/C12AnCpp/Lund/inc/protoParticleMaker.h b/C12AnCpp/Lund/inc/protoParticleMaker.h deleted file mode 100644 index f95c0d3..0000000 --- a/C12AnCpp/Lund/inc/protoParticleMaker.h +++ /dev/null @@ -1,36 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/algorithm.h" - -// _______ Lund includes __________ -#include "Lund/lundReader.h" - - -namespace lund { - - class protoParticleMaker : public core::algorithm { - - public: - - virtual void init() {} - virtual void processEvent(); - virtual void terminate() {} - - }; - -} - diff --git a/C12AnCpp/Lund/src/lundReader.cpp b/C12AnCpp/Lund/src/lundReader.cpp deleted file mode 100644 index 2e1b001..0000000 --- a/C12AnCpp/Lund/src/lundReader.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "Lund/lundReader.h" -using namespace lund; - -#include -#include -#include - -lundReader::lundReader( std::string name ){ - _file.open( name ); - if( ! _file ){ - setStatus( false ); - std::cerr << " *** [ERROR] lundReader: bad file name\n"; - } - setStatus(true); - _ev = std::make_unique(); -} - -void lundReader::close() { - _file.close(); -} - -void* lundReader::next(){ - // clear previos particles - _ev->parts.clear(); - - std::string line; - // read header - if( ! std::getline( _file, line ) ) { return NULL; } - std::stringstream strs(line); - std::string word; - for( unsigned int i=0;i<_ev->header.size();i++){ - strs >> word; - _ev->header[i] = std::stof( word ); - } - - // get N lines - for( int i=0; i < (int) _ev->header[0]; i++ ){ - std::getline( _file, line ); - std::stringstream ss(line); - std::array ar; - for( unsigned int j=0;j> word; - ar[j] = std::stof( word ); - } - _ev->parts.push_back( ar ); - } - return _ev.get(); -} - diff --git a/C12AnCpp/Lund/src/protoParticleMaker.cpp b/C12AnCpp/Lund/src/protoParticleMaker.cpp deleted file mode 100644 index 8ef42db..0000000 --- a/C12AnCpp/Lund/src/protoParticleMaker.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "Lund/protoParticleMaker.h" -#include "Lund/protoParticle.h" -#include "Lund/lundReader.h" -using namespace lund; - -#include "Core/objVector.h" - -#include -using namespace std; - -void protoParticleMaker::processEvent() { - - lundEv *ev = static_cast(getDataReader())->getLundEv(); - if( ! ev ) return; - - shared_ptr particles = make_shared(); - - for( auto pl : ev->parts ){ - unique_ptr p = make_unique(); - p->id = pl[0]; - p->lifetime = pl[1]; - p->type = pl[2]; - p->pid = pl[3]; - p->motherID = pl[4]; - p->daughterID = pl[5]; - p->px = pl[6]; - p->py = pl[7]; - p->pz = pl[8]; - p->E = pl[9]; - p->M = pl[10]; - p->vx = pl[11]; - p->vy = pl[12]; - p->vz = pl[13]; - - particles->push_back( move(p) ); - } - - bookObject( "protoParticles", particles); -} - diff --git a/C12AnCpp/Makefile b/C12AnCpp/Makefile deleted file mode 100644 index 1ccb39f..0000000 --- a/C12AnCpp/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -.PHONY: all - -list = Core Clas12 Root Tools Lund -all: - for i in $(list); do mkdir -p includes/$$i ; cp $$i/inc/* includes/$$i ; done - for i in $(list); do $(MAKE) -C $$i ; done - -clean: - for i in $(list); do $(MAKE) clean -C $$i ; done diff --git a/C12AnCpp/README.md b/C12AnCpp/README.md deleted file mode 100644 index d676e7d..0000000 --- a/C12AnCpp/README.md +++ /dev/null @@ -1,146 +0,0 @@ -``` - ___________ ___ _____ - / ___< /_ |/ _ | ___ / ___/__ ___ - / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ - \___//_/____/_/ |_/_//_/\___/ .__/ .__/ - /_/ /_/ - Yet another analysis framework for CLAS12 data, but in C++ -``` - - -# C12AnCpp -C++ based analysis framework for CLAS12 data - -The current implementation allows the user to analyse **CLAS12 DST** data in hipo or **LUND** files. - -The goal of this framework it to make easy for the user to extract information from the data and to save ntuples or histograms. The current implementation allows the user to save ROOT TTree and TH1F or CSV histograms and ntuples. - -The main feature of this framework are: - -+ High modularity: new features can be easily added and modifications to will have only a limited local impact -+ Promotion of **collaborative work**: users can contribute with new features (tools or algorithms) that can be easily included and used in others' analyses. - -# Installation - -## Prerequisites - -+ This code is written in C++14. Check if your compiler is compatible, if not.. why are you living in the past?, install a newer compiler!! :) -For example, g++-5 or newer - -+ ROOT6 is required. If not installed, [here](https://root.cern.ch/) - -+ You should have already cloned/installed Clas12Tool. If not, [here](https://github.com/gavalian/Clas12Tool) - -## Set up the environment - -+ Edit the path to Clas12Tool in `setEnv.sh` (or `setEnv.csh` for the tcsh users) - -```bash -export CLAS12TOOL=/YOUR/PATH/GOES/HERE/Clas12Tool -``` - -+ Source the environment - -```bash -source setEnv.sh -``` - -It is strongly suggested that you automatically source the environment. The following line allows you to add it to the `.bashrc` - -```bash -echo "source `pwd`/setEnv.sh" >> $HOME/.bashrc -``` - -or for `tcsh` user - -```tcsh -echo echo "source `pwd`/setEnv.csh" >> $HOME/.cshrc -``` - -+ Compile. If you want debug information, export the variable `DEBUG="-g"` - -``` bash -make -``` - -for faster compilation, add `-j` and the number of cores you want to use. - -# User analysis **algorithms** - -User analyses are indeed algorithms. - -An algorithm should inherit from `core::algorithm` and it should implement (at least) three methods: -```c++ -void init(); // called once at the beginning of the execution - -void processEvent(); // this method will contain the _actual_ code of analysis - -void terminate(); // called once at the end of the execution -``` - -As an example: - -```c++ -// ex01_alg.h -#include "Core/algorithm.h" - -class test : public core::algorithm { - - public: - virtual void init(); - virtual void terminate(); - virtual void processEvent(); -}; -``` - -```c++ -// ex01_alg.cpp -#include "ex01_alg.h" - -#include "Root/particle.h" -#include "Core/objVector.h" -#include "Core/tuple.h" - -void ex01_alg::init(){ -} - -void ex01_alg::terminate(){ -} - -void ex01_alg::processEvent(){ - - core::objVector *electrons = (core::objVector*) getObject("electrons"); - if( ! electrons ){ - return; - } - - // get a ntuple - core::tuple *tpl = this->ntuple("etpl"); - - // get a histogram - core::hist *h = this->histo("he",500,0, 12); - - for( unsigned int i=0; i < electrons->size(); i++ ){ - - root::particle *p1 = (root::particle*) (*electrons)[i].get(); - - tpl->column( "P", p1->P() ); - tpl->column( "Theta", p1->Theta() ); - tpl->column( "Phi", p1->Phi() ); - tpl->column( "PID", p1->getPid() ); - - tpl->fill(); - h->fill( p1->P() ); - } -} - -``` - -For more detailed examples, browse inside the Examples folder - -# Tools - -Tools can be: - -+ Implementations of specific tasks that have to be done over an object. Typical use: filling ntuples with specific variables. -+ Algorithms that are of common interest diff --git a/C12AnCpp/Root/Makefile b/C12AnCpp/Root/Makefile deleted file mode 100644 index 6a1442d..0000000 --- a/C12AnCpp/Root/Makefile +++ /dev/null @@ -1,35 +0,0 @@ - -#INCDIR := inc -SRCDIR := src -OBJDIR := build - -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -BUILD := $(shell mkdir -p build) - -CFLAGS := $(ROOT) $(CFLAGS) - -INCLUDES := -I$(CLAS12CPPBASE)/includes -LIBS := -L$(LIBCORE) -L$(LIBClas) - -.PHONY: all clean -all: $(BUILD) $(OBJECTS) - $(CXX) $(DEBUG) -I$(INCDIR) $(INCLUDES) $(LIBS) -o libRootTools.so -shared $(CFLAGS) $(OBJECTS) - -$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp - $(CXX) $(DEBUG) $(CFLAGS) $(INCLUDES) $(LIBS) -c $< -o $@ - -clean: - rm build/*; rm libRootTools.so; rm -rf build diff --git a/C12AnCpp/Root/inc/particle.h b/C12AnCpp/Root/inc/particle.h deleted file mode 100644 index 52c6c4c..0000000 --- a/C12AnCpp/Root/inc/particle.h +++ /dev/null @@ -1,52 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ ROOT includes __________ -#include "TLorentzVector.h" - -// _______ Core includes __________ -#include "Core/object.h" -#include "Core/protoParticle.h" - -// _______ STL includes __________ -#include - -namespace root { - class particle : public core::object, public TLorentzVector { - public: - particle( int id, float x, float y, float z, float t) : TLorentzVector(x,y,z,t) { _pid = id; } - particle( int id, float x, float y, float z); - particle( int id, TLorentzVector v ) : TLorentzVector(v) { _pid = id; } - particle( const particle & ); - static particle* getParticle( int, float, float, float); - void setPid( int p ) { _pid = p; } - int getPid() const { return _pid; } - - void addDaughter( particle *); - int getNdaughters() const; - particle* getDaughter( int ) const; - - void setProtoParticle( core::protoParticle *p ) { _ppart = p; } - core::protoParticle* getProtoParticle() const { return _ppart; } - - virtual particle operator + ( particle&) const; - virtual particle operator - ( particle&) const; - private: - int _pid; - std::vector _daughters; - core::protoParticle *_ppart; - }; -}; - diff --git a/C12AnCpp/Root/inc/particleMaker.h b/C12AnCpp/Root/inc/particleMaker.h deleted file mode 100644 index 5b8e536..0000000 --- a/C12AnCpp/Root/inc/particleMaker.h +++ /dev/null @@ -1,37 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/algorithm.h" - -// _______ STL includes __________ -#include -#include - -namespace root { - - class particleMaker : public core::algorithm { - - public: - virtual void init(); - virtual void processEvent(); - virtual void terminate() {} - - private: - - std::unordered_map _pname; - }; -} - diff --git a/C12AnCpp/Root/inc/rHist.h b/C12AnCpp/Root/inc/rHist.h deleted file mode 100644 index b7ba86f..0000000 --- a/C12AnCpp/Root/inc/rHist.h +++ /dev/null @@ -1,37 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ -#pragma once - -// _______ Core includes __________ -#include "Core/hist.h" - -// _______ ROOT includes __________ -#include "TH1F.h" - -// _______ STL includes __________ -#include -using std::string; - -namespace root { - - class rHist : public core::hist { - public: - rHist( string, string, int, float, float); - virtual ~rHist() { delete _hist; } - virtual void fill( float ); - private: - TH1F *_hist; - }; - -}; - diff --git a/C12AnCpp/Root/inc/rTuple.h b/C12AnCpp/Root/inc/rTuple.h deleted file mode 100644 index a0c58b5..0000000 --- a/C12AnCpp/Root/inc/rTuple.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ -#pragma once - -// _______ Core includes __________ -#include "Core/tuple.h" - -// _______ STL includes __________ -#include -using std::string; - -// _______ ROOT includes __________ -#include "TTree.h" - -namespace root { - - class rTuple : public core::tuple { - public: - rTuple( string, string ); - virtual ~rTuple() { delete tree; } - - /*void column( string, float * );*/ - void fill(); - void write(); - private: - TTree *tree; - }; - -}; - diff --git a/C12AnCpp/Root/inc/rootOutObjMgr.h b/C12AnCpp/Root/inc/rootOutObjMgr.h deleted file mode 100644 index be84d88..0000000 --- a/C12AnCpp/Root/inc/rootOutObjMgr.h +++ /dev/null @@ -1,48 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -// _______ Core includes __________ -#include "Core/outObjMgr.h" -#include "Core/tuple.h" -#include "Core/hist.h" - -// _______ STL includes __________ -#include -using std::string; - -// _______ ROOT includes __________ -#include "TFile.h" - -namespace root { -////////////////////////////////////////////////////////////////////// -// -// Manager of user analysis objects, i.e. hists and ntuples in ROOT -// Output objects will be saved in a single ROOT file -////////////////////////////////////////////////////////////////////// - class rootOutObjMgr : public core::outObjMgr { - public: - rootOutObjMgr( string ); - ~rootOutObjMgr(); - virtual core::tuple* mkTuple( string ); - virtual core::hist* mkHist( string, int, float, float ); - virtual void open(); - virtual void close(); - private: - string _fname; - TFile *_fout; - }; - -}; - diff --git a/C12AnCpp/Root/src/particle.cpp b/C12AnCpp/Root/src/particle.cpp deleted file mode 100644 index 8307789..0000000 --- a/C12AnCpp/Root/src/particle.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "Root/particle.h" - -#include "TDatabasePDG.h" -#include "TMath.h" - -using namespace root; - -particle::particle( const particle &p ){ - _pid = p.getPid(); - SetXYZT( p.X(),p.Y(),p.Z(),p.T()); - for( int i=0; iGetParticle(pid)->Mass(); - float p0 = TMath::Sqrt(px*px + py*py + pz*pz + m*m); - SetXYZT( px,py,pz,p0); - _ppart = 0x0; -} - -particle* particle::getParticle( int pid, float px, float py, float pz){ - - float m = TDatabasePDG::Instance()->GetParticle(pid)->Mass(); - float p0 = TMath::Sqrt(px*px + py*py + pz*pz + m*m); - return new particle( pid, px, py,pz,p0); -} - - -void particle::addDaughter( particle *p ){ - _daughters.push_back( p ); -} - -int particle::getNdaughters() const { return _daughters.size(); } - -particle* particle::getDaughter( int i ) const { return _daughters[i]; } - -particle particle::operator + ( particle& p1 )const { - TLorentzVector vn( this->Vect() + p1.Vect(), this->T() + p1.T() ); - - particle pn( 0, vn); - pn.addDaughter( const_cast(this) ); - pn.addDaughter( &p1 ); - return pn; -} - - -particle particle::operator - ( particle& p1 )const { - TLorentzVector vn( this->Vect() - p1.Vect(), this->T() - p1.T() ); - - particle pn( 0, vn); - pn.addDaughter( const_cast(this) ); - pn.addDaughter( &p1 ); - return pn; -} diff --git a/C12AnCpp/Root/src/particleMaker.cpp b/C12AnCpp/Root/src/particleMaker.cpp deleted file mode 100644 index c388bd1..0000000 --- a/C12AnCpp/Root/src/particleMaker.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include "Root/particleMaker.h" - -// core includes -#include "Core/objVector.h" -#include "Core/object.h" -#include "Core/protoParticle.h" - -// root includes -#include "Root/particle.h" - -// ROOT include -#include "TDatabasePDG.h" - -#include -#include -#include -#include -#include -using std::vector; - - -using namespace root; -void particleMaker::init(){ - // adding the missing deuteron to the pdg table - TDatabasePDG::Instance()->AddParticle("deuteron","deuteron",1.875613,true,0,+1,"nuclei",45); - - _pname[11] = "electrons"; - _pname[211] = "pions"; - _pname[2212] = "protons"; - _pname[2112] = "neutrons"; - _pname[22] = "photons"; - _pname[45] = "deuterons"; - _pname[321] = "kaons"; - _pname[0] = "unidentified"; -} - -// -// transform protoParitcles in particles, sorting them by species -void particleMaker::processEvent(){ - - // get protoparticles from temporary container - core::objVector *vpp = (core::objVector *)getObject("protoParticles"); - if( ! vpp ) return; - - // map of particle vectors - std::unordered_map> particles; - - // loop over protoparticles - for( unsigned int i=0; isize();i++){ - core::protoParticle *p = dynamic_cast( (*vpp)[i].get() ); - - // skip NAN value particles - if( p->px != p->px ) continue; - - // create paticles and sort them by type - if( particles.find(abs(p->pid)) == particles.end() ){ - particles[abs(p->pid)] = std::make_shared(); - //std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); - std::unique_ptr part = std::make_unique(p->pid, p->px, p->py, p->pz ); - part->setProtoParticle( p ); - particles[abs(p->pid)]->push_back( std::move(part) ); - } - else { - //std::unique_ptr part = std::make_unique(*(particle::getParticle( p->pid, p->px, p->py, p->pz ))); - std::unique_ptr part = std::make_unique(p->pid, p->px, p->py, p->pz ); - part->setProtoParticle( p ); - particles[abs(p->pid)]->push_back( std::move(part) ); - } - } - - for( auto const &p : particles ){ - bookObject( _pname[p.first], p.second ); - } -} - diff --git a/C12AnCpp/Root/src/rHist.cpp b/C12AnCpp/Root/src/rHist.cpp deleted file mode 100644 index 9503a88..0000000 --- a/C12AnCpp/Root/src/rHist.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "Root/rHist.h" - -using namespace root; - -rHist::rHist(string name, string title, int n, float minedge, float maxedge) : hist(name,title,n,minedge,maxedge){ - - _hist = new TH1F( name.c_str(), title.c_str(), n, minedge, maxedge); -} - -void rHist::fill( float val ){ - _hist->Fill( val ); -} - diff --git a/C12AnCpp/Root/src/rTuple.cpp b/C12AnCpp/Root/src/rTuple.cpp deleted file mode 100644 index e3c7a04..0000000 --- a/C12AnCpp/Root/src/rTuple.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "Root/rTuple.h" -#include - -using namespace root; - -rTuple::rTuple( string name , string title ){ - tree = new TTree( name.c_str(), title.c_str() ); -} - -void rTuple::fill(){ - for( auto &v : _vars ){ - string name = v.first; - //std::cout << "first " << name << " val " << val << "\n"; - if( ! tree->GetBranch( name.c_str() ) ){ - tree->Branch( name.c_str(), &v.second ); - } - else{ - tree->SetBranchAddress( name.c_str(), &v.second ); - } - } - tree->Fill(); - _vars.clear(); -} - -void rTuple::write(){ - tree->Write(); -}; - diff --git a/C12AnCpp/Root/src/rootOutObjMgr.cpp b/C12AnCpp/Root/src/rootOutObjMgr.cpp deleted file mode 100644 index e18d555..0000000 --- a/C12AnCpp/Root/src/rootOutObjMgr.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "Root/rootOutObjMgr.h" - -using namespace root; - -#include "Root/rTuple.h" -#include "Root/rHist.h" -#include - -rootOutObjMgr::rootOutObjMgr( string foutname ) : _fout(0x0){ - _fname = foutname; - open(); -} - -rootOutObjMgr::~rootOutObjMgr(){ - close(); -} - -void rootOutObjMgr::open() { - if( ! _fout ){ - _fout = TFile::Open( _fname.c_str(), "recreate"); - } -} - -void rootOutObjMgr::close() { - if( ! _fout ){ - return; - } - if( _fout->IsOpen() ){ - _fout->Write(); - _tuples.clear(); - _hists.clear(); - _fout->Close(); - } -} - -core::tuple* rootOutObjMgr::mkTuple( std::string name ){ - - std::string title = name; - title.insert(0, "ntuple "); - - _tuples[name] = std::make_unique(name,title); - return dynamic_cast(_tuples[name].get()); -} - -core::hist* rootOutObjMgr::mkHist( std::string name, int n, float m, float M ){ - - std::string title = name; - title.insert(0, "histo "); - - _hists[name] = std::make_unique(name,title, n, m, M); - return dynamic_cast(_hists[name].get()); -} - diff --git a/C12AnCpp/Tools/Makefile b/C12AnCpp/Tools/Makefile deleted file mode 100644 index 0997246..0000000 --- a/C12AnCpp/Tools/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -#INCDIR := inc -SRCDIR := src -OBJDIR := build - -#INCCORE := $(C12CORE)/inc -LIBCORE := $(C12CORE) - -#INCClas := $(C12CLAS12)/inc -LIBClas := $(C12CLAS12) - -#INCRoot := $(C12RTOOL)/inc -LIBRoot := $(C12RTOOL) - - -ROOT := $(shell root-config --cflags) $(shell root-config --libs) - -SOURCES := $(wildcard $(SRCDIR)/*.cpp) -OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) - -CFLAGS := -Wall -O2 -fPIC -std=c++14 - -BUILD := $(shell mkdir -p build) - -CFLAGS := $(ROOT) $(CFLAGS) - -#INCLUDES := -I$(INCCORE) -I$(INCClas) -I$(INCRoot) -I$(INCHIPO) -INCLUDES := -I$(CLAS12CPPBASE)/includes -I$(INCHIPO) -LIBS := -L$(LIBClas) \ - -L$(LIBRoot) \ - -L$(LIBCORE) \ - -L$(LIBHIPO) \ - -lClas12 -lRootTools -lC12Core - - -.PHONY: all clean -all: $(BUILD) $(OBJECTS) - $(CXX) $(DEBUG) -I$(INCDIR) $(INCLUDES) $(LIBS) -o libTools.so -shared $(CFLAGS) $(OBJECTS) - -$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp - $(CXX) $(DEBUG) $(CFLAGS) $(INCLUDES) $(LIBS) -c $< -o $@ - -clean: - rm build/*; rm libTools.so; rm -rf build diff --git a/C12AnCpp/Tools/inc/combineParticles.h b/C12AnCpp/Tools/inc/combineParticles.h deleted file mode 100644 index 17f5ced..0000000 --- a/C12AnCpp/Tools/inc/combineParticles.h +++ /dev/null @@ -1,51 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -#pragma once - -//________ Core includes __________ -#include "Core/algorithm.h" - -// _______ Root includes __________ -#include "Root/particle.h" - -// _______ STL includes __________ -#include - -////////////////////////////////////////////////////////////////////// -// -// Algorithm to create all candidates from two input particles -// It stores the candidates as root::particle in the Temp. Data Cont. -////////////////////////////////////////////////////////////////////// -namespace tools { - - class combineParticles : public core::algorithm { - - public: - combineParticles( std::string , std::string); - - void init(); - - void processEvent(); - void terminate() {} - - private: - std::string _name; - std::string _opt; - - std::string _p1, _p2; - short _sign; - }; - -} - diff --git a/C12AnCpp/Tools/inc/kineTool.h b/C12AnCpp/Tools/inc/kineTool.h deleted file mode 100644 index 832a90c..0000000 --- a/C12AnCpp/Tools/inc/kineTool.h +++ /dev/null @@ -1,36 +0,0 @@ -/* ___________ ___ _____ -// / ___< /_ |/ _ | ___ / ___/__ ___ -// / /__ / / __// __ |/ _ \/ /__/ _ \/ _ \ -// \___//_/____/_/ |_/_//_/\___/ .__/ .__/ -// /_/ /_/ -// Yet another analysis framework for CLAS12 data, but in C++ -// -// Author: fbossu (@ jlab.org) -// Date: 2018/11/16 -// -// License: GPLv3 attached -*/ - -// ________ Core includes ______ -#include "Core/tuple.h" - -// ________ Root includes ______ -#include "Root/particle.h" - -// ________ STL includes _______ -#include - -////////////////////////////////////////////////////////////////////// -// -// Tool to fill an ntuple with four-momentum components of a particle -////////////////////////////////////////////////////////////////////// -namespace tools { - class kineTool { - public: - void init() {} - - void execute( core::tuple *, root::particle *, std::string prefix=0 ); - }; - -} - diff --git a/C12AnCpp/Tools/inc/utils.h b/C12AnCpp/Tools/inc/utils.h deleted file mode 100644 index f46de48..0000000 --- a/C12AnCpp/Tools/inc/utils.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "Root/particle.h" - -#include - - -namespace tools { - namespace utils { - - // compute Q2, xB, W2 - // takes as input a scattered electron, the energy of the electron beam - // and the id of the target particle - std::tuple getDISvariables( root::particle *, float, int ); - } -} - diff --git a/C12AnCpp/Tools/src/combineParticles.cpp b/C12AnCpp/Tools/src/combineParticles.cpp deleted file mode 100644 index 628e2b3..0000000 --- a/C12AnCpp/Tools/src/combineParticles.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "Tools/combineParticles.h" - -using namespace tools; - -#include -#include -#include -#include -#include -using namespace std; - -// core includes -#include "Core/objVector.h" -#include "Core/object.h" - -combineParticles::combineParticles( string n, string o ) : _name(n), _opt(o){ } - -void combineParticles::init() { - - // trim input - _opt.erase(remove( _opt.begin(), _opt.end(), ' '), _opt.end()); - cout << _opt << endl; - - char delim = '+'; - _sign = 1; - if( _opt.find(delim) != string::npos ){ } - else { - delim = '-'; - _sign = -1; - if( _opt.find(delim) != string::npos ){ } - else{ - _sign = -99; - cerr << " [WARNING] combineParticles malformed option\n"; - return; - } - } - - vector substrs; - stringstream ss(_opt); - string item; - while(getline(ss,item,delim)){ - substrs.push_back(item); - } - if( substrs.size() > 1 ){ - _p1 = substrs[0]; - _p2 = substrs[1]; - } - else{ - cerr << " [WARNING] combineParticles: too few particles\n"; - _sign = -99; - } - -} - - -void combineParticles::processEvent(){ - - // check if there were no errors in the inputs: sign must be either +1 or -1 - if( abs( _sign ) != 1 ) return; - - // get input particles - core::objVector *vp1 = (core::objVector*) getObject(_p1); - if( ! vp1 ) return; - - core::objVector *vp2 = ( _p1 == _p2 ) ? vp1 : (core::objVector*) getObject(_p2); - if( ! vp2 ) return; - // make candidates - shared_ptr cands = make_shared(); - - for( unsigned int ip1=0; ip1 < vp1->size(); ip1++ ){ - root::particle *p1 = (root::particle*) (*vp1)[ip1].get(); - - unsigned int start2 = ( _p1 == _p2 ) ? ip1+1 : 0; - for( unsigned int ip2 = start2 ; ip2 < vp2->size(); ip2++ ){ - root::particle *p2 = (root::particle*) (*vp2)[ip2].get(); - - // actual combine - root::particle p = (_sign==1) ? *p1 + *p2 : *p1 - *p2 ; - - // push the candidate in the vector - unique_ptr p3 = make_unique(p); - cands->push_back( move(p3) ); - - } - } - - bookObject( _name, cands ); -} - diff --git a/C12AnCpp/Tools/src/kineTool.cpp b/C12AnCpp/Tools/src/kineTool.cpp deleted file mode 100644 index 9c7b47a..0000000 --- a/C12AnCpp/Tools/src/kineTool.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "Tools/kineTool.h" - -void tools::kineTool::execute( core::tuple *tpl, root::particle *p, std::string prefix){ - - tpl->column( "PX", p->Px(), prefix ); - tpl->column( "PY", p->Py(), prefix ); - tpl->column( "PZ", p->Pz(), prefix ); - tpl->column( "E", p->E(), prefix ); -} - diff --git a/C12AnCpp/Tools/src/utils.cpp b/C12AnCpp/Tools/src/utils.cpp deleted file mode 100644 index afe4a27..0000000 --- a/C12AnCpp/Tools/src/utils.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "Tools/utils.h" - -using namespace tools; - -std::tuple utils::getDISvariables( root::particle *el, float Ein, int Tpid ) { - - root::particle projectile( 11,0,0,Ein); - root::particle target( Tpid,0,0,0); - - root::particle q = projectile - *el; - - double Q2 = -q.M2(); - - double xB = Q2 / (2.* target.Dot( q ) ); - - double W2 = (target + q).M2(); - - return std::make_tuple(Q2,xB,W2); -} diff --git a/C12AnCpp/setEnv.csh b/C12AnCpp/setEnv.csh deleted file mode 100755 index e3c0d14..0000000 --- a/C12AnCpp/setEnv.csh +++ /dev/null @@ -1,22 +0,0 @@ -setenv CLAS12TOOL $HOME/software/Clas12Tool - -#check if ROOT exist -if ( ! $?ROOTSYS ) then - echo "ATTENTION: ROOTSYS is not set. Do you have ROOT installed?" -endif - -setenv HIPO ${CLAS12TOOL}"/Hipo" - -setenv CLAS12CPPBASE ${CLAS12TOOL}"/C12AnCpp" -echo $CLAS12CPPBASE - -setenv C12CORE ${CLAS12CPPBASE}"/Core" -setenv C12CLAS12 ${CLAS12CPPBASE}"/Clas12" -setenv C12RTOOL ${CLAS12CPPBASE}"/Root" -setenv C12TOOLS ${CLAS12CPPBASE}"/Tools" -setenv C12LUND ${CLAS12CPPBASE}"/Lund" -setenv CLAS12CPP ${C12CORE}:${C12CLAS12}:${C12RTOOL}:${C12TOOLS}:${C12LUND} - -setenv LD_LIBRARY_PATH ${CLAS12CPP}:${CLAS12TOOL}"/lib":${HIPO}:${LD_LIBRARY_PATH} -echo $LD_LIBRARY_PATH - diff --git a/C12AnCpp/setEnv.sh b/C12AnCpp/setEnv.sh deleted file mode 100755 index 19500dd..0000000 --- a/C12AnCpp/setEnv.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -export CLAS12TOOL=$HOME/software/Clas12Tool - -function setEnvironment { - #check if ROOT exist - if [ -z ${ROOTSYS+x} ] - then - echo "ATTENTION: ROOTSYS is not set. Do you have ROOT installed?" - fi - - export HIPO=${CLAS12TOOL}/Hipo - - export CLAS12CPPBASE=${CLAS12TOOL}/C12AnCpp - echo $CLAS12CPPBASE - - export C12CORE=$CLAS12CPPBASE"/Core" - export C12CLAS12=$CLAS12CPPBASE"/Clas12" - export C12RTOOL=$CLAS12CPPBASE"/Root" - export C12TOOLS=$CLAS12CPPBASE"/Tools" - export C12LUND=$CLAS12CPPBASE"/Lund" - export CLAS12CPP=$C12CORE:$C12CLAS12:$C12RTOOL:$C12TOOLS:$C12LUND - - export LD_LIBRARY_PATH=$CLAS12CPP:$CLAS12TOOL/lib:$HIPO:$LD_LIBRARY_PATH - echo $LD_LIBRARY_PATH -} - -# check if the environment was already loaded -if [ -z ${CLAS12CPP+x} ] -then - setEnvironment -else - echo "already set" -fi - - diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5c5fc9d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +project(clas12hiporoot) + +set(CMAKE_INSTALL_BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/bin) +set(CMAKE_INSTALL_LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) +set(CMAKE_INSTALL_MANDIR ${CMAKE_CURRENT_SOURCE_DIR}/man) +set(CMAKE_CXX_FLAGS "-fPIC -O3") + + +# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: +# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake +# - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT +list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) + +#---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) +find_package(ROOT REQUIRED COMPONENTS Proof) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") + +#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) +include(${ROOT_USE_FILE}) + +#hipo expects lz4 includes to be in lib... +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +#set(ADD_COMPILER_FLAGS_PREPEND "-O3") +set(CMAKE_C_FLAGS "-O3 ${CMAKE_C_FLAGS}") +set(LZ4_BUNDLED_MODE OFF) +set(BUILD_SHARED_LIBS ON) +set(BUILD_STATIC_LIBS OFF) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/Lz4/contrib/cmake_unofficial) +set(LZ4_LIBRARY lz4) +set(LZ4_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Lz4/lib) +include_directories(${LZ4_INCLUDE_DIR}) +add_definitions(-D__LZ4__) + +#after Lz4 change include to include +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Hipo) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Hipo) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) + diff --git a/Clas12Banks/CMakeLists.txt b/Clas12Banks/CMakeLists.txt new file mode 100644 index 0000000..130fc02 --- /dev/null +++ b/Clas12Banks/CMakeLists.txt @@ -0,0 +1,13 @@ +ROOT_GENERATE_DICTIONARY(G__Clas12 vectors.h header.h particle.h mcparticle.h detector.h scaler.h vtp.h particle_detector.h scintillator.h tracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h clas12reader.h LINKDEF Clas12LinkDef.h) + +add_library(Clas12 SHARED vectors.cpp header.cpp particle.cpp mcparticle.cpp detector.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp tracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp clas12reader.cpp G__Clas12.cxx) + +target_link_libraries(Clas12 ${ROOT_LIBRARIES}) + +#install(TARGETS Clas12 +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks/lib*) + +install (FILES ${ROOT_CLAS12_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Clas12Banks/Clas12LinkDef.h b/Clas12Banks/Clas12LinkDef.h new file mode 100644 index 0000000..0615ae6 --- /dev/null +++ b/Clas12Banks/Clas12LinkDef.h @@ -0,0 +1,29 @@ +#ifdef __CINT__ + +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; +#pragma link C++ nestedclasses; + +//#pragma link C++ defined_in "utils.h"; +#pragma link C++ class clas12::vectors+; +#pragma link C++ class clas12::header+; +#pragma link C++ class clas12::particle+; +#pragma link C++ class clas12::mcparticle+; +#pragma link C++ class clas12::detector+; +#pragma link C++ class clas12::scaler+; +#pragma link C++ class clas12::vtp+; +#pragma link C++ class clas12::particle_detector+; +#pragma link C++ class clas12::scintillator+; +#pragma link C++ class clas12::tracker+; +#pragma link C++ class clas12::traj+; +#pragma link C++ class clas12::forwardtagger+; +#pragma link C++ class clas12::cherenkov+; +#pragma link C++ class clas12::calorimeter+; +#pragma link C++ class clas12::covmatrix+; +#pragma link C++ class clas12::region_particle+; +#pragma link C++ class clas12::region_ft+; +#pragma link C++ class clas12::region_fdet+; +#pragma link C++ class clas12::region_cdet+; +#pragma link C++ class clas12::clas12reader+; +#endif diff --git a/Banks/Makefile b/Clas12Banks/Makefile similarity index 100% rename from Banks/Makefile rename to Clas12Banks/Makefile diff --git a/Banks/calorimeter.cpp b/Clas12Banks/calorimeter.cpp similarity index 100% rename from Banks/calorimeter.cpp rename to Clas12Banks/calorimeter.cpp diff --git a/Banks/calorimeter.h b/Clas12Banks/calorimeter.h similarity index 100% rename from Banks/calorimeter.h rename to Clas12Banks/calorimeter.h diff --git a/Banks/cherenkov.cpp b/Clas12Banks/cherenkov.cpp similarity index 100% rename from Banks/cherenkov.cpp rename to Clas12Banks/cherenkov.cpp diff --git a/Banks/cherenkov.h b/Clas12Banks/cherenkov.h similarity index 100% rename from Banks/cherenkov.h rename to Clas12Banks/cherenkov.h diff --git a/Banks/clas12defs.h b/Clas12Banks/clas12defs.h similarity index 100% rename from Banks/clas12defs.h rename to Clas12Banks/clas12defs.h diff --git a/Banks/clas12event.cpp b/Clas12Banks/clas12event.cpp similarity index 100% rename from Banks/clas12event.cpp rename to Clas12Banks/clas12event.cpp diff --git a/Banks/clas12event.h b/Clas12Banks/clas12event.h similarity index 100% rename from Banks/clas12event.h rename to Clas12Banks/clas12event.h diff --git a/Banks/clas12reader.cpp b/Clas12Banks/clas12reader.cpp similarity index 71% rename from Banks/clas12reader.cpp rename to Clas12Banks/clas12reader.cpp index 7583e68..87b6463 100644 --- a/Banks/clas12reader.cpp +++ b/Clas12Banks/clas12reader.cpp @@ -5,10 +5,13 @@ */ #include "clas12reader.h" +#include namespace clas12 { - - clas12reader::clas12reader(string filename){ + using std::cout; + using std::endl; + + clas12reader::clas12reader(std::string filename){ cout<<" clas12reader::clas12reader reading "<setEntry(i); + _pids.emplace_back(_bparts->getPid()); + } + //check if event is of the write type + if(!passPidSelect()) return; + //Loop over particles and find their region for(ushort i=0;i<_nparts;i++){ _bparts->setEntry(i); @@ -123,6 +137,41 @@ namespace clas12 { } } } + bool clas12reader::passPidSelect(){ + //if no selections take event + if(_pidSelect.empty()&&_pidSelectExact.empty()) return true; + + //check is there is at least enough particles + if(_pidSelectExact.size()+_pidSelect.size()>_nparts) + return false; + + //check if any unwanted particles + if(_zeroOfRestPid){ + auto uniquePids=_pids;//make a copy + std::sort(uniquePids.begin(), uniquePids.end()); + auto ip = std::unique(uniquePids.begin(), uniquePids.begin() + _nparts); + uniquePids.resize(std::distance(uniquePids.begin(), ip)); + //now just loop over the unique particle types + for(auto const& pid : uniquePids){ + //check if we have a PID not given in a selection + if(!(std::count(_givenPids.begin(),_givenPids.end(), pid))) + return false; + } + } + //check for requested exact matches + for(auto const& select : _pidSelectExact){ + if(!(select.second==getNPid(select.first))) + return false; + } + + //check for requeseted at least matches + for(auto const& select : _pidSelect){ + if((select.second>getNPid(select.first))) + return false; + } + return true; + } + //////////////////////////////////////////////////////// ///Filter and return detParticles by given PID std::vector clas12reader::getByID(int id){ diff --git a/Banks/clas12reader.h b/Clas12Banks/clas12reader.h similarity index 84% rename from Banks/clas12reader.h rename to Clas12Banks/clas12reader.h index e86dcb8..14aa25c 100644 --- a/Banks/clas12reader.h +++ b/Clas12Banks/clas12reader.h @@ -33,6 +33,7 @@ #include "region_ft.h" #include +#include namespace clas12 { @@ -44,7 +45,7 @@ namespace clas12 { clas12reader()=default; - clas12reader(string filename); + clas12reader(std::string filename); ~clas12reader()=default; hipo::reader& getReader(){return _reader;} @@ -81,6 +82,18 @@ namespace clas12 { std::vector getByID(int id); int getNParticles() const {return _detParticles.size();} + short getNPid(short pid){return std::count(_pids.begin(),_pids.end(), pid);}; + void addAtLeastPid(short pid,short n){ + _pidSelect[pid]=n; + _givenPids.push_back(pid); + } + void addExactPid(short pid,short n){ + _pidSelectExact[pid]=n; + _givenPids.push_back(pid); + } + void addZeroOfRestPid(){_zeroOfRestPid=true;}; + + bool passPidSelect(); private: @@ -110,12 +123,16 @@ namespace clas12 { std::vector _rfts; std::vector _detParticles; - + std::vector _pids; + std::vector _givenPids; + std::map _pidSelect; + std::map _pidSelectExact; + ushort _nparts=0; ushort _n_rfdets=0; ushort _n_rcdets=0; ushort _n_rfts=0; - + bool _zeroOfRestPid=false; }; //helper functions diff --git a/Banks/covmatrix.cpp b/Clas12Banks/covmatrix.cpp similarity index 100% rename from Banks/covmatrix.cpp rename to Clas12Banks/covmatrix.cpp diff --git a/Banks/covmatrix.h b/Clas12Banks/covmatrix.h similarity index 100% rename from Banks/covmatrix.h rename to Clas12Banks/covmatrix.h diff --git a/Banks/detector.cpp b/Clas12Banks/detector.cpp similarity index 100% rename from Banks/detector.cpp rename to Clas12Banks/detector.cpp diff --git a/Banks/detector.h b/Clas12Banks/detector.h similarity index 100% rename from Banks/detector.h rename to Clas12Banks/detector.h diff --git a/Banks/forwardtagger.cpp b/Clas12Banks/forwardtagger.cpp similarity index 100% rename from Banks/forwardtagger.cpp rename to Clas12Banks/forwardtagger.cpp diff --git a/Banks/forwardtagger.h b/Clas12Banks/forwardtagger.h similarity index 100% rename from Banks/forwardtagger.h rename to Clas12Banks/forwardtagger.h diff --git a/Banks/hallB_event.cpp b/Clas12Banks/hallB_event.cpp similarity index 100% rename from Banks/hallB_event.cpp rename to Clas12Banks/hallB_event.cpp diff --git a/Banks/hallB_event.h b/Clas12Banks/hallB_event.h similarity index 100% rename from Banks/hallB_event.h rename to Clas12Banks/hallB_event.h diff --git a/Banks/header.cpp b/Clas12Banks/header.cpp similarity index 100% rename from Banks/header.cpp rename to Clas12Banks/header.cpp diff --git a/Banks/header.h b/Clas12Banks/header.h similarity index 100% rename from Banks/header.h rename to Clas12Banks/header.h diff --git a/Banks/mcparticle.cpp b/Clas12Banks/mcparticle.cpp similarity index 100% rename from Banks/mcparticle.cpp rename to Clas12Banks/mcparticle.cpp diff --git a/Banks/mcparticle.h b/Clas12Banks/mcparticle.h similarity index 100% rename from Banks/mcparticle.h rename to Clas12Banks/mcparticle.h diff --git a/Banks/mesonex_event.cpp b/Clas12Banks/mesonex_event.cpp similarity index 100% rename from Banks/mesonex_event.cpp rename to Clas12Banks/mesonex_event.cpp diff --git a/Banks/mesonex_event.h b/Clas12Banks/mesonex_event.h similarity index 100% rename from Banks/mesonex_event.h rename to Clas12Banks/mesonex_event.h diff --git a/Banks/particle.cpp b/Clas12Banks/particle.cpp similarity index 100% rename from Banks/particle.cpp rename to Clas12Banks/particle.cpp diff --git a/Banks/particle.h b/Clas12Banks/particle.h similarity index 100% rename from Banks/particle.h rename to Clas12Banks/particle.h diff --git a/Banks/particle_detector.cpp b/Clas12Banks/particle_detector.cpp similarity index 100% rename from Banks/particle_detector.cpp rename to Clas12Banks/particle_detector.cpp diff --git a/Banks/particle_detector.h b/Clas12Banks/particle_detector.h similarity index 100% rename from Banks/particle_detector.h rename to Clas12Banks/particle_detector.h diff --git a/Banks/region_cdet.cpp b/Clas12Banks/region_cdet.cpp similarity index 100% rename from Banks/region_cdet.cpp rename to Clas12Banks/region_cdet.cpp diff --git a/Banks/region_cdet.h b/Clas12Banks/region_cdet.h similarity index 100% rename from Banks/region_cdet.h rename to Clas12Banks/region_cdet.h diff --git a/Banks/region_detector.h b/Clas12Banks/region_detector.h similarity index 100% rename from Banks/region_detector.h rename to Clas12Banks/region_detector.h diff --git a/Banks/region_fdet.cpp b/Clas12Banks/region_fdet.cpp similarity index 100% rename from Banks/region_fdet.cpp rename to Clas12Banks/region_fdet.cpp diff --git a/Banks/region_fdet.h b/Clas12Banks/region_fdet.h similarity index 100% rename from Banks/region_fdet.h rename to Clas12Banks/region_fdet.h diff --git a/Banks/region_ft.cpp b/Clas12Banks/region_ft.cpp similarity index 100% rename from Banks/region_ft.cpp rename to Clas12Banks/region_ft.cpp diff --git a/Banks/region_ft.h b/Clas12Banks/region_ft.h similarity index 100% rename from Banks/region_ft.h rename to Clas12Banks/region_ft.h diff --git a/Banks/region_particle.cpp b/Clas12Banks/region_particle.cpp similarity index 100% rename from Banks/region_particle.cpp rename to Clas12Banks/region_particle.cpp diff --git a/Banks/region_particle.h b/Clas12Banks/region_particle.h similarity index 100% rename from Banks/region_particle.h rename to Clas12Banks/region_particle.h diff --git a/Banks/scaler.cpp b/Clas12Banks/scaler.cpp similarity index 100% rename from Banks/scaler.cpp rename to Clas12Banks/scaler.cpp diff --git a/Banks/scaler.h b/Clas12Banks/scaler.h similarity index 100% rename from Banks/scaler.h rename to Clas12Banks/scaler.h diff --git a/Banks/scintillator.cpp b/Clas12Banks/scintillator.cpp similarity index 100% rename from Banks/scintillator.cpp rename to Clas12Banks/scintillator.cpp diff --git a/Banks/scintillator.h b/Clas12Banks/scintillator.h similarity index 100% rename from Banks/scintillator.h rename to Clas12Banks/scintillator.h diff --git a/Banks/tracker.cpp b/Clas12Banks/tracker.cpp similarity index 100% rename from Banks/tracker.cpp rename to Clas12Banks/tracker.cpp diff --git a/Banks/tracker.h b/Clas12Banks/tracker.h similarity index 100% rename from Banks/tracker.h rename to Clas12Banks/tracker.h diff --git a/Banks/traj.cpp b/Clas12Banks/traj.cpp similarity index 100% rename from Banks/traj.cpp rename to Clas12Banks/traj.cpp diff --git a/Banks/traj.h b/Clas12Banks/traj.h similarity index 100% rename from Banks/traj.h rename to Clas12Banks/traj.h diff --git a/Banks/vectors.cpp b/Clas12Banks/vectors.cpp similarity index 100% rename from Banks/vectors.cpp rename to Clas12Banks/vectors.cpp diff --git a/Banks/vectors.h b/Clas12Banks/vectors.h similarity index 100% rename from Banks/vectors.h rename to Clas12Banks/vectors.h diff --git a/Banks/vtp.cpp b/Clas12Banks/vtp.cpp similarity index 100% rename from Banks/vtp.cpp rename to Clas12Banks/vtp.cpp diff --git a/Banks/vtp.h b/Clas12Banks/vtp.h similarity index 100% rename from Banks/vtp.h rename to Clas12Banks/vtp.h diff --git a/Clas12Root/BankHist.cpp b/Clas12Root/BankHist.cpp new file mode 100644 index 0000000..73b59ea --- /dev/null +++ b/Clas12Root/BankHist.cpp @@ -0,0 +1,77 @@ +#include "BankHist.h" +#include "HipoRootAction.h" +#include "clas12reader.h" +#include + +namespace clas12root { + + BankHist::BankHist(TString filename): HipoHist(filename){ + _tempActionName="BankHistAction"; + + _mapOfParts["BANK"]="bank."; + _mapOfParts["REC::Particle"]="particle"; + _mapOfParts["REC::Calorimeter"]="calorimeter"; + _mapOfParts["REC::Scintillator"]="scintillator"; + _mapOfParts["REC::Cherenkov"]="cherenkov"; + _mapOfParts["REC::Track"]="tracker"; + _mapOfParts["REC::Traj"]="traj"; + _mapOfParts["REC::ForwardTagger"]="forwardtagger"; + _mapOfParts["MC::Lund"]="mcparticle"; + _mapOfParts["REC::CovMat"]="covmatrix"; + _mapOfParts["RAW::vtp"]="vtp"; + _mapOfParts["RAW::scaler"]="scaler"; + _mapOfParts["REC::Event"]="header"; + + + } + BankHist::~BankHist(){ + } + void BankHist::Loop(){ + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + _bankName=TString(); + } + HipoHist* BankHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ + + CheckForBank(varExp); + auto checkName1=_bankName; + + if(checkName1==TString()) + cout<<"WARNING BankHist::Hist1D" <<" no bank found in "<; */ + + /* c12_uptr clas12(){ */ + /* return std::move(c12_uptr */ + /* (new clas12::clas12reader(HipoFileName().Data()))); */ + /* } */ + + private : + + TString _bankName; + + }; +} diff --git a/Clas12Root/CMakeLists.txt b/Clas12Root/CMakeLists.txt new file mode 100644 index 0000000..0c10af1 --- /dev/null +++ b/Clas12Root/CMakeLists.txt @@ -0,0 +1,16 @@ +ROOT_GENERATE_DICTIONARY(G__Clas12Root BankHist.h HipoHist.h HipoTreeMaker.h HipoChain.h HipoRootAction.h HipoROOTOut.h ParticleHist.h HipoSelector.h ParticleTree.h LINKDEF Clas12RootLinkDef.h) + +add_library(Clas12Root SHARED BankHist.cpp HipoHist.cpp HipoTreeMaker.cpp HipoChain.cpp HipoRootAction.cpp HipoROOTOut.cpp ParticleHist.cpp HipoSelector.cpp ParticleTree.cpp G__Clas12Root.cxx) + +target_link_libraries(Clas12Root ${ROOT_LIBRARIES}) + +#install(TARGETS Clas12Root +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +FILE(GLOB ROOT_C12ROOT_PCM ${CMAKE_BINARY_DIR}/Clas12Root/lib*) + +install (FILES ${ROOT_C12ROOT_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/src) diff --git a/Clas12Root/Clas12RootLinkDef.h b/Clas12Root/Clas12RootLinkDef.h new file mode 100644 index 0000000..ef7436d --- /dev/null +++ b/Clas12Root/Clas12RootLinkDef.h @@ -0,0 +1,17 @@ +#ifdef __CINT__ + +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; +#pragma link C++ nestedclasses; + +#pragma link C++ class clas12root::BankHist+; +#pragma link C++ class clas12root::HipoHist+; +#pragma link C++ class clas12root::HipoTreeMaker+; +#pragma link C++ class clas12root::HipoChain+; +#pragma link C++ class clas12root::HipoRootAction+; +#pragma link C++ class clas12root::HipoSelector+; +#pragma link C++ class clas12root::ParticleTree+; +#pragma link C++ class clas12root::ParticleHist+; +#pragma link C++ class clas12root::HipoROOTOut+; +#endif diff --git a/Clas12Root/HipoChain.cpp b/Clas12Root/HipoChain.cpp new file mode 100644 index 0000000..a8b31fd --- /dev/null +++ b/Clas12Root/HipoChain.cpp @@ -0,0 +1,53 @@ +#include "HipoChain.h" +#include "reader.h" + +namespace clas12root { + + HipoChain::HipoChain(): TNamed("HIPOFILES","A chain of hipo files"){ + + _ListOfFiles=_tchain.GetListOfFiles(); + } + + HipoChain::~HipoChain(){ + } + + + void HipoChain::Add(TString name){ + + _tchain.Add(name); + _Nrecords=-1; //must recalculate + } + + Long64_t HipoChain::GetNRecords(){ + if(_Nrecords!=-1) + return _Nrecords; + + _Nrecords=0; + _fileRecords.clear(); + auto nfiles=GetNFiles(); + //loop over files and get the number of records + for(auto i=0;iGetNFiles()) ifile=GetNFiles(); + for(Int_t i=0;iirec) + return i-1; + } + return n-1; + } +} diff --git a/Clas12Root/HipoChain.h b/Clas12Root/HipoChain.h new file mode 100644 index 0000000..a645ee6 --- /dev/null +++ b/Clas12Root/HipoChain.h @@ -0,0 +1,45 @@ +#pragma once + + +#include +#include +#include +#include + +namespace clas12root { + + + class HipoChain : public TNamed { + + + public : + HipoChain(); + virtual ~HipoChain(); + + + void Add(TString name); + Int_t GetNFiles(){return _ListOfFiles->GetEntries();} + Long64_t GetNRecords(); + + TString GetFileName(Int_t i){ + if(i>=GetNFiles()) return TString(); + return _ListOfFiles->At(i)->GetTitle(); + } + + Int_t GetFileRecords(Int_t i){ + if(i _fileRecords; + + ClassDef(clas12root::HipoChain,1); + }; +} diff --git a/Clas12Root/HipoFileSelector.cpp b/Clas12Root/HipoFileSelector.cpp new file mode 100644 index 0000000..2cb3227 --- /dev/null +++ b/Clas12Root/HipoFileSelector.cpp @@ -0,0 +1,128 @@ +#define HipoFileSelector_cxx +// The class definition in HipoFileSelector.h has been generated automatically +// by the ROOT utility TTree::MakeSelector(). This class is derived +// from the ROOT class TSelector. For more information on the TSelector +// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. + + +// The following methods are defined in this file: +// Begin(): called every time a loop on the tree starts, +// a convenient place to create your histograms. +// SlaveBegin(): called after Begin(), when on PROOF called only on the +// slave servers. +// Process(): called for each event, in this function you decide what +// to read and fill your histograms. +// SlaveTerminate: called at the end of the loop on the tree, when on PROOF +// called only on the slave servers. +// Terminate(): called at the end of the loop on the tree, +// a convenient place to draw/fit your histograms. +// + + +#include "HipoFileSelector.h" +#include +#include +#include +#include +#include +#include +#include + +namespace clas12root{ + + HipoFileSelector::HipoFileSelector(TTree * ){ + + } + HipoFileSelector::HipoFileSelector(TString filename) : _chain(new HipoChain()) { + _chain->Add(filename); + } + HipoFileSelector::HipoFileSelector(HipoChain* chain) : _chain(chain) { + + } + + // void HipoFileSelector::Run(){ + + // } + + void HipoFileSelector::Begin(TTree * /*tree*/) + { + // The Begin() function is called at the start of the query. + // When running with PROOF Begin() is only called on the client. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + + + if(!fInput){ + fInput=new TList(); + // fInput->SetOwner(kTRUE); + } + + if(!_chain){ + cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ + cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves + } + + void HipoFileSelector::SlaveBegin(TTree * /*tree*/) + { + // The SlaveBegin() function is called after the Begin() function. + // When running with PROOF SlaveBegin() is called on each slave server. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + fInput->Print(); + _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); + //TString outdirstr=TString(outdir->GetTitle()); + cout<<"HipoFileSelector::SlaveBegin( "<<_chain<GetNFiles()<Add(_hist1); + } + + Bool_t HipoFileSelector::Process(Long64_t entry) + { + + _c12.reset(new clas12::clas12reader(_chain->GetFileName(entry).Data())); + + while(_c12->next()==true){ + ProcessEvent(); + } + + //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); + return kTRUE; + } + void HipoFileSelector::SlaveTerminate() + { + // The SlaveTerminate() function is called after all entries or objects + // have been processed. When running with PROOF SlaveTerminate() is called + // on each slave server. + + } + + void HipoFileSelector::Terminate() + { + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); + _hist1 = dynamic_cast(fOutput->FindObject("Time")); + if (_hist1) _hist1->Draw(); + c1->Update(); + } + + +} diff --git a/Clas12Root/HipoFileSelector.h b/Clas12Root/HipoFileSelector.h new file mode 100644 index 0000000..e6098de --- /dev/null +++ b/Clas12Root/HipoFileSelector.h @@ -0,0 +1,65 @@ +#ifndef HipoFileSelector_h +#define HipoFileSelector_h + +#include +#include +#include +#include + +#include +#include +#include + +// Headers needed by this particular selector +#include "HipoChain.h" +#include "clas12reader.h" + +namespace clas12root{ + + + class HipoFileSelector : public TSelector { + public : + + + HipoFileSelector(TString filename) ; + HipoFileSelector(HipoChain *chain) ; + HipoFileSelector(TTree * /*tree*/ =0); + virtual ~HipoFileSelector() { } + virtual Int_t Version() const { return 2; } + virtual void Begin(TTree *tree); + virtual void SlaveBegin(TTree *tree); + // virtual void Init(TTree *tree); + //virtual Bool_t Notify(); + virtual Bool_t Process(Long64_t entry); + //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } + + Bool_t ProcessEvent(); + + virtual void SetOption(const char *option) { fOption = option; } + virtual void SetObject(TObject *obj) { fObject = obj; } + virtual void SetInputList(TList *input) { fInput = input; } + virtual TList *GetOutputList() const { return fOutput; } + virtual void SlaveTerminate(); + virtual void Terminate(); + + + + private: + + std::unique_ptr _c12; + HipoChain* _chain=nullptr; + + Int_t _NcurrRecords=0; + Int_t _iRecord=0; + Int_t _iFile=0; + Long64_t _NfileRecords=0; + + TH1F* _hist1=nullptr; + + ClassDef(clas12root::HipoFileSelector,0); + + }; +} + + +#endif // #ifdef HipoFileSelector_cxx diff --git a/Clas12Root/HipoHist.cpp b/Clas12Root/HipoHist.cpp new file mode 100644 index 0000000..219d9d8 --- /dev/null +++ b/Clas12Root/HipoHist.cpp @@ -0,0 +1,122 @@ +#include "HipoHist.h" +#include +#include +#include +#include + +namespace clas12root { + + HipoHist::HipoHist(TString filename): HipoROOTOut(filename){ + _histList->SetName("HipoHists"); + _histList->SetOwner(kFALSE); + + } + HipoHist::~HipoHist(){ + } + HipoHist* HipoHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ + + varExp=ExpandExpression(varExp,","); + if(condExp==TString(""))condExp="1"; + if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); + AddAction(varExp,condExp); + auto hist=new TH1F(varExp,varExp,nbins,min,max); + _histList->Add(hist); + _curHist.push_back(hist); + return this; + } + HipoHist* HipoHist::Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX,Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp){ + + varExp=ExpandExpression(varExp,","); + if(condExp==TString(""))condExp="1"; + if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); + AddAction(varExp,condExp); + auto hist=new TH2F(varExp,varExp,nbinsX,minX,maxX,nbinsY,minY,maxY); + _histList->Add(hist); + _curHist.push_back(hist); + return this; + } + + void HipoHist::Draw(TString opt){ + gBenchmark->Reset(); + gBenchmark->Start("compile time"); + CompileAction(); + gBenchmark->Stop("compile time"); + gBenchmark->Print("compile time"); + gBenchmark->Start("loop time"); + Loop(); + gBenchmark->Stop("loop time"); + gBenchmark->Print("loop time"); + OnCanvas(opt); + CleanAction(); + _curHist.clear(); + } + + void HipoHist::OnCanvas(TString opt){ + + Int_t left=-1; + Int_t Npads=0; + Int_t nx=0; + Int_t ny=0; + if((left=opt.First("("))!=-1){ + left++; + Int_t right=opt.First(")"); + if(right==-1) cout<<"HipoHist::OnCanvas mismatched () "<GetEntries()<2) + xandy=dims.Tokenize("X"); + if(xandy->GetEntries()>1){ + nx=TString(xandy->At(0)->GetName()).Atoi(); + ny=TString(xandy->At(1)->GetName()).Atoi(); + TCanvas* canvas=new TCanvas(); + canvas->Divide(nx,ny); + canvas->Draw(); + Npads=nx*ny; + } + //remove split option + left--; + TString splitopt=opt(left,right-left+1); + opt.ReplaceAll(splitopt,""); + } + //Simple 1 hist on 1 canvas + TCanvas* canvas1=nullptr; + if(_curHist.size()==1){ + if(!gPad) canvas1=new TCanvas(); + _curHist[0]->DrawCopy(opt); + gPad->Draw(); + return; + } + if(!Npads){ + //Simple many hists on many canvas + for(auto* hist : _curHist){ + if(!opt.Contains("same")){ + canvas1=new TCanvas(); + } + hist->DrawCopy(opt); + canvas1->Draw(); + } + } + else{ + //Use use divided canvas for many hists + Int_t ipad=1; + auto* canvas=dynamic_cast(gPad); + Int_t Ncan=0; + for(auto* hist : _curHist){ + if(ipad>Npads){ + canvas=new TCanvas(); + canvas->Divide(nx,ny); + canvas->Draw(); + ipad=1; + } + canvas->cd(ipad++); + hist->DrawCopy(opt); + } + } + } + void HipoHist::Save(const TString outname){ + auto outfile=TFile::Open(outname,"recreate"); + outfile->WriteTObject(_histList); + delete outfile; + } + +} diff --git a/Clas12Root/HipoHist.h b/Clas12Root/HipoHist.h new file mode 100644 index 0000000..8ca8da2 --- /dev/null +++ b/Clas12Root/HipoHist.h @@ -0,0 +1,39 @@ +#pragma once + + +#include "HipoROOTOut.h" +#include +#include +#include + +namespace clas12root { + + + class HipoHist : public HipoROOTOut { + + + public : + HipoHist(TString filename); + virtual ~HipoHist(); + + + + virtual HipoHist* Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp="1"); + virtual HipoHist* Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX, + Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp="1"); + + + void Draw(TString opt=""); + void OnCanvas(TString opt); + void Save(const TString outname); + std::vector* Hists(){return &_curHist;} + protected : + + std::vector _curHist; + + private : + + TList* _histList=new TList{}; + + }; +} diff --git a/Clas12Root/HipoROOTOut.cpp b/Clas12Root/HipoROOTOut.cpp new file mode 100644 index 0000000..e39b69f --- /dev/null +++ b/Clas12Root/HipoROOTOut.cpp @@ -0,0 +1,294 @@ +#include "HipoROOTOut.h" +#include "HipoRootAction.h" +#include +#include +#include +#include +#include +#include + +namespace clas12root{ + + HipoROOTOut::HipoROOTOut(TString filename): _hipoFileName(filename){ + //make a temp file directory + TString HOME=TString(gSystem->Getenv("HOME")); + _tempDir=HOME+"/.clas12root/"; + if(gSystem->Exec(Form("mkdir -p %s",_tempDir.Data()))){ + std::cout<<"HipoROOTOut::HipoROOTOut will store temp files in current directory"<Exec(Form("rm %sasdf*",_tempDir.Data())); + } + TString HipoROOTOut::NextFile(){ + if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) + _chain.Add(_hipoFileName); + if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) + return TString(); + TString fname=_chain.GetListOfFiles()->At(_iHipoFile)->GetTitle(); + _iHipoFile++; + return fname; + } + Bool_t HipoROOTOut::IsMoreFiles(){ + if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) + _chain.Add(_hipoFileName); + if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) + return kFALSE; + return kTRUE; + } + void HipoROOTOut::AddAction(TString varExp,TString condExp){ + if(_curMacro==TString("")){ + TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/Clas12Root/"; + TMacro macro(HIPOROOT+"template"+_tempActionName+".C"); + _curMacro=_tempDir+Form("asdf%d__%s__.C",_Nruns,_tempActionName.Data()); + + TString strline=macro.GetLineWith("NNNN")->GetString(); + _actionClassName=_tempActionName+Form("%d",_Nruns); + strline.ReplaceAll("NNNNN",_actionClassName); + macro.GetLineWith("NNNNN")->SetString(strline); + + _Nruns++; + macro.SaveSource(_curMacro); + } + + TMacro macro(_curMacro); + TString strline=macro.GetLineWith("XXXX")->GetString(); + strline.ReplaceAll("////",""); + strline.ReplaceAll("XXXX",varExp); + strline.ReplaceAll("IIII",Form("%d",_Nactions++)); + strline.ReplaceAll("CCCC",condExp); + + TList *lines=macro.GetListOfLines(); + TObject* obj=macro.GetLineWith("XXXX"); + lines->AddAfter(obj,new TObjString(strline.Data())); + + + macro.SaveSource(_curMacro); + + } + void HipoROOTOut::ReplaceMacroText(TString from,TString to){ + TMacro macro(_curMacro); + TString strline=macro.GetLineWith(from)->GetString(); + strline.ReplaceAll(from,to); + macro.GetLineWith(from)->SetString(strline); + macro.SaveSource(_curMacro); + } + + void HipoROOTOut::CompileAction(){ + PreCompileAction(); + TMacro macro(_curMacro); + macro.Print(); + + auto result=gROOT->LoadMacro(Form("%s++",_curMacro.Data())); + + gROOT->ProcessLine(Form("clas12root::%s::Create();",_actionClassName.Data(),_actionClassName.Data())); + } + + void HipoROOTOut::CleanAction(){ + _iHipoFile=0; + if(_curMacro!=TString("")){ + _curMacro=""; + _Nactions=0; + } + } + + + //////////////////////////////////////////////////////////////// + ///String parsing + TString HipoROOTOut::ExpandExpression(TString varExp0,TString seperator){ + varExp0.ReplaceAll(" ",""); + varExp0.ReplaceAll("::","@@"); + varExp0.ReplaceAll("()","{}"); + varExp0=AddParenthesis(varExp0); + + auto exps = varExp0.Tokenize(":"); + auto Nexp = exps->GetEntries(); + TString varExp1; + for(Int_t i=0;i0) varExp1+=seperator; + TString exp = exps->At(i)->GetName(); + varExp1+=ExpandParenthesis(exp,seperator); + } + delete exps; + varExp1.ReplaceAll("@@","::"); + varExp1.ReplaceAll("{}","()"); + cout<<"DONE TString HipoROOTOut::ExpandExpersion "<GetEntries(); + if(Npl){ + Int_t ns=0; + if(exp[0]=='#') varExp1+=symbols[ns++];//e.g. negative + + for(Int_t ipl=0;iplGetEntries();ipl++){ + if(ipl>0)varExp1+=symbols[ns++]; + varExp1+=ExpandPart(plusses->At(ipl)->GetName()); + } + } + + // else varExp1+=ExpandPart(exp); + delete plusses; + + return varExp1; + } + ///////////////////NEED TO FIX FOR FTOF1B.Path<700 conditions + TString HipoROOTOut::ExpandPart(TString exp){ + // cout<<" :ExpandPart "<GetEntries()!=2) return exp; + TString part= parts->At(0)->GetName(); + exp=Form("%sget%s()",_mapOfParts[part].Data(),parts->At(1)->GetName()); + delete parts; + return exp; + } + + vector HipoROOTOut::RemoveArithmetic(TString& expr){ + vector symbols; + + const vector operators1={'+','-','/','*','>','<','!'}; + const vector operators2={"==","!=",">=","<=","&&","||"}; + for(Int_t i=0;i0){ + ia--; + alpha=varExp0[ia]; + } + if(ia!=i-1){ + // if(ia==i-2)ileft=ia+1; +ileft=ia+1; // else ileft=ia; + if(ileft-1>=0) + if(varExp0[ileft-1]=='(') //check if already got ) + iright=0; + } + + if(iright!=i+1&&iright!=0){ + if(ileft==1) ileft=0; + TString expr=varExp0(ileft,iright-ileft); + varExp1.ReplaceAll(expr.Data(),Form("(%s)",expr.Data())); + i++; + } + } + } + return varExp1; + + } + + +} diff --git a/Clas12Root/HipoROOTOut.h b/Clas12Root/HipoROOTOut.h new file mode 100644 index 0000000..998ee54 --- /dev/null +++ b/Clas12Root/HipoROOTOut.h @@ -0,0 +1,69 @@ +#pragma once + + +#include "region_particle.h" +#include +#include +#include +#include + + +namespace clas12root { + + using std::vector; + using std::cout; + using std::endl; + + class HipoROOTOut { + + + public : + HipoROOTOut(TString filename); + virtual ~HipoROOTOut(); + + void AddAction(TString varExp,TString condExp="1"); + void CompileAction(); + void CleanAction(); + void ReplaceMacroText(TString from,TString to); + // virtual TString ExpandVars(TString varExp0,TString seperator){return varExp0;}; + virtual TString ExpandExpression(TString varExp0,TString seperator); + virtual void Loop()=0; + virtual void PreCompileAction(){}; + + // virtual Double_t Action()=0; + virtual Bool_t Condition(){return kTRUE;} + + TString HipoFileName(){return _hipoFileName;} + TString NextFile(); + Bool_t IsMoreFiles(); + TChain* GetChain(){return &_chain;} + + + TString ExpandVars(TString varExp0,TString seperator); + TString ExpandPart(TString exp); + TString ExpandParenthesis(TString varExp0,TString seperator); + TString AddParenthesis(TString varExp0); + vector RemoveArithmetic(TString& expr); + + + protected : + + TString _tempActionName; + TString _actionClassName; + std::map _mapOfParts; + + TString GetCurrMacroName(){return _curMacro;} + Int_t GetNActions(){return _Nactions;} + private : + + TString _hipoFileName; + TString _curMacro; + TString _tempDir="~/.clas12root"; + Int_t _Nactions=0; + Int_t _Nruns=0; + TChain _chain; + Int_t _iHipoFile=0; + + };//class HipoROOTOut + +} diff --git a/Clas12Root/HipoRootAction.cpp b/Clas12Root/HipoRootAction.cpp new file mode 100644 index 0000000..c92fb7d --- /dev/null +++ b/Clas12Root/HipoRootAction.cpp @@ -0,0 +1,5 @@ +#include "HipoRootAction.h" + + +std::unique_ptr clas12root::gHipoRootAction; + diff --git a/Clas12Root/HipoRootAction.h b/Clas12Root/HipoRootAction.h new file mode 100644 index 0000000..560b348 --- /dev/null +++ b/Clas12Root/HipoRootAction.h @@ -0,0 +1,30 @@ +#pragma once + +#include "HipoROOTOut.h" +#include +#include + +namespace clas12root{ + + class HipoRootAction { + + public : + virtual ~HipoRootAction()=default; + + virtual void Action(clas12root::HipoROOTOut *hiprout) = 0; + + template static void Create(); + + private: + + }; + R__EXTERN std::unique_ptr gHipoRootAction; + + + template void HipoRootAction::Create() + { + gHipoRootAction.reset(new T()); + } + + +} diff --git a/Clas12Root/HipoSelector.cpp b/Clas12Root/HipoSelector.cpp new file mode 100644 index 0000000..9bfb046 --- /dev/null +++ b/Clas12Root/HipoSelector.cpp @@ -0,0 +1,142 @@ +#define HipoSelector_cxx +// The class definition in HipoSelector.h has been generated automatically +// by the ROOT utility TTree::MakeSelector(). This class is derived +// from the ROOT class TSelector. For more information on the TSelector +// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. + + +// The following methods are defined in this file: +// Begin(): called every time a loop on the tree starts, +// a convenient place to create your histograms. +// SlaveBegin(): called after Begin(), when on PROOF called only on the +// slave servers. +// Process(): called for each event, in this function you decide what +// to read and fill your histograms. +// SlaveTerminate: called at the end of the loop on the tree, when on PROOF +// called only on the slave servers. +// Terminate(): called at the end of the loop on the tree, +// a convenient place to draw/fit your histograms. +// + + +#include "HipoSelector.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace clas12root{ + + HipoSelector::HipoSelector(TTree * ){ + + } + HipoSelector::HipoSelector(TString filename) : _chain(new HipoChain()) { + _chain->Add(filename); + } + HipoSelector::HipoSelector(HipoChain* chain) : _chain(chain) { + + } + + // void HipoSelector::Run(){ + + // } + + void HipoSelector::Begin(TTree * /*tree*/) + { + // The Begin() function is called at the start of the query. + // When running with PROOF Begin() is only called on the client. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + + + if(!fInput){ + fInput=new TList(); + // fInput->SetOwner(kTRUE); + } + + if(!_chain){ + cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ + cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves + } + + void HipoSelector::SlaveBegin(TTree * /*tree*/) + { + // The SlaveBegin() function is called after the Begin() function. + // When running with PROOF SlaveBegin() is called on each slave server. + // The tree argument is deprecated (on PROOF 0 is passed). + + TString option = GetOption(); + _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); + + _hist1=new TH1F("Time","Time",600,-100,500); + fOutput->Add(_hist1); + } + + Bool_t HipoSelector::Process(Long64_t entry) + { + gSystem->Sleep(gRandom->Uniform()*100+0.05); + //check if need new file + _iRecord=entry-_NfileRecords; //get record to analyse,subtract records of previous files + if( _iRecord>=_NcurrRecords ){ + _iFile=_chain->GetFileFromRecord(entry); + cout<<"Start New file "<GetRecordsToHere(_iFile); //Add records from previous file to give offset + + _c12.reset(new clas12::clas12reader(_chain->GetFileName(_iFile).Data())); + _NcurrRecords= _c12->getReader().getNRecords(); //records in this file + _iRecord=entry-_NfileRecords; //get first record in this file to process + cout<<"Stop New file "<Exec(Form("vmtouch -vt %s",_chain->GetFileName(_iFile).Data())); + + } + + _c12->getReader().loadRecord(_iRecord); + while(_c12->nextInRecord()==true){ + ProcessEvent(); + } + + //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); + return kTRUE; + + } + + void HipoSelector::SlaveTerminate() + { + // The SlaveTerminate() function is called after all entries or objects + // have been processed. When running with PROOF SlaveTerminate() is called + // on each slave server. + + } + + void HipoSelector::Terminate() + { + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); + _hist1 = dynamic_cast(fOutput->FindObject("Time")); + if (_hist1) _hist1->Draw(); + c1->Update(); + } + + +} diff --git a/Clas12Root/HipoSelector.h b/Clas12Root/HipoSelector.h new file mode 100644 index 0000000..0195b5c --- /dev/null +++ b/Clas12Root/HipoSelector.h @@ -0,0 +1,68 @@ +#ifndef HipoSelector_h +#define HipoSelector_h + +#include +#include +#include +#include + +#include +#include +#include +#include + +// Headers needed by this particular selector +#include "HipoChain.h" +#include "clas12reader.h" + +namespace clas12root{ + using std::cout; + using std::endl; + + + class HipoSelector : public TSelector { + public : + + + HipoSelector(TString filename) ; + HipoSelector(HipoChain *chain) ; + HipoSelector(TTree * /*tree*/ =0); + virtual ~HipoSelector() { } + virtual Int_t Version() const { return 2; } + virtual void Begin(TTree *tree); + virtual void SlaveBegin(TTree *tree); + // virtual void Init(TTree *tree); + //virtual Bool_t Notify(); + virtual Bool_t Process(Long64_t entry); + //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } + + Bool_t ProcessEvent(); + + virtual void SetOption(const char *option) { fOption = option; } + virtual void SetObject(TObject *obj) { fObject = obj; } + virtual void SetInputList(TList *input) { fInput = input; } + virtual TList *GetOutputList() const { return fOutput; } + virtual void SlaveTerminate(); + virtual void Terminate(); + + + + private: + + std::unique_ptr _c12; + HipoChain* _chain=nullptr; + + Int_t _NcurrRecords=0; + Int_t _iRecord=0; + Int_t _iFile=0; + Long64_t _NfileRecords=0; + + TH1F* _hist1=nullptr; + + ClassDef(clas12root::HipoSelector,0); + + }; +} + + +#endif // #ifdef HipoSelector_cxx diff --git a/Clas12Root/HipoTreeMaker.cpp b/Clas12Root/HipoTreeMaker.cpp new file mode 100644 index 0000000..086d8ad --- /dev/null +++ b/Clas12Root/HipoTreeMaker.cpp @@ -0,0 +1,56 @@ +#include "HipoTreeMaker.h" +#include + +namespace clas12root { + + HipoTreeMaker::HipoTreeMaker(TString filename, TString treefilename): HipoROOTOut(filename){ + + _treefile=new TFile(treefilename,"recreate"); + _tree =new TTree("hipotree","tree converted from hipo data"); + _tree->SetDirectory(_treefile); + } + HipoTreeMaker::~HipoTreeMaker(){ + } + void HipoTreeMaker::AddParticleCut(TString cut){ + if(_pcut==TString("1")) + _pcut=TString(); + _pcut+=ExpandExpression(cut,""); + } + void HipoTreeMaker::AddEventCut(TString cut){ + if(_evcut==TString("0")) + _evcut=TString(); + _evcut+=ExpandExpression(cut,""); + } + + HipoTreeMaker* HipoTreeMaker::Branch(TString varExp,TString condExp){ + + TString branchType=varExp; + branchType.Remove(0,branchType.Sizeof()-3); //keep /F etc + varExp.Remove(varExp.Sizeof()-3,2); //remove /F etc + + _branchNames.push_back(varExp); + _branchTypes.push_back(branchType); + + varExp=ExpandExpression(varExp,""); + AddAction(varExp); + + return this; + } + void HipoTreeMaker::Fill(){ + gBenchmark->Reset(); + gBenchmark->Start("compile time"); + CompileAction(); + gBenchmark->Stop("compile time"); + gBenchmark->Print("compile time"); + gBenchmark->Start("loop time"); + Loop(); + gBenchmark->Stop("loop time"); + gBenchmark->Print("loop time"); + CleanAction(); + _tree->Write(); + delete _treefile; + + } + + +} diff --git a/Clas12Root/HipoTreeMaker.h b/Clas12Root/HipoTreeMaker.h new file mode 100644 index 0000000..71dd7cb --- /dev/null +++ b/Clas12Root/HipoTreeMaker.h @@ -0,0 +1,41 @@ +#pragma once + + +#include "HipoROOTOut.h" +#include +#include + +namespace clas12root { + + + class HipoTreeMaker : public HipoROOTOut { + + + public : + HipoTreeMaker(TString filename, TString treefilename); + virtual ~HipoTreeMaker(); + + + + virtual HipoTreeMaker* Branch(TString varExp,TString condExp="1"); + + + TTree* Tree() const {return _tree;} + + void Fill(); + void AddParticleCut(TString cut); + void AddEventCut(TString cut); + + protected : + + vector _branchNames; + vector _branchTypes; + TString _evcut={"0"}; + TString _pcut={"1"}; + + private : + + TFile* _treefile=nullptr; + TTree* _tree=nullptr; + }; +} diff --git a/Clas12Root/LoadHipoROOT.C b/Clas12Root/LoadHipoROOT.C new file mode 100644 index 0000000..1b7c8f1 --- /dev/null +++ b/Clas12Root/LoadHipoROOT.C @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +namespace clas12root{} +using namespace clas12root; + +void LoadHipoROOT(){ + + + gROOT->LoadMacro("$CLAS12TOOL/RunRoot/importToROOT.C"); + + TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/RunRoot/clas12root/"; + gSystem->AddIncludePath(TString("-I")+HIPOROOT); + + + gROOT->LoadMacro(HIPOROOT+"HipoROOTOut.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoRootAction.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoHist.C+"); + gROOT->LoadMacro(HIPOROOT+"ParticleHist.C+"); + gROOT->LoadMacro(HIPOROOT+"BankHist.C+"); + gROOT->LoadMacro(HIPOROOT+"HipoTreeMaker.C+"); + gROOT->LoadMacro(HIPOROOT+"ParticleTree.C+"); + + + +} diff --git a/Clas12Root/ParticleHist.cpp b/Clas12Root/ParticleHist.cpp new file mode 100644 index 0000000..fc3a728 --- /dev/null +++ b/Clas12Root/ParticleHist.cpp @@ -0,0 +1,55 @@ +#include "ParticleHist.h" +#include "HipoRootAction.h" +#include "clas12reader.h" +#include + +namespace clas12root { + + ParticleHist::ParticleHist(TString filename): HipoHist(filename){ + _tempActionName="ParticleHistAction"; + + //Calorimters + _mapOfParts["ECIN"]="p->cal(ECIN)->"; + _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; + _mapOfParts["PCAL"]="p->cal(PCAL)->"; + + //Scintillators + _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; + _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; + _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; + _mapOfParts["CTOF"]="p->sci(CTOF)->"; + _mapOfParts["CND1"]="p->sci(CND1)->"; + _mapOfParts["CND2"]="p->sci(CND2)->"; + _mapOfParts["CND3"]="p->sci(CND3)->"; + + //FT + _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; + _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; + + //Cherenkov + _mapOfParts["HTCC"]="p->ft(HTCC)->"; + _mapOfParts["LTCC"]="p->ft(LTCC)->"; + + //Trackers + _mapOfParts["DC"]="p->trk(DC)->"; + _mapOfParts["CVT"]="p->trk(CVT)->"; + + //Particles + _mapOfParts["PBANK"]="p->par()->"; + + //Particle Region + _mapOfParts["P"]="p->"; + + //EVENT + _mapOfParts["EVNT"]="c12.head()->"; + + } + ParticleHist::~ParticleHist(){ + } + void ParticleHist::Loop(){ + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + } + +} diff --git a/Clas12Root/ParticleHist.h b/Clas12Root/ParticleHist.h new file mode 100644 index 0000000..3d8090a --- /dev/null +++ b/Clas12Root/ParticleHist.h @@ -0,0 +1,33 @@ +#pragma once + + +#include "HipoHist.h" +#include "clas12reader.h" +#include + +namespace clas12root { + + + class ParticleHist : public HipoHist { + + + public : + ParticleHist(TString filename); + virtual ~ParticleHist(); + + + void Loop() final; + + + using c12_uptr = std::unique_ptr; + + c12_uptr clas12(){ + return std::move(c12_uptr + (new clas12::clas12reader(HipoFileName().Data()))); + } + + private : + + + }; +} diff --git a/Clas12Root/ParticleTree.cpp b/Clas12Root/ParticleTree.cpp new file mode 100644 index 0000000..70bd72f --- /dev/null +++ b/Clas12Root/ParticleTree.cpp @@ -0,0 +1,115 @@ +#include "ParticleTree.h" +#include "HipoRootAction.h" +#include "clas12reader.h" +#include +#include + +namespace clas12root { + + ParticleTree::ParticleTree(TString filename, TString treefilename): HipoTreeMaker{filename,treefilename}{ + _tempActionName="ParticleTreeAction"; + + //Calorimters + _mapOfParts["ECIN"]="p->cal(ECIN)->"; + _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; + _mapOfParts["PCAL"]="p->cal(PCAL)->"; + + //Scintillators + _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; + _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; + _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; + _mapOfParts["CTOF"]="p->sci(CTOF)->"; + _mapOfParts["CND1"]="p->sci(CND1)->"; + _mapOfParts["CND2"]="p->sci(CND2)->"; + _mapOfParts["CND3"]="p->sci(CND3)->"; + + //FT + _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; + _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; + + //Cherenkov + _mapOfParts["HTCC"]="p->ft(HTCC)->"; + _mapOfParts["LTCC"]="p->ft(LTCC)->"; + + //Trackers + _mapOfParts["DC"]="p->trk(DC)->"; + _mapOfParts["CVT"]="p->trk(CVT)->"; + + //Particles + _mapOfParts["PBANK"]="p->par()->"; + + //Particle Region + _mapOfParts["P"]="p->"; + + //EVENT + _mapOfParts["EVNT"]="c12.head()->"; + + //C12 + _mapOfParts["C12"]="c12."; + _mapOfParts["C12.NPid"]="c12.getNPid"; + + } + ParticleTree::~ParticleTree(){ + } + void ParticleTree::Loop(){ + + + while(IsMoreFiles()) + gHipoRootAction->Action(this); + + } + + void ParticleTree::PreCompileAction(){ + std::map typelabel; + typelabel["/D"]="Double_t"; + typelabel["/F"]="Float_t"; + typelabel["/I"]="Int_t"; + typelabel["/L"]="Long64_t"; + typelabel["/S"]="Short_t"; + + TMacro macro(GetCurrMacroName()); + + TList *lines=macro.GetListOfLines(); + TObject* obj=macro.GetLineWith("class clas12data"); + Int_t place =lines->IndexOf(obj)+2; + + for(UInt_t i=0;i<_branchNames.size();i++){ + TString type=typelabel[_branchTypes[i]]; + TString bname=_branchNames[i]; + bname.ReplaceAll(".","_"); + TString strline=TString(" ")+type + " "+bname+";"; + lines->AddAt(new TObjString(strline.Data()),place++); + + TString strvar=Form("VVVV%d",i); + TString vvvvline=macro.GetLineWith(strvar)->GetString(); + vvvvline.ReplaceAll(strvar,bname); + macro.GetLineWith(strvar)->SetString(vvvvline); + } + TString strvar{"if(PCCCC)_treedata"}; + TString ccccline=macro.GetLineWith(strvar)->GetString(); + ccccline.ReplaceAll("PCCCC",_pcut); + macro.GetLineWith(strvar)->SetString(ccccline); + + obj=macro.GetLineWith("add Pid selections"); + place =lines->IndexOf(obj)+1; + for(auto const& selectp : _pidSelect){ + TString strline =Form(" c12.addAtLeastPid(%d,%d);",selectp.first,selectp.second); + lines->AddAt(new TObjString(strline.Data()),place++); + } + for(auto const& selectp : _pidSelectExact){ + TString strline =Form(" c12.addExactPid(%d,%d);",selectp.first,selectp.second); + lines->AddAt(new TObjString(strline.Data()),place++); + } + if(_zeroOfRestPid){ + TString strline =Form(" c12.addZeroOfRestPid();"); + lines->AddAt(new TObjString(strline.Data()),place++); + + } + strvar="if(ECCCC)"; + ccccline=macro.GetLineWith(strvar)->GetString(); + ccccline.ReplaceAll("ECCCC",_evcut); + macro.GetLineWith(strvar)->SetString(ccccline); + + macro.SaveSource(GetCurrMacroName()); + } +} diff --git a/Clas12Root/ParticleTree.h b/Clas12Root/ParticleTree.h new file mode 100644 index 0000000..e576c35 --- /dev/null +++ b/Clas12Root/ParticleTree.h @@ -0,0 +1,42 @@ +#pragma once + + +#include "HipoTreeMaker.h" +#include "clas12reader.h" +#include + +namespace clas12root { + + + class ParticleTree : public HipoTreeMaker { + + + public : + ParticleTree(TString filename, TString treefilename); + virtual ~ParticleTree(); + + + void Loop() final; + void PreCompileAction() final; + + void AddExactPid(short pid,short n){ + _pidSelectExact[pid]=n; + } + void AddAtLeastPid(short pid,short n){ + _pidSelect[pid]=n; + } + void AddZeroOfRestPid(){_zeroOfRestPid=true;} + using c12_uptr = std::unique_ptr; + + c12_uptr clas12(){ + return std::move(c12_uptr + (new clas12::clas12reader(HipoFileName().Data()))); + } + + private : + std::map _pidSelect; + std::map _pidSelectExact; + bool _zeroOfRestPid=false; + + }; +} diff --git a/Clas12Root/src/CMakeLists.txt b/Clas12Root/src/CMakeLists.txt new file mode 100644 index 0000000..e24ddac --- /dev/null +++ b/Clas12Root/src/CMakeLists.txt @@ -0,0 +1,9 @@ + +add_executable (particleDraw particleDraw.cpp) +target_link_libraries(particleDraw ${ROOT_LIBRARIES}) + +add_executable (particleTree particleTree.cpp) +target_link_libraries(particleTree ${ROOT_LIBRARIES}) + + +install (TARGETS particleDraw particleTree DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/Clas12Root/src/particleDraw.cpp b/Clas12Root/src/particleDraw.cpp new file mode 100644 index 0000000..2dc3b6c --- /dev/null +++ b/Clas12Root/src/particleDraw.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include "ParticleHist.h" + + +int main(int argc, char **argv) { + + TString filename=argv[1]; + if(!filename.EndsWith(".hipo")){ + std::cerr<<"Need a hipo file! usage \n particleDraw dir/file.hipo OptionalScript.C"<SetPrompt("ParticleHist [%d] "); + + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root\");"); + app->ProcessLine(Form("clas12root::ParticleHist hists{\"%s\"}",filename.Data())); + if(argc==3) { + TString script=argv[2]; + if(script.EndsWith(".C")) + app->ProcessLine(Form(".x %s",script.Data())); + app->Run(); + } + else app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/particleTree.cpp b/Clas12Root/src/particleTree.cpp new file mode 100644 index 0000000..d938461 --- /dev/null +++ b/Clas12Root/src/particleTree.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include "ParticleTree.h" + + +int main(int argc, char **argv) { + + TString infilename=argv[1]; + if(!infilename.EndsWith(".hipo")){ + std::cerr<<"Need a hipo file! usage \n particleDraw dir/file.hipo OptionalScript.C"<SetPrompt("ParticleTree [%d] "); + + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root\");"); + app->ProcessLine(Form("clas12root::ParticleTree treemaker{\"%s\",\"%s\"}",infilename.Data(),outfilename.Data())); + + if(argc==4) { + TString script=argv[3]; + std::cout<ProcessLine(Form(".x %s",script.Data())); + app->Run(); + } + else app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/templateBankHistAction.C b/Clas12Root/templateBankHistAction.C new file mode 100644 index 0000000..3b0a881 --- /dev/null +++ b/Clas12Root/templateBankHistAction.C @@ -0,0 +1,45 @@ + +#include "HipoRootAction.h" +#include "BankHist.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace clas12root{ + using namespace clas12; + + class NNNNN : public HipoRootAction{ + + void Action(clas12root::HipoROOTOut *hiprout) final{ + auto bhist=dynamic_cast(hiprout); + + auto hists=bhist->Hists(); + + hipo::reader reader; + reader.open(bhist->NextFile().Data()); + + hipo::dictionary factory; + reader.readDictionary(factory); + + clas12::BBBB bank(factory.getSchema(bhist->GetBankName().Data())); + hipo::event event; + while(reader.next()==true){ + reader.read(event); //read event + event.getStructure(bank); //get particle data + + int nrows = bank.getRows(); + for(int i = 0; i < nrows; i++){ + bank.setEntry(i); + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + + } + } + } + + + }; +} diff --git a/Clas12Root/templateParticleHistAction.C b/Clas12Root/templateParticleHistAction.C new file mode 100644 index 0000000..5bad023 --- /dev/null +++ b/Clas12Root/templateParticleHistAction.C @@ -0,0 +1,33 @@ + +#include "HipoRootAction.h" +#include "ParticleHist.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace clas12root{ + using namespace clas12; + + class NNNNN : public HipoRootAction{ + + void Action(clas12root::HipoROOTOut *hiprout) final{ + auto phist=dynamic_cast(hiprout); + + auto hists=phist->Hists(); + clas12::clas12reader c12(phist->NextFile().Data()); + std::vector* particles=c12.getDetParticlesPtr(); + + while(c12.next()==true){ + for(auto& p : *particles){ + ////if(CCCC)hists->at(IIII)->Fill(XXXX); + } + } + } + + + }; +} diff --git a/Clas12Root/templateParticleTreeAction.C b/Clas12Root/templateParticleTreeAction.C new file mode 100644 index 0000000..246f891 --- /dev/null +++ b/Clas12Root/templateParticleTreeAction.C @@ -0,0 +1,61 @@ + +#include "HipoRootAction.h" +#include "ParticleTree.h" +#include "clas12reader.h" +#include "clas12defs.h" +#include "region_particle.h" +#include +#include +#include +#include + +namespace clas12root{ + using namespace clas12; + + class clas12data { + public: + + + ClassDef(clas12data,1); + }; + + class NNNNN : public HipoRootAction{ + + private : + std::vector *_treedata=nullptr; + + public: + + void Action(clas12root::HipoROOTOut *hiprout) final{ + auto ptree=dynamic_cast(hiprout); + + auto tree=ptree->Tree(); + if(!tree->GetBranch("CLAS12Data")){ + _treedata=new std::vector; + tree->Branch("CLAS12Data",&_treedata); + } + clas12::clas12reader c12(ptree->NextFile().Data()); + std::vector* particles=c12.getDetParticlesPtr(); + + //add Pid selections + + + + clas12data particleData; + while(c12.next()==true){ + if(ECCCC) continue; + + for(auto& p : *particles){ + ////particleData.VVVVIIII = XXXX; + + if(PCCCC)_treedata->push_back(particleData); + } + if(_treedata->size()) tree->Fill(); + _treedata->clear(); + } + } + + }; + + +} diff --git a/ClasBanks/TEVNTClass.cc b/ClasBanks/TEVNTClass.cc deleted file mode 100644 index 4e7ace0..0000000 --- a/ClasBanks/TEVNTClass.cc +++ /dev/null @@ -1,55 +0,0 @@ -//////////////////////////////////////////////////////////////////////// -//____________________ -//Begin_Html -

TEVNTClass

-
- Created:
-           Gagik Gavalian (July/2018)
-
-EVENT Class for CLAS12 DSTs. -
-______________________________________________________________________*/
-//End_Html
-////////////////////////////////////////////////////////////////////////
-
-#include "TEVNTClass.h"
-
-ClassImp(TEVNTClass)
-
-TEVNTClass::TEVNTClass(TEVNTClass *TmpEVNT){
-  Id      =   TmpEVNT->Id;
-  Charge  =   TmpEVNT->Charge;
-  Betta   =   TmpEVNT->Betta;
-  Px      =   TmpEVNT->Px;
-  Py      =   TmpEVNT->Py;
-  Pz      =   TmpEVNT->Pz;
-  X       =   TmpEVNT->X;
-  Y       =   TmpEVNT->Y;
-  Z       =   TmpEVNT->Z;
-  Chi2    =   TmpEvent->Chi2;
-  Status  =   TmpEvent->Status;
-}
-
-void   TEVNTClass::Print(){
-  cout << "TEVNTClass::" << endl;
-  cout << "ID      " << Id  << endl;
-  //cout << "Pmom    " <<  Pmom  << endl;
-  //cout << "Mass    " <<  Mass  << endl;
-  cout << "Charge  " << (Int_t) Charge  << endl;
-  cout << "Betta   " << Beta  << endl;
-  cout << "Px      " << Px  << endl;
-  cout << "Py      " << Py  << endl;
-  cout << "Pz      " << Pz  << endl;
-  cout << "X       " << X  << endl;
-  cout << "Y       " << Y  << endl;
-  cout << "Z       " << Z  << endl;
-  cout << "Chi2    " << Chi2  << endl;
-  cout << "Status  " << Status  << endl;
-}
-
-
-////////////////////////////////////////////////////////////////
-//
-//  End of File  TEVNTClass.cc
-////////////////////////////////////////////////////////////////
diff --git a/ClasBanks/TEVNTClass.h b/ClasBanks/TEVNTClass.h
deleted file mode 100644
index 14e0f19..0000000
--- a/ClasBanks/TEVNTClass.h
+++ /dev/null
@@ -1,48 +0,0 @@
-////////////////////////////////////////////////////////////////////////
-// File TEVNTClass.h
-//
-// Initial Author: Gagik Gavalian  JLAB  07/10/2018
-//
-// This file is generated borrowed from original CLASTool library.
-// original authors: G.Gavalian & M.Holtrop
-////////////////////////////////////////////////////////////////////////
-#ifndef _TEVNTClass_
-#define _TEVNTClass_
-#include 
-using namespace std;
-
-
-#include "TObject.h"
-#include "TString.h"
-#include "TVector3.h"
-#include "TMath.h"
-
-class TEVNTClass {
-
-public:
-
- Int_t     Id;     //-> Particle Data Group ID (from SEB)
- Char_t    Charge; //-> charge (from tracking)
- Float_t   Betta;  //-> Particle velocity in the units of c (=R_trk/TOF/c)
- Float_t   Px;     //-> Momentum Vector X component.
- Float_t   Py;     //-> Momentum Vector Y component.
- Float_t   Pz;     //-> Momentum Vector Z component.
- Float_t   X;      //-> "Vertex" Vector X component. The vertex is actually a projection onto a plane.
- Float_t   Y;      //-> "Vertex" Vector Y component. The vertex is actually a projection onto a plane.
- Float_t   Z;      //-> "Vertex" Vector Z component. The vertex is actually a projection onto a plane.
- Float_t   Chi2;   //-> Quality of PID
- Int_t     Status; //-> Defines the status of the particle.
- public:
-  TEVNTClass(){};
-  TEVNTClass(TEVNTClass *TmpEVNT);
-  ~TEVNTClass(){};
-  //Bool_t IsEVNT(){return(kTRUE);};    // True, since it is an EVNT class
-  //Bool_t IsGSIM(){return(kFALSE);};   // False...
-  void 	 Print();
-  //
-  //
-  //
-  //
-  ClassDef(TEVNTClass,1) //Class for accessing the EVNT bank: particle information
-};
-#endif
diff --git a/ClasBanks/TEVNTClassLinkDef.h b/ClasBanks/TEVNTClassLinkDef.h
deleted file mode 100644
index 696bf51..0000000
--- a/ClasBanks/TEVNTClassLinkDef.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifdef __CINT__
-#pragma link off all globals;
-#pragma link off all classes;
-#pragma link off all functions;
-
-#pragma link C++ class TEVNTClass;
-
-#endif
diff --git a/Hipo/CMakeLists.txt b/Hipo/CMakeLists.txt
new file mode 100644
index 0000000..2a8f4fd
--- /dev/null
+++ b/Hipo/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+ROOT_GENERATE_DICTIONARY(G__Hipo utils.h dictionary.h node.h event.h record.h reader.h bank.h  LINKDEF HipoLinkDef.h)
+
+add_library(Hipo SHARED utils.cpp dictionary.cpp node.cpp event.cpp record.cpp reader.cpp bank.cpp G__Hipo.cxx)
+target_link_libraries(Hipo ${ROOT_LIBRARIES})
+
+#install(TARGETS Hipo
+#  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+
+FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo/lib*)
+
+install (FILES ${ROOT_HIPO_PCM}   
+         DESTINATION "${CMAKE_INSTALL_LIBDIR}")
diff --git a/Hipo/Clas12RootLinkDef.h b/Hipo/Clas12RootLinkDef.h
new file mode 100644
index 0000000..b3f3392
--- /dev/null
+++ b/Hipo/Clas12RootLinkDef.h
@@ -0,0 +1,17 @@
+#ifdef __CINT__
+ 
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+#pragma link C++ nestedclasses;
+ 
+//#pragma link C++ defined_in "utils.h";
+#pragma link C++ class ;
+#pragma link C++ class ;
+#pragma link C++ class ;
+#pragma link C++ class ;
+#pragma link C++ class ;
+#pragma link C++ class ;
+#pragma link C++ class ;
+
+#endif
diff --git a/Hipo/HipoLinkDef.h b/Hipo/HipoLinkDef.h
new file mode 100644
index 0000000..a3b618e
--- /dev/null
+++ b/Hipo/HipoLinkDef.h
@@ -0,0 +1,17 @@
+#ifdef __CINT__
+ 
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+#pragma link C++ nestedclasses;
+ 
+//#pragma link C++ defined_in "utils.h";
+#pragma link C++ class hipo::utils+;
+#pragma link C++ class hipo::bank+;
+#pragma link C++ class hipo::reader+;
+#pragma link C++ class hipo::dictionary+;
+#pragma link C++ class hipo::node+;
+#pragma link C++ class hipo::event+;
+#pragma link C++ class hipo::record+;
+
+#endif
diff --git a/Hipo/reader.cpp b/Hipo/reader.cpp
index e390809..ede7346 100644
--- a/Hipo/reader.cpp
+++ b/Hipo/reader.cpp
@@ -365,9 +365,16 @@ void reader::showInfo(){
     printf("-------------------------------------\n");
 }
 
-int   reader::getRecordCount(){
-   return recordIndex.size();
-}
+  int   reader::getRecordCount() const {
+    return recordIndex.size();
+  }
+
+   bool  reader::loadRecord(int irec){
+     return false;    
+  }
+   bool  reader::nextInRecord(){
+     return false;
+   }
 /**
  * Print warning if the library was not compiled with LZ4 library.
  * When this message appears, the compressed files will be unreadable.
diff --git a/Hipo/reader.h b/Hipo/reader.h
index 9aec78c..461f13a 100644
--- a/Hipo/reader.h
+++ b/Hipo/reader.h
@@ -246,13 +246,18 @@ namespace hipo {
         void  readRecord(int index);
         void  readRecord(hipo::record &record, int index);
         void  readHeaderRecord(hipo::record &record);
-        int   getRecordCount();
+        int   getRecordCount() const;
         bool  isOpen();
         void  showInfo();
         void  showBenchmark();
         void  printWarning();
         bool  next();
 
+	//for forward (hipo4) compatability
+	int getNRecords() const {return getRecordCount();}
+	bool loadRecord(int irec);
+	bool nextInRecord();
+	
         void  addListener(hipo::notification *__n){
           readerNotifications.push_back(__n);
         }
diff --git a/RunRoot/LoadClas12Root.C b/RunRoot/LoadClas12Root.C
new file mode 100644
index 0000000..7311b19
--- /dev/null
+++ b/RunRoot/LoadClas12Root.C
@@ -0,0 +1,12 @@
+{
+
+  TString CLAS12TOOL=gSystem->Getenv("CLAS12TOOL");
+  TString LIB=CLAS12TOOL+"/lib/";
+  gSystem->Load(LIB+"liblz4");
+  gSystem->Load(LIB+"libHipo");
+  gSystem->Load(LIB+"libClas12");
+  gSystem->Load(LIB+"libClas12Root");
+
+
+
+}
diff --git a/RunRoot/hiporoot/HipoHistAction.C b/RunRoot/hiporoot/HipoHistAction.C
deleted file mode 100644
index 9f65743..0000000
--- a/RunRoot/hiporoot/HipoHistAction.C
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "HipoHist.h"
-#include "clas12defs.h"
-using namespace clas12;
-
-Double_t hiporoot::HipoHist::Action(){
-  return _p->XXXX;
-}
diff --git a/RunRoot/importToROOT.C b/RunRoot/importToROOT.C
index 0ecdc86..3cd3551 100644
--- a/RunRoot/importToROOT.C
+++ b/RunRoot/importToROOT.C
@@ -29,27 +29,27 @@
   gROOT->LoadMacro("$CLAS12TOOL/Hipo/bank.cpp+");
   
   //Clas12Banks
-  gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Banks");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/vectors.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/header.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/particle.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/mcparticle.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/detector.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/scaler.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/vtp.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/particle_detector.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/scintillator.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/tracker.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/traj.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/forwardtagger.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/cherenkov.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/calorimeter.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/covmatrix.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/region_particle.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/region_ft.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/region_fdet.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/region_cdet.cpp+");
-  gROOT->LoadMacro("$CLAS12TOOL/Banks/clas12reader.cpp+");
+  gSystem->AddIncludePath(TString("-I")+gSystem->Getenv("CLAS12TOOL")+"/Clas12Banks");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/vectors.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/header.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/particle.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/mcparticle.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/detector.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/scaler.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/vtp.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/particle_detector.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/scintillator.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/tracker.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/traj.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/forwardtagger.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/cherenkov.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/calorimeter.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/covmatrix.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/region_particle.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/region_ft.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/region_fdet.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/region_cdet.cpp+");
+  gROOT->LoadMacro("$CLAS12TOOL/Clas12Banks/clas12reader.cpp+");
  
 
 }
diff --git a/cmake_clean.csh b/cmake_clean.csh
new file mode 100755
index 0000000..90afcc0
--- /dev/null
+++ b/cmake_clean.csh
@@ -0,0 +1 @@
+cat $1/install_manifest.txt | xargs rm
diff --git a/include/lz4.h b/include/lz4.h
new file mode 100644
index 0000000..64914ab
--- /dev/null
+++ b/include/lz4.h
@@ -0,0 +1,607 @@
+/*
+ *  LZ4 - Fast LZ compression algorithm
+ *  Header File
+ *  Copyright (C) 2011-2017, Yann Collet.
+
+   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+       * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   You can contact the author at :
+    - LZ4 homepage : http://www.lz4.org
+    - LZ4 source repository : https://github.com/lz4/lz4
+*/
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+#ifndef LZ4_H_2983827168210
+#define LZ4_H_2983827168210
+
+/* --- Dependency --- */
+#include    /* size_t */
+
+
+/**
+  Introduction
+
+  LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core,
+  scalable with multi-cores CPU. It features an extremely fast decoder, with speed in
+  multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.
+
+  The LZ4 compression library provides in-memory compression and decompression functions.
+  Compression can be done in:
+    - a single step (described as Simple Functions)
+    - a single step, reusing a context (described in Advanced Functions)
+    - unbounded multiple steps (described as Streaming compression)
+
+  lz4.h provides block compression functions. It gives full buffer control to user.
+  Decompressing an lz4-compressed block also requires metadata (such as compressed size).
+  Each application is free to encode such metadata in whichever way it wants.
+
+  An additional format, called LZ4 frame specification (doc/lz4_Frame_format.md),
+  take care of encoding standard metadata alongside LZ4-compressed blocks.
+  If your application requires interoperability, it's recommended to use it.
+  A library is provided to take care of it, see lz4frame.h.
+*/
+
+/*^***************************************************************
+*  Export parameters
+*****************************************************************/
+/*
+*  LZ4_DLL_EXPORT :
+*  Enable exporting of functions when building a Windows DLL
+*  LZ4LIB_VISIBILITY :
+*  Control library symbols visibility.
+*/
+#ifndef LZ4LIB_VISIBILITY
+#  if defined(__GNUC__) && (__GNUC__ >= 4)
+#    define LZ4LIB_VISIBILITY __attribute__ ((visibility ("default")))
+#  else
+#    define LZ4LIB_VISIBILITY
+#  endif
+#endif
+#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1)
+#  define LZ4LIB_API __declspec(dllexport) LZ4LIB_VISIBILITY
+#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1)
+#  define LZ4LIB_API __declspec(dllimport) LZ4LIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
+#else
+#  define LZ4LIB_API LZ4LIB_VISIBILITY
+#endif
+
+/*------   Version   ------*/
+#define LZ4_VERSION_MAJOR    1    /* for breaking interface changes  */
+#define LZ4_VERSION_MINOR    8    /* for new (non-breaking) interface capabilities */
+#define LZ4_VERSION_RELEASE  2    /* for tweaks, bug-fixes, or development */
+
+#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
+
+#define LZ4_LIB_VERSION LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE
+#define LZ4_QUOTE(str) #str
+#define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str)
+#define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION)
+
+LZ4LIB_API int LZ4_versionNumber (void);  /**< library version number; useful to check dll version */
+LZ4LIB_API const char* LZ4_versionString (void);   /**< library version string; unseful to check dll version */
+
+
+/*-************************************
+*  Tuning parameter
+**************************************/
+/*!
+ * LZ4_MEMORY_USAGE :
+ * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
+ * Increasing memory usage improves compression ratio
+ * Reduced memory usage may improve speed, thanks to cache effect
+ * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
+ */
+#ifndef LZ4_MEMORY_USAGE
+# define LZ4_MEMORY_USAGE 14
+#endif
+
+/*-************************************
+*  Simple Functions
+**************************************/
+/*! LZ4_compress_default() :
+    Compresses 'srcSize' bytes from buffer 'src'
+    into already allocated 'dst' buffer of size 'dstCapacity'.
+    Compression is guaranteed to succeed if 'dstCapacity' >= LZ4_compressBound(srcSize).
+    It also runs faster, so it's a recommended setting.
+    If the function cannot compress 'src' into a more limited 'dst' budget,
+    compression stops *immediately*, and the function result is zero.
+    Note : as a consequence, 'dst' content is not valid.
+    Note 2 : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer).
+        srcSize : max supported value is LZ4_MAX_INPUT_SIZE.
+        dstCapacity : size of buffer 'dst' (which must be already allocated)
+        return  : the number of bytes written into buffer 'dst' (necessarily <= dstCapacity)
+                  or 0 if compression fails */
+LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity);
+
+/*! LZ4_decompress_safe() :
+    compressedSize : is the exact complete size of the compressed block.
+    dstCapacity : is the size of destination buffer, which must be already allocated.
+    return : the number of bytes decompressed into destination buffer (necessarily <= dstCapacity)
+             If destination buffer is not large enough, decoding will stop and output an error code (negative value).
+             If the source stream is detected malformed, the function will stop decoding and return a negative result.
+             This function is protected against malicious data packets.
+*/
+LZ4LIB_API int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity);
+
+
+/*-************************************
+*  Advanced Functions
+**************************************/
+#define LZ4_MAX_INPUT_SIZE        0x7E000000   /* 2 113 929 216 bytes */
+#define LZ4_COMPRESSBOUND(isize)  ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
+
+/*!
+LZ4_compressBound() :
+    Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible)
+    This function is primarily useful for memory allocation purposes (destination buffer size).
+    Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example).
+    Note that LZ4_compress_default() compresses faster when dstCapacity is >= LZ4_compressBound(srcSize)
+        inputSize  : max supported value is LZ4_MAX_INPUT_SIZE
+        return : maximum output size in a "worst case" scenario
+              or 0, if input size is incorrect (too large or negative)
+*/
+LZ4LIB_API int LZ4_compressBound(int inputSize);
+
+/*!
+LZ4_compress_fast() :
+    Same as LZ4_compress_default(), but allows selection of "acceleration" factor.
+    The larger the acceleration value, the faster the algorithm, but also the lesser the compression.
+    It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed.
+    An acceleration value of "1" is the same as regular LZ4_compress_default()
+    Values <= 0 will be replaced by ACCELERATION_DEFAULT (currently == 1, see lz4.c).
+*/
+LZ4LIB_API int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
+
+
+/*!
+LZ4_compress_fast_extState() :
+    Same compression function, just using an externally allocated memory space to store compression state.
+    Use LZ4_sizeofState() to know how much memory must be allocated,
+    and allocate it on 8-bytes boundaries (using malloc() typically).
+    Then, provide it as 'void* state' to compression function.
+*/
+LZ4LIB_API int LZ4_sizeofState(void);
+LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
+
+
+/*!
+LZ4_compress_destSize() :
+    Reverse the logic : compresses as much data as possible from 'src' buffer
+    into already allocated buffer 'dst' of size 'targetDestSize'.
+    This function either compresses the entire 'src' content into 'dst' if it's large enough,
+    or fill 'dst' buffer completely with as much data as possible from 'src'.
+        *srcSizePtr : will be modified to indicate how many bytes where read from 'src' to fill 'dst'.
+                      New value is necessarily <= old value.
+        return : Nb bytes written into 'dst' (necessarily <= targetDestSize)
+                 or 0 if compression fails
+*/
+LZ4LIB_API int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize);
+
+
+/*!
+LZ4_decompress_fast() : **unsafe!**
+This function is a bit faster than LZ4_decompress_safe(),
+but it may misbehave on malformed input because it doesn't perform full validation of compressed data.
+    originalSize : is the uncompressed size to regenerate
+                   Destination buffer must be already allocated, and its size must be >= 'originalSize' bytes.
+    return : number of bytes read from source buffer (== compressed size).
+             If the source stream is detected malformed, the function stops decoding and return a negative result.
+    note : This function is only usable if the originalSize of uncompressed data is known in advance.
+           The caller should also check that all the compressed input has been consumed properly,
+           i.e. that the return value matches the size of the buffer with compressed input.
+           The function never writes past the output buffer.  However, since it doesn't know its 'src' size,
+           it may read past the intended input.  Also, because match offsets are not validated during decoding,
+           reads from 'src' may underflow.  Use this function in trusted environment **only**.
+*/
+LZ4LIB_API int LZ4_decompress_fast (const char* src, char* dst, int originalSize);
+
+/*!
+LZ4_decompress_safe_partial() :
+    This function decompress a compressed block of size 'srcSize' at position 'src'
+    into destination buffer 'dst' of size 'dstCapacity'.
+    The function will decompress a minimum of 'targetOutputSize' bytes, and stop after that.
+    However, it's not accurate, and may write more than 'targetOutputSize' (but always <= dstCapacity).
+   @return : the number of bytes decoded in the destination buffer (necessarily <= dstCapacity)
+        Note : this number can also be < targetOutputSize, if compressed block contains less data.
+            Therefore, always control how many bytes were decoded.
+            If source stream is detected malformed, function returns a negative result.
+            This function is protected against malicious data packets.
+*/
+LZ4LIB_API int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity);
+
+
+/*-*********************************************
+*  Streaming Compression Functions
+***********************************************/
+typedef union LZ4_stream_u LZ4_stream_t;  /* incomplete type (defined later) */
+
+/*! LZ4_createStream() and LZ4_freeStream() :
+ *  LZ4_createStream() will allocate and initialize an `LZ4_stream_t` structure.
+ *  LZ4_freeStream() releases its memory.
+ */
+LZ4LIB_API LZ4_stream_t* LZ4_createStream(void);
+LZ4LIB_API int           LZ4_freeStream (LZ4_stream_t* streamPtr);
+
+/*! LZ4_resetStream() :
+ *  An LZ4_stream_t structure can be allocated once and re-used multiple times.
+ *  Use this function to start compressing a new stream.
+ */
+LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr);
+
+/*! LZ4_loadDict() :
+ *  Use this function to load a static dictionary into LZ4_stream_t.
+ *  Any previous data will be forgotten, only 'dictionary' will remain in memory.
+ *  Loading a size of 0 is allowed, and is the same as reset.
+ * @return : dictionary size, in bytes (necessarily <= 64 KB)
+ */
+LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
+
+/*! LZ4_compress_fast_continue() :
+ *  Compress 'src' content using data from previously compressed blocks, for better compression ratio.
+ *  'dst' buffer must be already allocated.
+ *  If dstCapacity >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster.
+ *
+ *  Important : The previous 64KB of source data is assumed to remain present and unmodified in memory!
+ *
+ *  Special 1 : When input is a double-buffer, they can have any size, including < 64 KB.
+ *              Make sure that buffers are separated by at least one byte.
+ *              This way, each block only depends on previous block.
+ *  Special 2 : If input buffer is a ring-buffer, it can have any size, including < 64 KB.
+ *
+ * @return : size of compressed block
+ *           or 0 if there is an error (typically, cannot fit into 'dst').
+ *  After an error, the stream status is invalid, it can only be reset or freed.
+ */
+LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
+
+/*! LZ4_saveDict() :
+ *  If last 64KB data cannot be guaranteed to remain available at its current memory location,
+ *  save it into a safer place (char* safeBuffer).
+ *  This is schematically equivalent to a memcpy() followed by LZ4_loadDict(),
+ *  but is much faster, because LZ4_saveDict() doesn't need to rebuild tables.
+ * @return : saved dictionary size in bytes (necessarily <= maxDictSize), or 0 if error.
+ */
+LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize);
+
+
+/*-**********************************************
+*  Streaming Decompression Functions
+*  Bufferless synchronous API
+************************************************/
+typedef union LZ4_streamDecode_u LZ4_streamDecode_t;   /* tracking context */
+
+/*! LZ4_createStreamDecode() and LZ4_freeStreamDecode() :
+ *  creation / destruction of streaming decompression tracking context.
+ *  A tracking context can be re-used multiple times.
+ */
+LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void);
+LZ4LIB_API int                 LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream);
+
+/*! LZ4_setStreamDecode() :
+ *  An LZ4_streamDecode_t context can be allocated once and re-used multiple times.
+ *  Use this function to start decompression of a new stream of blocks.
+ *  A dictionary can optionnally be set. Use NULL or size 0 for a reset order.
+ *  Dictionary is presumed stable : it must remain accessible and unmodified during next decompression.
+ * @return : 1 if OK, 0 if error
+ */
+LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize);
+
+/*! LZ4_decoderRingBufferSize() : v1.8.2
+ *  Note : in a ring buffer scenario (optional),
+ *  blocks are presumed decompressed next to each other
+ *  up to the moment there is not enough remaining space for next block (remainingSize < maxBlockSize),
+ *  at which stage it resumes from beginning of ring buffer.
+ *  When setting such a ring buffer for streaming decompression,
+ *  provides the minimum size of this ring buffer
+ *  to be compatible with any source respecting maxBlockSize condition.
+ * @return : minimum ring buffer size,
+ *           or 0 if there is an error (invalid maxBlockSize).
+ */
+LZ4LIB_API int LZ4_decoderRingBufferSize(int maxBlockSize);
+#define LZ4_DECODER_RING_BUFFER_SIZE(mbs) (65536 + 14 + (mbs))  /* for static allocation; mbs presumed valid */
+
+/*! LZ4_decompress_*_continue() :
+ *  These decoding functions allow decompression of consecutive blocks in "streaming" mode.
+ *  A block is an unsplittable entity, it must be presented entirely to a decompression function.
+ *  Decompression functions only accepts one block at a time.
+ *  The last 64KB of previously decoded data *must* remain available and unmodified at the memory position where they were decoded.
+ *  If less than 64KB of data has been decoded, all the data must be present.
+ *
+ *  Special : if decompression side sets a ring buffer, it must respect one of the following conditions :
+ *  - Decompression buffer size is _at least_ LZ4_decoderRingBufferSize(maxBlockSize).
+ *    maxBlockSize is the maximum size of any single block. It can have any value > 16 bytes.
+ *    In which case, encoding and decoding buffers do not need to be synchronized.
+ *    Actually, data can be produced by any source compliant with LZ4 format specification, and respecting maxBlockSize.
+ *  - Synchronized mode :
+ *    Decompression buffer size is _exactly_ the same as compression buffer size,
+ *    and follows exactly same update rule (block boundaries at same positions),
+ *    and decoding function is provided with exact decompressed size of each block (exception for last block of the stream),
+ *    _then_ decoding & encoding ring buffer can have any size, including small ones ( < 64 KB).
+ *  - Decompression buffer is larger than encoding buffer, by a minimum of maxBlockSize more bytes.
+ *    In which case, encoding and decoding buffers do not need to be synchronized,
+ *    and encoding ring buffer can have any size, including small ones ( < 64 KB).
+ *
+ *  Whenever these conditions are not possible,
+ *  save the last 64KB of decoded data into a safe buffer where it can't be modified during decompression,
+ *  then indicate where this data is saved using LZ4_setStreamDecode(), before decompressing next block.
+*/
+LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int srcSize, int dstCapacity);
+LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize);
+
+
+/*! LZ4_decompress_*_usingDict() :
+ *  These decoding functions work the same as
+ *  a combination of LZ4_setStreamDecode() followed by LZ4_decompress_*_continue()
+ *  They are stand-alone, and don't need an LZ4_streamDecode_t structure.
+ *  Dictionary is presumed stable : it must remain accessible and unmodified during next decompression.
+ */
+LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int srcSize, int dstCapcity, const char* dictStart, int dictSize);
+LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize);
+
+
+/*^**********************************************
+ * !!!!!!   STATIC LINKING ONLY   !!!!!!
+ ***********************************************/
+
+/*-************************************
+ *  Unstable declarations
+ **************************************
+ * Declarations in this section should be considered unstable.
+ * Use at your own peril, etc., etc.
+ * They may be removed in the future.
+ * Their signatures may change.
+ **************************************/
+
+#ifdef LZ4_STATIC_LINKING_ONLY
+
+/*! LZ4_resetStream_fast() :
+ *  Use this, like LZ4_resetStream(), to prepare a context for a new chain of
+ *  calls to a streaming API (e.g., LZ4_compress_fast_continue()).
+ *
+ *  Note:
+ *  Using this in advance of a non- streaming-compression function is redundant,
+ *  and potentially bad for performance, since they all perform their own custom
+ *  reset internally.
+ *
+ *  Differences from LZ4_resetStream():
+ *  When an LZ4_stream_t is known to be in a internally coherent state,
+ *  it can often be prepared for a new compression with almost no work, only
+ *  sometimes falling back to the full, expensive reset that is always required
+ *  when the stream is in an indeterminate state (i.e., the reset performed by
+ *  LZ4_resetStream()).
+ *
+ *  LZ4_streams are guaranteed to be in a valid state when:
+ *  - returned from LZ4_createStream()
+ *  - reset by LZ4_resetStream()
+ *  - memset(stream, 0, sizeof(LZ4_stream_t)), though this is discouraged
+ *  - the stream was in a valid state and was reset by LZ4_resetStream_fast()
+ *  - the stream was in a valid state and was then used in any compression call
+ *    that returned success
+ *  - the stream was in an indeterminate state and was used in a compression
+ *    call that fully reset the state (e.g., LZ4_compress_fast_extState()) and
+ *    that returned success
+ *
+ *  When a stream isn't known to be in a valid state, it is not safe to pass to
+ *  any fastReset or streaming function. It must first be cleansed by the full
+ *  LZ4_resetStream().
+ */
+LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr);
+
+/*! LZ4_compress_fast_extState_fastReset() :
+ *  A variant of LZ4_compress_fast_extState().
+ *
+ *  Using this variant avoids an expensive initialization step. It is only safe
+ *  to call if the state buffer is known to be correctly initialized already
+ *  (see above comment on LZ4_resetStream_fast() for a definition of "correctly
+ *  initialized"). From a high level, the difference is that this function
+ *  initializes the provided state with a call to something like
+ *  LZ4_resetStream_fast() while LZ4_compress_fast_extState() starts with a
+ *  call to LZ4_resetStream().
+ */
+LZ4LIB_API int LZ4_compress_fast_extState_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
+
+/*! LZ4_attach_dictionary() :
+ *  This is an experimental API that allows for the efficient use of a
+ *  static dictionary many times.
+ *
+ *  Rather than re-loading the dictionary buffer into a working context before
+ *  each compression, or copying a pre-loaded dictionary's LZ4_stream_t into a
+ *  working LZ4_stream_t, this function introduces a no-copy setup mechanism,
+ *  in which the working stream references the dictionary stream in-place.
+ *
+ *  Several assumptions are made about the state of the dictionary stream.
+ *  Currently, only streams which have been prepared by LZ4_loadDict() should
+ *  be expected to work.
+ *
+ *  Alternatively, the provided dictionary stream pointer may be NULL, in which
+ *  case any existing dictionary stream is unset.
+ *
+ *  If a dictionary is provided, it replaces any pre-existing stream history.
+ *  The dictionary contents are the only history that can be referenced and
+ *  logically immediately precede the data compressed in the first subsequent
+ *  compression call.
+ *
+ *  The dictionary will only remain attached to the working stream through the
+ *  first compression call, at the end of which it is cleared. The dictionary
+ *  stream (and source buffer) must remain in-place / accessible / unchanged
+ *  through the completion of the first compression call on the stream.
+ */
+LZ4LIB_API void LZ4_attach_dictionary(LZ4_stream_t *working_stream, const LZ4_stream_t *dictionary_stream);
+
+#endif
+
+/*-************************************
+ *  Private definitions
+ **************************************
+ * Do not use these definitions.
+ * They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`.
+ * Using these definitions will expose code to API and/or ABI break in future versions of the library.
+ **************************************/
+#define LZ4_HASHLOG   (LZ4_MEMORY_USAGE-2)
+#define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE)
+#define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG)       /* required as macro for static allocation */
+
+#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
+#include 
+
+typedef struct LZ4_stream_t_internal LZ4_stream_t_internal;
+struct LZ4_stream_t_internal {
+    uint32_t hashTable[LZ4_HASH_SIZE_U32];
+    uint32_t currentOffset;
+    uint16_t initCheck;
+    uint16_t tableType;
+    const uint8_t* dictionary;
+    const LZ4_stream_t_internal* dictCtx;
+    uint32_t dictSize;
+};
+
+typedef struct {
+    const uint8_t* externalDict;
+    size_t extDictSize;
+    const uint8_t* prefixEnd;
+    size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+#else
+
+typedef struct LZ4_stream_t_internal LZ4_stream_t_internal;
+struct LZ4_stream_t_internal {
+    unsigned int hashTable[LZ4_HASH_SIZE_U32];
+    unsigned int currentOffset;
+    unsigned short initCheck;
+    unsigned short tableType;
+    const unsigned char* dictionary;
+    const LZ4_stream_t_internal* dictCtx;
+    unsigned int dictSize;
+};
+
+typedef struct {
+    const unsigned char* externalDict;
+    size_t extDictSize;
+    const unsigned char* prefixEnd;
+    size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+#endif
+
+/*!
+ * LZ4_stream_t :
+ * information structure to track an LZ4 stream.
+ * init this structure before first use.
+ * note : only use in association with static linking !
+ *        this definition is not API/ABI safe,
+ *        it may change in a future version !
+ */
+#define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4)
+#define LZ4_STREAMSIZE     (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long))
+union LZ4_stream_u {
+    unsigned long long table[LZ4_STREAMSIZE_U64];
+    LZ4_stream_t_internal internal_donotuse;
+} ;  /* previously typedef'd to LZ4_stream_t */
+
+
+/*!
+ * LZ4_streamDecode_t :
+ * information structure to track an LZ4 stream during decompression.
+ * init this structure  using LZ4_setStreamDecode (or memset()) before first use
+ * note : only use in association with static linking !
+ *        this definition is not API/ABI safe,
+ *        and may change in a future version !
+ */
+#define LZ4_STREAMDECODESIZE_U64  4
+#define LZ4_STREAMDECODESIZE     (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long))
+union LZ4_streamDecode_u {
+    unsigned long long table[LZ4_STREAMDECODESIZE_U64];
+    LZ4_streamDecode_t_internal internal_donotuse;
+} ;   /* previously typedef'd to LZ4_streamDecode_t */
+
+
+/*-************************************
+*  Obsolete Functions
+**************************************/
+
+/*! Deprecation warnings
+   Should deprecation warnings be a problem,
+   it is generally possible to disable them,
+   typically with -Wno-deprecated-declarations for gcc
+   or _CRT_SECURE_NO_WARNINGS in Visual.
+   Otherwise, it's also possible to define LZ4_DISABLE_DEPRECATE_WARNINGS */
+#ifdef LZ4_DISABLE_DEPRECATE_WARNINGS
+#  define LZ4_DEPRECATED(message)   /* disable deprecation warnings */
+#else
+#  define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#  if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
+#    define LZ4_DEPRECATED(message) [[deprecated(message)]]
+#  elif (LZ4_GCC_VERSION >= 405) || defined(__clang__)
+#    define LZ4_DEPRECATED(message) __attribute__((deprecated(message)))
+#  elif (LZ4_GCC_VERSION >= 301)
+#    define LZ4_DEPRECATED(message) __attribute__((deprecated))
+#  elif defined(_MSC_VER)
+#    define LZ4_DEPRECATED(message) __declspec(deprecated(message))
+#  else
+#    pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler")
+#    define LZ4_DEPRECATED(message)
+#  endif
+#endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */
+
+/* Obsolete compression functions */
+LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress               (const char* source, char* dest, int sourceSize);
+LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize);
+LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState               (void* state, const char* source, char* dest, int inputSize);
+LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
+LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue                (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize);
+LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue  (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
+
+/* Obsolete decompression functions */
+LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress (const char* source, char* dest, int outputSize);
+LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize);
+
+/* Obsolete streaming functions; degraded functionality; do not use!
+ *
+ * In order to perform streaming compression, these functions depended on data
+ * that is no longer tracked in the state. They have been preserved as well as
+ * possible: using them will still produce a correct output. However, they don't
+ * actually retain any history between compression calls. The compression ratio
+ * achieved will therefore be no better than compressing each chunk
+ * independently.
+ */
+LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void* LZ4_create (char* inputBuffer);
+LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API int   LZ4_sizeofStreamState(void);
+LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API  int   LZ4_resetStreamState(void* state, char* inputBuffer);
+LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API     char* LZ4_slideInputBuffer (void* state);
+
+/* Obsolete streaming decoding functions */
+LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize);
+LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize);
+
+#endif /* LZ4_H_2983827168210 */
+
+
+#if defined (__cplusplus)
+}
+#endif
diff --git a/include/lz4frame.h b/include/lz4frame.h
new file mode 100644
index 0000000..fb434ff
--- /dev/null
+++ b/include/lz4frame.h
@@ -0,0 +1,532 @@
+/*
+   LZ4 auto-framing library
+   Header File
+   Copyright (C) 2011-2017, Yann Collet.
+   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+       * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   You can contact the author at :
+   - LZ4 source repository : https://github.com/lz4/lz4
+   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
+*/
+
+/* LZ4F is a stand-alone API to create LZ4-compressed frames
+ * conformant with specification v1.5.1.
+ * It also offers streaming capabilities.
+ * lz4.h is not required when using lz4frame.h.
+ * */
+
+#ifndef LZ4F_H_09782039843
+#define LZ4F_H_09782039843
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/* ---   Dependency   --- */
+#include    /* size_t */
+
+
+/**
+  Introduction
+
+  lz4frame.h implements LZ4 frame specification (doc/lz4_Frame_format.md).
+  lz4frame.h provides frame compression functions that take care
+  of encoding standard metadata alongside LZ4-compressed blocks.
+*/
+
+/*-***************************************************************
+ *  Compiler specifics
+ *****************************************************************/
+/*  LZ4_DLL_EXPORT :
+ *  Enable exporting of functions when building a Windows DLL
+ *  LZ4FLIB_API :
+ *  Control library symbols visibility.
+ */
+#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1)
+#  define LZ4FLIB_API __declspec(dllexport)
+#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1)
+#  define LZ4FLIB_API __declspec(dllimport)
+#elif defined(__GNUC__) && (__GNUC__ >= 4)
+#  define LZ4FLIB_API __attribute__ ((__visibility__ ("default")))
+#else
+#  define LZ4FLIB_API
+#endif
+
+#ifdef LZ4F_DISABLE_DEPRECATE_WARNINGS
+#  define LZ4F_DEPRECATE(x) x
+#else
+#  if defined(_MSC_VER)
+#    define LZ4F_DEPRECATE(x) x   /* __declspec(deprecated) x - only works with C++ */
+#  elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6))
+#    define LZ4F_DEPRECATE(x) x __attribute__((deprecated))
+#  else
+#    define LZ4F_DEPRECATE(x) x   /* no deprecation warning for this compiler */
+#  endif
+#endif
+
+
+/*-************************************
+ *  Error management
+ **************************************/
+typedef size_t LZ4F_errorCode_t;
+
+LZ4FLIB_API unsigned    LZ4F_isError(LZ4F_errorCode_t code);   /**< tells when a function result is an error code */
+LZ4FLIB_API const char* LZ4F_getErrorName(LZ4F_errorCode_t code);   /**< return error code string; for debugging */
+
+
+/*-************************************
+ *  Frame compression types
+ **************************************/
+/* #define LZ4F_ENABLE_OBSOLETE_ENUMS   // uncomment to enable obsolete enums */
+#ifdef LZ4F_ENABLE_OBSOLETE_ENUMS
+#  define LZ4F_OBSOLETE_ENUM(x) , LZ4F_DEPRECATE(x) = LZ4F_##x
+#else
+#  define LZ4F_OBSOLETE_ENUM(x)
+#endif
+
+/* The larger the block size, the (slightly) better the compression ratio,
+ * though there are diminishing returns.
+ * Larger blocks also increase memory usage on both compression and decompression sides. */
+typedef enum {
+    LZ4F_default=0,
+    LZ4F_max64KB=4,
+    LZ4F_max256KB=5,
+    LZ4F_max1MB=6,
+    LZ4F_max4MB=7
+    LZ4F_OBSOLETE_ENUM(max64KB)
+    LZ4F_OBSOLETE_ENUM(max256KB)
+    LZ4F_OBSOLETE_ENUM(max1MB)
+    LZ4F_OBSOLETE_ENUM(max4MB)
+} LZ4F_blockSizeID_t;
+
+/* Linked blocks sharply reduce inefficiencies when using small blocks,
+ * they compress better.
+ * However, some LZ4 decoders are only compatible with independent blocks */
+typedef enum {
+    LZ4F_blockLinked=0,
+    LZ4F_blockIndependent
+    LZ4F_OBSOLETE_ENUM(blockLinked)
+    LZ4F_OBSOLETE_ENUM(blockIndependent)
+} LZ4F_blockMode_t;
+
+typedef enum {
+    LZ4F_noContentChecksum=0,
+    LZ4F_contentChecksumEnabled
+    LZ4F_OBSOLETE_ENUM(noContentChecksum)
+    LZ4F_OBSOLETE_ENUM(contentChecksumEnabled)
+} LZ4F_contentChecksum_t;
+
+typedef enum {
+    LZ4F_noBlockChecksum=0,
+    LZ4F_blockChecksumEnabled
+} LZ4F_blockChecksum_t;
+
+typedef enum {
+    LZ4F_frame=0,
+    LZ4F_skippableFrame
+    LZ4F_OBSOLETE_ENUM(skippableFrame)
+} LZ4F_frameType_t;
+
+#ifdef LZ4F_ENABLE_OBSOLETE_ENUMS
+typedef LZ4F_blockSizeID_t blockSizeID_t;
+typedef LZ4F_blockMode_t blockMode_t;
+typedef LZ4F_frameType_t frameType_t;
+typedef LZ4F_contentChecksum_t contentChecksum_t;
+#endif
+
+/*! LZ4F_frameInfo_t :
+ *  makes it possible to set or read frame parameters.
+ *  It's not required to set all fields, as long as the structure was initially memset() to zero.
+ *  For all fields, 0 sets it to default value */
+typedef struct {
+  LZ4F_blockSizeID_t     blockSizeID;         /* max64KB, max256KB, max1MB, max4MB; 0 == default */
+  LZ4F_blockMode_t       blockMode;           /* LZ4F_blockLinked, LZ4F_blockIndependent; 0 == default */
+  LZ4F_contentChecksum_t contentChecksumFlag; /* 1: frame terminated with 32-bit checksum of decompressed data; 0: disabled (default) */
+  LZ4F_frameType_t       frameType;           /* read-only field : LZ4F_frame or LZ4F_skippableFrame */
+  unsigned long long     contentSize;         /* Size of uncompressed content ; 0 == unknown */
+  unsigned               dictID;              /* Dictionary ID, sent by compressor to help decoder select correct dictionary; 0 == no dictID provided */
+  LZ4F_blockChecksum_t   blockChecksumFlag;   /* 1: each block followed by a checksum of block's compressed data; 0: disabled (default) */
+} LZ4F_frameInfo_t;
+
+/*! LZ4F_preferences_t :
+ *  makes it possible to supply detailed compression parameters to the stream interface.
+ *  Structure is presumed initially memset() to zero, representing default settings.
+ *  All reserved fields must be set to zero. */
+typedef struct {
+  LZ4F_frameInfo_t frameInfo;
+  int      compressionLevel;    /* 0: default (fast mode); values > LZ4HC_CLEVEL_MAX count as LZ4HC_CLEVEL_MAX; values < 0 trigger "fast acceleration" */
+  unsigned autoFlush;           /* 1: always flush, to reduce usage of internal buffers */
+  unsigned favorDecSpeed;       /* 1: parser favors decompression speed vs compression ratio. Only works for high compression modes (>= LZ4LZ4HC_CLEVEL_OPT_MIN) */  /* >= v1.8.2 */
+  unsigned reserved[3];         /* must be zero for forward compatibility */
+} LZ4F_preferences_t;
+
+LZ4FLIB_API int LZ4F_compressionLevel_max(void);
+
+
+/*-*********************************
+*  Simple compression function
+***********************************/
+/*! LZ4F_compressFrameBound() :
+ *  Returns the maximum possible compressed size with LZ4F_compressFrame() given srcSize and preferences.
+ * `preferencesPtr` is optional. It can be replaced by NULL, in which case, the function will assume default preferences.
+ *  Note : this result is only usable with LZ4F_compressFrame().
+ *         It may also be used with LZ4F_compressUpdate() _if no flush() operation_ is performed.
+ */
+LZ4FLIB_API size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t* preferencesPtr);
+
+/*! LZ4F_compressFrame() :
+ *  Compress an entire srcBuffer into a valid LZ4 frame.
+ *  dstCapacity MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr).
+ *  The LZ4F_preferences_t structure is optional : you can provide NULL as argument. All preferences will be set to default.
+ * @return : number of bytes written into dstBuffer.
+ *           or an error code if it fails (can be tested using LZ4F_isError())
+ */
+LZ4FLIB_API size_t LZ4F_compressFrame(void* dstBuffer, size_t dstCapacity,
+                                const void* srcBuffer, size_t srcSize,
+                                const LZ4F_preferences_t* preferencesPtr);
+
+
+/*-***********************************
+*  Advanced compression functions
+*************************************/
+typedef struct LZ4F_cctx_s LZ4F_cctx;   /* incomplete type */
+typedef LZ4F_cctx* LZ4F_compressionContext_t;   /* for compatibility with previous API version */
+
+typedef struct {
+  unsigned stableSrc;    /* 1 == src content will remain present on future calls to LZ4F_compress(); skip copying src content within tmp buffer */
+  unsigned reserved[3];
+} LZ4F_compressOptions_t;
+
+/*---   Resource Management   ---*/
+
+#define LZ4F_VERSION 100
+LZ4FLIB_API unsigned LZ4F_getVersion(void);
+/*! LZ4F_createCompressionContext() :
+ * The first thing to do is to create a compressionContext object, which will be used in all compression operations.
+ * This is achieved using LZ4F_createCompressionContext(), which takes as argument a version.
+ * The version provided MUST be LZ4F_VERSION. It is intended to track potential version mismatch, notably when using DLL.
+ * The function will provide a pointer to a fully allocated LZ4F_cctx object.
+ * If @return != zero, there was an error during context creation.
+ * Object can release its memory using LZ4F_freeCompressionContext();
+ */
+LZ4FLIB_API LZ4F_errorCode_t LZ4F_createCompressionContext(LZ4F_cctx** cctxPtr, unsigned version);
+LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_cctx* cctx);
+
+
+/*----    Compression    ----*/
+
+#define LZ4F_HEADER_SIZE_MAX 19   /* LZ4 Frame header size can vary from 7 to 19 bytes */
+/*! LZ4F_compressBegin() :
+ *  will write the frame header into dstBuffer.
+ *  dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
+ * `prefsPtr` is optional : you can provide NULL as argument, all preferences will then be set to default.
+ * @return : number of bytes written into dstBuffer for the header
+ *           or an error code (which can be tested using LZ4F_isError())
+ */
+LZ4FLIB_API size_t LZ4F_compressBegin(LZ4F_cctx* cctx,
+                                      void* dstBuffer, size_t dstCapacity,
+                                      const LZ4F_preferences_t* prefsPtr);
+
+/*! LZ4F_compressBound() :
+ *  Provides minimum dstCapacity required to guarantee compression success
+ *  given a srcSize and preferences, covering worst case scenario.
+ *  prefsPtr is optional : when NULL is provided, preferences will be set to cover worst case scenario.
+ *  Estimation is valid for either LZ4F_compressUpdate(), LZ4F_flush() or LZ4F_compressEnd(),
+ *  Estimation includes the possibility that internal buffer might already be filled by up to (blockSize-1) bytes.
+ *  It also includes frame footer (ending + checksum), which would have to be generated by LZ4F_compressEnd().
+ *  Estimation doesn't include frame header, as it was already generated by LZ4F_compressBegin().
+ *  Result is always the same for a srcSize and prefsPtr, so it can be trusted to size reusable buffers.
+ *  When srcSize==0, LZ4F_compressBound() provides an upper bound for LZ4F_flush() and LZ4F_compressEnd() operations.
+ */
+LZ4FLIB_API size_t LZ4F_compressBound(size_t srcSize, const LZ4F_preferences_t* prefsPtr);
+
+/*! LZ4F_compressUpdate() :
+ *  LZ4F_compressUpdate() can be called repetitively to compress as much data as necessary.
+ *  Important rule: dstCapacity MUST be large enough to ensure operation success even in worst case situations.
+ *  This value is provided by LZ4F_compressBound().
+ *  If this condition is not respected, LZ4F_compress() will fail (result is an errorCode).
+ *  LZ4F_compressUpdate() doesn't guarantee error recovery.
+ *  When an error occurs, compression context must be freed or resized.
+ * `cOptPtr` is optional : NULL can be provided, in which case all options are set to default.
+ * @return : number of bytes written into `dstBuffer` (it can be zero, meaning input data was just buffered).
+ *           or an error code if it fails (which can be tested using LZ4F_isError())
+ */
+LZ4FLIB_API size_t LZ4F_compressUpdate(LZ4F_cctx* cctx,
+                                       void* dstBuffer, size_t dstCapacity,
+                                 const void* srcBuffer, size_t srcSize,
+                                 const LZ4F_compressOptions_t* cOptPtr);
+
+/*! LZ4F_flush() :
+ *  When data must be generated and sent immediately, without waiting for a block to be completely filled,
+ *  it's possible to call LZ4_flush(). It will immediately compress any data buffered within cctx.
+ * `dstCapacity` must be large enough to ensure the operation will be successful.
+ * `cOptPtr` is optional : it's possible to provide NULL, all options will be set to default.
+ * @return : nb of bytes written into dstBuffer (can be zero, when there is no data stored within cctx)
+ *           or an error code if it fails (which can be tested using LZ4F_isError())
+ */
+LZ4FLIB_API size_t LZ4F_flush(LZ4F_cctx* cctx,
+                              void* dstBuffer, size_t dstCapacity,
+                        const LZ4F_compressOptions_t* cOptPtr);
+
+/*! LZ4F_compressEnd() :
+ *  To properly finish an LZ4 frame, invoke LZ4F_compressEnd().
+ *  It will flush whatever data remained within `cctx` (like LZ4_flush())
+ *  and properly finalize the frame, with an endMark and a checksum.
+ * `cOptPtr` is optional : NULL can be provided, in which case all options will be set to default.
+ * @return : nb of bytes written into dstBuffer, necessarily >= 4 (endMark),
+ *           or an error code if it fails (which can be tested using LZ4F_isError())
+ *  A successful call to LZ4F_compressEnd() makes `cctx` available again for another compression task.
+ */
+LZ4FLIB_API size_t LZ4F_compressEnd(LZ4F_cctx* cctx,
+                                    void* dstBuffer, size_t dstCapacity,
+                              const LZ4F_compressOptions_t* cOptPtr);
+
+
+/*-*********************************
+*  Decompression functions
+***********************************/
+typedef struct LZ4F_dctx_s LZ4F_dctx;   /* incomplete type */
+typedef LZ4F_dctx* LZ4F_decompressionContext_t;   /* compatibility with previous API versions */
+
+typedef struct {
+  unsigned stableDst;    /* pledges that last 64KB decompressed data will remain available unmodified. This optimization skips storage operations in tmp buffers. */
+  unsigned reserved[3];  /* must be set to zero for forward compatibility */
+} LZ4F_decompressOptions_t;
+
+
+/* Resource management */
+
+/*! LZ4F_createDecompressionContext() :
+ *  Create an LZ4F_dctx object, to track all decompression operations.
+ *  The version provided MUST be LZ4F_VERSION.
+ *  The function provides a pointer to an allocated and initialized LZ4F_dctx object.
+ *  The result is an errorCode, which can be tested using LZ4F_isError().
+ *  dctx memory can be released using LZ4F_freeDecompressionContext();
+ *  Result of LZ4F_freeDecompressionContext() indicates current state of decompressionContext when being released.
+ *  That is, it should be == 0 if decompression has been completed fully and correctly.
+ */
+LZ4FLIB_API LZ4F_errorCode_t LZ4F_createDecompressionContext(LZ4F_dctx** dctxPtr, unsigned version);
+LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* dctx);
+
+
+/*-***********************************
+*  Streaming decompression functions
+*************************************/
+
+/*! LZ4F_getFrameInfo() :
+ *  This function extracts frame parameters (max blockSize, dictID, etc.).
+ *  Its usage is optional.
+ *  Extracted information is typically useful for allocation and dictionary.
+ *  This function works in 2 situations :
+ *   - At the beginning of a new frame, in which case
+ *     it will decode information from `srcBuffer`, starting the decoding process.
+ *     Input size must be large enough to successfully decode the entire frame header.
+ *     Frame header size is variable, but is guaranteed to be <= LZ4F_HEADER_SIZE_MAX bytes.
+ *     It's allowed to provide more input data than this minimum.
+ *   - After decoding has been started.
+ *     In which case, no input is read, frame parameters are extracted from dctx.
+ *   - If decoding has barely started, but not yet extracted information from header,
+ *     LZ4F_getFrameInfo() will fail.
+ *  The number of bytes consumed from srcBuffer will be updated within *srcSizePtr (necessarily <= original value).
+ *  Decompression must resume from (srcBuffer + *srcSizePtr).
+ * @return : an hint about how many srcSize bytes LZ4F_decompress() expects for next call,
+ *           or an error code which can be tested using LZ4F_isError().
+ *  note 1 : in case of error, dctx is not modified. Decoding operation can resume from beginning safely.
+ *  note 2 : frame parameters are *copied into* an already allocated LZ4F_frameInfo_t structure.
+ */
+LZ4FLIB_API size_t LZ4F_getFrameInfo(LZ4F_dctx* dctx,
+                                     LZ4F_frameInfo_t* frameInfoPtr,
+                                     const void* srcBuffer, size_t* srcSizePtr);
+
+/*! LZ4F_decompress() :
+ *  Call this function repetitively to regenerate compressed data from `srcBuffer`.
+ *  The function will read up to *srcSizePtr bytes from srcBuffer,
+ *  and decompress data into dstBuffer, of capacity *dstSizePtr.
+ *
+ *  The nb of bytes consumed from srcBuffer will be written into *srcSizePtr (necessarily <= original value).
+ *  The nb of bytes decompressed into dstBuffer will be written into *dstSizePtr (necessarily <= original value).
+ *
+ *  The function does not necessarily read all input bytes, so always check value in *srcSizePtr.
+ *  Unconsumed source data must be presented again in subsequent invocations.
+ *
+ * `dstBuffer` can freely change between each consecutive function invocation.
+ * `dstBuffer` content will be overwritten.
+ *
+ * @return : an hint of how many `srcSize` bytes LZ4F_decompress() expects for next call.
+ *  Schematically, it's the size of the current (or remaining) compressed block + header of next block.
+ *  Respecting the hint provides some small speed benefit, because it skips intermediate buffers.
+ *  This is just a hint though, it's always possible to provide any srcSize.
+ *
+ *  When a frame is fully decoded, @return will be 0 (no more data expected).
+ *  When provided with more bytes than necessary to decode a frame,
+ *  LZ4F_decompress() will stop reading exactly at end of current frame, and @return 0.
+ *
+ *  If decompression failed, @return is an error code, which can be tested using LZ4F_isError().
+ *  After a decompression error, the `dctx` context is not resumable.
+ *  Use LZ4F_resetDecompressionContext() to return to clean state.
+ *
+ *  After a frame is fully decoded, dctx can be used again to decompress another frame.
+ */
+LZ4FLIB_API size_t LZ4F_decompress(LZ4F_dctx* dctx,
+                                   void* dstBuffer, size_t* dstSizePtr,
+                                   const void* srcBuffer, size_t* srcSizePtr,
+                                   const LZ4F_decompressOptions_t* dOptPtr);
+
+
+/*! LZ4F_resetDecompressionContext() : added in v1.8.0
+ *  In case of an error, the context is left in "undefined" state.
+ *  In which case, it's necessary to reset it, before re-using it.
+ *  This method can also be used to abruptly stop any unfinished decompression,
+ *  and start a new one using same context resources. */
+LZ4FLIB_API void LZ4F_resetDecompressionContext(LZ4F_dctx* dctx);   /* always successful */
+
+
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif  /* LZ4F_H_09782039843 */
+
+#if defined(LZ4F_STATIC_LINKING_ONLY) && !defined(LZ4F_H_STATIC_09782039843)
+#define LZ4F_H_STATIC_09782039843
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/* These declarations are not stable and may change in the future. They are
+ * therefore only safe to depend on when the caller is statically linked
+ * against the library. To access their declarations, define
+ * LZ4F_STATIC_LINKING_ONLY.
+ *
+ * There is a further protection mechanism where these symbols aren't published
+ * into shared/dynamic libraries. You can override this behavior and force
+ * them to be published by defining LZ4F_PUBLISH_STATIC_FUNCTIONS. Use at
+ * your own risk.
+ */
+#ifdef LZ4F_PUBLISH_STATIC_FUNCTIONS
+#define LZ4FLIB_STATIC_API LZ4FLIB_API
+#else
+#define LZ4FLIB_STATIC_API
+#endif
+
+
+/* ---   Error List   --- */
+#define LZ4F_LIST_ERRORS(ITEM) \
+        ITEM(OK_NoError) \
+        ITEM(ERROR_GENERIC) \
+        ITEM(ERROR_maxBlockSize_invalid) \
+        ITEM(ERROR_blockMode_invalid) \
+        ITEM(ERROR_contentChecksumFlag_invalid) \
+        ITEM(ERROR_compressionLevel_invalid) \
+        ITEM(ERROR_headerVersion_wrong) \
+        ITEM(ERROR_blockChecksum_invalid) \
+        ITEM(ERROR_reservedFlag_set) \
+        ITEM(ERROR_allocation_failed) \
+        ITEM(ERROR_srcSize_tooLarge) \
+        ITEM(ERROR_dstMaxSize_tooSmall) \
+        ITEM(ERROR_frameHeader_incomplete) \
+        ITEM(ERROR_frameType_unknown) \
+        ITEM(ERROR_frameSize_wrong) \
+        ITEM(ERROR_srcPtr_wrong) \
+        ITEM(ERROR_decompressionFailed) \
+        ITEM(ERROR_headerChecksum_invalid) \
+        ITEM(ERROR_contentChecksum_invalid) \
+        ITEM(ERROR_frameDecoding_alreadyStarted) \
+        ITEM(ERROR_maxCode)
+
+#define LZ4F_GENERATE_ENUM(ENUM) LZ4F_##ENUM,
+
+/* enum list is exposed, to handle specific errors */
+typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM) } LZ4F_errorCodes;
+
+LZ4FLIB_STATIC_API LZ4F_errorCodes LZ4F_getErrorCode(size_t functionResult);
+
+
+
+/**********************************
+ *  Bulk processing dictionary API
+ *********************************/
+typedef struct LZ4F_CDict_s LZ4F_CDict;
+
+/*! LZ4_createCDict() :
+ *  When compressing multiple messages / blocks with the same dictionary, it's recommended to load it just once.
+ *  LZ4_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay.
+ *  LZ4_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only.
+ * `dictBuffer` can be released after LZ4_CDict creation, since its content is copied within CDict */
+LZ4FLIB_STATIC_API LZ4F_CDict* LZ4F_createCDict(const void* dictBuffer, size_t dictSize);
+LZ4FLIB_STATIC_API void        LZ4F_freeCDict(LZ4F_CDict* CDict);
+
+
+/*! LZ4_compressFrame_usingCDict() :
+ *  Compress an entire srcBuffer into a valid LZ4 frame using a digested Dictionary.
+ *  cctx must point to a context created by LZ4F_createCompressionContext().
+ *  If cdict==NULL, compress without a dictionary.
+ *  dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr).
+ *  If this condition is not respected, function will fail (@return an errorCode).
+ *  The LZ4F_preferences_t structure is optional : you may provide NULL as argument,
+ *  but it's not recommended, as it's the only way to provide dictID in the frame header.
+ * @return : number of bytes written into dstBuffer.
+ *           or an error code if it fails (can be tested using LZ4F_isError()) */
+LZ4FLIB_STATIC_API size_t LZ4F_compressFrame_usingCDict(
+    LZ4F_cctx* cctx,
+    void* dst, size_t dstCapacity,
+    const void* src, size_t srcSize,
+    const LZ4F_CDict* cdict,
+    const LZ4F_preferences_t* preferencesPtr);
+
+
+/*! LZ4F_compressBegin_usingCDict() :
+ *  Inits streaming dictionary compression, and writes the frame header into dstBuffer.
+ *  dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes.
+ * `prefsPtr` is optional : you may provide NULL as argument,
+ *  however, it's the only way to provide dictID in the frame header.
+ * @return : number of bytes written into dstBuffer for the header,
+ *           or an error code (which can be tested using LZ4F_isError()) */
+LZ4FLIB_STATIC_API size_t LZ4F_compressBegin_usingCDict(
+    LZ4F_cctx* cctx,
+    void* dstBuffer, size_t dstCapacity,
+    const LZ4F_CDict* cdict,
+    const LZ4F_preferences_t* prefsPtr);
+
+
+/*! LZ4F_decompress_usingDict() :
+ *  Same as LZ4F_decompress(), using a predefined dictionary.
+ *  Dictionary is used "in place", without any preprocessing.
+ *  It must remain accessible throughout the entire frame decoding. */
+LZ4FLIB_STATIC_API size_t LZ4F_decompress_usingDict(
+    LZ4F_dctx* dctxPtr,
+    void* dstBuffer, size_t* dstSizePtr,
+    const void* srcBuffer, size_t* srcSizePtr,
+    const void* dict, size_t dictSize,
+    const LZ4F_decompressOptions_t* decompressOptionsPtr);
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif  /* defined(LZ4F_STATIC_LINKING_ONLY) && !defined(LZ4F_H_STATIC_09782039843) */
diff --git a/include/lz4hc.h b/include/lz4hc.h
new file mode 100644
index 0000000..970fa39
--- /dev/null
+++ b/include/lz4hc.h
@@ -0,0 +1,355 @@
+/*
+   LZ4 HC - High Compression Mode of LZ4
+   Header File
+   Copyright (C) 2011-2017, Yann Collet.
+   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+       * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   You can contact the author at :
+   - LZ4 source repository : https://github.com/lz4/lz4
+   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
+*/
+#ifndef LZ4_HC_H_19834876238432
+#define LZ4_HC_H_19834876238432
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/* --- Dependency --- */
+/* note : lz4hc requires lz4.h/lz4.c for compilation */
+#include "lz4.h"   /* stddef, LZ4LIB_API, LZ4_DEPRECATED */
+
+
+/* --- Useful constants --- */
+#define LZ4HC_CLEVEL_MIN         3
+#define LZ4HC_CLEVEL_DEFAULT     9
+#define LZ4HC_CLEVEL_OPT_MIN    10
+#define LZ4HC_CLEVEL_MAX        12
+
+
+/*-************************************
+ *  Block Compression
+ **************************************/
+/*! LZ4_compress_HC() :
+ *  Compress data from `src` into `dst`, using the more powerful but slower "HC" algorithm.
+ * `dst` must be already allocated.
+ *  Compression is guaranteed to succeed if `dstCapacity >= LZ4_compressBound(srcSize)` (see "lz4.h")
+ *  Max supported `srcSize` value is LZ4_MAX_INPUT_SIZE (see "lz4.h")
+ * `compressionLevel` : any value between 1 and LZ4HC_CLEVEL_MAX will work.
+ *                      Values > LZ4HC_CLEVEL_MAX behave the same as LZ4HC_CLEVEL_MAX.
+ * @return : the number of bytes written into 'dst'
+ *           or 0 if compression fails.
+ */
+LZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel);
+
+
+/* Note :
+ *   Decompression functions are provided within "lz4.h" (BSD license)
+ */
+
+
+/*! LZ4_compress_HC_extStateHC() :
+ *  Same as LZ4_compress_HC(), but using an externally allocated memory segment for `state`.
+ * `state` size is provided by LZ4_sizeofStateHC().
+ *  Memory segment must be aligned on 8-bytes boundaries (which a normal malloc() should do properly).
+ */
+LZ4LIB_API int LZ4_sizeofStateHC(void);
+LZ4LIB_API int LZ4_compress_HC_extStateHC(void* state, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel);
+
+
+/*-************************************
+ *  Streaming Compression
+ *  Bufferless synchronous API
+ **************************************/
+ typedef union LZ4_streamHC_u LZ4_streamHC_t;   /* incomplete type (defined later) */
+
+/*! LZ4_createStreamHC() and LZ4_freeStreamHC() :
+ *  These functions create and release memory for LZ4 HC streaming state.
+ *  Newly created states are automatically initialized.
+ *  Existing states can be re-used several times, using LZ4_resetStreamHC().
+ *  These methods are API and ABI stable, they can be used in combination with a DLL.
+ */
+LZ4LIB_API LZ4_streamHC_t* LZ4_createStreamHC(void);
+LZ4LIB_API int             LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr);
+
+LZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel);
+LZ4LIB_API int  LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize);
+
+LZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, const char* src, char* dst, int srcSize, int maxDstSize);
+
+LZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize);
+
+/*
+  These functions compress data in successive blocks of any size, using previous blocks as dictionary.
+  One key assumption is that previous blocks (up to 64 KB) remain read-accessible while compressing next blocks.
+  There is an exception for ring buffers, which can be smaller than 64 KB.
+  Ring buffers scenario is automatically detected and handled by LZ4_compress_HC_continue().
+
+  Before starting compression, state must be properly initialized, using LZ4_resetStreamHC().
+  A first "fictional block" can then be designated as initial dictionary, using LZ4_loadDictHC() (Optional).
+
+  Then, use LZ4_compress_HC_continue() to compress each successive block.
+  Previous memory blocks (including initial dictionary when present) must remain accessible and unmodified during compression.
+  'dst' buffer should be sized to handle worst case scenarios (see LZ4_compressBound()), to ensure operation success.
+  Because in case of failure, the API does not guarantee context recovery, and context will have to be reset.
+  If `dst` buffer budget cannot be >= LZ4_compressBound(), consider using LZ4_compress_HC_continue_destSize() instead.
+
+  If, for any reason, previous data block can't be preserved unmodified in memory for next compression block,
+  you can save it to a more stable memory space, using LZ4_saveDictHC().
+  Return value of LZ4_saveDictHC() is the size of dictionary effectively saved into 'safeBuffer'.
+*/
+
+
+/*-**************************************************************
+ * PRIVATE DEFINITIONS :
+ * Do not use these definitions.
+ * They are exposed to allow static allocation of `LZ4_streamHC_t`.
+ * Using these definitions makes the code vulnerable to potential API break when upgrading LZ4
+ ****************************************************************/
+#define LZ4HC_DICTIONARY_LOGSIZE 16
+#define LZ4HC_MAXD (1<= 199901L) /* C99 */)
+#include 
+
+typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal;
+struct LZ4HC_CCtx_internal
+{
+    uint32_t   hashTable[LZ4HC_HASHTABLESIZE];
+    uint16_t   chainTable[LZ4HC_MAXD];
+    const uint8_t* end;         /* next block here to continue on current prefix */
+    const uint8_t* base;        /* All index relative to this position */
+    const uint8_t* dictBase;    /* alternate base for extDict */
+    uint32_t   dictLimit;       /* below that point, need extDict */
+    uint32_t   lowLimit;        /* below that point, no more dict */
+    uint32_t   nextToUpdate;    /* index from which to continue dictionary update */
+    short      compressionLevel;
+    short      favorDecSpeed;
+    const LZ4HC_CCtx_internal* dictCtx;
+};
+
+#else
+
+typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal;
+struct LZ4HC_CCtx_internal
+{
+    unsigned int   hashTable[LZ4HC_HASHTABLESIZE];
+    unsigned short chainTable[LZ4HC_MAXD];
+    const unsigned char* end;        /* next block here to continue on current prefix */
+    const unsigned char* base;       /* All index relative to this position */
+    const unsigned char* dictBase;   /* alternate base for extDict */
+    unsigned int   dictLimit;        /* below that point, need extDict */
+    unsigned int   lowLimit;         /* below that point, no more dict */
+    unsigned int   nextToUpdate;     /* index from which to continue dictionary update */
+    short          compressionLevel;
+    short          favorDecSpeed;
+    const LZ4HC_CCtx_internal* dictCtx;
+};
+
+#endif
+
+#define LZ4_STREAMHCSIZE       (4*LZ4HC_HASHTABLESIZE + 2*LZ4HC_MAXD + 56) /* 262200 */
+#define LZ4_STREAMHCSIZE_SIZET (LZ4_STREAMHCSIZE / sizeof(size_t))
+union LZ4_streamHC_u {
+    size_t table[LZ4_STREAMHCSIZE_SIZET];
+    LZ4HC_CCtx_internal internal_donotuse;
+};   /* previously typedef'd to LZ4_streamHC_t */
+/*
+  LZ4_streamHC_t :
+  This structure allows static allocation of LZ4 HC streaming state.
+  State must be initialized using LZ4_resetStreamHC() before first use.
+
+  Static allocation shall only be used in combination with static linking.
+  When invoking LZ4 from a DLL, use create/free functions instead, which are API and ABI stable.
+*/
+
+
+/*-************************************
+*  Deprecated Functions
+**************************************/
+/* see lz4.h LZ4_DISABLE_DEPRECATE_WARNINGS to turn off deprecation warnings */
+
+/* deprecated compression functions */
+LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC               (const char* source, char* dest, int inputSize);
+LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
+LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC               (void* state, const char* source, char* dest, int inputSize);
+LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
+LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue               (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize);
+LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
+
+/* Obsolete streaming functions; degraded functionality; do not use!
+ *
+ * In order to perform streaming compression, these functions depended on data
+ * that is no longer tracked in the state. They have been preserved as well as
+ * possible: using them will still produce a correct output. However, use of
+ * LZ4_slideInputBufferHC() will truncate the history of the stream, rather
+ * than preserve a window-sized chunk of history.
+ */
+LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void* LZ4_createHC (const char* inputBuffer);
+LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API     char* LZ4_slideInputBufferHC (void* LZ4HC_Data);
+LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API   int   LZ4_freeHC (void* LZ4HC_Data);
+LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
+LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API int   LZ4_sizeofStreamStateHC(void);
+LZ4_DEPRECATED("use LZ4_resetStreamHC() instead") LZ4LIB_API  int   LZ4_resetStreamStateHC(void* state, char* inputBuffer);
+
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif /* LZ4_HC_H_19834876238432 */
+
+
+/*-**************************************************
+ * !!!!!     STATIC LINKING ONLY     !!!!!
+ * Following definitions are considered experimental.
+ * They should not be linked from DLL,
+ * as there is no guarantee of API stability yet.
+ * Prototypes will be promoted to "stable" status
+ * after successfull usage in real-life scenarios.
+ ***************************************************/
+#ifdef LZ4_HC_STATIC_LINKING_ONLY   /* protection macro */
+#ifndef LZ4_HC_SLO_098092834
+#define LZ4_HC_SLO_098092834
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/*! LZ4_compress_HC_destSize() : v1.8.0 (experimental)
+ *  Will try to compress as much data from `src` as possible
+ *  that can fit into `targetDstSize` budget.
+ *  Result is provided in 2 parts :
+ * @return : the number of bytes written into 'dst'
+ *           or 0 if compression fails.
+ * `srcSizePtr` : value will be updated to indicate how much bytes were read from `src`
+ */
+int LZ4_compress_HC_destSize(void* LZ4HC_Data,
+                             const char* src, char* dst,
+                             int* srcSizePtr, int targetDstSize,
+                             int compressionLevel);
+
+/*! LZ4_compress_HC_continue_destSize() : v1.8.0 (experimental)
+ *  Similar as LZ4_compress_HC_continue(),
+ *  but will read a variable nb of bytes from `src`
+ *  to fit into `targetDstSize` budget.
+ *  Result is provided in 2 parts :
+ * @return : the number of bytes written into 'dst'
+ *           or 0 if compression fails.
+ * `srcSizePtr` : value will be updated to indicate how much bytes were read from `src`.
+ */
+int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr,
+                            const char* src, char* dst,
+                            int* srcSizePtr, int targetDstSize);
+
+/*! LZ4_setCompressionLevel() : v1.8.0 (experimental)
+ *  It's possible to change compression level between 2 invocations of LZ4_compress_HC_continue*()
+ */
+void LZ4_setCompressionLevel(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel);
+
+/*! LZ4_favorDecompressionSpeed() : v1.8.2 (experimental)
+ *  Parser will select decisions favoring decompression over compression ratio.
+ *  Only work at highest compression settings (level >= LZ4HC_CLEVEL_OPT_MIN)
+ */
+void LZ4_favorDecompressionSpeed(LZ4_streamHC_t* LZ4_streamHCPtr, int favor);
+
+/*! LZ4_resetStreamHC_fast() :
+ *  When an LZ4_streamHC_t is known to be in a internally coherent state,
+ *  it can often be prepared for a new compression with almost no work, only
+ *  sometimes falling back to the full, expensive reset that is always required
+ *  when the stream is in an indeterminate state (i.e., the reset performed by
+ *  LZ4_resetStreamHC()).
+ *
+ *  LZ4_streamHCs are guaranteed to be in a valid state when:
+ *  - returned from LZ4_createStreamHC()
+ *  - reset by LZ4_resetStreamHC()
+ *  - memset(stream, 0, sizeof(LZ4_streamHC_t))
+ *  - the stream was in a valid state and was reset by LZ4_resetStreamHC_fast()
+ *  - the stream was in a valid state and was then used in any compression call
+ *    that returned success
+ *  - the stream was in an indeterminate state and was used in a compression
+ *    call that fully reset the state (LZ4_compress_HC_extStateHC()) and that
+ *    returned success
+ */
+void LZ4_resetStreamHC_fast(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel);
+
+/*! LZ4_compress_HC_extStateHC_fastReset() :
+ *  A variant of LZ4_compress_HC_extStateHC().
+ *
+ *  Using this variant avoids an expensive initialization step. It is only safe
+ *  to call if the state buffer is known to be correctly initialized already
+ *  (see above comment on LZ4_resetStreamHC_fast() for a definition of
+ *  "correctly initialized"). From a high level, the difference is that this
+ *  function initializes the provided state with a call to
+ *  LZ4_resetStreamHC_fast() while LZ4_compress_HC_extStateHC() starts with a
+ *  call to LZ4_resetStreamHC().
+ */
+int LZ4_compress_HC_extStateHC_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel);
+
+/*! LZ4_attach_HC_dictionary() :
+ *  This is an experimental API that allows for the efficient use of a
+ *  static dictionary many times.
+ *
+ *  Rather than re-loading the dictionary buffer into a working context before
+ *  each compression, or copying a pre-loaded dictionary's LZ4_streamHC_t into a
+ *  working LZ4_streamHC_t, this function introduces a no-copy setup mechanism,
+ *  in which the working stream references the dictionary stream in-place.
+ *
+ *  Several assumptions are made about the state of the dictionary stream.
+ *  Currently, only streams which have been prepared by LZ4_loadDictHC() should
+ *  be expected to work.
+ *
+ *  Alternatively, the provided dictionary stream pointer may be NULL, in which
+ *  case any existing dictionary stream is unset.
+ *
+ *  A dictionary should only be attached to a stream without any history (i.e.,
+ *  a stream that has just been reset).
+ *
+ *  The dictionary will remain attached to the working stream only for the
+ *  current stream session. Calls to LZ4_resetStreamHC(_fast) will remove the
+ *  dictionary context association from the working stream. The dictionary
+ *  stream (and source buffer) must remain in-place / accessible / unchanged
+ *  through the lifetime of the stream session.
+ */
+LZ4LIB_API void LZ4_attach_HC_dictionary(LZ4_streamHC_t *working_stream, const LZ4_streamHC_t *dictionary_stream);
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif   /* LZ4_HC_SLO_098092834 */
+#endif   /* LZ4_HC_STATIC_LINKING_ONLY */

From 9e900b27c6d83c2e8a8b63d150e9fcd971a18866 Mon Sep 17 00:00:00 2001
From: dglazier 
Date: Tue, 12 Mar 2019 02:22:04 +0000
Subject: [PATCH 32/56] added hipo4 directories

---
 Clas12Banks4/Makefile              |  28 ++
 Clas12Banks4/bankreader.cpp        |  67 +++++
 Clas12Banks4/bankreader.h          |  86 ++++++
 Clas12Banks4/calorimeter.cpp       |  45 +++
 Clas12Banks4/calorimeter.h         | 173 +++++++++++
 Clas12Banks4/cherenkov.cpp         |  31 ++
 Clas12Banks4/cherenkov.h           | 109 +++++++
 Clas12Banks4/clas12defs.h          |  77 +++++
 Clas12Banks4/clas12event.cpp       | 139 +++++++++
 Clas12Banks4/clas12event.h         |  81 ++++++
 Clas12Banks4/clas12reader.cpp      | 144 +++++++++
 Clas12Banks4/clas12reader.h        | 133 +++++++++
 Clas12Banks4/covmatrix.cpp         |  76 +++++
 Clas12Banks4/covmatrix.h           |  73 +++++
 Clas12Banks4/detector.cpp          |  93 ++++++
 Clas12Banks4/detector.h            | 110 +++++++
 Clas12Banks4/forwardtagger.cpp     |  32 ++
 Clas12Banks4/forwardtagger.h       | 115 ++++++++
 Clas12Banks4/hallB_event.cpp       | 146 ++++++++++
 Clas12Banks4/hallB_event.h         | 121 ++++++++
 Clas12Banks4/header.cpp            |  47 +++
 Clas12Banks4/header.h              |  81 ++++++
 Clas12Banks4/mcparticle.cpp        |  25 ++
 Clas12Banks4/mcparticle.h          | 101 +++++++
 Clas12Banks4/mesonex_event.cpp     | 108 +++++++
 Clas12Banks4/mesonex_event.h       | 197 +++++++++++++
 Clas12Banks4/particle.cpp          |  44 +++
 Clas12Banks4/particle.h            | 106 +++++++
 Clas12Banks4/particle_detector.cpp | 104 +++++++
 Clas12Banks4/particle_detector.h   | 101 +++++++
 Clas12Banks4/raw.cpp               |  16 +
 Clas12Banks4/raw.h                 |  70 +++++
 Clas12Banks4/region_cdet.cpp       |  81 ++++++
 Clas12Banks4/region_cdet.h         | 109 +++++++
 Clas12Banks4/region_detector.h     |  57 ++++
 Clas12Banks4/region_fdet.cpp       | 123 ++++++++
 Clas12Banks4/region_fdet.h         | 131 +++++++++
 Clas12Banks4/region_ft.cpp         |  71 +++++
 Clas12Banks4/region_ft.h           |  70 +++++
 Clas12Banks4/region_particle.cpp   |  97 +++++++
 Clas12Banks4/region_particle.h     | 117 ++++++++
 Clas12Banks4/scaler.cpp            |  22 ++
 Clas12Banks4/scaler.h              |  58 ++++
 Clas12Banks4/scintillator.cpp      |  32 ++
 Clas12Banks4/scintillator.h        | 118 ++++++++
 Clas12Banks4/tracker.cpp           |  32 ++
 Clas12Banks4/tracker.h             | 117 ++++++++
 Clas12Banks4/traj.cpp              |  30 ++
 Clas12Banks4/traj.h                | 103 +++++++
 Clas12Banks4/vectors.cpp           |  77 +++++
 Clas12Banks4/vectors.h             | 133 +++++++++
 Clas12Banks4/vtp.cpp               |  85 ++++++
 Clas12Banks4/vtp.h                 |  55 ++++
 Hipo4/Makefile                     |  30 ++
 Hipo4/bank.cpp                     | 228 +++++++++++++++
 Hipo4/bank.h                       | 141 +++++++++
 Hipo4/dictionary.cpp               | 131 +++++++++
 Hipo4/dictionary.h                 | 109 +++++++
 Hipo4/event.cpp                    | 116 ++++++++
 Hipo4/event.h                      |  85 ++++++
 Hipo4/hipoexceptions.h             |  33 +++
 Hipo4/reader.cpp                   | 275 ++++++++++++++++++
 Hipo4/reader.h                     | 189 ++++++++++++
 Hipo4/record.cpp                   | 451 +++++++++++++++++++++++++++++
 Hipo4/record.h                     | 109 +++++++
 Hipo4/recordbuilder.cpp            | 116 ++++++++
 Hipo4/recordbuilder.h              |  62 ++++
 Hipo4/utils.cpp                    | 212 ++++++++++++++
 Hipo4/utils.h                      |  75 +++++
 69 files changed, 6959 insertions(+)
 create mode 100644 Clas12Banks4/Makefile
 create mode 100644 Clas12Banks4/bankreader.cpp
 create mode 100644 Clas12Banks4/bankreader.h
 create mode 100644 Clas12Banks4/calorimeter.cpp
 create mode 100644 Clas12Banks4/calorimeter.h
 create mode 100644 Clas12Banks4/cherenkov.cpp
 create mode 100644 Clas12Banks4/cherenkov.h
 create mode 100644 Clas12Banks4/clas12defs.h
 create mode 100644 Clas12Banks4/clas12event.cpp
 create mode 100644 Clas12Banks4/clas12event.h
 create mode 100644 Clas12Banks4/clas12reader.cpp
 create mode 100644 Clas12Banks4/clas12reader.h
 create mode 100644 Clas12Banks4/covmatrix.cpp
 create mode 100644 Clas12Banks4/covmatrix.h
 create mode 100644 Clas12Banks4/detector.cpp
 create mode 100644 Clas12Banks4/detector.h
 create mode 100644 Clas12Banks4/forwardtagger.cpp
 create mode 100644 Clas12Banks4/forwardtagger.h
 create mode 100644 Clas12Banks4/hallB_event.cpp
 create mode 100644 Clas12Banks4/hallB_event.h
 create mode 100644 Clas12Banks4/header.cpp
 create mode 100644 Clas12Banks4/header.h
 create mode 100644 Clas12Banks4/mcparticle.cpp
 create mode 100644 Clas12Banks4/mcparticle.h
 create mode 100644 Clas12Banks4/mesonex_event.cpp
 create mode 100644 Clas12Banks4/mesonex_event.h
 create mode 100644 Clas12Banks4/particle.cpp
 create mode 100644 Clas12Banks4/particle.h
 create mode 100644 Clas12Banks4/particle_detector.cpp
 create mode 100644 Clas12Banks4/particle_detector.h
 create mode 100644 Clas12Banks4/raw.cpp
 create mode 100644 Clas12Banks4/raw.h
 create mode 100644 Clas12Banks4/region_cdet.cpp
 create mode 100644 Clas12Banks4/region_cdet.h
 create mode 100644 Clas12Banks4/region_detector.h
 create mode 100644 Clas12Banks4/region_fdet.cpp
 create mode 100644 Clas12Banks4/region_fdet.h
 create mode 100644 Clas12Banks4/region_ft.cpp
 create mode 100644 Clas12Banks4/region_ft.h
 create mode 100644 Clas12Banks4/region_particle.cpp
 create mode 100644 Clas12Banks4/region_particle.h
 create mode 100644 Clas12Banks4/scaler.cpp
 create mode 100644 Clas12Banks4/scaler.h
 create mode 100644 Clas12Banks4/scintillator.cpp
 create mode 100644 Clas12Banks4/scintillator.h
 create mode 100644 Clas12Banks4/tracker.cpp
 create mode 100644 Clas12Banks4/tracker.h
 create mode 100644 Clas12Banks4/traj.cpp
 create mode 100644 Clas12Banks4/traj.h
 create mode 100644 Clas12Banks4/vectors.cpp
 create mode 100644 Clas12Banks4/vectors.h
 create mode 100644 Clas12Banks4/vtp.cpp
 create mode 100644 Clas12Banks4/vtp.h
 create mode 100644 Hipo4/Makefile
 create mode 100644 Hipo4/bank.cpp
 create mode 100644 Hipo4/bank.h
 create mode 100644 Hipo4/dictionary.cpp
 create mode 100644 Hipo4/dictionary.h
 create mode 100644 Hipo4/event.cpp
 create mode 100644 Hipo4/event.h
 create mode 100644 Hipo4/hipoexceptions.h
 create mode 100644 Hipo4/reader.cpp
 create mode 100644 Hipo4/reader.h
 create mode 100644 Hipo4/record.cpp
 create mode 100644 Hipo4/record.h
 create mode 100644 Hipo4/recordbuilder.cpp
 create mode 100644 Hipo4/recordbuilder.h
 create mode 100644 Hipo4/utils.cpp
 create mode 100644 Hipo4/utils.h

diff --git a/Clas12Banks4/Makefile b/Clas12Banks4/Makefile
new file mode 100644
index 0000000..70e63bb
--- /dev/null
+++ b/Clas12Banks4/Makefile
@@ -0,0 +1,28 @@
+
+SOURCES := $(wildcard *.cpp)
+OBJECTS := $(SOURCES:.cpp=.o)
+
+LIBDIR  = ../lib
+BINDIR  = ../bin
+
+LZ4INCLUDES := -I../Lz4/lib/ -I../Hipo
+
+libhipo: checkdirs $(OBJECTS)
+	ar cr ../lib/libclas12banks.a $(OBJECTS)
+#	$(CXX) -shared -fPIC  -o ../lib/libclas12banks.so $(OBJECTS) -L../Lz4/lib/ -llz4
+
+
+show:
+	@echo $(OBJECTS)
+
+checkdirs: $(LIBDIR)
+
+$(LIBDIR):
+	@mkdir -p $(LIBDIR)
+
+clean:
+	@echo 'Removing the build files....'
+	@rm -rf *~ *.o
+
+%.o: %.cpp
+	$(CXX) -fPIC -c $< -O2 -D__LZ4__ $(LZ4INCLUDES)
diff --git a/Clas12Banks4/bankreader.cpp b/Clas12Banks4/bankreader.cpp
new file mode 100644
index 0000000..6ecb882
--- /dev/null
+++ b/Clas12Banks4/bankreader.cpp
@@ -0,0 +1,67 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+#include "bankreader.h"
+
+namespace clas12 {
+
+  //  bankreader::bankreader(hipo::reader &r){
+  bankreader::bankreader(string filename){
+    _reader.open(filename.data()); //keep a pointer to the reader
+
+    hipo::dictionary  factory;
+    _reader.readDictionary(factory);
+
+    //initialise banks pointers
+    // _bparts = std::make_shared(factory.getSchema("REC::Particle"));
+    // _bmcparts = std::make_shared(factory.getSchema("MC::Lund"));
+    // _bcovmat= std::make_shared(factory.getSchema("REC::CovMat"));
+    // _bhead  = std::make_shared(factory.getSchema("REC::Event"));
+    // _bcal   = std::make_shared(factory.getSchema("REC::Calorimeter"));
+    // _bscint = std::make_shared(factory.getSchema("REC::Scintillator"));
+    // _btrck  = std::make_shared(factory.getSchema("REC::Track"));
+    // _btraj  = std::make_shared(factory.getSchema("REC::Traj"));
+    // _bcher  = std::make_shared(factory.getSchema("REC::Cherenkov"));
+    // _bft    = std::make_shared(factory.getSchema("REC::ForwardTagger"));
+
+    _bparts = std::make_shared(factory.getSchema("REC::Particle"));
+    _bmcparts = std::make_shared(factory.getSchema("MC::Lund"));
+    _bcovmat= std::make_shared(factory.getSchema("REC::CovMat"));
+    _bhead  = std::make_shared
(factory.getSchema("REC::Event")); + _bcal = std::make_shared(factory.getSchema("REC::Calorimeter")); + _bscint = std::make_shared(factory.getSchema("REC::Scintillator")); + _btrck = std::make_shared(factory.getSchema("REC::Track")); + _btraj = std::make_shared(factory.getSchema("REC::Traj")); + _bcher = std::make_shared(factory.getSchema("REC::Cherenkov")); + _bft = std::make_shared(factory.getSchema("REC::ForwardTagger")); + + + // //add some detector regions to their vectors + // addARegionFDet(); + // addARegionCDet(); + // addARegionFT(); + + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool bankreader::next(){ + if(!_reader.next()) + return false; + + _reader.read(_event); + _event.getStructure(*_bparts.get()); + _event.getStructure(*_bmcparts.get()); + _event.getStructure(*_bcovmat.get()); + _event.getStructure(*_bhead.get()); + _event.getStructure(*_bcal.get()); + _event.getStructure(*_bscint.get()); + _event.getStructure(*_btrck.get()); + _event.getStructure(*_btraj.get()); + _event.getStructure(*_bcher.get()); + _event.getStructure(*_bft.get()); + return true; + } +} diff --git a/Clas12Banks4/bankreader.h b/Clas12Banks4/bankreader.h new file mode 100644 index 0000000..2dcd1c2 --- /dev/null +++ b/Clas12Banks4/bankreader.h @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: bankreader.h + * Author: dglazier + * + */ + +#ifndef BANKREADER_H +#define BANKREADER_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "mcparticle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "cherenkov.h" +#include "header.h" +#include "covmatrix.h" +#include "forwardtagger.h" +/* #include "region_particle.h" */ +/* #include "region_fdet.h" */ +/* #include "region_cdet.h" */ +/* #include "region_ft.h" */ + +#include + + +namespace clas12 { + + using bank_ptr= std::shared_ptr; + + class bankreader { + + + public: + + + bankreader()=default; + bankreader(string filename); + ~bankreader()=default; + + bool next(); + + + private: + + //reader + hipo::reader _reader; + hipo::event _event; + + //DST banks + /* bank_ptr _bhead; */ + /* bank_ptr _bparts; */ + /* bank_ptr _bmcparts; */ + /* bank_ptr _bcovmat; */ + /* bank_ptr _bcal; */ + /* bank_ptr _bscint; */ + /* bank_ptr _btrck; */ + /* bank_ptr _btraj; */ + /* bank_ptr _bcher; */ + /* bank_ptr _bft; */ + + head_ptr _bhead; + par_ptr _bparts; + mcpar_ptr _bmcparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + traj_ptr _btraj; + cher_ptr _bcher; + ft_ptr _bft; + + }; + +} + +#endif /* CLAS12READER_H */ diff --git a/Clas12Banks4/calorimeter.cpp b/Clas12Banks4/calorimeter.cpp new file mode 100644 index 0000000..305bcd7 --- /dev/null +++ b/Clas12Banks4/calorimeter.cpp @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "calorimeter.h" + + +namespace clas12 { + + + + calorimeter::calorimeter(hipo::schema __schema): clas12::particle_detector(__schema) { + + auto sch=getSchema(); + + if(useItem("layer"))_layer_order = sch.getEntryOrder("layer"); + if(useItem("energy"))_energy_order = sch.getEntryOrder("energy"); + if(useItem("path"))_path_order = sch.getEntryOrder("path"); + if(useItem("time"))_time_order = sch.getEntryOrder("time"); + if(useItem("x"))_x_order = sch.getEntryOrder("x"); + if(useItem("y"))_y_order = sch.getEntryOrder("y"); + if(useItem("z"))_z_order = sch.getEntryOrder("z"); + if(useItem("status"))_status_order = sch.getEntryOrder("status"); + if(useItem("sector"))_sector_order = sch.getEntryOrder("sector"); + if(useItem("chi2"))_chi2_order = sch.getEntryOrder("chi2"); + if(useItem("du"))_du_order = sch.getEntryOrder("du"); + if(useItem("dv"))_dv_order = sch.getEntryOrder("dv"); + if(useItem("dw"))_dw_order = sch.getEntryOrder("dw"); + if(useItem("hx"))_hx_order = sch.getEntryOrder("hx"); + if(useItem("hy"))_hy_order = sch.getEntryOrder("hy"); + if(useItem("hz"))_hz_order = sch.getEntryOrder("hz"); + if(useItem("lu"))_lu_order = sch.getEntryOrder("lu"); + if(useItem("lv"))_lv_order = sch.getEntryOrder("lv"); + if(useItem("m2u"))_m2u_order = sch.getEntryOrder("m2u"); + if(useItem("m2v"))_m2v_order = sch.getEntryOrder("m2v"); + if(useItem("m2w"))_m2w_order = sch.getEntryOrder("m2w"); + if(useItem("m3u"))_m3u_order = sch.getEntryOrder("m3u"); + if(useItem("m3v"))_m3v_order = sch.getEntryOrder("m3v"); + if(useItem("m3w"))_m3w_order = sch.getEntryOrder("m3w"); + } + + +} diff --git a/Clas12Banks4/calorimeter.h b/Clas12Banks4/calorimeter.h new file mode 100644 index 0000000..7bf1ea6 --- /dev/null +++ b/Clas12Banks4/calorimeter.h @@ -0,0 +1,173 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: detector.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_CALORIMETER_H +#define CLAS12_CALORIMETER_H + +#include "particle_detector.h" +#include + + +namespace clas12 { + + class calorimeter : public particle_detector { + + + public: + + + calorimeter()=default; + + calorimeter(hipo::schema __schema); + + virtual ~calorimeter()=default; + + int getLayer(int index) override{ + if(index>-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in calorimeter bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDu(){ + if(_index>-1)return getFloat(_du_order,_index); + return 0; + } + double getDv(){ + if(_index>-1)return getFloat(_dv_order,_index); + return 0; + } + double getDw(){ + if(_index>-1)return getFloat(_dw_order,_index); + return 0; + } + double getHx(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHy(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHz(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getLu(){ + if(_index>-1)return getFloat(_lu_order,_index); + return 0; + } + double getLv(){ + if(_index>-1)return getFloat(_lv_order,_index); + return 0; + } + double getLw(){ + if(_index>-1)return getFloat(_lw_order,_index); + return 0; + } + double getM2u(){ + if(_index>-1)return getFloat(_m2u_order,_index); + return 0; + } + double getM2v(){ + if(_index>-1)return getFloat(_m2v_order,_index); + return 0; + } + double getM2w(){ + if(_index>-1)return getFloat(_m2w_order,_index); + return 0; + } + double getM3u(){ + if(_index>-1)return getFloat(_m3u_order,_index); + return 0; + } + double getM3v(){ + if(_index>-1)return getFloat(_m3v_order,_index); + return 0; + } + double getM3w(){ + if(_index>-1)return getFloat(_m3w_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _chi2_order=-1; + int _du_order=-1; + int _dv_order=-1; + int _dw_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _lu_order=-1; + int _lv_order=-1; + int _lw_order=-1; + int _m2u_order=-1; + int _m2v_order=-1; + int _m2w_order=-1; + int _m3u_order=-1; + int _m3v_order=-1; + int _m3w_order=-1; + int _status_order=-1; + + + }; //class calorimeter + + using cal_ptr=std::shared_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/cherenkov.cpp b/Clas12Banks4/cherenkov.cpp new file mode 100644 index 0000000..e95091a --- /dev/null +++ b/Clas12Banks4/cherenkov.cpp @@ -0,0 +1,31 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "cherenkov.h" + + +namespace clas12 { + + + cherenkov::cherenkov(hipo::schema __schema): clas12::particle_detector(__schema) { + + if(useItem("nphe"))_nphe_order = __schema.getEntryOrder("nphe"); + if(useItem("path"))_path_order = __schema.getEntryOrder("path"); + if(useItem("time"))_time_order = __schema.getEntryOrder("time"); + if(useItem("x"))_x_order = __schema.getEntryOrder("x"); + if(useItem("y"))_y_order = __schema.getEntryOrder("y"); + if(useItem("z"))_z_order = __schema.getEntryOrder("z"); + if(useItem("status"))_status_order = __schema.getEntryOrder("status"); + if(useItem("sector"))_sector_order = __schema.getEntryOrder("sector"); + if(useItem("chi2"))_chi2_order = __schema.getEntryOrder("chi2"); + if(useItem("theta"))_theta_order = __schema.getEntryOrder("theta"); + if(useItem("phi"))_phi_order = __schema.getEntryOrder("phi"); + if(useItem("dtheta"))_dtheta_order = __schema.getEntryOrder("dtheta"); + if(useItem("dphi"))_dphi_order = __schema.getEntryOrder("dphi"); + } + + +} diff --git a/Clas12Banks4/cherenkov.h b/Clas12Banks4/cherenkov.h new file mode 100644 index 0000000..143c404 --- /dev/null +++ b/Clas12Banks4/cherenkov.h @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: cherenkov.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_CHERENKOV_H +#define CLAS12_CHERENKOV_H + +#include "particle_detector.h" + + +namespace clas12 { + + class cherenkov : public particle_detector { + + + public: + + + cherenkov()=default; + + cherenkov(hipo::schema __schema); + + virtual ~cherenkov()=default; + + //getter funtions for items in cherenkov bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + int getNphe(){ + if(_index>-1)return getFloat(_nphe_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getTheta(){ + if(_index>-1)return getFloat(_theta_order,_index); + return 0; + } + double getPhi(){ + if(_index>-1)return getFloat(_phi_order,_index); + return 0; + } + double getDtheta(){ + if(_index>-1)return getFloat(_dtheta_order,_index); + return 0; + } + double getDPhi(){ + if(_index>-1)return getFloat(_dphi_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + + + private: + + int _nphe_order=-1; + int _path_order=-1; + int _time_order=-1; + int _dphi_order=-1; + int _dtheta_order=-1; + int _sector_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _theta_order=-1; + int _phi_order=-1; + int _chi2_order=-1; + int _status_order=-1; + + + + }; //class cherenkov + + using cher_ptr=std::shared_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/clas12defs.h b/Clas12Banks4/clas12defs.h new file mode 100644 index 0000000..24bc24a --- /dev/null +++ b/Clas12Banks4/clas12defs.h @@ -0,0 +1,77 @@ +#ifndef CLAS12DEFS_H +#define CLAS12DEFS_H + + +namespace clas12{ + //regions + static const short FT = 1000; + static const short FD = 2000; + static const short CD = 3000; + + + //detectors + static const short FTOF = 12; + static const short CTOF = 4; + static const short CND = 3; + static const short CVT = 5; + static const short DC = 6; + static const short EC = 7; + static const short FTCAL = 10; + static const short FTHODO = 11; + static const short HTCC = 15; + static const short LTCC = 16; + + + //layers + static const short FTOF1A = 1; + static const short FTOF1B = 2; + static const short FTOF2 = 3; + //CDET scint layers same as detectors + //static const short CND = 3; + //static const short CTOF = 4; + static const short CND1 = 1; + static const short CND2 = 2; + static const short CND3 = 3; + + static const short PCAL = 1; + static const short ECIN = 4; + static const short ECOUT = 7; + + //TRAJECTORY + static const short TRAJ_HTCC = 0; + static const short TRAJ_FMT1 = 1; + static const short TRAJ_FMT2 = 2; + static const short TRAJ_FMT3 = 3; + static const short TRAJ_FMT4 = 4; + static const short TRAJ_FMT5 = 5; + static const short TRAJ_FMT6 = 6; + static const short TRAJ_DC1 = 12; + static const short TRAJ_DC2 = 18; + static const short TRAJ_DC3 = 24; + static const short TRAJ_DC4 = 30; + static const short TRAJ_DC5 = 36; + static const short TRAJ_DC6 = 42; + static const short TRAJ_LTCC = 43; + static const short TRAJ_FTOF1A =46; + static const short TRAJ_FTOF1B =45; + static const short TRAJ_FTOF2 =44; + static const short TRAJ_PCAL =47; + static const short TRAJ_ECAL =48; + + static const short TRAJ_CD1 = 1; + static const short TRAJ_CD2 = 2; + static const short TRAJ_CD3 = 3; + static const short TRAJ_CD4 = 4; + static const short TRAJ_CD5 = 5; + static const short TRAJ_CD6 = 6; + static const short TRAJ_CD7 = 7; + static const short TRAJ_CD8 = 8; + static const short TRAJ_CD9 = 9; + static const short TRAJ_CD10 = 10; + static const short TRAJ_CD11 = 11; + static const short TRAJ_CD12 = 12; + // using indices =vector; + +} + +#endif diff --git a/Clas12Banks4/clas12event.cpp b/Clas12Banks4/clas12event.cpp new file mode 100644 index 0000000..1fd4a82 --- /dev/null +++ b/Clas12Banks4/clas12event.cpp @@ -0,0 +1,139 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12event.h" + + +namespace clas12 { + + void clas12event::init(hipo::reader &r){ + printf("*******>>>> initializing : %s\n",banks[0].c_str()); + clas12header.init(banks[0].c_str(),r); + printf("*******>>>> initializing : %s\n",banks[1].c_str()); + clas12particle.init(banks[1].c_str(),r); + printf("*******>>>> initializing : %s\n",banks[2].c_str()); + clas12calorimeter.init(banks[2].c_str(),r); + printf("*******>>>> initializing : %s\n",banks[3].c_str()); + clas12tof.init(banks[3].c_str(),r); + } + + + double clas12event::getTime (int detector, int pindex){ + detectorHit hit; + switch(detector){ + case 121: + return clas12tof.getTime(clas12::FTOF, 1, pindex); + break; + case 122: + return clas12tof.getTime(clas12::FTOF, 2, pindex); + break; + case 7: + return clas12calorimeter.getTime(clas12::EC, 1, pindex); + break; + default: + printf("unknown detector %d\n",detector); + } + return 0; + } + + double clas12event::getEnergy(int detector,int pindex){ + + double energy = 0.0; + switch(detector){ + case 121: + return clas12tof.getEnergy(clas12::FTOF, 1, pindex); + break; + case 122: + return clas12tof.getEnergy(clas12::FTOF, 2, pindex); + break; + case 7: + energy += clas12calorimeter.getEnergy(clas12::EC, 1, pindex); + energy += clas12calorimeter.getEnergy(clas12::EC, 4, pindex); + energy += clas12calorimeter.getEnergy(clas12::EC, 7, pindex); + return energy; + break; + case 71: + return clas12calorimeter.getEnergy(clas12::EC, 1, pindex); + break; + case 72: + return clas12calorimeter.getEnergy(clas12::EC, 4, pindex); + break; + case 73: + return clas12calorimeter.getEnergy(clas12::EC, 7, pindex); + break; + default: + printf("unknown detector %d\n",detector); + break; + } + return 0; + } + + double clas12event::getBeta( int detector, int pindex){ + double stt = clas12header.getStartTime(); + double time = getTime(detector,pindex); + double path = getPath(detector,pindex); + return path/(time-stt)/29.9792458; + } + + double clas12event::getPath( int detector, int pindex){ + switch(detector){ + case 121: + return clas12tof.getPath(clas12::FTOF, 1, pindex); + break; + case 122: + return clas12tof.getPath(clas12::FTOF, 2, pindex); + break; + case 7: + return clas12calorimeter.getPath(clas12::EC, 1, pindex); + break; + default: + printf("unknown detector %d\n",detector); + } + return 0; + } + + void clas12event::getHitPosition(int detector, int pindex, vector3 &vec){ + detectorHit hit; + switch(detector){ + case 121: + clas12tof.getDetectorHit(clas12::FTOF, 1, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + case 122: + clas12tof.getDetectorHit(clas12::FTOF, 2, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + case 7: + clas12calorimeter.getDetectorHit(clas12::EC, 1, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + default: + printf("unknown detector %d\n",detector); + break; + } + } + + void clas12event::getHitPositionLocal(int detector, int pindex, vector3 &vec){ + detectorHit hit; + switch(detector){ + case 121: + clas12tof.getDetectorHit(clas12::FTOF, 1, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + case 122: + clas12tof.getDetectorHit(clas12::FTOF, 2, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + case 7: + clas12calorimeter.getDetectorHit(clas12::EC, 1, pindex, hit); + vec.setXYZ(hit.x,hit.y,hit.z); + break; + default: + printf("unknown detector %d\n",detector); + break; + } + } +} diff --git a/Clas12Banks4/clas12event.h b/Clas12Banks4/clas12event.h new file mode 100644 index 0000000..94677cd --- /dev/null +++ b/Clas12Banks4/clas12event.h @@ -0,0 +1,81 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: clas12event.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_EVENT_H +#define CLAS12_EVENT_H + +#include +#include +#include +#include +#include +#include +#include +#include "particle.h" +#include "detector.h" +#include "vectors.h" +#include "header.h" +#include "clas12defs.h" + + +namespace clas12 { + + + class clas12event { + + private: + + /*static const char *vinit[] = { + "REC::Event","REC::Particle","REC::Calorimeter", + "REC::Scintillator" }; +*/ + std::vector banks; + + clas12::header clas12header; + clas12::particle clas12particle; + clas12::detector clas12calorimeter; + clas12::detector clas12tof; + clas12::detector clas12cherenkov; + + public: + + clas12event(){ } + + clas12event(hipo::reader &r) { + banks.push_back("REC::Event"); + banks.push_back("REC::Particle"); + banks.push_back("REC::Calorimeter"); + banks.push_back("REC::Scintillator"); + init(r); + } + + ~clas12event(){ } + + void init(hipo::reader &r); + + double getStartTime(); + double getTime ( int detector, int pindex); + double getEnergy( int detector, int pindex); + double getPath( int detector, int pindex); + double getBeta( int detector, int pindex); + void getHitPosition(int detector, int pindex, vector3 &vec); + void getHitPositionLocal(int detector, int pindex, vector3 &vec); + + clas12::particle &particles(){return clas12particle;} + clas12::header &header(){ return clas12header;} + + }; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/clas12reader.cpp b/Clas12Banks4/clas12reader.cpp new file mode 100644 index 0000000..c588bd1 --- /dev/null +++ b/Clas12Banks4/clas12reader.cpp @@ -0,0 +1,144 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12reader.h" + +namespace clas12 { + + clas12reader::clas12reader(string filename){ + cout<<" clas12reader::clas12reader reading "<(factory.getSchema("REC::Particle")); + _bmcparts = std::make_shared(factory.getSchema("MC::Lund")); + _bcovmat= std::make_shared(factory.getSchema("REC::CovMat")); + _bhead = std::make_shared
(factory.getSchema("REC::Event")); + _bcal = std::make_shared(factory.getSchema("REC::Calorimeter")); + _bscint = std::make_shared(factory.getSchema("REC::Scintillator")); + _btrck = std::make_shared(factory.getSchema("REC::Track")); + _btraj = std::make_shared(factory.getSchema("REC::Traj")); + _bcher = std::make_shared(factory.getSchema("REC::Cherenkov")); + _bft = std::make_shared(factory.getSchema("REC::ForwardTagger")); + _bvtp = std::make_shared(factory.getSchema("RAW::vtp")); + _bscal = std::make_shared(factory.getSchema("RAW::scaler")); + + + //add some detector regions to their vectors + addARegionFDet(); + addARegionCDet(); + addARegionFT(); + + } + /////////////////////////////////////////////////////// + ///read the data + void clas12reader::readEvent(){ + _reader.read(_event); + _event.getStructure(*_bparts.get()); + _event.getStructure(*_bmcparts.get()); + _event.getStructure(*_bcovmat.get()); + _event.getStructure(*_bhead.get()); + _event.getStructure(*_bcal.get()); + _event.getStructure(*_bscint.get()); + _event.getStructure(*_btrck.get()); + _event.getStructure(*_btraj.get()); + _event.getStructure(*_bcher.get()); + _event.getStructure(*_bft.get()); + _event.getStructure(*_bvtp.get()); + _event.getStructure(*_bscal.get()); + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool clas12reader::next(){ + if(!_reader.next()) + return false; + + readEvent(); + sort(); + + return true; + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool clas12reader::nextInRecord(){ + if(!_reader.nextInRecord()) + return false; + + readEvent(); + sort(); + + return true; + } + //////////////////////////////////////////////////////// + /// Loop over particles and find their region + /// Add appropriate region_partcle to event particle vector + void clas12reader::sort(){ + + + _nparts=_bparts->getRows(); + _n_rfdets=0; + _n_rcdets=0; + _n_rfts=0; + + _detParticles.clear(); + _detParticles.reserve(_nparts); + + if(_nparts==0) return; + + //Loop over particles and find their region + for(ushort i=0;i<_nparts;i++){ + _bparts->setEntry(i); + + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rfdets[_n_rfdets]); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + continue; + } + + //Check if CDet particle + if(_rcdets[_n_rcdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rcdets[_n_rcdets]); + _n_rcdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rcdets==_rcdets.size()) + addARegionCDet(); + continue; + } + //Check if FT particle + if(_rfts[_n_rfts]->sort()){ + //add a FDet particle to the event list + _detParticles.emplace_back(_rfts[_n_rfts]); + _n_rfts++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfts==_rfts.size()) + addARegionFT(); + continue; + } + } + } + //////////////////////////////////////////////////////// + ///Filter and return detParticles by given PID + std::vector clas12reader::getByID(int id){ + return container_filter(_detParticles, [id](region_part_ptr dr) + {return dr->getPid()==id;}); + } + +} diff --git a/Clas12Banks4/clas12reader.h b/Clas12Banks4/clas12reader.h new file mode 100644 index 0000000..e86dcb8 --- /dev/null +++ b/Clas12Banks4/clas12reader.h @@ -0,0 +1,133 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: clas12reader.h + * Author: dglazier + * + */ + +#ifndef CLAS12READER_H +#define CLAS12READER_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "mcparticle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "cherenkov.h" +#include "header.h" +#include "vtp.h" +#include "scaler.h" +#include "covmatrix.h" +#include "forwardtagger.h" +#include "region_particle.h" +#include "region_fdet.h" +#include "region_cdet.h" +#include "region_ft.h" + +#include + + +namespace clas12 { + + class clas12reader { + + + public: + + + clas12reader()=default; + clas12reader(string filename); + ~clas12reader()=default; + + hipo::reader& getReader(){return _reader;} + + bool next(); + bool nextInRecord(); + void sort(); + void readEvent(); + + void addARegionFDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rfdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + void addARegionCDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rcdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + void addARegionFT(){ + //Forward tagger needs particles and forward tagger + _rfts.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_btraj,_bcher,_bft,_bhead)); + } + + + const head_ptr head() const{return _bhead;}; + const vtp_ptr vtp() const{return _bvtp;}; + const scaler_ptr scaler() const{return _bscal;}; + const mcpar_ptr mcparts() const{return _bmcparts;}; + + + std::vector& getDetParticles(){return _detParticles;} + std::vector* getDetParticlesPtr(){return &_detParticles;} + std::vector getByID(int id); + + int getNParticles() const {return _detParticles.size();} + + private: + + //reader + hipo::reader _reader; + hipo::event _event; + + //DST banks + head_ptr _bhead; + par_ptr _bparts; + mcpar_ptr _bmcparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + traj_ptr _btraj; + cher_ptr _bcher; + ft_ptr _bft; + vtp_ptr _bvtp; + scaler_ptr _bscal; + + //Detector region vectors, + //each particle in an event will have + //one associated + std::vector _rfdets; + std::vector _rcdets; + std::vector _rfts; + std::vector _detParticles; + + + ushort _nparts=0; + ushort _n_rfdets=0; + ushort _n_rcdets=0; + ushort _n_rfts=0; + + }; + //helper functions + + //filter vectors via a lambda function + //see for example clas12reader::getByID() + template + Cont container_filter(const Cont &container, Pred predicate){ + Cont result; + std::copy_if(container.begin(),container.end(),std::back_inserter(result), predicate); + return std::move(result); + } + +} + +#endif /* CLAS12READER_H */ diff --git a/Clas12Banks4/covmatrix.cpp b/Clas12Banks4/covmatrix.cpp new file mode 100644 index 0000000..e7d54fe --- /dev/null +++ b/Clas12Banks4/covmatrix.cpp @@ -0,0 +1,76 @@ +/* + * To change this license covmatrix, choose License Covmatrixs in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "covmatrix.h" +#include +#include + +namespace clas12 { + + + covmatrix::covmatrix(hipo::schema __schema): hipo::bank(__schema) { + _morder[0][0] = __schema.getEntryOrder("C11"); + _morder[0][1] = __schema.getEntryOrder("C12"); + _morder[0][2] = __schema.getEntryOrder("C13"); + _morder[0][3] = __schema.getEntryOrder("C14"); + _morder[0][4] = __schema.getEntryOrder("C15"); + _morder[1][1] = __schema.getEntryOrder("C22"); + _morder[1][2] = __schema.getEntryOrder("C23"); + _morder[1][3] = __schema.getEntryOrder("C24"); + _morder[1][4] = __schema.getEntryOrder("C25"); + _morder[2][2] = __schema.getEntryOrder("C33"); + _morder[2][3] = __schema.getEntryOrder("C34"); + _morder[2][4] = __schema.getEntryOrder("C35"); + _morder[3][3] = __schema.getEntryOrder("C44"); + _morder[3][4] = __schema.getEntryOrder("C45"); + _morder[4][4] = __schema.getEntryOrder("C55"); + _pindex_order = __schema.getEntryOrder("pindex"); + } + void covmatrix::scanIndex(){ + // _rmap.clear(); + _rvec.clear(); + const int size = getRows(); + _rvec.reserve(size); + for(int i = 0; i < size; i++){ + int pindex = getPindex(i); + // _rmap[pindex] = i; + _rvec.emplace_back(pindex); + } + } + int covmatrix::getIndex(int pindex){ + // if(_rmap.find(pindex) != _rmap.end()) { + std::vector::iterator it; + if((it=std::find(_rvec.begin(),_rvec.end(),pindex))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + //_index = _rmap[pindex]; + return _index; + } + return _index=-1; + } + const CovMatrix* covmatrix::matrix(){ + if(_index==-1){ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=0; + } + else{ + for(auto i=0;i<5;i++) + for(auto j=i;j<5;j++) + _matrix[i][j]=getFloat(_morder[i][j],_index); + } + return &_matrix; + } + + void covmatrix::print(){ + matrix(); + std::cout<<"Cov Matrix "< +#include +#include + +namespace clas12 { + + using CovMatrix =std::vector >; + using IndMatrix =std::vector >; + + class covmatrix : public hipo::bank { + + + public: + + //covmatrix() { } + //vmatrix(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ + // + covmatrix(hipo::schema __schema); + + + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + int getIndex() const {return _index;} + int getIndex(int pindex); + void setIndex(int ind){_index=ind;} + + const CovMatrix* matrix(); + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + + void notify() final{ + bank::notify(); + scanIndex(); + } + void scanIndex(); + void print(); + + private : + + CovMatrix _matrix={5,std::vector(5,0)}; + IndMatrix _morder={5,std::vector(5,-1)}; + int _pindex_order=-1; + int _index=-1; + //std::map _rmap; + std::vector _rvec; + }; + + using covmat_ptr=std::shared_ptr; +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/detector.cpp b/Clas12Banks4/detector.cpp new file mode 100644 index 0000000..20c63c5 --- /dev/null +++ b/Clas12Banks4/detector.cpp @@ -0,0 +1,93 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "detector.h" + + +namespace clas12 { + + detector::~detector(){} + +void detector::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + detector_id_order = getEntryOrder("detector"); + layer_order = getEntryOrder("layer"); + energy_order = getEntryOrder("energy"); + path_order = getEntryOrder("path"); + time_order = getEntryOrder("time"); + pindex_order = getEntryOrder("pindex"); + x_order = getEntryOrder("x"); + y_order = getEntryOrder("y"); + z_order = getEntryOrder("z"); +} + +void detector::scanIndex(){ + rmap.clear(); + int size = getSize(); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer = getLayer(i); + int pindex = getIndex(i); + int key = (detector<<16)|(layer<<8)|pindex; + rmap[key] = i; + } + } + + double detector::getTime(int detector, int layer, int pindex){ + int key = (detector<<16)|(layer<<8)|pindex; + if(rmap.count(key)>0) { + int position = rmap[key]; + return getTime(position); + } + return 0.0; + } + + double detector::getEnergy(int detector, int layer, int pindex){ + int key = (detector<<16)|(layer<<8)|pindex; + if(rmap.count(key)>0) { + int position = rmap[key]; + return getEnergy(position); + } + return 0.0; + } + + double detector::getPath(int detector, int layer, int pindex){ + int key = (detector<<16)|(layer<<8)|pindex; + if(rmap.count(key)>0) { + int position = rmap[key]; + return getPath(position); + } + return 0.0; + } + + void detector::getDetectorHit(int detector, int layer, int pindex, detectorHit &hit){ + int key = (detector<<16)|(layer<<8)|pindex; + if(rmap.count(key)>0){ + int position = rmap[key]; + hit.x = getX(position); + hit.y = getY(position); + hit.z = getZ(position); + hit.energy = getEnergy(position); + hit.time = getTime(position); + hit.path = getPath(position); + hit.detector = getDetector(position); + hit.layer = getLayer(position); + } else { + hit.detector = 0; + hit.layer = 0; + hit.time = 0.0; + hit.energy = 0.0; + hit.path = 0.0; + hit.x = hit.y = hit.z = 0; + } + } + + + void detectorHit::show(){ + printf(" d : %3d time = %8.3f, energy = %8.3f, xyz = %8.3f %8.3f %8.3f\n", + detector,time,energy,x,y,z); + } +} diff --git a/Clas12Banks4/detector.h b/Clas12Banks4/detector.h new file mode 100644 index 0000000..3f066ac --- /dev/null +++ b/Clas12Banks4/detector.h @@ -0,0 +1,110 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: detector.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef DETECTOR_H +#define DETECTOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bank.h" + + +namespace clas12 { + + class detectorHit { + public: + int detector; + int layer; + double time; + double energy; + double path; + double x,y,z; + + detectorHit(){}; + ~detectorHit(){}; + + void show(); + }; + + class detector : public hipo::bank { + + private: + + int detector_id_order; + int layer_order; + int energy_order; + int pindex_order; + int path_order; + int time_order; + int x_order; + int y_order; + int z_order; + + std::map rmap; + + public: + + + detector(){}; + + detector(const char *bankName, hipo::reader &r) : hipo::bank(bankName,r){ + detector_id_order = getEntryOrder("detector"); + layer_order = getEntryOrder("layer"); + energy_order = getEntryOrder("energy"); + path_order = getEntryOrder("path"); + time_order = getEntryOrder("time"); + pindex_order = getEntryOrder("pindex"); + x_order = getEntryOrder("x"); + y_order = getEntryOrder("y"); + z_order = getEntryOrder("z"); + } + + ~detector(); + + double getEnergy(int detector, int layer, int pindex); + double getTime(int detector, int layer, int pindex); + double getPath(int detector, int layer, int pindex); + + + void init(const char *bankName, hipo::reader &r); + void scanIndex(); + + int getDetector(int index) { return getInt(detector_id_order,index);} + int getLayer(int index) { return getInt(layer_order,index);} + int getIndex(int index) { return getInt(pindex_order,index);} + float getPath(int index) { return getFloat(path_order,index);} + float getTime(int index) { return getFloat(time_order,index);} + float getEnergy(int index) { return getFloat(energy_order,index);} + float getX(int index) { return getFloat(x_order,index);} + float getY(int index) { return getFloat(y_order,index);} + float getZ(int index) { return getFloat(z_order,index);} + + + void getDetectorHit(int detector, int layer, int index, detectorHit &hit); + /** + * this method is called everytime the reader reads next event. + * used for indexing the detector response array for particle + * detector hit retrieval. + */ + void notify(){ scanIndex(); } + }; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/forwardtagger.cpp b/Clas12Banks4/forwardtagger.cpp new file mode 100644 index 0000000..23961a8 --- /dev/null +++ b/Clas12Banks4/forwardtagger.cpp @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "forwardtagger.h" + + +namespace clas12 { + + + forwardtagger::forwardtagger(hipo::schema __schema): clas12::particle_detector(__schema) { + + if(useItem("energy"))_energy_order = __schema.getEntryOrder("energy"); + if(useItem("path"))_path_order = __schema.getEntryOrder("path"); + if(useItem("time"))_time_order = __schema.getEntryOrder("time"); + if(useItem("status"))_status_order = __schema.getEntryOrder("status"); + if(useItem("time"))_time_order = __schema.getEntryOrder("time"); + if(useItem("x"))_x_order = __schema.getEntryOrder("x"); + if(useItem("y"))_y_order = __schema.getEntryOrder("y"); + if(useItem("z"))_z_order = __schema.getEntryOrder("z"); + if(useItem("dx"))_dx_order = __schema.getEntryOrder("dx"); + if(useItem("dy"))_dy_order = __schema.getEntryOrder("dy"); + if(useItem("radius"))_radius_order = __schema.getEntryOrder("radius"); + if(useItem("size"))_size_order = __schema.getEntryOrder("size"); + if(useItem("chi2"))_chi2_order = __schema.getEntryOrder("chi2"); + + } + + +} diff --git a/Clas12Banks4/forwardtagger.h b/Clas12Banks4/forwardtagger.h new file mode 100644 index 0000000..ddc28c5 --- /dev/null +++ b/Clas12Banks4/forwardtagger.h @@ -0,0 +1,115 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: forwardtagger.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_FORWARDTAGGER_H +#define CLAS12_FORWARDTAGGER_H + +#include "particle_detector.h" + + +namespace clas12 { + + + class forwardtagger : public particle_detector { + + + public: + + + forwardtagger()=default; + + forwardtagger(hipo::schema __schema); + + virtual ~forwardtagger()=default; + + //getter funtions for items in forwardtagger bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getDx(){ + if(_index>-1)return getFloat(_dx_order,_index); + return 0; + } + double getDy(){ + if(_index>-1)return getFloat(_dy_order,_index); + return 0; + } + double getRadius(){ + if(_index>-1)return getFloat(_radius_order,_index); + return 0; + } + int getSizeFT(){ //watch-out banks::getSize() ! + if(_index>-1)return getInt(_size_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + + private: + + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _dx_order=-1; + int _dy_order=-1; + int _radius_order=-1; + int _size_order=-1; + int _chi2_order=-1; + + + + }; //class forwardtagger + + + using ft_ptr=std::shared_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/hallB_event.cpp b/Clas12Banks4/hallB_event.cpp new file mode 100644 index 0000000..39c46b3 --- /dev/null +++ b/Clas12Banks4/hallB_event.cpp @@ -0,0 +1,146 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "hallB_event.h" + +namespace clas12 { + + hallB_event::hallB_event(hipo::reader &r){ + _reader=&r; //keep a pointer to the reader + + hipo::dictionary factory; + _reader->readDictionary(factory); + + //initialise banks pointers + _bparts = std::make_shared(factory.getSchema("REC::Particle")); + _bmcparts = std::make_shared(factory.getSchema("MC::Lund")); + _bcovmat= std::make_shared(factory.getSchema("REC::CovMat")); + _bhead = std::make_shared
(factory.getSchema("REC::Event")); + _bcal = std::make_shared(factory.getSchema("REC::Calorimeter")); + _bscint = std::make_shared(factory.getSchema("REC::Scintillator")); + _btrck = std::make_shared(factory.getSchema("REC::Track")); + _bcher = std::make_shared(factory.getSchema("REC::Cherenkov")); + _bft = std::make_shared(factory.getSchema("REC::ForwardTagger")); + + + //add some detector regions to their vectors + addARegionFDet(); + addARegionCDet(); + addARegionFT(); + + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool hallB_event::next(){ + if(!_reader->next()) + return false; + + _reader->read(_event); + _event.getStructure(*_bparts.get()); + _event.getStructure(*_bmcparts.get()); + _event.getStructure(*_bcovmat.get()); + _event.getStructure(*_bhead.get()); + _event.getStructure(*_bcal.get()); + _event.getStructure(*_bscint.get()); + _event.getStructure(*_btrck.get()); + _event.getStructure(*_bcher.get()); + _event.getStructure(*_bft.get()); + + sort(); + return true; + } + //////////////////////////////////////////////////////// + ///initialise next event from the reader + bool hallB_event::nextInRecord(){ + if(!_reader->nextInRecord()) + return false; + + _reader->read(_event); + _event.getStructure(*_bparts.get()); + _event.getStructure(*_bmcparts.get()); + _event.getStructure(*_bcovmat.get()); + _event.getStructure(*_bhead.get()); + _event.getStructure(*_bcal.get()); + _event.getStructure(*_bscint.get()); + _event.getStructure(*_btrck.get()); + _event.getStructure(*_bcher.get()); + _event.getStructure(*_bft.get()); + + sort(); + return true; + } + //////////////////////////////////////////////////////// + /// Loop over particles and find their region + /// Add appropriate region_partcle to event particle vector + void hallB_event::sort(){ + + + _nparts=_bparts->getRows(); + //cout<<_nparts<setEntry(i); + + //Check if FDet particle + if(_rfdets[_n_rfdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rfdets[_n_rfdets]); + _n_rfdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfdets==_rfdets.size()) + addARegionFDet(); + continue; + } + + //Check if CDet particle + if(_rcdets[_n_rcdets]->sort()){ + // add a FDet particle to the event list + _detParticles.emplace_back(_rcdets[_n_rcdets]); + _n_rcdets++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rcdets==_rcdets.size()) + addARegionCDet(); + continue; + } + //Check if FT particle + if(_rfts[_n_rfts]->sort()){ + //add a FDet particle to the event list + _detParticles.emplace_back(_rfts[_n_rfts]); + _n_rfts++; + //check if need more vector entries + //only required of previous events have + //less particles than this + if(_n_rfts==_rfts.size()) + addARegionFT(); + continue; + } + //cout<<"Warning hallB_event::sort() apparent particle with no detectors "<scanForParticle(i).size()<<" "<<_bscint->scanForParticle(i).size()<<" "<<_btrck->scanForParticle(i).size()<<" "<<_bcher->scanForParticle(i).size()<<" "<<_bft->scanForParticle(i).size()<<" "<show(); + // _bcal->show();_bscint->show();_btrck->show();_bcher->show();_bft->show(); + } + } + //////////////////////////////////////////////////////// + ///Filter and return detParticles by given PID + std::vector hallB_event::getByID(int id){ + return container_filter(_detParticles, [id](region_part_ptr dr) + {return dr->getPid()==id;}); + } + +} diff --git a/Clas12Banks4/hallB_event.h b/Clas12Banks4/hallB_event.h new file mode 100644 index 0000000..c17f16b --- /dev/null +++ b/Clas12Banks4/hallB_event.h @@ -0,0 +1,121 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hallB_event.h + * Author: dglazier + * + */ + +#ifndef HALLB_EVENT_H +#define HALLB_EVENT_H + +#include "clas12defs.h" +#include "reader.h" +#include "particle.h" +#include "mcparticle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "cherenkov.h" +#include "header.h" +#include "covmatrix.h" +#include "forwardtagger.h" +#include "region_particle.h" +#include "region_fdet.h" +#include "region_cdet.h" +#include "region_ft.h" + +#include + + +namespace clas12 { + + class hallB_event { + + + public: + + + hallB_event()=default; + hallB_event(hipo::reader &r); + ~hallB_event()=default; + + bool next(); + bool nextInRecord(); + void sort(); + + void addARegionFDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rfdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionCDet(){ + //Forward detector needs particles, calorimeter, scintillator, + //track, cherenkov + _rcdets.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + void addARegionFT(){ + //Forward tagger needs particles and forward tagger + _rfts.push_back(std::make_shared(_bparts,_bcovmat,_bcal,_bscint,_btrck,_bcher,_bft)); + } + + + const head_ptr head() const{return _bhead;}; + const mcpar_ptr mcparts() const{return _bmcparts;}; + + + std::vector& getDetParticles(){return _detParticles;} + std::vector getByID(int id); + + int getNParticles() const {return _detParticles.size();} + + private: + + //reader + hipo::reader *_reader=nullptr; + hipo::event _event; + + //DST banks + head_ptr _bhead; + par_ptr _bparts; + mcpar_ptr _bmcparts; + covmat_ptr _bcovmat; + cal_ptr _bcal; + scint_ptr _bscint; + trck_ptr _btrck; + cher_ptr _bcher; + ft_ptr _bft; + + //Detector region vectors, + //each particle in an event will have + //one associated + std::vector _rfdets; + std::vector _rcdets; + std::vector _rfts; + std::vector _detParticles; + + + ushort _nparts=0; + ushort _n_rfdets=0; + ushort _n_rcdets=0; + ushort _n_rfts=0; + + }; + //helper functions + + //filter vectors via a lambda function + //see for example hallb_event::getByID() + template + Cont container_filter(const Cont &container, Pred predicate){ + Cont result; + std::copy_if(container.begin(),container.end(),std::back_inserter(result), predicate); + return std::move(result); + } + +} + +#endif /* HALLB_EVENT_H */ diff --git a/Clas12Banks4/header.cpp b/Clas12Banks4/header.cpp new file mode 100644 index 0000000..9867be2 --- /dev/null +++ b/Clas12Banks4/header.cpp @@ -0,0 +1,47 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "header.h" + +namespace clas12 { + + header::header(hipo::dictionary __factory): hipo::bank(__factory.getSchema("REC::EVNT")) { + + auto sch=getSchema(); + + rn_order = sch.getEntryOrder("NRUN"); + en_order = sch.getEntryOrder("NEVENT"); + et_order = sch.getEntryOrder("EVNTime"); + ty_order = sch.getEntryOrder("TYPE"); + ec_order = sch.getEntryOrder("EvCAT"); + np_order = sch.getEntryOrder("NPGP"); + trg_order = sch.getEntryOrder("TRG"); + bcg_order = sch.getEntryOrder("BCG"); + lt_order = sch.getEntryOrder("LT"); + st_order = sch.getEntryOrder("STTime"); + rf_order = sch.getEntryOrder("RFTime"); + hel_order = sch.getEntryOrder("Helic"); + pt_order = sch.getEntryOrder("PTIME"); + } + + header::header(hipo::schema __schema): hipo::bank(__schema) { + auto sch=getSchema(); + + rn_order = sch.getEntryOrder("NRUN"); + en_order = sch.getEntryOrder("NEVENT"); + et_order = sch.getEntryOrder("EVNTime"); + ty_order = sch.getEntryOrder("TYPE"); + ec_order = sch.getEntryOrder("EvCAT"); + np_order = sch.getEntryOrder("NPGP"); + trg_order = sch.getEntryOrder("TRG"); + bcg_order = sch.getEntryOrder("BCG"); + lt_order = sch.getEntryOrder("LT"); + st_order = sch.getEntryOrder("STTime"); + rf_order = sch.getEntryOrder("RFTime"); + hel_order = sch.getEntryOrder("Helic"); + pt_order = sch.getEntryOrder("PTIME"); + } +} diff --git a/Clas12Banks4/header.h b/Clas12Banks4/header.h new file mode 100644 index 0000000..def7017 --- /dev/null +++ b/Clas12Banks4/header.h @@ -0,0 +1,81 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: header.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef EVENT_HEADER_H +#define EVENT_HEADER_H + +#include +#include +#include +#include "bank.h" +#include "vectors.h" + +namespace clas12 { + + class header : public hipo::bank { + + + public: + + + header(hipo::dictionary __factory); + header(hipo::schema __schema); + virtual ~header() = default; + + int getRunNumber(){ return getInt(rn_order,0); } + int getEventNumber(){ return getInt(en_order,0); } + int getHelicity(){ return getInt(hel_order,0); } + int getType(){ return getInt(ty_order,0); } + float getStartTime(){ return getFloat(st_order,0); } + float getRFTime(){ return getFloat(rf_order,0); } + float getPTime(){ return getFloat(pt_order,0); } + float getEVNime(){ return getFloat(et_order,0); } + float getBCG(){ return getFloat(bcg_order,0); } + float getNPGP(){ return getInt(np_order,0); } + float getLT(){ return getFloat(lt_order,0); } + long getTrigger(){ return getLong(trg_order,0); } + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify() final{ + bank::notify(); + //printf("particle class is read again\n"); + } + + private : + + int rn_order; + int en_order; + int et_order; + int ty_order; + int ec_order; + int np_order; + int trg_order; + int bcg_order; + int lt_order; + int st_order; + int rf_order; + int hel_order; + int pt_order; + + + }; + + using head_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/mcparticle.cpp b/Clas12Banks4/mcparticle.cpp new file mode 100644 index 0000000..b385b48 --- /dev/null +++ b/Clas12Banks4/mcparticle.cpp @@ -0,0 +1,25 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "mcparticle.h" + + +namespace clas12 { + + mcparticle::mcparticle(hipo::schema __schema): hipo::bank(__schema) { + pid_order = __schema.getEntryOrder("pid"); + px_order = __schema.getEntryOrder("px"); + py_order = __schema.getEntryOrder("py"); + pz_order = __schema.getEntryOrder("pz"); + vx_order = __schema.getEntryOrder("vx"); + vy_order = __schema.getEntryOrder("vy"); + vz_order = __schema.getEntryOrder("vz"); + mass_order = __schema.getEntryOrder("mass"); + + } + + +} diff --git a/Clas12Banks4/mcparticle.h b/Clas12Banks4/mcparticle.h new file mode 100644 index 0000000..eb5ed89 --- /dev/null +++ b/Clas12Banks4/mcparticle.h @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: mcparticle.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef MCPARTICLE_H +#define MCPARTICLE_H + +#include "bank.h" +#include "vectors.h" +#include + +namespace clas12 { + + class mcparticle : public hipo::bank { + + + public: + + mcparticle() = default; + + mcparticle(hipo::schema __schema); + + virtual ~mcparticle() = default; + + + int getPid(int index) { return getInt(pid_order,index);} + float getPx(int index) { return getFloat(px_order,index);} + float getPy(int index) { return getFloat(py_order,index);} + float getPz(int index) { return getFloat(pz_order,index);} + float getVx(int index) { return getFloat(vx_order,index);} + float getVy(int index) { return getFloat(vy_order,index);} + float getVz(int index) { return getFloat(vz_order,index);} + float getMass(int index) { return getFloat(mass_order,index);} + + int getPid() { return getInt(pid_order,_entry);} + float getPx() { return getFloat(px_order,_entry);} + float getPy() { return getFloat(py_order,_entry);} + float getPz() { return getFloat(pz_order,_entry);} + float getVx() { return getFloat(vx_order,_entry);} + float getVy() { return getFloat(vy_order,_entry);} + float getVz() { return getFloat(vz_order,_entry);} + float getMass() { return getFloat(mass_order,_entry);} + + void getVector3(int index, vector3 &vect){ + vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index)); + } + + void getVector4(int index, vector4 &vect, double mass){ + vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index),getFloat(mass_order,index)); + } + + float getP(){ + auto x= getFloat(px_order,_entry); + auto y= getFloat(py_order,_entry); + auto z= getFloat(pz_order,_entry); + return sqrt(x*x+y*y+z*z); + } + + void setEntry(short i){ _entry=i;} + short getEntry() const {return _entry;} + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * mcparticles and or map mcparticles by pid or type (i.e. charge) + */ + void notify() final { + bank::notify(); + //printf("mcparticle class is read again\n"); + } + + private: + + int pid_order; + int px_order; + int py_order; + int pz_order; + int vx_order; + int vy_order; + int vz_order; + int mass_order; + + short _entry=0; + + }; + + using mcpar_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/mesonex_event.cpp b/Clas12Banks4/mesonex_event.cpp new file mode 100644 index 0000000..803fd25 --- /dev/null +++ b/Clas12Banks4/mesonex_event.cpp @@ -0,0 +1,108 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "clas12defs.h" +#include "mesonex_event.h" + + +namespace clas12 { + + void mesonex_event::init(hipo::reader &r){ + _particles.init("REC::Particle",r); + _header.init("REC::Event",r); + _calorimeter.init("REC::Calorimeter",r); + _tof.init("REC::Scintillator",r); + _cherenkov.init("REC::Cherenkov",r); + _ft.init("REC::ForwardTagger",r); + _track.init("REC::Track",r); + } + + vecPIDs mesonex_event::pids(){ + vecPIDs temp(_particles.getSize()); + + for(int ip=0; ip<_particles.getSize(); ip++) + temp[ip]=_particles.getPid(ip); + + return temp; + } + + bool mesonex_event::next_particle(){ + auto nparts=_particles.getSize(); + + //check if another particle + if( _pentry == nparts) + return false; + + _particles.setEntry(_pentry); + + checkTof(); //find prefered ToF hit + + checkFT(); //sort FT hodo&cal hit + + checkTrack(); //find particle track + + checkCalorimeter(); //set PCAL + + // _cherenkov.print(); + _pentry++; + return true; + } + + /////////////////////////////////////////////////////////////// + //Find hodo and cal hits to get time, and delta E etc. + void mesonex_event::checkFT(){ + _pftcal=_ft.getIndex(_pentry,clas12::FTCAL); + _pfthodo=_ft.getIndex(_pentry,clas12::FTHODO); + } + /////////////////////////////////////////////////////////////// + //if FTOF save tof index with preference layer1, layer2, layer0 + //if CTOF save preference CTOF then CND + void mesonex_event::checkTof(){ + _ptof=-1;//particle tof index + _isFTOF=false; + _isCTOF=false; + _isCND=false; + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,1))>-1){ + _isFTOF=true; + return; + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,0))>-1){ + _isFTOF=true; + return; + } + if((_ptof=_tof.getIndex(_pentry,clas12::FTOF,2))>-1){ + _isFTOF=true; + return; + } + if((_ptof=_tof.getIndex(_pentry,clas12::CTOF,0))>-1){ + _isCTOF=true; + return; + } + if((_ptof=_tof.getIndex(_pentry,clas12::CND,0))>-1){ + _isCND=true; + return; + } + } + + //////////////////////////////////////////////////////////////// + //Look for track for this particle + void mesonex_event::checkTrack(){ + //return _tracker + auto trackids=_track.scanForParticle(_pentry); + if(trackids.size()){ + //should only be 1 track per particle so just take first index + _track.setIndex(trackids[0]); + } + else _track.setIndex(-1); + } + + ////////////////////////////////////////////////////////////////// + ///Use PCAL for time, path, sector,... + void mesonex_event::checkCalorimeter(){ + getPCAL(); + } +}//namespace clas12 + diff --git a/Clas12Banks4/mesonex_event.h b/Clas12Banks4/mesonex_event.h new file mode 100644 index 0000000..68fc1d0 --- /dev/null +++ b/Clas12Banks4/mesonex_event.h @@ -0,0 +1,197 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: mesonex_event.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef MESONEX_EVENT_H +#define MESONEX_EVENT_H + +#include +#include +#include +#include +#include +#include +#include +#include "particle.h" +#include "particle_detector.h" +#include "scintillator.h" +#include "calorimeter.h" +#include "cherenkov.h" +#include "forwardtagger.h" +#include "tracker.h" +#include "header.h" +#include "clas12defs.h" + +namespace clas12 { + + + using vecPIDs=std::vector; + + class mesonex_event { + + public: + + mesonex_event()=default; + + mesonex_event(hipo::reader &r) { + init(r); + } + + ~mesonex_event()=default; + + void init(hipo::reader &r); + void reset(){_pentry=0;}; + bool next_particle(); + + vecPIDs pids(); + + void checkTof(); + void checkFT(); + void checkTrack(); + void checkCalorimeter(); + + double getCalTotEnergy(); + double getTime(); + int getSector(); + double getPath(); + double getDeltaE(); + double getTrackChi2(); + + int getPCAL(); + int getECIN(); + int getECOUT(); + int getHTCC(); + int getLTCC(); + + clas12::particle &particles(){return _particles;} + clas12::header &header(){ return _header;} + clas12::calorimeter &calorimeter(){ return _calorimeter;} + clas12::scintillator &tof(){return _tof;} + clas12::cherenkov &cherenkov(){return _cherenkov;} + clas12::forwardtagger &ft(){return _ft;} + clas12::tracker &track(){return _track;} + + clas12::particle *particles_ptr(){return &_particles;} + clas12::header *header_ptr(){ return &_header;} + clas12::calorimeter *calorimeter_ptr(){ return &_calorimeter;} + clas12::scintillator *tof_ptr(){return &_tof;} + clas12::cherenkov *cherenkov_ptr(){return &_cherenkov;} + clas12::forwardtagger *ft_ptr(){return &_ft;} + clas12::tracker *track_ptr(){return &_track;} + + const int getNParticles(){return _particles.getSize();} + + bool isFT(){return _pftcal!=-1;} + bool isFTOF(){return _isFTOF;}; + bool isCTOF(){return _isFTOF;}; + bool isCND(){return _isFTOF;}; + bool isECAL(){return (getCalTotEnergy()!=0);}; + + private: + + + clas12::particle _particles; + clas12::header _header; + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + short _ptof=0; + short _pftcal=0; + short _pfthodo=0; + short _pentry=0; + bool _isFTOF=false; + bool _isCTOF=false; + bool _isCND=false; + + }; + inline double mesonex_event::getCalTotEnergy(){ + if(_pftcal>-1) return _ft.getEnergy(); + //note FT hit use EC + double energy = 0.0; + getPCAL(); + energy += _calorimeter.getEnergy(); + getECIN(); + energy += _calorimeter.getEnergy(); + getECOUT(); + energy += _calorimeter.getEnergy(); + return energy; + } + + inline int mesonex_event::getPCAL(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 1); + } + + + inline double mesonex_event::getTime(){ + if(_ptof>=0) + return _tof.getTime(); + if(_pftcal>=0) + return _ft.getTime(); + //if no tof hit use EC time + // _calorimeter.getIndex(clas12::EC, 1, _pentry); + return _calorimeter.getTime(); + } + inline int mesonex_event::getSector(){ + if(_track.getIndex()>-1) //use track first + return _track.getSector(); + if(_ptof>=0) //then FTOF + return _tof.getSector(); + if(_pftcal>=0) //then FT + return 0; + //if no tof hit use EC time + return _calorimeter.getSector(); + } + inline double mesonex_event::getPath(){ + if(_ptof>=0) + return _tof.getPath(); + if(_pftcal>=0){ //currently no FT path reported + double ftx=_ft.getX(); + double fty=_ft.getY(); + double ftz=_ft.getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz)/100; + } + /// return _ft.getPath(); + //if no tof hit use EC time + return _calorimeter.getPath(); + } + inline double mesonex_event::getDeltaE(){ + if(_ptof>=0) + return _tof.getEnergy(); + if(_pfthodo>=0) + return _ft.getEnergy(); + return 0; + } + + inline int mesonex_event::getECIN(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 4); + } + inline int mesonex_event::getECOUT(){ + return _calorimeter.getIndex( _pentry,clas12::EC, 7); + } + inline int mesonex_event::getHTCC(){ + return _cherenkov.getIndex( _pentry,clas12::HTCC); + } + inline int mesonex_event::getLTCC(){ + return _cherenkov.getIndex( _pentry,clas12::LTCC); + } + inline double mesonex_event::getTrackChi2(){ + int ndf= _track.getNDF(); + if(ndf) + return _track.getChi2()/ndf; + return 0; + } +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/particle.cpp b/Clas12Banks4/particle.cpp new file mode 100644 index 0000000..9f4a049 --- /dev/null +++ b/Clas12Banks4/particle.cpp @@ -0,0 +1,44 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "particle.h" +#include "dictionary.h" + + +namespace clas12 { + + particle::particle(hipo::dictionary __factory): hipo::bank(__factory.getSchema("REC::Particle")) { + + auto sch=getSchema(); + pid_order = sch.getEntryOrder("pid"); + px_order = sch.getEntryOrder("px"); + py_order = sch.getEntryOrder("py"); + pz_order = sch.getEntryOrder("pz"); + vx_order = sch.getEntryOrder("vx"); + vy_order = sch.getEntryOrder("vy"); + vz_order = sch.getEntryOrder("vz"); + ch_order = sch.getEntryOrder("charge"); + st_order = sch.getEntryOrder("status"); + + } + + particle::particle(hipo::schema __schema): hipo::bank(__schema) { + + auto sch=getSchema(); + pid_order = sch.getEntryOrder("pid"); + px_order = sch.getEntryOrder("px"); + py_order = sch.getEntryOrder("py"); + pz_order = sch.getEntryOrder("pz"); + vx_order = sch.getEntryOrder("vx"); + vy_order = sch.getEntryOrder("vy"); + vz_order = sch.getEntryOrder("vz"); + ch_order = sch.getEntryOrder("charge"); + st_order = sch.getEntryOrder("status"); + + } + + +} diff --git a/Clas12Banks4/particle.h b/Clas12Banks4/particle.h new file mode 100644 index 0000000..4638dbc --- /dev/null +++ b/Clas12Banks4/particle.h @@ -0,0 +1,106 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: particle.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef PARTICLE_H +#define PARTICLE_H + +#include "bank.h" +#include "vectors.h" +#include "dictionary.h" +#include + +namespace clas12 { + + class particle : public hipo::bank { + + private: + + int pid_order; + int px_order; + int py_order; + int pz_order; + int vx_order; + int vy_order; + int vz_order; + int ch_order; + int st_order; + + short _entry=0; + + public: + + particle() = default; + + + particle(hipo::dictionary __factory); + particle(hipo::schema __schema); + + virtual ~particle() = default; + + + // void init(const char *bankName, hipo::reader &r); + int getPid(int index) { return getInt(pid_order,index);} + float getPx(int index) { return getFloat(px_order,index);} + float getPy(int index) { return getFloat(py_order,index);} + float getPz(int index) { return getFloat(pz_order,index);} + float getVx(int index) { return getFloat(vx_order,index);} + float getVy(int index) { return getFloat(vy_order,index);} + float getVz(int index) { return getFloat(vz_order,index);} + int getCharge(int index) { return getInt(ch_order,index);} + int getStatus(int index) { return getInt(st_order,index);} + + int getPid() { return getInt(pid_order,_entry);} + float getPx() { return getFloat(px_order,_entry);} + float getPy() { return getFloat(py_order,_entry);} + float getPz() { return getFloat(pz_order,_entry);} + float getVx() { return getFloat(vx_order,_entry);} + float getVy() { return getFloat(vy_order,_entry);} + float getVz() { return getFloat(vz_order,_entry);} + int getCharge() { return getInt(ch_order,_entry);} + int getStatus() { return getInt(st_order,_entry);} + + void getVector3(int index, vector3 &vect){ + vect.setXYZ(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index)); + } + + void getVector4(int index, vector4 &vect, double mass){ + vect.setXYZM(getFloat(px_order,index),getFloat(py_order,index), + getFloat(pz_order,index),mass); + } + + float getP(){ + auto x= getFloat(px_order,_entry); + auto y= getFloat(py_order,_entry); + auto z= getFloat(pz_order,_entry); + return sqrt(x*x+y*y+z*z); + } + + void setEntry(short i){ _entry=i;} + short getEntry() const {return _entry;} + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify() final { + bank::notify(); + //printf("particle class is read again\n"); + } + }; + + using par_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/particle_detector.cpp b/Clas12Banks4/particle_detector.cpp new file mode 100644 index 0000000..c1d26a3 --- /dev/null +++ b/Clas12Banks4/particle_detector.cpp @@ -0,0 +1,104 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "particle_detector.h" +#include +#include + +namespace clas12 { + + particle_detector::particle_detector(hipo::schema __schema) : hipo::bank( __schema) { + + auto sch=getSchema(); + //base detector need detector and pindex items + _detector_id_order = sch.getEntryOrder("detector"); + _pindex_order = sch.getEntryOrder("pindex"); + } + /////////////////////////////////////////////////////////////////////// + /// load items to be used + void particle_detector::readItems(std::string items){ + std::stringstream ss(items); + std::string sitem; + while(std::getline(ss, sitem, ':')) + _sitems.push_back(sitem); + } + /////////////////////////////////////////////////////////////////////// + ///check if item should be used + bool particle_detector::useItem(std::string item){ + if(!(_sitems.size())) return true; + if(std::find(_sitems.begin(),_sitems.end(),"c")!=_sitems.end()) + return true; + return false; + } + + // function to map the detector entry to particle index + // void particle_detector::scanIndex(){ + // _rmap.clear(); + + // const int size = getSize(); + // for(int i = 0; i < size; i++){ + // int detector = getDetector(i); + // int layer= getLayer(i); + // int pindex = getPindex(i); + // int key = (detector<<16)|(layer<<8)|pindex; + // _rmap[key] = i; + // } + // } + //////////////////////////////////////////////////////////////////////// + ///function to find the current entries associated + ///with pindex = iparticle + std::vector particle_detector::scanForParticle(short iparticle){ + const int size = getSize(); + std::vector pindices(0); + for(short i = 0; i < size; i++){ + int pindex = getPindex(i); + if(iparticle==pindex){ + int detector = getDetector(i); + int layer = getLayer(i); + int key = (detector<<16)|(layer<<8)|pindex; + pindices.push_back(i); + } + } + return pindices; + } + + + + void particle_detector::print(){ + const int size=getSize(); + std::cout<<"Print detector with "<::iterator it; + int key = (detector<<16)|(layer<<8)|pindex; + if((it=std::find(_rvec.begin(),_rvec.end(),key))!=_rvec.end()){ + _index = std::distance(_rvec.begin(), it); + return _index; + } + return _index=-1; + } + void particle_detector::scanIndex(){ + + _rvec.clear(); + const int size = getRows(); + _rvec.reserve(size); + for(int i = 0; i < size; i++){ + int detector = getDetector(i); + int layer= getLayer(i); + int pindex = getPindex(i); + int key = (detector<<16)|(layer<<8)|pindex; + _rvec.emplace_back(key); + } + } + +} + diff --git a/Clas12Banks4/particle_detector.h b/Clas12Banks4/particle_detector.h new file mode 100644 index 0000000..40f8242 --- /dev/null +++ b/Clas12Banks4/particle_detector.h @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: particle_detector.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef PARTICLE_DETECTOR_H +#define PARTICLE_DETECTOR_H + +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class particle_detector : public hipo::bank { + + + public: + + + particle_detector()=default; + + particle_detector(hipo::schema __schema); + + virtual ~particle_detector()=default; + + /////////////////////////////////////////////////////////////// + //utiltiy functions, same for derived classes + void scanIndex(); + std::vector scanForParticle(short iparticle); + void readItems(std::string items); + bool useItem(std::string item); + + /////////////////////////////////////////////////////////////// + //getter functions, same for derived classes + //get detector id + int getDetector(int index) { return getInt(_detector_id_order,index);} + int getDetector() { return getInt(_detector_id_order,_index);} + //get the pindex = corresponding particle index + int getPindex(int index) { return getInt(_pindex_order,index);} + int getPindex() { return getInt(_pindex_order,_index);} + + //given a detector (layer if exists) and pindex find the position in this bank + int getIndex() {return _index;} + int getIndex(int pindex, int detector, int layer=0); + + /* int getIndex(int pindex, int detector, int layer=0) { */ + /* //This function seems to be a bottle neck! */ + /* int key = (detector<<16)|(layer<<8)|pindex; */ + /* if(_rmap.count(key)>0) { */ + /* _index = _rmap[key]; */ + /* return _index; */ + /* } */ + /* return _index=-1; */ + /* } */ + void setIndex(int ind){_index=ind;} + void setEntry(int ind){_index=ind;} + + //////////////////////////////////////////////////////////////// + //virtual functions can be overridden in derived class + virtual int getLayer(int index=0){return 0;} + virtual int getLayer(){return 0;} + virtual void print(); + + //////////////////////////////////////////////////////////////// + //override header notify, called at start of event + void notify() override { + bank::notify(); + scanIndex(); + } + + + protected: + + int _detector_id_order=-1; + int _pindex_order=-1; + int _index=-1; + + // std::map _rmap; + std::vector _rvec; + std::vector _sitems; + + + }; + +} + +#endif /* PARTICLE_DETECTOR_H */ diff --git a/Clas12Banks4/raw.cpp b/Clas12Banks4/raw.cpp new file mode 100644 index 0000000..a7f664d --- /dev/null +++ b/Clas12Banks4/raw.cpp @@ -0,0 +1,16 @@ +/* + * To change this license raw, choose License Raws in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "raw.h" + +namespace clas12 { + + + void raw::init(const char *bankName, hipo::reader &r){ + initBranches(bankName,r); + + } +} diff --git a/Clas12Banks4/raw.h b/Clas12Banks4/raw.h new file mode 100644 index 0000000..5585cb9 --- /dev/null +++ b/Clas12Banks4/raw.h @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: header.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef EVENT_RAW_H +#define EVENT_RAW_H + +#include +#include +#include +#include +#include +#include +#include +#include "bank.h" +#include "vectors.h" + +namespace clas12 { + + class raw : public hipo::bank { + + + public: + + + + void init(const char *bankName, hipo::reader &r); + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify(){ + //printf("particle class is read again\n"); + } + + private : + + int rn_order; + int en_order; + int et_order; + int ty_order; + int ec_order; + int np_order; + int trg_order; + int bcg_order; + int lt_order; + int st_order; + int rf_order; + int hel_order; + int pt_order; + + + }; + + using head_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/region_cdet.cpp b/Clas12Banks4/region_cdet.cpp new file mode 100644 index 0000000..94baf7e --- /dev/null +++ b/Clas12Banks4/region_cdet.cpp @@ -0,0 +1,81 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_cdet.h" + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): + region_particle(pars,cm,scp,trp,trj) + { + _region=clas12::CD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_cdet::region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) + { + _region=clas12::CD; + } + + /////////////////////////////////////////////////////// + /// check if any CD detectors associated with + /// current particle and store the detector indices + bool region_cdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcnd=-1; + + //tof 1 layer + _ptof=_scint->getIndex(_pentry,clas12::CTOF); + + //prefer cnd layer 1,2, 3 + _pcnd1=_scint->getIndex(_pentry,clas12::CND,clas12::CND1); + _pcnd2=_scint->getIndex(_pentry,clas12::CND,clas12::CND2); + _pcnd3=_scint->getIndex(_pentry,clas12::CND,clas12::CND3); + if(_pcnd1!=-1) _pcnd=_pcnd1; + else if(_pcnd2!=-1) _pcnd=_pcnd2; + else if(_pcnd3!=-1) _pcnd=_pcnd3; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::CVT); + + //was cdet involved ? + if((_ptof+_pcnd+_ptrck) == -3)return false; + return true; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(CND)->getEnergy(); + /// p->scint(CTOF)->getTime(); + const scint_ptr region_cdet::sci(ushort lay) const { + switch(lay){ + case clas12::CTOF : + _scint->setIndex(_ptof);return _scint; + case clas12::CND : + _scint->setIndex(_pcnd);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + /////////////////////////////////////////////////////// + /// Get pointer to traj banks for this particle + /// This should be used directly to acess data + /// e.g. p->traj(TRAJ_CD1)->getCx(); + /// p->traj(TRAJ_CD4)->getX(); + const traj_ptr region_cdet::traj(ushort det) const { + _traj->getIndex(_pentry,det); + return _traj; + } + + +} diff --git a/Clas12Banks4/region_cdet.h b/Clas12Banks4/region_cdet.h new file mode 100644 index 0000000..368dcea --- /dev/null +++ b/Clas12Banks4/region_cdet.h @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_cdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_CDET_H +#define REGION_CDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_cdet : public region_particle { + + + public: + + region_cdet(par_ptr pars,covmat_ptr cm, scint_ptr scp, + trck_ptr trp,traj_ptr trj); + region_cdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); + ~region_cdet()=default; + + + bool sort() final; + + const scint_ptr sci(ushort lay) const final; + const traj_ptr traj(ushort det) const final; + const trck_ptr trk(ushort lay) const final{_trck->setIndex(_ptrck);return _trck;}; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _scint->setIndex(_pcnd); + return _scint->getTime(); + + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _scint->setIndex(_pcnd); + return _scint->getPath(); + } + + double getDetEnergy() final{ + //sum of cnd layers + _scint->setIndex(_pcnd1); + double energy=_scint->getEnergy(); + _scint->setIndex(_pcnd2); + energy+=_scint->getEnergy(); + _scint->setIndex(_pcnd3); + energy+=_scint->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + return 0; + } + + + private: + + + + //scintillator indices + short _pcnd=-1; + short _pcnd1=-1; + short _pcnd2=-1; + short _pcnd3=-1; + short _ptof=-1; + //track index + short _ptrck=-1; + + + + }; + + using region_cdet_ptr=std::shared_ptr; + +} + +#endif /* REGION_CDET_H */ diff --git a/Clas12Banks4/region_detector.h b/Clas12Banks4/region_detector.h new file mode 100644 index 0000000..82bc9d7 --- /dev/null +++ b/Clas12Banks4/region_detector.h @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_detector.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_DETECTOR_H +#define REGION_DETECTOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "clas12defs.h" +#include "bank.h" + + +namespace clas12 { + + class region_detector : public hipo::bank { + + + public: + + + region_detector()=default; + // virtual ~region_detector()=default; + + clas12::calorimeter Thick(); + clas12::scintillator Thin(); + clas12::cherenkov Track(); + PID(); + //individual detector components + clas12::calorimeter _calorimeter; + clas12::scintillator _tof; + clas12::cherenkov _cherenkov; + clas12::forwardtagger _ft; + clas12::tracker _track; + + + }; + +} + +#endif /* REGION_DETECTOR_H */ diff --git a/Clas12Banks4/region_fdet.cpp b/Clas12Banks4/region_fdet.cpp new file mode 100644 index 0000000..6354bdf --- /dev/null +++ b/Clas12Banks4/region_fdet.cpp @@ -0,0 +1,123 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_fdet.h" + +namespace clas12 { + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): + region_particle(pars,cm,calp,scp,trp,trj,chp) + { + _region=clas12::FD; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FT + region_fdet::region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj,cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) + { + _region=clas12::FD; + } + + /////////////////////////////////////////////////////// + /// check if any FD detectors associated with + /// current particle and store the detector indices + bool region_fdet::sort(){ + + region_particle::sort(); + _ptof=-1; + _pcal=-1; + _ptrck=-1; + + //prefer tof layer 1,0,2 + _ptof3=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF2); + _ptof1=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1A); + _ptof2=_scint->getIndex(_pentry,clas12::FTOF,clas12::FTOF1B); + if(_ptof2!=-1) _ptof=_ptof2; + else if(_ptof1!=-1) _ptof=_ptof1; + else if(_ptof3!=-1) _ptof=_ptof3; + + //prefer pcal,inner, outer + _pcal=_pin=_cal->getIndex( _pentry,clas12::EC, clas12::ECIN); + _pcal=_pout=_cal->getIndex( _pentry,clas12::EC, clas12::ECOUT); + _pcal=_ppre=_cal->getIndex( _pentry,clas12::EC, clas12::PCAL); + if(_ppre!=-1) _pcal=_ppre; + else if(_pout!=-1) _pcal=_pout; + else if(_pin!=-1) _pcal=_pin; + + //should be 1 track per particle + _ptrck=_trck->getIndex(_pentry,clas12::DC); + + _phtcc=_cher->getIndex( _pentry,clas12::HTCC); + _pltcc=_cher->getIndex( _pentry,clas12::LTCC); + + //was fdet involved ? + if((_ptof+_pcal+_ptrck) == -3)return false; + return true; + } + /////////////////////////////////////////////////////// + /// Get pointer to calorimeter banks for this particle + /// This should be used directly to acess data + /// e.g. p->cal(ECIN)->getEnergy(); + /// p->cal(PCAL)->getTime(); + const cal_ptr region_fdet::cal(ushort lay) const { + switch(lay){ + case clas12::PCAL : + _cal->setIndex(_ppre);return _cal; + case clas12::ECIN : + _cal->setIndex(_pin);return _cal; + case clas12::ECOUT : + _cal->setIndex(_pout);return _cal; + } + _cal->setIndex(-1);return _cal; + } + + /////////////////////////////////////////////////////// + /// Get pointer to scintillator banks for this particle + /// This should be used directly to acess data + /// e.g. p->scint(FTOF1A)->getEnergy(); + /// p->scint(FTOF2)->getTime(); + const scint_ptr region_fdet::sci(ushort lay) const { + switch(lay){ + case clas12::FTOF1A : + _scint->setIndex(_ptof1);return _scint; + case clas12::FTOF1B : + _scint->setIndex(_ptof2);return _scint; + case clas12::FTOF2 : + _scint->setIndex(_ptof3);return _scint; + } + _scint->setIndex(-1);return _scint; + } + + /////////////////////////////////////////////////////// + /// Get pointer to chrenkov banks for this particle + /// This should be used directly to acess data + /// e.g. p->che(HTCC)->getNphe(); + /// p->che(LTCC)->getNphe(); + const cher_ptr region_fdet::che(ushort lay) const { + switch(lay){ + case clas12::HTCC : + _cher->setIndex(_phtcc);return _cher; + case clas12::LTCC : + _cher->setIndex(_pltcc);return _cher; + } + _cher->setIndex(-1);return _cher; + } + + /////////////////////////////////////////////////////// + /// Get pointer to traj banks for this particle + /// This should be used directly to acess data + /// e.g. p->traj(TRAJ_HTCC)->getCx(); + /// p->traj(TRAJ_DC3)->getX(); + const traj_ptr region_fdet::traj(ushort det) const { + _traj->getIndex(_pentry,det); + return _traj; + } + + + +} diff --git a/Clas12Banks4/region_fdet.h b/Clas12Banks4/region_fdet.h new file mode 100644 index 0000000..a190b7b --- /dev/null +++ b/Clas12Banks4/region_fdet.h @@ -0,0 +1,131 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_fdet.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FDET_H +#define REGION_FDET_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "cherenkov.h" + + +namespace clas12 { + + + class region_fdet : public region_particle { + + + public: + + // region_fdet()=default; + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, traj_ptr trj, cher_ptr chp); + region_fdet(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); + ~region_fdet()=default; + + + bool sort() final; + + const cal_ptr cal(ushort lay) const final; + const scint_ptr sci(ushort lay) const final; + const traj_ptr traj(ushort det) const final; + const trck_ptr trk(ushort lay) const final + { + _trck->setIndex(_ptrck);return _trck; + } + const cher_ptr che(ushort lay) const final; + + + + double getTime() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getTime(); + } + _cal->setIndex(_pcal); + return _cal->getTime(); + } + double getPath() final{ + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getPath(); + } + _cal->setIndex(_pcal); + return _cal->getPath(); + } + + double getDetEnergy() final{ + _cal->setIndex(_ppre); + double energy=_cal->getEnergy(); + _cal->setIndex(_pin); + energy+=_cal->getEnergy(); + _cal->setIndex(_pout); + energy+=_cal->getEnergy(); + return energy; + } + + double getDeltaEnergy() final{ + _scint->setIndex(_ptof); + return _scint->getEnergy(); + } + + short getSector() final{ + if(_ptrck){ + _trck->setIndex(_ptrck); + return _trck->getSector(); + } + if(_ptof){ + _scint->setIndex(_ptof); + return _scint->getSector(); + } + _cal->setIndex(_pcal); + return _cal->getSector(); + } + + + private: + + + + //calorimeter indices + short _pcal=-1; + short _ppre=-1; + short _pin=-1; + short _pout=-1; + //scintillator indices + short _ptof=-1; + short _ptof1=-1; + short _ptof2=-1; + short _ptof3=-1; + //track index + short _ptrck=-1; + //traj index + // short _ptraj=-1; + //cherenkov indices + short _phtcc=-1; + short _pltcc=-1; + + + + }; + + using region_fdet_ptr=std::shared_ptr; + +} + +#endif /* REGION_FDET_H */ diff --git a/Clas12Banks4/region_ft.cpp b/Clas12Banks4/region_ft.cpp new file mode 100644 index 0000000..23fd574 --- /dev/null +++ b/Clas12Banks4/region_ft.cpp @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_ft.h" +#include + +namespace clas12 { + + /////////////////////////////////////////////////////// + /// constructor used for stand-alone + region_ft::region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + region_particle(pars,cm,ftp) + { + _region=clas12::FT; + } + /////////////////////////////////////////////////////// + ///Constructor used for event, + ///give all detector banks to prevent crashes when looking for FD + region_ft::region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): + region_particle(pars,cm,calp,scp,trp,trj,chp,ftp,head) + { + _region=clas12::FT; + } + + /////////////////////////////////////////////////////// + /// Temporary until FT banks updated + double region_ft::getPath(){ + if(_pcal>=0){ //currently no FT path reported + _ft->setIndex(_pcal); + double ftx=_ft->getX(); + double fty=_ft->getY(); + double ftz=_ft->getZ(); + return sqrt(ftx*ftx+fty*fty+ftz*ftz); + } + return 0; + } + //////////////////////////////////////////////////////// + ///check if any FT detectors associated with + ///current particle and store the detector indices + bool region_ft::sort(){ + region_particle::sort(); + _pcal=_ft->getIndex(_pentry,clas12::FTCAL); + + _phod=_ft->getIndex(_pentry,clas12::FTHODO); + //check if FT assocciated, must be a FTCAL + if(_pcal!=-1) + return true; + return false; + + } + /////////////////////////////////////////////////////// + /// Get pointer to FT banks for this particle + /// This should be used directly to acess data + /// e.g. p->ft(FTCAL)->getEnergy(); + /// p->ft(FTHODO)->getEnergy(); + const ft_ptr region_ft::ft(ushort lay) const { + switch(lay){ + case clas12::FTCAL : + _ft->setIndex(_pcal);return _ft; + case clas12::FTHODO : + _ft->setIndex(_phod);return _ft; + } + _ft->setIndex(-1);return _ft; + } + + + +} diff --git a/Clas12Banks4/region_ft.h b/Clas12Banks4/region_ft.h new file mode 100644 index 0000000..939c506 --- /dev/null +++ b/Clas12Banks4/region_ft.h @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_ft.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_FT_H +#define REGION_FT_H + +#include "clas12defs.h" +#include "region_particle.h" +#include "forwardtagger.h" + + +namespace clas12 { + + + class region_ft : public region_particle { + + + public: + + region_ft(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + region_ft(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, + trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); + ~region_ft()=default; + + + bool sort() override; + + const ft_ptr ft(ushort lay) const final; + + + double getTime() final{ + _ft->setIndex(_pcal); + return _ft->getTime(); + } + double getPath() final; + + double getDetEnergy() final{ + _ft->setIndex(_pcal); + return _ft->getEnergy(); + } + + double getDeltaEnergy() final{ + _ft->setIndex(_phod); + return _ft->getEnergy(); + } + + short getSector() final{return 0;} + + private: + + // trck_ptr _track;//FT tracker ? + + short _pcal=-1; + short _phod=-1; + }; + using region_ft_ptr=std::shared_ptr; + +} + +#endif /* REGION_FT_H */ diff --git a/Clas12Banks4/region_particle.cpp b/Clas12Banks4/region_particle.cpp new file mode 100644 index 0000000..6528c98 --- /dev/null +++ b/Clas12Banks4/region_particle.cpp @@ -0,0 +1,97 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "region_particle.h" +#include + +namespace clas12 { + + region_particle::region_particle(par_ptr pars,covmat_ptr cm): + _parts(pars), + _covmat(cm) + { + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp): + _parts(pars), + _covmat(cm), + _ft(ftp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, scint_ptr scp, trck_ptr trp, traj_ptr trj): + _parts(pars), + _covmat(cm), + _scint(scp), + _trck(trp), + _traj(trj) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _traj(trj), + _cher(chp) + { + + } + region_particle::region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head): + _parts(pars), + _covmat(cm), + _cal(calp), + _scint(scp), + _trck(trp), + _traj(trj), + _cher(chp), + _ft(ftp), + _head(head) + { + + } + + float region_particle::getTheta() const{ + _parts->setEntry(_pentry); + float x=_parts->getPx(); + float y=_parts->getPy(); + float z=_parts->getPz(); + return x == 0.0 && y == 0.0 && z == 0.0 ? 0.0 + : atan2(sqrt(x*x+y*y),z); + } + float region_particle::getPhi() const{ + _parts->setEntry(_pentry); + float x=_parts->getPx(); + float y=_parts->getPy(); + return atan2(y,x); + } + float region_particle::getCalcMass() { + float p=getP(); + float t=getTime()-_head->getStartTime(); + float d=getPath()/100; + if(t==0) + return 0; + if(p==0) + return 0; + float mass= d/t/p/2.9979246e+08*1E9; + return mass; + } + float region_particle::getBeta() { + float t=getTime()-_head->getStartTime(); + float d=getPath()/100; + if(t==0) + return 0; + float beta= d/t/2.9979246e+08*1E9; + return beta; + } + float region_particle::getGamma() { + float beta=getBeta(); + float gamma= sqrt(1/(1-beta*beta)); + return gamma; + } + +} diff --git a/Clas12Banks4/region_particle.h b/Clas12Banks4/region_particle.h new file mode 100644 index 0000000..e1d3ef4 --- /dev/null +++ b/Clas12Banks4/region_particle.h @@ -0,0 +1,117 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: region_particle.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef REGION_PARTICLE_H +#define REGION_PARTICLE_H + +#include "clas12defs.h" +#include "particle.h" +#include "covmatrix.h" +#include "calorimeter.h" +#include "scintillator.h" +#include "tracker.h" +#include "traj.h" +#include "header.h" +#include "cherenkov.h" +#include "forwardtagger.h" + + +namespace clas12 { + + class region_particle { + + + public: + + region_particle(){}; + + region_particle(par_ptr pars,covmat_ptr cm); + //For region_ft + region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp); + //For region_cdet + region_particle(par_ptr pars,covmat_ptr cm, + scint_ptr scp, trck_ptr trp, traj_ptr trj); + //For region_fdet + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp); + //For all regions + region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp, + scint_ptr scp, trck_ptr trp, traj_ptr trj, cher_ptr chp, ft_ptr ftp,head_ptr head); + + virtual ~region_particle()=default; + + //////////////////////////////////////////////////////////// + /// derived classes must define there own sort + /// i.e. how the detector banks relate to that region + virtual bool sort(){ + _pentry=_parts->getEntry(); + //check for covarince matrix + _pcmat=_covmat->getIndex(_pentry); + return true; + } + + int getPid(){_parts->setEntry(_pentry);return _parts->getPid();} + + virtual double getTime()=0; + virtual double getPath()=0; + virtual double getDetEnergy()=0; + virtual double getDeltaEnergy()=0; + virtual short getSector() =0; + + const head_ptr head() const{return _head;}; + const par_ptr par() const{_parts->setEntry(_pentry);return _parts;}; + const covmat_ptr covmat() const{_covmat->setIndex(_pcmat);return _covmat;}; + virtual const cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;}; + virtual const scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;}; + virtual const trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;}; + virtual const traj_ptr traj(ushort det) const{_traj->setIndex(-1);return _traj;}; + virtual const cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;}; + virtual const ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;}; + + const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();}; + + + short getRegion() const {return _region;} + float getTheta() const; + float getPhi() const; + float getP(){_parts->setEntry(_pentry);return _parts->getP();} + float getCalcMass(); + float getBeta(); + float getGamma(); + + protected: + + par_ptr _parts; + covmat_ptr _covmat; + ft_ptr _ft; + cal_ptr _cal; + scint_ptr _scint; + trck_ptr _trck; + traj_ptr _traj; + cher_ptr _cher; + head_ptr _head; + + + //particle index + short _pentry=-1; + short _pcmat=-1; + short _region=-1; + + }; + //pointer "typedef" + using region_part_ptr=std::shared_ptr; + + +} + +#endif /* REGION_PARTICLE_H */ diff --git a/Clas12Banks4/scaler.cpp b/Clas12Banks4/scaler.cpp new file mode 100644 index 0000000..df4939f --- /dev/null +++ b/Clas12Banks4/scaler.cpp @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "scaler.h" + +namespace clas12 { + + + scaler::scaler(hipo::schema __schema): hipo::bank(__schema) { + + auto sch=getSchema(); + ch_order = sch.getEntryOrder("channel"); + sl_order = sch.getEntryOrder("slot"); + val_order = sch.getEntryOrder("value"); + hel_order = sch.getEntryOrder("helicity"); + + } + +} diff --git a/Clas12Banks4/scaler.h b/Clas12Banks4/scaler.h new file mode 100644 index 0000000..25971e8 --- /dev/null +++ b/Clas12Banks4/scaler.h @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: scaler.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef SCALER_H +#define SCALER_H + +#include "bank.h" +#include "vectors.h" +#include + +namespace clas12 { + + class scaler : public hipo::bank { + + + public: + + scaler(hipo::schema __schema); + + int getChannel(){ return getInt(ch_order,0); } + int getSlot(){ return getInt(sl_order,0); } + int getValue(){ return getInt(val_order,0); } + int getHelicity(){ return getInt(hel_order,0); } + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify(){ + //printf("particle class is read again\n"); + } + + private : + + int ch_order; + int sl_order; + int val_order; + int hel_order; + + + }; + + using scaler_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/scintillator.cpp b/Clas12Banks4/scintillator.cpp new file mode 100644 index 0000000..e8ad518 --- /dev/null +++ b/Clas12Banks4/scintillator.cpp @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "scintillator.h" + + +namespace clas12 { + + + scintillator::scintillator(hipo::schema __schema): clas12::particle_detector(__schema) { + + if(useItem("layer"))_layer_order = __schema.getEntryOrder("layer"); + if(useItem("energy"))_energy_order = __schema.getEntryOrder("energy"); + if(useItem("path"))_path_order = __schema.getEntryOrder("path"); + if(useItem("time"))_time_order = __schema.getEntryOrder("time"); + if(useItem("sector"))_sector_order = __schema.getEntryOrder("sector"); + if(useItem("status"))_status_order = __schema.getEntryOrder("status"); + if(useItem("x"))_x_order = __schema.getEntryOrder("x"); + if(useItem("y"))_y_order = __schema.getEntryOrder("y"); + if(useItem("z"))_z_order = __schema.getEntryOrder("z"); + if(useItem("hx"))_hx_order = __schema.getEntryOrder("hx"); + if(useItem("hy"))_hy_order = __schema.getEntryOrder("hy"); + if(useItem("hz"))_hz_order = __schema.getEntryOrder("hz"); + if(useItem("chi2"))_chi2_order = __schema.getEntryOrder("chi2"); + + } + + +} diff --git a/Clas12Banks4/scintillator.h b/Clas12Banks4/scintillator.h new file mode 100644 index 0000000..dab5f92 --- /dev/null +++ b/Clas12Banks4/scintillator.h @@ -0,0 +1,118 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: scintillator.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_SCINTILLATOR_H +#define CLAS12_SCINTILLATOR_H + +#include "particle_detector.h" + + +namespace clas12 { + + class scintillator : public particle_detector { + + + public: + + + scintillator()=default; + + scintillator(hipo::schema __schema); + + virtual ~scintillator()=default; + + int getLayer(int index) override{ + if(index>-1)return getInt(_layer_order,index); + return 0; + } + //getter funtions for items in scintillator bank + double getTime(){ + if(_index>-1)return getFloat(_time_order,_index); + return 0; + } + double getEnergy(){ + if(_index>-1)return getFloat(_energy_order,_index); + return 0; + } + double getPath(){ + if(_index>-1)return getFloat(_path_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + int getLayer() override{ + if(_index>-1)return getInt(_layer_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_x_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_y_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_z_order,_index); + return 0; + } + double getHX(){ + if(_index>-1)return getFloat(_hx_order,_index); + return 0; + } + double getHY(){ + if(_index>-1)return getFloat(_hy_order,_index); + return 0; + } + double getHZ(){ + if(_index>-1)return getFloat(_hz_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + + + + private: + + int _layer_order=-1; + int _energy_order=-1; + int _path_order=-1; + int _time_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + int _hx_order=-1; + int _hy_order=-1; + int _hz_order=-1; + int _chi2_order=-1; + + + + }; //class scintillator + + using scint_ptr=std::shared_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/tracker.cpp b/Clas12Banks4/tracker.cpp new file mode 100644 index 0000000..dd0f3f6 --- /dev/null +++ b/Clas12Banks4/tracker.cpp @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "tracker.h" + + +namespace clas12 { + + + tracker::tracker(hipo::schema __schema): clas12::particle_detector(__schema) { + + if(useItem("sector"))_sector_order = __schema.getEntryOrder("sector"); + if(useItem("status"))_status_order = __schema.getEntryOrder("status"); + if(useItem("px_nomm"))_pxnomm_order = __schema.getEntryOrder("px_nomm"); + if(useItem("py_nomm"))_pynomm_order = __schema.getEntryOrder("py_nomm"); + if(useItem("pz_nomm"))_pznomm_order = __schema.getEntryOrder("pz_nomm"); + if(useItem("vx_nomm"))_vxnomm_order = __schema.getEntryOrder("vx_nomm"); + if(useItem("vy_nomm"))_vynomm_order = __schema.getEntryOrder("vy_nomm"); + if(useItem("vz_nomm"))_vznomm_order = __schema.getEntryOrder("vz_nomm"); + if(useItem("NDF"))_NDF_order = __schema.getEntryOrder("NDF"); + if(useItem("NDF_nomm"))_NDFnomm_order = __schema.getEntryOrder("NDF_nomm"); + if(useItem("q"))_q_order = __schema.getEntryOrder("q"); + if(useItem("chi2"))_chi2_order = __schema.getEntryOrder("chi2"); + if(useItem("chi2_nomm"))_chi2nomm_order = __schema.getEntryOrder("chi2_nomm"); + + } + + +} diff --git a/Clas12Banks4/tracker.h b/Clas12Banks4/tracker.h new file mode 100644 index 0000000..0042ec6 --- /dev/null +++ b/Clas12Banks4/tracker.h @@ -0,0 +1,117 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: tracker.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_TRACKER_H +#define CLAS12_TRACKER_H + +#include "particle_detector.h" + + +namespace clas12 { + + class tracker : public particle_detector { + + + public: + + + tracker()=default; + + tracker(hipo::schema __schema); + + virtual ~tracker()=default; + + //getter funtions for items in tracker bank + int getNDF(){ + if(_index>-1)return getInt(_NDF_order,_index); + return 0; + } + int getNDFnomm(){ + if(_index>-1)return getInt(_NDFnomm_order,_index); + return 0; + } + int getSector(){ + if(_index>-1)return getInt(_sector_order,_index); + return 0; + } + int getStatus(){ + if(_index>-1)return getInt(_status_order,_index); + return 0; + } + double getPXnomm(){ + if(_index>-1)return getFloat(_pxnomm_order,_index); + return 0; + } + double getPYnomm(){ + if(_index>-1)return getFloat(_pynomm_order,_index); + return 0; + } + double getPZnomm(){ + if(_index>-1)return getFloat(_pznomm_order,_index); + return 0; + } + double getVXnomm(){ + if(_index>-1)return getFloat(_vxnomm_order,_index); + return 0; + } + double getVYnomm(){ + if(_index>-1)return getFloat(_vynomm_order,_index); + return 0; + } + double getVZnomm(){ + if(_index>-1)return getFloat(_vznomm_order,_index); + return 0; + } + int getCharge(){ + if(_index>-1)return getInt(_q_order,_index); + return 0; + } + double getChi2(){ + if(_index>-1)return getFloat(_chi2_order,_index); + return 0; + } + double getChi2nomm(){ + if(_index>-1)return getFloat(_chi2nomm_order,_index); + return 0; + } + double getChi2N(){ + auto N=getChi2nomm(); + if(N)return getChi2()/N; + return 0; + } + + private: + + int _NDF_order=-1; + int _NDFnomm_order=-1; + int _sector_order=-1; + int _status_order=-1; + int _pxnomm_order=-1; + int _pynomm_order=-1; + int _pznomm_order=-1; + int _vxnomm_order=-1; + int _vynomm_order=-1; + int _vznomm_order=-1; + int _q_order=-1; + int _chi2_order=-1; + int _chi2nomm_order=-1; + + + + }; //class tracker + + using trck_ptr=std::shared_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/traj.cpp b/Clas12Banks4/traj.cpp new file mode 100644 index 0000000..b920887 --- /dev/null +++ b/Clas12Banks4/traj.cpp @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "traj.h" + + +namespace clas12 { + + + traj::traj(hipo::schema __schema): clas12::particle_detector(__schema) { + + _cx_order = __schema.getEntryOrder("cx"); + _cy_order = __schema.getEntryOrder("cy"); + _cz_order = __schema.getEntryOrder("cz"); + _detector_id_order = __schema.getEntryOrder("detID"); + _index_order = __schema.getEntryOrder("index"); + _pathlength_order = __schema.getEntryOrder("pathlength"); + _pindex_order = __schema.getEntryOrder("pindex"); + _q_order = __schema.getEntryOrder("q"); + _x_order = __schema.getEntryOrder("x"); + _y_order = __schema.getEntryOrder("y"); + _z_order = __schema.getEntryOrder("z"); + + } + + +} diff --git a/Clas12Banks4/traj.h b/Clas12Banks4/traj.h new file mode 100644 index 0000000..c81481b --- /dev/null +++ b/Clas12Banks4/traj.h @@ -0,0 +1,103 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: traj.h + * Author: dglazier + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef CLAS12_TRAJ_H +#define CLAS12_TRAJ_H + +#include "particle_detector.h" + + +namespace clas12 { + + class traj : public particle_detector { + + + public: + + + traj()=default; + + traj(hipo::schema __schema); + + virtual ~traj()=default; + + //getter funtions for items in traj bank + double getCx(){ + if(_index>-1)return getFloat(_cx_order,_index); + return 0; + } + double getCy(){ + if(_index>-1)return getFloat(_cy_order,_index); + return 0; + } + double getCz(){ + if(_index>-1)return getFloat(_cz_order,_index); + return 0; + } + double getX(){ + if(_index>-1)return getFloat(_cx_order,_index); + return 0; + } + double getY(){ + if(_index>-1)return getFloat(_cy_order,_index); + return 0; + } + double getZ(){ + if(_index>-1)return getFloat(_cz_order,_index); + return 0; + } + short getDetID(){ + if(_index>-1)return getShort(_detector_id_order,_index); + return 0; + } + short getTrajIndex(){ + if(_index>-1)return getShort(_index_order,_index); + return 0; + } + short getPindex(){ + if(_index>-1)return getShort(_pindex_order,_index); + return 0; + } + double getPathLength(){ + if(_index>-1)return getFloat(_pathlength_order,_index); + return 0; + } + int8_t getQ(){ + if(_index>-1)return getByte(_pindex_order,_index); + return 0; + } + + private: + + int _cx_order=-1; + int _cy_order=-1; + int _cz_order=-1; + //int _detID_order=-1; + int _index_order=-1; + int _pathlength_order=-1; + int _pindex_order=-1; + int _q_order=-1; + int _x_order=-1; + int _y_order=-1; + int _z_order=-1; + + + + }; //class traj + + using traj_ptr=std::shared_ptr; + using traj_uptr=std::unique_ptr; + +}//namespace clas12 + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/vectors.cpp b/Clas12Banks4/vectors.cpp new file mode 100644 index 0000000..e37e029 --- /dev/null +++ b/Clas12Banks4/vectors.cpp @@ -0,0 +1,77 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "vectors.h" + + +namespace clas12 { + + void vector3::translate(double x, double y, double z){ + cX += x; cY += y; cZ += z; + } + + void vector3::rotateX(double angle) + { + double s = sin(angle); + double c = cos(angle); + double yy = cY; + cY = c*yy - s*cZ; + cZ = s*yy + c*cZ; + } + void vector3::rotateY(double angle) +{ + double s = sin(angle); + double c = cos(angle); + double zz = cZ; + cZ = c*zz - s*cX; + cX = s*zz + c*cX; +} +//------------------------------------------------------ +void vector3::rotateZ(double angle) +{ + double s = sin(angle); + double c = cos(angle); + double xx = cX; + cX = c*xx - s*cY; + cY = s*xx + c*cY; +} + + vector3 operator+(const vector3 &a, const vector3 &b) + { return vector3(a.x() + b.x(), + a.y() + b.y(), + a.z() + b.z()); + } + vector3 operator-(const vector3 &a, const vector3 &b) + { return vector3(a.x() - b.x(), + a.y() - b.y(), + a.z() - b.z()); + } + + const vector3 &vector3::operator=(const vector3 &vec) + { + this->setXYZ(vec.x(),vec.y(),vec.z()); + return *this; + } + vector3 operator*(double a, const vector3 &b) + { + return vector3(a*b.x(),a*b.y(),a*b.z()); + } + vector3 operator*(const vector3 &b,double a) + { + return vector3(a*b.x(),a*b.y(),a*b.z()); + } + + + + double vector4::m() + { + double ___m2 = m2(); + if(___m2<0) return -sqrt(-___m2); + return sqrt(___m2); + } + + +} diff --git a/Clas12Banks4/vectors.h b/Clas12Banks4/vectors.h new file mode 100644 index 0000000..e7e89e9 --- /dev/null +++ b/Clas12Banks4/vectors.h @@ -0,0 +1,133 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: vectors.h + * Author: gavalian + * + * Created on November 12, 2018, 10:24 AM + * This is a clone from data mining library + * implementations of physics vectors. Not + * all the methods have been ported, they + * will be in time. + */ + +#ifndef VECTORS_H +#define VECTORS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "bank.h" + + +namespace clas12 { + + class vector3 { + + private: + double cX; + double cY; + double cZ; + + public: + + vector3 (){} + vector3 (double x, double y, double z){ cX = x; cY = y; cZ = z;} + ~vector3 (){} + + void setXYZ(double x, double y, double z){cX=x;cY=y;cZ=z;} + + double x() const { return cX;} + double y() const { return cY;} + double z() const { return cZ;} + + void rotateX(double angle); + void rotateY(double angle); + void rotateZ(double angle); + void translate(double x, double y, double z); + + double mag() { return sqrt(mag2());} + double mag2(){ return (cX*cX + cY*cY + cZ*cZ);} + const vector3 &operator=(const vector3 &vec); + inline vector3 & operator += (const vector3 &); + inline vector3 & operator -= (const vector3 &); + }; + + vector3 operator+(const vector3 &a, const vector3 &b); + vector3 operator-(const vector3 &a, const vector3 &b); + vector3 operator*(double a, const vector3 &b); + vector3 operator*(const vector3 &b,double a); + + inline vector3& vector3::operator += (const vector3 & p) + { cX += p.cX; cY += p.cY; cZ += p.cZ; return *this; } + + inline vector3& vector3::operator -= (const vector3 & p) + { cX -= p.cX; cY -= p.cY; cZ -= p.cZ; return *this; } + + class vector4 { + private: + + vector3 fVect; + double fE; + + public: + + vector4 () {fVect.setXYZ(0.0,0.0, 0.0); fE = 0.0;} + vector4 (double _px, double _py, double _pz, double _e){ + fVect.setXYZ(_px,_py, _pz); fE = _e; + } + + vector4 (vector3 v, double energy) { fVect = v; fE = energy;}; + + ~vector4(){} + + void setXYZM(double _px, double _py, double _pz, double _m){ + fVect.setXYZ(_px,_py, _pz); + fE = sqrt(fVect.mag2()+_m*_m); + } + + double m2(){ return (fE*fE - fVect.mag2());} + double m(); + double e() const {return fE;}; + double t() const {return fE;}; + vector3 vect() const {return fVect;}; + + inline vector4 & operator = (const vector4 &); + inline vector4 operator + (const vector4 &) const; + inline vector4 operator - (const vector4 &) const; + inline vector4 & operator += (const vector4 &); + inline vector4 & operator -= (const vector4 &); +}; + + +inline vector4 &vector4::operator = (const vector4 & q) +{ + fVect = q.vect(); + fE = q.t(); + return *this; +} + +inline vector4 vector4::operator + (const vector4 & q) const { + return vector4(fVect+q.vect(), fE+q.t()); +} +inline vector4 &vector4::operator += (const vector4 & q) { fVect += q.vect(); fE += q.t() +; return *this; +} +inline vector4 vector4::operator - (const vector4 & q) const { +return vector4(fVect-q.vect(), fE-q.t()); +} +inline vector4 &vector4::operator -= (const vector4 & q) { + fVect -= q.vect(); fE -= q.t(); return *this; +} +} + +#endif /* UTILS_H */ diff --git a/Clas12Banks4/vtp.cpp b/Clas12Banks4/vtp.cpp new file mode 100644 index 0000000..bfffe61 --- /dev/null +++ b/Clas12Banks4/vtp.cpp @@ -0,0 +1,85 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "vtp.h" + +namespace clas12 { + + + vtp::vtp(hipo::schema __schema): hipo::bank(__schema) { + + auto sch=getSchema(); + cr_order = sch.getEntryOrder("crate"); + wo_order = sch.getEntryOrder("word"); + } + + long vtp::makeVTPTriggers() { + + _VTPBitSet.reset(); + int nVTPTriggers = 0; + + int nrows1 = 0; + + int crate= 0; + int nwords= 0; + int word1VTP, word2VTP, word3VTP= 0; + const int trig2VTP=100; + + int Nentries=getSize(); + int loop1=0; + while (loop1> 27) & 0x1F) == 0x1D) { + word2VTP = getWord(loop1++); + decodeVTPTrigger(word1VTP, word2VTP); + } + } + } + else { + loop1++; + } + } + return _VTPBitSet.to_ulong(); + } + + void vtp::decodeVTPTrigger(int word1vtp, int word2vtp) { + int time, trgL, trgH; + time = (word1vtp >> 16) & 0x7FF; // 11 bits time + trgL = (word1vtp & 0xFFFF); // 16 bits + trgH = (word2vtp & 0xFFFF); // 16 bits + long pattern=(trgL&0xFFFF)|((trgH<<16)&0xFFFF0000); + addVTPTriggerToEvent(pattern); + } + + void vtp::addVTPTriggerToEvent(long pattern){ + //Add this pattern to this event + //Eaxh pattern only contains 1 sector + //here we make a new bit pattern containing all + //set the bits that are =1 + const int bitsize= _VTPBitSet.size(); + //cout<<"pattern "< +#include + +namespace clas12 { + + class vtp : public hipo::bank { + + + public: + vtp(hipo::schema __schema); + + int getCrate(int index){ return getInt(cr_order,index); } + int getWord(int index){ return getInt(wo_order,index); } + + /** + * This is virtual method from hipo::bank it will be called + * every time a bank is read in the reader. Can be used to sort + * particles and or map particles by pid or type (i.e. charge) + */ + void notify(){ + //printf("particle class is read again\n"); + } + long makeVTPTriggers(); + void decodeVTPTrigger(int word1vtp, int word2vtp); + void addVTPTriggerToEvent(long pattern); + private : + + int cr_order; + int wo_order; + + std::bitset<32> _VTPBitSet; + }; + + using vtp_ptr=std::shared_ptr; + +} + +#endif /* UTILS_H */ diff --git a/Hipo4/Makefile b/Hipo4/Makefile new file mode 100644 index 0000000..11821bc --- /dev/null +++ b/Hipo4/Makefile @@ -0,0 +1,30 @@ + +SOURCES := $(wildcard *.cpp) +OBJECTS := $(SOURCES:.cpp=.o) + +LIBDIR = ../lib +BINDIR = ../bin + +LZ4INCLUDES := -I../Lz4/lib/ + +CXXFLAGS = -std=c++11 + +libhipo: checkdirs $(OBJECTS) + ar cr ../lib/libhipo4.a $(OBJECTS) +# $(CXX) -shared -fPIC -o ../lib/libhipo.so $(OBJECTS) -llz4 + + +show: + @echo $(OBJECTS) + +checkdirs: $(LIBDIR) + +$(LIBDIR): + @mkdir -p $(LIBDIR) + +clean: + @echo 'Removing the build files....' + @rm -rf *~ *.o + +%.o: %.cpp + $(CXX) -fPIC -c $< -O2 -D__LZ4__ $(CXXFLAGS) $(LZ4INCLUDES) diff --git a/Hipo4/bank.cpp b/Hipo4/bank.cpp new file mode 100644 index 0000000..8a59843 --- /dev/null +++ b/Hipo4/bank.cpp @@ -0,0 +1,228 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "bank.h" +#include "utils.h" + +namespace hipo { + //============================================================== + // Definition of class structure, this will class will be extended + // to represent different objects that will be appended to the event + //============================================================== + + bool structure::allocate(int size){ + if(structureBuffer.size()(structureAddress) = (uint16_t) __group; + *reinterpret_cast(&structureAddress[2]) = (uint8_t) __item; + *reinterpret_cast(&structureAddress[3]) = (uint8_t) __type; + *reinterpret_cast(&structureAddress[4]) = __size; + } + /** + * returns the size of the structure + */ + int structure::getSize(){ + int size = *reinterpret_cast(structureAddress+4); + return size; + } + // return the type of the structure + int structure::getType(){ + int type = (int) (*reinterpret_cast(structureAddress+3)); + return type; + } + // returns the group number of the object + int structure::getGroup(){ + int group = (int) (*reinterpret_cast(structureAddress)); + return group; + } + // returns the item number of the structure + int structure::getItem(){ + int item = (int) (*reinterpret_cast(structureAddress+2)); + return item; + } + void structure::init(const char *buffer, int size){ + allocate(size); + memcpy(&structureBuffer[0],buffer,size); + structureAddress = &structureBuffer[0]; + } + + void structure::show(){ + printf("structure : [%5d,%5d] type = %4d, length = %6d\n", + getGroup(),getItem(),getType(),getSize()); + } + + std::string structure::getStringAt(int index){ + int length = getSize(); + char *string_ch = (char *) malloc(length+1); + std::memcpy(string_ch, &structureBuffer[8],length); + string_ch[length] = '\0'; + std::string result = string_ch; + free(string_ch); + return result; + } + + const char *structure::getAddress(){ + return structureAddress; + } + //==================================================================== + // END of structure class + //==================================================================== +bank::bank(){ + +} + +bank::~bank(){ + +} + +void bank::notify(){ + int size = bankSchema.getRowLength(); + bankRows = getSize()/size; + //printf("---> bank notify called structure size = %8d (size = %5d) rows = %d\n", + // getSize(),size, bankRows); +} + +int bank::getInt(int item, int index){ + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + case 2: return (int) getShortAt(offset); + case 3: return getIntAt(offset); + default: printf("---> error : requested INT for [%s] type = %d\n", + bankSchema.getEntryName(item).c_str(),type); break; + } + return 0; +} +int bank::getShort(int item, int index){ + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + case 2: return (int) getShortAt(offset); + default: printf("---> error : requested SHORT for [%s] type = %d\n", + bankSchema.getEntryName(item).c_str(),type); break; + } + return 0; +} +int bank::getByte(int item, int index){ + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + default: printf("---> error : requested BYTE for [%s] type = %d\n", + bankSchema.getEntryName(item).c_str(),type); break; + } + return 0; +} +float bank::getFloat(int item, int index){ + if(bankSchema.getEntryType(item)==4){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getFloatAt(offset); + } + return 0.0; +} +double bank::getDouble(int item, int index){ + if(bankSchema.getEntryType(item)==5){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getDoubleAt(offset); + } + return 0.0; +} + +long bank::getLong(int item, int index){ + if(bankSchema.getEntryType(item)==8){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getLongAt(offset); + } + return 0; +} + +int bank::getInt(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + case 2: return (int) getShortAt(offset); + case 3: return getIntAt(offset); + default: printf("---> error : requested INT for [%s] type = %d\n",name,type); break; + } + return 0; +} + +int bank::getShort(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + case 2: return (int) getShortAt(offset); + default: printf("---> error : requested SHORT for [%s] type = %d\n", + bankSchema.getEntryName(item).c_str(),type); break; + } + return 0; +} +int bank::getByte(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + int type = bankSchema.getEntryType(item); + int offset = bankSchema.getOffset(item, index, bankRows); + switch(type){ + case 1: return (int) getByteAt(offset); + default: printf("---> error : requested BYTE for [%s] type = %d\n", + bankSchema.getEntryName(item).c_str(),type); break; + } + return 0; +} + +float bank::getFloat(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + if(bankSchema.getEntryType(item)==4){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getFloatAt(offset); + } + return 0.0; +} + +double bank::getDouble(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + if(bankSchema.getEntryType(item)==5){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getDoubleAt(offset); + } + return 0.0; +} + +long bank::getLong(const char *name, int index){ + int item = bankSchema.getEntryOrder(name); + if(bankSchema.getEntryType(item)==8){ + int offset = bankSchema.getOffset(item, index, bankRows); + return getLongAt(offset); + } + return 0; +} +void bank::show(){ + for(int i = 0; i < bankSchema.getEntries(); i++){ + printf("%14d : ", i); + for(int k = 0; k < bankRows; k++){ + if(bankSchema.getEntryType(i) < 4){ + printf("%8d ",getInt(i,k)); + } else if(bankSchema.getEntryType(i)==4) { + printf("%8.5f ",getFloat(i,k)); + } + } + printf("\n"); + } +} + + +} diff --git a/Hipo4/bank.h b/Hipo4/bank.h new file mode 100644 index 0000000..f205fc6 --- /dev/null +++ b/Hipo4/bank.h @@ -0,0 +1,141 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: bank.h + * Author: gavalian + * + * Created on April 12, 2017, 10:14 AM + */ + +#ifndef HIPO_BANK_H +#define HIPO_BANK_H +#include +#include +#include +#include +#include +#include +#include +#include "dictionary.h" + +namespace hipo { + + class structure { + + private: + + std::vector structureBuffer; + char *structureAddress; + void setAddress(const char *address); + + protected: + void initStructureBySize(int __group, int __item, int __type, int __size); + std::vector &getStructureBuffer(){ return structureBuffer;} + int getStructureBufferSize(){ return 8+getSize();} + public: + + structure(){ structureAddress = NULL;} + structure(int size){ allocate(size);} + + virtual ~structure(){} + bool allocate(int size); + int getSize(); + int getType(); + int getGroup(); + int getItem(); + void init(const char *buffer, int size); + const char *getAddress(); + virtual void show(); + + int getIntAt ( int index) { + return *reinterpret_cast(&structureAddress[index+8]); + } + int16_t getShortAt ( int index){ + return *reinterpret_cast(&structureAddress[index+8]); + } + int8_t getByteAt ( int index){ + return *reinterpret_cast(&structureAddress[index+8]); + } + float getFloatAt ( int index){ + return *reinterpret_cast(&structureAddress[index+8]); + } + double getDoubleAt( int index){ + return *reinterpret_cast(&structureAddress[index+8]); + } + long getLongAt ( int index){ + return *reinterpret_cast(&structureAddress[index+8]); + } + + std::string getStringAt(int index); + + + virtual void notify(){} + friend class event; + }; + + //typedef std::auto_ptr node_pointer; + + class bank : public hipo::structure { + + private: + + hipo::schema bankSchema; + int bankRows; + + protected: + void setBankRows(int rows){ bankRows = rows;} + + public: + + bank(); + // constructor initializes the nodes in the bank + // and they will be filled automatically by reader.next() + // method. + bank(hipo::schema __schema){ + bankSchema = __schema; + bankRows = -1; + } + + bank(hipo::schema __schema, int __rows){ + bankSchema = __schema; + bankRows = __rows; + int size = bankSchema.getSizeForRows(__rows); + initStructureBySize(bankSchema.getGroup(),bankSchema.getItem(), 11, size); + } + + ~bank(); + // display the content of the bank + //void show(); + + hipo::schema &getSchema() { return bankSchema;} + + int getRows(){ return bankRows;} + + int getInt(int item, int index); + int getShort(int item, int index); + int getByte(int item, int index); + float getFloat(int item, int index); + double getDouble(int item, int index); + long getLong(int item, int index); + + int getInt(const char *name, int index); + int getShort(const char *name, int index); + int getByte(const char *name, int index); + float getFloat(const char *name, int index); + double getDouble(const char *name, int index); + long getLong(const char *name, int index); + + void show(); + //virtual void notify(){ }; + + virtual void notify(); + }; + +} + + +#endif /* EVENT_H */ diff --git a/Hipo4/dictionary.cpp b/Hipo4/dictionary.cpp new file mode 100644 index 0000000..f88182b --- /dev/null +++ b/Hipo4/dictionary.cpp @@ -0,0 +1,131 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "dictionary.h" +#include "utils.h" +#include + +namespace hipo { + + void schema::parse(std::string schString){ + std::vector entries; + std::vector entry; + hipo::utils::tokenize(schString, entries, ","); + int offset = 0; + for(int i = 0; i < entries.size(); i++){ + entry.clear(); + hipo::utils::tokenize(entries[i],entry, "/"); + schemaEntry_t e; + e.name = entry[0]; + e.type = entry[1]; + e.typeId = getTypeByString(e.type); + e.typeSize = getTypeSize(e.typeId); + e.offset = offset; + offset += e.typeSize; + schemaEntries.push_back(e); + schemaEntriesMap[e.name] = i; + } + } + + int schema::getTypeByString(std::string &typeName){ + if(typeName=="B"){ + return 1; + } else if(typeName=="S") { + return 2; + } else if(typeName=="I") { + return 3; + } else if(typeName=="F") { + return 4; + } else if(typeName=="D") { + return 5; + } else if(typeName=="L") { + return 8; + } + return -1; + } + + int schema::getTypeSize(int id){ + switch(id){ + case 1: return 1; + case 2: return 2; + case 3: return 4; + case 4: return 4; + case 5: return 8; + case 8: return 8; + default: return 0; + } + return 0; + } + + void schema::show(){ + printf("schema : %14s , group = %6d, item = %3d\n", + schemaName.c_str(),groupid,itemid); + for(int i = 0; i < schemaEntries.size(); i++){ + printf("%16s : (%3s) %5d %5d , offset = %3d\n", + schemaEntries[i].name.c_str(),schemaEntries[i].type.c_str(), + schemaEntries[i].typeId,schemaEntries[i].typeSize, schemaEntries[i].offset + ); + } + } + + int schema::getOffset(int item, int order, int rows){ + int offset = rows*schemaEntries[item].offset + order*schemaEntries[item].typeSize; + return offset; + } + int schema::getOffset(const char *name, int order, int rows){ + int item = schemaEntriesMap[name]; + return getOffset(item,order,rows); + } + + int schema::getEntryOrder(const char *name){ + return schemaEntriesMap[name]; + } + int schema::getSizeForRows(int rows){ + int nentries = schemaEntries.size(); + int offset = getOffset(nentries-1,rows-1,rows) + schemaEntries[nentries-1].typeSize; + return offset; + } + + int schema::getRowLength(){ + int nentries = schemaEntries.size(); + int size = schemaEntries[nentries-1].offset + schemaEntries[nentries-1].typeSize; + return size; + } + + //============================================= + // Implementation of dictionary class + //============================================= + std::vector dictionary::getSchemaList(){ + std::map::iterator it; + std::vector vec; + for ( it = factory.begin(); it != factory.end(); it++ ){ + vec.push_back(it->first); + } + return vec; + } + + bool dictionary::parse(const char *schemaString){ + std::vector tokens; + std::string schemahead = hipo::utils::substring(schemaString,"{","}",0); + hipo::utils::tokenize(schemahead, tokens, "/"); + int group = std::atoi(tokens[1].c_str()); + int item = std::atoi(tokens[2].c_str()); + hipo::schema schema (tokens[0].c_str(),group,item); + std::string schemabody = hipo::utils::substring(schemaString,"{","}",1); + schema.parse(schemabody.c_str()); + addSchema(schema); + return true; + } + + void dictionary::show(){ + std::vector list = getSchemaList(); + for(int i = 0; i < list.size(); i++){ + schema sc = getSchema(list[i].c_str()); + printf("%24s : %5d %5d %5d\n", sc.getName().c_str(), + sc.getGroup(), sc.getItem(),sc.getEntries()); + } + } +} diff --git a/Hipo4/dictionary.h b/Hipo4/dictionary.h new file mode 100644 index 0000000..4f01717 --- /dev/null +++ b/Hipo4/dictionary.h @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: dictionary.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef DICTIONARY_H +#define DICTIONARY_H + +#include +#include +#include +#include +#include +#include + + +//#include "reader.h" + +namespace hipo { + + typedef struct { + std::string name; + std::string type; + int typeId; + int typeSize; + int offset; + } schemaEntry_t; + +class schema { + private: + + std::map schemaEntriesMap; + std::vector schemaEntries; + + int groupid; + int itemid; + int rowLength; + std::string schemaName; + + + int getTypeSize(int id); + int getTypeByString(std::string &typeName); + + public: + + schema(){ groupid = 0; itemid = 0; rowLength = 0;} + schema(const char *name, int __group,int __item){ + schemaName = name; groupid = __group; itemid = __item; + } + schema(const schema &s) { + schemaName = s.schemaName; + schemaEntries = s.schemaEntries; + schemaEntriesMap = s.schemaEntriesMap; + groupid = s.groupid; + itemid = s.itemid; + } + + virtual ~schema(){} + + void parse(std::string schString); + std::string getName(){ return schemaName;} + int getGroup(){ return groupid;} + int getItem(){ return itemid;} + int getSizeForRows(int rows); + int getRowLength(); + int getEntryOrder(const char *name); + int getOffset(int item, int order, int rows); + int getOffset(const char *name, int order, int rows); + int getEntryType(int item){ return schemaEntries[item].typeId;} + std::string getEntryName(int item) { return schemaEntries[item].name;} + int getEntries(){ return schemaEntries.size();} + void show(); + + + void operator = (const schema &D ) { + schemaName = D.schemaName; + groupid = D.groupid; + itemid = D.itemid; + schemaEntries = D.schemaEntries; + schemaEntriesMap = D.schemaEntriesMap; + } +}; + + class dictionary { + private: + std::map factory; + public: + dictionary(){}; + virtual ~dictionary(){}; + + std::vector getSchemaList(); + void addSchema(schema sc){ factory[sc.getName()] = sc;} + bool hasSchema(const char *name) { return (factory.count(name)!=0);} + schema &getSchema(const char *name){ return factory[name];} + bool parse(const char *schemaString); + void show(); + }; + +} + +#endif /* NODE_H */ diff --git a/Hipo4/event.cpp b/Hipo4/event.cpp new file mode 100644 index 0000000..1137666 --- /dev/null +++ b/Hipo4/event.cpp @@ -0,0 +1,116 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "event.h" + +namespace hipo { + + + event::event(){ + #if __cplusplus > 199711L + printf("\n*****>>>>> compiled with c++11 support.\n"); + #endif + // default allocation size for the event is 20 Kb + // + dataBuffer.resize(20*1024); + reset(); + //printf("creating event class.....\n"); + //hipo::node *type = new hipo::node(); + //nodes.push_back(type); + } + + event::event(int size){ + dataBuffer.resize(size); + reset(); + } + + event::~event(){ + + } + + void event::getStructure(hipo::bank &b){ + getStructure(b,b.getSchema().getGroup(),b.getSchema().getItem()); + } + + void event::getStructure(hipo::structure &str, int group, int item){ + std::pair index = getStructurePosition(group,item); + if(index.first>0){ + str.init(&dataBuffer[index.first], index.second + 8); + str.notify(); + } else { + str.initStructureBySize(group,item,1,0); + //printf("*** error *** : structure (%5d,%5d) does not exist\n", group,item); + } + } + + void event::addStructure(hipo::structure &str){ + int str_size = str.getStructureBufferSize(); + int evt_size = getSize(); + memcpy(&dataBuffer[evt_size], &str.getStructureBuffer()[0],str_size); + *(reinterpret_cast(&dataBuffer[4])) = (evt_size + str_size); + } + + void event::init(std::vector &buffer){ + dataBuffer.resize(buffer.size()); + std::memcpy(&dataBuffer[0],&buffer[0],buffer.size()); + } + + std::pair event::getStructurePosition(int group, int item){ + int position = 16; + int eventSize = *(reinterpret_cast(&dataBuffer[4])); + while(position+8(&dataBuffer[position])); + uint8_t iid = *(reinterpret_cast(&dataBuffer[position+2])); + uint8_t type = *(reinterpret_cast(&dataBuffer[position+3])); + int length = *(reinterpret_cast(&dataBuffer[position+4])); + //printf("group = %4d , item = %4d\n",(unsigned int) gid, (unsigned int) iid); + if(gid==group&&iid==item) return std::make_pair(position,length); + position += (length + 8); + } + return std::make_pair(-1,0); + } + + void event::init(const char *buffer, int size){ + if(dataBuffer.size()<=size){ + dataBuffer.resize(size); + } + std::memcpy(&dataBuffer[0],buffer,size); + *(reinterpret_cast(&dataBuffer[4])) = size; + } + + int event::getSize(){ + return *(reinterpret_cast(&dataBuffer[4])); + } + void event::reset(){ + dataBuffer[0] = 'E'; dataBuffer[1] = 'V'; + dataBuffer[2] = 'N'; dataBuffer[3] = 'T'; + *(reinterpret_cast(&dataBuffer[ 4])) = 16; + *(reinterpret_cast(&dataBuffer[ 8])) = 0; + *(reinterpret_cast(&dataBuffer[12])) = 0; + } + std::vector &event::getEventBuffer(){ return dataBuffer;} + /* + template node event::getNode(){ + node en; + en.setLength(4); + en.setAddress(NULL); + } */ + void event::show(){ + printf(" EVENT SIZE = %d\n",getSize()); + int position = 16; + int eventSize = *(reinterpret_cast(&dataBuffer[4])); + while(position+8(&dataBuffer[position])); + uint8_t iid = *(reinterpret_cast(&dataBuffer[position+2])); + uint8_t type = *(reinterpret_cast(&dataBuffer[position+3])); + int length = *(reinterpret_cast(&dataBuffer[position+4])); + //printf("group = %4d , item = %4d\n",(unsigned int) gid, (unsigned int) iid); + //if(gid==group&&iid==item) return std::make_pair(position,length); + printf("%12s %9d %4d %12d %12d\n"," ",gid,iid,type,length); + position += (length + 8); + } + } +} diff --git a/Hipo4/event.h b/Hipo4/event.h new file mode 100644 index 0000000..cbb28af --- /dev/null +++ b/Hipo4/event.h @@ -0,0 +1,85 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: event.h + * Author: gavalian + * + * Created on April 12, 2017, 10:14 AM + */ + +#ifndef HIPO_EVENT_H +#define HIPO_EVENT_H + +#include +#include +#include +#include +#include +#include +#include +#include "bank.h" + +// if the library is compiled with C++11 +// support we will use unordered map which +// is faster than standard map +#if __cplusplus > 199711L +#include +#endif + + +namespace hipo { + + //typedef std::auto_ptr node_pointer; + + + class event { + + private: + + std::vector dataBuffer; + + public: + + event(); + event(int size); + virtual ~event(); + + void show(); + void init(std::vector &buffer); + void init(const char *buffer, int size); + void getStructure(hipo::structure &str, int group, int item); + void getStructure(hipo::bank &b); + void addStructure(hipo::structure &str); + + std::pair getStructurePosition(int group, int item); + std::vector &getEventBuffer(); + int getSize(); + void reset(); + }; + /* + template node event::getNode(){ + node en; + en.setLength(4); + en.setAddress(NULL); + return en; + } */ + +} +/* +namespace hipo { + + template hipo::node *event::getBranch(int group, int item){ + int size = nodes.size(); + int key = ((0x00000000|group)<<16) | ( (0x00000000|item)<<8); + registeredNodes[key] = size; + hipo::node *type = new hipo::node(group,item); + nodes.push_back(type); + return type; + } +}*/ + +#endif /* EVENT_H */ diff --git a/Hipo4/hipoexceptions.h b/Hipo4/hipoexceptions.h new file mode 100644 index 0000000..75dfb43 --- /dev/null +++ b/Hipo4/hipoexceptions.h @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hipoexceptions.h + * Author: gavalian + * + * Created on April 11, 2017, 2:06 PM + */ + +#ifndef HIPOEXCEPTIONS_H +#define HIPOEXCEPTIONS_H + +#include + +class HipoWrongFile : public std::exception { + virtual const char* what() const throw(){ + return "exception: wrong Hipo File format."; + } +}; + +class HipoRecordError : public std::exception { + virtual const char* what() const throw(){ + return "exception: error parsing record"; + } +}; + + +#endif /* HIPOEXCEPTIONS_H */ + diff --git a/Hipo4/reader.cpp b/Hipo4/reader.cpp new file mode 100644 index 0000000..e9c0fc7 --- /dev/null +++ b/Hipo4/reader.cpp @@ -0,0 +1,275 @@ +/* + * This sowftware was developed at Jefferson National Laboratory. + * (c) 2017. + */ + +#include "reader.h" +#include "hipoexceptions.h" +#include "record.h" + +#include +/** + * HIPO namespace is used for the classes that read write + * files and records. + */ +namespace hipo { + /** + * The constructor for reader, printWarning routine + * will printout a warning message if the library + * was not compiled with compression libraries LZ4 or GZIP + */ + reader::reader(){ + printWarning(); + hipoutils.printLogo(); + } + + /** + * Default destructor. Does nothing + */ + reader::~reader(){ + if(inputStream.is_open()==true){ + inputStream.close(); + } + } + /** + * Open file, if file stream is open, it is closed first. + * At open time verification of file structure is performed. + * If the signature does not match EVIO/HIPO template, the + * file will be closed and warning message is printed. + */ + void reader::open(const char *filename){ + + if(inputStream.is_open()==true){ + inputStream.close(); + } + + inputStream.open(filename, std::ios::binary); + inputStream.seekg(0,std::ios_base::end); + inputStreamSize = inputStream.tellg(); + inputStream.seekg(0,std::ios_base::beg); + if(inputStream.is_open()==false){ + printf("[ERROR] something went wrong with openning file : %s\n", + filename); + return; + } + readHeader(); + readIndex(); +} + +/** + * Reads the file header. The endiannes is determined for bytes + * swap. The header structure will be filled with file parameters. + */ + void reader::readHeader(){ + + std::vector headerBuffer; + headerBuffer.resize(80); + inputStream.read(&headerBuffer[0],80); + + header.uniqueid = *(reinterpret_cast(&headerBuffer[0])); + header.filenumber = *(reinterpret_cast(&headerBuffer[4])); + header.headerLength = *(reinterpret_cast(&headerBuffer[8])); + header.recordCount = *(reinterpret_cast(&headerBuffer[12])); + + header.indexArrayLength = *(reinterpret_cast(&headerBuffer[16])); + int word_8 = *(reinterpret_cast(&headerBuffer[20])); + + header.userHeaderLength = *(reinterpret_cast(&headerBuffer[24])); + header.magicNumber = *(reinterpret_cast(&headerBuffer[28])); + header.userRegister = *(reinterpret_cast(&headerBuffer[32])); + header.trailerPosition = *(reinterpret_cast(&headerBuffer[40])); + // If magic word is reversed, then the file was written in BIG_ENDIAN + // format, the bytes have to be swapped + if(header.magicNumber==0x0001dac0){ + printf(" THIS FILE IS BIG ENDIAN: SWAPPING BYTES\n"); + header.uniqueid = __builtin_bswap32(header.uniqueid); + header.filenumber = __builtin_bswap32(header.filenumber); + header.headerLength = __builtin_bswap32(header.headerLength); + header.recordCount = __builtin_bswap32(header.recordCount); + header.userHeaderLength = __builtin_bswap32(header.userHeaderLength); + header.indexArrayLength = __builtin_bswap32(header.indexArrayLength); + word_8 = __builtin_bswap32(word_8); + header.userRegister = __builtin_bswap64(header.userRegister); + header.trailerPosition = __builtin_bswap64(header.trailerPosition); + } + + header.version = word_8&0x000000FF; + header.bitInfo = (word_8>>8)&0x00FFFFFF; + header.firstRecordPosition = 4*header.headerLength + header.userHeaderLength; + printf("----------------------------------------\n"); + printf("**** reader:: header version : %d \n",header.version); + printf("**** reader:: header length : %d \n",header.headerLength*4); + printf("**** reader:: first record pos : %lu\n",header.firstRecordPosition); + printf("**** reader:: trailer position : %lu\n",header.trailerPosition); + printf("**** reader:: file size : %lu\n",inputStreamSize); + printf("----------------------------------------\n"); + //int *signature = reinterpret_cast(&headerBuffer[0]); + //printf("signature = %X\n",(unsigned int) *signature); + //std::cout << "signature = " << std::ios::hex << (*signature) << '\n'; +} + +void reader::readIndex(){ + inputRecord.readRecord(inputStream,header.trailerPosition,0); + printf("*** reader:: trailer record event count : %d\n",inputRecord.getEventCount()); + hipo::event event; + inputRecord.readHipoEvent(event,0); + // event.show(); + hipo::structure base; + event.getStructure(base,32111,1); + //base.show(); + + int rows = base.getSize()/32; + + printf(" number of rows = %d\n",rows); + for(int i = 0; i < rows; i++){ + long position = base.getLongAt( i*8); + int length = base.getIntAt ( rows*8 + i*4); + int entries = base.getIntAt ( rows*12 + i*4); + long uid1 = base.getLongAt( rows*16 + i*8); + long uid2 = base.getLongAt( rows*24 + i*8); + // printf("record # %4d POSITION = %12lu , LENGTH = %12d , ENTRIES = %6d , UID = %12lu %12lu\n",i,position,length,entries, uid1,uid2); + readerEventIndex.addSize(entries); + readerEventIndex.addPosition(position); + } + readerEventIndex.rewind(); +} + +bool reader::hasNext(){ return readerEventIndex.canAdvance();} + +bool reader::next(hipo::event &dataevent){ + int recordNumber = readerEventIndex.getRecordNumber(); + readerEventIndex.advance(); + int recordToBeRead = readerEventIndex.getRecordNumber(); + if(recordToBeRead!=recordNumber){ + long position = readerEventIndex.getPosition(recordToBeRead); + inputRecord.readRecord(inputStream,position,0); + /*printf(" record changed from %d to %d at event %d total event # %d\n", + recordNumber, recordToBeRead,readerEventIndex.getEventNumber(), + readerEventIndex.getMaxEvents());*/ + } + int eventNumberInRecord = readerEventIndex.getRecordEventNumber(); + inputRecord.readHipoEvent(dataevent,eventNumberInRecord); + return true; +} + +void reader::read(hipo::event &dataevent){ + int eventNumberInRecord = readerEventIndex.getRecordEventNumber(); + inputRecord.readHipoEvent(dataevent,eventNumberInRecord); +} + +void reader::readDictionary(hipo::dictionary &dict){ + long position = header.headerLength*4; + hipo::record dictRecord; + dictRecord.readRecord(inputStream,position,0); + int nevents = dictRecord.getEventCount(); + printf(" reading record at position %8lu, number of entries = %5d\n", + position,dictRecord.getEventCount()); + hipo::structure schemaStructure; + hipo::event event; + for(int i = 0; i < nevents; i++){ + dictRecord.readHipoEvent(event,i); + event.getStructure(schemaStructure,120,2); + // printf("schema : %s\n",schemaStructure.getStringAt(0).c_str()); + dict.parse(schemaStructure.getStringAt(0).c_str()); + } +} + +bool reader::next(){ + if(readerEventIndex.canAdvance()==false) return false; + int recordNumber = readerEventIndex.getRecordNumber(); + readerEventIndex.advance(); + int recordToBeRead = readerEventIndex.getRecordNumber(); + if(recordToBeRead!=recordNumber){ + long position = readerEventIndex.getPosition(recordToBeRead); + inputRecord.readRecord(inputStream,position,0); + /*printf(" record changed from %d to %d at event %d total event # %d\n", + recordNumber, recordToBeRead,readerEventIndex.getEventNumber(), + readerEventIndex.getMaxEvents());*/ + } + return true; +} + bool reader::loadRecord(int irec){ + + long position = readerEventIndex.getPosition(irec); + inputRecord.readRecord(inputStream,position,0); + return readerEventIndex.loadRecord(irec); + } + bool reader::nextInRecord(){ + if(readerEventIndex.canAdvanceInRecord()==false) return false; + readerEventIndex.advance(); + return true; + } + +void reader::printWarning(){ + // #ifndef __LZ4__ + // std::cout << "******************************************************" << std::endl; + // std::cout << "* WARNING: *" << std::endl; + // std::cout << "* This library war compiled without LZ4 support. *" << std::endl; + // std::cout << "* Reading and writing compressed buffers will not *" << std::endl; + // std::cout << "* work. However un-compressed file I/O will work. *" << std::endl; + // std::cout << "******************************************************" << std::endl; + // #endif + } +} + + +namespace hipo { + + void readerIndex::addSize(int size){ + if(recordEvents.size()==0){ + recordEvents.push_back(0); + recordEvents.push_back(size); + } else { + int cz = recordEvents[recordEvents.size()-1] + size; + recordEvents.push_back(cz); + } + } + + bool readerIndex::canAdvance(){ + return (currentEvent(int)recordEvents.size()) + return false; + + currentEvent = recordEvents[irec]-1; + currentRecord=irec; + currentRecordEvent = -1; + return true; + } + bool readerIndex::canAdvanceInRecord(){ + return (currentEvent + * + * FILE HEADER STRUCTURE ( 56 bytes, 14 integers (32 bit) ) + * + * +----------------------------------+ + * 1 | ID | // HIPO: 0x43455248, Evio: 0x4556494F + * +----------------------------------+ + * 2 + File Number | // split file # + * +----------------------------------+ + * 3 + Header Length | // 14 (words) + * +----------------------------------+ + * 4 + Record (Index) Count | + * +----------------------------------+ + * 5 + Index Array Length | // bytes + * +-----------------------+----------+ + * 6 + Bit Info | Version | // version (8 bits) + * +-----------------------+----------+ + * 7 + User Header Length | // bytes + * +----------------------------------+ + * 8 + Magic Number | // 0xc0da0100 + * +----------------------------------+ + * 9 + User Register | + * +-- --+ + * 10 + | + * +----------------------------------+ + * 11 + Trailer Position | // File offset to trailer head (64 bits). + * +-- --+ // 0 = no offset available or no trailer exists. + * 12 + | + * +----------------------------------+ + * 13 + User Integer 1 | + * +----------------------------------+ + * 14 + User Integer 2 | + * +----------------------------------+ + * + * ------------------- + * Bit Info Word + * ------------------- + * 0-7 = version + * 8 = true if dictionary is included (relevant for first record only) + * 9 = true if this file has "first" event (in every split file) + * 10 = File trailer with index array exists + * 11-19 = reserved + * 20-21 = pad 1 + * 22-23 = pad 2 + * 24-25 = pad 3 (always 0) + * 26-27 = reserved + * 28-31 = general header type: 1 = Evio file + * 2 = Evio extended file + * 5 = HIPO file + * 6 = HIPO extended file + * + *
+ * + * @version 6.0 + * @since 6.0 9/6/17 + */ +/* + * File: hipofile.h + * Author: gavalian + * + * Created on April 11, 2017, 2:07 PM + */ + +#ifndef HIPOFILE_H +#define HIPOFILE_H + + +#define HIPO_FILE_HEADER_SIZE 72 +/* Constants for endianness of the file */ +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 0 +#endif +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include "record.h" +#include "utils.h" + +namespace hipo { + + typedef struct { + int uniqueid; + int filenumber; + int headerLength; // in words (usually 14) + int recordCount; + int indexArrayLength; // in bytes + int bitInfo; + int version; + int userHeaderLength; + int magicNumber; + long userRegister; + long trailerPosition; + long firstRecordPosition; + } fileHeader_t; + + /** +* READER index class is used to construct entire events +* sequence from all records, and provides ability to canAdvance +* through events where record number is automatically calculated +* and triggers reading of the next record when events in the current +* record are exhausted. +*/ +class readerIndex { + + private: + std::vector recordEvents; + std::vector recordPosition; + + int currentRecord; + int currentEvent; + int currentRecordEvent; + + public: + readerIndex(){ + + }; + ~readerIndex(){}; + + bool canAdvance(); + bool canAdvanceInRecord(); + bool advance(); + bool loadRecord(int irec); + + int getEventNumber() { return currentEvent;} + int getRecordNumber() { return currentRecord;} + int getRecordEventNumber() { return currentRecordEvent;} + int getMaxEvents(); + void addSize(int size); + void addPosition(long position){ recordPosition.push_back(position);} + long getPosition(int index) { return recordPosition[index];} + int getNRecords() const {return recordEvents.size();} + void rewind(){ + currentRecord = -1; + currentEvent = -1; + currentRecordEvent = -1; + } + void reset(){ + currentRecord = 0; + currentEvent = 0; + currentRecordEvent = 0; + } +}; + + class reader { + + private: + + fileHeader_t header; + hipo::utils hipoutils; + std::ifstream inputStream; + long inputStreamSize; + + hipo::record inputRecord; + hipo::readerIndex readerEventIndex; + + void readHeader(); + void readIndex(); + public: + + reader(); + ~reader(); + + void readDictionary(hipo::dictionary &dict); + void open(const char *filename); + bool hasNext(); + bool next(); + bool next(hipo::event &dataevent); + void read(hipo::event &dataevent); + void printWarning(); + + int getNRecords() const {return readerEventIndex.getNRecords()-1;} + bool nextInRecord(); + bool loadRecord(int irec); + + }; +} +#endif /* HIPOFILE_H */ diff --git a/Hipo4/record.cpp b/Hipo4/record.cpp new file mode 100644 index 0000000..1c08bba --- /dev/null +++ b/Hipo4/record.cpp @@ -0,0 +1,451 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "record.h" +//#include "hipoexceptions.h" + +//#ifdef __LZ4__ +#include +//#endif + +namespace hipo { + + + record::record(){ + + } + + + record::~record(){ } + + /** + */ + void record::readRecord(std::ifstream &stream, long position, int dataOffset){ + + recordHeaderBuffer.resize(80); + stream.seekg(position,std::ios::beg); + + stream.read( (char *) &recordHeaderBuffer[0],80); + recordHeader.recordLength = *(reinterpret_cast(&recordHeaderBuffer[0])); + recordHeader.headerLength = *(reinterpret_cast(&recordHeaderBuffer[8])); + recordHeader.numberOfEvents = *(reinterpret_cast(&recordHeaderBuffer[12])); + recordHeader.bitInfo = *(reinterpret_cast(&recordHeaderBuffer[20])); + recordHeader.signatureString = *(reinterpret_cast(&recordHeaderBuffer[28])); + recordHeader.recordDataLength = *(reinterpret_cast(&recordHeaderBuffer[32])); + recordHeader.userHeaderLength = *(reinterpret_cast(&recordHeaderBuffer[24])); + int compressedWord = *(reinterpret_cast(&recordHeaderBuffer[36])); + + if(recordHeader.signatureString==0xc0da0100) recordHeader.dataEndianness = 0; + if(recordHeader.signatureString==0x0001dac0) recordHeader.dataEndianness = 1; + + if(recordHeader.signatureString==0x0001dac0){ + recordHeader.recordLength = __builtin_bswap32(recordHeader.recordLength); + recordHeader.headerLength = __builtin_bswap32(recordHeader.headerLength); + recordHeader.numberOfEvents = __builtin_bswap32(recordHeader.numberOfEvents); + recordHeader.recordDataLength = __builtin_bswap32(recordHeader.recordDataLength); + recordHeader.userHeaderLength = __builtin_bswap32(recordHeader.userHeaderLength); + recordHeader.bitInfo = __builtin_bswap32(recordHeader.bitInfo); + compressedWord = __builtin_bswap32(compressedWord); + } + + int compressedDataLengthPadding = (recordHeader.bitInfo>>24)&0x00000003; + int headerLengthBytes = recordHeader.headerLength*4; + int dataBufferLengthBytes = recordHeader.recordLength * 4 - headerLengthBytes; + + recordHeader.userHeaderLengthPadding = (recordHeader.bitInfo>>20)&0x00000003; + recordHeader.recordDataLengthCompressed = compressedWord&0x0FFFFFFF; + recordHeader.compressionType = (compressedWord>>28)&0x0000000F; + recordHeader.indexDataLength = 4*recordHeader.numberOfEvents; + + /*printf(" allocating buffer for record, size = %d, padding = %d length = %d type = %d nevents = %d data length = %d\n", + dataBufferLengthBytes, + compressedDataLengthPadding, recordHeader.recordDataLengthCompressed*4, + recordHeader.compressionType, recordHeader.numberOfEvents, recordHeader.recordDataLength); + */ + //char *compressedBuffer = (char*) malloc(dataBufferLengthBytes); + + if(dataBufferLengthBytes>recordCompressedBuffer.size()){ + int newSize = dataBufferLengthBytes + 5*1024; + printf("---> resizing internal compressed buffer size to from %ld to %d\n", + recordCompressedBuffer.size(), newSize); + recordCompressedBuffer.resize(newSize); + } + //dataBufferLengthBytes -= compressedDataLengthPadding; + long dataposition = position + headerLengthBytes; + //printf("position = %ld data position = %ld\n",position, dataposition); + stream.seekg(dataposition,std::ios::beg); + //stream.read( compressedBuffer, dataBufferLengthBytes); + stream.read( (&recordCompressedBuffer[0]), dataBufferLengthBytes); + //showBuffer(compressedBuffer, 10, 200); + //printf("position = %ld data position = %ld \n",position, dataposition); + int decompressedLength = recordHeader.indexDataLength + + recordHeader.userHeaderLength + + recordHeader.userHeaderLengthPadding + + recordHeader.recordDataLength; + + if(recordBuffer.size()(&recordBuffer[i*4]); + int size = *ptr; + if(recordHeader.dataEndianness==1) size = __builtin_bswap32(size); + eventPosition += size; + *ptr = eventPosition; + } + //printf("final position = %d\n",eventPosition); + } + + bool record::readRecord(std::ifstream &stream, long position, int dataOffset, long inputSize){ + + readBenchmark.resume(); + if((position+80)>=inputSize) return false; + + recordHeaderBuffer.resize(80); + stream.seekg(position,std::ios::beg); + + stream.read( (char *) &recordHeaderBuffer[0],80); + recordHeader.recordLength = *(reinterpret_cast(&recordHeaderBuffer[0])); + recordHeader.headerLength = *(reinterpret_cast(&recordHeaderBuffer[8])); + recordHeader.numberOfEvents = *(reinterpret_cast(&recordHeaderBuffer[12])); + recordHeader.bitInfo = *(reinterpret_cast(&recordHeaderBuffer[20])); + recordHeader.signatureString = *(reinterpret_cast(&recordHeaderBuffer[28])); + recordHeader.recordDataLength = *(reinterpret_cast(&recordHeaderBuffer[32])); + recordHeader.userHeaderLength = *(reinterpret_cast(&recordHeaderBuffer[24])); + int compressedWord = *(reinterpret_cast(&recordHeaderBuffer[36])); + + if(recordHeader.signatureString==0xc0da0100) recordHeader.dataEndianness = 0; + if(recordHeader.signatureString==0x0001dac0) recordHeader.dataEndianness = 1; + + if(recordHeader.signatureString==0x0001dac0){ + recordHeader.recordLength = __builtin_bswap32(recordHeader.recordLength); + recordHeader.headerLength = __builtin_bswap32(recordHeader.headerLength); + recordHeader.numberOfEvents = __builtin_bswap32(recordHeader.numberOfEvents); + recordHeader.recordDataLength = __builtin_bswap32(recordHeader.recordDataLength); + recordHeader.userHeaderLength = __builtin_bswap32(recordHeader.userHeaderLength); + recordHeader.bitInfo = __builtin_bswap32(recordHeader.bitInfo); + compressedWord = __builtin_bswap32(compressedWord); + } + + int compressedDataLengthPadding = (recordHeader.bitInfo>>24)&0x00000003; + int headerLengthBytes = recordHeader.headerLength*4; + int dataBufferLengthBytes = recordHeader.recordLength * 4 - headerLengthBytes; + + recordHeader.userHeaderLengthPadding = (recordHeader.bitInfo>>20)&0x00000003; + recordHeader.recordDataLengthCompressed = compressedWord&0x0FFFFFFF; + recordHeader.compressionType = (compressedWord>>28)&0x0000000F; + recordHeader.indexDataLength = 4*recordHeader.numberOfEvents; + + /*printf(" allocating buffer for record, size = %d, padding = %d length = %d type = %d nevents = %d data length = %d\n", + dataBufferLengthBytes, + compressedDataLengthPadding, recordHeader.recordDataLengthCompressed*4, + recordHeader.compressionType, recordHeader.numberOfEvents, recordHeader.recordDataLength); + */ + //char *compressedBuffer = (char*) malloc(dataBufferLengthBytes); + + if(dataBufferLengthBytes>recordCompressedBuffer.size()){ + int newSize = dataBufferLengthBytes + 5*1024; + printf("---> resizing internal compressed buffer size to from %ld to %d\n", + recordCompressedBuffer.size(), newSize); + recordCompressedBuffer.resize(newSize); + } + //dataBufferLengthBytes -= compressedDataLengthPadding; + long dataposition = position + headerLengthBytes; + //printf("position = %ld data position = %ld\n",position, dataposition); + stream.seekg(dataposition,std::ios::beg); + //stream.read( compressedBuffer, dataBufferLengthBytes); + if(position+dataBufferLengthBytes+recordHeader.headerLength>inputSize){ + printf("**** warning : record at position %ld is incomplete.",position); + return false; + } + stream.read( (&recordCompressedBuffer[0]), dataBufferLengthBytes); + //showBuffer(compressedBuffer, 10, 200); + //printf("position = %ld data position = %ld \n",position, dataposition); + int decompressedLength = recordHeader.indexDataLength + + recordHeader.userHeaderLength + + recordHeader.userHeaderLengthPadding + + recordHeader.recordDataLength; + + if(recordBuffer.size()(&recordBuffer[i*4]); + int size = *ptr; + if(recordHeader.dataEndianness==1) size = __builtin_bswap32(size); + eventPosition += size; + *ptr = eventPosition; + } + indexBenchmark.pause(); + return true; + } + + int record::getRecordSizeCompressed(){ + return recordHeader.recordLength; + } + void record::readRecord__(std::ifstream &stream, long position, long recordLength){ + + stream.seekg(position,std::ios::beg); + + if(recordLength>recordCompressedBuffer.size()){ + int newSize = recordLength + 5*1024; + //printf("---> resizing internal compressed buffer size to from %ld to %d\n", + //recordCompressedBuffer.size(), newSize); + //printf("---> after printout\n"); + recordCompressedBuffer.resize(newSize); + } + //printf(" trying seeksg\n"); + stream.seekg( position,std::ios::beg); + //printf(" trying read\n"); + stream.read( (&recordCompressedBuffer[0]), recordLength); + //printf(" readin was successfull....\n"); + //stream.read( (char *) &recordHeaderBuffer[0],80); + recordHeader.recordLength = *(reinterpret_cast(&recordCompressedBuffer[0])); + recordHeader.headerLength = *(reinterpret_cast(&recordCompressedBuffer[8])); + recordHeader.numberOfEvents = *(reinterpret_cast(&recordCompressedBuffer[12])); + recordHeader.bitInfo = *(reinterpret_cast(&recordCompressedBuffer[20])); + recordHeader.signatureString = *(reinterpret_cast(&recordCompressedBuffer[28])); + recordHeader.recordDataLength = *(reinterpret_cast(&recordCompressedBuffer[32])); + recordHeader.userHeaderLength = *(reinterpret_cast(&recordCompressedBuffer[24])); + int compressedWord = *(reinterpret_cast(&recordCompressedBuffer[36])); + + if(recordHeader.signatureString==0xc0da0100) recordHeader.dataEndianness = 0; + if(recordHeader.signatureString==0x0001dac0) recordHeader.dataEndianness = 1; + + if(recordHeader.signatureString==0x0001dac0){ + recordHeader.recordLength = __builtin_bswap32(recordHeader.recordLength); + recordHeader.headerLength = __builtin_bswap32(recordHeader.headerLength); + recordHeader.numberOfEvents = __builtin_bswap32(recordHeader.numberOfEvents); + recordHeader.recordDataLength = __builtin_bswap32(recordHeader.recordDataLength); + recordHeader.userHeaderLength = __builtin_bswap32(recordHeader.userHeaderLength); + recordHeader.bitInfo = __builtin_bswap32(recordHeader.bitInfo); + compressedWord = __builtin_bswap32(compressedWord); + } + + int compressedDataLengthPadding = (recordHeader.bitInfo>>24)&0x00000003; + int headerLengthBytes = recordHeader.headerLength*4; + int dataBufferLengthBytes = recordHeader.recordLength * 4 - headerLengthBytes; + + recordHeader.userHeaderLengthPadding = (recordHeader.bitInfo>>20)&0x00000003; + recordHeader.recordDataLengthCompressed = compressedWord&0x0FFFFFFF; + recordHeader.compressionType = (compressedWord>>28)&0x0000000F; + recordHeader.indexDataLength = 4*recordHeader.numberOfEvents; + + /*printf(" allocating buffer for record, size = %d, padding = %d length = %d type = %d nevents = %d data length = %d\n", + dataBufferLengthBytes, + compressedDataLengthPadding, recordHeader.recordDataLengthCompressed*4, + recordHeader.compressionType, recordHeader.numberOfEvents, recordHeader.recordDataLength); + */ + //char *compressedBuffer = (char*) malloc(dataBufferLengthBytes); + + + //dataBufferLengthBytes -= compressedDataLengthPadding; + //printf(" record header intialized....\n"); + long dataposition = position + headerLengthBytes; + //printf("position = %ld data position = %ld\n",position, dataposition); + //stream.seekg(dataposition,std::ios::beg); + //stream.read( compressedBuffer, dataBufferLengthBytes); + //stream.read( (&recordCompressedBuffer[0]), dataBufferLengthBytes); + //showBuffer(compressedBuffer, 10, 200); + //printf("position = %ld data position = %ld \n",position, dataposition); + int decompressedLength = recordHeader.indexDataLength + + recordHeader.userHeaderLength + + recordHeader.userHeaderLengthPadding + + recordHeader.recordDataLength; + //printf(" decompressed length = %d\n",decompressedLength); + if(recordBuffer.size()(&recordBuffer[i*4]); + int size = *ptr; + if(recordHeader.dataEndianness==1) size = __builtin_bswap32(size); + eventPosition += size; + *ptr = eventPosition; + } + //printf("final position = %d\n",eventPosition); + } + /** + * returns number of events in the record. + */ + int record::getEventCount(){ + return recordHeader.numberOfEvents; + } + /** + * reads content of the event with given index into a vector + * vector will be resized to fit the data. The resulting + * size of the vector can be used to veryfy the successfull read. + */ + void record::readEvent( std::vector &vec, int index){ + + } + /** + * returns a data object that points to the event inside of the + * record. For given index the data object will be filled with the + * pointer to the position in the buffer where the event starts and + * with the size indicating length of the event. + */ + void record::getData(hipo::data &data, int index){ + int first_position = 0; + if(index > 0){ + first_position = *(reinterpret_cast(&recordBuffer[(index -1)*4])); + } + int last_position = *(reinterpret_cast(&recordBuffer[index*4])); + int offset = recordHeader.indexDataLength + + recordHeader.userHeaderLength + + recordHeader.userHeaderLengthPadding; + data.setDataPtr(&recordBuffer[first_position+offset]); + data.setDataSize(last_position-first_position); + data.setDataOffset(first_position + offset); + } + + void record::readHipoEvent(hipo::event &event, int index){ + hipo::data event_data; + getData(event_data,index); + //printf("reading event %d ptr=%X size=%d\n",index,(unsigned long) event_data.getDataPtr(),event_data.getDataSize()); + event.init(event_data.getDataPtr(), event_data.getDataSize()); + } + /** + * prints the content of given buffer in HEX format. Used for debugging. + */ + void record::showBuffer(const char *data, int wrapping, int maxsize) + { + for(int i = 0; i < maxsize; i++){ + printf("%X ", 0x000000FF&((unsigned int) data[i])); + if( (i+1)%wrapping==0) printf("\n"); + } + printf("\n"); + } + /** + * decompresses the buffer given with pointed *data, into a destination array + * provided. The arguments indicate the compressed data length (dataLength), + * and maximum decompressed length. + * returns the number of bytes that were decompressed by LZ4 + */ + int record::getUncompressed(const char *data, char *dest, int dataLength, int dataLengthUncompressed){ + // #ifdef __LZ4__ + int result = LZ4_decompress_safe(data,dest,dataLength,dataLengthUncompressed); + //int result = LZ4_decompress_fast(data,dest,dataLengthUncompressed); + return result; + // #endif + + // #ifndef __LZ4__ + // printf("\n >>>>> LZ4 compression is not supported."); + // printf("\n >>>>> check if libz4 is installed on your system."); + // printf("\n >>>>> recompile the library with liblz4 installed.\n"); + // return 0; + // #endif + + } + /** + * deompresses the content of given buffer ( *data), into a newly allocated + * memory. User is responsible for free-ing the allocated memory. + */ + char *record::getUncompressed(const char *data, int dataLength, + int dataLengthUncompressed){ + + // #ifdef __LZ4__ + char *output = (char *) malloc(dataLengthUncompressed); + int result = LZ4_decompress_safe(data,output,dataLength,dataLengthUncompressed); + //int result = LZ4_decompress_fast(data,output,dataLengthUncompressed); + return output; + //printf(" FIRST (%d) = %x %x %x %x\n",result);//,destUnCompressed[0],destUnCompressed[1], + //destUnCompressed[2],destUnCompressed[3]); + //LZ4_decompress_fast(buffer,destUnCompressed,decompressedLength); + //LZ4_uncompress(buffer,destUnCompressed,decompressedLength); + // #endif + + // #ifndef __LZ4__ + // printf("\n >>>>> LZ4 compression is not supported."); + // printf("\n >>>>> check if libz4 is installed on your system."); + // printf("\n >>>>> recompile the library with liblz4 installed.\n"); + // return NULL; + // #endif + + } + + +} diff --git a/Hipo4/record.h b/Hipo4/record.h new file mode 100644 index 0000000..fb77f5e --- /dev/null +++ b/Hipo4/record.h @@ -0,0 +1,109 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hiporecord.h + * Author: gavalian + * + * Created on April 11, 2017, 4:47 PM + */ + +#ifndef HIPORECORD_H +#define HIPORECORD_H + +#include +#include +#include +#include +#include +#include +#include + +#include "event.h" +#include "utils.h" + +namespace hipo { + + typedef struct { + int signatureString; // 1) identifier string is HREC (int = 0x43455248 + int recordLength; // 2) TOTAL Length of the RECORD, includes INDEX array + int recordDataLength; // 3) Length of the DATA uncompressed + int recordDataLengthCompressed; // 4) compressed length of the DATA buffer + int numberOfEvents ; // 5) number of event, data buckets in DATA buffer + int headerLength ; // 6) Length of the buffer represengin HEADER for the record + int indexDataLength ; // 7) Length of the index buffer (in bytes) + int userHeaderLength; // user header length in bytes + int userHeaderLengthPadding; // the padding added to user header Length + int bitInfo; + int compressionType; + int compressedLengthPadding; + int dataEndianness; + } recordHeader_t; + + class data { + private: + const char *data_ptr; + int data_size; + int data_endianness; + int data_offset; + + public: + data(){ data_ptr = NULL; data_size = 0;} + ~data(){ } + + void setDataPtr(const char *__ptr){ data_ptr = __ptr;} + void setDataSize(int __size){ data_size = __size;} + void setDataOffset(int __offset) { data_offset = __offset;} + void setDataEndianness(int __endianness) { data_endianness = __endianness;} + + const uint32_t *getEvioPtr(){ return reinterpret_cast(data_ptr);} + int getEvioSize(){ return (int) data_size/4 ;} + const char *getDataPtr(){ return data_ptr;} + int getDataSize(){ return data_size;} + int getDataEndianness(){ return data_endianness;} + int getDataOffset(){ return data_offset;} + + }; + + class record { + + private: + + //std::vector< std::vector > eventBuffer; + std::vector recordHeaderBuffer; + recordHeader_t recordHeader; + + std::vector recordBuffer; + std::vector recordCompressedBuffer; + + hipo::benchmark readBenchmark; + hipo::benchmark unzipBenchmark; + hipo::benchmark indexBenchmark; + + char *getUncompressed(const char *data, int dataLength, int dataLengthUncompressed); + int getUncompressed(const char *data, char *dest, int dataLength, int dataLengthUncompressed); + void showBuffer(const char *data, int wrapping, int maxsize); + + public: + + record(); + ~record(); + + void readRecord(std::ifstream &stream, long position, int dataOffset); + void readRecord__(std::ifstream &stream, long position, long recordLength); + bool readRecord(std::ifstream &stream, long position, int dataOffset, long inputSize); + int getEventCount(); + int getRecordSizeCompressed(); + void readEvent( std::vector &vec, int index); + void readHipoEvent(hipo::event &event, int index); + void getData( hipo::data &data, int index); + + hipo::benchmark &getReadBenchmark(){ return readBenchmark;} + hipo::benchmark &getUnzipBenchmark(){ return unzipBenchmark;} + hipo::benchmark &getIndexBenchmark(){ return indexBenchmark;} + }; +} +#endif /* HIPORECORD_H */ diff --git a/Hipo4/recordbuilder.cpp b/Hipo4/recordbuilder.cpp new file mode 100644 index 0000000..6efedcc --- /dev/null +++ b/Hipo4/recordbuilder.cpp @@ -0,0 +1,116 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "recordbuilder.h" +//#include "hipoexceptions.h" + +#ifdef __LZ4__ +#include +#endif + +namespace hipo { + + recordbuilder::recordbuilder(){ + bufferIndex.resize(4*defaultNumberOfEvents); + bufferEvents.resize(defaultRecordSize); + bufferData.resize(defaultRecordSize+4*defaultNumberOfEvents); + bufferRecord.resize(defaultRecordSize+4*defaultNumberOfEvents+512*1024); + + bufferIndexEntries = 0; + bufferEventsPosition = 0; + } + + recordbuilder::recordbuilder(int maxEvents, int maxLength){ + bufferIndex.resize(4*maxEvents); + bufferEvents.resize(maxLength); + bufferData.resize( maxLength+4*maxEvents + 1024); + bufferRecord.resize(maxLength+4*maxEvents+512*1024); + bufferIndexEntries = 0; + bufferEventsPosition = 0; + } + + bool recordbuilder::addEvent(hipo::event &evnt){ + return addEvent(evnt.getEventBuffer(),0,evnt.getSize()); + } + + bool recordbuilder::addEvent(std::vector &vec, int start, int length){ + if((bufferEventsPosition+length)>=bufferEvents.size()) return false; + if((bufferIndexEntries+1)*4>=bufferIndex.size()) return false; + *reinterpret_cast(&bufferIndex[bufferIndexEntries*4]) = length; + bufferIndexEntries++; + memcpy(&bufferEvents[bufferEventsPosition],&vec[start],length); + bufferEventsPosition += length; + return true; + } + + void recordbuilder::reset(){ + bufferIndexEntries = 0; + bufferEventsPosition = 0; + } + + int recordbuilder::getRecordLengthRounding(int bufferSize){ + int nwords = bufferSize/4; + int nbytes = 4*nwords; + return (bufferSize-nbytes); + } + + int recordbuilder::getRecordSize(){ + int size = *reinterpret_cast(&bufferRecord[0]); + return size*4; + } + + void recordbuilder::build(){ + int indexSize = bufferIndexEntries*4; + int eventsSize = bufferEventsPosition; + memcpy(&bufferData[0],&bufferIndex[0],indexSize); + memcpy(&bufferData[indexSize],&bufferEvents[0],eventsSize); + int uncompressedSize = indexSize+eventsSize; + int compressedSize = compressRecord(uncompressedSize); + int rounding = getRecordLengthRounding(compressedSize); + int compressedSizeToWrite = compressedSize + rounding; + int compressedSizeToWriteWords = compressedSizeToWrite/4; + int recordLength = compressedSizeToWrite/4+14; + + hipo::utils::writeInt(&bufferRecord[0], 0, recordLength); // (1) - record length in words (includes header) + hipo::utils::writeInt(&bufferRecord[0], 4, 0); // (2) - record # + hipo::utils::writeInt(&bufferRecord[0], 8, 14); // (3) - record header lenght (in words) + hipo::utils::writeInt(&bufferRecord[0], 12, bufferIndexEntries); // (4) event count in the record + hipo::utils::writeInt(&bufferRecord[0], 16, bufferIndexEntries*4); // (5) length of index array in bytes + int versionWord = (rounding<<24)|(4); + hipo::utils::writeInt(&bufferRecord[0], 20, versionWord); // (6) record version number + hipo::utils::writeInt(&bufferRecord[0], 24, 0); // (7) user header length bytes + hipo::utils::writeInt(&bufferRecord[0], 28, 0xc0da0100); // (8) magic word + hipo::utils::writeInt(&bufferRecord[0], 32, eventsSize); // (9) magic word + int compressionWord = (1<<28)|(0x0FFFFFFF&compressedSizeToWriteWords); + hipo::utils::writeInt(&bufferRecord[0], 36, compressionWord); + hipo::utils::writeLong(&bufferRecord[0], 40, 0); + hipo::utils::writeLong(&bufferRecord[0], 48, 0); + printf("record::build uncompressed size = %8d, compressed size = %8d, rounding = %4d , record size = %6d, version = %X, size = %5X\n", + uncompressedSize,compressedSize, rounding,compressedSizeToWrite, versionWord,compressionWord); + } + + int recordbuilder::compressRecord(int src_size){ + + #ifdef __LZ4__ + //(const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); + int result = LZ4_compress_fast(&bufferData[0],&bufferRecord[56],src_size,bufferRecord.size(),2); + //int result = LZ4_decompress_safe(data,output,dataLength,dataLengthUncompressed); + //int result = LZ4_decompress_fast(data,output,dataLengthUncompressed); + return result; + //printf(" FIRST (%d) = %x %x %x %x\n",result);//,destUnCompressed[0],destUnCompressed[1], + //destUnCompressed[2],destUnCompressed[3]); + //LZ4_decompress_fast(buffer,destUnCompressed,decompressedLength); + //LZ4_uncompress(buffer,destUnCompressed,decompressedLength); + #endif + + #ifndef __LZ4__ + printf("\n >>>>> LZ4 compression is not supported."); + printf("\n >>>>> check if libz4 is installed on your system."); + printf("\n >>>>> recompile the library with liblz4 installed.\n"); + return 0; + #endif + } +} diff --git a/Hipo4/recordbuilder.h b/Hipo4/recordbuilder.h new file mode 100644 index 0000000..094b13e --- /dev/null +++ b/Hipo4/recordbuilder.h @@ -0,0 +1,62 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: hiporecord.h + * Author: gavalian + * + * Created on April 11, 2017, 4:47 PM + */ + +#ifndef HIPORECORDBUILDER_H +#define HIPORECORDBUILDER_H + +#include +#include +#include +#include +#include +#include +#include + +#include "event.h" +#include "utils.h" + +namespace hipo { + + class recordbuilder { + + private: + const int defaultNumberOfEvents = 100000; + const int defaultRecordSize = 8*1024*1024; + //std::vector< std::vector > eventBuffer; + std::vector bufferIndex; + std::vector bufferEvents; + std::vector bufferData; + std::vector bufferRecord; + + int bufferIndexEntries; + int bufferEventsPosition; + + int compressRecord(int src_size); + int getRecordLengthRounding(int bufferSize); + + public: + + recordbuilder(int maxEvents, int maxLength); + recordbuilder(); + virtual ~recordbuilder(){}; + + bool addEvent(std::vector &vec, int start, int length); + bool addEvent(hipo::event &evnt); + + int getRecordSize(); + std::vector &getRecordBuffer(){ return bufferRecord;}; + void reset(); + void build(); + }; +} +#endif /* HIPORECORD_H */ diff --git a/Hipo4/utils.cpp b/Hipo4/utils.cpp new file mode 100644 index 0000000..d97ecec --- /dev/null +++ b/Hipo4/utils.cpp @@ -0,0 +1,212 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +#include "utils.h" + + +namespace hipo { + + utils::utils(){ } + utils::~utils(){} + + void utils::tokenize(const std::string& str, std::vector& tokens, + const std::string& delimiters) + { + // Skip delimiters at beginning. + std::string::size_type lastPos = str.find_first_not_of(delimiters, 0); + // Find first "non-delimiter". + std::string::size_type pos = str.find_first_of(delimiters, lastPos); + + + while (std::string::npos != pos || std::string::npos != lastPos) + { + // Found a token, add it to the vector. + tokens.push_back(str.substr(lastPos, pos - lastPos)); + // Skip delimiters. Note the "not_of" + lastPos = str.find_first_not_of(delimiters, pos); + // Find next "non-delimiter" + pos = str.find_first_of(delimiters, lastPos); + } + } + /** + * finds postion of the dalim in the string, while skipping "order" times. + */ + int utils::findposition(const std::string &str, const char *delim, int order){ + int found = 0; + int position = 0; + std::string::size_type firstPos = str.find_first_of(delim,position); + if(firstPos==std::string::npos) return -1; + position = firstPos; + while(found!=order){ + firstPos = str.find_first_of(delim,position+1); + if(firstPos==std::string::npos) return -1; + position = firstPos; + found++; + } + return position; + } + /** + * returns a substring from a string that is enclosed between + * start_delim and end_delim. order variable decides which enclosed + * string to return as and order of occurance. 0 - first one. 1 - second one. + */ + std::string utils::substring(const std::string &str, + const char *start_delim, const char *end_delim, int order){ + int position = 0; + int firstPos = hipo::utils::findposition(str,start_delim,order); + if(firstPos<0) return std::string(); + std::string::size_type lastPos = str.find_first_of(end_delim,firstPos+1); + if(lastPos==std::string::npos) return std::string(); + int length = lastPos - firstPos - 1; + return str.substr(firstPos+1, length); + } + + void utils::writeInt(char *buffer, int position, int value){ + int *ptr = reinterpret_cast(&buffer[position]); + *ptr = value; + } + + void utils::writeLong( char *buffer, int position, long value){ + int64_t *ptr = reinterpret_cast(&buffer[position]); + *ptr = value; + } + + void utils::writeByte( char *buffer, int position, uint8_t value ){ + int8_t *ptr = reinterpret_cast(&buffer[position]); + *ptr = value; + } + + void utils::printLogo(){ + std::cout << "************************************************" << std::endl; + std::cout << "* >=< : --------------------- *" << std::endl; + std::cout << "* ,.--' ''-. : HIPO 4.0 I/O Library *" << std::endl; + std::cout << "* ( ) ',_.' : Jefferson National Lab *" << std::endl; + std::cout << "* Xx'xX : Date: 01/24/2019 *" << std::endl; + std::cout << "************************************************" << std::endl; + std::cout << std::endl; + } + + std::string utils::getHeader(){ + std::string header; + header.append("//***********************************************************************\n"); + header.append("//***********************************************************************\n"); + header.append("// ____ ____ _____ _______ ___ ______ __ \n"); + header.append("// |_ || _||_ _||_ __ \\ .' `. / ____ `. / | \n"); + header.append("// | |__| | | | | |__) |/ .-. \\ `' __) | `| | \n"); + header.append("// | __ | | | | ___/ | | | | _ |__ '. | | \n"); + header.append("// _| | | |_ _| |_ _| |_ \\ `-' / | \\____) | _ _| |_ \n"); + header.append("// |____||____||_____||_____| `.___.' \\______.'(_)|_____| \n"); + header.append("// \n"); + header.append("//======================================================================= \n"); + header.append("// Autogenerated code by HIPO 3.1 io library\n"); + header.append("// Modify the main loop to suite your needs\n"); + header.append("// Date: \n"); + header.append("//***********************************************************************\n"); + return header; + } + + std::string utils::getFileHeader(){ + std::string file_header; + std::string comments = hipo::utils::getHeader(); + file_header.append(comments); + file_header.append("#include \n#include \n\n"); + file_header.append("#include \"reader.h\"\n#include \"node.h\"\n"); + file_header.append("\nint main(int argc, char** argv) {\n"); + file_header.append(" std::cout << \" reading file example program (HIPO) \" << std::endl;\n"); + file_header.append(" char inputFile[256];\n\n" ); + file_header.append(" if(argc>1) {\n sprintf(inputFile,\"%s\",argv[1]);\n } else {\n " ); + file_header.append(" std::cout << \" *** please provide a file name...\" << std::endl;\n" ); + file_header.append(" exit(0);\n }\n\n"); + file_header.append(" hipo::reader reader;\n"); + file_header.append(" reader.open(inputFile);\n\n" ); + return file_header; + } + std::string utils::getFileTrailer(const char *code){ + std::string file_trailer; + file_trailer.append("\n"); + file_trailer.append(" //----------------------------------------------------\n"); + file_trailer.append(" //-- Main LOOP running through events and printing\n"); + file_trailer.append(" //-- values of the first decalred branch\n"); + file_trailer.append(" //----------------------------------------------------\n"); + file_trailer.append(" int entry = 0;\n"); + file_trailer.append(" while(reader.next()==true){\n"); + file_trailer.append(" entry++;\n"); + file_trailer.append(" std::cout << \"event # \" << entry << std::endl;\n"); + file_trailer.append(code); + file_trailer.append(" }\n"); + file_trailer.append(" //----------------------------------------------------\n"); + file_trailer.append("}\n"); + file_trailer.append("//###### ENF OF GENERATED FILE #######\n"); + return file_trailer; + } + std::string utils::getSConstruct(){ + std::string std__string; + std__string.append("#=================================================\n"); + std__string.append("# The SCONSTRUCT file for building HIPO project.\n"); + std__string.append("# \n"); + std__string.append("#=================================================\n"); + std__string.append("import glob\n"); + std__string.append("import os\n"); + std__string.append("import sys\n"); + std__string.append("#=================================================\n"); + std__string.append("# LOADING THE ENVIRONMENT\n"); + std__string.append("#=================================================\n"); + std__string.append("env = Environment(CPPPATH=[\"include\",\".\",\"/usr/include\",\"/usr/local/include\",\"/opt/local/include\",\"/group/clas12/packages/lz4/lib\",\"/group/clas12/packages/hipo-io/libcpp\"])\n"); + std__string.append("env.Append(ENV = os.environ)\n"); + std__string.append("env.Append(CPPPATH=[\"src/root\",\"src/evio\"])\n"); + std__string.append("env.Append(CCFLAGS=[\"-O2\",\"-fPIC\",\"-m64\",\"-fmessage-length=0\",\"-g\"])\n"); + std__string.append("env.Append(LIBPATH=[\"/opt/local/lib\",\"/usr/lib\",\"/usr/local/lib\",\"/group/clas12/packages/lz4/lib\",\"lib\",\"/group/clas12/packages/hipo-io/lib\"])\n"); + std__string.append("env.Append(CONFIGUREDIR=[\"/group/clas12/packages/lz4/lib\",\"/group/clas12/packages/hipo-io/lib\"])\n"); + std__string.append("#=================================================\n"); + std__string.append("# Check for compression libraries.\n"); + std__string.append("#=================================================\n"); + std__string.append("conf = Configure(env)\n"); + std__string.append("\n"); + std__string.append("if conf.CheckLib('libhipo'):\n"); + std__string.append(" print '\\n\\033[32m[**] >>>>> found library : HIPO'\n"); + std__string.append(" print ''\n"); + std__string.append(" env.Append(CCFLAGS=\"-D__HIPO__\")\n"); + std__string.append(" \n"); + std__string.append("if conf.CheckLib('liblz4'):\n"); + std__string.append(" print '\\n\\033[32m[**] >>>>> found library : LZ4'\n"); + std__string.append(" print '[**] >>>>> enabling lz4 compression. \\033[0m'\n"); + std__string.append(" print ''\n"); + std__string.append(" env.Append(CCFLAGS=\"-D__LZ4__\")\n"); + std__string.append("\n"); + std__string.append("if conf.CheckLib('libz'):\n"); + std__string.append(" print '\\n\\033[32m[**] >>>>> found library : libz'\n"); + std__string.append(" print '[**] >>>>> enabling gzip compression. \\033[0m'\n"); + std__string.append(" print ''\n"); + std__string.append(" env.Append(CCFLAGS=\"-D__LIBZ__\")\n"); + std__string.append("#=================================================\n"); + std__string.append("# BUILDING EXECUTABLE PROGRAM\n"); + std__string.append("#=================================================\n"); + std__string.append("runFileLoop = env.Program(target=\"runFileLoop\",source=[\"runFileLoop.cc\"])\n"); + return std__string; + } + + + + void benchmark::resume(){ + first = clock.now(); + counter++; + } + + void benchmark::pause(){ + + second = clock.now(); + std::chrono::nanoseconds diff_ms = + std::chrono::duration_cast< std::chrono::nanoseconds >( second-first ); + //printf(" count = %lld\n",diff_ms.count()); + running_time += diff_ms.count(); + } + + long benchmark::getTime(){ + return running_time; + } + + int benchmark::getCounter(){ return counter;} +} diff --git a/Hipo4/utils.h b/Hipo4/utils.h new file mode 100644 index 0000000..a8630ad --- /dev/null +++ b/Hipo4/utils.h @@ -0,0 +1,75 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: utils.h + * Author: gavalian + * + * Created on April 27, 2017, 10:01 AM + */ + +#ifndef UTILS_H +#define UTILS_H + +#include +#include +#include +#include +#include +#include + +namespace hipo { + + class utils { + private: + + public: + utils(); + ~utils(); + static void tokenize(const std::string& str, + std::vector& tokens, + const std::string& delimiters = " "); + + static std::string substring(const std::string &str, + const char *start_delim, + const char *end_delim, int order); + + static int findposition(const std::string &str, + const char *delim, int order); + + static void printLogo(); + + static std::string getHeader(); + static std::string getFileHeader(); + static std::string getFileTrailer(const char *code); + static std::string getSConstruct(); + + static void writeInt( char *buffer, int position, int value); + static void writeLong( char *buffer, int position, long value); + static void writeByte( char *buffer, int position, uint8_t value ); + }; + + class benchmark { + private: + + std::chrono::high_resolution_clock clock; + std::chrono::time_point first, second; + + long running_time; + int counter; + + public: + benchmark(){ running_time = 0;counter = 0;} + ~benchmark(){} + + void resume(); + void pause(); + long getTime(); + int getCounter(); + }; +} + +#endif /* UTILS_H */ From 09563b57a970449c832d649586a41b2b93f6d0a2 Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 12 Mar 2019 15:41:24 +0000 Subject: [PATCH 33/56] include particle selection in hipo4 clas12reader, add install scripts --- CMakeLists.txt => CMakeLists.txt.hipo3 | 11 +- CMakeLists.txt.hipo4 | 50 ++ Clas12Banks/CMakeLists.txt | 13 - Clas12Banks3/CMakeLists.txt | 10 + {Clas12Banks => Clas12Banks3}/Clas12LinkDef.h | 0 {Clas12Banks => Clas12Banks3}/Makefile | 0 {Clas12Banks => Clas12Banks3}/calorimeter.cpp | 0 {Clas12Banks => Clas12Banks3}/calorimeter.h | 0 {Clas12Banks => Clas12Banks3}/cherenkov.cpp | 0 {Clas12Banks => Clas12Banks3}/cherenkov.h | 0 {Clas12Banks => Clas12Banks3}/clas12defs.h | 0 {Clas12Banks => Clas12Banks3}/clas12event.cpp | 0 {Clas12Banks => Clas12Banks3}/clas12event.h | 0 .../clas12reader.cpp | 0 {Clas12Banks => Clas12Banks3}/clas12reader.h | 0 {Clas12Banks => Clas12Banks3}/covmatrix.cpp | 0 {Clas12Banks => Clas12Banks3}/covmatrix.h | 0 {Clas12Banks => Clas12Banks3}/detector.cpp | 0 {Clas12Banks => Clas12Banks3}/detector.h | 0 .../forwardtagger.cpp | 0 {Clas12Banks => Clas12Banks3}/forwardtagger.h | 0 {Clas12Banks => Clas12Banks3}/hallB_event.cpp | 0 {Clas12Banks => Clas12Banks3}/hallB_event.h | 0 {Clas12Banks => Clas12Banks3}/header.cpp | 0 {Clas12Banks => Clas12Banks3}/header.h | 0 {Clas12Banks => Clas12Banks3}/mcparticle.cpp | 0 {Clas12Banks => Clas12Banks3}/mcparticle.h | 0 .../mesonex_event.cpp | 0 {Clas12Banks => Clas12Banks3}/mesonex_event.h | 0 {Clas12Banks => Clas12Banks3}/particle.cpp | 0 {Clas12Banks => Clas12Banks3}/particle.h | 0 .../particle_detector.cpp | 0 .../particle_detector.h | 0 {Clas12Banks => Clas12Banks3}/region_cdet.cpp | 0 {Clas12Banks => Clas12Banks3}/region_cdet.h | 0 .../region_detector.h | 0 {Clas12Banks => Clas12Banks3}/region_fdet.cpp | 0 {Clas12Banks => Clas12Banks3}/region_fdet.h | 0 {Clas12Banks => Clas12Banks3}/region_ft.cpp | 0 {Clas12Banks => Clas12Banks3}/region_ft.h | 0 .../region_particle.cpp | 0 .../region_particle.h | 0 {Clas12Banks => Clas12Banks3}/scaler.cpp | 0 {Clas12Banks => Clas12Banks3}/scaler.h | 0 .../scintillator.cpp | 0 {Clas12Banks => Clas12Banks3}/scintillator.h | 0 {Clas12Banks => Clas12Banks3}/tracker.cpp | 0 {Clas12Banks => Clas12Banks3}/tracker.h | 0 {Clas12Banks => Clas12Banks3}/traj.cpp | 0 {Clas12Banks => Clas12Banks3}/traj.h | 0 {Clas12Banks => Clas12Banks3}/vectors.cpp | 0 {Clas12Banks => Clas12Banks3}/vectors.h | 0 {Clas12Banks => Clas12Banks3}/vtp.cpp | 0 {Clas12Banks => Clas12Banks3}/vtp.h | 0 Clas12Banks4/CMakeLists.txt | 13 + Clas12Banks4/Clas12LinkDef.h | 28 + Clas12Banks4/clas12reader.cpp | 100 ++- Clas12Banks4/clas12reader.h | 31 +- Clas12Root/CMakeLists.txt | 15 +- Clas12Root/src/CMakeLists.txt | 19 +- .../{particleDraw.cpp => particleDraw3.cpp} | 6 +- Clas12Root/src/particleDraw4.cpp | 35 + .../{particleTree.cpp => particleTree3.cpp} | 6 +- Clas12Root/src/particleTree4.cpp | 43 ++ Hipo/CMakeLists.txt | 13 - Hipo3/CMakeLists.txt | 13 + {Hipo => Hipo3}/HipoLinkDef.h | 0 {Hipo => Hipo3}/Makefile | 0 {Hipo => Hipo3}/bank.cpp | 0 {Hipo => Hipo3}/bank.h | 0 {Hipo => Hipo3}/data.cpp | 0 {Hipo => Hipo3}/data.h | 0 {Hipo => Hipo3}/dictionary.cpp | 0 {Hipo => Hipo3}/dictionary.h | 0 {Hipo => Hipo3}/event.cpp | 0 {Hipo => Hipo3}/event.h | 0 {Hipo => Hipo3}/hipoexceptions.h | 0 {Hipo => Hipo3}/node.cpp | 0 {Hipo => Hipo3}/node.h | 0 {Hipo => Hipo3}/reader.cpp | 0 {Hipo => Hipo3}/reader.h | 0 {Hipo => Hipo3}/record.cpp | 0 {Hipo => Hipo3}/record.h | 0 {Hipo => Hipo3}/text.cpp | 0 {Hipo => Hipo3}/text.h | 0 {Hipo => Hipo3}/utils.cpp | 0 {Hipo => Hipo3}/utils.h | 0 {Hipo => Hipo3}/wrapper.cpp | 0 {Hipo => Hipo3}/writer.cpp | 0 {Hipo => Hipo3}/writer.h | 0 Hipo4/CMakeLists.txt | 13 + .../HipoLinkDef.h | 9 +- include/lz4.h | 607 ------------------ include/lz4frame.h | 532 --------------- include/lz4hc.h | 355 ---------- installHipo3 | 8 + installHipo4 | 15 + testTreeMaker.C | 11 + 98 files changed, 394 insertions(+), 1562 deletions(-) rename CMakeLists.txt => CMakeLists.txt.hipo3 (85%) create mode 100644 CMakeLists.txt.hipo4 delete mode 100644 Clas12Banks/CMakeLists.txt create mode 100644 Clas12Banks3/CMakeLists.txt rename {Clas12Banks => Clas12Banks3}/Clas12LinkDef.h (100%) rename {Clas12Banks => Clas12Banks3}/Makefile (100%) rename {Clas12Banks => Clas12Banks3}/calorimeter.cpp (100%) rename {Clas12Banks => Clas12Banks3}/calorimeter.h (100%) rename {Clas12Banks => Clas12Banks3}/cherenkov.cpp (100%) rename {Clas12Banks => Clas12Banks3}/cherenkov.h (100%) rename {Clas12Banks => Clas12Banks3}/clas12defs.h (100%) rename {Clas12Banks => Clas12Banks3}/clas12event.cpp (100%) rename {Clas12Banks => Clas12Banks3}/clas12event.h (100%) rename {Clas12Banks => Clas12Banks3}/clas12reader.cpp (100%) rename {Clas12Banks => Clas12Banks3}/clas12reader.h (100%) rename {Clas12Banks => Clas12Banks3}/covmatrix.cpp (100%) rename {Clas12Banks => Clas12Banks3}/covmatrix.h (100%) rename {Clas12Banks => Clas12Banks3}/detector.cpp (100%) rename {Clas12Banks => Clas12Banks3}/detector.h (100%) rename {Clas12Banks => Clas12Banks3}/forwardtagger.cpp (100%) rename {Clas12Banks => Clas12Banks3}/forwardtagger.h (100%) rename {Clas12Banks => Clas12Banks3}/hallB_event.cpp (100%) rename {Clas12Banks => Clas12Banks3}/hallB_event.h (100%) rename {Clas12Banks => Clas12Banks3}/header.cpp (100%) rename {Clas12Banks => Clas12Banks3}/header.h (100%) rename {Clas12Banks => Clas12Banks3}/mcparticle.cpp (100%) rename {Clas12Banks => Clas12Banks3}/mcparticle.h (100%) rename {Clas12Banks => Clas12Banks3}/mesonex_event.cpp (100%) rename {Clas12Banks => Clas12Banks3}/mesonex_event.h (100%) rename {Clas12Banks => Clas12Banks3}/particle.cpp (100%) rename {Clas12Banks => Clas12Banks3}/particle.h (100%) rename {Clas12Banks => Clas12Banks3}/particle_detector.cpp (100%) rename {Clas12Banks => Clas12Banks3}/particle_detector.h (100%) rename {Clas12Banks => Clas12Banks3}/region_cdet.cpp (100%) rename {Clas12Banks => Clas12Banks3}/region_cdet.h (100%) rename {Clas12Banks => Clas12Banks3}/region_detector.h (100%) rename {Clas12Banks => Clas12Banks3}/region_fdet.cpp (100%) rename {Clas12Banks => Clas12Banks3}/region_fdet.h (100%) rename {Clas12Banks => Clas12Banks3}/region_ft.cpp (100%) rename {Clas12Banks => Clas12Banks3}/region_ft.h (100%) rename {Clas12Banks => Clas12Banks3}/region_particle.cpp (100%) rename {Clas12Banks => Clas12Banks3}/region_particle.h (100%) rename {Clas12Banks => Clas12Banks3}/scaler.cpp (100%) rename {Clas12Banks => Clas12Banks3}/scaler.h (100%) rename {Clas12Banks => Clas12Banks3}/scintillator.cpp (100%) rename {Clas12Banks => Clas12Banks3}/scintillator.h (100%) rename {Clas12Banks => Clas12Banks3}/tracker.cpp (100%) rename {Clas12Banks => Clas12Banks3}/tracker.h (100%) rename {Clas12Banks => Clas12Banks3}/traj.cpp (100%) rename {Clas12Banks => Clas12Banks3}/traj.h (100%) rename {Clas12Banks => Clas12Banks3}/vectors.cpp (100%) rename {Clas12Banks => Clas12Banks3}/vectors.h (100%) rename {Clas12Banks => Clas12Banks3}/vtp.cpp (100%) rename {Clas12Banks => Clas12Banks3}/vtp.h (100%) create mode 100644 Clas12Banks4/CMakeLists.txt create mode 100644 Clas12Banks4/Clas12LinkDef.h rename Clas12Root/src/{particleDraw.cpp => particleDraw3.cpp} (85%) create mode 100644 Clas12Root/src/particleDraw4.cpp rename Clas12Root/src/{particleTree.cpp => particleTree3.cpp} (88%) create mode 100644 Clas12Root/src/particleTree4.cpp delete mode 100644 Hipo/CMakeLists.txt create mode 100644 Hipo3/CMakeLists.txt rename {Hipo => Hipo3}/HipoLinkDef.h (100%) rename {Hipo => Hipo3}/Makefile (100%) rename {Hipo => Hipo3}/bank.cpp (100%) rename {Hipo => Hipo3}/bank.h (100%) rename {Hipo => Hipo3}/data.cpp (100%) rename {Hipo => Hipo3}/data.h (100%) rename {Hipo => Hipo3}/dictionary.cpp (100%) rename {Hipo => Hipo3}/dictionary.h (100%) rename {Hipo => Hipo3}/event.cpp (100%) rename {Hipo => Hipo3}/event.h (100%) rename {Hipo => Hipo3}/hipoexceptions.h (100%) rename {Hipo => Hipo3}/node.cpp (100%) rename {Hipo => Hipo3}/node.h (100%) rename {Hipo => Hipo3}/reader.cpp (100%) rename {Hipo => Hipo3}/reader.h (100%) rename {Hipo => Hipo3}/record.cpp (100%) rename {Hipo => Hipo3}/record.h (100%) rename {Hipo => Hipo3}/text.cpp (100%) rename {Hipo => Hipo3}/text.h (100%) rename {Hipo => Hipo3}/utils.cpp (100%) rename {Hipo => Hipo3}/utils.h (100%) rename {Hipo => Hipo3}/wrapper.cpp (100%) rename {Hipo => Hipo3}/writer.cpp (100%) rename {Hipo => Hipo3}/writer.h (100%) create mode 100644 Hipo4/CMakeLists.txt rename Hipo/Clas12RootLinkDef.h => Hipo4/HipoLinkDef.h (52%) delete mode 100644 include/lz4.h delete mode 100644 include/lz4frame.h delete mode 100644 include/lz4hc.h create mode 100755 installHipo3 create mode 100755 installHipo4 create mode 100644 testTreeMaker.C diff --git a/CMakeLists.txt b/CMakeLists.txt.hipo3 similarity index 85% rename from CMakeLists.txt rename to CMakeLists.txt.hipo3 index 5c5fc9d..bc43716 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt.hipo3 @@ -1,6 +1,9 @@ cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(clas12hiporoot) +option (USE_HIPO3 + "Use hipo3 libs" ON) + set(CMAKE_INSTALL_BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/bin) set(CMAKE_INSTALL_LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) @@ -36,11 +39,11 @@ add_definitions(-D__LZ4__) #after Lz4 change include to include set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Hipo) -add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Hipo) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Hipo3) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Hipo3) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks) -add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks3) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks3) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) diff --git a/CMakeLists.txt.hipo4 b/CMakeLists.txt.hipo4 new file mode 100644 index 0000000..edb3e21 --- /dev/null +++ b/CMakeLists.txt.hipo4 @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +project(clas12hipo4root) + +option (USE_HIPO4 + "Use hipo4 libs" ON) + +set(CMAKE_INSTALL_BINDIR ${CMAKE_CURRENT_SOURCE_DIR}/bin) +set(CMAKE_INSTALL_LIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) +set(CMAKE_INSTALL_MANDIR ${CMAKE_CURRENT_SOURCE_DIR}/man) +set(CMAKE_CXX_FLAGS "-fPIC -O3") + + +# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: +# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake +# - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT +list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) + +#---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) +find_package(ROOT REQUIRED COMPONENTS Proof) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") + +#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) +include(${ROOT_USE_FILE}) + +#hipo expects lz4 includes to be in lib... +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) +#set(ADD_COMPILER_FLAGS_PREPEND "-O3") +set(CMAKE_C_FLAGS "-O3 ${CMAKE_C_FLAGS}") +set(LZ4_BUNDLED_MODE OFF) +set(BUILD_SHARED_LIBS ON) +set(BUILD_STATIC_LIBS OFF) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/Lz4/contrib/cmake_unofficial) +set(LZ4_LIBRARY lz4) +set(LZ4_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Lz4/lib) +include_directories(${LZ4_INCLUDE_DIR}) +add_definitions(-D__LZ4__) + +#after Lz4 change include to include +set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Hipo4) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Hipo4) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks4) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Banks4) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) +add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/Clas12Root) + diff --git a/Clas12Banks/CMakeLists.txt b/Clas12Banks/CMakeLists.txt deleted file mode 100644 index 130fc02..0000000 --- a/Clas12Banks/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -ROOT_GENERATE_DICTIONARY(G__Clas12 vectors.h header.h particle.h mcparticle.h detector.h scaler.h vtp.h particle_detector.h scintillator.h tracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h clas12reader.h LINKDEF Clas12LinkDef.h) - -add_library(Clas12 SHARED vectors.cpp header.cpp particle.cpp mcparticle.cpp detector.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp tracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp clas12reader.cpp G__Clas12.cxx) - -target_link_libraries(Clas12 ${ROOT_LIBRARIES}) - -#install(TARGETS Clas12 -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") - -FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks/lib*) - -install (FILES ${ROOT_CLAS12_PCM} - DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Clas12Banks3/CMakeLists.txt b/Clas12Banks3/CMakeLists.txt new file mode 100644 index 0000000..7627b3d --- /dev/null +++ b/Clas12Banks3/CMakeLists.txt @@ -0,0 +1,10 @@ +ROOT_GENERATE_DICTIONARY(G__Clas12Banks3 vectors.h header.h particle.h mcparticle.h detector.h scaler.h vtp.h particle_detector.h scintillator.h tracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h clas12reader.h LINKDEF Clas12LinkDef.h) + +add_library(Clas12Banks3 SHARED vectors.cpp header.cpp particle.cpp mcparticle.cpp detector.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp tracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp clas12reader.cpp G__Clas12Banks3.cxx) + +target_link_libraries(Clas12Banks3 ${ROOT_LIBRARIES}) + +FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks3/lib*) + +install (FILES ${ROOT_CLAS12_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Clas12Banks/Clas12LinkDef.h b/Clas12Banks3/Clas12LinkDef.h similarity index 100% rename from Clas12Banks/Clas12LinkDef.h rename to Clas12Banks3/Clas12LinkDef.h diff --git a/Clas12Banks/Makefile b/Clas12Banks3/Makefile similarity index 100% rename from Clas12Banks/Makefile rename to Clas12Banks3/Makefile diff --git a/Clas12Banks/calorimeter.cpp b/Clas12Banks3/calorimeter.cpp similarity index 100% rename from Clas12Banks/calorimeter.cpp rename to Clas12Banks3/calorimeter.cpp diff --git a/Clas12Banks/calorimeter.h b/Clas12Banks3/calorimeter.h similarity index 100% rename from Clas12Banks/calorimeter.h rename to Clas12Banks3/calorimeter.h diff --git a/Clas12Banks/cherenkov.cpp b/Clas12Banks3/cherenkov.cpp similarity index 100% rename from Clas12Banks/cherenkov.cpp rename to Clas12Banks3/cherenkov.cpp diff --git a/Clas12Banks/cherenkov.h b/Clas12Banks3/cherenkov.h similarity index 100% rename from Clas12Banks/cherenkov.h rename to Clas12Banks3/cherenkov.h diff --git a/Clas12Banks/clas12defs.h b/Clas12Banks3/clas12defs.h similarity index 100% rename from Clas12Banks/clas12defs.h rename to Clas12Banks3/clas12defs.h diff --git a/Clas12Banks/clas12event.cpp b/Clas12Banks3/clas12event.cpp similarity index 100% rename from Clas12Banks/clas12event.cpp rename to Clas12Banks3/clas12event.cpp diff --git a/Clas12Banks/clas12event.h b/Clas12Banks3/clas12event.h similarity index 100% rename from Clas12Banks/clas12event.h rename to Clas12Banks3/clas12event.h diff --git a/Clas12Banks/clas12reader.cpp b/Clas12Banks3/clas12reader.cpp similarity index 100% rename from Clas12Banks/clas12reader.cpp rename to Clas12Banks3/clas12reader.cpp diff --git a/Clas12Banks/clas12reader.h b/Clas12Banks3/clas12reader.h similarity index 100% rename from Clas12Banks/clas12reader.h rename to Clas12Banks3/clas12reader.h diff --git a/Clas12Banks/covmatrix.cpp b/Clas12Banks3/covmatrix.cpp similarity index 100% rename from Clas12Banks/covmatrix.cpp rename to Clas12Banks3/covmatrix.cpp diff --git a/Clas12Banks/covmatrix.h b/Clas12Banks3/covmatrix.h similarity index 100% rename from Clas12Banks/covmatrix.h rename to Clas12Banks3/covmatrix.h diff --git a/Clas12Banks/detector.cpp b/Clas12Banks3/detector.cpp similarity index 100% rename from Clas12Banks/detector.cpp rename to Clas12Banks3/detector.cpp diff --git a/Clas12Banks/detector.h b/Clas12Banks3/detector.h similarity index 100% rename from Clas12Banks/detector.h rename to Clas12Banks3/detector.h diff --git a/Clas12Banks/forwardtagger.cpp b/Clas12Banks3/forwardtagger.cpp similarity index 100% rename from Clas12Banks/forwardtagger.cpp rename to Clas12Banks3/forwardtagger.cpp diff --git a/Clas12Banks/forwardtagger.h b/Clas12Banks3/forwardtagger.h similarity index 100% rename from Clas12Banks/forwardtagger.h rename to Clas12Banks3/forwardtagger.h diff --git a/Clas12Banks/hallB_event.cpp b/Clas12Banks3/hallB_event.cpp similarity index 100% rename from Clas12Banks/hallB_event.cpp rename to Clas12Banks3/hallB_event.cpp diff --git a/Clas12Banks/hallB_event.h b/Clas12Banks3/hallB_event.h similarity index 100% rename from Clas12Banks/hallB_event.h rename to Clas12Banks3/hallB_event.h diff --git a/Clas12Banks/header.cpp b/Clas12Banks3/header.cpp similarity index 100% rename from Clas12Banks/header.cpp rename to Clas12Banks3/header.cpp diff --git a/Clas12Banks/header.h b/Clas12Banks3/header.h similarity index 100% rename from Clas12Banks/header.h rename to Clas12Banks3/header.h diff --git a/Clas12Banks/mcparticle.cpp b/Clas12Banks3/mcparticle.cpp similarity index 100% rename from Clas12Banks/mcparticle.cpp rename to Clas12Banks3/mcparticle.cpp diff --git a/Clas12Banks/mcparticle.h b/Clas12Banks3/mcparticle.h similarity index 100% rename from Clas12Banks/mcparticle.h rename to Clas12Banks3/mcparticle.h diff --git a/Clas12Banks/mesonex_event.cpp b/Clas12Banks3/mesonex_event.cpp similarity index 100% rename from Clas12Banks/mesonex_event.cpp rename to Clas12Banks3/mesonex_event.cpp diff --git a/Clas12Banks/mesonex_event.h b/Clas12Banks3/mesonex_event.h similarity index 100% rename from Clas12Banks/mesonex_event.h rename to Clas12Banks3/mesonex_event.h diff --git a/Clas12Banks/particle.cpp b/Clas12Banks3/particle.cpp similarity index 100% rename from Clas12Banks/particle.cpp rename to Clas12Banks3/particle.cpp diff --git a/Clas12Banks/particle.h b/Clas12Banks3/particle.h similarity index 100% rename from Clas12Banks/particle.h rename to Clas12Banks3/particle.h diff --git a/Clas12Banks/particle_detector.cpp b/Clas12Banks3/particle_detector.cpp similarity index 100% rename from Clas12Banks/particle_detector.cpp rename to Clas12Banks3/particle_detector.cpp diff --git a/Clas12Banks/particle_detector.h b/Clas12Banks3/particle_detector.h similarity index 100% rename from Clas12Banks/particle_detector.h rename to Clas12Banks3/particle_detector.h diff --git a/Clas12Banks/region_cdet.cpp b/Clas12Banks3/region_cdet.cpp similarity index 100% rename from Clas12Banks/region_cdet.cpp rename to Clas12Banks3/region_cdet.cpp diff --git a/Clas12Banks/region_cdet.h b/Clas12Banks3/region_cdet.h similarity index 100% rename from Clas12Banks/region_cdet.h rename to Clas12Banks3/region_cdet.h diff --git a/Clas12Banks/region_detector.h b/Clas12Banks3/region_detector.h similarity index 100% rename from Clas12Banks/region_detector.h rename to Clas12Banks3/region_detector.h diff --git a/Clas12Banks/region_fdet.cpp b/Clas12Banks3/region_fdet.cpp similarity index 100% rename from Clas12Banks/region_fdet.cpp rename to Clas12Banks3/region_fdet.cpp diff --git a/Clas12Banks/region_fdet.h b/Clas12Banks3/region_fdet.h similarity index 100% rename from Clas12Banks/region_fdet.h rename to Clas12Banks3/region_fdet.h diff --git a/Clas12Banks/region_ft.cpp b/Clas12Banks3/region_ft.cpp similarity index 100% rename from Clas12Banks/region_ft.cpp rename to Clas12Banks3/region_ft.cpp diff --git a/Clas12Banks/region_ft.h b/Clas12Banks3/region_ft.h similarity index 100% rename from Clas12Banks/region_ft.h rename to Clas12Banks3/region_ft.h diff --git a/Clas12Banks/region_particle.cpp b/Clas12Banks3/region_particle.cpp similarity index 100% rename from Clas12Banks/region_particle.cpp rename to Clas12Banks3/region_particle.cpp diff --git a/Clas12Banks/region_particle.h b/Clas12Banks3/region_particle.h similarity index 100% rename from Clas12Banks/region_particle.h rename to Clas12Banks3/region_particle.h diff --git a/Clas12Banks/scaler.cpp b/Clas12Banks3/scaler.cpp similarity index 100% rename from Clas12Banks/scaler.cpp rename to Clas12Banks3/scaler.cpp diff --git a/Clas12Banks/scaler.h b/Clas12Banks3/scaler.h similarity index 100% rename from Clas12Banks/scaler.h rename to Clas12Banks3/scaler.h diff --git a/Clas12Banks/scintillator.cpp b/Clas12Banks3/scintillator.cpp similarity index 100% rename from Clas12Banks/scintillator.cpp rename to Clas12Banks3/scintillator.cpp diff --git a/Clas12Banks/scintillator.h b/Clas12Banks3/scintillator.h similarity index 100% rename from Clas12Banks/scintillator.h rename to Clas12Banks3/scintillator.h diff --git a/Clas12Banks/tracker.cpp b/Clas12Banks3/tracker.cpp similarity index 100% rename from Clas12Banks/tracker.cpp rename to Clas12Banks3/tracker.cpp diff --git a/Clas12Banks/tracker.h b/Clas12Banks3/tracker.h similarity index 100% rename from Clas12Banks/tracker.h rename to Clas12Banks3/tracker.h diff --git a/Clas12Banks/traj.cpp b/Clas12Banks3/traj.cpp similarity index 100% rename from Clas12Banks/traj.cpp rename to Clas12Banks3/traj.cpp diff --git a/Clas12Banks/traj.h b/Clas12Banks3/traj.h similarity index 100% rename from Clas12Banks/traj.h rename to Clas12Banks3/traj.h diff --git a/Clas12Banks/vectors.cpp b/Clas12Banks3/vectors.cpp similarity index 100% rename from Clas12Banks/vectors.cpp rename to Clas12Banks3/vectors.cpp diff --git a/Clas12Banks/vectors.h b/Clas12Banks3/vectors.h similarity index 100% rename from Clas12Banks/vectors.h rename to Clas12Banks3/vectors.h diff --git a/Clas12Banks/vtp.cpp b/Clas12Banks3/vtp.cpp similarity index 100% rename from Clas12Banks/vtp.cpp rename to Clas12Banks3/vtp.cpp diff --git a/Clas12Banks/vtp.h b/Clas12Banks3/vtp.h similarity index 100% rename from Clas12Banks/vtp.h rename to Clas12Banks3/vtp.h diff --git a/Clas12Banks4/CMakeLists.txt b/Clas12Banks4/CMakeLists.txt new file mode 100644 index 0000000..bad1fcf --- /dev/null +++ b/Clas12Banks4/CMakeLists.txt @@ -0,0 +1,13 @@ +ROOT_GENERATE_DICTIONARY(G__Clas12Banks4 vectors.h header.h particle.h mcparticle.h scaler.h vtp.h particle_detector.h scintillator.h tracker.h traj.h forwardtagger.h cherenkov.h calorimeter.h covmatrix.h region_particle.h region_ft.h region_fdet.h region_cdet.h clas12reader.h LINKDEF Clas12LinkDef.h) + +add_library(Clas12Banks4 SHARED vectors.cpp header.cpp particle.cpp mcparticle.cpp scaler.cpp vtp.cpp particle_detector.cpp scintillator.cpp tracker.cpp traj.cpp forwardtagger.cpp cherenkov.cpp calorimeter.cpp covmatrix.cpp region_particle.cpp region_ft.cpp region_fdet.cpp region_cdet.cpp clas12reader.cpp G__Clas12Banks4.cxx) + +target_link_libraries(Clas12Banks4 ${ROOT_LIBRARIES}) + + +FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks4/lib*) + +install (FILES ${ROOT_CLAS12_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") + + diff --git a/Clas12Banks4/Clas12LinkDef.h b/Clas12Banks4/Clas12LinkDef.h new file mode 100644 index 0000000..b8948c3 --- /dev/null +++ b/Clas12Banks4/Clas12LinkDef.h @@ -0,0 +1,28 @@ +#ifdef __CINT__ + +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; +#pragma link C++ nestedclasses; + +//#pragma link C++ defined_in "utils.h"; +#pragma link C++ class clas12::vectors+; +#pragma link C++ class clas12::header+; +#pragma link C++ class clas12::particle+; +#pragma link C++ class clas12::mcparticle+; +#pragma link C++ class clas12::scaler+; +#pragma link C++ class clas12::vtp+; +#pragma link C++ class clas12::particle_detector+; +#pragma link C++ class clas12::scintillator+; +#pragma link C++ class clas12::tracker+; +#pragma link C++ class clas12::traj+; +#pragma link C++ class clas12::forwardtagger+; +#pragma link C++ class clas12::cherenkov+; +#pragma link C++ class clas12::calorimeter+; +#pragma link C++ class clas12::covmatrix+; +#pragma link C++ class clas12::region_particle+; +#pragma link C++ class clas12::region_ft+; +#pragma link C++ class clas12::region_fdet+; +#pragma link C++ class clas12::region_cdet+; +#pragma link C++ class clas12::clas12reader+; +#endif diff --git a/Clas12Banks4/clas12reader.cpp b/Clas12Banks4/clas12reader.cpp index c588bd1..17f7507 100644 --- a/Clas12Banks4/clas12reader.cpp +++ b/Clas12Banks4/clas12reader.cpp @@ -8,7 +8,7 @@ namespace clas12 { - clas12reader::clas12reader(string filename){ + clas12reader::clas12reader(std::string filename){ cout<<" clas12reader::clas12reader reading "<getSize(); + _pids.clear(); + _pids.reserve(_nparts); + //Loop over particles and find their Pid + for(ushort i=0;i<_nparts;i++){ + _bparts->setEntry(i); + _pids.emplace_back(_bparts->getPid()); + } + //check if event is of the right type + if(!passPidSelect()) return false; + + //now getthe data for the rest of the banks _event.getStructure(*_bmcparts.get()); _event.getStructure(*_bcovmat.get()); _event.getStructure(*_bhead.get()); @@ -52,14 +78,23 @@ namespace clas12 { _event.getStructure(*_bft.get()); _event.getStructure(*_bvtp.get()); _event.getStructure(*_bscal.get()); + return true; } //////////////////////////////////////////////////////// ///initialise next event from the reader bool clas12reader::next(){ - if(!_reader.next()) - return false; - readEvent(); + clearEvent(); + //keep going until we get an event that passes + bool validEvent=false; + while(_reader.next()){ + validEvent=true; + if(readEvent()) //got one + break; + } + if(!validEvent) return false;//no more events in reader + + //can proceed with valid event sort(); return true; @@ -67,12 +102,20 @@ namespace clas12 { //////////////////////////////////////////////////////// ///initialise next event from the reader bool clas12reader::nextInRecord(){ - if(!_reader.nextInRecord()) - return false; - - readEvent(); + + clearEvent(); + //keep going until we get an event that passes + bool validEvent=false; + while(_reader.nextInRecord()){ + validEvent=true; + if(readEvent()) //got one + break; + } + if(!validEvent) return false;//no more events in record + + //can proceed with valid event sort(); - + return true; } //////////////////////////////////////////////////////// @@ -134,7 +177,42 @@ namespace clas12 { } } } - //////////////////////////////////////////////////////// + bool clas12reader::passPidSelect(){ + //if no selections take event + if(_pidSelect.empty()&&_pidSelectExact.empty()) return true; + + //check is there is at least enough particles + if(_pidSelectExact.size()+_pidSelect.size()>_nparts) + return false; + + //check if any unwanted particles + if(_zeroOfRestPid){ + auto uniquePids=_pids;//make a copy + std::sort(uniquePids.begin(), uniquePids.end()); + auto ip = std::unique(uniquePids.begin(), uniquePids.begin() + _nparts); + uniquePids.resize(std::distance(uniquePids.begin(), ip)); + //now just loop over the unique particle types + for(auto const& pid : uniquePids){ + //check if we have a PID not given in a selection + if(!(std::count(_givenPids.begin(),_givenPids.end(), pid))) + return false; + } + } + //check for requested exact matches + for(auto const& select : _pidSelectExact){ + if(!(select.second==getNPid(select.first))) + return false; + } + + //check for requeseted at least matches + for(auto const& select : _pidSelect){ + if((select.second>getNPid(select.first))) + return false; + } + return true; + } + + //////////////////////////////////////////////////////// ///Filter and return detParticles by given PID std::vector clas12reader::getByID(int id){ return container_filter(_detParticles, [id](region_part_ptr dr) diff --git a/Clas12Banks4/clas12reader.h b/Clas12Banks4/clas12reader.h index e86dcb8..fc85294 100644 --- a/Clas12Banks4/clas12reader.h +++ b/Clas12Banks4/clas12reader.h @@ -33,9 +33,13 @@ #include "region_ft.h" #include +#include +#include namespace clas12 { + using std::cout; + using std::endl; class clas12reader { @@ -44,7 +48,7 @@ namespace clas12 { clas12reader()=default; - clas12reader(string filename); + clas12reader(std::string filename); ~clas12reader()=default; hipo::reader& getReader(){return _reader;} @@ -52,8 +56,9 @@ namespace clas12 { bool next(); bool nextInRecord(); void sort(); - void readEvent(); - + bool readEvent(); + void clearEvent(); + void addARegionFDet(){ //Forward detector needs particles, calorimeter, scintillator, //track, cherenkov @@ -80,6 +85,19 @@ namespace clas12 { std::vector* getDetParticlesPtr(){return &_detParticles;} std::vector getByID(int id); + short getNPid(short pid){return std::count(_pids.begin(),_pids.end(), pid);}; + void addAtLeastPid(short pid,short n){ + _pidSelect[pid]=n; + _givenPids.push_back(pid); + } + void addExactPid(short pid,short n){ + _pidSelectExact[pid]=n; + _givenPids.push_back(pid); + } + void addZeroOfRestPid(){_zeroOfRestPid=true;}; + + bool passPidSelect(); + int getNParticles() const {return _detParticles.size();} private: @@ -110,12 +128,17 @@ namespace clas12 { std::vector _rfts; std::vector _detParticles; + std::vector _pids; + std::vector _givenPids; + std::map _pidSelect; + std::map _pidSelectExact; ushort _nparts=0; ushort _n_rfdets=0; ushort _n_rcdets=0; ushort _n_rfts=0; - + bool _zeroOfRestPid=false; + }; //helper functions diff --git a/Clas12Root/CMakeLists.txt b/Clas12Root/CMakeLists.txt index 0c10af1..4d88e69 100644 --- a/Clas12Root/CMakeLists.txt +++ b/Clas12Root/CMakeLists.txt @@ -1,11 +1,16 @@ -ROOT_GENERATE_DICTIONARY(G__Clas12Root BankHist.h HipoHist.h HipoTreeMaker.h HipoChain.h HipoRootAction.h HipoROOTOut.h ParticleHist.h HipoSelector.h ParticleTree.h LINKDEF Clas12RootLinkDef.h) +if(USE_HIPO3) + set(CLAS12ROOT Clas12Root3) +endif(USE_HIPO3) +if(USE_HIPO4) + set(CLAS12ROOT Clas12Root4) +endif(USE_HIPO4) -add_library(Clas12Root SHARED BankHist.cpp HipoHist.cpp HipoTreeMaker.cpp HipoChain.cpp HipoRootAction.cpp HipoROOTOut.cpp ParticleHist.cpp HipoSelector.cpp ParticleTree.cpp G__Clas12Root.cxx) +ROOT_GENERATE_DICTIONARY(G__${CLAS12ROOT} BankHist.h HipoHist.h HipoTreeMaker.h HipoChain.h HipoRootAction.h HipoROOTOut.h ParticleHist.h HipoSelector.h ParticleTree.h LINKDEF Clas12RootLinkDef.h) -target_link_libraries(Clas12Root ${ROOT_LIBRARIES}) +add_library(${CLAS12ROOT} SHARED BankHist.cpp HipoHist.cpp HipoTreeMaker.cpp HipoChain.cpp HipoRootAction.cpp HipoROOTOut.cpp ParticleHist.cpp HipoSelector.cpp ParticleTree.cpp G__${CLAS12ROOT}.cxx) + +target_link_libraries(${CLAS12ROOT} ${ROOT_LIBRARIES}) -#install(TARGETS Clas12Root -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") FILE(GLOB ROOT_C12ROOT_PCM ${CMAKE_BINARY_DIR}/Clas12Root/lib*) diff --git a/Clas12Root/src/CMakeLists.txt b/Clas12Root/src/CMakeLists.txt index e24ddac..4c7ab61 100644 --- a/Clas12Root/src/CMakeLists.txt +++ b/Clas12Root/src/CMakeLists.txt @@ -1,9 +1,18 @@ +if(USE_HIPO3) + add_executable (particleDraw3 particleDraw3.cpp) + target_link_libraries(particleDraw3 ${ROOT_LIBRARIES}) -add_executable (particleDraw particleDraw.cpp) -target_link_libraries(particleDraw ${ROOT_LIBRARIES}) + add_executable (particleTree3 particleTree3.cpp) + target_link_libraries(particleTree3 ${ROOT_LIBRARIES}) + install (TARGETS particleDraw3 particleTree3 DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif(USE_HIPO3) -add_executable (particleTree particleTree.cpp) -target_link_libraries(particleTree ${ROOT_LIBRARIES}) +if(USE_HIPO4) + add_executable (particleDraw4 particleDraw4.cpp) + target_link_libraries(particleDraw4 ${ROOT_LIBRARIES}) + add_executable (particleTree4 particleTree4.cpp) + target_link_libraries(particleTree4 ${ROOT_LIBRARIES}) + install (TARGETS particleDraw4 particleTree4 DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif(USE_HIPO4) -install (TARGETS particleDraw particleTree DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/Clas12Root/src/particleDraw.cpp b/Clas12Root/src/particleDraw3.cpp similarity index 85% rename from Clas12Root/src/particleDraw.cpp rename to Clas12Root/src/particleDraw3.cpp index 2dc3b6c..afe847c 100644 --- a/Clas12Root/src/particleDraw.cpp +++ b/Clas12Root/src/particleDraw3.cpp @@ -16,9 +16,9 @@ int main(int argc, char **argv) { app->SetPrompt("ParticleHist [%d] "); app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); app->ProcessLine(Form("clas12root::ParticleHist hists{\"%s\"}",filename.Data())); if(argc==3) { TString script=argv[2]; diff --git a/Clas12Root/src/particleDraw4.cpp b/Clas12Root/src/particleDraw4.cpp new file mode 100644 index 0000000..3295a64 --- /dev/null +++ b/Clas12Root/src/particleDraw4.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include "ParticleHist.h" + + +int main(int argc, char **argv) { + + TString filename=argv[1]; + if(!filename.EndsWith(".hipo")){ + std::cerr<<"Need a hipo file! usage \n particleDraw dir/file.hipo OptionalScript.C"<SetPrompt("ParticleHist [%d] "); + + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); + app->ProcessLine(Form("clas12root::ParticleHist hists{\"%s\"}",filename.Data())); + if(argc==3) { + TString script=argv[2]; + if(script.EndsWith(".C")) + app->ProcessLine(Form(".x %s",script.Data())); + app->Run(); + } + else app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/particleTree.cpp b/Clas12Root/src/particleTree3.cpp similarity index 88% rename from Clas12Root/src/particleTree.cpp rename to Clas12Root/src/particleTree3.cpp index d938461..dcf7c93 100644 --- a/Clas12Root/src/particleTree.cpp +++ b/Clas12Root/src/particleTree3.cpp @@ -22,9 +22,9 @@ int main(int argc, char **argv) { app->SetPrompt("ParticleTree [%d] "); app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); app->ProcessLine(Form("clas12root::ParticleTree treemaker{\"%s\",\"%s\"}",infilename.Data(),outfilename.Data())); if(argc==4) { diff --git a/Clas12Root/src/particleTree4.cpp b/Clas12Root/src/particleTree4.cpp new file mode 100644 index 0000000..0d2dd46 --- /dev/null +++ b/Clas12Root/src/particleTree4.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include "ParticleTree.h" + + +int main(int argc, char **argv) { + + TString infilename=argv[1]; + if(!infilename.EndsWith(".hipo")){ + std::cerr<<"Need a hipo file! usage \n particleDraw dir/file.hipo OptionalScript.C"<SetPrompt("ParticleTree [%d] "); + + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); + app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); + app->ProcessLine(Form("clas12root::ParticleTree treemaker{\"%s\",\"%s\"}",infilename.Data(),outfilename.Data())); + + if(argc==4) { + TString script=argv[3]; + std::cout<ProcessLine(Form(".x %s",script.Data())); + app->Run(); + } + else app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Hipo/CMakeLists.txt b/Hipo/CMakeLists.txt deleted file mode 100644 index 2a8f4fd..0000000 --- a/Hipo/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ - -ROOT_GENERATE_DICTIONARY(G__Hipo utils.h dictionary.h node.h event.h record.h reader.h bank.h LINKDEF HipoLinkDef.h) - -add_library(Hipo SHARED utils.cpp dictionary.cpp node.cpp event.cpp record.cpp reader.cpp bank.cpp G__Hipo.cxx) -target_link_libraries(Hipo ${ROOT_LIBRARIES}) - -#install(TARGETS Hipo -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") - -FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo/lib*) - -install (FILES ${ROOT_HIPO_PCM} - DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Hipo3/CMakeLists.txt b/Hipo3/CMakeLists.txt new file mode 100644 index 0000000..99aa305 --- /dev/null +++ b/Hipo3/CMakeLists.txt @@ -0,0 +1,13 @@ + +ROOT_GENERATE_DICTIONARY(G__Hipo3 utils.h dictionary.h node.h event.h record.h reader.h bank.h LINKDEF HipoLinkDef.h) + +add_library(Hipo3 SHARED utils.cpp dictionary.cpp node.cpp event.cpp record.cpp reader.cpp bank.cpp G__Hipo3.cxx) +target_link_libraries(Hipo3 ${ROOT_LIBRARIES}) + +#install(TARGETS Hipo +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo3/lib*) + +install (FILES ${ROOT_HIPO_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Hipo/HipoLinkDef.h b/Hipo3/HipoLinkDef.h similarity index 100% rename from Hipo/HipoLinkDef.h rename to Hipo3/HipoLinkDef.h diff --git a/Hipo/Makefile b/Hipo3/Makefile similarity index 100% rename from Hipo/Makefile rename to Hipo3/Makefile diff --git a/Hipo/bank.cpp b/Hipo3/bank.cpp similarity index 100% rename from Hipo/bank.cpp rename to Hipo3/bank.cpp diff --git a/Hipo/bank.h b/Hipo3/bank.h similarity index 100% rename from Hipo/bank.h rename to Hipo3/bank.h diff --git a/Hipo/data.cpp b/Hipo3/data.cpp similarity index 100% rename from Hipo/data.cpp rename to Hipo3/data.cpp diff --git a/Hipo/data.h b/Hipo3/data.h similarity index 100% rename from Hipo/data.h rename to Hipo3/data.h diff --git a/Hipo/dictionary.cpp b/Hipo3/dictionary.cpp similarity index 100% rename from Hipo/dictionary.cpp rename to Hipo3/dictionary.cpp diff --git a/Hipo/dictionary.h b/Hipo3/dictionary.h similarity index 100% rename from Hipo/dictionary.h rename to Hipo3/dictionary.h diff --git a/Hipo/event.cpp b/Hipo3/event.cpp similarity index 100% rename from Hipo/event.cpp rename to Hipo3/event.cpp diff --git a/Hipo/event.h b/Hipo3/event.h similarity index 100% rename from Hipo/event.h rename to Hipo3/event.h diff --git a/Hipo/hipoexceptions.h b/Hipo3/hipoexceptions.h similarity index 100% rename from Hipo/hipoexceptions.h rename to Hipo3/hipoexceptions.h diff --git a/Hipo/node.cpp b/Hipo3/node.cpp similarity index 100% rename from Hipo/node.cpp rename to Hipo3/node.cpp diff --git a/Hipo/node.h b/Hipo3/node.h similarity index 100% rename from Hipo/node.h rename to Hipo3/node.h diff --git a/Hipo/reader.cpp b/Hipo3/reader.cpp similarity index 100% rename from Hipo/reader.cpp rename to Hipo3/reader.cpp diff --git a/Hipo/reader.h b/Hipo3/reader.h similarity index 100% rename from Hipo/reader.h rename to Hipo3/reader.h diff --git a/Hipo/record.cpp b/Hipo3/record.cpp similarity index 100% rename from Hipo/record.cpp rename to Hipo3/record.cpp diff --git a/Hipo/record.h b/Hipo3/record.h similarity index 100% rename from Hipo/record.h rename to Hipo3/record.h diff --git a/Hipo/text.cpp b/Hipo3/text.cpp similarity index 100% rename from Hipo/text.cpp rename to Hipo3/text.cpp diff --git a/Hipo/text.h b/Hipo3/text.h similarity index 100% rename from Hipo/text.h rename to Hipo3/text.h diff --git a/Hipo/utils.cpp b/Hipo3/utils.cpp similarity index 100% rename from Hipo/utils.cpp rename to Hipo3/utils.cpp diff --git a/Hipo/utils.h b/Hipo3/utils.h similarity index 100% rename from Hipo/utils.h rename to Hipo3/utils.h diff --git a/Hipo/wrapper.cpp b/Hipo3/wrapper.cpp similarity index 100% rename from Hipo/wrapper.cpp rename to Hipo3/wrapper.cpp diff --git a/Hipo/writer.cpp b/Hipo3/writer.cpp similarity index 100% rename from Hipo/writer.cpp rename to Hipo3/writer.cpp diff --git a/Hipo/writer.h b/Hipo3/writer.h similarity index 100% rename from Hipo/writer.h rename to Hipo3/writer.h diff --git a/Hipo4/CMakeLists.txt b/Hipo4/CMakeLists.txt new file mode 100644 index 0000000..55efe6d --- /dev/null +++ b/Hipo4/CMakeLists.txt @@ -0,0 +1,13 @@ + +ROOT_GENERATE_DICTIONARY(G__Hipo4 reader.h bank.h LINKDEF HipoLinkDef.h) + +add_library(Hipo4 SHARED utils.cpp dictionary.cpp event.cpp record.cpp recordbuilder.cpp reader.cpp bank.cpp G__Hipo4.cxx) +target_link_libraries(Hipo4 ${ROOT_LIBRARIES}) + +#install(TARGETS Hipo +# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo4/lib*) + +install (FILES ${ROOT_HIPO_PCM} + DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Hipo/Clas12RootLinkDef.h b/Hipo4/HipoLinkDef.h similarity index 52% rename from Hipo/Clas12RootLinkDef.h rename to Hipo4/HipoLinkDef.h index b3f3392..65c85ea 100644 --- a/Hipo/Clas12RootLinkDef.h +++ b/Hipo4/HipoLinkDef.h @@ -6,12 +6,7 @@ #pragma link C++ nestedclasses; //#pragma link C++ defined_in "utils.h"; -#pragma link C++ class ; -#pragma link C++ class ; -#pragma link C++ class ; -#pragma link C++ class ; -#pragma link C++ class ; -#pragma link C++ class ; -#pragma link C++ class ; +#pragma link C++ class hipo::bank+; +#pragma link C++ class hipo::reader+; #endif diff --git a/include/lz4.h b/include/lz4.h deleted file mode 100644 index 64914ab..0000000 --- a/include/lz4.h +++ /dev/null @@ -1,607 +0,0 @@ -/* - * LZ4 - Fast LZ compression algorithm - * Header File - * Copyright (C) 2011-2017, Yann Collet. - - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 homepage : http://www.lz4.org - - LZ4 source repository : https://github.com/lz4/lz4 -*/ -#if defined (__cplusplus) -extern "C" { -#endif - -#ifndef LZ4_H_2983827168210 -#define LZ4_H_2983827168210 - -/* --- Dependency --- */ -#include /* size_t */ - - -/** - Introduction - - LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, - scalable with multi-cores CPU. It features an extremely fast decoder, with speed in - multiple GB/s per core, typically reaching RAM speed limits on multi-core systems. - - The LZ4 compression library provides in-memory compression and decompression functions. - Compression can be done in: - - a single step (described as Simple Functions) - - a single step, reusing a context (described in Advanced Functions) - - unbounded multiple steps (described as Streaming compression) - - lz4.h provides block compression functions. It gives full buffer control to user. - Decompressing an lz4-compressed block also requires metadata (such as compressed size). - Each application is free to encode such metadata in whichever way it wants. - - An additional format, called LZ4 frame specification (doc/lz4_Frame_format.md), - take care of encoding standard metadata alongside LZ4-compressed blocks. - If your application requires interoperability, it's recommended to use it. - A library is provided to take care of it, see lz4frame.h. -*/ - -/*^*************************************************************** -* Export parameters -*****************************************************************/ -/* -* LZ4_DLL_EXPORT : -* Enable exporting of functions when building a Windows DLL -* LZ4LIB_VISIBILITY : -* Control library symbols visibility. -*/ -#ifndef LZ4LIB_VISIBILITY -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define LZ4LIB_VISIBILITY __attribute__ ((visibility ("default"))) -# else -# define LZ4LIB_VISIBILITY -# endif -#endif -#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1) -# define LZ4LIB_API __declspec(dllexport) LZ4LIB_VISIBILITY -#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1) -# define LZ4LIB_API __declspec(dllimport) LZ4LIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ -#else -# define LZ4LIB_API LZ4LIB_VISIBILITY -#endif - -/*------ Version ------*/ -#define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */ -#define LZ4_VERSION_MINOR 8 /* for new (non-breaking) interface capabilities */ -#define LZ4_VERSION_RELEASE 2 /* for tweaks, bug-fixes, or development */ - -#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE) - -#define LZ4_LIB_VERSION LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE -#define LZ4_QUOTE(str) #str -#define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str) -#define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION) - -LZ4LIB_API int LZ4_versionNumber (void); /**< library version number; useful to check dll version */ -LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; unseful to check dll version */ - - -/*-************************************ -* Tuning parameter -**************************************/ -/*! - * LZ4_MEMORY_USAGE : - * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) - * Increasing memory usage improves compression ratio - * Reduced memory usage may improve speed, thanks to cache effect - * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache - */ -#ifndef LZ4_MEMORY_USAGE -# define LZ4_MEMORY_USAGE 14 -#endif - -/*-************************************ -* Simple Functions -**************************************/ -/*! LZ4_compress_default() : - Compresses 'srcSize' bytes from buffer 'src' - into already allocated 'dst' buffer of size 'dstCapacity'. - Compression is guaranteed to succeed if 'dstCapacity' >= LZ4_compressBound(srcSize). - It also runs faster, so it's a recommended setting. - If the function cannot compress 'src' into a more limited 'dst' budget, - compression stops *immediately*, and the function result is zero. - Note : as a consequence, 'dst' content is not valid. - Note 2 : This function is protected against buffer overflow scenarios (never writes outside 'dst' buffer, nor read outside 'source' buffer). - srcSize : max supported value is LZ4_MAX_INPUT_SIZE. - dstCapacity : size of buffer 'dst' (which must be already allocated) - return : the number of bytes written into buffer 'dst' (necessarily <= dstCapacity) - or 0 if compression fails */ -LZ4LIB_API int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); - -/*! LZ4_decompress_safe() : - compressedSize : is the exact complete size of the compressed block. - dstCapacity : is the size of destination buffer, which must be already allocated. - return : the number of bytes decompressed into destination buffer (necessarily <= dstCapacity) - If destination buffer is not large enough, decoding will stop and output an error code (negative value). - If the source stream is detected malformed, the function will stop decoding and return a negative result. - This function is protected against malicious data packets. -*/ -LZ4LIB_API int LZ4_decompress_safe (const char* src, char* dst, int compressedSize, int dstCapacity); - - -/*-************************************ -* Advanced Functions -**************************************/ -#define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */ -#define LZ4_COMPRESSBOUND(isize) ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16) - -/*! -LZ4_compressBound() : - Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible) - This function is primarily useful for memory allocation purposes (destination buffer size). - Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example). - Note that LZ4_compress_default() compresses faster when dstCapacity is >= LZ4_compressBound(srcSize) - inputSize : max supported value is LZ4_MAX_INPUT_SIZE - return : maximum output size in a "worst case" scenario - or 0, if input size is incorrect (too large or negative) -*/ -LZ4LIB_API int LZ4_compressBound(int inputSize); - -/*! -LZ4_compress_fast() : - Same as LZ4_compress_default(), but allows selection of "acceleration" factor. - The larger the acceleration value, the faster the algorithm, but also the lesser the compression. - It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed. - An acceleration value of "1" is the same as regular LZ4_compress_default() - Values <= 0 will be replaced by ACCELERATION_DEFAULT (currently == 1, see lz4.c). -*/ -LZ4LIB_API int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); - - -/*! -LZ4_compress_fast_extState() : - Same compression function, just using an externally allocated memory space to store compression state. - Use LZ4_sizeofState() to know how much memory must be allocated, - and allocate it on 8-bytes boundaries (using malloc() typically). - Then, provide it as 'void* state' to compression function. -*/ -LZ4LIB_API int LZ4_sizeofState(void); -LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); - - -/*! -LZ4_compress_destSize() : - Reverse the logic : compresses as much data as possible from 'src' buffer - into already allocated buffer 'dst' of size 'targetDestSize'. - This function either compresses the entire 'src' content into 'dst' if it's large enough, - or fill 'dst' buffer completely with as much data as possible from 'src'. - *srcSizePtr : will be modified to indicate how many bytes where read from 'src' to fill 'dst'. - New value is necessarily <= old value. - return : Nb bytes written into 'dst' (necessarily <= targetDestSize) - or 0 if compression fails -*/ -LZ4LIB_API int LZ4_compress_destSize (const char* src, char* dst, int* srcSizePtr, int targetDstSize); - - -/*! -LZ4_decompress_fast() : **unsafe!** -This function is a bit faster than LZ4_decompress_safe(), -but it may misbehave on malformed input because it doesn't perform full validation of compressed data. - originalSize : is the uncompressed size to regenerate - Destination buffer must be already allocated, and its size must be >= 'originalSize' bytes. - return : number of bytes read from source buffer (== compressed size). - If the source stream is detected malformed, the function stops decoding and return a negative result. - note : This function is only usable if the originalSize of uncompressed data is known in advance. - The caller should also check that all the compressed input has been consumed properly, - i.e. that the return value matches the size of the buffer with compressed input. - The function never writes past the output buffer. However, since it doesn't know its 'src' size, - it may read past the intended input. Also, because match offsets are not validated during decoding, - reads from 'src' may underflow. Use this function in trusted environment **only**. -*/ -LZ4LIB_API int LZ4_decompress_fast (const char* src, char* dst, int originalSize); - -/*! -LZ4_decompress_safe_partial() : - This function decompress a compressed block of size 'srcSize' at position 'src' - into destination buffer 'dst' of size 'dstCapacity'. - The function will decompress a minimum of 'targetOutputSize' bytes, and stop after that. - However, it's not accurate, and may write more than 'targetOutputSize' (but always <= dstCapacity). - @return : the number of bytes decoded in the destination buffer (necessarily <= dstCapacity) - Note : this number can also be < targetOutputSize, if compressed block contains less data. - Therefore, always control how many bytes were decoded. - If source stream is detected malformed, function returns a negative result. - This function is protected against malicious data packets. -*/ -LZ4LIB_API int LZ4_decompress_safe_partial (const char* src, char* dst, int srcSize, int targetOutputSize, int dstCapacity); - - -/*-********************************************* -* Streaming Compression Functions -***********************************************/ -typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */ - -/*! LZ4_createStream() and LZ4_freeStream() : - * LZ4_createStream() will allocate and initialize an `LZ4_stream_t` structure. - * LZ4_freeStream() releases its memory. - */ -LZ4LIB_API LZ4_stream_t* LZ4_createStream(void); -LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); - -/*! LZ4_resetStream() : - * An LZ4_stream_t structure can be allocated once and re-used multiple times. - * Use this function to start compressing a new stream. - */ -LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr); - -/*! LZ4_loadDict() : - * Use this function to load a static dictionary into LZ4_stream_t. - * Any previous data will be forgotten, only 'dictionary' will remain in memory. - * Loading a size of 0 is allowed, and is the same as reset. - * @return : dictionary size, in bytes (necessarily <= 64 KB) - */ -LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); - -/*! LZ4_compress_fast_continue() : - * Compress 'src' content using data from previously compressed blocks, for better compression ratio. - * 'dst' buffer must be already allocated. - * If dstCapacity >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster. - * - * Important : The previous 64KB of source data is assumed to remain present and unmodified in memory! - * - * Special 1 : When input is a double-buffer, they can have any size, including < 64 KB. - * Make sure that buffers are separated by at least one byte. - * This way, each block only depends on previous block. - * Special 2 : If input buffer is a ring-buffer, it can have any size, including < 64 KB. - * - * @return : size of compressed block - * or 0 if there is an error (typically, cannot fit into 'dst'). - * After an error, the stream status is invalid, it can only be reset or freed. - */ -LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); - -/*! LZ4_saveDict() : - * If last 64KB data cannot be guaranteed to remain available at its current memory location, - * save it into a safer place (char* safeBuffer). - * This is schematically equivalent to a memcpy() followed by LZ4_loadDict(), - * but is much faster, because LZ4_saveDict() doesn't need to rebuild tables. - * @return : saved dictionary size in bytes (necessarily <= maxDictSize), or 0 if error. - */ -LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int maxDictSize); - - -/*-********************************************** -* Streaming Decompression Functions -* Bufferless synchronous API -************************************************/ -typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* tracking context */ - -/*! LZ4_createStreamDecode() and LZ4_freeStreamDecode() : - * creation / destruction of streaming decompression tracking context. - * A tracking context can be re-used multiple times. - */ -LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void); -LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); - -/*! LZ4_setStreamDecode() : - * An LZ4_streamDecode_t context can be allocated once and re-used multiple times. - * Use this function to start decompression of a new stream of blocks. - * A dictionary can optionnally be set. Use NULL or size 0 for a reset order. - * Dictionary is presumed stable : it must remain accessible and unmodified during next decompression. - * @return : 1 if OK, 0 if error - */ -LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); - -/*! LZ4_decoderRingBufferSize() : v1.8.2 - * Note : in a ring buffer scenario (optional), - * blocks are presumed decompressed next to each other - * up to the moment there is not enough remaining space for next block (remainingSize < maxBlockSize), - * at which stage it resumes from beginning of ring buffer. - * When setting such a ring buffer for streaming decompression, - * provides the minimum size of this ring buffer - * to be compatible with any source respecting maxBlockSize condition. - * @return : minimum ring buffer size, - * or 0 if there is an error (invalid maxBlockSize). - */ -LZ4LIB_API int LZ4_decoderRingBufferSize(int maxBlockSize); -#define LZ4_DECODER_RING_BUFFER_SIZE(mbs) (65536 + 14 + (mbs)) /* for static allocation; mbs presumed valid */ - -/*! LZ4_decompress_*_continue() : - * These decoding functions allow decompression of consecutive blocks in "streaming" mode. - * A block is an unsplittable entity, it must be presented entirely to a decompression function. - * Decompression functions only accepts one block at a time. - * The last 64KB of previously decoded data *must* remain available and unmodified at the memory position where they were decoded. - * If less than 64KB of data has been decoded, all the data must be present. - * - * Special : if decompression side sets a ring buffer, it must respect one of the following conditions : - * - Decompression buffer size is _at least_ LZ4_decoderRingBufferSize(maxBlockSize). - * maxBlockSize is the maximum size of any single block. It can have any value > 16 bytes. - * In which case, encoding and decoding buffers do not need to be synchronized. - * Actually, data can be produced by any source compliant with LZ4 format specification, and respecting maxBlockSize. - * - Synchronized mode : - * Decompression buffer size is _exactly_ the same as compression buffer size, - * and follows exactly same update rule (block boundaries at same positions), - * and decoding function is provided with exact decompressed size of each block (exception for last block of the stream), - * _then_ decoding & encoding ring buffer can have any size, including small ones ( < 64 KB). - * - Decompression buffer is larger than encoding buffer, by a minimum of maxBlockSize more bytes. - * In which case, encoding and decoding buffers do not need to be synchronized, - * and encoding ring buffer can have any size, including small ones ( < 64 KB). - * - * Whenever these conditions are not possible, - * save the last 64KB of decoded data into a safe buffer where it can't be modified during decompression, - * then indicate where this data is saved using LZ4_setStreamDecode(), before decompressing next block. -*/ -LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int srcSize, int dstCapacity); -LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* src, char* dst, int originalSize); - - -/*! LZ4_decompress_*_usingDict() : - * These decoding functions work the same as - * a combination of LZ4_setStreamDecode() followed by LZ4_decompress_*_continue() - * They are stand-alone, and don't need an LZ4_streamDecode_t structure. - * Dictionary is presumed stable : it must remain accessible and unmodified during next decompression. - */ -LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* src, char* dst, int srcSize, int dstCapcity, const char* dictStart, int dictSize); -LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* src, char* dst, int originalSize, const char* dictStart, int dictSize); - - -/*^********************************************** - * !!!!!! STATIC LINKING ONLY !!!!!! - ***********************************************/ - -/*-************************************ - * Unstable declarations - ************************************** - * Declarations in this section should be considered unstable. - * Use at your own peril, etc., etc. - * They may be removed in the future. - * Their signatures may change. - **************************************/ - -#ifdef LZ4_STATIC_LINKING_ONLY - -/*! LZ4_resetStream_fast() : - * Use this, like LZ4_resetStream(), to prepare a context for a new chain of - * calls to a streaming API (e.g., LZ4_compress_fast_continue()). - * - * Note: - * Using this in advance of a non- streaming-compression function is redundant, - * and potentially bad for performance, since they all perform their own custom - * reset internally. - * - * Differences from LZ4_resetStream(): - * When an LZ4_stream_t is known to be in a internally coherent state, - * it can often be prepared for a new compression with almost no work, only - * sometimes falling back to the full, expensive reset that is always required - * when the stream is in an indeterminate state (i.e., the reset performed by - * LZ4_resetStream()). - * - * LZ4_streams are guaranteed to be in a valid state when: - * - returned from LZ4_createStream() - * - reset by LZ4_resetStream() - * - memset(stream, 0, sizeof(LZ4_stream_t)), though this is discouraged - * - the stream was in a valid state and was reset by LZ4_resetStream_fast() - * - the stream was in a valid state and was then used in any compression call - * that returned success - * - the stream was in an indeterminate state and was used in a compression - * call that fully reset the state (e.g., LZ4_compress_fast_extState()) and - * that returned success - * - * When a stream isn't known to be in a valid state, it is not safe to pass to - * any fastReset or streaming function. It must first be cleansed by the full - * LZ4_resetStream(). - */ -LZ4LIB_API void LZ4_resetStream_fast (LZ4_stream_t* streamPtr); - -/*! LZ4_compress_fast_extState_fastReset() : - * A variant of LZ4_compress_fast_extState(). - * - * Using this variant avoids an expensive initialization step. It is only safe - * to call if the state buffer is known to be correctly initialized already - * (see above comment on LZ4_resetStream_fast() for a definition of "correctly - * initialized"). From a high level, the difference is that this function - * initializes the provided state with a call to something like - * LZ4_resetStream_fast() while LZ4_compress_fast_extState() starts with a - * call to LZ4_resetStream(). - */ -LZ4LIB_API int LZ4_compress_fast_extState_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); - -/*! LZ4_attach_dictionary() : - * This is an experimental API that allows for the efficient use of a - * static dictionary many times. - * - * Rather than re-loading the dictionary buffer into a working context before - * each compression, or copying a pre-loaded dictionary's LZ4_stream_t into a - * working LZ4_stream_t, this function introduces a no-copy setup mechanism, - * in which the working stream references the dictionary stream in-place. - * - * Several assumptions are made about the state of the dictionary stream. - * Currently, only streams which have been prepared by LZ4_loadDict() should - * be expected to work. - * - * Alternatively, the provided dictionary stream pointer may be NULL, in which - * case any existing dictionary stream is unset. - * - * If a dictionary is provided, it replaces any pre-existing stream history. - * The dictionary contents are the only history that can be referenced and - * logically immediately precede the data compressed in the first subsequent - * compression call. - * - * The dictionary will only remain attached to the working stream through the - * first compression call, at the end of which it is cleared. The dictionary - * stream (and source buffer) must remain in-place / accessible / unchanged - * through the completion of the first compression call on the stream. - */ -LZ4LIB_API void LZ4_attach_dictionary(LZ4_stream_t *working_stream, const LZ4_stream_t *dictionary_stream); - -#endif - -/*-************************************ - * Private definitions - ************************************** - * Do not use these definitions. - * They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`. - * Using these definitions will expose code to API and/or ABI break in future versions of the library. - **************************************/ -#define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2) -#define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE) -#define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG) /* required as macro for static allocation */ - -#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -#include - -typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; -struct LZ4_stream_t_internal { - uint32_t hashTable[LZ4_HASH_SIZE_U32]; - uint32_t currentOffset; - uint16_t initCheck; - uint16_t tableType; - const uint8_t* dictionary; - const LZ4_stream_t_internal* dictCtx; - uint32_t dictSize; -}; - -typedef struct { - const uint8_t* externalDict; - size_t extDictSize; - const uint8_t* prefixEnd; - size_t prefixSize; -} LZ4_streamDecode_t_internal; - -#else - -typedef struct LZ4_stream_t_internal LZ4_stream_t_internal; -struct LZ4_stream_t_internal { - unsigned int hashTable[LZ4_HASH_SIZE_U32]; - unsigned int currentOffset; - unsigned short initCheck; - unsigned short tableType; - const unsigned char* dictionary; - const LZ4_stream_t_internal* dictCtx; - unsigned int dictSize; -}; - -typedef struct { - const unsigned char* externalDict; - size_t extDictSize; - const unsigned char* prefixEnd; - size_t prefixSize; -} LZ4_streamDecode_t_internal; - -#endif - -/*! - * LZ4_stream_t : - * information structure to track an LZ4 stream. - * init this structure before first use. - * note : only use in association with static linking ! - * this definition is not API/ABI safe, - * it may change in a future version ! - */ -#define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4) -#define LZ4_STREAMSIZE (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long)) -union LZ4_stream_u { - unsigned long long table[LZ4_STREAMSIZE_U64]; - LZ4_stream_t_internal internal_donotuse; -} ; /* previously typedef'd to LZ4_stream_t */ - - -/*! - * LZ4_streamDecode_t : - * information structure to track an LZ4 stream during decompression. - * init this structure using LZ4_setStreamDecode (or memset()) before first use - * note : only use in association with static linking ! - * this definition is not API/ABI safe, - * and may change in a future version ! - */ -#define LZ4_STREAMDECODESIZE_U64 4 -#define LZ4_STREAMDECODESIZE (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long)) -union LZ4_streamDecode_u { - unsigned long long table[LZ4_STREAMDECODESIZE_U64]; - LZ4_streamDecode_t_internal internal_donotuse; -} ; /* previously typedef'd to LZ4_streamDecode_t */ - - -/*-************************************ -* Obsolete Functions -**************************************/ - -/*! Deprecation warnings - Should deprecation warnings be a problem, - it is generally possible to disable them, - typically with -Wno-deprecated-declarations for gcc - or _CRT_SECURE_NO_WARNINGS in Visual. - Otherwise, it's also possible to define LZ4_DISABLE_DEPRECATE_WARNINGS */ -#ifdef LZ4_DISABLE_DEPRECATE_WARNINGS -# define LZ4_DEPRECATED(message) /* disable deprecation warnings */ -#else -# define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ -# define LZ4_DEPRECATED(message) [[deprecated(message)]] -# elif (LZ4_GCC_VERSION >= 405) || defined(__clang__) -# define LZ4_DEPRECATED(message) __attribute__((deprecated(message))) -# elif (LZ4_GCC_VERSION >= 301) -# define LZ4_DEPRECATED(message) __attribute__((deprecated)) -# elif defined(_MSC_VER) -# define LZ4_DEPRECATED(message) __declspec(deprecated(message)) -# else -# pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler") -# define LZ4_DEPRECATED(message) -# endif -#endif /* LZ4_DISABLE_DEPRECATE_WARNINGS */ - -/* Obsolete compression functions */ -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress (const char* source, char* dest, int sourceSize); -LZ4_DEPRECATED("use LZ4_compress_default() instead") LZ4LIB_API int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_withState (void* state, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_extState() instead") LZ4LIB_API int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_fast_continue() instead") LZ4LIB_API int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize); - -/* Obsolete decompression functions */ -LZ4_DEPRECATED("use LZ4_decompress_fast() instead") LZ4LIB_API int LZ4_uncompress (const char* source, char* dest, int outputSize); -LZ4_DEPRECATED("use LZ4_decompress_safe() instead") LZ4LIB_API int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); - -/* Obsolete streaming functions; degraded functionality; do not use! - * - * In order to perform streaming compression, these functions depended on data - * that is no longer tracked in the state. They have been preserved as well as - * possible: using them will still produce a correct output. However, they don't - * actually retain any history between compression calls. The compression ratio - * achieved will therefore be no better than compressing each chunk - * independently. - */ -LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API void* LZ4_create (char* inputBuffer); -LZ4_DEPRECATED("Use LZ4_createStream() instead") LZ4LIB_API int LZ4_sizeofStreamState(void); -LZ4_DEPRECATED("Use LZ4_resetStream() instead") LZ4LIB_API int LZ4_resetStreamState(void* state, char* inputBuffer); -LZ4_DEPRECATED("Use LZ4_saveDict() instead") LZ4LIB_API char* LZ4_slideInputBuffer (void* state); - -/* Obsolete streaming decoding functions */ -LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") LZ4LIB_API int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize); -LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") LZ4LIB_API int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize); - -#endif /* LZ4_H_2983827168210 */ - - -#if defined (__cplusplus) -} -#endif diff --git a/include/lz4frame.h b/include/lz4frame.h deleted file mode 100644 index fb434ff..0000000 --- a/include/lz4frame.h +++ /dev/null @@ -1,532 +0,0 @@ -/* - LZ4 auto-framing library - Header File - Copyright (C) 2011-2017, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 source repository : https://github.com/lz4/lz4 - - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c -*/ - -/* LZ4F is a stand-alone API to create LZ4-compressed frames - * conformant with specification v1.5.1. - * It also offers streaming capabilities. - * lz4.h is not required when using lz4frame.h. - * */ - -#ifndef LZ4F_H_09782039843 -#define LZ4F_H_09782039843 - -#if defined (__cplusplus) -extern "C" { -#endif - -/* --- Dependency --- */ -#include /* size_t */ - - -/** - Introduction - - lz4frame.h implements LZ4 frame specification (doc/lz4_Frame_format.md). - lz4frame.h provides frame compression functions that take care - of encoding standard metadata alongside LZ4-compressed blocks. -*/ - -/*-*************************************************************** - * Compiler specifics - *****************************************************************/ -/* LZ4_DLL_EXPORT : - * Enable exporting of functions when building a Windows DLL - * LZ4FLIB_API : - * Control library symbols visibility. - */ -#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1) -# define LZ4FLIB_API __declspec(dllexport) -#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1) -# define LZ4FLIB_API __declspec(dllimport) -#elif defined(__GNUC__) && (__GNUC__ >= 4) -# define LZ4FLIB_API __attribute__ ((__visibility__ ("default"))) -#else -# define LZ4FLIB_API -#endif - -#ifdef LZ4F_DISABLE_DEPRECATE_WARNINGS -# define LZ4F_DEPRECATE(x) x -#else -# if defined(_MSC_VER) -# define LZ4F_DEPRECATE(x) x /* __declspec(deprecated) x - only works with C++ */ -# elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6)) -# define LZ4F_DEPRECATE(x) x __attribute__((deprecated)) -# else -# define LZ4F_DEPRECATE(x) x /* no deprecation warning for this compiler */ -# endif -#endif - - -/*-************************************ - * Error management - **************************************/ -typedef size_t LZ4F_errorCode_t; - -LZ4FLIB_API unsigned LZ4F_isError(LZ4F_errorCode_t code); /**< tells when a function result is an error code */ -LZ4FLIB_API const char* LZ4F_getErrorName(LZ4F_errorCode_t code); /**< return error code string; for debugging */ - - -/*-************************************ - * Frame compression types - **************************************/ -/* #define LZ4F_ENABLE_OBSOLETE_ENUMS // uncomment to enable obsolete enums */ -#ifdef LZ4F_ENABLE_OBSOLETE_ENUMS -# define LZ4F_OBSOLETE_ENUM(x) , LZ4F_DEPRECATE(x) = LZ4F_##x -#else -# define LZ4F_OBSOLETE_ENUM(x) -#endif - -/* The larger the block size, the (slightly) better the compression ratio, - * though there are diminishing returns. - * Larger blocks also increase memory usage on both compression and decompression sides. */ -typedef enum { - LZ4F_default=0, - LZ4F_max64KB=4, - LZ4F_max256KB=5, - LZ4F_max1MB=6, - LZ4F_max4MB=7 - LZ4F_OBSOLETE_ENUM(max64KB) - LZ4F_OBSOLETE_ENUM(max256KB) - LZ4F_OBSOLETE_ENUM(max1MB) - LZ4F_OBSOLETE_ENUM(max4MB) -} LZ4F_blockSizeID_t; - -/* Linked blocks sharply reduce inefficiencies when using small blocks, - * they compress better. - * However, some LZ4 decoders are only compatible with independent blocks */ -typedef enum { - LZ4F_blockLinked=0, - LZ4F_blockIndependent - LZ4F_OBSOLETE_ENUM(blockLinked) - LZ4F_OBSOLETE_ENUM(blockIndependent) -} LZ4F_blockMode_t; - -typedef enum { - LZ4F_noContentChecksum=0, - LZ4F_contentChecksumEnabled - LZ4F_OBSOLETE_ENUM(noContentChecksum) - LZ4F_OBSOLETE_ENUM(contentChecksumEnabled) -} LZ4F_contentChecksum_t; - -typedef enum { - LZ4F_noBlockChecksum=0, - LZ4F_blockChecksumEnabled -} LZ4F_blockChecksum_t; - -typedef enum { - LZ4F_frame=0, - LZ4F_skippableFrame - LZ4F_OBSOLETE_ENUM(skippableFrame) -} LZ4F_frameType_t; - -#ifdef LZ4F_ENABLE_OBSOLETE_ENUMS -typedef LZ4F_blockSizeID_t blockSizeID_t; -typedef LZ4F_blockMode_t blockMode_t; -typedef LZ4F_frameType_t frameType_t; -typedef LZ4F_contentChecksum_t contentChecksum_t; -#endif - -/*! LZ4F_frameInfo_t : - * makes it possible to set or read frame parameters. - * It's not required to set all fields, as long as the structure was initially memset() to zero. - * For all fields, 0 sets it to default value */ -typedef struct { - LZ4F_blockSizeID_t blockSizeID; /* max64KB, max256KB, max1MB, max4MB; 0 == default */ - LZ4F_blockMode_t blockMode; /* LZ4F_blockLinked, LZ4F_blockIndependent; 0 == default */ - LZ4F_contentChecksum_t contentChecksumFlag; /* 1: frame terminated with 32-bit checksum of decompressed data; 0: disabled (default) */ - LZ4F_frameType_t frameType; /* read-only field : LZ4F_frame or LZ4F_skippableFrame */ - unsigned long long contentSize; /* Size of uncompressed content ; 0 == unknown */ - unsigned dictID; /* Dictionary ID, sent by compressor to help decoder select correct dictionary; 0 == no dictID provided */ - LZ4F_blockChecksum_t blockChecksumFlag; /* 1: each block followed by a checksum of block's compressed data; 0: disabled (default) */ -} LZ4F_frameInfo_t; - -/*! LZ4F_preferences_t : - * makes it possible to supply detailed compression parameters to the stream interface. - * Structure is presumed initially memset() to zero, representing default settings. - * All reserved fields must be set to zero. */ -typedef struct { - LZ4F_frameInfo_t frameInfo; - int compressionLevel; /* 0: default (fast mode); values > LZ4HC_CLEVEL_MAX count as LZ4HC_CLEVEL_MAX; values < 0 trigger "fast acceleration" */ - unsigned autoFlush; /* 1: always flush, to reduce usage of internal buffers */ - unsigned favorDecSpeed; /* 1: parser favors decompression speed vs compression ratio. Only works for high compression modes (>= LZ4LZ4HC_CLEVEL_OPT_MIN) */ /* >= v1.8.2 */ - unsigned reserved[3]; /* must be zero for forward compatibility */ -} LZ4F_preferences_t; - -LZ4FLIB_API int LZ4F_compressionLevel_max(void); - - -/*-********************************* -* Simple compression function -***********************************/ -/*! LZ4F_compressFrameBound() : - * Returns the maximum possible compressed size with LZ4F_compressFrame() given srcSize and preferences. - * `preferencesPtr` is optional. It can be replaced by NULL, in which case, the function will assume default preferences. - * Note : this result is only usable with LZ4F_compressFrame(). - * It may also be used with LZ4F_compressUpdate() _if no flush() operation_ is performed. - */ -LZ4FLIB_API size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t* preferencesPtr); - -/*! LZ4F_compressFrame() : - * Compress an entire srcBuffer into a valid LZ4 frame. - * dstCapacity MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). - * The LZ4F_preferences_t structure is optional : you can provide NULL as argument. All preferences will be set to default. - * @return : number of bytes written into dstBuffer. - * or an error code if it fails (can be tested using LZ4F_isError()) - */ -LZ4FLIB_API size_t LZ4F_compressFrame(void* dstBuffer, size_t dstCapacity, - const void* srcBuffer, size_t srcSize, - const LZ4F_preferences_t* preferencesPtr); - - -/*-*********************************** -* Advanced compression functions -*************************************/ -typedef struct LZ4F_cctx_s LZ4F_cctx; /* incomplete type */ -typedef LZ4F_cctx* LZ4F_compressionContext_t; /* for compatibility with previous API version */ - -typedef struct { - unsigned stableSrc; /* 1 == src content will remain present on future calls to LZ4F_compress(); skip copying src content within tmp buffer */ - unsigned reserved[3]; -} LZ4F_compressOptions_t; - -/*--- Resource Management ---*/ - -#define LZ4F_VERSION 100 -LZ4FLIB_API unsigned LZ4F_getVersion(void); -/*! LZ4F_createCompressionContext() : - * The first thing to do is to create a compressionContext object, which will be used in all compression operations. - * This is achieved using LZ4F_createCompressionContext(), which takes as argument a version. - * The version provided MUST be LZ4F_VERSION. It is intended to track potential version mismatch, notably when using DLL. - * The function will provide a pointer to a fully allocated LZ4F_cctx object. - * If @return != zero, there was an error during context creation. - * Object can release its memory using LZ4F_freeCompressionContext(); - */ -LZ4FLIB_API LZ4F_errorCode_t LZ4F_createCompressionContext(LZ4F_cctx** cctxPtr, unsigned version); -LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_cctx* cctx); - - -/*---- Compression ----*/ - -#define LZ4F_HEADER_SIZE_MAX 19 /* LZ4 Frame header size can vary from 7 to 19 bytes */ -/*! LZ4F_compressBegin() : - * will write the frame header into dstBuffer. - * dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes. - * `prefsPtr` is optional : you can provide NULL as argument, all preferences will then be set to default. - * @return : number of bytes written into dstBuffer for the header - * or an error code (which can be tested using LZ4F_isError()) - */ -LZ4FLIB_API size_t LZ4F_compressBegin(LZ4F_cctx* cctx, - void* dstBuffer, size_t dstCapacity, - const LZ4F_preferences_t* prefsPtr); - -/*! LZ4F_compressBound() : - * Provides minimum dstCapacity required to guarantee compression success - * given a srcSize and preferences, covering worst case scenario. - * prefsPtr is optional : when NULL is provided, preferences will be set to cover worst case scenario. - * Estimation is valid for either LZ4F_compressUpdate(), LZ4F_flush() or LZ4F_compressEnd(), - * Estimation includes the possibility that internal buffer might already be filled by up to (blockSize-1) bytes. - * It also includes frame footer (ending + checksum), which would have to be generated by LZ4F_compressEnd(). - * Estimation doesn't include frame header, as it was already generated by LZ4F_compressBegin(). - * Result is always the same for a srcSize and prefsPtr, so it can be trusted to size reusable buffers. - * When srcSize==0, LZ4F_compressBound() provides an upper bound for LZ4F_flush() and LZ4F_compressEnd() operations. - */ -LZ4FLIB_API size_t LZ4F_compressBound(size_t srcSize, const LZ4F_preferences_t* prefsPtr); - -/*! LZ4F_compressUpdate() : - * LZ4F_compressUpdate() can be called repetitively to compress as much data as necessary. - * Important rule: dstCapacity MUST be large enough to ensure operation success even in worst case situations. - * This value is provided by LZ4F_compressBound(). - * If this condition is not respected, LZ4F_compress() will fail (result is an errorCode). - * LZ4F_compressUpdate() doesn't guarantee error recovery. - * When an error occurs, compression context must be freed or resized. - * `cOptPtr` is optional : NULL can be provided, in which case all options are set to default. - * @return : number of bytes written into `dstBuffer` (it can be zero, meaning input data was just buffered). - * or an error code if it fails (which can be tested using LZ4F_isError()) - */ -LZ4FLIB_API size_t LZ4F_compressUpdate(LZ4F_cctx* cctx, - void* dstBuffer, size_t dstCapacity, - const void* srcBuffer, size_t srcSize, - const LZ4F_compressOptions_t* cOptPtr); - -/*! LZ4F_flush() : - * When data must be generated and sent immediately, without waiting for a block to be completely filled, - * it's possible to call LZ4_flush(). It will immediately compress any data buffered within cctx. - * `dstCapacity` must be large enough to ensure the operation will be successful. - * `cOptPtr` is optional : it's possible to provide NULL, all options will be set to default. - * @return : nb of bytes written into dstBuffer (can be zero, when there is no data stored within cctx) - * or an error code if it fails (which can be tested using LZ4F_isError()) - */ -LZ4FLIB_API size_t LZ4F_flush(LZ4F_cctx* cctx, - void* dstBuffer, size_t dstCapacity, - const LZ4F_compressOptions_t* cOptPtr); - -/*! LZ4F_compressEnd() : - * To properly finish an LZ4 frame, invoke LZ4F_compressEnd(). - * It will flush whatever data remained within `cctx` (like LZ4_flush()) - * and properly finalize the frame, with an endMark and a checksum. - * `cOptPtr` is optional : NULL can be provided, in which case all options will be set to default. - * @return : nb of bytes written into dstBuffer, necessarily >= 4 (endMark), - * or an error code if it fails (which can be tested using LZ4F_isError()) - * A successful call to LZ4F_compressEnd() makes `cctx` available again for another compression task. - */ -LZ4FLIB_API size_t LZ4F_compressEnd(LZ4F_cctx* cctx, - void* dstBuffer, size_t dstCapacity, - const LZ4F_compressOptions_t* cOptPtr); - - -/*-********************************* -* Decompression functions -***********************************/ -typedef struct LZ4F_dctx_s LZ4F_dctx; /* incomplete type */ -typedef LZ4F_dctx* LZ4F_decompressionContext_t; /* compatibility with previous API versions */ - -typedef struct { - unsigned stableDst; /* pledges that last 64KB decompressed data will remain available unmodified. This optimization skips storage operations in tmp buffers. */ - unsigned reserved[3]; /* must be set to zero for forward compatibility */ -} LZ4F_decompressOptions_t; - - -/* Resource management */ - -/*! LZ4F_createDecompressionContext() : - * Create an LZ4F_dctx object, to track all decompression operations. - * The version provided MUST be LZ4F_VERSION. - * The function provides a pointer to an allocated and initialized LZ4F_dctx object. - * The result is an errorCode, which can be tested using LZ4F_isError(). - * dctx memory can be released using LZ4F_freeDecompressionContext(); - * Result of LZ4F_freeDecompressionContext() indicates current state of decompressionContext when being released. - * That is, it should be == 0 if decompression has been completed fully and correctly. - */ -LZ4FLIB_API LZ4F_errorCode_t LZ4F_createDecompressionContext(LZ4F_dctx** dctxPtr, unsigned version); -LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* dctx); - - -/*-*********************************** -* Streaming decompression functions -*************************************/ - -/*! LZ4F_getFrameInfo() : - * This function extracts frame parameters (max blockSize, dictID, etc.). - * Its usage is optional. - * Extracted information is typically useful for allocation and dictionary. - * This function works in 2 situations : - * - At the beginning of a new frame, in which case - * it will decode information from `srcBuffer`, starting the decoding process. - * Input size must be large enough to successfully decode the entire frame header. - * Frame header size is variable, but is guaranteed to be <= LZ4F_HEADER_SIZE_MAX bytes. - * It's allowed to provide more input data than this minimum. - * - After decoding has been started. - * In which case, no input is read, frame parameters are extracted from dctx. - * - If decoding has barely started, but not yet extracted information from header, - * LZ4F_getFrameInfo() will fail. - * The number of bytes consumed from srcBuffer will be updated within *srcSizePtr (necessarily <= original value). - * Decompression must resume from (srcBuffer + *srcSizePtr). - * @return : an hint about how many srcSize bytes LZ4F_decompress() expects for next call, - * or an error code which can be tested using LZ4F_isError(). - * note 1 : in case of error, dctx is not modified. Decoding operation can resume from beginning safely. - * note 2 : frame parameters are *copied into* an already allocated LZ4F_frameInfo_t structure. - */ -LZ4FLIB_API size_t LZ4F_getFrameInfo(LZ4F_dctx* dctx, - LZ4F_frameInfo_t* frameInfoPtr, - const void* srcBuffer, size_t* srcSizePtr); - -/*! LZ4F_decompress() : - * Call this function repetitively to regenerate compressed data from `srcBuffer`. - * The function will read up to *srcSizePtr bytes from srcBuffer, - * and decompress data into dstBuffer, of capacity *dstSizePtr. - * - * The nb of bytes consumed from srcBuffer will be written into *srcSizePtr (necessarily <= original value). - * The nb of bytes decompressed into dstBuffer will be written into *dstSizePtr (necessarily <= original value). - * - * The function does not necessarily read all input bytes, so always check value in *srcSizePtr. - * Unconsumed source data must be presented again in subsequent invocations. - * - * `dstBuffer` can freely change between each consecutive function invocation. - * `dstBuffer` content will be overwritten. - * - * @return : an hint of how many `srcSize` bytes LZ4F_decompress() expects for next call. - * Schematically, it's the size of the current (or remaining) compressed block + header of next block. - * Respecting the hint provides some small speed benefit, because it skips intermediate buffers. - * This is just a hint though, it's always possible to provide any srcSize. - * - * When a frame is fully decoded, @return will be 0 (no more data expected). - * When provided with more bytes than necessary to decode a frame, - * LZ4F_decompress() will stop reading exactly at end of current frame, and @return 0. - * - * If decompression failed, @return is an error code, which can be tested using LZ4F_isError(). - * After a decompression error, the `dctx` context is not resumable. - * Use LZ4F_resetDecompressionContext() to return to clean state. - * - * After a frame is fully decoded, dctx can be used again to decompress another frame. - */ -LZ4FLIB_API size_t LZ4F_decompress(LZ4F_dctx* dctx, - void* dstBuffer, size_t* dstSizePtr, - const void* srcBuffer, size_t* srcSizePtr, - const LZ4F_decompressOptions_t* dOptPtr); - - -/*! LZ4F_resetDecompressionContext() : added in v1.8.0 - * In case of an error, the context is left in "undefined" state. - * In which case, it's necessary to reset it, before re-using it. - * This method can also be used to abruptly stop any unfinished decompression, - * and start a new one using same context resources. */ -LZ4FLIB_API void LZ4F_resetDecompressionContext(LZ4F_dctx* dctx); /* always successful */ - - - -#if defined (__cplusplus) -} -#endif - -#endif /* LZ4F_H_09782039843 */ - -#if defined(LZ4F_STATIC_LINKING_ONLY) && !defined(LZ4F_H_STATIC_09782039843) -#define LZ4F_H_STATIC_09782039843 - -#if defined (__cplusplus) -extern "C" { -#endif - -/* These declarations are not stable and may change in the future. They are - * therefore only safe to depend on when the caller is statically linked - * against the library. To access their declarations, define - * LZ4F_STATIC_LINKING_ONLY. - * - * There is a further protection mechanism where these symbols aren't published - * into shared/dynamic libraries. You can override this behavior and force - * them to be published by defining LZ4F_PUBLISH_STATIC_FUNCTIONS. Use at - * your own risk. - */ -#ifdef LZ4F_PUBLISH_STATIC_FUNCTIONS -#define LZ4FLIB_STATIC_API LZ4FLIB_API -#else -#define LZ4FLIB_STATIC_API -#endif - - -/* --- Error List --- */ -#define LZ4F_LIST_ERRORS(ITEM) \ - ITEM(OK_NoError) \ - ITEM(ERROR_GENERIC) \ - ITEM(ERROR_maxBlockSize_invalid) \ - ITEM(ERROR_blockMode_invalid) \ - ITEM(ERROR_contentChecksumFlag_invalid) \ - ITEM(ERROR_compressionLevel_invalid) \ - ITEM(ERROR_headerVersion_wrong) \ - ITEM(ERROR_blockChecksum_invalid) \ - ITEM(ERROR_reservedFlag_set) \ - ITEM(ERROR_allocation_failed) \ - ITEM(ERROR_srcSize_tooLarge) \ - ITEM(ERROR_dstMaxSize_tooSmall) \ - ITEM(ERROR_frameHeader_incomplete) \ - ITEM(ERROR_frameType_unknown) \ - ITEM(ERROR_frameSize_wrong) \ - ITEM(ERROR_srcPtr_wrong) \ - ITEM(ERROR_decompressionFailed) \ - ITEM(ERROR_headerChecksum_invalid) \ - ITEM(ERROR_contentChecksum_invalid) \ - ITEM(ERROR_frameDecoding_alreadyStarted) \ - ITEM(ERROR_maxCode) - -#define LZ4F_GENERATE_ENUM(ENUM) LZ4F_##ENUM, - -/* enum list is exposed, to handle specific errors */ -typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM) } LZ4F_errorCodes; - -LZ4FLIB_STATIC_API LZ4F_errorCodes LZ4F_getErrorCode(size_t functionResult); - - - -/********************************** - * Bulk processing dictionary API - *********************************/ -typedef struct LZ4F_CDict_s LZ4F_CDict; - -/*! LZ4_createCDict() : - * When compressing multiple messages / blocks with the same dictionary, it's recommended to load it just once. - * LZ4_createCDict() will create a digested dictionary, ready to start future compression operations without startup delay. - * LZ4_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. - * `dictBuffer` can be released after LZ4_CDict creation, since its content is copied within CDict */ -LZ4FLIB_STATIC_API LZ4F_CDict* LZ4F_createCDict(const void* dictBuffer, size_t dictSize); -LZ4FLIB_STATIC_API void LZ4F_freeCDict(LZ4F_CDict* CDict); - - -/*! LZ4_compressFrame_usingCDict() : - * Compress an entire srcBuffer into a valid LZ4 frame using a digested Dictionary. - * cctx must point to a context created by LZ4F_createCompressionContext(). - * If cdict==NULL, compress without a dictionary. - * dstBuffer MUST be >= LZ4F_compressFrameBound(srcSize, preferencesPtr). - * If this condition is not respected, function will fail (@return an errorCode). - * The LZ4F_preferences_t structure is optional : you may provide NULL as argument, - * but it's not recommended, as it's the only way to provide dictID in the frame header. - * @return : number of bytes written into dstBuffer. - * or an error code if it fails (can be tested using LZ4F_isError()) */ -LZ4FLIB_STATIC_API size_t LZ4F_compressFrame_usingCDict( - LZ4F_cctx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const LZ4F_CDict* cdict, - const LZ4F_preferences_t* preferencesPtr); - - -/*! LZ4F_compressBegin_usingCDict() : - * Inits streaming dictionary compression, and writes the frame header into dstBuffer. - * dstCapacity must be >= LZ4F_HEADER_SIZE_MAX bytes. - * `prefsPtr` is optional : you may provide NULL as argument, - * however, it's the only way to provide dictID in the frame header. - * @return : number of bytes written into dstBuffer for the header, - * or an error code (which can be tested using LZ4F_isError()) */ -LZ4FLIB_STATIC_API size_t LZ4F_compressBegin_usingCDict( - LZ4F_cctx* cctx, - void* dstBuffer, size_t dstCapacity, - const LZ4F_CDict* cdict, - const LZ4F_preferences_t* prefsPtr); - - -/*! LZ4F_decompress_usingDict() : - * Same as LZ4F_decompress(), using a predefined dictionary. - * Dictionary is used "in place", without any preprocessing. - * It must remain accessible throughout the entire frame decoding. */ -LZ4FLIB_STATIC_API size_t LZ4F_decompress_usingDict( - LZ4F_dctx* dctxPtr, - void* dstBuffer, size_t* dstSizePtr, - const void* srcBuffer, size_t* srcSizePtr, - const void* dict, size_t dictSize, - const LZ4F_decompressOptions_t* decompressOptionsPtr); - -#if defined (__cplusplus) -} -#endif - -#endif /* defined(LZ4F_STATIC_LINKING_ONLY) && !defined(LZ4F_H_STATIC_09782039843) */ diff --git a/include/lz4hc.h b/include/lz4hc.h deleted file mode 100644 index 970fa39..0000000 --- a/include/lz4hc.h +++ /dev/null @@ -1,355 +0,0 @@ -/* - LZ4 HC - High Compression Mode of LZ4 - Header File - Copyright (C) 2011-2017, Yann Collet. - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - LZ4 source repository : https://github.com/lz4/lz4 - - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c -*/ -#ifndef LZ4_HC_H_19834876238432 -#define LZ4_HC_H_19834876238432 - -#if defined (__cplusplus) -extern "C" { -#endif - -/* --- Dependency --- */ -/* note : lz4hc requires lz4.h/lz4.c for compilation */ -#include "lz4.h" /* stddef, LZ4LIB_API, LZ4_DEPRECATED */ - - -/* --- Useful constants --- */ -#define LZ4HC_CLEVEL_MIN 3 -#define LZ4HC_CLEVEL_DEFAULT 9 -#define LZ4HC_CLEVEL_OPT_MIN 10 -#define LZ4HC_CLEVEL_MAX 12 - - -/*-************************************ - * Block Compression - **************************************/ -/*! LZ4_compress_HC() : - * Compress data from `src` into `dst`, using the more powerful but slower "HC" algorithm. - * `dst` must be already allocated. - * Compression is guaranteed to succeed if `dstCapacity >= LZ4_compressBound(srcSize)` (see "lz4.h") - * Max supported `srcSize` value is LZ4_MAX_INPUT_SIZE (see "lz4.h") - * `compressionLevel` : any value between 1 and LZ4HC_CLEVEL_MAX will work. - * Values > LZ4HC_CLEVEL_MAX behave the same as LZ4HC_CLEVEL_MAX. - * @return : the number of bytes written into 'dst' - * or 0 if compression fails. - */ -LZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); - - -/* Note : - * Decompression functions are provided within "lz4.h" (BSD license) - */ - - -/*! LZ4_compress_HC_extStateHC() : - * Same as LZ4_compress_HC(), but using an externally allocated memory segment for `state`. - * `state` size is provided by LZ4_sizeofStateHC(). - * Memory segment must be aligned on 8-bytes boundaries (which a normal malloc() should do properly). - */ -LZ4LIB_API int LZ4_sizeofStateHC(void); -LZ4LIB_API int LZ4_compress_HC_extStateHC(void* state, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel); - - -/*-************************************ - * Streaming Compression - * Bufferless synchronous API - **************************************/ - typedef union LZ4_streamHC_u LZ4_streamHC_t; /* incomplete type (defined later) */ - -/*! LZ4_createStreamHC() and LZ4_freeStreamHC() : - * These functions create and release memory for LZ4 HC streaming state. - * Newly created states are automatically initialized. - * Existing states can be re-used several times, using LZ4_resetStreamHC(). - * These methods are API and ABI stable, they can be used in combination with a DLL. - */ -LZ4LIB_API LZ4_streamHC_t* LZ4_createStreamHC(void); -LZ4LIB_API int LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr); - -LZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel); -LZ4LIB_API int LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize); - -LZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, const char* src, char* dst, int srcSize, int maxDstSize); - -LZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize); - -/* - These functions compress data in successive blocks of any size, using previous blocks as dictionary. - One key assumption is that previous blocks (up to 64 KB) remain read-accessible while compressing next blocks. - There is an exception for ring buffers, which can be smaller than 64 KB. - Ring buffers scenario is automatically detected and handled by LZ4_compress_HC_continue(). - - Before starting compression, state must be properly initialized, using LZ4_resetStreamHC(). - A first "fictional block" can then be designated as initial dictionary, using LZ4_loadDictHC() (Optional). - - Then, use LZ4_compress_HC_continue() to compress each successive block. - Previous memory blocks (including initial dictionary when present) must remain accessible and unmodified during compression. - 'dst' buffer should be sized to handle worst case scenarios (see LZ4_compressBound()), to ensure operation success. - Because in case of failure, the API does not guarantee context recovery, and context will have to be reset. - If `dst` buffer budget cannot be >= LZ4_compressBound(), consider using LZ4_compress_HC_continue_destSize() instead. - - If, for any reason, previous data block can't be preserved unmodified in memory for next compression block, - you can save it to a more stable memory space, using LZ4_saveDictHC(). - Return value of LZ4_saveDictHC() is the size of dictionary effectively saved into 'safeBuffer'. -*/ - - -/*-************************************************************** - * PRIVATE DEFINITIONS : - * Do not use these definitions. - * They are exposed to allow static allocation of `LZ4_streamHC_t`. - * Using these definitions makes the code vulnerable to potential API break when upgrading LZ4 - ****************************************************************/ -#define LZ4HC_DICTIONARY_LOGSIZE 16 -#define LZ4HC_MAXD (1<= 199901L) /* C99 */) -#include - -typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal -{ - uint32_t hashTable[LZ4HC_HASHTABLESIZE]; - uint16_t chainTable[LZ4HC_MAXD]; - const uint8_t* end; /* next block here to continue on current prefix */ - const uint8_t* base; /* All index relative to this position */ - const uint8_t* dictBase; /* alternate base for extDict */ - uint32_t dictLimit; /* below that point, need extDict */ - uint32_t lowLimit; /* below that point, no more dict */ - uint32_t nextToUpdate; /* index from which to continue dictionary update */ - short compressionLevel; - short favorDecSpeed; - const LZ4HC_CCtx_internal* dictCtx; -}; - -#else - -typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal; -struct LZ4HC_CCtx_internal -{ - unsigned int hashTable[LZ4HC_HASHTABLESIZE]; - unsigned short chainTable[LZ4HC_MAXD]; - const unsigned char* end; /* next block here to continue on current prefix */ - const unsigned char* base; /* All index relative to this position */ - const unsigned char* dictBase; /* alternate base for extDict */ - unsigned int dictLimit; /* below that point, need extDict */ - unsigned int lowLimit; /* below that point, no more dict */ - unsigned int nextToUpdate; /* index from which to continue dictionary update */ - short compressionLevel; - short favorDecSpeed; - const LZ4HC_CCtx_internal* dictCtx; -}; - -#endif - -#define LZ4_STREAMHCSIZE (4*LZ4HC_HASHTABLESIZE + 2*LZ4HC_MAXD + 56) /* 262200 */ -#define LZ4_STREAMHCSIZE_SIZET (LZ4_STREAMHCSIZE / sizeof(size_t)) -union LZ4_streamHC_u { - size_t table[LZ4_STREAMHCSIZE_SIZET]; - LZ4HC_CCtx_internal internal_donotuse; -}; /* previously typedef'd to LZ4_streamHC_t */ -/* - LZ4_streamHC_t : - This structure allows static allocation of LZ4 HC streaming state. - State must be initialized using LZ4_resetStreamHC() before first use. - - Static allocation shall only be used in combination with static linking. - When invoking LZ4 from a DLL, use create/free functions instead, which are API and ABI stable. -*/ - - -/*-************************************ -* Deprecated Functions -**************************************/ -/* see lz4.h LZ4_DISABLE_DEPRECATE_WARNINGS to turn off deprecation warnings */ - -/* deprecated compression functions */ -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC (const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_withStateHC (void* state, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize); - -/* Obsolete streaming functions; degraded functionality; do not use! - * - * In order to perform streaming compression, these functions depended on data - * that is no longer tracked in the state. They have been preserved as well as - * possible: using them will still produce a correct output. However, use of - * LZ4_slideInputBufferHC() will truncate the history of the stream, rather - * than preserve a window-sized chunk of history. - */ -LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API void* LZ4_createHC (const char* inputBuffer); -LZ4_DEPRECATED("use LZ4_saveDictHC() instead") LZ4LIB_API char* LZ4_slideInputBufferHC (void* LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_freeStreamHC() instead") LZ4LIB_API int LZ4_freeHC (void* LZ4HC_Data); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") LZ4LIB_API int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel); -LZ4_DEPRECATED("use LZ4_createStreamHC() instead") LZ4LIB_API int LZ4_sizeofStreamStateHC(void); -LZ4_DEPRECATED("use LZ4_resetStreamHC() instead") LZ4LIB_API int LZ4_resetStreamStateHC(void* state, char* inputBuffer); - - -#if defined (__cplusplus) -} -#endif - -#endif /* LZ4_HC_H_19834876238432 */ - - -/*-************************************************** - * !!!!! STATIC LINKING ONLY !!!!! - * Following definitions are considered experimental. - * They should not be linked from DLL, - * as there is no guarantee of API stability yet. - * Prototypes will be promoted to "stable" status - * after successfull usage in real-life scenarios. - ***************************************************/ -#ifdef LZ4_HC_STATIC_LINKING_ONLY /* protection macro */ -#ifndef LZ4_HC_SLO_098092834 -#define LZ4_HC_SLO_098092834 - -#if defined (__cplusplus) -extern "C" { -#endif - -/*! LZ4_compress_HC_destSize() : v1.8.0 (experimental) - * Will try to compress as much data from `src` as possible - * that can fit into `targetDstSize` budget. - * Result is provided in 2 parts : - * @return : the number of bytes written into 'dst' - * or 0 if compression fails. - * `srcSizePtr` : value will be updated to indicate how much bytes were read from `src` - */ -int LZ4_compress_HC_destSize(void* LZ4HC_Data, - const char* src, char* dst, - int* srcSizePtr, int targetDstSize, - int compressionLevel); - -/*! LZ4_compress_HC_continue_destSize() : v1.8.0 (experimental) - * Similar as LZ4_compress_HC_continue(), - * but will read a variable nb of bytes from `src` - * to fit into `targetDstSize` budget. - * Result is provided in 2 parts : - * @return : the number of bytes written into 'dst' - * or 0 if compression fails. - * `srcSizePtr` : value will be updated to indicate how much bytes were read from `src`. - */ -int LZ4_compress_HC_continue_destSize(LZ4_streamHC_t* LZ4_streamHCPtr, - const char* src, char* dst, - int* srcSizePtr, int targetDstSize); - -/*! LZ4_setCompressionLevel() : v1.8.0 (experimental) - * It's possible to change compression level between 2 invocations of LZ4_compress_HC_continue*() - */ -void LZ4_setCompressionLevel(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); - -/*! LZ4_favorDecompressionSpeed() : v1.8.2 (experimental) - * Parser will select decisions favoring decompression over compression ratio. - * Only work at highest compression settings (level >= LZ4HC_CLEVEL_OPT_MIN) - */ -void LZ4_favorDecompressionSpeed(LZ4_streamHC_t* LZ4_streamHCPtr, int favor); - -/*! LZ4_resetStreamHC_fast() : - * When an LZ4_streamHC_t is known to be in a internally coherent state, - * it can often be prepared for a new compression with almost no work, only - * sometimes falling back to the full, expensive reset that is always required - * when the stream is in an indeterminate state (i.e., the reset performed by - * LZ4_resetStreamHC()). - * - * LZ4_streamHCs are guaranteed to be in a valid state when: - * - returned from LZ4_createStreamHC() - * - reset by LZ4_resetStreamHC() - * - memset(stream, 0, sizeof(LZ4_streamHC_t)) - * - the stream was in a valid state and was reset by LZ4_resetStreamHC_fast() - * - the stream was in a valid state and was then used in any compression call - * that returned success - * - the stream was in an indeterminate state and was used in a compression - * call that fully reset the state (LZ4_compress_HC_extStateHC()) and that - * returned success - */ -void LZ4_resetStreamHC_fast(LZ4_streamHC_t* LZ4_streamHCPtr, int compressionLevel); - -/*! LZ4_compress_HC_extStateHC_fastReset() : - * A variant of LZ4_compress_HC_extStateHC(). - * - * Using this variant avoids an expensive initialization step. It is only safe - * to call if the state buffer is known to be correctly initialized already - * (see above comment on LZ4_resetStreamHC_fast() for a definition of - * "correctly initialized"). From a high level, the difference is that this - * function initializes the provided state with a call to - * LZ4_resetStreamHC_fast() while LZ4_compress_HC_extStateHC() starts with a - * call to LZ4_resetStreamHC(). - */ -int LZ4_compress_HC_extStateHC_fastReset (void* state, const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel); - -/*! LZ4_attach_HC_dictionary() : - * This is an experimental API that allows for the efficient use of a - * static dictionary many times. - * - * Rather than re-loading the dictionary buffer into a working context before - * each compression, or copying a pre-loaded dictionary's LZ4_streamHC_t into a - * working LZ4_streamHC_t, this function introduces a no-copy setup mechanism, - * in which the working stream references the dictionary stream in-place. - * - * Several assumptions are made about the state of the dictionary stream. - * Currently, only streams which have been prepared by LZ4_loadDictHC() should - * be expected to work. - * - * Alternatively, the provided dictionary stream pointer may be NULL, in which - * case any existing dictionary stream is unset. - * - * A dictionary should only be attached to a stream without any history (i.e., - * a stream that has just been reset). - * - * The dictionary will remain attached to the working stream only for the - * current stream session. Calls to LZ4_resetStreamHC(_fast) will remove the - * dictionary context association from the working stream. The dictionary - * stream (and source buffer) must remain in-place / accessible / unchanged - * through the lifetime of the stream session. - */ -LZ4LIB_API void LZ4_attach_HC_dictionary(LZ4_streamHC_t *working_stream, const LZ4_streamHC_t *dictionary_stream); - -#if defined (__cplusplus) -} -#endif - -#endif /* LZ4_HC_SLO_098092834 */ -#endif /* LZ4_HC_STATIC_LINKING_ONLY */ diff --git a/installHipo3 b/installHipo3 new file mode 100755 index 0000000..ffd5baf --- /dev/null +++ b/installHipo3 @@ -0,0 +1,8 @@ +rm CMakeLists.txt +ln -s CMakeLists.txt.hipo3 CMakeLists.txt +mkdir build3 +cd build3 +cmake ../ +make +cmake ../ +make install \ No newline at end of file diff --git a/installHipo4 b/installHipo4 new file mode 100755 index 0000000..dd5c3eb --- /dev/null +++ b/installHipo4 @@ -0,0 +1,15 @@ +rm CMakeLists.txt +ln -s CMakeLists.txt.hipo4 CMakeLists.txt +mkdir build4 +cd build4 +cmake ../ +make +cmake ../ +make install + +#setenv CLAS12TOOL_HIPO4_LIB $CLAS12TOOL/lib4 +#setenv CLAS12TOOL_HIPO4_BIN $CLAS12TOOL/bin4 + +#setenv PATH "$PATH":"$CLAS12TOOL_HIPO4_BIN" + +#rehash \ No newline at end of file diff --git a/testTreeMaker.C b/testTreeMaker.C new file mode 100644 index 0000000..ba8c57a --- /dev/null +++ b/testTreeMaker.C @@ -0,0 +1,11 @@ +{ + treemaker.Branch("P.Time/F"); + treemaker.Branch("PBANK.Px/F"); + treemaker.Branch("PBANK.Py/F"); + treemaker.Branch("PBANK.Pz/F"); + treemaker.Branch("PBANK.Pid/I"); + treemaker.AddAtLeastPid(211,1); + treemaker.AddExactPid(11,1); + // treemaker.AddZeroOfRestPid(); + treemaker.Fill(); +} From bd42d6c567ab5f03262b248a7e920c03f2845bb5 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 14 Mar 2019 16:02:10 +0000 Subject: [PATCH 34/56] added proof stuff --- Clas12Banks4/clas12reader.h | 1 + Clas12Root/HipoHist.cpp | 4 +- Clas12Root/HipoROOTOut.h | 2 +- Clas12Root/HipoSelector.cpp | 53 +--- Clas12Root/HipoSelector.h | 38 +-- Clas12Root/src/#clas12proof4.cpp# | 23 ++ Clas12Root/src/.#clas12proof4.cpp | 1 + Clas12Root/src/CMakeLists.txt | 18 +- Clas12Root/src/clas12proof4.cpp | 22 ++ Clas12Root/src/clas12root3.cpp | 20 ++ Clas12Root/src/clas12root4.cpp | 20 ++ Clas12Root/src/makeHipoSelector.cpp | 15 + Clas12Root/src/particleDraw3.cpp | 9 +- Clas12Root/src/particleDraw4.cpp | 9 +- Clas12Root/src/particleTree3.cpp | 9 +- Clas12Root/src/particleTree4.cpp | 9 +- Clas12Root/tempHipoSelector.cpp | 80 +++++ Clas12Root/tempHipoSelector.h | 35 +++ RunRoot/CleanROOT.C | 14 - RunRoot/Ex2_HipoDraw.C | 9 +- RunRoot/Ex3_ProofLite.C | 14 + RunRoot/Ex4_TreeMaker.C | 10 +- RunRoot/LoadClas12Root.C | 12 - RunRoot/LoadClas12Root3.C | 20 ++ RunRoot/LoadClas12Root4.C | 20 ++ RunRoot/LoadProofLib4.C | 30 ++ RunRoot/hiporoot/BankHist.C | 77 ----- RunRoot/hiporoot/BankHist.h | 41 --- RunRoot/hiporoot/HipoChain.C | 53 ---- RunRoot/hiporoot/HipoChain.h | 45 --- RunRoot/hiporoot/HipoFileSelector.C | 128 -------- RunRoot/hiporoot/HipoFileSelector.h | 65 ---- RunRoot/hiporoot/HipoHist.C | 122 -------- RunRoot/hiporoot/HipoHist.h | 39 --- RunRoot/hiporoot/HipoROOTOut.C | 294 ------------------ RunRoot/hiporoot/HipoROOTOut.h | 64 ---- RunRoot/hiporoot/HipoRootAction.C | 5 - RunRoot/hiporoot/HipoRootAction.h | 30 -- RunRoot/hiporoot/HipoSelector.C | 142 --------- RunRoot/hiporoot/HipoSelector.h | 65 ---- RunRoot/hiporoot/HipoTreeMaker.C | 56 ---- RunRoot/hiporoot/HipoTreeMaker.h | 41 --- RunRoot/hiporoot/LoadHipoROOT.C | 28 -- RunRoot/hiporoot/ParticleHist.C | 55 ---- RunRoot/hiporoot/ParticleHist.h | 33 -- RunRoot/hiporoot/ParticleHistAction.C | 8 - RunRoot/hiporoot/ParticleTree.C | 96 ------ RunRoot/hiporoot/ParticleTree.h | 34 -- RunRoot/hiporoot/hipotree.C | 43 --- RunRoot/hiporoot/hipotree.h | 130 -------- RunRoot/hiporoot/templateBankHistAction.C | 45 --- RunRoot/hiporoot/templateParticleHistAction.C | 33 -- RunRoot/hiporoot/templateParticleTreeAction.C | 57 ---- RunRoot/jupy/CLAS12Reader3Pi.C | 110 ------- RunRoot/jupy/CLAS12Reader3Pi.ipynb | 8 +- RunRoot/jupy/CreateHipoSelector.ipynb | 53 ++++ RunRoot/jupy/HipoDraw.ipynb | 29 +- RunRoot/jupy/HipoProof.ipynb | 66 ++++ RunRoot/jupy/HipoToRootTree.ipynb | 152 +++++++++ testTreeMaker.C | 11 - 60 files changed, 671 insertions(+), 2084 deletions(-) create mode 100644 Clas12Root/src/#clas12proof4.cpp# create mode 120000 Clas12Root/src/.#clas12proof4.cpp create mode 100644 Clas12Root/src/clas12proof4.cpp create mode 100644 Clas12Root/src/clas12root3.cpp create mode 100644 Clas12Root/src/clas12root4.cpp create mode 100644 Clas12Root/src/makeHipoSelector.cpp create mode 100644 Clas12Root/tempHipoSelector.cpp create mode 100644 Clas12Root/tempHipoSelector.h delete mode 100644 RunRoot/CleanROOT.C create mode 100644 RunRoot/Ex3_ProofLite.C delete mode 100644 RunRoot/LoadClas12Root.C create mode 100644 RunRoot/LoadClas12Root3.C create mode 100644 RunRoot/LoadClas12Root4.C create mode 100644 RunRoot/LoadProofLib4.C delete mode 100644 RunRoot/hiporoot/BankHist.C delete mode 100644 RunRoot/hiporoot/BankHist.h delete mode 100644 RunRoot/hiporoot/HipoChain.C delete mode 100644 RunRoot/hiporoot/HipoChain.h delete mode 100644 RunRoot/hiporoot/HipoFileSelector.C delete mode 100644 RunRoot/hiporoot/HipoFileSelector.h delete mode 100644 RunRoot/hiporoot/HipoHist.C delete mode 100644 RunRoot/hiporoot/HipoHist.h delete mode 100644 RunRoot/hiporoot/HipoROOTOut.C delete mode 100644 RunRoot/hiporoot/HipoROOTOut.h delete mode 100644 RunRoot/hiporoot/HipoRootAction.C delete mode 100644 RunRoot/hiporoot/HipoRootAction.h delete mode 100644 RunRoot/hiporoot/HipoSelector.C delete mode 100644 RunRoot/hiporoot/HipoSelector.h delete mode 100644 RunRoot/hiporoot/HipoTreeMaker.C delete mode 100644 RunRoot/hiporoot/HipoTreeMaker.h delete mode 100644 RunRoot/hiporoot/LoadHipoROOT.C delete mode 100644 RunRoot/hiporoot/ParticleHist.C delete mode 100644 RunRoot/hiporoot/ParticleHist.h delete mode 100644 RunRoot/hiporoot/ParticleHistAction.C delete mode 100644 RunRoot/hiporoot/ParticleTree.C delete mode 100644 RunRoot/hiporoot/ParticleTree.h delete mode 100644 RunRoot/hiporoot/hipotree.C delete mode 100644 RunRoot/hiporoot/hipotree.h delete mode 100644 RunRoot/hiporoot/templateBankHistAction.C delete mode 100644 RunRoot/hiporoot/templateParticleHistAction.C delete mode 100644 RunRoot/hiporoot/templateParticleTreeAction.C delete mode 100644 RunRoot/jupy/CLAS12Reader3Pi.C create mode 100644 RunRoot/jupy/CreateHipoSelector.ipynb create mode 100644 RunRoot/jupy/HipoProof.ipynb create mode 100644 RunRoot/jupy/HipoToRootTree.ipynb delete mode 100644 testTreeMaker.C diff --git a/Clas12Banks4/clas12reader.h b/Clas12Banks4/clas12reader.h index fc85294..479b79a 100644 --- a/Clas12Banks4/clas12reader.h +++ b/Clas12Banks4/clas12reader.h @@ -33,6 +33,7 @@ #include "region_ft.h" #include +#include #include #include diff --git a/Clas12Root/HipoHist.cpp b/Clas12Root/HipoHist.cpp index 219d9d8..6dcf4df 100644 --- a/Clas12Root/HipoHist.cpp +++ b/Clas12Root/HipoHist.cpp @@ -19,7 +19,7 @@ namespace clas12root { if(condExp==TString(""))condExp="1"; if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); AddAction(varExp,condExp); - auto hist=new TH1F(varExp,varExp,nbins,min,max); + auto hist=new TH1F(varExp+"_"+condExp,varExp +" for "+condExp,nbins,min,max); _histList->Add(hist); _curHist.push_back(hist); return this; @@ -30,7 +30,7 @@ namespace clas12root { if(condExp==TString(""))condExp="1"; if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); AddAction(varExp,condExp); - auto hist=new TH2F(varExp,varExp,nbinsX,minX,maxX,nbinsY,minY,maxY); + auto hist=new TH2F(varExp+"_"+condExp,varExp+" for "+condExp,nbinsX,minX,maxX,nbinsY,minY,maxY); _histList->Add(hist); _curHist.push_back(hist); return this; diff --git a/Clas12Root/HipoROOTOut.h b/Clas12Root/HipoROOTOut.h index 998ee54..d45caab 100644 --- a/Clas12Root/HipoROOTOut.h +++ b/Clas12Root/HipoROOTOut.h @@ -20,7 +20,7 @@ namespace clas12root { public : HipoROOTOut(TString filename); virtual ~HipoROOTOut(); - + void AddAction(TString varExp,TString condExp="1"); void CompileAction(); void CleanAction(); diff --git a/Clas12Root/HipoSelector.cpp b/Clas12Root/HipoSelector.cpp index 9bfb046..6efd20c 100644 --- a/Clas12Root/HipoSelector.cpp +++ b/Clas12Root/HipoSelector.cpp @@ -21,13 +21,7 @@ #include "HipoSelector.h" #include -#include #include -#include -#include -#include -#include -#include namespace clas12root{ @@ -38,13 +32,8 @@ namespace clas12root{ _chain->Add(filename); } HipoSelector::HipoSelector(HipoChain* chain) : _chain(chain) { - } - // void HipoSelector::Run(){ - - // } - void HipoSelector::Begin(TTree * /*tree*/) { // The Begin() function is called at the start of the query. @@ -53,7 +42,6 @@ namespace clas12root{ TString option = GetOption(); - if(!fInput){ fInput=new TList(); // fInput->SetOwner(kTRUE); @@ -76,67 +64,38 @@ namespace clas12root{ // The SlaveBegin() function is called after the Begin() function. // When running with PROOF SlaveBegin() is called on each slave server. // The tree argument is deprecated (on PROOF 0 is passed). - + cout<<"HipoSelector::SlaveBegin "<Print(); TString option = GetOption(); _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); - _hist1=new TH1F("Time","Time",600,-100,500); - fOutput->Add(_hist1); } Bool_t HipoSelector::Process(Long64_t entry) { - gSystem->Sleep(gRandom->Uniform()*100+0.05); //check if need new file _iRecord=entry-_NfileRecords; //get record to analyse,subtract records of previous files if( _iRecord>=_NcurrRecords ){ _iFile=_chain->GetFileFromRecord(entry); - cout<<"Start New file "<GetRecordsToHere(_iFile); //Add records from previous file to give offset _c12.reset(new clas12::clas12reader(_chain->GetFileName(_iFile).Data())); _NcurrRecords= _c12->getReader().getNRecords(); //records in this file _iRecord=entry-_NfileRecords; //get first record in this file to process - cout<<"Stop New file "<Exec(Form("vmtouch -vt %s",_chain->GetFileName(_iFile).Data())); } _c12->getReader().loadRecord(_iRecord); + while(_c12->nextInRecord()==true){ + cout<<"PRCE "<Fill(_c12->head()->getStartTime()); return kTRUE; - } - void HipoSelector::SlaveTerminate() - { - // The SlaveTerminate() function is called after all entries or objects - // have been processed. When running with PROOF SlaveTerminate() is called - // on each slave server. - - } - - void HipoSelector::Terminate() - { - // The Terminate() function is the last function to be called during - // a query. It always runs on the client, it can be used to present - // the results graphically or save the results to file. - - TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); - _hist1 = dynamic_cast(fOutput->FindObject("Time")); - if (_hist1) _hist1->Draw(); - c1->Update(); - } + } diff --git a/Clas12Root/HipoSelector.h b/Clas12Root/HipoSelector.h index 0195b5c..fdf2f48 100644 --- a/Clas12Root/HipoSelector.h +++ b/Clas12Root/HipoSelector.h @@ -24,32 +24,25 @@ namespace clas12root{ public : + HipoSelector(TTree * /*tree*/ =0); HipoSelector(TString filename) ; HipoSelector(HipoChain *chain) ; - HipoSelector(TTree * /*tree*/ =0); virtual ~HipoSelector() { } - virtual Int_t Version() const { return 2; } - virtual void Begin(TTree *tree); - virtual void SlaveBegin(TTree *tree); - // virtual void Init(TTree *tree); - //virtual Bool_t Notify(); - virtual Bool_t Process(Long64_t entry); - //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } - - Bool_t ProcessEvent(); + Int_t Version() const final{ return 2; } - virtual void SetOption(const char *option) { fOption = option; } - virtual void SetObject(TObject *obj) { fObject = obj; } - virtual void SetInputList(TList *input) { fInput = input; } - virtual TList *GetOutputList() const { return fOutput; } - virtual void SlaveTerminate(); - virtual void Terminate(); - - - + void Begin(TTree *tree) override; + void SlaveBegin(TTree *tree) override; + Bool_t Process(Long64_t entry) override; + + virtual Bool_t ProcessEvent() = 0; //loop action to be defined in derived class + + + protected: + + std::unique_ptr _c12;//! + private: - std::unique_ptr _c12; HipoChain* _chain=nullptr; Int_t _NcurrRecords=0; @@ -57,9 +50,8 @@ namespace clas12root{ Int_t _iFile=0; Long64_t _NfileRecords=0; - TH1F* _hist1=nullptr; - - ClassDef(clas12root::HipoSelector,0); + + ClassDefOverride(clas12root::HipoSelector,0); }; } diff --git a/Clas12Root/src/#clas12proof4.cpp# b/Clas12Root/src/#clas12proof4.cpp# new file mode 100644 index 0000000..167ebba --- /dev/null +++ b/Clas12Root/src/#clas12proof4.cpp# @@ -0,0 +1,23 @@ +#include +#include +#include + + +int main(int argc, char **argv) { + + + TRint *app = new TRint("App", &argc, argv); +// Run the TApplication (not needed if you only want to store the histograms.) + app->SetPrompt("clas12root [%d] "); + + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); + app->ProcessLine(Form(".x $CLAS12TOOL/RunRoot/LoadProofLib4.C(%s)",argv[1])); + app->ProcessLine(Form("gProof->Load(\"%s\");",argv[2])); + + app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/.#clas12proof4.cpp b/Clas12Root/src/.#clas12proof4.cpp new file mode 120000 index 0000000..0b1c31e --- /dev/null +++ b/Clas12Root/src/.#clas12proof4.cpp @@ -0,0 +1 @@ +dglazier@npcglazier2.9201:1551340966 \ No newline at end of file diff --git a/Clas12Root/src/CMakeLists.txt b/Clas12Root/src/CMakeLists.txt index 4c7ab61..7e2fb0d 100644 --- a/Clas12Root/src/CMakeLists.txt +++ b/Clas12Root/src/CMakeLists.txt @@ -1,18 +1,32 @@ if(USE_HIPO3) + add_executable (clas12root3 clas12root3.cpp) + target_link_libraries(clas12root3 ${ROOT_LIBRARIES}) + add_executable (particleDraw3 particleDraw3.cpp) target_link_libraries(particleDraw3 ${ROOT_LIBRARIES}) add_executable (particleTree3 particleTree3.cpp) target_link_libraries(particleTree3 ${ROOT_LIBRARIES}) - install (TARGETS particleDraw3 particleTree3 DESTINATION ${CMAKE_INSTALL_BINDIR}) + install (TARGETS clas12root3 particleDraw3 particleTree3 DESTINATION ${CMAKE_INSTALL_BINDIR}) endif(USE_HIPO3) if(USE_HIPO4) + add_executable (clas12root4 clas12root4.cpp) + target_link_libraries(clas12root4 ${ROOT_LIBRARIES}) + + add_executable (clas12proof4 clas12proof4.cpp) + target_link_libraries(clas12proof4 ${ROOT_LIBRARIES}) + add_executable (particleDraw4 particleDraw4.cpp) target_link_libraries(particleDraw4 ${ROOT_LIBRARIES}) add_executable (particleTree4 particleTree4.cpp) target_link_libraries(particleTree4 ${ROOT_LIBRARIES}) - install (TARGETS particleDraw4 particleTree4 DESTINATION ${CMAKE_INSTALL_BINDIR}) + install (TARGETS clas12root4 clas12proof4 particleDraw4 particleTree4 DESTINATION ${CMAKE_INSTALL_BINDIR}) endif(USE_HIPO4) +add_executable (makeHipoSelector makeHipoSelector.cpp) +target_link_libraries(makeHipoSelector ${ROOT_LIBRARIES}) + + +install (TARGETS makeHipoSelector DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/Clas12Root/src/clas12proof4.cpp b/Clas12Root/src/clas12proof4.cpp new file mode 100644 index 0000000..3ff36fc --- /dev/null +++ b/Clas12Root/src/clas12proof4.cpp @@ -0,0 +1,22 @@ +#include +#include +#include + + +int main(int argc, char **argv) { + + TRint *app = new TRint("App", &argc, argv); +// Run the TApplication (not needed if you only want to store the histograms.) + app->SetPrompt("clas12root [%d] "); + + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); + app->ProcessLine(Form(".x $CLAS12TOOL/RunRoot/LoadProofLib4.C(%s)",argv[1])); + app->ProcessLine(Form("gProof->Load(\"%s\");",argv[2])); + + app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/clas12root3.cpp b/Clas12Root/src/clas12root3.cpp new file mode 100644 index 0000000..06b0617 --- /dev/null +++ b/Clas12Root/src/clas12root3.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + + +int main(int argc, char **argv) { + + TRint *app = new TRint("App", &argc, argv); +// Run the TApplication (not needed if you only want to store the histograms.) + app->SetPrompt("clas12root [%d] "); + + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C"); + + app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/clas12root4.cpp b/Clas12Root/src/clas12root4.cpp new file mode 100644 index 0000000..360f490 --- /dev/null +++ b/Clas12Root/src/clas12root4.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + + +int main(int argc, char **argv) { + + TRint *app = new TRint("App", &argc, argv); +// Run the TApplication (not needed if you only want to store the histograms.) + app->SetPrompt("clas12root [%d] "); + + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); + + app->Run(); + + app->Terminate(0); + + return 0; + +} diff --git a/Clas12Root/src/makeHipoSelector.cpp b/Clas12Root/src/makeHipoSelector.cpp new file mode 100644 index 0000000..d5ed593 --- /dev/null +++ b/Clas12Root/src/makeHipoSelector.cpp @@ -0,0 +1,15 @@ +#include +#include + +int main(int argc, char **argv) { + + TString selname=argv[1]; + + TRint *app = new TRint("App", &argc, argv); + app->ProcessLine(Form("gSystem->Exec(\"cp $CLAS12TOOL/Clas12Root/tempHipoSelector.h %s.h\");",selname.Data())); + app->ProcessLine(Form("gSystem->Exec(\"cp $CLAS12TOOL/Clas12Root/tempHipoSelector.cpp %s.C\");",selname.Data())); + + app->ProcessLine(Form("gSystem->Exec(\"sed -i'' -e 's/tempHipoSelector/%s/g' %s*\");",selname.Data(),selname.Data())); + + return 0; +} diff --git a/Clas12Root/src/particleDraw3.cpp b/Clas12Root/src/particleDraw3.cpp index afe847c..f9f2567 100644 --- a/Clas12Root/src/particleDraw3.cpp +++ b/Clas12Root/src/particleDraw3.cpp @@ -15,10 +15,11 @@ int main(int argc, char **argv) { // Run the TApplication (not needed if you only want to store the histograms.) app->SetPrompt("ParticleHist [%d] "); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); app->ProcessLine(Form("clas12root::ParticleHist hists{\"%s\"}",filename.Data())); if(argc==3) { TString script=argv[2]; diff --git a/Clas12Root/src/particleDraw4.cpp b/Clas12Root/src/particleDraw4.cpp index 3295a64..fe8b1d7 100644 --- a/Clas12Root/src/particleDraw4.cpp +++ b/Clas12Root/src/particleDraw4.cpp @@ -15,10 +15,11 @@ int main(int argc, char **argv) { // Run the TApplication (not needed if you only want to store the histograms.) app->SetPrompt("ParticleHist [%d] "); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); app->ProcessLine(Form("clas12root::ParticleHist hists{\"%s\"}",filename.Data())); if(argc==3) { TString script=argv[2]; diff --git a/Clas12Root/src/particleTree3.cpp b/Clas12Root/src/particleTree3.cpp index dcf7c93..1dfdca9 100644 --- a/Clas12Root/src/particleTree3.cpp +++ b/Clas12Root/src/particleTree3.cpp @@ -21,10 +21,11 @@ int main(int argc, char **argv) { // Run the TApplication (not needed if you only want to store the histograms.) app->SetPrompt("ParticleTree [%d] "); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo3\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks3\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root3\");"); app->ProcessLine(Form("clas12root::ParticleTree treemaker{\"%s\",\"%s\"}",infilename.Data(),outfilename.Data())); if(argc==4) { diff --git a/Clas12Root/src/particleTree4.cpp b/Clas12Root/src/particleTree4.cpp index 0d2dd46..7bf1697 100644 --- a/Clas12Root/src/particleTree4.cpp +++ b/Clas12Root/src/particleTree4.cpp @@ -21,10 +21,11 @@ int main(int argc, char **argv) { // Run the TApplication (not needed if you only want to store the histograms.) app->SetPrompt("ParticleTree [%d] "); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); - app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); + // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Root4\");"); app->ProcessLine(Form("clas12root::ParticleTree treemaker{\"%s\",\"%s\"}",infilename.Data(),outfilename.Data())); if(argc==4) { diff --git a/Clas12Root/tempHipoSelector.cpp b/Clas12Root/tempHipoSelector.cpp new file mode 100644 index 0000000..0e664be --- /dev/null +++ b/Clas12Root/tempHipoSelector.cpp @@ -0,0 +1,80 @@ +#define tempHipoSelector_cxx +// The class definition in tempHipoSelector.h has been generated automatically +// by the ROOT utility TTree::MakeSelector(). This class is derived +// from the ROOT class TSelector. For more information on the TSelector +// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. + + +// The following methods are defined in this file: +// Begin(): called every time a loop on the tree starts, +// a convenient place to create your histograms. +// SlaveBegin(): called after Begin(), when on PROOF called only on the +// slave servers. +// Process(): called for each event, in this function you decide what +// to read and fill your histograms. +// SlaveTerminate: called at the end of the loop on the tree, when on PROOF +// called only on the slave servers. +// Terminate(): called at the end of the loop on the tree, +// a convenient place to draw/fit your histograms. +// + + +#include "tempHipoSelector.h" +#include +#include + +namespace clas12root{ + + tempHipoSelector::tempHipoSelector(TString filename) : HipoSelector(filename) { + + } + tempHipoSelector::tempHipoSelector(HipoChain* chain) : HipoSelector(chain) { + + } + + void tempHipoSelector::Begin(TTree * /*tree*/) + { + // The Begin() function is called at the start of the query. + // When running with PROOF Begin() is only called on the client. + // The tree argument is deprecated (on PROOF 0 is passed). + + HipoSelector::Begin(0); //Do not remove this line! + } + + void tempHipoSelector::SlaveBegin(TTree * /*tree*/) + { + // The SlaveBegin() function is called after the Begin() function. + // When running with PROOF SlaveBegin() is called on each slave server. + // The tree argument is deprecated (on PROOF 0 is passed). + + HipoSelector::SlaveBegin(0); //Do not remove this line! + + } + + + Bool_t tempHipoSelector::ProcessEvent(){ + //Equivalent to TSelector Process + //Fill in what you would like to do with + //the data for each event.... + + return kTRUE; + } + + void tempHipoSelector::SlaveTerminate() + { + // The SlaveTerminate() function is called after all entries or objects + // have been processed. When running with PROOF SlaveTerminate() is called + // on each slave server. + + } + + void tempHipoSelector::Terminate() + { + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + } + + +} diff --git a/Clas12Root/tempHipoSelector.h b/Clas12Root/tempHipoSelector.h new file mode 100644 index 0000000..f77f320 --- /dev/null +++ b/Clas12Root/tempHipoSelector.h @@ -0,0 +1,35 @@ +#ifndef tempHipoSelector_h +#define tempHipoSelector_h + +#include "HipoSelector.h" + + +namespace clas12root{ + + class tempHipoSelector : public HipoSelector { + public : + + + tempHipoSelector() =default; + tempHipoSelector(TString filename) ; + tempHipoSelector(HipoChain *chain) ; + virtual ~tempHipoSelector() { } + void Begin(TTree *tree) final; + void SlaveBegin(TTree *tree) final; + + Bool_t ProcessEvent() final; + + void SlaveTerminate() final; + void Terminate() final; + + + private: + + + ClassDefOverride(clas12root::tempHipoSelector,0); + + }; +} + + +#endif // #ifdef tempHipoSelector_cxx diff --git a/RunRoot/CleanROOT.C b/RunRoot/CleanROOT.C deleted file mode 100644 index caa5e4a..0000000 --- a/RunRoot/CleanROOT.C +++ /dev/null @@ -1,14 +0,0 @@ -{ - gSystem->Exec("rm $CLAS12TOOL/Hipo/*.so"); - gSystem->Exec("rm $CLAS12TOOL/Hipo/*.d"); - gSystem->Exec("rm $CLAS12TOOL/Hipo/*.pcm"); - - gSystem->Exec("rm $CLAS12TOOL/Banks/*.so"); - gSystem->Exec("rm $CLAS12TOOL/Banks/*.d"); - gSystem->Exec("rm $CLAS12TOOL/Banks/*.pcm"); - - gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.so"); - gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.d"); - gSystem->Exec("rm $CLAS12TOOL/RunRoot/*.pcm"); - -} diff --git a/RunRoot/Ex2_HipoDraw.C b/RunRoot/Ex2_HipoDraw.C index 141d285..fe0435c 100644 --- a/RunRoot/Ex2_HipoDraw.C +++ b/RunRoot/Ex2_HipoDraw.C @@ -1,13 +1,6 @@ +//particleDraw4 /dir/file.hipo Ex2_HipoDraw.C { - ParticleHist hists("/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo"); - //OR using a chain - //Particle hists(""); - //hists.GetChain()->Add("file1.hipo") - //hists.GetChain()->Add("file2.hipo") - //hists.GetChain()->Add("/dir/*.hipo") - - hists.Hist1D("P.Theta*TMath::RadToDeg()",180,0,180,"PBANK.Px"); hists.Hist1D("P.Phi*TMath::RadToDeg()",180,-180,180,"PBANK.Px"); hists.Hist1D("P.P",100,0.1,12,"PBANK.Px"); diff --git a/RunRoot/Ex3_ProofLite.C b/RunRoot/Ex3_ProofLite.C new file mode 100644 index 0000000..d41d867 --- /dev/null +++ b/RunRoot/Ex3_ProofLite.C @@ -0,0 +1,14 @@ +//usage : +//clas12root 4 myFirstSelector.C Ex3_ProofLite.C +//Where 4 is however many workers you would like +//myFirstSelector.C is the source dode of the selector +// this can be created with any name using makeHipoSelector executable +//Note you must also change myFirstSelector in the macro below to your +//selector name +{ + clas12root::HipoChain chain; + chain.Add("/WHERE/IS/MY/HIPO/file.hipo"); + clas12root::myFirstSelector sel(&chain); + + gProof->Process(&sel,chain.GetNRecords()); +} diff --git a/RunRoot/Ex4_TreeMaker.C b/RunRoot/Ex4_TreeMaker.C index 019a1f4..feddfcf 100644 --- a/RunRoot/Ex4_TreeMaker.C +++ b/RunRoot/Ex4_TreeMaker.C @@ -1,5 +1,5 @@ +//particleTree4 /dir/file.hipo out.root Ex4_TreeMaker.C { - hiporoot::ParticleTree treemaker("/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo","test.root"); treemaker.Branch("P.Time/F"); treemaker.Branch("PBANK.Px/F"); @@ -10,7 +10,13 @@ treemaker.Branch("PBANK.Vz/F"); treemaker.Branch("PBANK.Pid/I"); + //e.g. Only save electron information // treemaker.AddParticleCut("PBANK.Pid==11"); - + + //Event topology cuts + // treemaker.AddAtLeastPid(211,1); //at least 1 pi+ + // treemaker.AddExactPid(11,1); //exactly 1 electron + // treemaker.AddZeroOfRestPid(); //nothing else, if not this line any of anything else + treemaker.Fill(); } diff --git a/RunRoot/LoadClas12Root.C b/RunRoot/LoadClas12Root.C deleted file mode 100644 index 7311b19..0000000 --- a/RunRoot/LoadClas12Root.C +++ /dev/null @@ -1,12 +0,0 @@ -{ - - TString CLAS12TOOL=gSystem->Getenv("CLAS12TOOL"); - TString LIB=CLAS12TOOL+"/lib/"; - gSystem->Load(LIB+"liblz4"); - gSystem->Load(LIB+"libHipo"); - gSystem->Load(LIB+"libClas12"); - gSystem->Load(LIB+"libClas12Root"); - - - -} diff --git a/RunRoot/LoadClas12Root3.C b/RunRoot/LoadClas12Root3.C new file mode 100644 index 0000000..6e2d5a5 --- /dev/null +++ b/RunRoot/LoadClas12Root3.C @@ -0,0 +1,20 @@ +namespace clas12{}; +namespace hipo{}; +namespace clas12root{}; + +using namespace clas12; +using namespace hipo; +using namespace clas12root; + +void LoadClas12Root3(){ + + TString CLAS12TOOL=gSystem->Getenv("CLAS12TOOL"); + TString LIB=CLAS12TOOL+"/lib/"; + gSystem->Load(LIB+"liblz4"); + gSystem->Load(LIB+"libHipo3"); + gSystem->Load(LIB+"libClas12Banks3"); + gSystem->Load(LIB+"libClas12Root3"); + + + +} diff --git a/RunRoot/LoadClas12Root4.C b/RunRoot/LoadClas12Root4.C new file mode 100644 index 0000000..6ead1af --- /dev/null +++ b/RunRoot/LoadClas12Root4.C @@ -0,0 +1,20 @@ +namespace clas12{}; +namespace hipo{}; +namespace clas12root{}; + +using namespace clas12; +using namespace hipo; +using namespace clas12root; + +void LoadClas12Root4(){ + + TString CLAS12TOOL=gSystem->Getenv("CLAS12TOOL"); + TString LIB=CLAS12TOOL+"/lib/"; + gSystem->Load(LIB+"liblz4"); + gSystem->Load(LIB+"libHipo4"); + gSystem->Load(LIB+"libClas12Banks4"); + gSystem->Load(LIB+"libClas12Root4"); + + + +} diff --git a/RunRoot/LoadProofLib4.C b/RunRoot/LoadProofLib4.C new file mode 100644 index 0000000..cbbfed3 --- /dev/null +++ b/RunRoot/LoadProofLib4.C @@ -0,0 +1,30 @@ +//Load all the libraries for use in PROOF-lite +// to set the workers run like : +//clas12root4 'LoadProofLib4.C(N)' +void LoadProofLib4(Int_t Nworkers=1){ + + gSystem->Load("libProof.so"); + TProof *proof =nullptr; + if(!gProof) + proof = TProof::Open("://lite"); + else + proof=gProof; + + Int_t NCores=Nworkers; + proof->SetParallel(NCores); + if(gProof->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/lib/liblz4.so",kTRUE)==0){} + // get the sandbox directroy + TString sandbox="~/.proof"; + if(TString(gEnv->GetValue("ProofLite.Sandbox",""))!=TString()){ + sandbox=gEnv->GetValue("ProofLite.Sandbox",""); + } + // copy pcm files to sandbox/cache + gSystem->Exec(Form("cp $CLAS12TOOL/lib/libHipo4_rdict.pcm %s/cache/.",sandbox.Data())); + gSystem->Exec(Form("cp $CLAS12TOOL/lib/libClas12Banks4_rdict.pcm %s/cache/.",sandbox.Data())); + gSystem->Exec(Form("cp $CLAS12TOOL/lib/libClas12Root4_rdict.pcm %s/cache/.",sandbox.Data())); + + gProof->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/lib/libHipo4.so",kTRUE); + gProof->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/lib/libClas12Banks4.so",kTRUE); + gProof->Load(TString(gSystem->Getenv("CLAS12TOOL"))+"/lib/libClas12Root4.so",kTRUE); + +} diff --git a/RunRoot/hiporoot/BankHist.C b/RunRoot/hiporoot/BankHist.C deleted file mode 100644 index 34c37d2..0000000 --- a/RunRoot/hiporoot/BankHist.C +++ /dev/null @@ -1,77 +0,0 @@ -#include "BankHist.h" -#include "HipoRootAction.h" -#include "clas12reader.h" -#include - -namespace hiporoot { - - BankHist::BankHist(TString filename): HipoHist(filename){ - _tempActionName="BankHistAction"; - - _mapOfParts["BANK"]="bank."; - _mapOfParts["REC::Particle"]="particle"; - _mapOfParts["REC::Calorimeter"]="calorimeter"; - _mapOfParts["REC::Scintillator"]="scintillator"; - _mapOfParts["REC::Cherenkov"]="cherenkov"; - _mapOfParts["REC::Track"]="tracker"; - _mapOfParts["REC::Traj"]="traj"; - _mapOfParts["REC::ForwardTagger"]="forwardtagger"; - _mapOfParts["MC::Lund"]="mcparticle"; - _mapOfParts["REC::CovMat"]="covmatrix"; - _mapOfParts["RAW::vtp"]="vtp"; - _mapOfParts["RAW::scaler"]="scaler"; - _mapOfParts["REC::Event"]="header"; - - - } - BankHist::~BankHist(){ - } - void BankHist::Loop(){ - while(IsMoreFiles()) - gHipoRootAction->Action(this); - - _bankName=TString(); - } - HipoHist* BankHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ - - CheckForBank(varExp); - auto checkName1=_bankName; - - if(checkName1==TString()) - cout<<"WARNING BankHist::Hist1D" <<" no bank found in "<; */ - - /* c12_uptr clas12(){ */ - /* return std::move(c12_uptr */ - /* (new clas12::clas12reader(HipoFileName().Data()))); */ - /* } */ - - private : - - TString _bankName; - - }; -} diff --git a/RunRoot/hiporoot/HipoChain.C b/RunRoot/hiporoot/HipoChain.C deleted file mode 100644 index fd87808..0000000 --- a/RunRoot/hiporoot/HipoChain.C +++ /dev/null @@ -1,53 +0,0 @@ -#include "HipoChain.h" -#include "reader.h" - -namespace hiporoot { - - HipoChain::HipoChain(): TNamed("HIPOFILES","A chain of hipo files"){ - - _ListOfFiles=_tchain.GetListOfFiles(); - } - - HipoChain::~HipoChain(){ - } - - - void HipoChain::Add(TString name){ - - _tchain.Add(name); - _Nrecords=-1; //must recalculate - } - - Long64_t HipoChain::GetNRecords(){ - if(_Nrecords!=-1) - return _Nrecords; - - _Nrecords=0; - _fileRecords.clear(); - auto nfiles=GetNFiles(); - //loop over files and get the number of records - for(auto i=0;iGetNFiles()) ifile=GetNFiles(); - for(Int_t i=0;iirec) - return i-1; - } - return n-1; - } -} diff --git a/RunRoot/hiporoot/HipoChain.h b/RunRoot/hiporoot/HipoChain.h deleted file mode 100644 index a21c232..0000000 --- a/RunRoot/hiporoot/HipoChain.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - - -#include -#include -#include -#include - -namespace hiporoot { - - - class HipoChain : public TNamed { - - - public : - HipoChain(); - virtual ~HipoChain(); - - - void Add(TString name); - Int_t GetNFiles(){return _ListOfFiles->GetEntries();} - Long64_t GetNRecords(); - - TString GetFileName(Int_t i){ - if(i>=GetNFiles()) return TString(); - return _ListOfFiles->At(i)->GetTitle(); - } - - Int_t GetFileRecords(Int_t i){ - if(i _fileRecords; - - ClassDef(hiporoot::HipoChain,1); - }; -} diff --git a/RunRoot/hiporoot/HipoFileSelector.C b/RunRoot/hiporoot/HipoFileSelector.C deleted file mode 100644 index a0af89b..0000000 --- a/RunRoot/hiporoot/HipoFileSelector.C +++ /dev/null @@ -1,128 +0,0 @@ -#define HipoFileSelector_cxx -// The class definition in HipoFileSelector.h has been generated automatically -// by the ROOT utility TTree::MakeSelector(). This class is derived -// from the ROOT class TSelector. For more information on the TSelector -// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. - - -// The following methods are defined in this file: -// Begin(): called every time a loop on the tree starts, -// a convenient place to create your histograms. -// SlaveBegin(): called after Begin(), when on PROOF called only on the -// slave servers. -// Process(): called for each event, in this function you decide what -// to read and fill your histograms. -// SlaveTerminate: called at the end of the loop on the tree, when on PROOF -// called only on the slave servers. -// Terminate(): called at the end of the loop on the tree, -// a convenient place to draw/fit your histograms. -// - - -#include "HipoFileSelector.h" -#include -#include -#include -#include -#include -#include -#include - -namespace hiporoot{ - - HipoFileSelector::HipoFileSelector(TTree * ){ - - } - HipoFileSelector::HipoFileSelector(TString filename) : _chain(new HipoChain()) { - _chain->Add(filename); - } - HipoFileSelector::HipoFileSelector(HipoChain* chain) : _chain(chain) { - - } - - // void HipoFileSelector::Run(){ - - // } - - void HipoFileSelector::Begin(TTree * /*tree*/) - { - // The Begin() function is called at the start of the query. - // When running with PROOF Begin() is only called on the client. - // The tree argument is deprecated (on PROOF 0 is passed). - - TString option = GetOption(); - - - if(!fInput){ - fInput=new TList(); - // fInput->SetOwner(kTRUE); - } - - if(!_chain){ - cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ - cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves - } - - void HipoFileSelector::SlaveBegin(TTree * /*tree*/) - { - // The SlaveBegin() function is called after the Begin() function. - // When running with PROOF SlaveBegin() is called on each slave server. - // The tree argument is deprecated (on PROOF 0 is passed). - - TString option = GetOption(); - fInput->Print(); - _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); - //TString outdirstr=TString(outdir->GetTitle()); - cout<<"HipoFileSelector::SlaveBegin( "<<_chain<GetNFiles()<Add(_hist1); - } - - Bool_t HipoFileSelector::Process(Long64_t entry) - { - - _c12.reset(new clas12::clas12reader(_chain->GetFileName(entry).Data())); - - while(_c12->next()==true){ - ProcessEvent(); - } - - //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); - return kTRUE; - } - void HipoFileSelector::SlaveTerminate() - { - // The SlaveTerminate() function is called after all entries or objects - // have been processed. When running with PROOF SlaveTerminate() is called - // on each slave server. - - } - - void HipoFileSelector::Terminate() - { - // The Terminate() function is the last function to be called during - // a query. It always runs on the client, it can be used to present - // the results graphically or save the results to file. - - TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); - _hist1 = dynamic_cast(fOutput->FindObject("Time")); - if (_hist1) _hist1->Draw(); - c1->Update(); - } - - -} diff --git a/RunRoot/hiporoot/HipoFileSelector.h b/RunRoot/hiporoot/HipoFileSelector.h deleted file mode 100644 index 17ccdf6..0000000 --- a/RunRoot/hiporoot/HipoFileSelector.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef HipoFileSelector_h -#define HipoFileSelector_h - -#include -#include -#include -#include - -#include -#include -#include - -// Headers needed by this particular selector -#include "HipoChain.h" -#include "clas12reader.h" - -namespace hiporoot{ - - - class HipoFileSelector : public TSelector { - public : - - - HipoFileSelector(TString filename) ; - HipoFileSelector(HipoChain *chain) ; - HipoFileSelector(TTree * /*tree*/ =0); - virtual ~HipoFileSelector() { } - virtual Int_t Version() const { return 2; } - virtual void Begin(TTree *tree); - virtual void SlaveBegin(TTree *tree); - // virtual void Init(TTree *tree); - //virtual Bool_t Notify(); - virtual Bool_t Process(Long64_t entry); - //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } - - Bool_t ProcessEvent(); - - virtual void SetOption(const char *option) { fOption = option; } - virtual void SetObject(TObject *obj) { fObject = obj; } - virtual void SetInputList(TList *input) { fInput = input; } - virtual TList *GetOutputList() const { return fOutput; } - virtual void SlaveTerminate(); - virtual void Terminate(); - - - - private: - - std::unique_ptr _c12; - HipoChain* _chain=nullptr; - - Int_t _NcurrRecords=0; - Int_t _iRecord=0; - Int_t _iFile=0; - Long64_t _NfileRecords=0; - - TH1F* _hist1=nullptr; - - ClassDef(hiporoot::HipoFileSelector,0); - - }; -} - - -#endif // #ifdef HipoFileSelector_cxx diff --git a/RunRoot/hiporoot/HipoHist.C b/RunRoot/hiporoot/HipoHist.C deleted file mode 100644 index ba859fb..0000000 --- a/RunRoot/hiporoot/HipoHist.C +++ /dev/null @@ -1,122 +0,0 @@ -#include "HipoHist.h" -#include -#include -#include -#include - -namespace hiporoot { - - HipoHist::HipoHist(TString filename): HipoROOTOut(filename){ - _histList->SetName("HipoHists"); - _histList->SetOwner(kFALSE); - - } - HipoHist::~HipoHist(){ - } - HipoHist* HipoHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ - - varExp=ExpandExpression(varExp,","); - if(condExp==TString(""))condExp="1"; - if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); - AddAction(varExp,condExp); - auto hist=new TH1F(varExp,varExp,nbins,min,max); - _histList->Add(hist); - _curHist.push_back(hist); - return this; - } - HipoHist* HipoHist::Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX,Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp){ - - varExp=ExpandExpression(varExp,","); - if(condExp==TString(""))condExp="1"; - if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); - AddAction(varExp,condExp); - auto hist=new TH2F(varExp,varExp,nbinsX,minX,maxX,nbinsY,minY,maxY); - _histList->Add(hist); - _curHist.push_back(hist); - return this; - } - - void HipoHist::Draw(TString opt){ - gBenchmark->Reset(); - gBenchmark->Start("compile time"); - CompileAction(); - gBenchmark->Stop("compile time"); - gBenchmark->Print("compile time"); - gBenchmark->Start("loop time"); - Loop(); - gBenchmark->Stop("loop time"); - gBenchmark->Print("loop time"); - OnCanvas(opt); - CleanAction(); - _curHist.clear(); - } - - void HipoHist::OnCanvas(TString opt){ - - Int_t left=-1; - Int_t Npads=0; - Int_t nx=0; - Int_t ny=0; - if((left=opt.First("("))!=-1){ - left++; - Int_t right=opt.First(")"); - if(right==-1) cout<<"HipoHist::OnCanvas mismatched () "<GetEntries()<2) - xandy=dims.Tokenize("X"); - if(xandy->GetEntries()>1){ - nx=TString(xandy->At(0)->GetName()).Atoi(); - ny=TString(xandy->At(1)->GetName()).Atoi(); - TCanvas* canvas=new TCanvas(); - canvas->Divide(nx,ny); - canvas->Draw(); - Npads=nx*ny; - } - //remove split option - left--; - TString splitopt=opt(left,right-left+1); - opt.ReplaceAll(splitopt,""); - } - //Simple 1 hist on 1 canvas - TCanvas* canvas1=nullptr; - if(_curHist.size()==1){ - if(!gPad) canvas1=new TCanvas(); - _curHist[0]->DrawCopy(opt); - gPad->Draw(); - return; - } - if(!Npads){ - //Simple many hists on many canvas - for(auto* hist : _curHist){ - if(!opt.Contains("same")){ - canvas1=new TCanvas(); - } - hist->DrawCopy(opt); - canvas1->Draw(); - } - } - else{ - //Use use divided canvas for many hists - Int_t ipad=1; - auto* canvas=dynamic_cast(gPad); - Int_t Ncan=0; - for(auto* hist : _curHist){ - if(ipad>Npads){ - canvas=new TCanvas(); - canvas->Divide(nx,ny); - canvas->Draw(); - ipad=1; - } - canvas->cd(ipad++); - hist->DrawCopy(opt); - } - } - } - void HipoHist::Save(const TString outname){ - auto outfile=TFile::Open(outname,"recreate"); - outfile->WriteTObject(_histList); - delete outfile; - } - -} diff --git a/RunRoot/hiporoot/HipoHist.h b/RunRoot/hiporoot/HipoHist.h deleted file mode 100644 index 1d036eb..0000000 --- a/RunRoot/hiporoot/HipoHist.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - - -#include "HipoROOTOut.h" -#include -#include -#include - -namespace hiporoot { - - - class HipoHist : public HipoROOTOut { - - - public : - HipoHist(TString filename); - virtual ~HipoHist(); - - - - virtual HipoHist* Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp="1"); - virtual HipoHist* Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX, - Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp="1"); - - - void Draw(TString opt=""); - void OnCanvas(TString opt); - void Save(const TString outname); - std::vector* Hists(){return &_curHist;} - protected : - - std::vector _curHist; - - private : - - TList* _histList=new TList{}; - - }; -} diff --git a/RunRoot/hiporoot/HipoROOTOut.C b/RunRoot/hiporoot/HipoROOTOut.C deleted file mode 100644 index 49bf5fb..0000000 --- a/RunRoot/hiporoot/HipoROOTOut.C +++ /dev/null @@ -1,294 +0,0 @@ -#include "HipoROOTOut.h" -#include "HipoRootAction.h" -#include -#include -#include -#include -#include -#include - -namespace hiporoot{ - - HipoROOTOut::HipoROOTOut(TString filename): _hipoFileName(filename){ - //make a temp file directory - TString HOME=TString(gSystem->Getenv("HOME")); - _tempDir=HOME+"/.hiporoot/"; - if(gSystem->Exec(Form("mkdir -p %s",_tempDir.Data()))){ - std::cout<<"HipoROOTOut::HipoROOTOut will store temp files in current directory"<Exec(Form("rm %sasdf*",_tempDir.Data())); - } - TString HipoROOTOut::NextFile(){ - if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) - _chain.Add(_hipoFileName); - if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) - return TString(); - TString fname=_chain.GetListOfFiles()->At(_iHipoFile)->GetTitle(); - _iHipoFile++; - return fname; - } - Bool_t HipoROOTOut::IsMoreFiles(){ - if(_iHipoFile==0&&_chain.GetListOfFiles()->GetEntries()==0) - _chain.Add(_hipoFileName); - if(_iHipoFile>=_chain.GetListOfFiles()->GetEntries()) - return kFALSE; - return kTRUE; - } - void HipoROOTOut::AddAction(TString varExp,TString condExp){ - if(_curMacro==TString("")){ - TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/RunRoot/hiporoot/"; - TMacro macro(HIPOROOT+"template"+_tempActionName+".C"); - _curMacro=_tempDir+Form("asdf%d__%s__.C",_Nruns,_tempActionName.Data()); - - TString strline=macro.GetLineWith("NNNN")->GetString(); - _actionClassName=_tempActionName+Form("%d",_Nruns); - strline.ReplaceAll("NNNNN",_actionClassName); - macro.GetLineWith("NNNNN")->SetString(strline); - - _Nruns++; - macro.SaveSource(_curMacro); - } - - TMacro macro(_curMacro); - TString strline=macro.GetLineWith("XXXX")->GetString(); - strline.ReplaceAll("////",""); - strline.ReplaceAll("XXXX",varExp); - strline.ReplaceAll("IIII",Form("%d",_Nactions++)); - strline.ReplaceAll("CCCC",condExp); - - TList *lines=macro.GetListOfLines(); - TObject* obj=macro.GetLineWith("XXXX"); - lines->AddAfter(obj,new TObjString(strline.Data())); - - - macro.SaveSource(_curMacro); - - } - void HipoROOTOut::ReplaceMacroText(TString from,TString to){ - TMacro macro(_curMacro); - TString strline=macro.GetLineWith(from)->GetString(); - strline.ReplaceAll(from,to); - macro.GetLineWith(from)->SetString(strline); - macro.SaveSource(_curMacro); - } - - void HipoROOTOut::CompileAction(){ - PreCompileAction(); - TMacro macro(_curMacro); - macro.Print(); - - auto result=gROOT->LoadMacro(Form("%s++",_curMacro.Data())); - - gROOT->ProcessLine(Form("hiporoot::%s::Create();",_actionClassName.Data(),_actionClassName.Data())); - } - - void HipoROOTOut::CleanAction(){ - _iHipoFile=0; - if(_curMacro!=TString("")){ - _curMacro=""; - _Nactions=0; - } - } - - - //////////////////////////////////////////////////////////////// - ///String parsing - TString HipoROOTOut::ExpandExpression(TString varExp0,TString seperator){ - varExp0.ReplaceAll(" ",""); - varExp0.ReplaceAll("::","@@"); - varExp0.ReplaceAll("()","{}"); - varExp0=AddParenthesis(varExp0); - - auto exps = varExp0.Tokenize(":"); - auto Nexp = exps->GetEntries(); - TString varExp1; - for(Int_t i=0;i0) varExp1+=seperator; - TString exp = exps->At(i)->GetName(); - varExp1+=ExpandParenthesis(exp,seperator); - } - delete exps; - varExp1.ReplaceAll("@@","::"); - varExp1.ReplaceAll("{}","()"); - cout<<"DONE TString HipoROOTOut::ExpandExpersion "<GetEntries(); - if(Npl){ - Int_t ns=0; - if(exp[0]=='#') varExp1+=symbols[ns++];//e.g. negative - - for(Int_t ipl=0;iplGetEntries();ipl++){ - if(ipl>0)varExp1+=symbols[ns++]; - varExp1+=ExpandPart(plusses->At(ipl)->GetName()); - } - } - - // else varExp1+=ExpandPart(exp); - delete plusses; - - return varExp1; - } - ///////////////////NEED TO FIX FOR FTOF1B.Path<700 conditions - TString HipoROOTOut::ExpandPart(TString exp){ - // cout<<" :ExpandPart "<GetEntries()!=2) return exp; - TString part= parts->At(0)->GetName(); - exp=Form("%sget%s()",_mapOfParts[part].Data(),parts->At(1)->GetName()); - delete parts; - return exp; - } - - vector HipoROOTOut::RemoveArithmetic(TString& expr){ - vector symbols; - - const vector operators1={'+','-','/','*','>','<','!'}; - const vector operators2={"==","!=",">=","<=","&&","||"}; - for(Int_t i=0;i0){ - ia--; - alpha=varExp0[ia]; - } - if(ia!=i-1){ - // if(ia==i-2)ileft=ia+1; -ileft=ia+1; // else ileft=ia; - if(ileft-1>=0) - if(varExp0[ileft-1]=='(') //check if already got ) - iright=0; - } - - if(iright!=i+1&&iright!=0){ - if(ileft==1) ileft=0; - TString expr=varExp0(ileft,iright-ileft); - varExp1.ReplaceAll(expr.Data(),Form("(%s)",expr.Data())); - i++; - } - } - } - return varExp1; - - } - - -} diff --git a/RunRoot/hiporoot/HipoROOTOut.h b/RunRoot/hiporoot/HipoROOTOut.h deleted file mode 100644 index 7bd3be2..0000000 --- a/RunRoot/hiporoot/HipoROOTOut.h +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - - -#include "region_particle.h" -#include -#include -#include - - -namespace hiporoot { - - class HipoROOTOut { - - - public : - HipoROOTOut(TString filename); - virtual ~HipoROOTOut(); - - void AddAction(TString varExp,TString condExp="1"); - void CompileAction(); - void CleanAction(); - void ReplaceMacroText(TString from,TString to); - // virtual TString ExpandVars(TString varExp0,TString seperator){return varExp0;}; - virtual TString ExpandExpression(TString varExp0,TString seperator); - virtual void Loop()=0; - virtual void PreCompileAction(){}; - - // virtual Double_t Action()=0; - virtual Bool_t Condition(){return kTRUE;} - - TString HipoFileName(){return _hipoFileName;} - TString NextFile(); - Bool_t IsMoreFiles(); - TChain* GetChain(){return &_chain;} - - - TString ExpandVars(TString varExp0,TString seperator); - TString ExpandPart(TString exp); - TString ExpandParenthesis(TString varExp0,TString seperator); - TString AddParenthesis(TString varExp0); - vector RemoveArithmetic(TString& expr); - - - protected : - - TString _tempActionName; - TString _actionClassName; - std::map _mapOfParts; - - TString GetCurrMacroName(){return _curMacro;} - Int_t GetNActions(){return _Nactions;} - private : - - TString _hipoFileName; - TString _curMacro; - TString _tempDir="~/.hiporoot"; - Int_t _Nactions=0; - Int_t _Nruns=0; - TChain _chain; - Int_t _iHipoFile=0; - - };//class HipoROOTOut - -} diff --git a/RunRoot/hiporoot/HipoRootAction.C b/RunRoot/hiporoot/HipoRootAction.C deleted file mode 100644 index 188b6d1..0000000 --- a/RunRoot/hiporoot/HipoRootAction.C +++ /dev/null @@ -1,5 +0,0 @@ -#include "HipoRootAction.h" - - -std::unique_ptr hiporoot::gHipoRootAction; - diff --git a/RunRoot/hiporoot/HipoRootAction.h b/RunRoot/hiporoot/HipoRootAction.h deleted file mode 100644 index 86fefb1..0000000 --- a/RunRoot/hiporoot/HipoRootAction.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include "HipoROOTOut.h" -#include -#include - -namespace hiporoot{ - - class HipoRootAction { - - public : - virtual ~HipoRootAction()=default; - - virtual void Action(hiporoot::HipoROOTOut *hiprout) = 0; - - template static void Create(); - - private: - - }; - R__EXTERN std::unique_ptr gHipoRootAction; - - - template void HipoRootAction::Create() - { - gHipoRootAction.reset(new T()); - } - - -} diff --git a/RunRoot/hiporoot/HipoSelector.C b/RunRoot/hiporoot/HipoSelector.C deleted file mode 100644 index 257999d..0000000 --- a/RunRoot/hiporoot/HipoSelector.C +++ /dev/null @@ -1,142 +0,0 @@ -#define HipoSelector_cxx -// The class definition in HipoSelector.h has been generated automatically -// by the ROOT utility TTree::MakeSelector(). This class is derived -// from the ROOT class TSelector. For more information on the TSelector -// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual. - - -// The following methods are defined in this file: -// Begin(): called every time a loop on the tree starts, -// a convenient place to create your histograms. -// SlaveBegin(): called after Begin(), when on PROOF called only on the -// slave servers. -// Process(): called for each event, in this function you decide what -// to read and fill your histograms. -// SlaveTerminate: called at the end of the loop on the tree, when on PROOF -// called only on the slave servers. -// Terminate(): called at the end of the loop on the tree, -// a convenient place to draw/fit your histograms. -// - - -#include "HipoSelector.h" -#include -#include -#include -#include -#include -#include -#include -#include - -namespace hiporoot{ - - HipoSelector::HipoSelector(TTree * ){ - - } - HipoSelector::HipoSelector(TString filename) : _chain(new HipoChain()) { - _chain->Add(filename); - } - HipoSelector::HipoSelector(HipoChain* chain) : _chain(chain) { - - } - - // void HipoSelector::Run(){ - - // } - - void HipoSelector::Begin(TTree * /*tree*/) - { - // The Begin() function is called at the start of the query. - // When running with PROOF Begin() is only called on the client. - // The tree argument is deprecated (on PROOF 0 is passed). - - TString option = GetOption(); - - - if(!fInput){ - fInput=new TList(); - // fInput->SetOwner(kTRUE); - } - - if(!_chain){ - cout<<"Sorry no hipofiles given, exiting...."<GetNFiles()){ - cout<<"Sorry no hipofiles given, exiting...."<Add(_chain);//make chain of files avaialbel on slaves - } - - void HipoSelector::SlaveBegin(TTree * /*tree*/) - { - // The SlaveBegin() function is called after the Begin() function. - // When running with PROOF SlaveBegin() is called on each slave server. - // The tree argument is deprecated (on PROOF 0 is passed). - - TString option = GetOption(); - _chain=dynamic_cast(fInput->FindObject("HIPOFILES")); - - _hist1=new TH1F("Time","Time",600,-100,500); - fOutput->Add(_hist1); - } - - Bool_t HipoSelector::Process(Long64_t entry) - { - gSystem->Sleep(gRandom->Uniform()*100+0.05); - //check if need new file - _iRecord=entry-_NfileRecords; //get record to analyse,subtract records of previous files - if( _iRecord>=_NcurrRecords ){ - _iFile=_chain->GetFileFromRecord(entry); - cout<<"Start New file "<GetRecordsToHere(_iFile); //Add records from previous file to give offset - - _c12.reset(new clas12::clas12reader(_chain->GetFileName(_iFile).Data())); - _NcurrRecords= _c12->getReader().getNRecords(); //records in this file - _iRecord=entry-_NfileRecords; //get first record in this file to process - cout<<"Stop New file "<Exec(Form("vmtouch -vt %s",_chain->GetFileName(_iFile).Data())); - - } - - _c12->getReader().loadRecord(_iRecord); - while(_c12->nextInRecord()==true){ - ProcessEvent(); - } - - //cout<<"Done record "<<_iRecord<<" "<<_iFile<Fill(_c12->head()->getStartTime()); - return kTRUE; - - } - - void HipoSelector::SlaveTerminate() - { - // The SlaveTerminate() function is called after all entries or objects - // have been processed. When running with PROOF SlaveTerminate() is called - // on each slave server. - - } - - void HipoSelector::Terminate() - { - // The Terminate() function is the last function to be called during - // a query. It always runs on the client, it can be used to present - // the results graphically or save the results to file. - - TCanvas *c1 = new TCanvas("c1", "Proof ProofFirst canvas",200,10,400,400); - _hist1 = dynamic_cast(fOutput->FindObject("Time")); - if (_hist1) _hist1->Draw(); - c1->Update(); - } - - -} diff --git a/RunRoot/hiporoot/HipoSelector.h b/RunRoot/hiporoot/HipoSelector.h deleted file mode 100644 index 6928d02..0000000 --- a/RunRoot/hiporoot/HipoSelector.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef HipoSelector_h -#define HipoSelector_h - -#include -#include -#include -#include - -#include -#include -#include - -// Headers needed by this particular selector -#include "HipoChain.h" -#include "clas12reader.h" - -namespace hiporoot{ - - - class HipoSelector : public TSelector { - public : - - - HipoSelector(TString filename) ; - HipoSelector(HipoChain *chain) ; - HipoSelector(TTree * /*tree*/ =0); - virtual ~HipoSelector() { } - virtual Int_t Version() const { return 2; } - virtual void Begin(TTree *tree); - virtual void SlaveBegin(TTree *tree); - // virtual void Init(TTree *tree); - //virtual Bool_t Notify(); - virtual Bool_t Process(Long64_t entry); - //virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEnqtry(entry, getall) : 0; } - - Bool_t ProcessEvent(); - - virtual void SetOption(const char *option) { fOption = option; } - virtual void SetObject(TObject *obj) { fObject = obj; } - virtual void SetInputList(TList *input) { fInput = input; } - virtual TList *GetOutputList() const { return fOutput; } - virtual void SlaveTerminate(); - virtual void Terminate(); - - - - private: - - std::unique_ptr _c12; - HipoChain* _chain=nullptr; - - Int_t _NcurrRecords=0; - Int_t _iRecord=0; - Int_t _iFile=0; - Long64_t _NfileRecords=0; - - TH1F* _hist1=nullptr; - - ClassDef(hiporoot::HipoSelector,0); - - }; -} - - -#endif // #ifdef HipoSelector_cxx diff --git a/RunRoot/hiporoot/HipoTreeMaker.C b/RunRoot/hiporoot/HipoTreeMaker.C deleted file mode 100644 index fdb535d..0000000 --- a/RunRoot/hiporoot/HipoTreeMaker.C +++ /dev/null @@ -1,56 +0,0 @@ -#include "HipoTreeMaker.h" -#include - -namespace hiporoot { - - HipoTreeMaker::HipoTreeMaker(TString filename, TString treefilename): HipoROOTOut(filename){ - - _treefile=new TFile(treefilename,"recreate"); - _tree =new TTree("hipotree","tree converted from hipo data"); - _tree->SetDirectory(_treefile); - } - HipoTreeMaker::~HipoTreeMaker(){ - } - void HipoTreeMaker::AddParticleCut(TString cut){ - if(_pcut==TString("1")) - _pcut=TString(); - _pcut+=ExpandExpression(cut,""); - } - void HipoTreeMaker::AddEventCut(TString cut){ - if(_evcut==TString("0")) - _evcut=TString(); - _evcut+=ExpandExpression(cut,""); - } - - HipoTreeMaker* HipoTreeMaker::Branch(TString varExp,TString condExp){ - - TString branchType=varExp; - branchType.Remove(0,branchType.Sizeof()-3); //keep /F etc - varExp.Remove(varExp.Sizeof()-3,2); //remove /F etc - - _branchNames.push_back(varExp); - _branchTypes.push_back(branchType); - - varExp=ExpandExpression(varExp,""); - AddAction(varExp); - - return this; - } - void HipoTreeMaker::Fill(){ - gBenchmark->Reset(); - gBenchmark->Start("compile time"); - CompileAction(); - gBenchmark->Stop("compile time"); - gBenchmark->Print("compile time"); - gBenchmark->Start("loop time"); - Loop(); - gBenchmark->Stop("loop time"); - gBenchmark->Print("loop time"); - CleanAction(); - _tree->Write(); - delete _treefile; - - } - - -} diff --git a/RunRoot/hiporoot/HipoTreeMaker.h b/RunRoot/hiporoot/HipoTreeMaker.h deleted file mode 100644 index ebc2d53..0000000 --- a/RunRoot/hiporoot/HipoTreeMaker.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - - -#include "HipoROOTOut.h" -#include -#include - -namespace hiporoot { - - - class HipoTreeMaker : public HipoROOTOut { - - - public : - HipoTreeMaker(TString filename, TString treefilename); - virtual ~HipoTreeMaker(); - - - - virtual HipoTreeMaker* Branch(TString varExp,TString condExp="1"); - - - TTree* Tree() const {return _tree;} - - void Fill(); - void AddParticleCut(TString cut); - void AddEventCut(TString cut); - - protected : - - vector _branchNames; - vector _branchTypes; - TString _evcut={"0"}; - TString _pcut={"1"}; - - private : - - TFile* _treefile=nullptr; - TTree* _tree=nullptr; - }; -} diff --git a/RunRoot/hiporoot/LoadHipoROOT.C b/RunRoot/hiporoot/LoadHipoROOT.C deleted file mode 100644 index b3c6ef4..0000000 --- a/RunRoot/hiporoot/LoadHipoROOT.C +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include - -namespace hiporoot{} -using namespace hiporoot; - -void LoadHipoROOT(){ - - - gROOT->LoadMacro("$CLAS12TOOL/RunRoot/importToROOT.C"); - - TString HIPOROOT=TString(gSystem->Getenv("CLAS12TOOL"))+"/RunRoot/hiporoot/"; - gSystem->AddIncludePath(TString("-I")+HIPOROOT); - - - gROOT->LoadMacro(HIPOROOT+"HipoROOTOut.C+"); - gROOT->LoadMacro(HIPOROOT+"HipoRootAction.C+"); - gROOT->LoadMacro(HIPOROOT+"HipoHist.C+"); - gROOT->LoadMacro(HIPOROOT+"ParticleHist.C+"); - gROOT->LoadMacro(HIPOROOT+"BankHist.C+"); - gROOT->LoadMacro(HIPOROOT+"HipoTreeMaker.C+"); - gROOT->LoadMacro(HIPOROOT+"ParticleTree.C+"); - - - -} diff --git a/RunRoot/hiporoot/ParticleHist.C b/RunRoot/hiporoot/ParticleHist.C deleted file mode 100644 index 1bbc377..0000000 --- a/RunRoot/hiporoot/ParticleHist.C +++ /dev/null @@ -1,55 +0,0 @@ -#include "ParticleHist.h" -#include "HipoRootAction.h" -#include "clas12reader.h" -#include - -namespace hiporoot { - - ParticleHist::ParticleHist(TString filename): HipoHist(filename){ - _tempActionName="ParticleHistAction"; - - //Calorimters - _mapOfParts["ECIN"]="p->cal(ECIN)->"; - _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; - _mapOfParts["PCAL"]="p->cal(PCAL)->"; - - //Scintillators - _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; - _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; - _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; - _mapOfParts["CTOF"]="p->sci(CTOF)->"; - _mapOfParts["CND1"]="p->sci(CND1)->"; - _mapOfParts["CND2"]="p->sci(CND2)->"; - _mapOfParts["CND3"]="p->sci(CND3)->"; - - //FT - _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; - _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; - - //Cherenkov - _mapOfParts["HTCC"]="p->ft(HTCC)->"; - _mapOfParts["LTCC"]="p->ft(LTCC)->"; - - //Trackers - _mapOfParts["DC"]="p->trk(DC)->"; - _mapOfParts["CVT"]="p->trk(CVT)->"; - - //Particles - _mapOfParts["PBANK"]="p->par()->"; - - //Particle Region - _mapOfParts["P"]="p->"; - - //EVENT - _mapOfParts["EVNT"]="c12.head()->"; - - } - ParticleHist::~ParticleHist(){ - } - void ParticleHist::Loop(){ - while(IsMoreFiles()) - gHipoRootAction->Action(this); - - } - -} diff --git a/RunRoot/hiporoot/ParticleHist.h b/RunRoot/hiporoot/ParticleHist.h deleted file mode 100644 index 918a74f..0000000 --- a/RunRoot/hiporoot/ParticleHist.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - - -#include "HipoHist.h" -#include "clas12reader.h" -#include - -namespace hiporoot { - - - class ParticleHist : public HipoHist { - - - public : - ParticleHist(TString filename); - virtual ~ParticleHist(); - - - void Loop() final; - - - using c12_uptr = std::unique_ptr; - - c12_uptr clas12(){ - return std::move(c12_uptr - (new clas12::clas12reader(HipoFileName().Data()))); - } - - private : - - - }; -} diff --git a/RunRoot/hiporoot/ParticleHistAction.C b/RunRoot/hiporoot/ParticleHistAction.C deleted file mode 100644 index 611bde1..0000000 --- a/RunRoot/hiporoot/ParticleHistAction.C +++ /dev/null @@ -1,8 +0,0 @@ -#include "ParticleHist.h" -#include "clas12defs.h" -using namespace clas12; - -Double_t hiporoot::ParticleHist::Action(){ - ////_curHist[IIII]->Fill(_p->XXXX); - return 0; -} diff --git a/RunRoot/hiporoot/ParticleTree.C b/RunRoot/hiporoot/ParticleTree.C deleted file mode 100644 index ff033cd..0000000 --- a/RunRoot/hiporoot/ParticleTree.C +++ /dev/null @@ -1,96 +0,0 @@ -#include "ParticleTree.h" -#include "HipoRootAction.h" -#include "clas12reader.h" -#include -#include - -namespace hiporoot { - - ParticleTree::ParticleTree(TString filename, TString treefilename): HipoTreeMaker{filename,treefilename}{ - _tempActionName="ParticleTreeAction"; - - //Calorimters - _mapOfParts["ECIN"]="p->cal(ECIN)->"; - _mapOfParts["ECOUT"]="p->cal(ECOUT)->"; - _mapOfParts["PCAL"]="p->cal(PCAL)->"; - - //Scintillators - _mapOfParts["FTOF1A"]="p->sci(FTOF1A)->"; - _mapOfParts["FTOF1B"]="p->sci(FTOF1B)->"; - _mapOfParts["FTOF2"]="p->sci(FTOF2)->"; - _mapOfParts["CTOF"]="p->sci(CTOF)->"; - _mapOfParts["CND1"]="p->sci(CND1)->"; - _mapOfParts["CND2"]="p->sci(CND2)->"; - _mapOfParts["CND3"]="p->sci(CND3)->"; - - //FT - _mapOfParts["FTCAL"]="p->ft(FTCAL)->"; - _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; - - //Cherenkov - _mapOfParts["HTCC"]="p->ft(HTCC)->"; - _mapOfParts["LTCC"]="p->ft(LTCC)->"; - - //Trackers - _mapOfParts["DC"]="p->trk(DC)->"; - _mapOfParts["CVT"]="p->trk(CVT)->"; - - //Particles - _mapOfParts["PBANK"]="p->par()->"; - - //Particle Region - _mapOfParts["P"]="p->"; - - //EVENT - _mapOfParts["EVNT"]="c12.head()->"; - - } - ParticleTree::~ParticleTree(){ - } - void ParticleTree::Loop(){ - - - while(IsMoreFiles()) - gHipoRootAction->Action(this); - - } - - void ParticleTree::PreCompileAction(){ - std::map typelabel; - typelabel["/D"]="Double_t"; - typelabel["/F"]="Float_t"; - typelabel["/I"]="Int_t"; - typelabel["/L"]="Long64_t"; - typelabel["/S"]="Short_t"; - - TMacro macro(GetCurrMacroName()); - - TList *lines=macro.GetListOfLines(); - TObject* obj=macro.GetLineWith("class clas12data"); - Int_t place =lines->IndexOf(obj)+2; - - for(UInt_t i=0;i<_branchNames.size();i++){ - TString type=typelabel[_branchTypes[i]]; - TString bname=_branchNames[i]; - bname.ReplaceAll(".","_"); - TString strline=TString(" ")+type + " "+bname+";"; - lines->AddAt(new TObjString(strline.Data()),place++); - - TString strvar=Form("VVVV%d",i); - TString vvvvline=macro.GetLineWith(strvar)->GetString(); - vvvvline.ReplaceAll(strvar,bname); - macro.GetLineWith(strvar)->SetString(vvvvline); - } - TString strvar{"if(PCCCC)_treedata"}; - TString ccccline=macro.GetLineWith(strvar)->GetString(); - ccccline.ReplaceAll("PCCCC",_pcut); - macro.GetLineWith(strvar)->SetString(ccccline); - - strvar="if(ECCCC)"; - ccccline=macro.GetLineWith(strvar)->GetString(); - ccccline.ReplaceAll("ECCCC",_evcut); - macro.GetLineWith(strvar)->SetString(ccccline); - - macro.SaveSource(GetCurrMacroName()); - } -} diff --git a/RunRoot/hiporoot/ParticleTree.h b/RunRoot/hiporoot/ParticleTree.h deleted file mode 100644 index 0274d06..0000000 --- a/RunRoot/hiporoot/ParticleTree.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - - -#include "HipoTreeMaker.h" -#include "clas12reader.h" -#include - -namespace hiporoot { - - - class ParticleTree : public HipoTreeMaker { - - - public : - ParticleTree(TString filename, TString treefilename); - virtual ~ParticleTree(); - - - void Loop() final; - void PreCompileAction() final; - - - using c12_uptr = std::unique_ptr; - - c12_uptr clas12(){ - return std::move(c12_uptr - (new clas12::clas12reader(HipoFileName().Data()))); - } - - private : - - - }; -} diff --git a/RunRoot/hiporoot/hipotree.C b/RunRoot/hiporoot/hipotree.C deleted file mode 100644 index 861fa3c..0000000 --- a/RunRoot/hiporoot/hipotree.C +++ /dev/null @@ -1,43 +0,0 @@ -#define hipotree_cxx -#include "hipotree.h" -#include -#include -#include - -void hipotree::Loop() -{ -// In a ROOT session, you can do: -// root> .L hipotree.C -// root> hipotree t -// root> t.GetEntry(12); // Fill t data members with entry number 12 -// root> t.Show(); // Show values of entry 12 -// root> t.Show(16); // Read and show values of entry 16 -// root> t.Loop(); // Loop on all entries -// - -// This is the loop skeleton where: -// jentry is the global entry number in the chain -// ientry is the entry number in the current Tree -// Note that the argument to GetEntry must be: -// jentry for TChain::GetEntry -// ientry for TTree::GetEntry and TBranch::GetEntry -// -// To read only selected branches, Insert statements like: -// METHOD1: -// fChain->SetBranchStatus("*",0); // disable all branches -// fChain->SetBranchStatus("branchname",1); // activate branchname -// METHOD2: replace line -// fChain->GetEntry(jentry); //read all branches -//by b_branchname->GetEntry(ientry); //read only this branch - if (fChain == 0) return; - - Long64_t nentries = fChain->GetEntriesFast(); - - Long64_t nbytes = 0, nb = 0; - for (Long64_t jentry=0; jentryGetEntry(jentry); nbytes += nb; - // if (Cut(ientry) < 0) continue; - } -} diff --git a/RunRoot/hiporoot/hipotree.h b/RunRoot/hiporoot/hipotree.h deleted file mode 100644 index ce01905..0000000 --- a/RunRoot/hiporoot/hipotree.h +++ /dev/null @@ -1,130 +0,0 @@ -////////////////////////////////////////////////////////// -// This class has been automatically generated on -// Mon Mar 4 20:05:46 2019 by ROOT version 6.14/04 -// from TTree hipotree/tree converted from hipo data -// found on file: test.root -////////////////////////////////////////////////////////// - -#ifndef hipotree_h -#define hipotree_h - -#include -#include -#include - -// Header file for the classes stored in the TTree if any. - -class hipotree { -public : - TTree *fChain; //!pointer to the analyzed TTree or TChain - Int_t fCurrent; //!current Tree number in a TChain - -// Fixed size dimensions of array or collections stored in the TTree if any. - - // Declaration of leaf types - //hiporoot::clas12data *CLAS12Data; - Float_t P_Time; - - // List of branches - TBranch *b_CLAS12Data_P_Time; //! - - hipotree(TTree *tree=0); - virtual ~hipotree(); - virtual Int_t Cut(Long64_t entry); - virtual Int_t GetEntry(Long64_t entry); - virtual Long64_t LoadTree(Long64_t entry); - virtual void Init(TTree *tree); - virtual void Loop(); - virtual Bool_t Notify(); - virtual void Show(Long64_t entry = -1); -}; - -#endif - -#ifdef hipotree_cxx -hipotree::hipotree(TTree *tree) : fChain(0) -{ -// if parameter tree is not specified (or zero), connect the file -// used to generate this class and read the Tree. - if (tree == 0) { - TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("test.root"); - if (!f || !f->IsOpen()) { - f = new TFile("test.root"); - } - f->GetObject("hipotree",tree); - - } - Init(tree); -} - -hipotree::~hipotree() -{ - if (!fChain) return; - delete fChain->GetCurrentFile(); -} - -Int_t hipotree::GetEntry(Long64_t entry) -{ -// Read contents of entry. - if (!fChain) return 0; - return fChain->GetEntry(entry); -} -Long64_t hipotree::LoadTree(Long64_t entry) -{ -// Set the environment to read one entry - if (!fChain) return -5; - Long64_t centry = fChain->LoadTree(entry); - if (centry < 0) return centry; - if (fChain->GetTreeNumber() != fCurrent) { - fCurrent = fChain->GetTreeNumber(); - Notify(); - } - return centry; -} - -void hipotree::Init(TTree *tree) -{ - // The Init() function is called when the selector needs to initialize - // a new tree or chain. Typically here the branch addresses and branch - // pointers of the tree will be set. - // It is normally not necessary to make changes to the generated - // code, but the routine can be extended by the user if needed. - // Init() will be called many times when running on PROOF - // (once per file to be processed). - - // Set branch addresses and branch pointers - if (!tree) return; - fChain = tree; - fCurrent = -1; - fChain->SetMakeClass(1); - - fChain->SetBranchAddress("P_Time", &P_Time, &b_CLAS12Data_P_Time); - Notify(); -} - -Bool_t hipotree::Notify() -{ - // The Notify() function is called when a new file is opened. This - // can be either for a new TTree in a TChain or when when a new TTree - // is started when using PROOF. It is normally not necessary to make changes - // to the generated code, but the routine can be extended by the - // user if needed. The return value is currently not used. - - return kTRUE; -} - -void hipotree::Show(Long64_t entry) -{ -// Print contents of entry. -// If entry is not specified, print current entry - if (!fChain) return; - fChain->Show(entry); -} -Int_t hipotree::Cut(Long64_t entry) -{ -// This function may be called from Loop. -// returns 1 if entry is accepted. -// returns -1 otherwise. - return 1; -} -#endif // #ifdef hipotree_cxx diff --git a/RunRoot/hiporoot/templateBankHistAction.C b/RunRoot/hiporoot/templateBankHistAction.C deleted file mode 100644 index 5b1e066..0000000 --- a/RunRoot/hiporoot/templateBankHistAction.C +++ /dev/null @@ -1,45 +0,0 @@ - -#include "HipoRootAction.h" -#include "BankHist.h" -#include "clas12reader.h" -#include "clas12defs.h" -#include "region_particle.h" -#include -#include -#include -#include - -namespace hiporoot{ - using namespace clas12; - - class NNNNN : public HipoRootAction{ - - void Action(hiporoot::HipoROOTOut *hiprout) final{ - auto bhist=dynamic_cast(hiprout); - - auto hists=bhist->Hists(); - - hipo::reader reader; - reader.open(bhist->NextFile().Data()); - - hipo::dictionary factory; - reader.readDictionary(factory); - - clas12::BBBB bank(factory.getSchema(bhist->GetBankName().Data())); - hipo::event event; - while(reader.next()==true){ - reader.read(event); //read event - event.getStructure(bank); //get particle data - - int nrows = bank.getRows(); - for(int i = 0; i < nrows; i++){ - bank.setEntry(i); - ////if(CCCC)hists->at(IIII)->Fill(XXXX); - - } - } - } - - - }; -} diff --git a/RunRoot/hiporoot/templateParticleHistAction.C b/RunRoot/hiporoot/templateParticleHistAction.C deleted file mode 100644 index 8524515..0000000 --- a/RunRoot/hiporoot/templateParticleHistAction.C +++ /dev/null @@ -1,33 +0,0 @@ - -#include "HipoRootAction.h" -#include "ParticleHist.h" -#include "clas12reader.h" -#include "clas12defs.h" -#include "region_particle.h" -#include -#include -#include -#include - -namespace hiporoot{ - using namespace clas12; - - class NNNNN : public HipoRootAction{ - - void Action(hiporoot::HipoROOTOut *hiprout) final{ - auto phist=dynamic_cast(hiprout); - - auto hists=phist->Hists(); - clas12::clas12reader c12(phist->NextFile().Data()); - std::vector* particles=c12.getDetParticlesPtr(); - - while(c12.next()==true){ - for(auto& p : *particles){ - ////if(CCCC)hists->at(IIII)->Fill(XXXX); - } - } - } - - - }; -} diff --git a/RunRoot/hiporoot/templateParticleTreeAction.C b/RunRoot/hiporoot/templateParticleTreeAction.C deleted file mode 100644 index 53e2ca0..0000000 --- a/RunRoot/hiporoot/templateParticleTreeAction.C +++ /dev/null @@ -1,57 +0,0 @@ - -#include "HipoRootAction.h" -#include "ParticleTree.h" -#include "clas12reader.h" -#include "clas12defs.h" -#include "region_particle.h" -#include -#include -#include -#include - -namespace hiporoot{ - using namespace clas12; - - class clas12data { - public: - - - ClassDef(clas12data,1); - }; - - class NNNNN : public HipoRootAction{ - - private : - std::vector *_treedata=nullptr; - - public: - - void Action(hiporoot::HipoROOTOut *hiprout) final{ - auto ptree=dynamic_cast(hiprout); - - auto tree=ptree->Tree(); - if(!tree->GetBranch("CLAS12Data")){ - _treedata=new std::vector; - tree->Branch("CLAS12Data",&_treedata); - } - clas12::clas12reader c12(ptree->NextFile().Data()); - std::vector* particles=c12.getDetParticlesPtr(); - - clas12data particleData; - while(c12.next()==true){ - if(ECCCC) continue; - - for(auto& p : *particles){ - ////particleData.VVVVIIII = XXXX; - - if(PCCCC)_treedata->push_back(particleData); - } - if(_treedata->size()) tree->Fill(); - _treedata->clear(); - } - } - - }; - - -} diff --git a/RunRoot/jupy/CLAS12Reader3Pi.C b/RunRoot/jupy/CLAS12Reader3Pi.C deleted file mode 100644 index 717b449..0000000 --- a/RunRoot/jupy/CLAS12Reader3Pi.C +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "clas12reader.h" - -using namespace clas12; - -//just make the code a bit neater when using shared_ptr -using P4_t=TLorentzVector; -using p4_ptr = std::shared_ptr; - -void SetLorentzVector(p4_ptr p4,clas12::region_part_ptr rp){ - p4->SetXYZM(rp->par()->getPx(),rp->par()->getPy(), - rp->par()->getPz(),p4->M()); -} - -void CLAS12Reader3Pi(TString filename){ - - //some particles - auto db=TDatabasePDG::Instance(); - auto beam=P4_t(0,0,10.6,10.6); - auto target=P4_t(0,0,0,db->GetParticle(2212)->Mass()); - //remember these are really just TLorentzVector* - //but std::shared_ptr makes sure they are delted at end of scope - - p4_ptr el{new P4_t(0,0,0,db->GetParticle(11)->Mass())}; - p4_ptr pr{new P4_t(0,0,0,db->GetParticle(2212)->Mass())}; - p4_ptr g1{new P4_t(0,0,0,0)}; - p4_ptr g2{new P4_t(0,0,0,0)}; - p4_ptr pip{new P4_t(0,0,0,db->GetParticle(211)->Mass())}; - p4_ptr pim{new P4_t(0,0,0,db->GetParticle(-211)->Mass())}; - - //a histogram (pre C++11 !) - auto* hmiss=new TH1F("missM","missM",100,-2,3); - auto* hmissCalCut=new TH1F("missM","missM",100,-2,3); - auto* hm2g=new TH1F("m2g","Mass(2#gamma)",100,0,0.6); - auto* hm2gCut=new TH1F("m2gCut","Mass(2#gamma) cut on Exclusivity",100,0,0.6); - auto* hm2gCalCut=new TH1F("m2gCalCut","Mass(2#gamma) cut on FCAL",100,0,0.6); - - gBenchmark->Start("timer"); - clas12reader event(filename.Data()); - - while(event.next()==true){ - // get particles by type - auto electrons=event.getByID(11); - auto gammas=event.getByID(22); - auto protons=event.getByID(2212); - auto pips=event.getByID(211); - auto pims=event.getByID(-211); - - if(electrons.size()==1 && gammas.size()==2 && protons.size()==1 && - pips.size()==1 &&pims.size() == 1){ - - // set the particle momentum - // i.e. auto el = electrons[0]->p4(); etc. - SetLorentzVector(el,electrons[0]); - SetLorentzVector(pr,protons[0]); - SetLorentzVector(g1,gammas[0]); - SetLorentzVector(g2,gammas[1]); - SetLorentzVector(pip,pips[0]); - SetLorentzVector(pim,pims[0]); - //calculate missing particle 4-vector - TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; - hmiss->Fill(miss.M2()); //fill hist - //calculate pi0 4-vector - TLorentzVector pi0 = *g1+*g2; - hm2g->Fill(pi0.M()); //fill hist - //Apply cut on missing mass squared - if(TMath::Abs(miss.M2())<0.5)hm2gCut->Fill(pi0.M());//fill hist - - //if(gammas[0]->cal(PCAL)->getEnergy()&&gammas[0]->cal(ECIN)->getEnergy()&& - // gammas[1]->cal(PCAL)->getEnergy()&&gammas[1]->cal(ECIN)->getEnergy()) - if(gammas[0]->cal(PCAL)->getEnergy()&& - gammas[1]->cal(PCAL)->getEnergy()){ - hmissCalCut->Fill(miss.M2()); //fill hist - hm2gCalCut->Fill(pi0.M());//fill hist - } - } - - } - - gBenchmark->Stop("timer"); - gBenchmark->Print("timer"); - - //make canvas (required in notebook) - TCanvas* can=new TCanvas(); - can->Divide(2,1); - can->cd(1); - hmiss->DrawCopy(); - hmissCalCut->SetLineColor(2); - hmissCalCut->DrawCopy("same"); - can->cd(2); - hm2g->DrawCopy(); - hm2gCut->SetLineColor(3); - hm2gCut->DrawCopy("same"); - hm2gCalCut->SetLineColor(2); - hm2gCalCut->DrawCopy("same"); - - can->Draw(); -} \ No newline at end of file diff --git a/RunRoot/jupy/CLAS12Reader3Pi.ipynb b/RunRoot/jupy/CLAS12Reader3Pi.ipynb index e077672..0c6ac47 100644 --- a/RunRoot/jupy/CLAS12Reader3Pi.ipynb +++ b/RunRoot/jupy/CLAS12Reader3Pi.ipynb @@ -4,7 +4,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# General loop over events and particles" + "# General loop over events and particles\n", + "First load the classes into the notebook\n", + "\n", + "You need to select if you are using hipo3 (Clas12Root3) or hipo4 (Clas12Root4) in the next cell" ] }, { @@ -13,7 +16,8 @@ "metadata": {}, "outputs": [], "source": [ - "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/hiporoot/LoadHipoROOT.C\");" + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C\");\n", + "//gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C\");" ] }, { diff --git a/RunRoot/jupy/CreateHipoSelector.ipynb b/RunRoot/jupy/CreateHipoSelector.ipynb new file mode 100644 index 0000000..66fe3ba --- /dev/null +++ b/RunRoot/jupy/CreateHipoSelector.ipynb @@ -0,0 +1,53 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To create you own HipoSelector run the following cell replacing myFirstSelector with an approporiate name. Just the name on the next 2 edit cells as well to open up the correct files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gSystem->Exec(\"$CLAS12TOOL/bin/makeHipoSelector myFirstSelector\");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%edit myFirstSelector.h" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%edit myFirstSelector.C" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ROOT C++", + "language": "c++", + "name": "root" + }, + "language_info": { + "codemirror_mode": "text/x-c++src", + "file_extension": ".C", + "mimetype": " text/x-c++src", + "name": "c++" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RunRoot/jupy/HipoDraw.ipynb b/RunRoot/jupy/HipoDraw.ipynb index ec62241..42cb4ef 100644 --- a/RunRoot/jupy/HipoDraw.ipynb +++ b/RunRoot/jupy/HipoDraw.ipynb @@ -6,7 +6,9 @@ "source": [ "# Drawing histograms with hiporoot::ParticleHist\n", "\n", - "First load the classes into the notebook" + "First load the classes into the notebook\n", + "\n", + "You need to select if you are using hipo3 (Clas12Root3) or hipo4 (Clas12Root4) in the next cell" ] }, { @@ -15,14 +17,15 @@ "metadata": {}, "outputs": [], "source": [ - "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/hiporoot/LoadHipoROOT.C\");" + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C\");\n", + "//gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Create the histogram maker with the full path to the hipo file you want to analyse" + "Create the histogram maker with the full path to the hipo file you want to analyse. You may also give wildcard (*) arguments ." ] }, { @@ -31,7 +34,7 @@ "metadata": {}, "outputs": [], "source": [ - "//ParticleHist hists(\"/WHERE/IS/MY/HIPO/clas_004152.recon.hipo\");\n", + "//ParticleHist hists(\"/WHERE/IS/MY/HIPO/file.hipo\");\n", "ParticleHist hists(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\");" ] }, @@ -39,7 +42,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Turn on javascript ROOT for interacive histograms" + "Turn on javascript ROOT for interactive histograms" ] }, { @@ -146,6 +149,22 @@ " hists.Hist2D(\"P.P:P.CalcMass\",100,0,10,100,-1,2,\"P.CalcMass&&P.Region==FD\");\n", " hists.Hist2D(\"P.P:P.CalcMass\",100,0,10,100,-1,2,\"P.CalcMass&&P.Region==CD\")->Draw(\"(3x2)col1\");\n" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Save all the files to a destination of your choice" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hists.Save(\"hists.root\")" + ] } ], "metadata": { diff --git a/RunRoot/jupy/HipoProof.ipynb b/RunRoot/jupy/HipoProof.ipynb new file mode 100644 index 0000000..aabf982 --- /dev/null +++ b/RunRoot/jupy/HipoProof.ipynb @@ -0,0 +1,66 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C\");\n", + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadProofLib4.C(2) \");" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " gProof->Load(\"myFirstSelector.C+\");\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "clas12root::HipoChain chain;\n", + "chain.Add(\"/home/dglazier/fastdata/hipo4test/filtered/clas_004152.recon.hipo\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "clas12root::myFirstSelector sel(&chain);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gProof->Process(&sel,chain.GetNRecords());" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ROOT C++", + "language": "c++", + "name": "root" + }, + "language_info": { + "codemirror_mode": "text/x-c++src", + "file_extension": ".C", + "mimetype": " text/x-c++src", + "name": "c++" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RunRoot/jupy/HipoToRootTree.ipynb b/RunRoot/jupy/HipoToRootTree.ipynb new file mode 100644 index 0000000..0ccc76c --- /dev/null +++ b/RunRoot/jupy/HipoToRootTree.ipynb @@ -0,0 +1,152 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating Root tree files with hiporoot::ParticleTree\n", + "\n", + "First load the classes into the notebook\n", + "\n", + "You need to select if you are using hipo3 (Clas12Root3) or hipo4 (Clas12Root4) in the next cell" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C\");\n", + "//gROOT->ProcessLine(\".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create the tree maker with the full path to the hipo file you want to analyse. You may also give wildcard (*) arguments ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "//ParticleTree treemaker(\"/WHERE/IS/MY/HIPO/file.hipo\",\"/WHERE/SHOULD/I/PUT/MY/tree.root\");\n", + "ParticleTree treemaker(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\",\"tree.root\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create some tree branches. There are predefined aliases for DST bank detector layers :\n", + "\n", + " ECIN. , ECOUT. , PCAL. , FTOF1A. , FTOF1B. , FTOF2. , CTOF. , CND1. , CND2. , CND3. , FTCAL. , FTHODO. , HTCC. , LTCC. , DC. , CVT. \n", + " e.g. ECIN.Energy , HTCC.Nphe , DC.TrChi2 , CTOF.Time\n", + "\n", + "The REC::Particle bank should be directly accessed with \n", + "\n", + " PBANK.\n", + " e.g. PBANK.Pid , PBANK.Px\n", + " \n", + "Ther REC::EVNT bank :\n", + " \n", + " EVNT.\n", + " e.g. EVNT.StartTime,\n", + " \n", + "The region particle should be accessed with \n", + "\n", + " P.\n", + " e.g. P.Theta , P.P , P.Phi , P.Region , P.Time , P.DetEnergy , P.DeltaEnergy , P.Path , P.Pid , P.CalcMass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create branches\n", + "\n", + "Here we can create tree branches correlating particle and detector information.\n", + "\n", + "I can make a branch for any DST bank item using the aliases above.\n", + "\n", + "I can choose standard ROOT branch type e.g /F for float /I for int /D for double,...." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "treemaker.Branch(\"PBANK.Px/F\");\n", + "treemaker.Branch(\"PBANK.Py/F\");\n", + "treemaker.Branch(\"PBANK.Pz/F\");\n", + "treemaker.Branch(\"PBANK.Vx/F\");\n", + "treemaker.Branch(\"PBANK.Vy/F\");\n", + "treemaker.Branch(\"PBANK.Vz/F\");\n", + "treemaker.Branch(\"PBANK.Pid/I\");\n", + "treemaker.Branch(\"P.Time/F\");\n", + "treemaker.Branch(\"EVNT.StartTime/F\");\n", + "treemaker.Branch(\"P.Path/F\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filter events\n", + "Add some filter to the particle topology.\n", + "\n", + "Note the AddZeroOfRest function forces events with any other particle to be rejected i.e exclusive events.\n", + "\n", + "You can add as may AddAtLeastPid or AddExactPid conditions as you like." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "treemaker.AddAtLeastPid(211,1); //at least 1 pi+\n", + "treemaker.AddExactPid(11,1); //exactly 1 electron\n", + "//treemaker.AddZeroOfRestPid(); //nothing else, if not this line any of anything else\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now fill the root tree and save it to the output file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "treemaker.Fill()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ROOT C++", + "language": "c++", + "name": "root" + }, + "language_info": { + "codemirror_mode": "text/x-c++src", + "file_extension": ".C", + "mimetype": " text/x-c++src", + "name": "c++" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/testTreeMaker.C b/testTreeMaker.C deleted file mode 100644 index ba8c57a..0000000 --- a/testTreeMaker.C +++ /dev/null @@ -1,11 +0,0 @@ -{ - treemaker.Branch("P.Time/F"); - treemaker.Branch("PBANK.Px/F"); - treemaker.Branch("PBANK.Py/F"); - treemaker.Branch("PBANK.Pz/F"); - treemaker.Branch("PBANK.Pid/I"); - treemaker.AddAtLeastPid(211,1); - treemaker.AddExactPid(11,1); - // treemaker.AddZeroOfRestPid(); - treemaker.Fill(); -} From da028fe4db81fdc5d1d23e968a944f4ddc115765 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 14 Mar 2019 16:20:04 +0000 Subject: [PATCH 35/56] update README --- README.md | 29 ++++++++++++++++++++++------- RunRoot/README | 12 ------------ 2 files changed, 22 insertions(+), 19 deletions(-) delete mode 100644 RunRoot/README diff --git a/README.md b/README.md index 1d69c59..05a3df7 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,39 @@ # Clas12Tool -Data Analysis Tools based on HIPO data format. Implementations -for CLAS12 data structures and convertor to ROOT. +Data Analysis Tools for HIPO data format. + +Seperate code is provided for hipo3 and hipo4 format. The corresponding directories, libraries and binaries have an additional 3 or 4 to distinguish. Users are responsible for using the correct format for their hipo files. + +## HipoX -> Clas12BanksX -> Clas12Root + +The Hipo c++ reader library can be used independent of specific banks and ROOT, but depends on Hipo. + +The Clas12Banks implementation can be used independent of ROOT, although currently ROOT dictionaries are created for the classes via cmake (this could be removed). This defines the specific CLAS12 DST banks and provides an interface to the data. + +The Clas12Root package depends on both Hipo and Clas12Banks. This provides ROOT-like analysis tools for operating on clas12 hipo DSTs. + + HipoDraw + HipoTreeMaker + HipoProof ## To Download git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git -git checkout mesonex +git checkout hipo34 ## To setup Run ROOT -you wil need the following enviromnet variable set +you wil need the following enviroment variable set setenv CLAS12TOOL /path to Clas12Tool/ -cd Lz4 +## To install (either Hipo3 or Hipo4) + + installHipo3 and/or installHipo4 + +These scripts are currently only in tcsh, but they are quite simple and should be easily portable to bash -make -cd $CLAS12TOOL/RunRoot diff --git a/RunRoot/README b/RunRoot/README deleted file mode 100644 index 229c7ba..0000000 --- a/RunRoot/README +++ /dev/null @@ -1,12 +0,0 @@ -setenv CLAS12TOOL XXX/Clas12Tool -#Make lz4 .so -cd $CLAS12TOOL/Lz4/ -make -cd $CLAS12TOOL/RunRoot -############################New - -alias clas12root root -l $CLAS12TOOL/RunRoot/importToROOT.C - -e.g. run with - -clas12root HallBEvent.C+ --in=a/hipo/file.hipo From f02d92de13527e2ddde6919827d41c42c4e69317 Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 15 Mar 2019 10:58:36 +0000 Subject: [PATCH 36/56] finish README --- Clas12Root/HipoHist.cpp | 16 ++-- Clas12Root/src/#clas12proof4.cpp# | 23 ----- Clas12Root/src/.#clas12proof4.cpp | 1 - Clas12Root/src/particleTree4.cpp | 2 +- README.md | 141 ++++++++++++++++++++++++++++-- RunRoot/LoadClas12Root3.C | 1 + RunRoot/LoadClas12Root4.C | 2 +- installHipo3 | 3 +- installHipo4 | 7 +- 9 files changed, 150 insertions(+), 46 deletions(-) delete mode 100644 Clas12Root/src/#clas12proof4.cpp# delete mode 120000 Clas12Root/src/.#clas12proof4.cpp diff --git a/Clas12Root/HipoHist.cpp b/Clas12Root/HipoHist.cpp index 6dcf4df..e1612ab 100644 --- a/Clas12Root/HipoHist.cpp +++ b/Clas12Root/HipoHist.cpp @@ -15,24 +15,26 @@ namespace clas12root { } HipoHist* HipoHist::Hist1D(TString varExp,Int_t nbins,Float_t min,Float_t max,TString condExp){ + auto hist=new TH1F(varExp+"_"+condExp,varExp +" for "+condExp,nbins,min,max); + _histList->Add(hist); + _curHist.push_back(hist); + varExp=ExpandExpression(varExp,","); if(condExp==TString(""))condExp="1"; if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); AddAction(varExp,condExp); - auto hist=new TH1F(varExp+"_"+condExp,varExp +" for "+condExp,nbins,min,max); - _histList->Add(hist); - _curHist.push_back(hist); - return this; + return this; } HipoHist* HipoHist::Hist2D(TString varExp,Int_t nbinsX,Float_t minX,Float_t maxX,Int_t nbinsY,Float_t minY,Float_t maxY,TString condExp){ + auto hist=new TH2F(varExp+"_"+condExp,varExp+" for "+condExp,nbinsX,minX,maxX,nbinsY,minY,maxY); + _histList->Add(hist); + _curHist.push_back(hist); + varExp=ExpandExpression(varExp,","); if(condExp==TString(""))condExp="1"; if(condExp!=TString("1")) condExp=ExpandExpression(condExp,""); AddAction(varExp,condExp); - auto hist=new TH2F(varExp+"_"+condExp,varExp+" for "+condExp,nbinsX,minX,maxX,nbinsY,minY,maxY); - _histList->Add(hist); - _curHist.push_back(hist); return this; } diff --git a/Clas12Root/src/#clas12proof4.cpp# b/Clas12Root/src/#clas12proof4.cpp# deleted file mode 100644 index 167ebba..0000000 --- a/Clas12Root/src/#clas12proof4.cpp# +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include -#include - - -int main(int argc, char **argv) { - - - TRint *app = new TRint("App", &argc, argv); -// Run the TApplication (not needed if you only want to store the histograms.) - app->SetPrompt("clas12root [%d] "); - - app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); - app->ProcessLine(Form(".x $CLAS12TOOL/RunRoot/LoadProofLib4.C(%s)",argv[1])); - app->ProcessLine(Form("gProof->Load(\"%s\");",argv[2])); - - app->Run(); - - app->Terminate(0); - - return 0; - -} diff --git a/Clas12Root/src/.#clas12proof4.cpp b/Clas12Root/src/.#clas12proof4.cpp deleted file mode 120000 index 0b1c31e..0000000 --- a/Clas12Root/src/.#clas12proof4.cpp +++ /dev/null @@ -1 +0,0 @@ -dglazier@npcglazier2.9201:1551340966 \ No newline at end of file diff --git a/Clas12Root/src/particleTree4.cpp b/Clas12Root/src/particleTree4.cpp index 7bf1697..ad3ac7b 100644 --- a/Clas12Root/src/particleTree4.cpp +++ b/Clas12Root/src/particleTree4.cpp @@ -21,7 +21,7 @@ int main(int argc, char **argv) { // Run the TApplication (not needed if you only want to store the histograms.) app->SetPrompt("ParticleTree [%d] "); - app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root3.C"); + app->ProcessLine(".x $CLAS12TOOL/RunRoot/LoadClas12Root4.C"); // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/liblz4\");"); // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libHipo4\");"); // app->ProcessLine("gSystem->Load(\"$CLAS12TOOL/lib/libClas12Banks4\");"); diff --git a/README.md b/README.md index 05a3df7..e6ff591 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ Data Analysis Tools for HIPO data format. Seperate code is provided for hipo3 and hipo4 format. The corresponding directories, libraries and binaries have an additional 3 or 4 to distinguish. Users are responsible for using the correct format for their hipo files. +Examples are given for running in interactive ROOT sessions and ROOT-Jupyter notebooks. + + ## HipoX -> Clas12BanksX -> Clas12Root The Hipo c++ reader library can be used independent of specific banks and ROOT, but depends on Hipo. @@ -12,9 +15,9 @@ The Clas12Banks implementation can be used independent of ROOT, although current The Clas12Root package depends on both Hipo and Clas12Banks. This provides ROOT-like analysis tools for operating on clas12 hipo DSTs. - HipoDraw - HipoTreeMaker - HipoProof + HipoDraw + HipoTreeMaker + HipoProof ## To Download @@ -24,16 +27,142 @@ git checkout hipo34 ## To setup Run ROOT -you wil need the following enviroment variable set +cd Clas12Tool -setenv CLAS12TOOL /path to Clas12Tool/ +setenv CLAS12TOOL $PWD (the actual path can be added in your bashrc or tchrc) + +setenv PATH "$PATH":"$CLAS12TOOL/bin" ## To install (either Hipo3 or Hipo4) installHipo3 and/or installHipo4 -These scripts are currently only in tcsh, but they are quite simple and should be easily portable to bash +## interactive root session + +To start an interactive session with pre-loaded Clas12Root us clas12root3 or clas12root4 instead of root on the command line. + +##Ex 1 Looping over events and getting particle information + +The clas12reader class performs the correlation of particle and detector inofmation (aka reverse indexing). When looping over particles you are looping over region_particle (see Clas12Banks for full reference). Each region, FT, FD and CD has its own definition of a region_particle so it will only return meaningful data (i.e. a CD particle will return 0 for FD detector information). In addition the getTime, getPath, getDetEnergy functions have predefined meaning for each region, e.g. for FT getTime returns FTCAL time, for FD it returns FTOF1A if it exists, if not it will try FTOF1B, FTOF2 then PCAL. + +You can insepct the code $CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C for more guidance on how to use it. + +To run (for hipo3 replace the 4 with a 3): + + clas12root4 $CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C+ --in=/WHERE/IS/MY/HIPO/file.hipo + +Note the use of the + sign after the macro name. This compiles the script meaning it will run much faster. + +### Jupyter + +To install rootbooks see https://root.cern.ch/how/how-create-rootbook + +mkdir myNotebooks + +cp -r $CLAS12TOOL/RunRoot/jupy myNotebooks/. + +cd myNotebooks/jupy + +Start a ROOT note book : + + root --notebook + +Click on the notebook CLAS12Reader3Pi.ipynb and follow the tutorial + + +##Ex 2 Drawing particle histograms from hipo files + + particleDraw4 /WHERE/IS/MY/HIPO/file.hipo + +You will get an interactive ROOT prompt where you can draw histograms: + + ParticleHist [0] hists.Hist1D("P.P",100,0,10,"P.P") + ParticleHist [1] hists.Hist2D("P.P:P.DetEnergy",100,0,10,100,0,5,"P.P")->Draw("2x1") + +Note you only have to call draw once, and then it only has to loop over the date once. The option (2x1) specifies the dimensions of the pads in the produced canvas, the parenthesis is required. + +Remember at the end you can save all the histograms to file : + + ParticleHist [0] hists.Save("HistFile.root"); + +Instead of drawing histograms interactively at the prompt you may give predefined histograms via a script e.g. : + + particleDraw4 /WHERE/IS/MY/HIPO/file.hipo Ex2_HipoDraw.C + +See $CLAS12TOOL/RunRoot/Ex2_HipoDraw.C for details. + +There are predefined aliases for DST bank detector layers : + + ECIN. , ECOUT. , PCAL. , FTOF1A. , FTOF1B. , FTOF2. , CTOF. , CND1. , CND2. , CND3. , FTCAL. , FTHODO. , HTCC. , LTCC. , DC. , CVT. + e.g. ECIN.Energy , HTCC.Nphe , DC.TrChi2 , CTOF.Time + +The REC::Particle bank should be directly accessed with + + PBANK. + e.g. PBANK.Pid , PBANK.Px + +The region particle should be accessed with + + P. + e.g. P.Theta , P.P , P.Phi , P.Region , P.Time , P.DetEnergy , P.DeltaEnergy , P.Path , P.Pid , P.CalcMass + +### Jupyter +Start a ROOT note book : + + root --notebook + +Click on the notebook HipoDraw.ipynb and follow the tutorial + +##Ex 4 Filtering and Skimming into a ROOT ntuple (tree) + + particleTree4 /WHERE/IS/MY/HIPO/file.hipo /OUTPUT/tree.root Ex4_TreeMaker.C + +The script $CLAS12ROOT/RunRoot/Ex4_TreeMaker.C defines which branches are to be written and what cuts to put on the event topology. You can copy and edit this file to do what you want e.g. + + treemaker.Branch("P.Time/F"); //create tree with time branch + treemaker.Branch("PBANK.Px/F"); //create tree with particle Px branch + + + treemaker.AddExactPid(11,1); //filter events with exactly 1 e- + treemaker.AddAtLeastPid(211,1);//and at least 1 pi+ + treemaker.AddZeroOfRestPid(); //and zero of any other particle type (default is any) + +###Jupyter + +Start a ROOT note book : + + root --notebook + +Click on the notebook HipoToRootTree.ipynb and follow the tutorial + + +##Ex 3 Using HipoSelector & PROOFLite + +This assumes you are aware of and understand the ROOT TSelector and PROOF scheme. See https://root.cern.ch/proof. + +Create a HipoSelector (similar to tree->MakeSelector("mySelector");), using the executable makeHipoSelector : + + makeHipoSelector mySelector + +You should use some meaningful name rather than mySelector. +Edit it to perform the tasks you would like. But use the ProcessEvent function instead of the Process function as you would in a TSelector + +To execute : + + + clas12proof4 4 mySelector.C Ex3_ProofLite.C + +Note 4 = number of workers used, you should change this to however many you would like. + +Note mySelector is hard-coded in Ex3_ProofLite.C so for your own selector you should copy and edit this script. + +###Jupyter + +Start a ROOT note book : + root --notebook +Click on the notebook CreateHipoSelector.ipynb and follow instructions. This creates the selector you wish to run. +Once this is complete you should open the notebook HipoProof.ipynb and process the selector with PROOF diff --git a/RunRoot/LoadClas12Root3.C b/RunRoot/LoadClas12Root3.C index 6e2d5a5..16ef1d1 100644 --- a/RunRoot/LoadClas12Root3.C +++ b/RunRoot/LoadClas12Root3.C @@ -16,5 +16,6 @@ void LoadClas12Root3(){ gSystem->Load(LIB+"libClas12Root3"); + gROOT->SetMacroPath(Form("%s:%s/RunRoot/",gROOT->GetMacroPath(),CLAS12TOOL.Data())); } diff --git a/RunRoot/LoadClas12Root4.C b/RunRoot/LoadClas12Root4.C index 6ead1af..c399aaf 100644 --- a/RunRoot/LoadClas12Root4.C +++ b/RunRoot/LoadClas12Root4.C @@ -15,6 +15,6 @@ void LoadClas12Root4(){ gSystem->Load(LIB+"libClas12Banks4"); gSystem->Load(LIB+"libClas12Root4"); - + gROOT->SetMacroPath(Form("%s:%s/RunRoot/",gROOT->GetMacroPath(),CLAS12TOOL.Data())); } diff --git a/installHipo3 b/installHipo3 index ffd5baf..d96762b 100755 --- a/installHipo3 +++ b/installHipo3 @@ -5,4 +5,5 @@ cd build3 cmake ../ make cmake ../ -make install \ No newline at end of file +make install +rehash \ No newline at end of file diff --git a/installHipo4 b/installHipo4 index dd5c3eb..fb6cd39 100755 --- a/installHipo4 +++ b/installHipo4 @@ -7,9 +7,4 @@ make cmake ../ make install -#setenv CLAS12TOOL_HIPO4_LIB $CLAS12TOOL/lib4 -#setenv CLAS12TOOL_HIPO4_BIN $CLAS12TOOL/bin4 - -#setenv PATH "$PATH":"$CLAS12TOOL_HIPO4_BIN" - -#rehash \ No newline at end of file +rehash \ No newline at end of file From 057f0d94363e1acfeeee359cb4f44235368149ef Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 15 Mar 2019 11:00:36 +0000 Subject: [PATCH 37/56] finish README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e6ff591..09fc132 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ setenv PATH "$PATH":"$CLAS12TOOL/bin" To start an interactive session with pre-loaded Clas12Root us clas12root3 or clas12root4 instead of root on the command line. -##Ex 1 Looping over events and getting particle information +## Ex 1 Looping over events and getting particle information The clas12reader class performs the correlation of particle and detector inofmation (aka reverse indexing). When looping over particles you are looping over region_particle (see Clas12Banks for full reference). Each region, FT, FD and CD has its own definition of a region_particle so it will only return meaningful data (i.e. a CD particle will return 0 for FD detector information). In addition the getTime, getPath, getDetEnergy functions have predefined meaning for each region, e.g. for FT getTime returns FTCAL time, for FD it returns FTOF1A if it exists, if not it will try FTOF1B, FTOF2 then PCAL. @@ -71,7 +71,7 @@ Start a ROOT note book : Click on the notebook CLAS12Reader3Pi.ipynb and follow the tutorial -##Ex 2 Drawing particle histograms from hipo files +## Ex 2 Drawing particle histograms from hipo files particleDraw4 /WHERE/IS/MY/HIPO/file.hipo @@ -114,7 +114,7 @@ Start a ROOT note book : Click on the notebook HipoDraw.ipynb and follow the tutorial -##Ex 4 Filtering and Skimming into a ROOT ntuple (tree) +## Ex 4 Filtering and Skimming into a ROOT ntuple (tree) particleTree4 /WHERE/IS/MY/HIPO/file.hipo /OUTPUT/tree.root Ex4_TreeMaker.C @@ -128,7 +128,7 @@ The script $CLAS12ROOT/RunRoot/Ex4_TreeMaker.C defines which branches are to be treemaker.AddAtLeastPid(211,1);//and at least 1 pi+ treemaker.AddZeroOfRestPid(); //and zero of any other particle type (default is any) -###Jupyter +### Jupyter Start a ROOT note book : @@ -137,7 +137,7 @@ Start a ROOT note book : Click on the notebook HipoToRootTree.ipynb and follow the tutorial -##Ex 3 Using HipoSelector & PROOFLite +## Ex 3 Using HipoSelector & PROOFLite This assumes you are aware of and understand the ROOT TSelector and PROOF scheme. See https://root.cern.ch/proof. @@ -157,7 +157,7 @@ Note 4 = number of workers used, you should change this to however many you woul Note mySelector is hard-coded in Ex3_ProofLite.C so for your own selector you should copy and edit this script. -###Jupyter +### Jupyter Start a ROOT note book : From 2b7d0b64b4bc3a6b4afb972650d6874dd0d2c71f Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 19 Mar 2019 10:12:02 +0000 Subject: [PATCH 38/56] use local cmake FindRoot --- CMakeLists.txt.hipo3 | 3 +- CMakeLists.txt.hipo4 | 3 +- README.md | 3 +- cmake/CMakeMacroParseArguments.cmake | 90 +++++++++++++++ cmake/FindROOT.cmake | 161 +++++++++++++++++++++++++++ installHipo3 | 1 - installHipo4 | 2 - 7 files changed, 257 insertions(+), 6 deletions(-) create mode 100644 cmake/CMakeMacroParseArguments.cmake create mode 100644 cmake/FindROOT.cmake diff --git a/CMakeLists.txt.hipo3 b/CMakeLists.txt.hipo3 index bc43716..7c33e1e 100644 --- a/CMakeLists.txt.hipo3 +++ b/CMakeLists.txt.hipo3 @@ -14,7 +14,8 @@ set(CMAKE_CXX_FLAGS "-fPIC -O3") # You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: # - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake # - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT -list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) +#list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) +include("cmake/FindROOT.cmake") #---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) find_package(ROOT REQUIRED COMPONENTS Proof) diff --git a/CMakeLists.txt.hipo4 b/CMakeLists.txt.hipo4 index edb3e21..ed16f17 100644 --- a/CMakeLists.txt.hipo4 +++ b/CMakeLists.txt.hipo4 @@ -14,7 +14,8 @@ set(CMAKE_CXX_FLAGS "-fPIC -O3") # You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: # - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake # - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT -list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) +#list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) +include("cmake/FindROOT.cmake") #---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) find_package(ROOT REQUIRED COMPONENTS Proof) diff --git a/README.md b/README.md index 09fc132..5854ec8 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,12 @@ The Clas12Root package depends on both Hipo and Clas12Banks. This provides ROOT- git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git +cd Clas12Tool + git checkout hipo34 ## To setup Run ROOT -cd Clas12Tool setenv CLAS12TOOL $PWD (the actual path can be added in your bashrc or tchrc) diff --git a/cmake/CMakeMacroParseArguments.cmake b/cmake/CMakeMacroParseArguments.cmake new file mode 100644 index 0000000..c028eea --- /dev/null +++ b/cmake/CMakeMacroParseArguments.cmake @@ -0,0 +1,90 @@ +# This file defines the following macro for developers needing to parse +# arguments passed to a CMake macro using names. +# +# PARSE_ARGUMENTS - parse arguments supplied to a macro +# +# The PARSE_ARGUMENTS macro will take the arguments of another macro and define +# several variables. The first argument to PARSE_ARGUMENTS is a prefix to put +# on all variables it creates. The second argument is a list of names, and the +# third argument is a list of options. Both of these lists should be quoted. +# The rest of PARSE_ARGUMENTS are arguments from another macro to be parsed. +# +# PARSE_ARGUMENTS(prefix arg_names options arg1 arg2...) +# +# For each item in options, PARSE_ARGUMENTS will create a variable with that +# name, prefixed with prefix_. So, for example, if prefix is MY_MACRO and +# options is OPTION1;OPTION2, then PARSE_ARGUMENTS will create the variables +# MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These variables will be set to true +# if the option exists in the command line or false otherwise. +# +# For each item in arg_names, PARSE_ARGUMENTS will create a variable with that +# name, prefixed with prefix_. Each variable will be filled with the arguments +# that occur after the given arg_name is encountered up to the next arg_name +# or the end of the arguments. All options are removed from these lists. +# PARSE_ARGUMENTS also creates a prefix_DEFAULT_ARGS variable containing the +# list of all arguments up to the first arg_name encountered. +# +# Here is a simple, albeit impractical, example of using PARSE_ARGUMENTS that +# demonstrates its behavior. +# +# SET(arguments +# hello OPTION3 world +# LIST3 foo bar +# OPTION2 +# LIST1 fuz baz +# ) +# PARSE_ARGUMENTS(ARG "LIST1;LIST2;LIST3" "OPTION1;OPTION2;OPTION3" ${arguments}) +# +# PARSE_ARGUMENTS creates 7 variables and sets them as follows: +# +# * ARG_DEFAULT_ARGS: hello;world +# * ARG_LIST1: fuz;baz +# * ARG_LIST2: +# * ARG_LIST3: foo;bar +# * ARG_OPTION1: FALSE +# * ARG_OPTION2: TRUE +# * ARG_OPTION3: TRUE +# +# If you don't have any options, use an empty string in its place. +# +# PARSE_ARGUMENTS(ARG "LIST1;LIST2;LIST3" "" ${arguments}) +# +# Likewise if you have no lists. +# +# PARSE_ARGUMENTS(ARG "" "OPTION1;OPTION2;OPTION3" ${arguments}) +# +# +# Code and description copied from: +# http://www.cmake.org/Wiki/CMakeMacroParseArguments + +MACRO(PARSE_ARGUMENTS prefix arg_names option_names) + SET(DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + SET(larg_names ${arg_names}) + LIST(FIND larg_names "${arg}" is_arg_name) + IF (is_arg_name GREATER -1) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name GREATER -1) + SET(loption_names ${option_names}) + LIST(FIND loption_names "${arg}" is_option) + IF (is_option GREATER -1) + SET(${prefix}_${arg} TRUE) + ELSE (is_option GREATER -1) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option GREATER -1) + ENDIF (is_arg_name GREATER -1) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO(PARSE_ARGUMENTS) + diff --git a/cmake/FindROOT.cmake b/cmake/FindROOT.cmake new file mode 100644 index 0000000..39bfe95 --- /dev/null +++ b/cmake/FindROOT.cmake @@ -0,0 +1,161 @@ +# - Finds ROOT instalation +# This module sets up ROOT information +# It defines: +# ROOT_FOUND If the ROOT is found +# ROOT_INCLUDE_DIR PATH to the include directory +# ROOT_LIBRARIES Most common libraries +# ROOT_LIBRARY_DIR PATH to the library directory + + +find_program(ROOT_CONFIG_EXECUTABLE root-config + PATHS $ENV{ROOTSYS}/bin) + +if(NOT ROOT_CONFIG_EXECUTABLE) + set(ROOT_FOUND FALSE) +else() + set(ROOT_FOUND TRUE) + + execute_process( + COMMAND ${ROOT_CONFIG_EXECUTABLE} --prefix + OUTPUT_VARIABLE ROOTSYS + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND ${ROOT_CONFIG_EXECUTABLE} --version + OUTPUT_VARIABLE ROOT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND ${ROOT_CONFIG_EXECUTABLE} --incdir + OUTPUT_VARIABLE ROOT_INCLUDE_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND ${ROOT_CONFIG_EXECUTABLE} --libs + OUTPUT_VARIABLE ROOT_LIBRARIES + OUTPUT_STRIP_TRAILING_WHITESPACE) + + #set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lThread -lMinuit -lHtml -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lProof) + #set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lProofPlayer -lMLP -lSpectrum -lEve -lRGL -lGed -lXMLParser -lPhysics) + set(ROOT_LIBRARY_DIR ${ROOTSYS}/lib) + + # Make variables changeble to the advanced user + mark_as_advanced(ROOT_CONFIG_EXECUTABLE) + + if(NOT ROOT_FIND_QUIETLY) + message(STATUS "Found ROOT ${ROOT_VERSION} in ${ROOTSYS}") + endif() +endif() + + +include(cmake/CMakeMacroParseArguments.cmake) +find_program(ROOTCINT_EXECUTABLE rootcint PATHS $ENV{ROOTSYS}/bin) +find_program(GENREFLEX_EXECUTABLE genreflex PATHS $ENV{ROOTSYS}/bin) +find_package(GCCXML) + +#---------------------------------------------------------------------------- +# function ROOT_GENERATE_DICTIONARY( dictionary +# header1 header2 ... +# LINKDEF linkdef1 ... +# OPTIONS opt1...) +function(ROOT_GENERATE_DICTIONARY dictionary) + CMAKE_PARSE_ARGUMENTS(ARG "" "" "LINKDEF;OPTIONS" "" ${ARGN}) + #---Get the list of header files------------------------- + set(headerfiles) + foreach(fp ${ARG_UNPARSED_ARGUMENTS}) + file(GLOB files ${fp}) + if(files) + foreach(f ${files}) + if(NOT f MATCHES LinkDef) + set(headerfiles ${headerfiles} ${f}) + endif() + endforeach() + else() + set(headerfiles ${headerfiles} ${fp}) + endif() + endforeach() + #---Get the list of include directories------------------ + get_directory_property(incdirs INCLUDE_DIRECTORIES) + set(includedirs) + foreach( d ${incdirs}) + set(includedirs ${includedirs} -I${d}) + endforeach() + #---Get LinkDef.h file------------------------------------ + set(linkdefs) + foreach( f ${ARG_LINKDEF}) + if( IS_ABSOLUTE ${f}) + set(linkdefs ${linkdefs} ${f}) + else() + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/inc/${f}) + set(linkdefs ${linkdefs} ${CMAKE_CURRENT_SOURCE_DIR}/inc/${f}) + else() + set(linkdefs ${linkdefs} ${CMAKE_CURRENT_SOURCE_DIR}/${f}) + endif() + endif() + endforeach() + #---call rootcint------------------------------------------ + add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h + COMMAND ${ROOTCINT_EXECUTABLE} -cint -f ${dictionary}.cxx + -c ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} + DEPENDS ${headerfiles} ${linkdefs}) +endfunction() + +#---------------------------------------------------------------------------- +# function REFLEX_GENERATE_DICTIONARY(dictionary +# header1 header2 ... +# SELECTION selectionfile ... +# OPTIONS opt1...) +function(REFLEX_GENERATE_DICTIONARY dictionary) + CMAKE_PARSE_ARGUMENTS(ARG "" "" "SELECTION;OPTIONS" "" ${ARGN}) + #---Get the list of header files------------------------- + set(headerfiles) + foreach(fp ${ARG_UNPARSED_ARGUMENTS}) + file(GLOB files ${fp}) + if(files) + foreach(f ${files}) + set(headerfiles ${headerfiles} ${f}) + endforeach() + else() + set(headerfiles ${headerfiles} ${fp}) + endif() + endforeach() + #---Get Selection file------------------------------------ + if(IS_ABSOLUTE ${ARG_SELECTION}) + set(selectionfile ${ARG_SELECTION}) + else() + set(selectionfile ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_SELECTION}) + endif() + #---Get the list of include directories------------------ + get_directory_property(incdirs INCLUDE_DIRECTORIES) + set(includedirs) + foreach( d ${incdirs}) + set(includedirs ${includedirs} -I${d}) + endforeach() + #---Get preprocessor definitions-------------------------- + get_directory_property(defs COMPILE_DEFINITIONS) + foreach( d ${defs}) + set(definitions ${definitions} -D${d}) + endforeach() + #---Nanes and others--------------------------------------- + set(gensrcdict ${dictionary}.cpp) + if(MSVC) + set(gccxmlopts "--gccxmlopt=\"--gccxml-compiler cl\"") + else() + #set(gccxmlopts "--gccxmlopt=\'--gccxml-cxxflags -m64 \'") + set(gccxmlopts) + endif() + #set(rootmapname ${dictionary}Dict.rootmap) + #set(rootmapopts --rootmap=${rootmapname} --rootmap-lib=${libprefix}${dictionary}Dict) + #---Check GCCXML and get path----------------------------- + if(GCCXML) + get_filename_component(gccxmlpath ${GCCXML} PATH) + else() + message(WARNING "GCCXML not found. Install and setup your environment to find 'gccxml' executable") + endif() + #---Actual command---------------------------------------- + add_custom_command(OUTPUT ${gensrcdict} ${rootmapname} + COMMAND ${GENREFLEX_EXECUTABLE} ${headerfiles} -o ${gensrcdict} ${gccxmlopts} ${rootmapopts} --select=${selectionfile} + --gccxmlpath=${gccxmlpath} ${ARG_OPTIONS} ${includedirs} ${definitions} + DEPENDS ${headerfiles} ${selectionfile}) +endfunction() + diff --git a/installHipo3 b/installHipo3 index d96762b..53abd6c 100755 --- a/installHipo3 +++ b/installHipo3 @@ -6,4 +6,3 @@ cmake ../ make cmake ../ make install -rehash \ No newline at end of file diff --git a/installHipo4 b/installHipo4 index fb6cd39..3d648fe 100755 --- a/installHipo4 +++ b/installHipo4 @@ -6,5 +6,3 @@ cmake ../ make cmake ../ make install - -rehash \ No newline at end of file From e17fc7a97ae4bc02c797dbfaa206b9933532f9bd Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 19 Mar 2019 11:26:27 +0000 Subject: [PATCH 39/56] give local and ROOTSYS options for cmake --- CMakeLists.txt.hipo3 | 14 ++++++-------- CMakeLists.txt.hipo4 | 14 ++++++-------- Clas12Banks3/CMakeLists.txt | 2 +- Clas12Banks4/CMakeLists.txt | 2 +- Clas12Root/CMakeLists.txt | 2 +- Hipo3/CMakeLists.txt | 6 +++--- Hipo4/CMakeLists.txt | 6 +++--- cmake/FindROOT.cmake | 5 +++++ 8 files changed, 26 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt.hipo3 b/CMakeLists.txt.hipo3 index 7c33e1e..5af2c76 100644 --- a/CMakeLists.txt.hipo3 +++ b/CMakeLists.txt.hipo3 @@ -11,18 +11,16 @@ set(CMAKE_INSTALL_MANDIR ${CMAKE_CURRENT_SOURCE_DIR}/man) set(CMAKE_CXX_FLAGS "-fPIC -O3") -# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: -# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake -# - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT -#list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) -include("cmake/FindROOT.cmake") +##########For local ROOT cmake files comment in the line below and remove the lines commented ##USEROOTSYS +#######include("cmake/FindROOT.cmake") +list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) ############USEROOTSYS #---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) -find_package(ROOT REQUIRED COMPONENTS Proof) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") +find_package(ROOT REQUIRED COMPONENTS Proof) ###########USEROOTSYS #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) -include(${ROOT_USE_FILE}) +include(${ROOT_USE_FILE}) ##########USEROOTSYS +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") #hipo expects lz4 includes to be in lib... set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) diff --git a/CMakeLists.txt.hipo4 b/CMakeLists.txt.hipo4 index ed16f17..3eaae51 100644 --- a/CMakeLists.txt.hipo4 +++ b/CMakeLists.txt.hipo4 @@ -11,18 +11,16 @@ set(CMAKE_INSTALL_MANDIR ${CMAKE_CURRENT_SOURCE_DIR}/man) set(CMAKE_CXX_FLAGS "-fPIC -O3") -# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways: -# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake -# - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT -#list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) -include("cmake/FindROOT.cmake") +##########For local ROOT cmake files comment in the line below and remove the lines commented ##USEROOTSYS +#######include("cmake/FindROOT.cmake") +list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) ############USEROOTSYS #---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS) -find_package(ROOT REQUIRED COMPONENTS Proof) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") +find_package(ROOT REQUIRED COMPONENTS Proof) ###########USEROOTSYS #---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY) -include(${ROOT_USE_FILE}) +include(${ROOT_USE_FILE}) ##########USEROOTSYS +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}") #hipo expects lz4 includes to be in lib... set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/lib) diff --git a/Clas12Banks3/CMakeLists.txt b/Clas12Banks3/CMakeLists.txt index 7627b3d..d192f1b 100644 --- a/Clas12Banks3/CMakeLists.txt +++ b/Clas12Banks3/CMakeLists.txt @@ -4,7 +4,7 @@ add_library(Clas12Banks3 SHARED vectors.cpp header.cpp particle.cpp mcparticle.c target_link_libraries(Clas12Banks3 ${ROOT_LIBRARIES}) -FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks3/lib*) +FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks3/*pcm) install (FILES ${ROOT_CLAS12_PCM} DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Clas12Banks4/CMakeLists.txt b/Clas12Banks4/CMakeLists.txt index bad1fcf..c1cfe0f 100644 --- a/Clas12Banks4/CMakeLists.txt +++ b/Clas12Banks4/CMakeLists.txt @@ -5,7 +5,7 @@ add_library(Clas12Banks4 SHARED vectors.cpp header.cpp particle.cpp mcparticle.c target_link_libraries(Clas12Banks4 ${ROOT_LIBRARIES}) -FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks4/lib*) +FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks4/*pcm) install (FILES ${ROOT_CLAS12_PCM} DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Clas12Root/CMakeLists.txt b/Clas12Root/CMakeLists.txt index 4d88e69..bb8fff3 100644 --- a/Clas12Root/CMakeLists.txt +++ b/Clas12Root/CMakeLists.txt @@ -12,7 +12,7 @@ add_library(${CLAS12ROOT} SHARED BankHist.cpp HipoHist.cpp HipoTreeMaker.cpp Hip target_link_libraries(${CLAS12ROOT} ${ROOT_LIBRARIES}) -FILE(GLOB ROOT_C12ROOT_PCM ${CMAKE_BINARY_DIR}/Clas12Root/lib*) +FILE(GLOB ROOT_C12ROOT_PCM ${CMAKE_BINARY_DIR}/Clas12Root/*pcm) install (FILES ${ROOT_C12ROOT_PCM} DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Hipo3/CMakeLists.txt b/Hipo3/CMakeLists.txt index 99aa305..404a749 100644 --- a/Hipo3/CMakeLists.txt +++ b/Hipo3/CMakeLists.txt @@ -4,10 +4,10 @@ ROOT_GENERATE_DICTIONARY(G__Hipo3 utils.h dictionary.h node.h event.h record.h r add_library(Hipo3 SHARED utils.cpp dictionary.cpp node.cpp event.cpp record.cpp reader.cpp bank.cpp G__Hipo3.cxx) target_link_libraries(Hipo3 ${ROOT_LIBRARIES}) -#install(TARGETS Hipo -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(TARGETS Hipo3 + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") -FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo3/lib*) +FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo3/*pcm) install (FILES ${ROOT_HIPO_PCM} DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/Hipo4/CMakeLists.txt b/Hipo4/CMakeLists.txt index 55efe6d..5b6c176 100644 --- a/Hipo4/CMakeLists.txt +++ b/Hipo4/CMakeLists.txt @@ -4,10 +4,10 @@ ROOT_GENERATE_DICTIONARY(G__Hipo4 reader.h bank.h LINKDEF HipoLinkDef.h) add_library(Hipo4 SHARED utils.cpp dictionary.cpp event.cpp record.cpp recordbuilder.cpp reader.cpp bank.cpp G__Hipo4.cxx) target_link_libraries(Hipo4 ${ROOT_LIBRARIES}) -#install(TARGETS Hipo -# LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(TARGETS Hipo4 + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") -FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo4/lib*) +FILE(GLOB ROOT_HIPO_PCM ${CMAKE_BINARY_DIR}/Hipo4/*pcm) install (FILES ${ROOT_HIPO_PCM} DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/cmake/FindROOT.cmake b/cmake/FindROOT.cmake index 39bfe95..ce5d777 100644 --- a/cmake/FindROOT.cmake +++ b/cmake/FindROOT.cmake @@ -30,6 +30,11 @@ else() OUTPUT_VARIABLE ROOT_INCLUDE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND ${ROOT_CONFIG_EXECUTABLE} --cflags + OUTPUT_VARIABLE ROOT_CXX_FLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( COMMAND ${ROOT_CONFIG_EXECUTABLE} --libs OUTPUT_VARIABLE ROOT_LIBRARIES From 2065acc8dc23ed50740c0799830fdfb46fe2197c Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 19 Mar 2019 11:34:40 +0000 Subject: [PATCH 40/56] give local and ROOTSYS options for cmake --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5854ec8..1f436de 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,10 @@ setenv PATH "$PATH":"$CLAS12TOOL/bin" installHipo3 and/or installHipo4 +If there are issues with cmake and your ROOTSYS you can try using the local FindROOT file. Edit the CMakeList.txt.hipo3 or 4 files removing the lines with comment ##USEROOTSYS and uncomment the line + + #######include("cmake/FindROOT.cmake") + ## interactive root session To start an interactive session with pre-loaded Clas12Root us clas12root3 or clas12root4 instead of root on the command line. From 4d0ede544e69c75d80707c498ea17dfe57cc2127 Mon Sep 17 00:00:00 2001 From: dglazier Date: Thu, 21 Mar 2019 10:59:53 +0000 Subject: [PATCH 41/56] correct cmake to install libs! --- Clas12Banks3/CMakeLists.txt | 3 +++ Clas12Banks4/CMakeLists.txt | 3 +++ Clas12Root/CMakeLists.txt | 3 +++ 3 files changed, 9 insertions(+) diff --git a/Clas12Banks3/CMakeLists.txt b/Clas12Banks3/CMakeLists.txt index d192f1b..13f7db4 100644 --- a/Clas12Banks3/CMakeLists.txt +++ b/Clas12Banks3/CMakeLists.txt @@ -4,6 +4,9 @@ add_library(Clas12Banks3 SHARED vectors.cpp header.cpp particle.cpp mcparticle.c target_link_libraries(Clas12Banks3 ${ROOT_LIBRARIES}) +install(TARGETS Clas12Banks3 + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks3/*pcm) install (FILES ${ROOT_CLAS12_PCM} diff --git a/Clas12Banks4/CMakeLists.txt b/Clas12Banks4/CMakeLists.txt index c1cfe0f..2df197a 100644 --- a/Clas12Banks4/CMakeLists.txt +++ b/Clas12Banks4/CMakeLists.txt @@ -5,6 +5,9 @@ add_library(Clas12Banks4 SHARED vectors.cpp header.cpp particle.cpp mcparticle.c target_link_libraries(Clas12Banks4 ${ROOT_LIBRARIES}) +install(TARGETS Clas12Banks4 + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + FILE(GLOB ROOT_CLAS12_PCM ${CMAKE_BINARY_DIR}/Clas12Banks4/*pcm) install (FILES ${ROOT_CLAS12_PCM} diff --git a/Clas12Root/CMakeLists.txt b/Clas12Root/CMakeLists.txt index bb8fff3..e400c4c 100644 --- a/Clas12Root/CMakeLists.txt +++ b/Clas12Root/CMakeLists.txt @@ -12,6 +12,9 @@ add_library(${CLAS12ROOT} SHARED BankHist.cpp HipoHist.cpp HipoTreeMaker.cpp Hip target_link_libraries(${CLAS12ROOT} ${ROOT_LIBRARIES}) +install(TARGETS ${CLAS12ROOT} + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + FILE(GLOB ROOT_C12ROOT_PCM ${CMAKE_BINARY_DIR}/Clas12Root/*pcm) install (FILES ${ROOT_C12ROOT_PCM} From 6bd7e5c947989dd1e8929960b55be5e000ebbdfd Mon Sep 17 00:00:00 2001 From: dglazier Date: Fri, 22 Mar 2019 09:39:51 +0000 Subject: [PATCH 42/56] add covariance matrix getters --- Clas12Banks3/covmatrix.h | 17 +++++++++++++++++ Clas12Banks4/covmatrix.h | 16 ++++++++++++++++ Clas12Root/ParticleHist.cpp | 3 +++ RunRoot/DrawCovMat.C | 7 +++++++ 4 files changed, 43 insertions(+) create mode 100644 RunRoot/DrawCovMat.C diff --git a/Clas12Banks3/covmatrix.h b/Clas12Banks3/covmatrix.h index 3fe1799..c11a90f 100644 --- a/Clas12Banks3/covmatrix.h +++ b/Clas12Banks3/covmatrix.h @@ -39,9 +39,26 @@ namespace clas12 { int getIndex() const {return _index;} int getIndex(int pindex); void setIndex(int ind){_index=ind;} + void setEntry(int ind){_index=ind;} const CovMatrix* matrix(); + float getC11() const { return _matrix[0][0];} + float getC12() const { return _matrix[0][1];} + float getC13() const { return _matrix[0][2];} + float getC14() const { return _matrix[0][3];} + float getC15() const { return _matrix[0][4];} + float getC22() const { return _matrix[1][1];} + float getC23() const { return _matrix[1][2];} + float getC24() const { return _matrix[1][3];} + float getC25() const { return _matrix[1][4];} + float getC33() const { return _matrix[2][2];} + float getC34() const { return _matrix[2][3];} + float getC35() const { return _matrix[2][4];} + float getC44() const { return _matrix[3][3];} + float getC45() const { return _matrix[3][4];} + float getC55() const { return _matrix[4][4];} + void init(const char *bankName, hipo::reader &r); /** * This is virtual method from hipo::bank it will be called diff --git a/Clas12Banks4/covmatrix.h b/Clas12Banks4/covmatrix.h index a0a1f26..fba389e 100644 --- a/Clas12Banks4/covmatrix.h +++ b/Clas12Banks4/covmatrix.h @@ -41,8 +41,24 @@ namespace clas12 { int getIndex() const {return _index;} int getIndex(int pindex); void setIndex(int ind){_index=ind;} + void setEntry(int ind){_index=ind;} const CovMatrix* matrix(); + float getC11(){ return getFloat(_morder[0][0],_index);} + float getC12(){ return getFloat(_morder[0][1],_index);} + float getC13(){ return getFloat(_morder[0][2],_index);} + float getC14(){ return getFloat(_morder[0][3],_index);} + float getC15(){ return getFloat(_morder[0][4],_index);} + float getC22(){ return getFloat(_morder[1][1],_index);} + float getC23(){ return getFloat(_morder[1][2],_index);} + float getC24(){ return getFloat(_morder[1][3],_index);} + float getC25(){ return getFloat(_morder[1][4],_index);} + float getC33(){ return getFloat(_morder[2][2],_index);} + float getC34(){ return getFloat(_morder[2][3],_index);} + float getC35(){ return getFloat(_morder[2][4],_index);} + float getC44(){ return getFloat(_morder[3][3],_index);} + float getC45(){ return getFloat(_morder[3][4],_index);} + float getC55(){ return getFloat(_morder[4][4],_index);} /** * This is virtual method from hipo::bank it will be called diff --git a/Clas12Root/ParticleHist.cpp b/Clas12Root/ParticleHist.cpp index fc3a728..218720b 100644 --- a/Clas12Root/ParticleHist.cpp +++ b/Clas12Root/ParticleHist.cpp @@ -34,6 +34,9 @@ namespace clas12root { _mapOfParts["DC"]="p->trk(DC)->"; _mapOfParts["CVT"]="p->trk(CVT)->"; + //Covariance Matrix + _mapOfParts["CovMat"]="p->covmat()->"; + //Particles _mapOfParts["PBANK"]="p->par()->"; diff --git a/RunRoot/DrawCovMat.C b/RunRoot/DrawCovMat.C new file mode 100644 index 0000000..2833d63 --- /dev/null +++ b/RunRoot/DrawCovMat.C @@ -0,0 +1,7 @@ +{ + hists.Hist1D("CovMat.C11",100,-1,100,"CovMat.C11&&P.Region==FD&&P.Pid==11"); + hists.Hist1D("CovMat.C22",100,-1,100,"CovMat.C11&&P.Region==FD&&P.Pid==11"); + hists.Hist1D("CovMat.C33",100,-0.5,0.5,"CovMat.C11&&P.Region==FD&&P.Pid==11"); + hists.Hist1D("CovMat.C44",100,-1,1,"CovMat.C11&&P.Region==FD&&P.Pid==11"); + hists.Hist1D("CovMat.C55",100,-0.1,0.1,"CovMat.C11&&P.Region==FD&&P.Pid==11")->Draw("(3x2)"); +} From ca7e69edaf2d79ecbaa625a45409bce0d87c4fd1 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 25 Mar 2019 23:13:58 +0000 Subject: [PATCH 43/56] add covaraince matrice getters for Banks3 --- Clas12Banks3/covmatrix.cpp | 2 ++ Clas12Banks3/covmatrix.h | 32 ++++++++++++++++---------------- Clas12Banks3/region_particle.h | 2 +- RunRoot/DrawCovMat.C | 13 ++++++++----- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Clas12Banks3/covmatrix.cpp b/Clas12Banks3/covmatrix.cpp index a08801e..5bfa389 100644 --- a/Clas12Banks3/covmatrix.cpp +++ b/Clas12Banks3/covmatrix.cpp @@ -7,6 +7,7 @@ #include "covmatrix.h" #include #include +#include namespace clas12 { @@ -29,6 +30,7 @@ namespace clas12 { _morder[3][3] = getEntryOrder("C44"); _morder[3][4] = getEntryOrder("C45"); _morder[4][4] = getEntryOrder("C55"); + std::cout<<"entry order "<<_morder[3][3]<getEntry(); //check for covarince matrix _pcmat=_covmat->getIndex(_pentry); - return true; + return true; } int getPid(){_parts->setEntry(_pentry);return _parts->getPid();} diff --git a/RunRoot/DrawCovMat.C b/RunRoot/DrawCovMat.C index 2833d63..1d35ab1 100644 --- a/RunRoot/DrawCovMat.C +++ b/RunRoot/DrawCovMat.C @@ -1,7 +1,10 @@ { - hists.Hist1D("CovMat.C11",100,-1,100,"CovMat.C11&&P.Region==FD&&P.Pid==11"); - hists.Hist1D("CovMat.C22",100,-1,100,"CovMat.C11&&P.Region==FD&&P.Pid==11"); - hists.Hist1D("CovMat.C33",100,-0.5,0.5,"CovMat.C11&&P.Region==FD&&P.Pid==11"); - hists.Hist1D("CovMat.C44",100,-1,1,"CovMat.C11&&P.Region==FD&&P.Pid==11"); - hists.Hist1D("CovMat.C55",100,-0.1,0.1,"CovMat.C11&&P.Region==FD&&P.Pid==11")->Draw("(3x2)"); + hists.Hist1D("CovMat.C22",100,1E-10,30E1,"CovMat.C22&&P.Region==FD"); + hists.Hist1D("CovMat.C33",100,1E-10,2E-3,"CovMat.C33&&P.Region==FD"); + hists.Hist1D("CovMat.C55",100,1E-10,60E-5,"CovMat.C55&&P.Region==FD"); + + hists.Hist1D("CovMat.C22",100,1E-10,30E-6,"CovMat.C22&&P.Region==CD"); + hists.Hist1D("CovMat.C33",100,1E-10,2E-3,"CovMat.C33&&P.Region==CD"); + hists.Hist1D("CovMat.C55",100,1E-10,60E-6,"CovMat.C55&&P.Region==CD")->Draw("(3x2)"); + } From 14d0952ae03df4895a7886833c400553c602c6d1 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 10:16:34 +0100 Subject: [PATCH 44/56] remove hipo34 branch from README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 1f436de..42bb294 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,6 @@ git clone --recurse-submodules https://github.com/dglazier/Clas12Tool.git cd Clas12Tool -git checkout hipo34 ## To setup Run ROOT From 0318833006197c5145e8571fd4a76018100f4428 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 10:22:33 +0100 Subject: [PATCH 45/56] link Ex1 to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42bb294..a407d46 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ To start an interactive session with pre-loaded Clas12Root us clas12root3 or cla The clas12reader class performs the correlation of particle and detector inofmation (aka reverse indexing). When looping over particles you are looping over region_particle (see Clas12Banks for full reference). Each region, FT, FD and CD has its own definition of a region_particle so it will only return meaningful data (i.e. a CD particle will return 0 for FD detector information). In addition the getTime, getPath, getDetEnergy functions have predefined meaning for each region, e.g. for FT getTime returns FTCAL time, for FD it returns FTOF1A if it exists, if not it will try FTOF1B, FTOF2 then PCAL. -You can insepct the code $CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C for more guidance on how to use it. +You can insepct the code [$CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C] (https://github.com/dglazier/Clas12Tool/blob/master/RunRoot/Ex1_CLAS12Reader.C) for more guidance on how to use it. To run (for hipo3 replace the 4 with a 3): From dc4bfe341b8aca85e8ef9848c1f118e682fbd673 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 10:24:58 +0100 Subject: [PATCH 46/56] link Ex1 to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a407d46..5374a29 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ To start an interactive session with pre-loaded Clas12Root us clas12root3 or cla The clas12reader class performs the correlation of particle and detector inofmation (aka reverse indexing). When looping over particles you are looping over region_particle (see Clas12Banks for full reference). Each region, FT, FD and CD has its own definition of a region_particle so it will only return meaningful data (i.e. a CD particle will return 0 for FD detector information). In addition the getTime, getPath, getDetEnergy functions have predefined meaning for each region, e.g. for FT getTime returns FTCAL time, for FD it returns FTOF1A if it exists, if not it will try FTOF1B, FTOF2 then PCAL. -You can insepct the code [$CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C] (https://github.com/dglazier/Clas12Tool/blob/master/RunRoot/Ex1_CLAS12Reader.C) for more guidance on how to use it. +You can insepct the code [$CLAS12TOOL/RunRoot/Ex1_CLAS12Reader.C](https://github.com/dglazier/Clas12Tool/blob/master/RunRoot/Ex1_CLAS12Reader.C) for more guidance on how to use it. To run (for hipo3 replace the 4 with a 3): From 3be715e900a8034878b7333500293be167876f8a Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 10:35:23 +0100 Subject: [PATCH 47/56] remove ptr from Ex1 and use references --- RunRoot/Ex1_CLAS12Reader.C | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/RunRoot/Ex1_CLAS12Reader.C b/RunRoot/Ex1_CLAS12Reader.C index 96bab5a..5c2f3b2 100644 --- a/RunRoot/Ex1_CLAS12Reader.C +++ b/RunRoot/Ex1_CLAS12Reader.C @@ -15,14 +15,10 @@ using namespace clas12; -//just make the code a bit neater when using unique_ptr -using P4_t=TLorentzVector; -//using p4_ptr = std::unique_ptr; -using p4_ptr = std::shared_ptr; -void SetLorentzVector(p4_ptr p4,clas12::region_part_ptr rp){ - p4->SetXYZM(rp->par()->getPx(),rp->par()->getPy(), - rp->par()->getPz(),p4->M()); +void SetLorentzVector(TLorentzVector &p4,clas12::region_part_ptr rp){ + p4.SetXYZM(rp->par()->getPx(),rp->par()->getPy(), + rp->par()->getPz(),p4.M()); } @@ -59,18 +55,17 @@ void Ex1_CLAS12Reader(){ //some particles auto db=TDatabasePDG::Instance(); - auto beam=P4_t(0,0,10.6,10.6); - auto target=P4_t(0,0,0,db->GetParticle(2212)->Mass()); + TLorentzVector beam(0,0,10.6,10.6); + TLorentzVector target(0,0,0,db->GetParticle(2212)->Mass()); //remember these are really just TLorentzVector* //but std::unique_ptr makes sure they are delted at end of scope - auto el=p4_ptr(new P4_t(0,0,0,db->GetParticle(11)->Mass())); - auto pr=p4_ptr(new P4_t(0,0,0,db->GetParticle(2212)->Mass())); - auto g1=p4_ptr(new P4_t(0,0,0,0)); - auto g2=p4_ptr(new P4_t(0,0,0,0)); - auto pip=p4_ptr(new P4_t(0,0,0,db->GetParticle(211)->Mass())); - auto pim=p4_ptr(new P4_t(0,0,0,db->GetParticle(-211)->Mass())); - - //a histogram (pre C++11 !) + TLorentzVector el(0,0,0,db->GetParticle(11)->Mass()); + TLorentzVector pr(0,0,0,db->GetParticle(2212)->Mass()); + TLorentzVector g1(0,0,0,0); + TLorentzVector g2(0,0,0,0); + TLorentzVector pip(0,0,0,db->GetParticle(211)->Mass()); + TLorentzVector pim(0,0,0,db->GetParticle(-211)->Mass()); + auto* hmiss=new TH1F("missM","missM",200,-2,3); auto* hm2g=new TH1F("m2g","m2g",200,0,1); auto* hm2gCut=new TH1F("m2gCut","m2g",200,0,1); @@ -141,9 +136,9 @@ void Ex1_CLAS12Reader(){ SetLorentzVector(pip,pips[0]); SetLorentzVector(pim,pims[0]); - TLorentzVector miss=beam+target-*el-*pr-*g1-*g2-*pip-*pim; + TLorentzVector miss=beam+target-el-pr-g1-g2-pip-pim; hmiss->Fill(miss.M2()); - TLorentzVector pi0 = *g1+*g2; + TLorentzVector pi0 = g1+g2; hm2g->Fill(pi0.M()); if(TMath::Abs(miss.M2())<0.5)hm2gCut->Fill(pi0.M()); } From c994a54ab5c65cf474423467d6c444e15daf5b30 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 10:36:21 +0100 Subject: [PATCH 48/56] remove ptr from Ex1 and use references --- RunRoot/Ex1_CLAS12Reader.C | 2 -- 1 file changed, 2 deletions(-) diff --git a/RunRoot/Ex1_CLAS12Reader.C b/RunRoot/Ex1_CLAS12Reader.C index 5c2f3b2..517e418 100644 --- a/RunRoot/Ex1_CLAS12Reader.C +++ b/RunRoot/Ex1_CLAS12Reader.C @@ -57,8 +57,6 @@ void Ex1_CLAS12Reader(){ auto db=TDatabasePDG::Instance(); TLorentzVector beam(0,0,10.6,10.6); TLorentzVector target(0,0,0,db->GetParticle(2212)->Mass()); - //remember these are really just TLorentzVector* - //but std::unique_ptr makes sure they are delted at end of scope TLorentzVector el(0,0,0,db->GetParticle(11)->Mass()); TLorentzVector pr(0,0,0,db->GetParticle(2212)->Mass()); TLorentzVector g1(0,0,0,0); From 1cd50d64a2675c7893201aa38231133571e14a80 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 13:24:03 +0100 Subject: [PATCH 49/56] minor updates --- Clas12Root/HipoROOTOut.cpp | 2 +- README.md | 3 ++- RunRoot/jupy/HipoDraw.ipynb | 3 +-- RunRoot/jupy/HipoToRootTree.ipynb | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Clas12Root/HipoROOTOut.cpp b/Clas12Root/HipoROOTOut.cpp index e39b69f..b37462b 100644 --- a/Clas12Root/HipoROOTOut.cpp +++ b/Clas12Root/HipoROOTOut.cpp @@ -114,7 +114,7 @@ namespace clas12root{ delete exps; varExp1.ReplaceAll("@@","::"); varExp1.ReplaceAll("{}","()"); - cout<<"DONE TString HipoROOTOut::ExpandExpersion "<Draw("2x1") + ParticleHist [1] hists.Hist2D("P.P:P.DetEnergy",100,0,10,100,0,5,"P.P")->Draw("(2x1)") Note you only have to call draw once, and then it only has to loop over the date once. The option (2x1) specifies the dimensions of the pads in the produced canvas, the parenthesis is required. @@ -110,6 +110,7 @@ The region particle should be accessed with P. e.g. P.Theta , P.P , P.Phi , P.Region , P.Time , P.DetEnergy , P.DeltaEnergy , P.Path , P.Pid , P.CalcMass + e.g. P.Region==FT, P.Region==FD ### Jupyter Start a ROOT note book : diff --git a/RunRoot/jupy/HipoDraw.ipynb b/RunRoot/jupy/HipoDraw.ipynb index 42cb4ef..648d85d 100644 --- a/RunRoot/jupy/HipoDraw.ipynb +++ b/RunRoot/jupy/HipoDraw.ipynb @@ -34,8 +34,7 @@ "metadata": {}, "outputs": [], "source": [ - "//ParticleHist hists(\"/WHERE/IS/MY/HIPO/file.hipo\");\n", - "ParticleHist hists(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\");" + "ParticleHist hists(\"/WHERE/IS/MY/HIPO/file.hipo\");" ] }, { diff --git a/RunRoot/jupy/HipoToRootTree.ipynb b/RunRoot/jupy/HipoToRootTree.ipynb index 0ccc76c..7b6e067 100644 --- a/RunRoot/jupy/HipoToRootTree.ipynb +++ b/RunRoot/jupy/HipoToRootTree.ipynb @@ -34,8 +34,7 @@ "metadata": {}, "outputs": [], "source": [ - "//ParticleTree treemaker(\"/WHERE/IS/MY/HIPO/file.hipo\",\"/WHERE/SHOULD/I/PUT/MY/tree.root\");\n", - "ParticleTree treemaker(\"/home/dglazier/fastdata/hipo3test/out_clas_004013.evio.99.hipo\",\"tree.root\");" + "ParticleTree treemaker(\"/WHERE/IS/MY/HIPO/file.hipo\",\"/WHERE/SHOULD/I/PUT/MY/tree.root\");" ] }, { From 1098be065781b94f6d1427178728521673302565 Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 13:52:20 +0100 Subject: [PATCH 50/56] minor --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index bebc053..f3bf308 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,8 @@ Click on the notebook HipoToRootTree.ipynb and follow the tutorial ## Ex 3 Using HipoSelector & PROOFLite +ONLY FOR HIPO4 + This assumes you are aware of and understand the ROOT TSelector and PROOF scheme. See https://root.cern.ch/proof. Create a HipoSelector (similar to tree->MakeSelector("mySelector");), using the executable makeHipoSelector : From f1faf003063691f891bb977b15521e6544912f4a Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 13:54:50 +0100 Subject: [PATCH 51/56] add ProcessEvent example to readme --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index f3bf308..f86f666 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,14 @@ Create a HipoSelector (similar to tree->MakeSelector("mySelector");), using the You should use some meaningful name rather than mySelector. Edit it to perform the tasks you would like. But use the ProcessEvent function instead of the Process function as you would in a TSelector +e.g. + + Bool_t HipoFileSelector::ProcessEvent(){ + + _hist1->Fill(_c12->head()->getStartTime()); + return kTRUE; + } + To execute : From 742c5c308b4c17360fe2a221bf52e9d17a50a59c Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 17 Apr 2019 13:56:28 +0100 Subject: [PATCH 52/56] add ProcessEvent example to readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f86f666..f83d43f 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ Create a HipoSelector (similar to tree->MakeSelector("mySelector");), using the makeHipoSelector mySelector You should use some meaningful name rather than mySelector. -Edit it to perform the tasks you would like. But use the ProcessEvent function instead of the Process function as you would in a TSelector +Edit it to perform the tasks you would like. But use the ProcessEvent function instead of the Process function as you would in a TSelector. You can use the _c12 clas12reader object to access all the data as shown in Ex1_CLAS12Reader.C e.g. From 598149860f473903bb7516515050f4fe029e89d5 Mon Sep 17 00:00:00 2001 From: dglazier Date: Mon, 20 May 2019 13:31:48 +0100 Subject: [PATCH 53/56] Update HipoSelector.cpp remove cout --- Clas12Root/HipoSelector.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Clas12Root/HipoSelector.cpp b/Clas12Root/HipoSelector.cpp index 6efd20c..83fe1c2 100644 --- a/Clas12Root/HipoSelector.cpp +++ b/Clas12Root/HipoSelector.cpp @@ -88,7 +88,6 @@ namespace clas12root{ _c12->getReader().loadRecord(_iRecord); while(_c12->nextInRecord()==true){ - cout<<"PRCE "< Date: Tue, 28 May 2019 13:53:56 +0100 Subject: [PATCH 54/56] add check before scanIndex in case bank is not present in hipo file --- Clas12Banks3/clas12reader.cpp | 2 +- Clas12Banks3/particle_detector.h | 2 +- Clas12Banks4/particle_detector.h | 1 + README.md | 7 +++++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Clas12Banks3/clas12reader.cpp b/Clas12Banks3/clas12reader.cpp index 87b6463..e6a8fa2 100644 --- a/Clas12Banks3/clas12reader.cpp +++ b/Clas12Banks3/clas12reader.cpp @@ -39,7 +39,7 @@ namespace clas12 { _bcher->init("REC::Cherenkov",_reader); _bft->init("REC::ForwardTagger",_reader); _btrck->init("REC::Track",_reader); - _btrck->init("REC::Traj",_reader); + _btraj->init("REC::Traj",_reader); //add some detector regions to their vectors addARegionFDet(); diff --git a/Clas12Banks3/particle_detector.h b/Clas12Banks3/particle_detector.h index ed8fbe5..50d2997 100644 --- a/Clas12Banks3/particle_detector.h +++ b/Clas12Banks3/particle_detector.h @@ -87,7 +87,7 @@ namespace clas12 { //////////////////////////////////////////////////////////////// //override header notify, called at start of event - void notify() override { scanIndex(); } + void notify() override { if(_detector_id_order>-1)scanIndex(); } protected: diff --git a/Clas12Banks4/particle_detector.h b/Clas12Banks4/particle_detector.h index 40f8242..7811251 100644 --- a/Clas12Banks4/particle_detector.h +++ b/Clas12Banks4/particle_detector.h @@ -78,6 +78,7 @@ namespace clas12 { //////////////////////////////////////////////////////////////// //override header notify, called at start of event void notify() override { + if(_detector_id_order==-1) return; bank::notify(); scanIndex(); } diff --git a/README.md b/README.md index f83d43f..e322458 100644 --- a/README.md +++ b/README.md @@ -28,11 +28,18 @@ cd Clas12Tool ## To setup Run ROOT +for cshrc setenv CLAS12TOOL $PWD (the actual path can be added in your bashrc or tchrc) setenv PATH "$PATH":"$CLAS12TOOL/bin" +or for bash + +export CLAS12TOOL=$PWD + +export PATH="$PATH":"$CLAS12TOOL/bin" + ## To install (either Hipo3 or Hipo4) installHipo3 and/or installHipo4 From 38b43b56c5b306dd23ad1f54ab369ecb1d32903b Mon Sep 17 00:00:00 2001 From: dglazier Date: Tue, 4 Jun 2019 09:53:35 +0100 Subject: [PATCH 55/56] add note for chaining files with wildcard --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index e322458..e0ebfaa 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,11 @@ Click on the notebook CLAS12Reader3Pi.ipynb and follow the tutorial particleDraw4 /WHERE/IS/MY/HIPO/file.hipo +Or chain together files with wildcard, note the ' ' + + particleDraw4 '/WHERE/IS/MY/HIPO/file_*.hipo' + + You will get an interactive ROOT prompt where you can draw histograms: ParticleHist [0] hists.Hist1D("P.P",100,0,10,"P.P") @@ -129,6 +134,10 @@ Click on the notebook HipoDraw.ipynb and follow the tutorial ## Ex 4 Filtering and Skimming into a ROOT ntuple (tree) particleTree4 /WHERE/IS/MY/HIPO/file.hipo /OUTPUT/tree.root Ex4_TreeMaker.C + +Or chain together files with wildcard, note the ' ' + + particleTree4 '/WHERE/IS/MY/HIPO/file_*.hipo' /OUTPUT/tree.root Ex4_TreeMaker.C The script $CLAS12ROOT/RunRoot/Ex4_TreeMaker.C defines which branches are to be written and what cuts to put on the event topology. You can copy and edit this file to do what you want e.g. From 28c52242349c15b5200312c594995a378203ddab Mon Sep 17 00:00:00 2001 From: dglazier Date: Wed, 5 Jun 2019 20:20:20 +0100 Subject: [PATCH 56/56] Fix bug reported by Justin Dickovick, particleTree was crashing for >10 branches, added | symbol to string template --- Clas12Root/HipoTreeMaker.cpp | 3 +-- Clas12Root/ParticleHist.cpp | 4 ++-- Clas12Root/ParticleTree.cpp | 22 +++++++++++++++------- Clas12Root/templateParticleTreeAction.C | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Clas12Root/HipoTreeMaker.cpp b/Clas12Root/HipoTreeMaker.cpp index 086d8ad..fea8da1 100644 --- a/Clas12Root/HipoTreeMaker.cpp +++ b/Clas12Root/HipoTreeMaker.cpp @@ -23,7 +23,6 @@ namespace clas12root { } HipoTreeMaker* HipoTreeMaker::Branch(TString varExp,TString condExp){ - TString branchType=varExp; branchType.Remove(0,branchType.Sizeof()-3); //keep /F etc varExp.Remove(varExp.Sizeof()-3,2); //remove /F etc @@ -33,7 +32,7 @@ namespace clas12root { varExp=ExpandExpression(varExp,""); AddAction(varExp); - + return this; } void HipoTreeMaker::Fill(){ diff --git a/Clas12Root/ParticleHist.cpp b/Clas12Root/ParticleHist.cpp index 218720b..27aa26d 100644 --- a/Clas12Root/ParticleHist.cpp +++ b/Clas12Root/ParticleHist.cpp @@ -27,8 +27,8 @@ namespace clas12root { _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; //Cherenkov - _mapOfParts["HTCC"]="p->ft(HTCC)->"; - _mapOfParts["LTCC"]="p->ft(LTCC)->"; + _mapOfParts["HTCC"]="p->che(HTCC)->"; + _mapOfParts["LTCC"]="p->che(LTCC)->"; //Trackers _mapOfParts["DC"]="p->trk(DC)->"; diff --git a/Clas12Root/ParticleTree.cpp b/Clas12Root/ParticleTree.cpp index 70bd72f..642db3e 100644 --- a/Clas12Root/ParticleTree.cpp +++ b/Clas12Root/ParticleTree.cpp @@ -28,8 +28,8 @@ namespace clas12root { _mapOfParts["FTHODO"]="p->ft(FTHODO)->"; //Cherenkov - _mapOfParts["HTCC"]="p->ft(HTCC)->"; - _mapOfParts["LTCC"]="p->ft(LTCC)->"; + _mapOfParts["HTCC"]="p->che(HTCC)->"; + _mapOfParts["LTCC"]="p->che(LTCC)->"; //Trackers _mapOfParts["DC"]="p->trk(DC)->"; @@ -66,25 +66,33 @@ namespace clas12root { typelabel["/I"]="Int_t"; typelabel["/L"]="Long64_t"; typelabel["/S"]="Short_t"; - + TMacro macro(GetCurrMacroName()); - + TList *lines=macro.GetListOfLines(); TObject* obj=macro.GetLineWith("class clas12data"); Int_t place =lines->IndexOf(obj)+2; - + for(UInt_t i=0;i<_branchNames.size();i++){ TString type=typelabel[_branchTypes[i]]; + TString bname=_branchNames[i]; + bname.ReplaceAll(".","_"); + TString strline=TString(" ")+type + " "+bname+";"; + lines->AddAt(new TObjString(strline.Data()),place++); - - TString strvar=Form("VVVV%d",i); + + TString strvar=Form("VVVV%d|",i); + + TString vvvvline=macro.GetLineWith(strvar)->GetString(); + vvvvline.ReplaceAll(strvar,bname); macro.GetLineWith(strvar)->SetString(vvvvline); } + TString strvar{"if(PCCCC)_treedata"}; TString ccccline=macro.GetLineWith(strvar)->GetString(); ccccline.ReplaceAll("PCCCC",_pcut); diff --git a/Clas12Root/templateParticleTreeAction.C b/Clas12Root/templateParticleTreeAction.C index 246f891..8eeacfd 100644 --- a/Clas12Root/templateParticleTreeAction.C +++ b/Clas12Root/templateParticleTreeAction.C @@ -46,7 +46,7 @@ namespace clas12root{ if(ECCCC) continue; for(auto& p : *particles){ - ////particleData.VVVVIIII = XXXX; + ////particleData.VVVVIIII| = XXXX; if(PCCCC)_treedata->push_back(particleData); }